From b7c4f1e305408221c9da7d86304953a5f9e7c93c Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Mon, 18 Feb 2019 14:52:29 -0600 Subject: [PATCH 001/109] Standardized optimization flags in make_defs.mk. Details: - Per Dave Love's recommendation in issue #300, this commit defines COPTFLAGS := -03 and CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations in the make_defs.mk for all Intel- and AMD-based configurations. --- config/amd64/make_defs.mk | 6 +++++- config/bulldozer/make_defs.mk | 6 +++++- config/excavator/make_defs.mk | 6 +++++- config/generic/make_defs.mk | 4 ++++ config/haswell/make_defs.mk | 4 ++++ config/intel64/make_defs.mk | 4 ++++ config/knc/make_defs.mk | 4 ++++ config/knl/make_defs.mk | 2 +- config/penryn/make_defs.mk | 6 +++++- config/piledriver/make_defs.mk | 6 +++++- config/sandybridge/make_defs.mk | 4 ++++ config/skx/make_defs.mk | 2 +- config/steamroller/make_defs.mk | 6 +++++- config/template/make_defs.mk | 2 +- config/x86_64/make_defs.mk | 4 ++++ config/zen/make_defs.mk | 17 +++++++++++++++++ 16 files changed, 74 insertions(+), 9 deletions(-) diff --git a/config/amd64/make_defs.mk b/config/amd64/make_defs.mk index afea69558..668c7275e 100644 --- a/config/amd64/make_defs.mk +++ b/config/amd64/make_defs.mk @@ -57,7 +57,7 @@ endif ifeq ($(DEBUG_TYPE),noopt) COPTFLAGS := -O0 else -COPTFLAGS := -O2 -fomit-frame-pointer +COPTFLAGS := -O3 endif # Flags specific to optimized kernels. @@ -74,7 +74,11 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) +ifeq ($(CC_VENDOR),gcc) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +else CRVECFLAGS := $(CKVECFLAGS) +endif # Store all of the variables here to new variables containing the # configuration name. diff --git a/config/bulldozer/make_defs.mk b/config/bulldozer/make_defs.mk index 15870c4cb..28328e4b7 100644 --- a/config/bulldozer/make_defs.mk +++ b/config/bulldozer/make_defs.mk @@ -57,7 +57,7 @@ endif ifeq ($(DEBUG_TYPE),noopt) COPTFLAGS := -O0 else -COPTFLAGS := -O2 -funroll-all-loops +COPTFLAGS := -O3 endif # Flags specific to optimized kernels. @@ -74,7 +74,11 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) +ifeq ($(CC_VENDOR),gcc) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +else CRVECFLAGS := $(CKVECFLAGS) +endif # Store all of the variables here to new variables containing the # configuration name. diff --git a/config/excavator/make_defs.mk b/config/excavator/make_defs.mk index 45fff9690..82dcd8233 100644 --- a/config/excavator/make_defs.mk +++ b/config/excavator/make_defs.mk @@ -57,7 +57,7 @@ endif ifeq ($(DEBUG_TYPE),noopt) COPTFLAGS := -O0 else -COPTFLAGS := -O2 -fomit-frame-pointer +COPTFLAGS := -O3 endif # Flags specific to optimized kernels. @@ -74,7 +74,11 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) +ifeq ($(CC_VENDOR),gcc) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +else CRVECFLAGS := $(CKVECFLAGS) +endif # Store all of the variables here to new variables containing the # configuration name. diff --git a/config/generic/make_defs.mk b/config/generic/make_defs.mk index d491d072e..93e4d5212 100644 --- a/config/generic/make_defs.mk +++ b/config/generic/make_defs.mk @@ -78,7 +78,11 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) +ifeq ($(CC_VENDOR),gcc) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +else CRVECFLAGS := $(CKVECFLAGS) +endif # Store all of the variables here to new variables containing the # configuration name. diff --git a/config/haswell/make_defs.mk b/config/haswell/make_defs.mk index 5d2f0a73b..41b61540a 100644 --- a/config/haswell/make_defs.mk +++ b/config/haswell/make_defs.mk @@ -78,7 +78,11 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) +ifeq ($(CC_VENDOR),gcc) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +else CRVECFLAGS := $(CKVECFLAGS) +endif # Store all of the variables here to new variables containing the # configuration name. diff --git a/config/intel64/make_defs.mk b/config/intel64/make_defs.mk index 442b81e3a..3a9cb8895 100644 --- a/config/intel64/make_defs.mk +++ b/config/intel64/make_defs.mk @@ -78,7 +78,11 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) +ifeq ($(CC_VENDOR),gcc) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +else CRVECFLAGS := $(CKVECFLAGS) +endif # Store all of the variables here to new variables containing the # configuration name. diff --git a/config/knc/make_defs.mk b/config/knc/make_defs.mk index 367b64b27..48b89159f 100644 --- a/config/knc/make_defs.mk +++ b/config/knc/make_defs.mk @@ -70,7 +70,11 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) +ifeq ($(CC_VENDOR),gcc) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +else CRVECFLAGS := $(CKVECFLAGS) +endif # Override the default value for LDFLAGS. LDFLAGS := -mmic diff --git a/config/knl/make_defs.mk b/config/knl/make_defs.mk index f4165f788..e239a2fdf 100644 --- a/config/knl/make_defs.mk +++ b/config/knl/make_defs.mk @@ -99,7 +99,7 @@ endif # Note: We use AVX2 for reference kernels instead of AVX-512. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := -march=knl -mno-avx512f -mno-avx512pf -mno-avx512er -mno-avx512cd +CRVECFLAGS := -march=knl -mno-avx512f -mno-avx512pf -mno-avx512er -mno-avx512cd -funsafe-loop-optimizations else ifeq ($(CC_VENDOR),icc) CRVECFLAGS := -xMIC-AVX512 diff --git a/config/penryn/make_defs.mk b/config/penryn/make_defs.mk index 294dd616a..175c8d5bf 100644 --- a/config/penryn/make_defs.mk +++ b/config/penryn/make_defs.mk @@ -57,7 +57,7 @@ endif ifeq ($(DEBUG_TYPE),noopt) COPTFLAGS := -O0 else -COPTFLAGS := -O2 -fomit-frame-pointer +COPTFLAGS := -O3 endif # Flags specific to optimized kernels. @@ -78,7 +78,11 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) +ifeq ($(CC_VENDOR),gcc) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +else CRVECFLAGS := $(CKVECFLAGS) +endif # Store all of the variables here to new variables containing the # configuration name. diff --git a/config/piledriver/make_defs.mk b/config/piledriver/make_defs.mk index 155b0c002..d5ebc1f14 100644 --- a/config/piledriver/make_defs.mk +++ b/config/piledriver/make_defs.mk @@ -57,7 +57,7 @@ endif ifeq ($(DEBUG_TYPE),noopt) COPTFLAGS := -O0 else -COPTFLAGS := -O2 -fomit-frame-pointer +COPTFLAGS := -O3 endif # Flags specific to optimized kernels. @@ -74,7 +74,11 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) +ifeq ($(CC_VENDOR),gcc) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +else CRVECFLAGS := $(CKVECFLAGS) +endif # Store all of the variables here to new variables containing the # configuration name. diff --git a/config/sandybridge/make_defs.mk b/config/sandybridge/make_defs.mk index f0d694f8c..02fb4d641 100644 --- a/config/sandybridge/make_defs.mk +++ b/config/sandybridge/make_defs.mk @@ -78,7 +78,11 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) +ifeq ($(CC_VENDOR),gcc) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +else CRVECFLAGS := $(CKVECFLAGS) +endif # Store all of the variables here to new variables containing the # configuration name. diff --git a/config/skx/make_defs.mk b/config/skx/make_defs.mk index e9319e476..98c5ebd6f 100644 --- a/config/skx/make_defs.mk +++ b/config/skx/make_defs.mk @@ -89,7 +89,7 @@ endif # to overcome the AVX-512 frequency drop". (Issue #187) CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := -march=skylake-avx512 -mno-avx512f -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512cd +CRVECFLAGS := -march=skylake-avx512 -mno-avx512f -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512cd -funsafe-loop-optimizations else ifeq ($(CC_VENDOR),icc) CRVECFLAGS := -xCORE-AVX2 diff --git a/config/steamroller/make_defs.mk b/config/steamroller/make_defs.mk index 6c093d244..18c5c6461 100644 --- a/config/steamroller/make_defs.mk +++ b/config/steamroller/make_defs.mk @@ -57,7 +57,7 @@ endif ifeq ($(DEBUG_TYPE),noopt) COPTFLAGS := -O0 else -COPTFLAGS := -O2 -fomit-frame-pointer +COPTFLAGS := -O3 endif # Flags specific to optimized kernels. @@ -74,7 +74,11 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) +ifeq ($(CC_VENDOR),gcc) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +else CRVECFLAGS := $(CKVECFLAGS) +endif # Store all of the variables here to new variables containing the # configuration name. diff --git a/config/template/make_defs.mk b/config/template/make_defs.mk index ff89757c7..35edf71a1 100644 --- a/config/template/make_defs.mk +++ b/config/template/make_defs.mk @@ -57,7 +57,7 @@ endif ifeq ($(DEBUG_TYPE),noopt) COPTFLAGS := -O0 else -COPTFLAGS := -O2 +COPTFLAGS := -O3 endif # Flags specific to optimized kernels. diff --git a/config/x86_64/make_defs.mk b/config/x86_64/make_defs.mk index 375ea7dec..0c6c521bd 100644 --- a/config/x86_64/make_defs.mk +++ b/config/x86_64/make_defs.mk @@ -78,7 +78,11 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) +ifeq ($(CC_VENDOR),gcc) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +else CRVECFLAGS := $(CKVECFLAGS) +endif # Store all of the variables here to new variables containing the # configuration name. diff --git a/config/zen/make_defs.mk b/config/zen/make_defs.mk index ea5f0802c..f16d98836 100644 --- a/config/zen/make_defs.mk +++ b/config/zen/make_defs.mk @@ -46,9 +46,26 @@ AMD_CONFIG_FILE := amd_config.mk AMD_CONFIG_PATH := $(BASE_SHARE_PATH)/config/zen -include $(AMD_CONFIG_PATH)/$(AMD_CONFIG_FILE) +ifeq ($(DEBUG_TYPE),noopt) +COPTFLAGS := -O0 +else +COPTFLAGS := -O3 +endif + +# Flags specific to optimized kernels. +CKOPTFLAGS := $(COPTFLAGS) ifeq ($(CC_VENDOR),gcc) CKVECFLAGS += -march=znver1 endif +endif + +# Flags specific to reference kernels. +CROPTFLAGS := $(CKOPTFLAGS) +ifeq ($(CC_VENDOR),gcc) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +else +CRVECFLAGS := $(CKVECFLAGS) +endif # Store all of the variables here to new variables containing the # configuration name. From 7128d4b94be99fce661cd2ae5dfe430f202d625d Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Mon, 18 Feb 2019 16:51:38 -0600 Subject: [PATCH 002/109] Removed -funsafe-loop-optimizations from families. Details: - Removed -funsafe-loop-optimizations from the configuration families affected by 6a014a3, specifically: intel64, amd64, and x86_64. This is part of an attempt to debug why the sde, as executed by Travis CI, is crashing via the following error: TID 0 SDE-ERROR: Executed instruction not valid for specified chip (ICELAKE): 0x9172a5: bextr_xop rax, rcx, 0x103 --- config/amd64/make_defs.mk | 2 +- config/intel64/make_defs.mk | 2 +- config/x86_64/make_defs.mk | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/amd64/make_defs.mk b/config/amd64/make_defs.mk index 668c7275e..70c0b692b 100644 --- a/config/amd64/make_defs.mk +++ b/config/amd64/make_defs.mk @@ -75,7 +75,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/intel64/make_defs.mk b/config/intel64/make_defs.mk index 3a9cb8895..af462fdc3 100644 --- a/config/intel64/make_defs.mk +++ b/config/intel64/make_defs.mk @@ -79,7 +79,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/x86_64/make_defs.mk b/config/x86_64/make_defs.mk index 0c6c521bd..4d038ff04 100644 --- a/config/x86_64/make_defs.mk +++ b/config/x86_64/make_defs.mk @@ -79,7 +79,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) else CRVECFLAGS := $(CKVECFLAGS) endif From 24adee071c3d2cde1b021b084312091f92492770 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Mon, 18 Feb 2019 17:07:35 -0600 Subject: [PATCH 003/109] Removed -funsafe-loop-optimizations from piledriver. Details: - Error persists; continuing debugging from bf0fb78c by removing -funsafe-loop-optimizations from piledriver configuration. --- config/piledriver/make_defs.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/piledriver/make_defs.mk b/config/piledriver/make_defs.mk index d5ebc1f14..213f78056 100644 --- a/config/piledriver/make_defs.mk +++ b/config/piledriver/make_defs.mk @@ -75,7 +75,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) else CRVECFLAGS := $(CKVECFLAGS) endif From 176e4c68609b67dced8ddbd02cf28a97b9038308 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Mon, 18 Feb 2019 17:29:51 -0600 Subject: [PATCH 004/109] Removed -funsafe-loop-optimizations from all configs. Details: - Error persists. Removed -funsafe-loop-optimizations from all remaining sub-configurations. --- config/bulldozer/make_defs.mk | 2 +- config/excavator/make_defs.mk | 2 +- config/generic/make_defs.mk | 2 +- config/haswell/make_defs.mk | 2 +- config/knc/make_defs.mk | 2 +- config/knl/make_defs.mk | 2 +- config/penryn/make_defs.mk | 2 +- config/sandybridge/make_defs.mk | 2 +- config/skx/make_defs.mk | 2 +- config/steamroller/make_defs.mk | 2 +- config/zen/make_defs.mk | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/config/bulldozer/make_defs.mk b/config/bulldozer/make_defs.mk index 28328e4b7..6a75d199e 100644 --- a/config/bulldozer/make_defs.mk +++ b/config/bulldozer/make_defs.mk @@ -75,7 +75,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/excavator/make_defs.mk b/config/excavator/make_defs.mk index 82dcd8233..40a552198 100644 --- a/config/excavator/make_defs.mk +++ b/config/excavator/make_defs.mk @@ -75,7 +75,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/generic/make_defs.mk b/config/generic/make_defs.mk index 93e4d5212..3388291da 100644 --- a/config/generic/make_defs.mk +++ b/config/generic/make_defs.mk @@ -79,7 +79,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/haswell/make_defs.mk b/config/haswell/make_defs.mk index 41b61540a..e33b2ad11 100644 --- a/config/haswell/make_defs.mk +++ b/config/haswell/make_defs.mk @@ -79,7 +79,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/knc/make_defs.mk b/config/knc/make_defs.mk index 48b89159f..ba2209c16 100644 --- a/config/knc/make_defs.mk +++ b/config/knc/make_defs.mk @@ -71,7 +71,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/knl/make_defs.mk b/config/knl/make_defs.mk index e239a2fdf..f4165f788 100644 --- a/config/knl/make_defs.mk +++ b/config/knl/make_defs.mk @@ -99,7 +99,7 @@ endif # Note: We use AVX2 for reference kernels instead of AVX-512. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := -march=knl -mno-avx512f -mno-avx512pf -mno-avx512er -mno-avx512cd -funsafe-loop-optimizations +CRVECFLAGS := -march=knl -mno-avx512f -mno-avx512pf -mno-avx512er -mno-avx512cd else ifeq ($(CC_VENDOR),icc) CRVECFLAGS := -xMIC-AVX512 diff --git a/config/penryn/make_defs.mk b/config/penryn/make_defs.mk index 175c8d5bf..060c06609 100644 --- a/config/penryn/make_defs.mk +++ b/config/penryn/make_defs.mk @@ -79,7 +79,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/sandybridge/make_defs.mk b/config/sandybridge/make_defs.mk index 02fb4d641..e9e5f3be3 100644 --- a/config/sandybridge/make_defs.mk +++ b/config/sandybridge/make_defs.mk @@ -79,7 +79,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/skx/make_defs.mk b/config/skx/make_defs.mk index 98c5ebd6f..e9319e476 100644 --- a/config/skx/make_defs.mk +++ b/config/skx/make_defs.mk @@ -89,7 +89,7 @@ endif # to overcome the AVX-512 frequency drop". (Issue #187) CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := -march=skylake-avx512 -mno-avx512f -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512cd -funsafe-loop-optimizations +CRVECFLAGS := -march=skylake-avx512 -mno-avx512f -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512cd else ifeq ($(CC_VENDOR),icc) CRVECFLAGS := -xCORE-AVX2 diff --git a/config/steamroller/make_defs.mk b/config/steamroller/make_defs.mk index 18c5c6461..656076fd9 100644 --- a/config/steamroller/make_defs.mk +++ b/config/steamroller/make_defs.mk @@ -75,7 +75,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/zen/make_defs.mk b/config/zen/make_defs.mk index f16d98836..882ccfef9 100644 --- a/config/zen/make_defs.mk +++ b/config/zen/make_defs.mk @@ -62,7 +62,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) else CRVECFLAGS := $(CKVECFLAGS) endif From e7b73bf1ed417516b86b042d1abe662d2aa13f11 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Mon, 18 Feb 2019 18:04:38 -0600 Subject: [PATCH 005/109] Reverted piledriver COPTFLAGS from -O3 to -O2. Details: - Debugging continues; changing COPTFLAGS for piledriver subconfig from -O3 to -O2, its original value prior to 6a014a3. --- config/piledriver/make_defs.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/piledriver/make_defs.mk b/config/piledriver/make_defs.mk index 213f78056..87b1b8644 100644 --- a/config/piledriver/make_defs.mk +++ b/config/piledriver/make_defs.mk @@ -57,7 +57,7 @@ endif ifeq ($(DEBUG_TYPE),noopt) COPTFLAGS := -O0 else -COPTFLAGS := -O3 +COPTFLAGS := -O2 endif # Flags specific to optimized kernels. From e62bdd4df1d573d51bd2483a5d5cd2aa0b26e7b2 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Mon, 18 Feb 2019 18:35:30 -0600 Subject: [PATCH 006/109] Disable TBM, XOP, LWP instructions in AMD configs. Details: - Added -mno-tbm -mno-xop -mno-lwp to CKVECFLAGS in bulldozer, piledriver, steamroller, and excavator configurations to explicitly disable AMD's bulldozer-era TBM, XOP, and LWP instruction sets in an attempt to fix the invalid instruction error that has plagued Travis CI builds since 6a014a3. Thanks to Devin Matthews for pointing out that the offending instruction was part of TBM (issue #300). - Restored -O3 to piledriver configuration's COPTFLAGS. --- config/bulldozer/make_defs.mk | 4 ++-- config/excavator/make_defs.mk | 4 ++-- config/piledriver/make_defs.mk | 6 +++--- config/steamroller/make_defs.mk | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/config/bulldozer/make_defs.mk b/config/bulldozer/make_defs.mk index 6a75d199e..06f7d8251 100644 --- a/config/bulldozer/make_defs.mk +++ b/config/bulldozer/make_defs.mk @@ -63,10 +63,10 @@ endif # Flags specific to optimized kernels. CKOPTFLAGS := $(COPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CKVECFLAGS := -mfpmath=sse -mavx -mfma4 -march=bdver1 +CKVECFLAGS := -mfpmath=sse -mavx -mfma4 -march=bdver1 -mno-tbm -mno-xop -mno-lwp else ifeq ($(CC_VENDOR),clang) -CKVECFLAGS := -mfpmath=sse -mavx -mfma4 -march=bdver1 +CKVECFLAGS := -mfpmath=sse -mavx -mfma4 -march=bdver1 -mno-tbm -mno-xop -mno-lwp else $(error gcc or clang are required for this configuration.) endif diff --git a/config/excavator/make_defs.mk b/config/excavator/make_defs.mk index 40a552198..48de8ed50 100644 --- a/config/excavator/make_defs.mk +++ b/config/excavator/make_defs.mk @@ -63,10 +63,10 @@ endif # Flags specific to optimized kernels. CKOPTFLAGS := $(COPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CKVECFLAGS := -mfpmath=sse -mavx -mfma -mno-fma4 -march=bdver4 +CKVECFLAGS := -mfpmath=sse -mavx -mfma -march=bdver4 -mno-fma4 -mno-tbm -mno-xop -mno-lwp else ifeq ($(CC_VENDOR),clang) -CKVECFLAGS := -mfpmath=sse -mavx -mfma -mno-fma4 -march=bdver4 +CKVECFLAGS := -mfpmath=sse -mavx -mfma -march=bdver4 -mno-fma4 -mno-tbm -mno-xop -mno-lwp else $(error gcc or clang are required for this configuration.) endif diff --git a/config/piledriver/make_defs.mk b/config/piledriver/make_defs.mk index 87b1b8644..425040692 100644 --- a/config/piledriver/make_defs.mk +++ b/config/piledriver/make_defs.mk @@ -57,16 +57,16 @@ endif ifeq ($(DEBUG_TYPE),noopt) COPTFLAGS := -O0 else -COPTFLAGS := -O2 +COPTFLAGS := -O3 endif # Flags specific to optimized kernels. CKOPTFLAGS := $(COPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CKVECFLAGS := -mfpmath=sse -mavx -mfma -mno-fma4 -march=bdver2 +CKVECFLAGS := -mfpmath=sse -mavx -mfma -march=bdver2 -mno-fma4 -mno-tbm -mno-xop -mno-lwp else ifeq ($(CC_VENDOR),clang) -CKVECFLAGS := -mfpmath=sse -mavx -mfma -mno-fma4 -march=bdver2 +CKVECFLAGS := -mfpmath=sse -mavx -mfma -march=bdver2 -mno-fma4 -mno-tbm -mno-xop -mno-lwp else $(error gcc or clang are required for this configuration.) endif diff --git a/config/steamroller/make_defs.mk b/config/steamroller/make_defs.mk index 656076fd9..58315d7f5 100644 --- a/config/steamroller/make_defs.mk +++ b/config/steamroller/make_defs.mk @@ -63,10 +63,10 @@ endif # Flags specific to optimized kernels. CKOPTFLAGS := $(COPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CKVECFLAGS := -mfpmath=sse -mavx -mfma -mno-fma4 -march=bdver3 +CKVECFLAGS := -mfpmath=sse -mavx -mfma -march=bdver3 -mno-fma4 -mno-tbm -mno-xop -mno-lwp else ifeq ($(CC_VENDOR),clang) -CKVECFLAGS := -mfpmath=sse -mavx -mfma -mno-fma4 -march=bdver3 +CKVECFLAGS := -mfpmath=sse -mavx -mfma -march=bdver3 -mno-fma4 -mno-tbm -mno-xop -mno-lwp else $(error gcc or clang are required for this configuration.) endif From 9a42c1a323afd2ea4c97fbdb9e4597ca29f2fc39 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Mon, 18 Feb 2019 19:16:01 -0600 Subject: [PATCH 007/109] Restored -funsafe-loop-optimizations to subconfigs. Details: - Restored use of -funsafe-loop-optimizations in the definitions of CRVECFLAGS (when using gcc), but only for sub-configurations (and not configuration families such as amd64, intel64, and x86_64). This more or less reverts 5190d05 and 6cf1550. --- config/bulldozer/make_defs.mk | 2 +- config/excavator/make_defs.mk | 2 +- config/haswell/make_defs.mk | 2 +- config/knc/make_defs.mk | 2 +- config/knl/make_defs.mk | 2 +- config/penryn/make_defs.mk | 2 +- config/piledriver/make_defs.mk | 2 +- config/sandybridge/make_defs.mk | 2 +- config/skx/make_defs.mk | 2 +- config/steamroller/make_defs.mk | 2 +- config/zen/make_defs.mk | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/config/bulldozer/make_defs.mk b/config/bulldozer/make_defs.mk index 06f7d8251..2e7c0db5a 100644 --- a/config/bulldozer/make_defs.mk +++ b/config/bulldozer/make_defs.mk @@ -75,7 +75,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/excavator/make_defs.mk b/config/excavator/make_defs.mk index 48de8ed50..30c885601 100644 --- a/config/excavator/make_defs.mk +++ b/config/excavator/make_defs.mk @@ -75,7 +75,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/haswell/make_defs.mk b/config/haswell/make_defs.mk index e33b2ad11..41b61540a 100644 --- a/config/haswell/make_defs.mk +++ b/config/haswell/make_defs.mk @@ -79,7 +79,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/knc/make_defs.mk b/config/knc/make_defs.mk index ba2209c16..48b89159f 100644 --- a/config/knc/make_defs.mk +++ b/config/knc/make_defs.mk @@ -71,7 +71,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/knl/make_defs.mk b/config/knl/make_defs.mk index f4165f788..e239a2fdf 100644 --- a/config/knl/make_defs.mk +++ b/config/knl/make_defs.mk @@ -99,7 +99,7 @@ endif # Note: We use AVX2 for reference kernels instead of AVX-512. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := -march=knl -mno-avx512f -mno-avx512pf -mno-avx512er -mno-avx512cd +CRVECFLAGS := -march=knl -mno-avx512f -mno-avx512pf -mno-avx512er -mno-avx512cd -funsafe-loop-optimizations else ifeq ($(CC_VENDOR),icc) CRVECFLAGS := -xMIC-AVX512 diff --git a/config/penryn/make_defs.mk b/config/penryn/make_defs.mk index 060c06609..175c8d5bf 100644 --- a/config/penryn/make_defs.mk +++ b/config/penryn/make_defs.mk @@ -79,7 +79,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/piledriver/make_defs.mk b/config/piledriver/make_defs.mk index 425040692..c5313d76b 100644 --- a/config/piledriver/make_defs.mk +++ b/config/piledriver/make_defs.mk @@ -75,7 +75,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/sandybridge/make_defs.mk b/config/sandybridge/make_defs.mk index e9e5f3be3..02fb4d641 100644 --- a/config/sandybridge/make_defs.mk +++ b/config/sandybridge/make_defs.mk @@ -79,7 +79,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/skx/make_defs.mk b/config/skx/make_defs.mk index e9319e476..98c5ebd6f 100644 --- a/config/skx/make_defs.mk +++ b/config/skx/make_defs.mk @@ -89,7 +89,7 @@ endif # to overcome the AVX-512 frequency drop". (Issue #187) CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := -march=skylake-avx512 -mno-avx512f -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512cd +CRVECFLAGS := -march=skylake-avx512 -mno-avx512f -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512cd -funsafe-loop-optimizations else ifeq ($(CC_VENDOR),icc) CRVECFLAGS := -xCORE-AVX2 diff --git a/config/steamroller/make_defs.mk b/config/steamroller/make_defs.mk index 58315d7f5..351720296 100644 --- a/config/steamroller/make_defs.mk +++ b/config/steamroller/make_defs.mk @@ -75,7 +75,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/zen/make_defs.mk b/config/zen/make_defs.mk index 882ccfef9..f16d98836 100644 --- a/config/zen/make_defs.mk +++ b/config/zen/make_defs.mk @@ -62,7 +62,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) +CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif From 29d5bcb1c88ceb3b58acff632ed53bb0ed57c898 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Wed, 20 Feb 2019 16:10:10 -0600 Subject: [PATCH 008/109] Changed unsafe-loop to unsafe-math optimizations. Details: - Changed -funsafe-loop-optimizations (re-)introduced in 7690855 for make_defs.mk files' CRVECFLAGS to -funsafe-math-optimizations (to account for a miscommunication in issue #300). Thanks to Dave Love for this suggestion and Jeff Hammond for his feedback on the topic. --- config/bulldozer/make_defs.mk | 2 +- config/excavator/make_defs.mk | 2 +- config/haswell/make_defs.mk | 2 +- config/knc/make_defs.mk | 2 +- config/knl/make_defs.mk | 2 +- config/penryn/make_defs.mk | 2 +- config/piledriver/make_defs.mk | 2 +- config/sandybridge/make_defs.mk | 2 +- config/skx/make_defs.mk | 2 +- config/steamroller/make_defs.mk | 2 +- config/zen/make_defs.mk | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/config/bulldozer/make_defs.mk b/config/bulldozer/make_defs.mk index 2e7c0db5a..dec89a4c3 100644 --- a/config/bulldozer/make_defs.mk +++ b/config/bulldozer/make_defs.mk @@ -75,7 +75,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) -funsafe-math-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/excavator/make_defs.mk b/config/excavator/make_defs.mk index 30c885601..deb85c79b 100644 --- a/config/excavator/make_defs.mk +++ b/config/excavator/make_defs.mk @@ -75,7 +75,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) -funsafe-math-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/haswell/make_defs.mk b/config/haswell/make_defs.mk index 41b61540a..f08d5a937 100644 --- a/config/haswell/make_defs.mk +++ b/config/haswell/make_defs.mk @@ -79,7 +79,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) #-funsafe-math-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/knc/make_defs.mk b/config/knc/make_defs.mk index 48b89159f..be3c9019d 100644 --- a/config/knc/make_defs.mk +++ b/config/knc/make_defs.mk @@ -71,7 +71,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) -funsafe-math-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/knl/make_defs.mk b/config/knl/make_defs.mk index e239a2fdf..b08cf1e4d 100644 --- a/config/knl/make_defs.mk +++ b/config/knl/make_defs.mk @@ -99,7 +99,7 @@ endif # Note: We use AVX2 for reference kernels instead of AVX-512. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := -march=knl -mno-avx512f -mno-avx512pf -mno-avx512er -mno-avx512cd -funsafe-loop-optimizations +CRVECFLAGS := -march=knl -mno-avx512f -mno-avx512pf -mno-avx512er -mno-avx512cd -funsafe-math-optimizations else ifeq ($(CC_VENDOR),icc) CRVECFLAGS := -xMIC-AVX512 diff --git a/config/penryn/make_defs.mk b/config/penryn/make_defs.mk index 175c8d5bf..41d2d939f 100644 --- a/config/penryn/make_defs.mk +++ b/config/penryn/make_defs.mk @@ -79,7 +79,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) -funsafe-math-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/piledriver/make_defs.mk b/config/piledriver/make_defs.mk index c5313d76b..bb23fbece 100644 --- a/config/piledriver/make_defs.mk +++ b/config/piledriver/make_defs.mk @@ -75,7 +75,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) -funsafe-math-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/sandybridge/make_defs.mk b/config/sandybridge/make_defs.mk index 02fb4d641..ba18e4f32 100644 --- a/config/sandybridge/make_defs.mk +++ b/config/sandybridge/make_defs.mk @@ -79,7 +79,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) -funsafe-math-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/skx/make_defs.mk b/config/skx/make_defs.mk index 98c5ebd6f..27bea5ef5 100644 --- a/config/skx/make_defs.mk +++ b/config/skx/make_defs.mk @@ -89,7 +89,7 @@ endif # to overcome the AVX-512 frequency drop". (Issue #187) CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := -march=skylake-avx512 -mno-avx512f -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512cd -funsafe-loop-optimizations +CRVECFLAGS := -march=skylake-avx512 -mno-avx512f -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512cd -funsafe-math-optimizations else ifeq ($(CC_VENDOR),icc) CRVECFLAGS := -xCORE-AVX2 diff --git a/config/steamroller/make_defs.mk b/config/steamroller/make_defs.mk index 351720296..a5b670704 100644 --- a/config/steamroller/make_defs.mk +++ b/config/steamroller/make_defs.mk @@ -75,7 +75,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) -funsafe-math-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif diff --git a/config/zen/make_defs.mk b/config/zen/make_defs.mk index f16d98836..bfbaa9871 100644 --- a/config/zen/make_defs.mk +++ b/config/zen/make_defs.mk @@ -62,7 +62,7 @@ endif # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations +CRVECFLAGS := $(CKVECFLAGS) -funsafe-math-optimizations else CRVECFLAGS := $(CKVECFLAGS) endif From 84282bba54709fb3c152cb54be5bb825da26272b Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Fri, 22 Feb 2019 16:55:30 -0600 Subject: [PATCH 009/109] Updates to 3m4m/matlab scripts. Details: - Minor updates to matlab graph-generating scripts. - Added a plot_all.m script that is more of a scratchpad for copying and pasting function invocations into matlab to generate plots that are presently of interest to us. --- test/3m4m/matlab/plot_all.m | 9 +++++++++ test/3m4m/matlab/plot_l3_perf.m | 28 ++++++++++++++++------------ test/3m4m/matlab/plot_panel_4x5.m | 14 ++++++++------ 3 files changed, 33 insertions(+), 18 deletions(-) create mode 100644 test/3m4m/matlab/plot_all.m diff --git a/test/3m4m/matlab/plot_all.m b/test/3m4m/matlab/plot_all.m new file mode 100644 index 000000000..e5b478f23 --- /dev/null +++ b/test/3m4m/matlab/plot_all.m @@ -0,0 +1,9 @@ +% tx2 +plot_panel_4x5(2.2,8,1, '../results/tx2/st', 'tx2', 'ARMPL'); close; clear all; +plot_panel_4x5(2.2,8,28,'../results/tx2/jc4ic7','tx2_jc4ic7','ARMPL'); close; clear all; +plot_panel_4x5(2.2,8,56,'../results/tx2/jc8ic7','tx2_jc8ic7','ARMPL'); close; clear all; + +% skx +plot_panel_4x5(2.0,32,1,'../results/skx/st/20190218','skx','MKL'); close; clear all; +plot_panel_4x5(2.0,32,26,'../results/skx/jc2ic13/20190218','skx_jc2ic13','MKL'); close; clear all; +plot_panel_4x5(2.0,32,52,'../results/skx/jc4ic13/20190218','skx_jc4ic13','MKL'); close; clear all; diff --git a/test/3m4m/matlab/plot_l3_perf.m b/test/3m4m/matlab/plot_l3_perf.m index 9700faf01..181871039 100644 --- a/test/3m4m/matlab/plot_l3_perf.m +++ b/test/3m4m/matlab/plot_l3_perf.m @@ -1,7 +1,7 @@ function r_val = plot_l3_perf( opname, ... data_blis, ... data_open, ... - data_mkl, ... + data_vend, vend_str, ... nth, ... rows, cols, ... cfreq, ... @@ -16,7 +16,7 @@ end % Set line properties. color_blis = 'k'; lines_blis = '-'; markr_blis = ''; color_open = 'r'; lines_open = '--'; markr_open = 'o'; -color_mkl = 'b'; lines_mkl = '--'; markr_mkl = '.'; +color_vend = 'b'; lines_vend = '-.'; markr_vend = '.'; % Compute the peak performance in terms of the number of double flops % executable per cycle and the clock rate. @@ -43,7 +43,9 @@ titlename = sprintf( titlename, title_opname ); % Set the legend strings. blis_legend = sprintf( 'BLIS' ); open_legend = sprintf( 'OpenBLAS' ); -mkl_legend = sprintf( 'MKL' ); +%vend_legend = sprintf( 'MKL' ); +%vend_legend = sprintf( 'ARMPL' ); +vend_legend = vend_str; % Determine the final dimension. %n_points = size( data_blis, 1 ); @@ -89,8 +91,8 @@ blis_ln = line( x_axis( :, 1 ), data_blis( :, flopscol ) / nth, ... open_ln = line( x_axis( :, 1 ), data_open( :, flopscol ) / nth, ... 'Color',color_open, 'LineStyle',lines_open, ... 'LineWidth',linesize ); -mkl_ln = line( x_axis( :, 1 ), data_mkl( :, flopscol ) / nth, ... - 'Color',color_mkl, 'LineStyle',lines_mkl, ... +vend_ln = line( x_axis( :, 1 ), data_vend( :, flopscol ) / nth, ... + 'Color',color_vend, 'LineStyle',lines_vend, ... 'LineWidth',linesize ); @@ -104,41 +106,43 @@ if x_end == 10000 || x_end == 8000 end if rows == 4 && cols == 5 && ... - theid == 5 + theid == 3 if nth == 1 leg = legend( ... [ ... blis_ln ... open_ln ... - mkl_ln ... + vend_ln ... ], ... blis_legend, ... open_legend, ... - mkl_legend, ... + vend_legend, ... 'Location', legend_loc ); set( leg,'Box','off' ); set( leg,'Color','none' ); set( leg,'FontSize',fontsize-3 ); set( leg,'Units','inches' ); %set( leg,'Position',[3.15 10.2 0.7 0.3 ] ); % 1600 1200 - set( leg,'Position',[4.20 12.7 0.7 0.3 ] ); % 2000 1500 + %set( leg,'Position',[4.20 12.7 0.7 0.3 ] ); % (0,0) + set( leg,'Position',[11.20 12.7 0.7 0.3 ] ); % (0,2) else leg = legend( ... [ ... blis_ln ... open_ln ... - mkl_ln ... + vend_ln ... ], ... blis_legend, ... open_legend, ... - mkl_legend, ... + vend_legend, ... 'Location', legend_loc ); set( leg,'Box','off' ); set( leg,'Color','none' ); set( leg,'FontSize',fontsize-3 ); set( leg,'Units','inches' ); %set( leg,'Position',[3.15 10.2 0.7 0.3 ] ); % 1600 1200 - set( leg,'Position',[17.60 14.30 0.7 0.3 ] ); % 2000 1500 + %set( leg,'Position',[17.60 14.30 0.7 0.3 ] ); % (0,4) + set( leg,'Position',[11.20 12.7 0.7 0.3 ] ); % (0,2) end end diff --git a/test/3m4m/matlab/plot_panel_4x5.m b/test/3m4m/matlab/plot_panel_4x5.m index 3735af74f..71b0b803d 100644 --- a/test/3m4m/matlab/plot_panel_4x5.m +++ b/test/3m4m/matlab/plot_panel_4x5.m @@ -1,7 +1,9 @@ function r_val = plot_panel_4x5( cfreq, ... dflopspercycle, ... nth, ... - dirpath ) + dirpath, ... + arch_str, ... + vend_str ) %cfreq = 1.8; %dflopspercycle = 32; @@ -74,20 +76,20 @@ for opi = 1:n_opnames % Construct variable names for the variables in the data files. var_blis = sprintf( vartemp, thr_str, opname, 'asm_blis' ); var_open = sprintf( vartemp, thr_str, opname, 'openblas' ); - var_mkl = sprintf( vartemp, thr_str, opname, 'mkl' ); + var_vend = sprintf( vartemp, thr_str, opname, 'mkl' ); % Use eval() to instantiate the variable names constructed above, % copying each to a simplified name. data_blis = eval( var_blis ); % e.g. data_st_sgemm_asm_blis( :, : ); data_open = eval( var_open ); % e.g. data_st_sgemm_openblas( :, : ); - data_mkl = eval( var_mkl ); % e.g. data_st_sgemm_mkl( :, : ); + data_vend = eval( var_vend ); % e.g. data_st_sgemm_mkl( :, : ); % Plot one result in an m x n grid of plots, via the subplot() % function. plot_l3_perf( opname, ... data_blis, ... data_open, ... - data_mkl, ... + data_vend, vend_str, ... nth, ... 4, 5, ... cfreq, ... @@ -97,9 +99,9 @@ for opi = 1:n_opnames end % Construct the name of the file to which we will output the graph. -outfile = sprintf( 'l3_perf_panel_nt%d', nth ); +outfile = sprintf( 'l3_perf_%s_nt%d', arch_str, nth ); % Output the graph to pdf format. -print(gcf, outfile,'-bestfit','-dpdf'); %print(gcf, 'gemm_md','-fillpage','-dpdf'); +print(gcf, outfile,'-bestfit','-dpdf'); From 56286b4729d7a005de1f38614a76af7db5ebb754 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Sun, 24 Feb 2019 19:09:10 -0600 Subject: [PATCH 010/109] Updated level-3 BLAS to call object API directly. Details: - Updated the BLAS compatibility layer for level-3 operations so that the corresponding BLIS object API is called directly rather than first calling the typed BLIS API. The previous code based on the typed BLIS API calls is still available in a deactivated cpp macro branch, which may be re-activated by #defining BLIS_BLAS3_CALLS_TAPI. (This does not yet correspond to a configure option. If it seems like people might want to toggle this behavior more regularly, a configure option can be added in the future.) - Updated the BLIS typed API to statically "pre-initialize" objects via new initializor macros. Initialization is then finished via calls to static functions bli_obj_init_finish_1x1() and bli_obj_init_finish(), which are similar to the previously-called functions, bli_obj_create_1x1_with_attached_buffer() and bli_obj_create_with_attached_buffer(), respectively. (The BLAS compatibility layer updates mentioned above employ this new technique as well.) - Transformed certain routines in bli_param_map.c--specifically, the ones that convert netlib-style parameters to BLIS equivalents--into static functions, now in bli_param_map.h. (The remaining three classes of conversation routines were left unchanged.) - Added the aforementioned pre-initializor macros to bli_type_defs.h. - Relocated bli_obj_init_const() and bli_obj_init_constdata() from bli_obj_macro_defs.h to bli_type_defs.h. - Added a few macros to bli_param_macro_defs.h for testing domains for real/complexness and precisions for single/double-ness. --- frame/3/bli_l3_tapi.c | 117 +++++++++++++++--------- frame/base/bli_param_map.c | 58 +----------- frame/base/bli_param_map.h | 63 ++++++++++++- frame/compat/bla_gemm.c | 105 +++++++++++++++++++++- frame/compat/bla_hemm.c | 108 ++++++++++++++++++++++ frame/compat/bla_her2k.c | 124 ++++++++++++++++++++++++++ frame/compat/bla_herk.c | 113 +++++++++++++++++++++++ frame/compat/bla_symm.c | 108 ++++++++++++++++++++++ frame/compat/bla_syr2k.c | 115 ++++++++++++++++++++++++ frame/compat/bla_syrk.c | 104 +++++++++++++++++++++ frame/compat/bla_trmm.c | 101 +++++++++++++++++++++ frame/compat/bla_trsm.c | 101 +++++++++++++++++++++ frame/include/bli_config_macro_defs.h | 25 ++++-- frame/include/bli_obj_macro_defs.h | 82 ++++++++++------- frame/include/bli_param_macro_defs.h | 24 +++++ frame/include/bli_type_defs.h | 100 +++++++++++++++++++++ 16 files changed, 1306 insertions(+), 142 deletions(-) diff --git a/frame/3/bli_l3_tapi.c b/frame/3/bli_l3_tapi.c index 4eeba1971..7b7f758ab 100644 --- a/frame/3/bli_l3_tapi.c +++ b/frame/3/bli_l3_tapi.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -64,7 +65,11 @@ void PASTEMAC2(ch,opname,EX_SUF) \ \ const num_t dt = PASTEMAC(ch,type); \ \ - obj_t alphao, ao, bo, betao, co; \ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t bo = BLIS_OBJECT_INITIALIZER; \ + obj_t betao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t co = BLIS_OBJECT_INITIALIZER; \ \ dim_t m_a, n_a; \ dim_t m_b, n_b; \ @@ -72,12 +77,12 @@ void PASTEMAC2(ch,opname,EX_SUF) \ bli_set_dims_with_trans( transa, m, k, &m_a, &n_a ); \ bli_set_dims_with_trans( transb, k, n, &m_b, &n_b ); \ \ - bli_obj_create_1x1_with_attached_buffer( dt, alpha, &alphao ); \ - bli_obj_create_1x1_with_attached_buffer( dt, beta, &betao ); \ + bli_obj_init_finish_1x1( dt, alpha, &alphao ); \ + bli_obj_init_finish_1x1( dt, beta, &betao ); \ \ - bli_obj_create_with_attached_buffer( dt, m_a, n_a, a, rs_a, cs_a, &ao ); \ - bli_obj_create_with_attached_buffer( dt, m_b, n_b, b, rs_b, cs_b, &bo ); \ - bli_obj_create_with_attached_buffer( dt, m, n, c, rs_c, cs_c, &co ); \ + bli_obj_init_finish( dt, m_a, n_a, a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m_b, n_b, b, rs_b, cs_b, &bo ); \ + bli_obj_init_finish( dt, m, n, c, rs_c, cs_c, &co ); \ \ bli_obj_set_conjtrans( transa, &ao ); \ bli_obj_set_conjtrans( transb, &bo ); \ @@ -122,7 +127,11 @@ void PASTEMAC2(ch,opname,EX_SUF) \ \ const num_t dt = PASTEMAC(ch,type); \ \ - obj_t alphao, ao, bo, betao, co; \ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t bo = BLIS_OBJECT_INITIALIZER; \ + obj_t betao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t co = BLIS_OBJECT_INITIALIZER; \ \ dim_t mn_a; \ dim_t m_b, n_b; \ @@ -130,12 +139,12 @@ void PASTEMAC2(ch,opname,EX_SUF) \ bli_set_dim_with_side( side, m, n, &mn_a ); \ bli_set_dims_with_trans( transb, m, n, &m_b, &n_b ); \ \ - bli_obj_create_1x1_with_attached_buffer( dt, alpha, &alphao ); \ - bli_obj_create_1x1_with_attached_buffer( dt, beta, &betao ); \ + bli_obj_init_finish_1x1( dt, alpha, &alphao ); \ + bli_obj_init_finish_1x1( dt, beta, &betao ); \ \ - bli_obj_create_with_attached_buffer( dt, mn_a, mn_a, a, rs_a, cs_a, &ao ); \ - bli_obj_create_with_attached_buffer( dt, m_b, n_b, b, rs_b, cs_b, &bo ); \ - bli_obj_create_with_attached_buffer( dt, m, n, c, rs_c, cs_c, &co ); \ + bli_obj_init_finish( dt, mn_a, mn_a, a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m_b, n_b, b, rs_b, cs_b, &bo ); \ + bli_obj_init_finish( dt, m, n, c, rs_c, cs_c, &co ); \ \ bli_obj_set_uplo( uploa, &ao ); \ bli_obj_set_conj( conja, &ao ); \ @@ -183,17 +192,20 @@ void PASTEMAC2(ch,opname,EX_SUF) \ const num_t dt_r = PASTEMAC(chr,type); \ const num_t dt = PASTEMAC(ch,type); \ \ - obj_t alphao, ao, betao, co; \ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t betao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t co = BLIS_OBJECT_INITIALIZER; \ \ dim_t m_a, n_a; \ \ bli_set_dims_with_trans( transa, m, k, &m_a, &n_a ); \ \ - bli_obj_create_1x1_with_attached_buffer( dt_r, alpha, &alphao ); \ - bli_obj_create_1x1_with_attached_buffer( dt_r, beta, &betao ); \ + bli_obj_init_finish_1x1( dt_r, alpha, &alphao ); \ + bli_obj_init_finish_1x1( dt_r, beta, &betao ); \ \ - bli_obj_create_with_attached_buffer( dt, m_a, n_a, a, rs_a, cs_a, &ao ); \ - bli_obj_create_with_attached_buffer( dt, m, m, c, rs_c, cs_c, &co ); \ + bli_obj_init_finish( dt, m_a, n_a, a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m, m, c, rs_c, cs_c, &co ); \ \ bli_obj_set_uplo( uploc, &co ); \ bli_obj_set_conjtrans( transa, &ao ); \ @@ -239,7 +251,11 @@ void PASTEMAC2(ch,opname,EX_SUF) \ const num_t dt_r = PASTEMAC(chr,type); \ const num_t dt = PASTEMAC(ch,type); \ \ - obj_t alphao, ao, bo, betao, co; \ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t bo = BLIS_OBJECT_INITIALIZER; \ + obj_t betao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t co = BLIS_OBJECT_INITIALIZER; \ \ dim_t m_a, n_a; \ dim_t m_b, n_b; \ @@ -247,12 +263,12 @@ void PASTEMAC2(ch,opname,EX_SUF) \ bli_set_dims_with_trans( transa, m, k, &m_a, &n_a ); \ bli_set_dims_with_trans( transb, m, k, &m_b, &n_b ); \ \ - bli_obj_create_1x1_with_attached_buffer( dt, alpha, &alphao ); \ - bli_obj_create_1x1_with_attached_buffer( dt_r, beta, &betao ); \ + bli_obj_init_finish_1x1( dt, alpha, &alphao ); \ + bli_obj_init_finish_1x1( dt_r, beta, &betao ); \ \ - bli_obj_create_with_attached_buffer( dt, m_a, n_a, a, rs_a, cs_a, &ao ); \ - bli_obj_create_with_attached_buffer( dt, m_b, n_b, b, rs_b, cs_b, &bo ); \ - bli_obj_create_with_attached_buffer( dt, m, m, c, rs_c, cs_c, &co ); \ + bli_obj_init_finish( dt, m_a, n_a, a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m_b, n_b, b, rs_b, cs_b, &bo ); \ + bli_obj_init_finish( dt, m, m, c, rs_c, cs_c, &co ); \ \ bli_obj_set_uplo( uploc, &co ); \ bli_obj_set_conjtrans( transa, &ao ); \ @@ -297,17 +313,20 @@ void PASTEMAC2(ch,opname,EX_SUF) \ \ const num_t dt = PASTEMAC(ch,type); \ \ - obj_t alphao, ao, betao, co; \ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t betao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t co = BLIS_OBJECT_INITIALIZER; \ \ dim_t m_a, n_a; \ \ bli_set_dims_with_trans( transa, m, k, &m_a, &n_a ); \ \ - bli_obj_create_1x1_with_attached_buffer( dt, alpha, &alphao ); \ - bli_obj_create_1x1_with_attached_buffer( dt, beta, &betao ); \ + bli_obj_init_finish_1x1( dt, alpha, &alphao ); \ + bli_obj_init_finish_1x1( dt, beta, &betao ); \ \ - bli_obj_create_with_attached_buffer( dt, m_a, n_a, a, rs_a, cs_a, &ao ); \ - bli_obj_create_with_attached_buffer( dt, m, m, c, rs_c, cs_c, &co ); \ + bli_obj_init_finish( dt, m_a, n_a, a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m, m, c, rs_c, cs_c, &co ); \ \ bli_obj_set_uplo( uploc, &co ); \ bli_obj_set_conjtrans( transa, &ao ); \ @@ -352,7 +371,11 @@ void PASTEMAC2(ch,opname,EX_SUF) \ \ const num_t dt = PASTEMAC(ch,type); \ \ - obj_t alphao, ao, bo, betao, co; \ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t bo = BLIS_OBJECT_INITIALIZER; \ + obj_t betao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t co = BLIS_OBJECT_INITIALIZER; \ \ dim_t m_a, n_a; \ dim_t m_b, n_b; \ @@ -360,12 +383,12 @@ void PASTEMAC2(ch,opname,EX_SUF) \ bli_set_dims_with_trans( transa, m, k, &m_a, &n_a ); \ bli_set_dims_with_trans( transb, m, k, &m_b, &n_b ); \ \ - bli_obj_create_1x1_with_attached_buffer( dt, alpha, &alphao ); \ - bli_obj_create_1x1_with_attached_buffer( dt, beta, &betao ); \ + bli_obj_init_finish_1x1( dt, alpha, &alphao ); \ + bli_obj_init_finish_1x1( dt, beta, &betao ); \ \ - bli_obj_create_with_attached_buffer( dt, m_a, n_a, a, rs_a, cs_a, &ao ); \ - bli_obj_create_with_attached_buffer( dt, m_b, n_b, b, rs_b, cs_b, &bo ); \ - bli_obj_create_with_attached_buffer( dt, m, m, c, rs_c, cs_c, &co ); \ + bli_obj_init_finish( dt, m_a, n_a, a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m_b, n_b, b, rs_b, cs_b, &bo ); \ + bli_obj_init_finish( dt, m, m, c, rs_c, cs_c, &co ); \ \ bli_obj_set_uplo( uploc, &co ); \ bli_obj_set_conjtrans( transa, &ao ); \ @@ -414,7 +437,11 @@ void PASTEMAC2(ch,opname,EX_SUF) \ \ const num_t dt = PASTEMAC(ch,type); \ \ - obj_t alphao, ao, bo, betao, co; \ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t bo = BLIS_OBJECT_INITIALIZER; \ + obj_t betao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t co = BLIS_OBJECT_INITIALIZER; \ \ dim_t mn_a; \ dim_t m_b, n_b; \ @@ -422,12 +449,12 @@ void PASTEMAC2(ch,opname,EX_SUF) \ bli_set_dim_with_side( side, m, n, &mn_a ); \ bli_set_dims_with_trans( transb, m, n, &m_b, &n_b ); \ \ - bli_obj_create_1x1_with_attached_buffer( dt, alpha, &alphao ); \ - bli_obj_create_1x1_with_attached_buffer( dt, beta, &betao ); \ + bli_obj_init_finish_1x1( dt, alpha, &alphao ); \ + bli_obj_init_finish_1x1( dt, beta, &betao ); \ \ - bli_obj_create_with_attached_buffer( dt, mn_a, mn_a, a, rs_a, cs_a, &ao ); \ - bli_obj_create_with_attached_buffer( dt, m_b, n_b, b, rs_b, cs_b, &bo ); \ - bli_obj_create_with_attached_buffer( dt, m, n, c, rs_c, cs_c, &co ); \ + bli_obj_init_finish( dt, mn_a, mn_a, a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m_b, n_b, b, rs_b, cs_b, &bo ); \ + bli_obj_init_finish( dt, m, n, c, rs_c, cs_c, &co ); \ \ bli_obj_set_uplo( uploa, &ao ); \ bli_obj_set_diag( diaga, &ao ); \ @@ -475,16 +502,18 @@ void PASTEMAC2(ch,opname,EX_SUF) \ \ const num_t dt = PASTEMAC(ch,type); \ \ - obj_t alphao, ao, bo; \ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t bo = BLIS_OBJECT_INITIALIZER; \ \ dim_t mn_a; \ \ bli_set_dim_with_side( side, m, n, &mn_a ); \ \ - bli_obj_create_1x1_with_attached_buffer( dt, alpha, &alphao ); \ + bli_obj_init_finish_1x1( dt, alpha, &alphao ); \ \ - bli_obj_create_with_attached_buffer( dt, mn_a, mn_a, a, rs_a, cs_a, &ao ); \ - bli_obj_create_with_attached_buffer( dt, m, n, b, rs_b, cs_b, &bo ); \ + bli_obj_init_finish( dt, mn_a, mn_a, a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m, n, b, rs_b, cs_b, &bo ); \ \ bli_obj_set_uplo( uploa, &ao ); \ bli_obj_set_diag( diaga, &ao ); \ diff --git a/frame/base/bli_param_map.c b/frame/base/bli_param_map.c index de877f686..d20eece43 100644 --- a/frame/base/bli_param_map.c +++ b/frame/base/bli_param_map.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -98,61 +99,8 @@ void bli_param_map_blis_to_netlib_machval( machval_t machval, char* blas_machval // --- BLAS/LAPACK to BLIS mappings -------------------------------------------- -void bli_param_map_netlib_to_blis_side( char side, side_t* blis_side ) -{ - if ( side == 'l' || side == 'L' ) *blis_side = BLIS_LEFT; - else if ( side == 'r' || side == 'R' ) *blis_side = BLIS_RIGHT; - else - { - // Instead of reporting an error to the framework, default to - // an arbitrary value. This is needed because this function is - // called by the BLAS compatibility layer AFTER it has already - // checked errors and called xerbla(). If the application wants - // to override the BLAS compatibility layer's xerbla--which - // responds to errors with abort()--we need to also NOT call - // abort() here, since either way it has already been dealt - // with. - //bli_check_error_code( BLIS_INVALID_SIDE ); - *blis_side = BLIS_LEFT; - } -} - -void bli_param_map_netlib_to_blis_uplo( char uplo, uplo_t* blis_uplo ) -{ - if ( uplo == 'l' || uplo == 'L' ) *blis_uplo = BLIS_LOWER; - else if ( uplo == 'u' || uplo == 'U' ) *blis_uplo = BLIS_UPPER; - else - { - // See comment for bli_param_map_netlib_to_blis_side() above. - //bli_check_error_code( BLIS_INVALID_UPLO ); - *blis_uplo = BLIS_LOWER; - } -} - -void bli_param_map_netlib_to_blis_trans( char trans, trans_t* blis_trans ) -{ - if ( trans == 'n' || trans == 'N' ) *blis_trans = BLIS_NO_TRANSPOSE; - else if ( trans == 't' || trans == 'T' ) *blis_trans = BLIS_TRANSPOSE; - else if ( trans == 'c' || trans == 'C' ) *blis_trans = BLIS_CONJ_TRANSPOSE; - else - { - // See comment for bli_param_map_netlib_to_blis_side() above. - //bli_check_error_code( BLIS_INVALID_TRANS ); - *blis_trans = BLIS_NO_TRANSPOSE; - } -} - -void bli_param_map_netlib_to_blis_diag( char diag, diag_t* blis_diag ) -{ - if ( diag == 'n' || diag == 'N' ) *blis_diag = BLIS_NONUNIT_DIAG; - else if ( diag == 'u' || diag == 'U' ) *blis_diag = BLIS_UNIT_DIAG; - else - { - // See comment for bli_param_map_netlib_to_blis_side() above. - //bli_check_error_code( BLIS_INVALID_DIAG ); - *blis_diag = BLIS_NONUNIT_DIAG; - } -} +// NOTE: These functions were converted into static functions. Please see this +// file's corresponding header for those definitions. // --- BLIS char to BLIS mappings ---------------------------------------------- diff --git a/frame/base/bli_param_map.h b/frame/base/bli_param_map.h index 829fe808c..8ec4188ec 100644 --- a/frame/base/bli_param_map.h +++ b/frame/base/bli_param_map.h @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -44,10 +45,64 @@ void bli_param_map_blis_to_netlib_machval( machval_t machval, char* blas_machval // --- BLAS/LAPACK to BLIS mappings -------------------------------------------- -void bli_param_map_netlib_to_blis_side( char side, side_t* blis_side ); -void bli_param_map_netlib_to_blis_uplo( char uplo, uplo_t* blis_uplo ); -void bli_param_map_netlib_to_blis_trans( char trans, trans_t* blis_trans ); -void bli_param_map_netlib_to_blis_diag( char diag, diag_t* blis_diag ); +// NOTE: These static functions were converted from regular functions in order +// to reduce function call overhead within the BLAS compatibility layer. + +static void bli_param_map_netlib_to_blis_side( char side, side_t* blis_side ) +{ + if ( side == 'l' || side == 'L' ) *blis_side = BLIS_LEFT; + else if ( side == 'r' || side == 'R' ) *blis_side = BLIS_RIGHT; + else + { + // Instead of reporting an error to the framework, default to + // an arbitrary value. This is needed because this function is + // called by the BLAS compatibility layer AFTER it has already + // checked errors and called xerbla(). If the application wants + // to override the BLAS compatibility layer's xerbla--which + // responds to errors with abort()--we need to also NOT call + // abort() here, since either way it has already been dealt + // with. + //bli_check_error_code( BLIS_INVALID_SIDE ); + *blis_side = BLIS_LEFT; + } +} + +static void bli_param_map_netlib_to_blis_uplo( char uplo, uplo_t* blis_uplo ) +{ + if ( uplo == 'l' || uplo == 'L' ) *blis_uplo = BLIS_LOWER; + else if ( uplo == 'u' || uplo == 'U' ) *blis_uplo = BLIS_UPPER; + else + { + // See comment for bli_param_map_netlib_to_blis_side() above. + //bli_check_error_code( BLIS_INVALID_UPLO ); + *blis_uplo = BLIS_LOWER; + } +} + +static void bli_param_map_netlib_to_blis_trans( char trans, trans_t* blis_trans ) +{ + if ( trans == 'n' || trans == 'N' ) *blis_trans = BLIS_NO_TRANSPOSE; + else if ( trans == 't' || trans == 'T' ) *blis_trans = BLIS_TRANSPOSE; + else if ( trans == 'c' || trans == 'C' ) *blis_trans = BLIS_CONJ_TRANSPOSE; + else + { + // See comment for bli_param_map_netlib_to_blis_side() above. + //bli_check_error_code( BLIS_INVALID_TRANS ); + *blis_trans = BLIS_NO_TRANSPOSE; + } +} + +static void bli_param_map_netlib_to_blis_diag( char diag, diag_t* blis_diag ) +{ + if ( diag == 'n' || diag == 'N' ) *blis_diag = BLIS_NONUNIT_DIAG; + else if ( diag == 'u' || diag == 'U' ) *blis_diag = BLIS_UNIT_DIAG; + else + { + // See comment for bli_param_map_netlib_to_blis_side() above. + //bli_check_error_code( BLIS_INVALID_DIAG ); + *blis_diag = BLIS_NONUNIT_DIAG; + } +} // --- BLIS char to BLIS mappings ---------------------------------------------- diff --git a/frame/compat/bla_gemm.c b/frame/compat/bla_gemm.c index 1effececa..e04e48cf5 100644 --- a/frame/compat/bla_gemm.c +++ b/frame/compat/bla_gemm.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -38,6 +39,9 @@ // // Define BLAS-to-BLIS interfaces. // + +#ifdef BLIS_BLAS3_CALLS_TAPI + #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ @@ -84,7 +88,7 @@ void PASTEF77(ch,blasname) \ bli_param_map_netlib_to_blis_trans( *transa, &blis_transa ); \ bli_param_map_netlib_to_blis_trans( *transb, &blis_transb ); \ \ - /* Convert/typecast negative values of m, n, and k to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *n, n0 ); \ bli_convert_blas_dim1( *k, k0 ); \ @@ -118,6 +122,105 @@ void PASTEF77(ch,blasname) \ bli_finalize_auto(); \ } +#else + +#undef GENTFUNC +#define GENTFUNC( ftype, ch, blasname, blisname ) \ +\ +void PASTEF77(ch,blasname) \ + ( \ + const f77_char* transa, \ + const f77_char* transb, \ + const f77_int* m, \ + const f77_int* n, \ + const f77_int* k, \ + const ftype* alpha, \ + const ftype* a, const f77_int* lda, \ + const ftype* b, const f77_int* ldb, \ + const ftype* beta, \ + ftype* c, const f77_int* ldc \ + ) \ +{ \ + trans_t blis_transa; \ + trans_t blis_transb; \ + dim_t m0, n0, k0; \ +\ + /* Initialize BLIS. */ \ + bli_init_auto(); \ +\ + /* Perform BLAS parameter checking. */ \ + PASTEBLACHK(blasname) \ + ( \ + MKSTR(ch), \ + MKSTR(blasname), \ + transa, \ + transb, \ + m, \ + n, \ + k, \ + lda, \ + ldb, \ + ldc \ + ); \ +\ + /* Map BLAS chars to their corresponding BLIS enumerated type value. */ \ + bli_param_map_netlib_to_blis_trans( *transa, &blis_transa ); \ + bli_param_map_netlib_to_blis_trans( *transb, &blis_transb ); \ +\ + /* Typecast BLAS integers to BLIS integers. */ \ + bli_convert_blas_dim1( *m, m0 ); \ + bli_convert_blas_dim1( *n, n0 ); \ + bli_convert_blas_dim1( *k, k0 ); \ +\ + /* Set the row and column strides of the matrix operands. */ \ + const inc_t rs_a = 1; \ + const inc_t cs_a = *lda; \ + const inc_t rs_b = 1; \ + const inc_t cs_b = *ldb; \ + const inc_t rs_c = 1; \ + const inc_t cs_c = *ldc; \ +\ + const num_t dt = PASTEMAC(ch,type); \ +\ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t bo = BLIS_OBJECT_INITIALIZER; \ + obj_t betao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t co = BLIS_OBJECT_INITIALIZER; \ +\ + dim_t m0_a, n0_a; \ + dim_t m0_b, n0_b; \ +\ + bli_set_dims_with_trans( blis_transa, m0, k0, &m0_a, &n0_a ); \ + bli_set_dims_with_trans( blis_transb, k0, n0, &m0_b, &n0_b ); \ +\ + bli_obj_init_finish_1x1( dt, (ftype*)alpha, &alphao ); \ + bli_obj_init_finish_1x1( dt, (ftype*)beta, &betao ); \ +\ + bli_obj_init_finish( dt, m0_a, n0_a, (ftype*)a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m0_b, n0_b, (ftype*)b, rs_b, cs_b, &bo ); \ + bli_obj_init_finish( dt, m0, n0, (ftype*)c, rs_c, cs_c, &co ); \ +\ + bli_obj_set_conjtrans( blis_transa, &ao ); \ + bli_obj_set_conjtrans( blis_transb, &bo ); \ +\ + PASTEMAC(blisname,BLIS_OAPI_EX_SUF) \ + ( \ + &alphao, \ + &ao, \ + &bo, \ + &betao, \ + &co, \ + NULL, \ + NULL \ + ); \ +\ + /* Finalize BLIS. */ \ + bli_finalize_auto(); \ +} + +#endif + #ifdef BLIS_ENABLE_BLAS INSERT_GENTFUNC_BLAS( gemm, gemm ) #endif diff --git a/frame/compat/bla_hemm.c b/frame/compat/bla_hemm.c index 88e9c8b55..79ccd9a2c 100644 --- a/frame/compat/bla_hemm.c +++ b/frame/compat/bla_hemm.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -38,6 +39,9 @@ // // Define BLAS-to-BLIS interfaces. // + +#ifdef BLIS_BLAS3_CALLS_TAPI + #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ @@ -116,6 +120,110 @@ void PASTEF77(ch,blasname) \ bli_finalize_auto(); \ } +#else + +#undef GENTFUNCCO +#define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ +\ +void PASTEF77(ch,blasname) \ + ( \ + const f77_char* side, \ + const f77_char* uploa, \ + const f77_int* m, \ + const f77_int* n, \ + const ftype* alpha, \ + const ftype* a, const f77_int* lda, \ + const ftype* b, const f77_int* ldb, \ + const ftype* beta, \ + ftype* c, const f77_int* ldc \ + ) \ +{ \ + side_t blis_side; \ + uplo_t blis_uploa; \ + dim_t m0, n0; \ +\ + /* Initialize BLIS. */ \ + bli_init_auto(); \ +\ + /* Perform BLAS parameter checking. */ \ + PASTEBLACHK(blasname) \ + ( \ + MKSTR(ch), \ + MKSTR(blasname), \ + side, \ + uploa, \ + m, \ + n, \ + lda, \ + ldb, \ + ldc \ + ); \ +\ + /* Map BLAS chars to their corresponding BLIS enumerated type value. */ \ + bli_param_map_netlib_to_blis_side( *side, &blis_side ); \ + bli_param_map_netlib_to_blis_uplo( *uploa, &blis_uploa ); \ +\ + /* Convert/typecast negative values of m and n to zero. */ \ + bli_convert_blas_dim1( *m, m0 ); \ + bli_convert_blas_dim1( *n, n0 ); \ +\ + /* Set the row and column strides of the matrix operands. */ \ + const inc_t rs_a = 1; \ + const inc_t cs_a = *lda; \ + const inc_t rs_b = 1; \ + const inc_t cs_b = *ldb; \ + const inc_t rs_c = 1; \ + const inc_t cs_c = *ldc; \ +\ + const num_t dt = PASTEMAC(ch,type); \ +\ + const conj_t conja = BLIS_NO_CONJUGATE; \ + const trans_t transb = BLIS_NO_TRANSPOSE; \ + const struc_t struca = BLIS_HERMITIAN; \ +\ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t bo = BLIS_OBJECT_INITIALIZER; \ + obj_t betao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t co = BLIS_OBJECT_INITIALIZER; \ +\ + dim_t mn0_a; \ + dim_t m0_b, n0_b; \ +\ + bli_set_dim_with_side( blis_side, m0, n0, &mn0_a ); \ + bli_set_dims_with_trans( transb, m0, n0, &m0_b, &n0_b ); \ +\ + bli_obj_init_finish_1x1( dt, (ftype*)alpha, &alphao ); \ + bli_obj_init_finish_1x1( dt, (ftype*)beta, &betao ); \ +\ + bli_obj_init_finish( dt, mn0_a, mn0_a, (ftype*)a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m0_b, n0_b, (ftype*)b, rs_b, cs_b, &bo ); \ + bli_obj_init_finish( dt, m0, n0, (ftype*)c, rs_c, cs_c, &co ); \ +\ + bli_obj_set_uplo( blis_uploa, &ao ); \ + bli_obj_set_conj( conja, &ao ); \ + bli_obj_set_conjtrans( transb, &bo ); \ +\ + bli_obj_set_struc( struca, &ao ); \ +\ + PASTEMAC(blisname,BLIS_OAPI_EX_SUF) \ + ( \ + blis_side, \ + &alphao, \ + &ao, \ + &bo, \ + &betao, \ + &co, \ + NULL, \ + NULL \ + ); \ +\ + /* Finalize BLIS. */ \ + bli_finalize_auto(); \ +} + +#endif + #ifdef BLIS_ENABLE_BLAS INSERT_GENTFUNCCO_BLAS( hemm, hemm ) #endif diff --git a/frame/compat/bla_her2k.c b/frame/compat/bla_her2k.c index 0bbe98e1c..566cd41fb 100644 --- a/frame/compat/bla_her2k.c +++ b/frame/compat/bla_her2k.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -38,6 +39,9 @@ // // Define BLAS-to-BLIS interfaces. // + +#ifdef BLIS_BLAS3_CALLS_TAPI + #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ @@ -132,6 +136,126 @@ void PASTEF77(ch,blasname) \ bli_finalize_auto(); \ } +#else + +#undef GENTFUNCCO +#define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ +\ +void PASTEF77(ch,blasname) \ + ( \ + const f77_char* uploc, \ + const f77_char* transa, \ + const f77_int* m, \ + const f77_int* k, \ + const ftype* alpha, \ + const ftype* a, const f77_int* lda, \ + const ftype* b, const f77_int* ldb, \ + const ftype_r* beta, \ + ftype* c, const f77_int* ldc \ + ) \ +{ \ + uplo_t blis_uploc; \ + trans_t blis_transa; \ + dim_t m0, k0; \ +\ + /* Initialize BLIS. */ \ + bli_init_auto(); \ +\ + /* Perform BLAS parameter checking. */ \ + PASTEBLACHK(blasname) \ + ( \ + MKSTR(ch), \ + MKSTR(blasname), \ + uploc, \ + transa, \ + m, \ + k, \ + lda, \ + ldb, \ + ldc \ + ); \ +\ + /* Map BLAS chars to their corresponding BLIS enumerated type value. */ \ + bli_param_map_netlib_to_blis_uplo( *uploc, &blis_uploc ); \ + bli_param_map_netlib_to_blis_trans( *transa, &blis_transa ); \ +\ + /* Convert/typecast negative values of m and k to zero. */ \ + bli_convert_blas_dim1( *m, m0 ); \ + bli_convert_blas_dim1( *k, k0 ); \ +\ + /* We emulate the BLAS early return behavior with the following + conditional, which returns if one of the following is true: + - matrix C is empty + - the rank-2k product is empty (either because alpha is zero or k + is zero) AND matrix C is not scaled. */ \ + if ( m0 == 0 || \ + ( ( PASTEMAC(ch,eq0)( *alpha ) || k0 == 0 ) \ + && PASTEMAC(chr,eq1)( *beta ) \ + ) \ + ) \ + { \ + /* Finalize BLIS. */ \ + bli_finalize_auto(); \ +\ + return; \ + } \ +\ + /* Set the row and column strides of the matrix operands. */ \ + const inc_t rs_a = 1; \ + const inc_t cs_a = *lda; \ + const inc_t rs_b = 1; \ + const inc_t cs_b = *ldb; \ + const inc_t rs_c = 1; \ + const inc_t cs_c = *ldc; \ +\ + const num_t dt_r = PASTEMAC(chr,type); \ + const num_t dt = PASTEMAC(ch,type); \ +\ + const trans_t transb = blis_transa; \ + const struc_t strucc = BLIS_HERMITIAN; \ +\ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t bo = BLIS_OBJECT_INITIALIZER; \ + obj_t betao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t co = BLIS_OBJECT_INITIALIZER; \ +\ + dim_t m0_a, n0_a; \ + dim_t m0_b, n0_b; \ +\ + bli_set_dims_with_trans( blis_transa, m0, k0, &m0_a, &n0_a ); \ + bli_set_dims_with_trans( transb, m0, k0, &m0_b, &n0_b ); \ +\ + bli_obj_init_finish_1x1( dt, (ftype* )alpha, &alphao ); \ + bli_obj_init_finish_1x1( dt_r, (ftype_r*)beta, &betao ); \ +\ + bli_obj_init_finish( dt, m0_a, n0_a, (ftype*)a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m0_b, n0_b, (ftype*)b, rs_b, cs_b, &bo ); \ + bli_obj_init_finish( dt, m0, m0, (ftype*)c, rs_c, cs_c, &co ); \ +\ + bli_obj_set_uplo( blis_uploc, &co ); \ + bli_obj_set_conjtrans( blis_transa, &ao ); \ + bli_obj_set_conjtrans( transb, &bo ); \ +\ + bli_obj_set_struc( strucc, &co ); \ +\ + PASTEMAC(blisname,BLIS_OAPI_EX_SUF) \ + ( \ + &alphao, \ + &ao, \ + &bo, \ + &betao, \ + &co, \ + NULL, \ + NULL \ + ); \ +\ + /* Finalize BLIS. */ \ + bli_finalize_auto(); \ +} + +#endif + #ifdef BLIS_ENABLE_BLAS INSERT_GENTFUNCCO_BLAS( her2k, her2k ) #endif diff --git a/frame/compat/bla_herk.c b/frame/compat/bla_herk.c index 88185de0b..c919be9d7 100644 --- a/frame/compat/bla_herk.c +++ b/frame/compat/bla_herk.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -38,6 +39,9 @@ // // Define BLAS-to-BLIS interfaces. // + +#ifdef BLIS_BLAS3_CALLS_TAPI + #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ @@ -125,6 +129,115 @@ void PASTEF77(ch,blasname) \ bli_finalize_auto(); \ } +#else + +#undef GENTFUNCCO +#define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ +\ +void PASTEF77(ch,blasname) \ + ( \ + const f77_char* uploc, \ + const f77_char* transa, \ + const f77_int* m, \ + const f77_int* k, \ + const ftype_r* alpha, \ + const ftype* a, const f77_int* lda, \ + const ftype_r* beta, \ + ftype* c, const f77_int* ldc \ + ) \ +{ \ + uplo_t blis_uploc; \ + trans_t blis_transa; \ + dim_t m0, k0; \ +\ + /* Initialize BLIS. */ \ + bli_init_auto(); \ +\ + /* Perform BLAS parameter checking. */ \ + PASTEBLACHK(blasname) \ + ( \ + MKSTR(ch), \ + MKSTR(blasname), \ + uploc, \ + transa, \ + m, \ + k, \ + lda, \ + ldc \ + ); \ +\ + /* Map BLAS chars to their corresponding BLIS enumerated type value. */ \ + bli_param_map_netlib_to_blis_uplo( *uploc, &blis_uploc ); \ + bli_param_map_netlib_to_blis_trans( *transa, &blis_transa ); \ +\ + /* Convert/typecast negative values of m and k to zero. */ \ + bli_convert_blas_dim1( *m, m0 ); \ + bli_convert_blas_dim1( *k, k0 ); \ +\ + /* We emulate the BLAS early return behavior with the following + conditional, which returns if one of the following is true: + - matrix C is empty + - the rank-k product is empty (either because alpha is zero or k + is zero) AND matrix C is not scaled. */ \ + if ( m0 == 0 || \ + ( ( PASTEMAC(chr,eq0)( *alpha ) || k0 == 0 ) \ + && PASTEMAC(chr,eq1)( *beta ) \ + ) \ + ) \ + { \ + /* Finalize BLIS. */ \ + bli_finalize_auto(); \ +\ + return; \ + } \ +\ + /* Set the row and column strides of the matrix operands. */ \ + const inc_t rs_a = 1; \ + const inc_t cs_a = *lda; \ + const inc_t rs_c = 1; \ + const inc_t cs_c = *ldc; \ +\ + const num_t dt_r = PASTEMAC(chr,type); \ + const num_t dt = PASTEMAC(ch,type); \ +\ + const struc_t strucc = BLIS_HERMITIAN; \ +\ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t betao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t co = BLIS_OBJECT_INITIALIZER; \ +\ + dim_t m0_a, n0_a; \ +\ + bli_set_dims_with_trans( blis_transa, m0, k0, &m0_a, &n0_a ); \ +\ + bli_obj_init_finish_1x1( dt_r, (ftype_r*)alpha, &alphao ); \ + bli_obj_init_finish_1x1( dt_r, (ftype_r*)beta, &betao ); \ +\ + bli_obj_init_finish( dt, m0_a, n0_a, (ftype*)a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m0, m0, (ftype*)c, rs_c, cs_c, &co ); \ +\ + bli_obj_set_uplo( blis_uploc, &co ); \ + bli_obj_set_conjtrans( blis_transa, &ao ); \ +\ + bli_obj_set_struc( strucc, &co ); \ +\ + PASTEMAC(blisname,BLIS_OAPI_EX_SUF) \ + ( \ + &alphao, \ + &ao, \ + &betao, \ + &co, \ + NULL, \ + NULL \ + ); \ +\ + /* Finalize BLIS. */ \ + bli_finalize_auto(); \ +} + +#endif + #ifdef BLIS_ENABLE_BLAS INSERT_GENTFUNCCO_BLAS( herk, herk ) #endif diff --git a/frame/compat/bla_symm.c b/frame/compat/bla_symm.c index 02d3a3b27..3711b34c9 100644 --- a/frame/compat/bla_symm.c +++ b/frame/compat/bla_symm.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -38,6 +39,9 @@ // // Define BLAS-to-BLIS interfaces. // + +#ifdef BLIS_BLAS3_CALLS_TAPI + #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ @@ -116,6 +120,110 @@ void PASTEF77(ch,blasname) \ bli_finalize_auto(); \ } +#else + +#undef GENTFUNC +#define GENTFUNC( ftype, ch, blasname, blisname ) \ +\ +void PASTEF77(ch,blasname) \ + ( \ + const f77_char* side, \ + const f77_char* uploa, \ + const f77_int* m, \ + const f77_int* n, \ + const ftype* alpha, \ + const ftype* a, const f77_int* lda, \ + const ftype* b, const f77_int* ldb, \ + const ftype* beta, \ + ftype* c, const f77_int* ldc \ + ) \ +{ \ + side_t blis_side; \ + uplo_t blis_uploa; \ + dim_t m0, n0; \ +\ + /* Initialize BLIS. */ \ + bli_init_auto(); \ +\ + /* Perform BLAS parameter checking. */ \ + PASTEBLACHK(blasname) \ + ( \ + MKSTR(ch), \ + MKSTR(blasname), \ + side, \ + uploa, \ + m, \ + n, \ + lda, \ + ldb, \ + ldc \ + ); \ +\ + /* Map BLAS chars to their corresponding BLIS enumerated type value. */ \ + bli_param_map_netlib_to_blis_side( *side, &blis_side ); \ + bli_param_map_netlib_to_blis_uplo( *uploa, &blis_uploa ); \ +\ + /* Convert/typecast negative values of m and n to zero. */ \ + bli_convert_blas_dim1( *m, m0 ); \ + bli_convert_blas_dim1( *n, n0 ); \ +\ + /* Set the row and column strides of the matrix operands. */ \ + const inc_t rs_a = 1; \ + const inc_t cs_a = *lda; \ + const inc_t rs_b = 1; \ + const inc_t cs_b = *ldb; \ + const inc_t rs_c = 1; \ + const inc_t cs_c = *ldc; \ +\ + const num_t dt = PASTEMAC(ch,type); \ +\ + const conj_t conja = BLIS_NO_CONJUGATE; \ + const trans_t transb = BLIS_NO_TRANSPOSE; \ + const struc_t struca = BLIS_SYMMETRIC; \ +\ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t bo = BLIS_OBJECT_INITIALIZER; \ + obj_t betao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t co = BLIS_OBJECT_INITIALIZER; \ +\ + dim_t mn0_a; \ + dim_t m0_b, n0_b; \ +\ + bli_set_dim_with_side( blis_side, m0, n0, &mn0_a ); \ + bli_set_dims_with_trans( transb, m0, n0, &m0_b, &n0_b ); \ +\ + bli_obj_init_finish_1x1( dt, (ftype*)alpha, &alphao ); \ + bli_obj_init_finish_1x1( dt, (ftype*)beta, &betao ); \ +\ + bli_obj_init_finish( dt, mn0_a, mn0_a, (ftype*)a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m0_b, n0_b, (ftype*)b, rs_b, cs_b, &bo ); \ + bli_obj_init_finish( dt, m0, n0, (ftype*)c, rs_c, cs_c, &co ); \ +\ + bli_obj_set_uplo( blis_uploa, &ao ); \ + bli_obj_set_conj( conja, &ao ); \ + bli_obj_set_conjtrans( transb, &bo ); \ +\ + bli_obj_set_struc( struca, &ao ); \ +\ + PASTEMAC(blisname,BLIS_OAPI_EX_SUF) \ + ( \ + blis_side, \ + &alphao, \ + &ao, \ + &bo, \ + &betao, \ + &co, \ + NULL, \ + NULL \ + ); \ +\ + /* Finalize BLIS. */ \ + bli_finalize_auto(); \ +} + +#endif + #ifdef BLIS_ENABLE_BLAS INSERT_GENTFUNC_BLAS( symm, symm ) #endif diff --git a/frame/compat/bla_syr2k.c b/frame/compat/bla_syr2k.c index 7e611b1d6..a977820a6 100644 --- a/frame/compat/bla_syr2k.c +++ b/frame/compat/bla_syr2k.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -38,6 +39,9 @@ // // Define BLAS-to-BLIS interfaces. // + +#ifdef BLIS_BLAS3_CALLS_TAPI + #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ @@ -124,6 +128,117 @@ void PASTEF77(ch,blasname) \ bli_finalize_auto(); \ } +#else + +#undef GENTFUNC +#define GENTFUNC( ftype, ch, blasname, blisname ) \ +\ +void PASTEF77(ch,blasname) \ + ( \ + const f77_char* uploc, \ + const f77_char* transa, \ + const f77_int* m, \ + const f77_int* k, \ + const ftype* alpha, \ + const ftype* a, const f77_int* lda, \ + const ftype* b, const f77_int* ldb, \ + const ftype* beta, \ + ftype* c, const f77_int* ldc \ + ) \ +{ \ + uplo_t blis_uploc; \ + trans_t blis_transa; \ + dim_t m0, k0; \ +\ + /* Initialize BLIS. */ \ + bli_init_auto(); \ +\ + /* Perform BLAS parameter checking. */ \ + PASTEBLACHK(blasname) \ + ( \ + MKSTR(ch), \ + MKSTR(blasname), \ + uploc, \ + transa, \ + m, \ + k, \ + lda, \ + ldb, \ + ldc \ + ); \ +\ + /* Map BLAS chars to their corresponding BLIS enumerated type value. */ \ + bli_param_map_netlib_to_blis_uplo( *uploc, &blis_uploc ); \ + bli_param_map_netlib_to_blis_trans( *transa, &blis_transa ); \ +\ + /* The real domain ssyr2k and dsyr2k in netlib BLAS treat a trans value + of 'C' (conjugate-transpose) as 'T' (transpose only). So, we have + to go out of our way a little to support this behavior. */ \ + if ( bli_is_real( PASTEMAC(ch,type) ) && \ + bli_is_conjtrans( blis_transa ) ) \ + { \ + blis_transa = BLIS_TRANSPOSE; \ + } \ +\ + /* Convert/typecast negative values of m and k to zero. */ \ + bli_convert_blas_dim1( *m, m0 ); \ + bli_convert_blas_dim1( *k, k0 ); \ +\ + /* Set the row and column strides of the matrix operands. */ \ + const inc_t rs_a = 1; \ + const inc_t cs_a = *lda; \ + const inc_t rs_b = 1; \ + const inc_t cs_b = *ldb; \ + const inc_t rs_c = 1; \ + const inc_t cs_c = *ldc; \ +\ + const num_t dt = PASTEMAC(ch,type); \ +\ + const trans_t transb = blis_transa; \ + const struc_t strucc = BLIS_SYMMETRIC; \ +\ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t bo = BLIS_OBJECT_INITIALIZER; \ + obj_t betao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t co = BLIS_OBJECT_INITIALIZER; \ +\ + dim_t m0_a, n0_a; \ + dim_t m0_b, n0_b; \ +\ + bli_set_dims_with_trans( blis_transa, m0, k0, &m0_a, &n0_a ); \ + bli_set_dims_with_trans( transb, m0, k0, &m0_b, &n0_b ); \ +\ + bli_obj_init_finish_1x1( dt, (ftype*)alpha, &alphao ); \ + bli_obj_init_finish_1x1( dt, (ftype*)beta, &betao ); \ +\ + bli_obj_init_finish( dt, m0_a, n0_a, (ftype*)a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m0_b, n0_b, (ftype*)b, rs_b, cs_b, &bo ); \ + bli_obj_init_finish( dt, m0, m0, (ftype*)c, rs_c, cs_c, &co ); \ +\ + bli_obj_set_uplo( blis_uploc, &co ); \ + bli_obj_set_conjtrans( blis_transa, &ao ); \ + bli_obj_set_conjtrans( transb, &bo ); \ +\ + bli_obj_set_struc( strucc, &co ); \ +\ + PASTEMAC(blisname,BLIS_OAPI_EX_SUF) \ + ( \ + &alphao, \ + &ao, \ + &bo, \ + &betao, \ + &co, \ + NULL, \ + NULL \ + ); \ +\ + /* Finalize BLIS. */ \ + bli_finalize_auto(); \ +} + +#endif + #ifdef BLIS_ENABLE_BLAS INSERT_GENTFUNC_BLAS( syr2k, syr2k ) #endif diff --git a/frame/compat/bla_syrk.c b/frame/compat/bla_syrk.c index 9c08dd06b..5bc2d356a 100644 --- a/frame/compat/bla_syrk.c +++ b/frame/compat/bla_syrk.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -38,6 +39,9 @@ // // Define BLAS-to-BLIS interfaces. // + +#ifdef BLIS_BLAS3_CALLS_TAPI + #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ @@ -117,6 +121,106 @@ void PASTEF77(ch,blasname) \ bli_finalize_auto(); \ } +#else + +#undef GENTFUNC +#define GENTFUNC( ftype, ch, blasname, blisname ) \ +\ +void PASTEF77(ch,blasname) \ + ( \ + const f77_char* uploc, \ + const f77_char* transa, \ + const f77_int* m, \ + const f77_int* k, \ + const ftype* alpha, \ + const ftype* a, const f77_int* lda, \ + const ftype* beta, \ + ftype* c, const f77_int* ldc \ + ) \ +{ \ + uplo_t blis_uploc; \ + trans_t blis_transa; \ + dim_t m0, k0; \ +\ + /* Initialize BLIS. */ \ + bli_init_auto(); \ +\ + /* Perform BLAS parameter checking. */ \ + PASTEBLACHK(blasname) \ + ( \ + MKSTR(ch), \ + MKSTR(blasname), \ + uploc, \ + transa, \ + m, \ + k, \ + lda, \ + ldc \ + ); \ +\ + /* Map BLAS chars to their corresponding BLIS enumerated type value. */ \ + bli_param_map_netlib_to_blis_uplo( *uploc, &blis_uploc ); \ + bli_param_map_netlib_to_blis_trans( *transa, &blis_transa ); \ +\ + /* The real domain ssyrk and dsyrk in netlib BLAS treat a trans value + of 'C' (conjugate-transpose) as 'T' (transpose only). So, we have + to go out of our way a little to support this behavior. */ \ + if ( bli_is_real( PASTEMAC(ch,type) ) && \ + bli_is_conjtrans( blis_transa ) ) \ + { \ + blis_transa = BLIS_TRANSPOSE; \ + } \ +\ + /* Convert/typecast negative values of m and k to zero. */ \ + bli_convert_blas_dim1( *m, m0 ); \ + bli_convert_blas_dim1( *k, k0 ); \ +\ + /* Set the row and column strides of the matrix operands. */ \ + const inc_t rs_a = 1; \ + const inc_t cs_a = *lda; \ + const inc_t rs_c = 1; \ + const inc_t cs_c = *ldc; \ +\ + const num_t dt = PASTEMAC(ch,type); \ +\ + const struc_t strucc = BLIS_SYMMETRIC; \ +\ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t betao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t co = BLIS_OBJECT_INITIALIZER; \ +\ + dim_t m0_a, n0_a; \ +\ + bli_set_dims_with_trans( blis_transa, m0, k0, &m0_a, &n0_a ); \ +\ + bli_obj_init_finish_1x1( dt, (ftype*)alpha, &alphao ); \ + bli_obj_init_finish_1x1( dt, (ftype*)beta, &betao ); \ +\ + bli_obj_init_finish( dt, m0_a, n0_a, (ftype*)a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m0, m0, (ftype*)c, rs_c, cs_c, &co ); \ +\ + bli_obj_set_uplo( blis_uploc, &co ); \ + bli_obj_set_conjtrans( blis_transa, &ao ); \ +\ + bli_obj_set_struc( strucc, &co ); \ +\ + PASTEMAC(blisname,BLIS_OAPI_EX_SUF) \ + ( \ + &alphao, \ + &ao, \ + &betao, \ + &co, \ + NULL, \ + NULL \ + ); \ +\ + /* Finalize BLIS. */ \ + bli_finalize_auto(); \ +} + +#endif + #ifdef BLIS_ENABLE_BLAS INSERT_GENTFUNC_BLAS( syrk, syrk ) #endif diff --git a/frame/compat/bla_trmm.c b/frame/compat/bla_trmm.c index 116d2b8c4..7ca20da74 100644 --- a/frame/compat/bla_trmm.c +++ b/frame/compat/bla_trmm.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -38,6 +39,9 @@ // // Define BLAS-to-BLIS interfaces. // + +#ifdef BLIS_BLAS3_CALLS_TAPI + #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ @@ -116,6 +120,103 @@ void PASTEF77(ch,blasname) \ bli_finalize_auto(); \ } +#else + +#undef GENTFUNC +#define GENTFUNC( ftype, ch, blasname, blisname ) \ +\ +void PASTEF77(ch,blasname) \ + ( \ + const f77_char* side, \ + const f77_char* uploa, \ + const f77_char* transa, \ + const f77_char* diaga, \ + const f77_int* m, \ + const f77_int* n, \ + const ftype* alpha, \ + const ftype* a, const f77_int* lda, \ + ftype* b, const f77_int* ldb \ + ) \ +{ \ + side_t blis_side; \ + uplo_t blis_uploa; \ + trans_t blis_transa; \ + diag_t blis_diaga; \ + dim_t m0, n0; \ +\ + /* Initialize BLIS. */ \ + bli_init_auto(); \ +\ + /* Perform BLAS parameter checking. */ \ + PASTEBLACHK(blasname) \ + ( \ + MKSTR(ch), \ + MKSTR(blasname), \ + side, \ + uploa, \ + transa, \ + diaga, \ + m, \ + n, \ + lda, \ + ldb \ + ); \ +\ + /* Map BLAS chars to their corresponding BLIS enumerated type value. */ \ + bli_param_map_netlib_to_blis_side( *side, &blis_side ); \ + bli_param_map_netlib_to_blis_uplo( *uploa, &blis_uploa ); \ + bli_param_map_netlib_to_blis_trans( *transa, &blis_transa ); \ + bli_param_map_netlib_to_blis_diag( *diaga, &blis_diaga ); \ +\ + /* Convert/typecast negative values of m and n to zero. */ \ + bli_convert_blas_dim1( *m, m0 ); \ + bli_convert_blas_dim1( *n, n0 ); \ +\ + /* Set the row and column strides of the matrix operands. */ \ + const inc_t rs_a = 1; \ + const inc_t cs_a = *lda; \ + const inc_t rs_b = 1; \ + const inc_t cs_b = *ldb; \ +\ + const num_t dt = PASTEMAC(ch,type); \ +\ + const struc_t struca = BLIS_TRIANGULAR; \ +\ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t bo = BLIS_OBJECT_INITIALIZER; \ +\ + dim_t mn0_a; \ +\ + bli_set_dim_with_side( blis_side, m0, n0, &mn0_a ); \ +\ + bli_obj_init_finish_1x1( dt, (ftype*)alpha, &alphao ); \ +\ + bli_obj_init_finish( dt, mn0_a, mn0_a, (ftype*)a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m0, n0, (ftype*)b, rs_b, cs_b, &bo ); \ +\ + bli_obj_set_uplo( blis_uploa, &ao ); \ + bli_obj_set_diag( blis_diaga, &ao ); \ + bli_obj_set_conjtrans( blis_transa, &ao ); \ +\ + bli_obj_set_struc( struca, &ao ); \ +\ + PASTEMAC(blisname,BLIS_OAPI_EX_SUF) \ + ( \ + blis_side, \ + &alphao, \ + &ao, \ + &bo, \ + NULL, \ + NULL \ + ); \ +\ + /* Finalize BLIS. */ \ + bli_finalize_auto(); \ +} + +#endif + #ifdef BLIS_ENABLE_BLAS INSERT_GENTFUNC_BLAS( trmm, trmm ) #endif diff --git a/frame/compat/bla_trsm.c b/frame/compat/bla_trsm.c index 70597cc93..0e1c2e329 100644 --- a/frame/compat/bla_trsm.c +++ b/frame/compat/bla_trsm.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -38,6 +39,9 @@ // // Define BLAS-to-BLIS interfaces. // + +#ifdef BLIS_BLAS3_CALLS_TAPI + #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ @@ -116,6 +120,103 @@ void PASTEF77(ch,blasname) \ bli_finalize_auto(); \ } +#else + +#undef GENTFUNC +#define GENTFUNC( ftype, ch, blasname, blisname ) \ +\ +void PASTEF77(ch,blasname) \ + ( \ + const f77_char* side, \ + const f77_char* uploa, \ + const f77_char* transa, \ + const f77_char* diaga, \ + const f77_int* m, \ + const f77_int* n, \ + const ftype* alpha, \ + const ftype* a, const f77_int* lda, \ + ftype* b, const f77_int* ldb \ + ) \ +{ \ + side_t blis_side; \ + uplo_t blis_uploa; \ + trans_t blis_transa; \ + diag_t blis_diaga; \ + dim_t m0, n0; \ +\ + /* Initialize BLIS. */ \ + bli_init_auto(); \ +\ + /* Perform BLAS parameter checking. */ \ + PASTEBLACHK(blasname) \ + ( \ + MKSTR(ch), \ + MKSTR(blasname), \ + side, \ + uploa, \ + transa, \ + diaga, \ + m, \ + n, \ + lda, \ + ldb \ + ); \ +\ + /* Map BLAS chars to their corresponding BLIS enumerated type value. */ \ + bli_param_map_netlib_to_blis_side( *side, &blis_side ); \ + bli_param_map_netlib_to_blis_uplo( *uploa, &blis_uploa ); \ + bli_param_map_netlib_to_blis_trans( *transa, &blis_transa ); \ + bli_param_map_netlib_to_blis_diag( *diaga, &blis_diaga ); \ +\ + /* Convert/typecast negative values of m and n to zero. */ \ + bli_convert_blas_dim1( *m, m0 ); \ + bli_convert_blas_dim1( *n, n0 ); \ +\ + /* Set the row and column strides of the matrix operands. */ \ + const inc_t rs_a = 1; \ + const inc_t cs_a = *lda; \ + const inc_t rs_b = 1; \ + const inc_t cs_b = *ldb; \ +\ + const num_t dt = PASTEMAC(ch,type); \ +\ + const struc_t struca = BLIS_TRIANGULAR; \ +\ + obj_t alphao = BLIS_OBJECT_INITIALIZER_1X1; \ + obj_t ao = BLIS_OBJECT_INITIALIZER; \ + obj_t bo = BLIS_OBJECT_INITIALIZER; \ +\ + dim_t mn0_a; \ +\ + bli_set_dim_with_side( blis_side, m0, n0, &mn0_a ); \ +\ + bli_obj_init_finish_1x1( dt, (ftype*)alpha, &alphao ); \ +\ + bli_obj_init_finish( dt, mn0_a, mn0_a, (ftype*)a, rs_a, cs_a, &ao ); \ + bli_obj_init_finish( dt, m0, n0, (ftype*)b, rs_b, cs_b, &bo ); \ +\ + bli_obj_set_uplo( blis_uploa, &ao ); \ + bli_obj_set_diag( blis_diaga, &ao ); \ + bli_obj_set_conjtrans( blis_transa, &ao ); \ +\ + bli_obj_set_struc( struca, &ao ); \ +\ + PASTEMAC(blisname,BLIS_OAPI_EX_SUF) \ + ( \ + blis_side, \ + &alphao, \ + &ao, \ + &bo, \ + NULL, \ + NULL \ + ); \ +\ + /* Finalize BLIS. */ \ + bli_finalize_auto(); \ +} + +#endif + #ifdef BLIS_ENABLE_BLAS INSERT_GENTFUNC_BLAS( trsm, trsm ) #endif diff --git a/frame/include/bli_config_macro_defs.h b/frame/include/bli_config_macro_defs.h index 46f78c27f..8734ff672 100644 --- a/frame/include/bli_config_macro_defs.h +++ b/frame/include/bli_config_macro_defs.h @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -45,11 +46,11 @@ // internally within BLIS as well as those exposed in the native BLAS-like BLIS // interface. #ifndef BLIS_INT_TYPE_SIZE -#ifdef BLIS_ARCH_64 -#define BLIS_INT_TYPE_SIZE 64 -#else -#define BLIS_INT_TYPE_SIZE 32 -#endif + #ifdef BLIS_ARCH_64 + #define BLIS_INT_TYPE_SIZE 64 + #else + #define BLIS_INT_TYPE_SIZE 32 + #endif #endif @@ -157,7 +158,19 @@ // C99 type "long int". Note that this ONLY affects integers used within the // BLAS compatibility layer. #ifndef BLIS_BLAS_INT_TYPE_SIZE -#define BLIS_BLAS_INT_TYPE_SIZE 32 + #define BLIS_BLAS_INT_TYPE_SIZE 32 +#endif + +// By default, the level-3 BLAS routines are implemented by directly calling +// the BLIS object API. Alternatively, they may first call the typed BLIS +// API, which will then call the object API. +//#define BLIS_BLAS3_CALLS_TAPI +#ifdef BLIS_BLAS3_CALLS_TAPI + #undef BLIS_BLAS3_CALLS_OAPI +#else + // Default behavior is to call object API directly. + #undef BLIS_BLAS3_CALLS_OAPI // In case user explicitly enabled. + #define BLIS_BLAS3_CALLS_OAPI #endif diff --git a/frame/include/bli_obj_macro_defs.h b/frame/include/bli_obj_macro_defs.h index e3eb2b874..788ac0a75 100644 --- a/frame/include/bli_obj_macro_defs.h +++ b/frame/include/bli_obj_macro_defs.h @@ -6,6 +6,7 @@ Copyright (C) 2014, The University of Texas at Austin Copyright (C) 2016, Hewlett Packard Enterprise Development LP + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -1127,6 +1128,55 @@ static void bli_obj_set_panel_stride( inc_t ps, obj_t* obj ) obj->ps = ps; } +// -- Initialization-related macros -- + +// Finish the initialization started by the matrix-specific static initializer +// (e.g. BLIS_OBJECT_PREINITIALIZER) +// NOTE: This is intended only for use in the BLAS compatibility API and typed +// BLIS API. + +static void bli_obj_init_finish( num_t dt, dim_t m, dim_t n, void* p, inc_t rs, inc_t cs, obj_t* obj ) +{ + bli_obj_set_as_root( obj ); + + bli_obj_set_dt( dt, obj ); + bli_obj_set_target_dt( dt, obj ); + bli_obj_set_exec_dt( dt, obj ); + bli_obj_set_comp_dt( dt, obj ); + + bli_obj_set_dims( m, n, obj ); + bli_obj_set_strides( rs, cs, obj ); + + siz_t elem_size = sizeof( float ); + if ( bli_dt_prec_is_double( dt ) ) elem_size *= 2; + if ( bli_dt_dom_is_complex( dt ) ) elem_size *= 2; + bli_obj_set_elem_size( elem_size, obj ); + + bli_obj_set_buffer( p, obj ); + + bli_obj_set_scalar_dt( dt, obj ); + void* restrict s = bli_obj_internal_scalar_buffer( obj ); + + if ( bli_dt_prec_is_single( dt ) ) { (( scomplex* )s)->real = 1.0F; + (( scomplex* )s)->imag = 0.0F; } + else if ( bli_dt_prec_is_double( dt ) ) { (( dcomplex* )s)->real = 1.0; + (( dcomplex* )s)->imag = 0.0; } +} + +// Finish the initialization started by the 1x1-specific static initializer +// (e.g. BLIS_OBJECT_PREINITIALIZER_1X1) +// NOTE: This is intended only for use in the BLAS compatibility API and typed +// BLIS API. + +static void bli_obj_init_finish_1x1( num_t dt, void* p, obj_t* obj ) +{ + bli_obj_set_as_root( obj ); + + bli_obj_set_dt( dt, obj ); + + bli_obj_set_buffer( p, obj ); +} + // -- Miscellaneous object macros -- // Toggle the region referenced (or "stored"). @@ -1158,38 +1208,6 @@ static void bli_obj_set_defaults( obj_t* obj ) obj->info = obj->info | BLIS_BITVAL_DENSE | BLIS_BITVAL_GENERAL; } -// Initializors for global scalar constants. -// NOTE: These must remain cpp macros since they are initializor -// expressions, not functions. - -#define bli_obj_init_const( buffer0 ) \ -{ \ - .root = NULL, \ -\ - .off = { 0, 0 }, \ - .dim = { 1, 1 }, \ - .diag_off = 0, \ -\ - .info = 0x0 | BLIS_BITVAL_CONST_TYPE | \ - BLIS_BITVAL_DENSE | \ - BLIS_BITVAL_GENERAL, \ - .elem_size = sizeof( constdata_t ), \ -\ - .buffer = buffer0, \ - .rs = 1, \ - .cs = 1, \ - .is = 1 \ -} - -#define bli_obj_init_constdata( val ) \ -{ \ - .s = ( float )val, \ - .d = ( double )val, \ - .c = { .real = ( float )val, .imag = 0.0f }, \ - .z = { .real = ( double )val, .imag = 0.0 }, \ - .i = ( gint_t )val, \ -} - // Acquire buffer at object's submatrix offset (offset-aware buffer query). static void* bli_obj_buffer_at_off( obj_t* obj ) diff --git a/frame/include/bli_param_macro_defs.h b/frame/include/bli_param_macro_defs.h index b22949c07..28b93743f 100644 --- a/frame/include/bli_param_macro_defs.h +++ b/frame/include/bli_param_macro_defs.h @@ -132,12 +132,36 @@ static dom_t bli_dt_domain( num_t dt ) ( dt & BLIS_DOMAIN_BIT ); } +static bool_t bli_dt_dom_is_real( num_t dt ) +{ + return ( bool_t ) + ( ( dt & BLIS_DOMAIN_BIT ) == BLIS_REAL ); +} + +static bool_t bli_dt_dom_is_complex( num_t dt ) +{ + return ( bool_t ) + ( ( dt & BLIS_DOMAIN_BIT ) == BLIS_COMPLEX ); +} + static prec_t bli_dt_prec( num_t dt ) { return ( prec_t ) ( dt & BLIS_PRECISION_BIT ); } +static bool_t bli_dt_prec_is_single( num_t dt ) +{ + return ( bool_t ) + ( ( dt & BLIS_PRECISION_BIT ) == BLIS_SINGLE_PREC ); +} + +static bool_t bli_dt_prec_is_double( num_t dt ) +{ + return ( bool_t ) + ( ( dt & BLIS_PRECISION_BIT ) == BLIS_DOUBLE_PREC ); +} + static num_t bli_dt_proj_to_real( num_t dt ) { return ( num_t ) diff --git a/frame/include/bli_type_defs.h b/frame/include/bli_type_defs.h index 2b778e663..605338963 100644 --- a/frame/include/bli_type_defs.h +++ b/frame/include/bli_type_defs.h @@ -863,8 +863,10 @@ typedef enum BLIS_MC, BLIS_KC, BLIS_NC, + BLIS_M2, // level-2 blocksize in m dimension BLIS_N2, // level-2 blocksize in n dimension + BLIS_AF, // level-1f axpyf fusing factor BLIS_DF, // level-1f dotxf fusing factor BLIS_XF, // level-1f dotxaxpyf fusing factor @@ -1139,6 +1141,71 @@ typedef struct obj_s dim_t n_panel; // n dimension of a "full" panel } obj_t; +// Pre-initializors. Things that must be set afterwards: +// - root object pointer +// - info bitfields: dt, target_dt, exec_dt, comp_dt +// - info2 bitfields: scalar_dt +// - elem_size +// - dims, strides +// - buffer +// - internal scalar buffer (must always set imaginary component) + +#define BLIS_OBJECT_INITIALIZER \ +{ \ + .root = NULL, \ +\ + .off = { 0, 0 }, \ + .dim = { 0, 0 }, \ + .diag_off = 0, \ +\ + .info = 0x0 | BLIS_BITVAL_DENSE | \ + BLIS_BITVAL_GENERAL, \ + .info2 = 0x0, \ + .elem_size = sizeof( float ), /* this is changed later. */ \ +\ + .buffer = NULL, \ + .rs = 0, \ + .cs = 0, \ + .is = 1, \ +\ + .scalar = { 0.0, 0.0 }, \ +\ + .m_padded = 0, \ + .n_padded = 0, \ + .ps = 0, \ + .pd = 0, \ + .m_panel = 0, \ + .n_panel = 0 \ +} + +#define BLIS_OBJECT_INITIALIZER_1X1 \ +{ \ + .root = NULL, \ +\ + .off = { 0, 0 }, \ + .dim = { 1, 1 }, \ + .diag_off = 0, \ +\ + .info = 0x0 | BLIS_BITVAL_DENSE | \ + BLIS_BITVAL_GENERAL, \ + .info2 = 0x0, \ + .elem_size = sizeof( float ), /* this is changed later. */ \ +\ + .buffer = NULL, \ + .rs = 0, \ + .cs = 0, \ + .is = 1, \ +\ + .scalar = { 0.0, 0.0 }, \ +\ + .m_padded = 0, \ + .n_padded = 0, \ + .ps = 0, \ + .pd = 0, \ + .m_panel = 0, \ + .n_panel = 0 \ +} + // Define these macros here since they must be updated if contents of // obj_t changes. @@ -1205,6 +1272,39 @@ static void bli_obj_init_subpart_from( obj_t* a, obj_t* b ) b->n_panel = a->n_panel; } +// Initializors for global scalar constants. +// NOTE: These must remain cpp macros since they are initializor +// expressions, not functions. + +#define bli_obj_init_const( buffer0 ) \ +{ \ + .root = NULL, \ +\ + .off = { 0, 0 }, \ + .dim = { 1, 1 }, \ + .diag_off = 0, \ +\ + .info = 0x0 | BLIS_BITVAL_CONST_TYPE | \ + BLIS_BITVAL_DENSE | \ + BLIS_BITVAL_GENERAL, \ + .info2 = 0x0, \ + .elem_size = sizeof( constdata_t ), \ +\ + .buffer = buffer0, \ + .rs = 1, \ + .cs = 1, \ + .is = 1 \ +} + +#define bli_obj_init_constdata( val ) \ +{ \ + .s = ( float )val, \ + .d = ( double )val, \ + .c = { .real = ( float )val, .imag = 0.0f }, \ + .z = { .real = ( double )val, .imag = 0.0 }, \ + .i = ( gint_t )val, \ +} + // -- Context type -- From e5fc00a2e7532bfa5e116dda2a63ce177f3b0573 Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Wed, 27 Feb 2019 17:27:23 -0600 Subject: [PATCH 011/109] Add symbol export macro for all functions (#302) * initial export of blis functions * Regenerate def file for master * restore bli_extern_defs exporting for now --- build/bli_config.h.in | 3 + build/detect/config/config_detect.c | 1 + build/libblis-symbols.def | 188 ++++++------ frame/0/bli_l0_check.c | 6 +- frame/0/bli_l0_check.h | 20 +- frame/0/bli_l0_fpa.h | 2 +- frame/0/bli_l0_oapi.c | 16 +- frame/0/bli_l0_oapi.h | 14 +- frame/0/bli_l0_tapi.c | 20 +- frame/0/bli_l0_tapi.h | 20 +- frame/0/copysc/bli_copysc.c | 4 +- frame/0/copysc/bli_copysc.h | 4 +- frame/1/bli_l1v_check.c | 18 +- frame/1/bli_l1v_check.h | 34 +-- frame/1/bli_l1v_fpa.h | 2 +- frame/1/bli_l1v_ker_prot.h | 28 +- frame/1/bli_l1v_oapi.c | 20 +- frame/1/bli_l1v_oapi.h | 20 +- frame/1/bli_l1v_tapi.c | 20 +- frame/1/bli_l1v_tapi.h | 20 +- frame/1/other/packv/bli_packv_check.h | 2 +- frame/1/other/packv/bli_packv_cntl.h | 2 +- frame/1/other/packv/bli_packv_init.h | 4 +- frame/1/other/packv/bli_packv_int.h | 2 +- frame/1/other/packv/bli_packv_unb_var1.c | 2 +- frame/1/other/packv/bli_packv_unb_var1.h | 4 +- frame/1/other/scalv/bli_scalv_cntl.h | 8 +- frame/1/other/scalv/bli_scalv_int.h | 2 +- frame/1/other/unpackv/bli_unpackv_check.h | 2 +- frame/1/other/unpackv/bli_unpackv_cntl.h | 8 +- frame/1/other/unpackv/bli_unpackv_int.h | 4 +- frame/1/other/unpackv/bli_unpackv_unb_var1.c | 2 +- frame/1/other/unpackv/bli_unpackv_unb_var1.h | 4 +- frame/1d/bli_l1d_check.c | 10 +- frame/1d/bli_l1d_check.h | 18 +- frame/1d/bli_l1d_fpa.h | 2 +- frame/1d/bli_l1d_oapi.c | 14 +- frame/1d/bli_l1d_oapi.h | 10 +- frame/1d/bli_l1d_tapi.c | 14 +- frame/1d/bli_l1d_tapi.h | 14 +- frame/1f/bli_l1f_check.h | 10 +- frame/1f/bli_l1f_fpa.h | 2 +- frame/1f/bli_l1f_ker_prot.h | 10 +- frame/1f/bli_l1f_oapi.c | 10 +- frame/1f/bli_l1f_oapi.h | 10 +- frame/1f/bli_l1f_tapi.c | 10 +- frame/1f/bli_l1f_tapi.h | 10 +- frame/1m/bli_l1m_check.c | 8 +- frame/1m/bli_l1m_check.h | 14 +- frame/1m/bli_l1m_fpa.h | 4 +- frame/1m/bli_l1m_ker_prot.h | 12 +- frame/1m/bli_l1m_oapi.c | 12 +- frame/1m/bli_l1m_oapi.h | 8 +- frame/1m/bli_l1m_tapi.c | 14 +- frame/1m/bli_l1m_tapi.h | 10 +- frame/1m/bli_l1m_unb_var1.c | 10 +- frame/1m/bli_l1m_unb_var1.h | 10 +- frame/1m/other/bli_scalm_cntl.h | 2 +- frame/1m/other/bli_scalm_int.h | 2 +- frame/1m/packm/bli_packm_blk_var1.c | 2 +- frame/1m/packm/bli_packm_blk_var1_md.c | 4 +- frame/1m/packm/bli_packm_blk_var1_md.h | 4 +- frame/1m/packm/bli_packm_check.c | 4 +- frame/1m/packm/bli_packm_check.h | 4 +- frame/1m/packm/bli_packm_cntl.h | 2 +- frame/1m/packm/bli_packm_cxk.c | 2 +- frame/1m/packm/bli_packm_cxk.h | 2 +- frame/1m/packm/bli_packm_cxk_1er.c | 2 +- frame/1m/packm/bli_packm_cxk_1er.h | 2 +- frame/1m/packm/bli_packm_cxk_3mis.c | 2 +- frame/1m/packm/bli_packm_cxk_3mis.h | 2 +- frame/1m/packm/bli_packm_cxk_4mi.c | 2 +- frame/1m/packm/bli_packm_cxk_4mi.h | 2 +- frame/1m/packm/bli_packm_cxk_rih.c | 2 +- frame/1m/packm/bli_packm_cxk_rih.h | 2 +- frame/1m/packm/bli_packm_init.h | 4 +- frame/1m/packm/bli_packm_int.c | 2 +- frame/1m/packm/bli_packm_int.h | 2 +- frame/1m/packm/bli_packm_part.c | 6 +- frame/1m/packm/bli_packm_part.h | 8 +- frame/1m/packm/bli_packm_struc_cxk.c | 6 +- frame/1m/packm/bli_packm_struc_cxk.h | 6 +- frame/1m/packm/bli_packm_struc_cxk_1er.c | 6 +- frame/1m/packm/bli_packm_struc_cxk_1er.h | 6 +- frame/1m/packm/bli_packm_struc_cxk_3mis.c | 6 +- frame/1m/packm/bli_packm_struc_cxk_3mis.h | 6 +- frame/1m/packm/bli_packm_struc_cxk_4mi.c | 6 +- frame/1m/packm/bli_packm_struc_cxk_4mi.h | 6 +- frame/1m/packm/bli_packm_struc_cxk_md.c | 6 +- frame/1m/packm/bli_packm_struc_cxk_md.h | 4 +- frame/1m/packm/bli_packm_struc_cxk_rih.c | 6 +- frame/1m/packm/bli_packm_struc_cxk_rih.h | 6 +- frame/1m/packm/bli_packm_thrinfo.c | 4 +- frame/1m/packm/bli_packm_thrinfo.h | 8 +- frame/1m/packm/bli_packm_unb_var1.c | 2 +- frame/1m/packm/bli_packm_unb_var1.h | 4 +- frame/1m/packm/bli_packm_var.h | 6 +- frame/1m/unpackm/bli_unpackm_blk_var1.c | 4 +- frame/1m/unpackm/bli_unpackm_blk_var1.h | 4 +- frame/1m/unpackm/bli_unpackm_check.c | 2 +- frame/1m/unpackm/bli_unpackm_check.h | 2 +- frame/1m/unpackm/bli_unpackm_cntl.h | 2 +- frame/1m/unpackm/bli_unpackm_cxk.c | 2 +- frame/1m/unpackm/bli_unpackm_cxk.h | 2 +- frame/1m/unpackm/bli_unpackm_int.c | 2 +- frame/1m/unpackm/bli_unpackm_int.h | 2 +- frame/1m/unpackm/bli_unpackm_unb_var1.c | 4 +- frame/1m/unpackm/bli_unpackm_unb_var1.h | 4 +- frame/2/bli_l2_check.h | 12 +- frame/2/bli_l2_fpa.h | 4 +- frame/2/bli_l2_oapi.c | 12 +- frame/2/bli_l2_oapi.h | 8 +- frame/2/bli_l2_tapi.c | 14 +- frame/2/bli_l2_tapi.h | 14 +- frame/2/gemv/bli_gemv_unb_var1.c | 2 +- frame/2/gemv/bli_gemv_unb_var2.c | 2 +- frame/2/gemv/bli_gemv_unf_var1.c | 2 +- frame/2/gemv/bli_gemv_unf_var2.c | 2 +- frame/2/gemv/bli_gemv_var.h | 4 +- frame/2/gemv/bli_gemv_var_oapi.c | 2 +- frame/2/gemv/bli_gemv_var_oapi.c.prev | 2 +- frame/2/gemv/other/bli_gemv_cntl.h | 8 +- frame/2/gemv/other/bli_gemv_front.c | 2 +- frame/2/gemv/other/bli_gemv_front.h | 4 +- frame/2/gemv/other/bli_gemv_int.h | 2 +- frame/2/ger/bli_ger_unb_var1.c | 2 +- frame/2/ger/bli_ger_unb_var2.c | 2 +- frame/2/ger/bli_ger_var.h | 4 +- frame/2/ger/bli_ger_var_oapi.c | 2 +- frame/2/ger/other/bli_ger_cntl.h | 8 +- frame/2/ger/other/bli_ger_front.c | 2 +- frame/2/ger/other/bli_ger_front.h | 4 +- frame/2/ger/other/bli_ger_int.h | 2 +- frame/2/hemv/bli_hemv_unb_var1.c | 2 +- frame/2/hemv/bli_hemv_unb_var2.c | 2 +- frame/2/hemv/bli_hemv_unb_var3.c | 2 +- frame/2/hemv/bli_hemv_unb_var4.c | 2 +- frame/2/hemv/bli_hemv_unf_var1.c | 2 +- frame/2/hemv/bli_hemv_unf_var1a.c | 2 +- frame/2/hemv/bli_hemv_unf_var3.c | 2 +- frame/2/hemv/bli_hemv_unf_var3a.c | 2 +- frame/2/hemv/bli_hemv_var.h | 4 +- frame/2/hemv/bli_hemv_var_oapi.c | 2 +- frame/2/hemv/other/bli_hemv_cntl.h | 8 +- frame/2/hemv/other/bli_hemv_front.c | 2 +- frame/2/hemv/other/bli_hemv_front.h | 4 +- frame/2/hemv/other/bli_hemv_int.h | 2 +- frame/2/her/bli_her_unb_var1.c | 2 +- frame/2/her/bli_her_unb_var2.c | 2 +- frame/2/her/bli_her_var.h | 4 +- frame/2/her/bli_her_var_oapi.c | 2 +- frame/2/her/other/bli_her_cntl.h | 8 +- frame/2/her/other/bli_her_front.c | 2 +- frame/2/her/other/bli_her_front.h | 4 +- frame/2/her/other/bli_her_int.h | 2 +- frame/2/her2/bli_her2_unb_var1.c | 2 +- frame/2/her2/bli_her2_unb_var2.c | 2 +- frame/2/her2/bli_her2_unb_var3.c | 2 +- frame/2/her2/bli_her2_unb_var4.c | 2 +- frame/2/her2/bli_her2_unf_var1.c | 2 +- frame/2/her2/bli_her2_unf_var4.c | 2 +- frame/2/her2/bli_her2_var.h | 4 +- frame/2/her2/bli_her2_var_oapi.c | 2 +- frame/2/her2/other/bli_her2_cntl.h | 6 +- frame/2/her2/other/bli_her2_front.c | 2 +- frame/2/her2/other/bli_her2_front.h | 4 +- frame/2/her2/other/bli_her2_int.h | 2 +- frame/2/symv/other/bli_symv_front.c | 2 +- frame/2/symv/other/bli_symv_front.h | 4 +- frame/2/syr/other/bli_syr_front.c | 2 +- frame/2/syr/other/bli_syr_front.h | 4 +- frame/2/syr2/other/bli_syr2_front.c | 2 +- frame/2/syr2/other/bli_syr2_front.h | 4 +- frame/2/trmv/bli_trmv_unb_var1.c | 2 +- frame/2/trmv/bli_trmv_unb_var2.c | 2 +- frame/2/trmv/bli_trmv_unf_var1.c | 2 +- frame/2/trmv/bli_trmv_unf_var2.c | 2 +- frame/2/trmv/bli_trmv_var.h | 4 +- frame/2/trmv/bli_trmv_var_oapi.c | 2 +- frame/2/trmv/other/bli_trmv_cntl.h | 8 +- frame/2/trmv/other/bli_trmv_front.c | 2 +- frame/2/trmv/other/bli_trmv_front.h | 4 +- frame/2/trmv/other/bli_trmv_int.h | 2 +- frame/2/trsv/bli_trsv_unb_var1.c | 2 +- frame/2/trsv/bli_trsv_unb_var2.c | 2 +- frame/2/trsv/bli_trsv_unf_var1.c | 2 +- frame/2/trsv/bli_trsv_unf_var2.c | 2 +- frame/2/trsv/bli_trsv_var.h | 4 +- frame/2/trsv/bli_trsv_var_oapi.c | 2 +- frame/2/trsv/other/bli_trsv_cntl.h | 8 +- frame/2/trsv/other/bli_trsv_front.c | 2 +- frame/2/trsv/other/bli_trsv_front.h | 4 +- frame/2/trsv/other/bli_trsv_int.h | 2 +- frame/3/bli_l3_blocksize.h | 6 +- frame/3/bli_l3_check.h | 16 +- frame/3/bli_l3_cntl.h | 4 +- frame/3/bli_l3_direct.h | 4 +- frame/3/bli_l3_oapi.c | 8 +- frame/3/bli_l3_oapi.h | 8 +- frame/3/bli_l3_packm.h | 2 +- frame/3/bli_l3_prune.c | 20 +- frame/3/bli_l3_prune.h | 4 +- frame/3/bli_l3_tapi.c | 16 +- frame/3/bli_l3_tapi.h | 16 +- frame/3/bli_l3_thrinfo.h | 10 +- frame/3/bli_l3_ukr_fpa.h | 2 +- frame/3/bli_l3_ukr_oapi.c | 6 +- frame/3/bli_l3_ukr_oapi.h | 6 +- frame/3/bli_l3_ukr_prot.h | 6 +- frame/3/bli_l3_ukr_tapi.c | 6 +- frame/3/gemm/bli_gemm_cntl.c | 2 +- frame/3/gemm/bli_gemm_cntl.h | 10 +- frame/3/gemm/bli_gemm_front.c | 2 +- frame/3/gemm/bli_gemm_front.h | 4 +- frame/3/gemm/bli_gemm_int.c | 2 +- frame/3/gemm/bli_gemm_int.h | 2 +- frame/3/gemm/bli_gemm_ker_var2.c | 2 +- frame/3/gemm/bli_gemm_ker_var2_md.c | 2 +- frame/3/gemm/bli_gemm_md.h | 26 +- frame/3/gemm/bli_gemm_md_c2r_ref.c | 2 +- frame/3/gemm/bli_gemm_var.h | 4 +- frame/3/gemm/ind/bli_gemm4mb_ker_var2.c | 2 +- frame/3/gemm/ind/old/bli_gemm3m2_ker_var2.c | 2 +- frame/3/gemm/other/bli_gemm_ker_var2.c | 2 +- frame/3/gemm/other/bli_gemm_ker_var2rr.c | 2 +- frame/3/gemm/other/bli_gemm_ker_var2sl.c | 2 +- frame/3/gemm/other/bli_gemm_ker_var5.c | 2 +- frame/3/gemm/other/bli_gemm_ker_var5.h | 4 +- frame/3/hemm/bli_hemm_front.c | 2 +- frame/3/hemm/bli_hemm_front.h | 2 +- frame/3/her2k/bli_her2k_front.c | 2 +- frame/3/her2k/bli_her2k_front.h | 2 +- frame/3/herk/bli_herk_front.c | 2 +- frame/3/herk/bli_herk_front.h | 2 +- frame/3/herk/bli_herk_l_ker_var2.c | 2 +- frame/3/herk/bli_herk_u_ker_var2.c | 2 +- frame/3/herk/bli_herk_var.h | 4 +- .../herk/other/bli_herk_l_ker_var2.1looprr.c | 2 +- frame/3/herk/other/bli_herk_l_ker_var2.c | 2 +- frame/3/herk/other/bli_herk_l_ker_var2rr.c | 2 +- frame/3/herk/other/bli_herk_l_ker_var2sl.c | 2 +- .../herk/other/bli_herk_u_ker_var2.1looprr.c | 2 +- frame/3/herk/other/bli_herk_u_ker_var2.c | 2 +- frame/3/herk/other/bli_herk_u_ker_var2rr.c | 2 +- frame/3/herk/other/bli_herk_u_ker_var2sl.c | 2 +- frame/3/symm/bli_symm_front.c | 2 +- frame/3/symm/bli_symm_front.h | 2 +- frame/3/syr2k/bli_syr2k_front.c | 2 +- frame/3/syr2k/bli_syr2k_front.h | 2 +- frame/3/syrk/bli_syrk_front.c | 2 +- frame/3/syrk/bli_syrk_front.h | 2 +- frame/3/trmm/bli_trmm_front.c | 2 +- frame/3/trmm/bli_trmm_front.h | 2 +- frame/3/trmm/bli_trmm_ll_ker_var2.c | 2 +- frame/3/trmm/bli_trmm_lu_ker_var2.c | 2 +- frame/3/trmm/bli_trmm_rl_ker_var2.c | 2 +- frame/3/trmm/bli_trmm_ru_ker_var2.c | 2 +- frame/3/trmm/bli_trmm_var.h | 4 +- frame/3/trmm/other/bli_trmm_ll_ker_var2.c | 2 +- frame/3/trmm/other/bli_trmm_ll_ker_var2rr.c | 2 +- frame/3/trmm/other/bli_trmm_ll_ker_var2sl.c | 2 +- frame/3/trmm/other/bli_trmm_lu_ker_var2.c | 2 +- frame/3/trmm/other/bli_trmm_lu_ker_var2rr.c | 2 +- frame/3/trmm/other/bli_trmm_lu_ker_var2sl.c | 2 +- frame/3/trmm/other/bli_trmm_rl_ker_var2.c | 2 +- frame/3/trmm/other/bli_trmm_rl_ker_var2rr.c | 2 +- frame/3/trmm/other/bli_trmm_rl_ker_var2sl.c | 2 +- frame/3/trmm/other/bli_trmm_ru_ker_var2.c | 2 +- frame/3/trmm/other/bli_trmm_ru_ker_var2rr.c | 2 +- frame/3/trmm/other/bli_trmm_ru_ker_var2sl.c | 2 +- frame/3/trmm3/bli_trmm3_front.c | 2 +- frame/3/trmm3/bli_trmm3_front.h | 2 +- frame/3/trsm/bli_trsm_cntl.c | 2 +- frame/3/trsm/bli_trsm_cntl.h | 10 +- frame/3/trsm/bli_trsm_front.c | 4 +- frame/3/trsm/bli_trsm_front.h | 2 +- frame/3/trsm/bli_trsm_int.c | 2 +- frame/3/trsm/bli_trsm_int.h | 2 +- frame/3/trsm/bli_trsm_ll_ker_var2.c | 2 +- frame/3/trsm/bli_trsm_lu_ker_var2.c | 2 +- frame/3/trsm/bli_trsm_rl_ker_var2.c | 2 +- frame/3/trsm/bli_trsm_ru_ker_var2.c | 2 +- frame/3/trsm/bli_trsm_var.h | 4 +- frame/3/trsm/other/bli_trsm_ll_ker_var2.c | 2 +- frame/3/trsm/other/bli_trsm_ll_ker_var2rr.c | 2 +- frame/3/trsm/other/bli_trsm_ll_ker_var2sl.c | 2 +- frame/3/trsm/other/bli_trsm_lu_ker_var2.c | 2 +- frame/3/trsm/other/bli_trsm_lu_ker_var2rr.c | 2 +- frame/3/trsm/other/bli_trsm_lu_ker_var2sl.c | 2 +- frame/3/trsm/other/bli_trsm_rl_ker_var2.c | 2 +- frame/3/trsm/other/bli_trsm_ru_ker_var2.c | 2 +- frame/base/bli_apool.h | 18 +- frame/base/bli_arch.c | 1 + frame/base/bli_arch.h | 8 +- frame/base/bli_array.h | 10 +- frame/base/bli_blksz.h | 28 +- frame/base/bli_check.h | 126 ++++---- frame/base/bli_clock.h | 6 +- frame/base/bli_cntl.h | 18 +- frame/base/bli_cntx.h | 16 +- frame/base/bli_const.h | 4 +- frame/base/bli_cpuid.c | 1 + frame/base/bli_cpuid.h | 36 +-- frame/base/bli_error.c | 2 +- frame/base/bli_error.h | 12 +- frame/base/bli_func.h | 12 +- frame/base/bli_getopt.c | 2 +- frame/base/bli_getopt.h | 4 +- frame/base/bli_gks.h | 30 +- frame/base/bli_info.h | 84 ++--- frame/base/bli_init.h | 16 +- frame/base/bli_machval.c | 2 +- frame/base/bli_machval.h | 4 +- frame/base/bli_malloc.c | 2 +- frame/base/bli_malloc.h | 26 +- frame/base/bli_mbool.h | 6 +- frame/base/bli_membrk.h | 22 +- frame/base/bli_memsys.h | 4 +- frame/base/bli_obj.h | 32 +- frame/base/bli_obj_scalar.h | 18 +- frame/base/bli_param_map.h | 34 +-- frame/base/bli_part.h | 10 +- frame/base/bli_pool.h | 22 +- frame/base/bli_prune.h | 2 +- frame/base/bli_query.h | 6 +- frame/base/bli_rntm.h | 6 +- frame/base/bli_sba.h | 16 +- frame/base/bli_setgetij.c | 4 +- frame/base/bli_setgetij.h | 8 +- frame/base/bli_setri.h | 8 +- frame/base/bli_string.h | 2 +- frame/base/bli_winsys.h | 2 +- frame/base/cast/bli_castm.c | 6 +- frame/base/cast/bli_castm.h | 6 +- frame/base/cast/bli_castnzm.c | 6 +- frame/base/cast/bli_castnzm.h | 6 +- frame/base/cast/bli_castv.c | 6 +- frame/base/cast/bli_castv.h | 6 +- frame/base/cast/old/bli_cast_check.c | 4 +- frame/base/cast/old/bli_cast_check.h | 4 +- frame/base/check/bli_obj_check.c | 22 +- frame/base/check/bli_obj_check.h | 24 +- frame/base/check/bli_part_check.c | 6 +- frame/base/check/bli_part_check.h | 6 +- frame/base/noopt/bli_dlamch.h | 2 +- frame/base/noopt/bli_lsame.h | 2 +- frame/base/noopt/bli_slamch.h | 2 +- frame/base/proj/bli_projm.c | 4 +- frame/base/proj/bli_projm.h | 4 +- frame/base/proj/bli_projv.c | 4 +- frame/base/proj/bli_projv.h | 4 +- frame/base/proj/old/bli_proj_check.c | 4 +- frame/base/proj/old/bli_proj_check.h | 4 +- frame/compat/attic/bla_gbmv.c | 2 +- frame/compat/attic/bla_gbmv.h | 2 +- frame/compat/attic/bla_hbmv.c | 2 +- frame/compat/attic/bla_hbmv.h | 2 +- frame/compat/attic/bla_hpmv.c | 2 +- frame/compat/attic/bla_hpmv.h | 2 +- frame/compat/attic/bla_hpr.c | 2 +- frame/compat/attic/bla_hpr.h | 2 +- frame/compat/attic/bla_hpr2.c | 2 +- frame/compat/attic/bla_hpr2.h | 2 +- frame/compat/attic/bla_rot.c | 2 +- frame/compat/attic/bla_rot.h | 2 +- frame/compat/attic/bla_rotg.c | 2 +- frame/compat/attic/bla_rotg.h | 2 +- frame/compat/attic/bla_rotm.c | 2 +- frame/compat/attic/bla_rotm.h | 2 +- frame/compat/attic/bla_rotmg.c | 2 +- frame/compat/attic/bla_rotmg.h | 2 +- frame/compat/attic/bla_sbmv.c | 2 +- frame/compat/attic/bla_sbmv.h | 2 +- frame/compat/attic/bla_spmv.c | 2 +- frame/compat/attic/bla_spmv.h | 2 +- frame/compat/attic/bla_spr.c | 2 +- frame/compat/attic/bla_spr.h | 2 +- frame/compat/attic/bla_spr2.c | 2 +- frame/compat/attic/bla_spr2.h | 2 +- frame/compat/attic/bla_tbmv.c | 2 +- frame/compat/attic/bla_tbmv.h | 2 +- frame/compat/attic/bla_tbsv.c | 2 +- frame/compat/attic/bla_tbsv.h | 2 +- frame/compat/attic/bla_tpmv.c | 2 +- frame/compat/attic/bla_tpmv.h | 2 +- frame/compat/attic/bla_tpsv.c | 2 +- frame/compat/attic/bla_tpsv.h | 2 +- frame/compat/bla_amax.c | 2 +- frame/compat/bla_amax.h | 2 +- frame/compat/bla_asum.c | 2 +- frame/compat/bla_asum.h | 2 +- frame/compat/bla_axpy.c | 2 +- frame/compat/bla_axpy.h | 2 +- frame/compat/bla_copy.c | 2 +- frame/compat/bla_copy.h | 2 +- frame/compat/bla_dot.c | 6 +- frame/compat/bla_dot.h | 6 +- frame/compat/bla_gemm.c | 2 +- frame/compat/bla_gemm.h | 2 +- frame/compat/bla_gemv.c | 2 +- frame/compat/bla_gemv.h | 2 +- frame/compat/bla_ger.c | 2 +- frame/compat/bla_ger.h | 2 +- frame/compat/bla_hemm.c | 2 +- frame/compat/bla_hemm.h | 2 +- frame/compat/bla_hemv.c | 2 +- frame/compat/bla_hemv.h | 2 +- frame/compat/bla_her.c | 2 +- frame/compat/bla_her.h | 2 +- frame/compat/bla_her2.c | 2 +- frame/compat/bla_her2.h | 2 +- frame/compat/bla_her2k.c | 2 +- frame/compat/bla_her2k.h | 2 +- frame/compat/bla_herk.c | 2 +- frame/compat/bla_herk.h | 2 +- frame/compat/bla_nrm2.c | 2 +- frame/compat/bla_nrm2.h | 2 +- frame/compat/bla_scal.c | 2 +- frame/compat/bla_scal.h | 2 +- frame/compat/bla_swap.c | 2 +- frame/compat/bla_swap.h | 2 +- frame/compat/bla_symm.c | 2 +- frame/compat/bla_symm.h | 2 +- frame/compat/bla_symv.c | 2 +- frame/compat/bla_symv.h | 2 +- frame/compat/bla_syr.c | 2 +- frame/compat/bla_syr.h | 2 +- frame/compat/bla_syr2.c | 2 +- frame/compat/bla_syr2.h | 2 +- frame/compat/bla_syr2k.c | 2 +- frame/compat/bla_syr2k.h | 2 +- frame/compat/bla_syrk.c | 2 +- frame/compat/bla_syrk.h | 2 +- frame/compat/bla_trmm.c | 2 +- frame/compat/bla_trmm.h | 2 +- frame/compat/bla_trmv.c | 2 +- frame/compat/bla_trmv.h | 2 +- frame/compat/bla_trsm.c | 2 +- frame/compat/bla_trsm.h | 2 +- frame/compat/bla_trsv.c | 2 +- frame/compat/bla_trsv.h | 2 +- frame/compat/blis/thread/b77_thread.c | 4 +- frame/compat/blis/thread/b77_thread.h | 4 +- frame/compat/cblas/f77_sub/f77_amax_sub.c | 2 +- frame/compat/cblas/f77_sub/f77_amax_sub.h | 2 +- frame/compat/cblas/f77_sub/f77_asum_sub.c | 2 +- frame/compat/cblas/f77_sub/f77_asum_sub.h | 2 +- frame/compat/cblas/f77_sub/f77_dot_sub.c | 6 +- frame/compat/cblas/f77_sub/f77_dot_sub.h | 6 +- frame/compat/cblas/f77_sub/f77_nrm2_sub.c | 2 +- frame/compat/cblas/f77_sub/f77_nrm2_sub.h | 2 +- frame/compat/cblas/src/cblas.h | 286 +++++++++--------- frame/compat/cblas/src/cblas_caxpy.c | 2 +- frame/compat/cblas/src/cblas_ccopy.c | 2 +- frame/compat/cblas/src/cblas_cdotc_sub.c | 2 +- frame/compat/cblas/src/cblas_cdotu_sub.c | 2 +- frame/compat/cblas/src/cblas_cgbmv.c | 2 +- frame/compat/cblas/src/cblas_cgemm.c | 2 +- frame/compat/cblas/src/cblas_cgemv.c | 2 +- frame/compat/cblas/src/cblas_cgerc.c | 2 +- frame/compat/cblas/src/cblas_cgeru.c | 2 +- frame/compat/cblas/src/cblas_chbmv.c | 2 +- frame/compat/cblas/src/cblas_chemm.c | 2 +- frame/compat/cblas/src/cblas_chemv.c | 2 +- frame/compat/cblas/src/cblas_cher.c | 2 +- frame/compat/cblas/src/cblas_cher2.c | 2 +- frame/compat/cblas/src/cblas_cher2k.c | 2 +- frame/compat/cblas/src/cblas_cherk.c | 2 +- frame/compat/cblas/src/cblas_chpmv.c | 2 +- frame/compat/cblas/src/cblas_chpr.c | 2 +- frame/compat/cblas/src/cblas_chpr2.c | 2 +- frame/compat/cblas/src/cblas_cscal.c | 2 +- frame/compat/cblas/src/cblas_csscal.c | 2 +- frame/compat/cblas/src/cblas_cswap.c | 2 +- frame/compat/cblas/src/cblas_csymm.c | 2 +- frame/compat/cblas/src/cblas_csyr2k.c | 2 +- frame/compat/cblas/src/cblas_csyrk.c | 2 +- frame/compat/cblas/src/cblas_ctbmv.c | 2 +- frame/compat/cblas/src/cblas_ctbsv.c | 2 +- frame/compat/cblas/src/cblas_ctpmv.c | 2 +- frame/compat/cblas/src/cblas_ctpsv.c | 2 +- frame/compat/cblas/src/cblas_ctrmm.c | 2 +- frame/compat/cblas/src/cblas_ctrmv.c | 2 +- frame/compat/cblas/src/cblas_ctrsm.c | 2 +- frame/compat/cblas/src/cblas_ctrsv.c | 2 +- frame/compat/cblas/src/cblas_daxpy.c | 2 +- frame/compat/cblas/src/cblas_dcopy.c | 2 +- frame/compat/cblas/src/cblas_dgbmv.c | 2 +- frame/compat/cblas/src/cblas_dgemm.c | 2 +- frame/compat/cblas/src/cblas_dgemv.c | 2 +- frame/compat/cblas/src/cblas_dger.c | 2 +- frame/compat/cblas/src/cblas_drot.c | 2 +- frame/compat/cblas/src/cblas_drotg.c | 2 +- frame/compat/cblas/src/cblas_drotm.c | 2 +- frame/compat/cblas/src/cblas_drotmg.c | 2 +- frame/compat/cblas/src/cblas_dsbmv.c | 2 +- frame/compat/cblas/src/cblas_dscal.c | 2 +- frame/compat/cblas/src/cblas_dspmv.c | 2 +- frame/compat/cblas/src/cblas_dspr.c | 2 +- frame/compat/cblas/src/cblas_dspr2.c | 2 +- frame/compat/cblas/src/cblas_dswap.c | 2 +- frame/compat/cblas/src/cblas_dsymm.c | 2 +- frame/compat/cblas/src/cblas_dsymv.c | 2 +- frame/compat/cblas/src/cblas_dsyr.c | 2 +- frame/compat/cblas/src/cblas_dsyr2.c | 2 +- frame/compat/cblas/src/cblas_dsyr2k.c | 2 +- frame/compat/cblas/src/cblas_dsyrk.c | 2 +- frame/compat/cblas/src/cblas_dtbmv.c | 2 +- frame/compat/cblas/src/cblas_dtbsv.c | 2 +- frame/compat/cblas/src/cblas_dtpmv.c | 2 +- frame/compat/cblas/src/cblas_dtpsv.c | 2 +- frame/compat/cblas/src/cblas_dtrmm.c | 2 +- frame/compat/cblas/src/cblas_dtrmv.c | 2 +- frame/compat/cblas/src/cblas_dtrsm.c | 2 +- frame/compat/cblas/src/cblas_dtrsv.c | 2 +- frame/compat/cblas/src/cblas_saxpy.c | 2 +- frame/compat/cblas/src/cblas_scopy.c | 2 +- frame/compat/cblas/src/cblas_sgbmv.c | 2 +- frame/compat/cblas/src/cblas_sgemm.c | 2 +- frame/compat/cblas/src/cblas_sgemv.c | 2 +- frame/compat/cblas/src/cblas_sger.c | 2 +- frame/compat/cblas/src/cblas_srot.c | 2 +- frame/compat/cblas/src/cblas_srotg.c | 2 +- frame/compat/cblas/src/cblas_srotm.c | 2 +- frame/compat/cblas/src/cblas_srotmg.c | 2 +- frame/compat/cblas/src/cblas_ssbmv.c | 2 +- frame/compat/cblas/src/cblas_sscal.c | 2 +- frame/compat/cblas/src/cblas_sspmv.c | 2 +- frame/compat/cblas/src/cblas_sspr.c | 2 +- frame/compat/cblas/src/cblas_sspr2.c | 2 +- frame/compat/cblas/src/cblas_sswap.c | 2 +- frame/compat/cblas/src/cblas_ssymm.c | 2 +- frame/compat/cblas/src/cblas_ssymv.c | 2 +- frame/compat/cblas/src/cblas_ssyr.c | 2 +- frame/compat/cblas/src/cblas_ssyr2.c | 2 +- frame/compat/cblas/src/cblas_ssyr2k.c | 2 +- frame/compat/cblas/src/cblas_ssyrk.c | 2 +- frame/compat/cblas/src/cblas_stbmv.c | 2 +- frame/compat/cblas/src/cblas_stbsv.c | 2 +- frame/compat/cblas/src/cblas_stpmv.c | 2 +- frame/compat/cblas/src/cblas_stpsv.c | 2 +- frame/compat/cblas/src/cblas_strmm.c | 2 +- frame/compat/cblas/src/cblas_strmv.c | 2 +- frame/compat/cblas/src/cblas_strsm.c | 2 +- frame/compat/cblas/src/cblas_strsv.c | 2 +- frame/compat/cblas/src/cblas_xerbla.c | 2 +- frame/compat/cblas/src/cblas_zaxpy.c | 2 +- frame/compat/cblas/src/cblas_zcopy.c | 2 +- frame/compat/cblas/src/cblas_zdotc_sub.c | 2 +- frame/compat/cblas/src/cblas_zdotu_sub.c | 2 +- frame/compat/cblas/src/cblas_zdscal.c | 2 +- frame/compat/cblas/src/cblas_zgbmv.c | 2 +- frame/compat/cblas/src/cblas_zgemm.c | 2 +- frame/compat/cblas/src/cblas_zgemv.c | 2 +- frame/compat/cblas/src/cblas_zgerc.c | 2 +- frame/compat/cblas/src/cblas_zgeru.c | 2 +- frame/compat/cblas/src/cblas_zhbmv.c | 2 +- frame/compat/cblas/src/cblas_zhemm.c | 2 +- frame/compat/cblas/src/cblas_zhemv.c | 2 +- frame/compat/cblas/src/cblas_zher.c | 2 +- frame/compat/cblas/src/cblas_zher2.c | 2 +- frame/compat/cblas/src/cblas_zher2k.c | 2 +- frame/compat/cblas/src/cblas_zherk.c | 2 +- frame/compat/cblas/src/cblas_zhpmv.c | 2 +- frame/compat/cblas/src/cblas_zhpr.c | 2 +- frame/compat/cblas/src/cblas_zhpr2.c | 2 +- frame/compat/cblas/src/cblas_zscal.c | 2 +- frame/compat/cblas/src/cblas_zswap.c | 2 +- frame/compat/cblas/src/cblas_zsymm.c | 2 +- frame/compat/cblas/src/cblas_zsyr2k.c | 2 +- frame/compat/cblas/src/cblas_zsyrk.c | 2 +- frame/compat/cblas/src/cblas_ztbmv.c | 2 +- frame/compat/cblas/src/cblas_ztbsv.c | 2 +- frame/compat/cblas/src/cblas_ztpmv.c | 2 +- frame/compat/cblas/src/cblas_ztpsv.c | 2 +- frame/compat/cblas/src/cblas_ztrmm.c | 2 +- frame/compat/cblas/src/cblas_ztrmv.c | 2 +- frame/compat/cblas/src/cblas_ztrsm.c | 2 +- frame/compat/cblas/src/cblas_ztrsv.c | 2 +- frame/compat/f2c/bla_cabs1.c | 4 +- frame/compat/f2c/bla_cabs1.h | 4 +- frame/compat/f2c/bla_gbmv.c | 24 +- frame/compat/f2c/bla_gbmv.h | 8 +- frame/compat/f2c/bla_hbmv.c | 12 +- frame/compat/f2c/bla_hbmv.h | 4 +- frame/compat/f2c/bla_hpmv.c | 12 +- frame/compat/f2c/bla_hpmv.h | 4 +- frame/compat/f2c/bla_hpr.c | 12 +- frame/compat/f2c/bla_hpr.h | 4 +- frame/compat/f2c/bla_hpr2.c | 12 +- frame/compat/f2c/bla_hpr2.h | 4 +- frame/compat/f2c/bla_lsame.c | 2 +- frame/compat/f2c/bla_lsame.h | 2 +- frame/compat/f2c/bla_rot.c | 8 +- frame/compat/f2c/bla_rot.h | 8 +- frame/compat/f2c/bla_rotg.c | 8 +- frame/compat/f2c/bla_rotg.h | 8 +- frame/compat/f2c/bla_rotm.c | 4 +- frame/compat/f2c/bla_rotm.h | 4 +- frame/compat/f2c/bla_rotmg.c | 4 +- frame/compat/f2c/bla_rotmg.h | 4 +- frame/compat/f2c/bla_sbmv.c | 12 +- frame/compat/f2c/bla_sbmv.h | 4 +- frame/compat/f2c/bla_spmv.c | 12 +- frame/compat/f2c/bla_spmv.h | 4 +- frame/compat/f2c/bla_spr.c | 12 +- frame/compat/f2c/bla_spr.h | 4 +- frame/compat/f2c/bla_spr2.c | 12 +- frame/compat/f2c/bla_spr2.h | 4 +- frame/compat/f2c/bla_tbmv.c | 24 +- frame/compat/f2c/bla_tbmv.h | 8 +- frame/compat/f2c/bla_tbsv.c | 24 +- frame/compat/f2c/bla_tbsv.h | 8 +- frame/compat/f2c/bla_tpmv.c | 24 +- frame/compat/f2c/bla_tpmv.h | 8 +- frame/compat/f2c/bla_tpsv.c | 24 +- frame/compat/f2c/bla_tpsv.h | 8 +- frame/compat/f2c/bla_xerbla.c | 2 +- frame/compat/f2c/bla_xerbla.h | 2 +- frame/include/bli_arch_config_pre.h | 6 +- frame/include/bli_macro_defs.h | 8 +- frame/include/bli_param_macro_defs.h | 12 +- frame/ind/bli_ind.h | 30 +- frame/ind/bli_l3_ind.h | 16 +- frame/ind/cntx/bli_cntx_ind_stage.c | 16 +- frame/ind/cntx/bli_cntx_ind_stage.h | 16 +- frame/ind/oapi/bli_l3_3m4m1m_oapi.c | 10 +- frame/ind/oapi/bli_l3_ind_oapi.c | 8 +- frame/ind/oapi/bli_l3_ind_oapi.h | 38 +-- frame/ind/oapi/bli_l3_nat_oapi.c | 10 +- frame/ind/tapi/bli_l3_ind_tapi.c | 20 +- frame/ind/tapi/bli_l3_ind_tapi.h | 20 +- frame/ind/ukernels/bli_l3_ind_ukr.h | 6 +- frame/thread/bli_pthread.h | 60 ++-- frame/thread/bli_thrcomm.h | 16 +- frame/thread/bli_thrcomm_openmp.h | 8 +- frame/thread/bli_thread.h | 52 ++-- frame/thread/bli_thrinfo.h | 8 +- frame/util/bli_util_check.c | 14 +- frame/util/bli_util_check.h | 30 +- frame/util/bli_util_fpa.h | 4 +- frame/util/bli_util_oapi.c | 20 +- frame/util/bli_util_oapi.h | 18 +- frame/util/bli_util_tapi.c | 18 +- frame/util/bli_util_tapi.h | 18 +- frame/util/bli_util_unb_var1.c | 34 +-- frame/util/bli_util_unb_var1.h | 18 +- 647 files changed, 2021 insertions(+), 2017 deletions(-) diff --git a/build/bli_config.h.in b/build/bli_config.h.in index f940090ad..cc5386f57 100644 --- a/build/bli_config.h.in +++ b/build/bli_config.h.in @@ -159,4 +159,7 @@ #define BLIS_DISABLE_SHARED #endif +#define BLIS_EXPORT_BLAS +#define BLIS_EXPORT_BLIS + #endif diff --git a/build/detect/config/config_detect.c b/build/detect/config/config_detect.c index 7d0e95522..6d59d6625 100644 --- a/build/detect/config/config_detect.c +++ b/build/detect/config/config_detect.c @@ -33,6 +33,7 @@ */ +#define BLIS_EXPORT_BLIS #include "bli_system.h" #include "bli_type_defs.h" #include "bli_arch.h" diff --git a/build/libblis-symbols.def b/build/libblis-symbols.def index f4db5f98f..f8752018b 100644 --- a/build/libblis-symbols.def +++ b/build/libblis-symbols.def @@ -187,9 +187,9 @@ bli_cgemm_haswell_asm_3x8 bli_cgemm_haswell_asm_8x3 bli_cgemm_ker_var2 bli_cgemm_md_c2r_ref -bli_cgemm_ukernel bli_cgemmtrsm_l_ukernel bli_cgemmtrsm_u_ukernel +bli_cgemm_ukernel bli_cgemv bli_cgemv_ex bli_cgemv_unb_var1 @@ -285,12 +285,6 @@ bli_chemv_unf_var3a bli_cher bli_cher2 bli_cher2_ex -bli_cher2_unb_var1 -bli_cher2_unb_var2 -bli_cher2_unb_var3 -bli_cher2_unb_var4 -bli_cher2_unf_var1 -bli_cher2_unf_var4 bli_cher2k bli_cher2k1m bli_cher2k3m1 @@ -298,9 +292,13 @@ bli_cher2k3mh bli_cher2k4m1 bli_cher2k4mh bli_cher2k_ex +bli_cher2_unb_var1 +bli_cher2_unb_var2 +bli_cher2_unb_var3 +bli_cher2_unb_var4 +bli_cher2_unf_var1 +bli_cher2_unf_var4 bli_cher_ex -bli_cher_unb_var1 -bli_cher_unb_var2 bli_cherk bli_cherk1m bli_cherk3m1 @@ -310,6 +308,8 @@ bli_cherk4mh bli_cherk_ex bli_cherk_l_ker_var2 bli_cherk_u_ker_var2 +bli_cher_unb_var1 +bli_cher_unb_var2 bli_cinvertd bli_cinvertd_ex bli_cinvertsc @@ -354,8 +354,8 @@ bli_cntl_copy bli_cntl_create_node bli_cntl_free bli_cntl_free_node -bli_cntl_free_w_thrinfo bli_cntl_free_wo_thrinfo +bli_cntl_free_w_thrinfo bli_cntl_mark_family bli_cntx_1m_stage bli_cntx_3m1_stage @@ -544,8 +544,8 @@ bli_ctrsm1m bli_ctrsm3m1 bli_ctrsm4m1 bli_ctrsm_ex -bli_ctrsm_l_ukernel bli_ctrsm_ll_ker_var2 +bli_ctrsm_l_ukernel bli_ctrsm_lu_ker_var2 bli_ctrsm_rl_ker_var2 bli_ctrsm_ru_ker_var2 @@ -676,11 +676,11 @@ bli_dgemm_ex bli_dgemm_haswell_asm_6x8 bli_dgemm_haswell_asm_8x6 bli_dgemm_ker_var2 -bli_dgemm_ukernel bli_dgemmtrsm_l_haswell_asm_6x8 bli_dgemmtrsm_l_ukernel bli_dgemmtrsm_u_haswell_asm_6x8 bli_dgemmtrsm_u_ukernel +bli_dgemm_ukernel bli_dgemv bli_dgemv_ex bli_dgemv_unb_var1 @@ -713,12 +713,6 @@ bli_dhemv_unf_var3a bli_dher bli_dher2 bli_dher2_ex -bli_dher2_unb_var1 -bli_dher2_unb_var2 -bli_dher2_unb_var3 -bli_dher2_unb_var4 -bli_dher2_unf_var1 -bli_dher2_unf_var4 bli_dher2k bli_dher2k1m bli_dher2k3m1 @@ -726,9 +720,13 @@ bli_dher2k3mh bli_dher2k4m1 bli_dher2k4mh bli_dher2k_ex +bli_dher2_unb_var1 +bli_dher2_unb_var2 +bli_dher2_unb_var3 +bli_dher2_unb_var4 +bli_dher2_unf_var1 +bli_dher2_unf_var4 bli_dher_ex -bli_dher_unb_var1 -bli_dher_unb_var2 bli_dherk bli_dherk1m bli_dherk3m1 @@ -738,6 +736,8 @@ bli_dherk4mh bli_dherk_ex bli_dherk_l_ker_var2 bli_dherk_u_ker_var2 +bli_dher_unb_var1 +bli_dher_unb_var2 bli_dinvertd bli_dinvertd_ex bli_dinvertsc @@ -906,11 +906,6 @@ bli_dsyrk3mh bli_dsyrk4m1 bli_dsyrk4mh bli_dsyrk_ex -bli_dt_size -bli_dt_size_check -bli_dt_string -bli_dt_string_check -bli_dt_union_check bli_dtrmm bli_dtrmm1m bli_dtrmm3 @@ -938,8 +933,8 @@ bli_dtrsm1m bli_dtrsm3m1 bli_dtrsm4m1 bli_dtrsm_ex -bli_dtrsm_l_ukernel bli_dtrsm_ll_ker_var2 +bli_dtrsm_l_ukernel bli_dtrsm_lu_ker_var2 bli_dtrsm_rl_ker_var2 bli_dtrsm_ru_ker_var2 @@ -950,6 +945,11 @@ bli_dtrsv_unb_var1 bli_dtrsv_unb_var2 bli_dtrsv_unf_var1 bli_dtrsv_unf_var2 +bli_dt_size +bli_dt_size_check +bli_dt_string +bli_dt_string_check +bli_dt_union_check bli_dunpackm_blk_var1 bli_dunpackm_cxk bli_dunpackm_unb_var1 @@ -1018,6 +1018,7 @@ bli_gemm_basic_check bli_gemm_blk_var1 bli_gemm_blk_var2 bli_gemm_blk_var3 +bli_gemmbp_cntl_create bli_gemm_check bli_gemm_cntl_create bli_gemm_cntl_create_node @@ -1028,6 +1029,8 @@ bli_gemm_determine_kc_f bli_gemm_direct bli_gemm_ex bli_gemm_front +bli_gemmind +bli_gemmind_get_avail bli_gemm_int bli_gemm_ker_var2 bli_gemm_ker_var2_md @@ -1040,20 +1043,17 @@ bli_gemm_md_rcc bli_gemm_md_rcr bli_gemm_md_rrc bli_gemm_md_rrr +bli_gemmnat bli_gemm_packa bli_gemm_packb bli_gemm_prune_unref_mparts_k bli_gemm_prune_unref_mparts_m bli_gemm_prune_unref_mparts_n +bli_gemmtrsm_l_ukernel_qfp +bli_gemmtrsm_ukernel +bli_gemmtrsm_u_ukernel_qfp bli_gemm_ukernel bli_gemm_ukernel_qfp -bli_gemmbp_cntl_create -bli_gemmind -bli_gemmind_get_avail -bli_gemmnat -bli_gemmtrsm_l_ukernel_qfp -bli_gemmtrsm_u_ukernel_qfp -bli_gemmtrsm_ukernel bli_gemv bli_gemv_check bli_gemv_ex @@ -1120,30 +1120,18 @@ bli_hemv_unb_var3_qfp bli_hemv_unb_var4 bli_hemv_unb_var4_qfp bli_hemv_unf_var1 -bli_hemv_unf_var1_qfp bli_hemv_unf_var1a bli_hemv_unf_var1a_qfp +bli_hemv_unf_var1_qfp bli_hemv_unf_var3 -bli_hemv_unf_var3_qfp bli_hemv_unf_var3a bli_hemv_unf_var3a_qfp +bli_hemv_unf_var3_qfp bli_her bli_her2 bli_her2_check bli_her2_ex bli_her2_ex_qfp -bli_her2_unb_var1 -bli_her2_unb_var1_qfp -bli_her2_unb_var2 -bli_her2_unb_var2_qfp -bli_her2_unb_var3 -bli_her2_unb_var3_qfp -bli_her2_unb_var4 -bli_her2_unb_var4_qfp -bli_her2_unf_var1 -bli_her2_unf_var1_qfp -bli_her2_unf_var4 -bli_her2_unf_var4_qfp bli_her2k bli_her2k1m bli_her2k3m1 @@ -1157,13 +1145,21 @@ bli_her2k_front bli_her2kind bli_her2kind_get_avail bli_her2knat +bli_her2_unb_var1 +bli_her2_unb_var1_qfp +bli_her2_unb_var2 +bli_her2_unb_var2_qfp +bli_her2_unb_var3 +bli_her2_unb_var3_qfp +bli_her2_unb_var4 +bli_her2_unb_var4_qfp +bli_her2_unf_var1 +bli_her2_unf_var1_qfp +bli_her2_unf_var4 +bli_her2_unf_var4_qfp bli_her_check bli_her_ex bli_her_ex_qfp -bli_her_unb_var1 -bli_her_unb_var1_qfp -bli_her_unb_var2 -bli_her_unb_var2_qfp bli_herk bli_herk1m bli_herk3m1 @@ -1178,15 +1174,19 @@ bli_herk_determine_kc_f bli_herk_direct bli_herk_ex bli_herk_front +bli_herkind +bli_herkind_get_avail bli_herk_l_ker_var2 +bli_herknat bli_herk_prune_unref_mparts_k bli_herk_prune_unref_mparts_m bli_herk_prune_unref_mparts_n bli_herk_u_ker_var2 bli_herk_x_ker_var2 -bli_herkind -bli_herkind_get_avail -bli_herknat +bli_her_unb_var1 +bli_her_unb_var1_qfp +bli_her_unb_var2 +bli_her_unb_var2_qfp bli_ifprintm bli_ifprintv bli_igetsc @@ -1217,9 +1217,9 @@ bli_info_get_enable_sba_pools bli_info_get_enable_stay_auto_init bli_info_get_enable_threading bli_info_get_gemm_impl_string -bli_info_get_gemm_ukr_impl_string bli_info_get_gemmtrsm_l_ukr_impl_string bli_info_get_gemmtrsm_u_ukr_impl_string +bli_info_get_gemm_ukr_impl_string bli_info_get_heap_addr_align_size bli_info_get_heap_stride_align_size bli_info_get_hemm_impl_string @@ -1278,12 +1278,12 @@ bli_l1d_xy_check bli_l1m_ax_check bli_l1m_axy_check bli_l1m_xy_check -bli_l1v_ax_check bli_l1v_axby_check +bli_l1v_ax_check bli_l1v_axy_check bli_l1v_dot_check -bli_l1v_x_check bli_l1v_xby_check +bli_l1v_x_check bli_l1v_xi_check bli_l1v_xy_check bli_l3_basic_check @@ -1455,9 +1455,9 @@ bli_pool_shrink bli_pow_di bli_pow_ri bli_prime_factorization -bli_print_msg bli_printm bli_printm_ex +bli_print_msg bli_printv bli_printv_ex bli_projm @@ -1646,11 +1646,11 @@ bli_sgemm_ex bli_sgemm_haswell_asm_16x6 bli_sgemm_haswell_asm_6x16 bli_sgemm_ker_var2 -bli_sgemm_ukernel bli_sgemmtrsm_l_haswell_asm_6x16 bli_sgemmtrsm_l_ukernel bli_sgemmtrsm_u_haswell_asm_6x16 bli_sgemmtrsm_u_ukernel +bli_sgemm_ukernel bli_sgemv bli_sgemv_ex bli_sgemv_unb_var1 @@ -1683,12 +1683,6 @@ bli_shemv_unf_var3a bli_sher bli_sher2 bli_sher2_ex -bli_sher2_unb_var1 -bli_sher2_unb_var2 -bli_sher2_unb_var3 -bli_sher2_unb_var4 -bli_sher2_unf_var1 -bli_sher2_unf_var4 bli_sher2k bli_sher2k1m bli_sher2k3m1 @@ -1696,9 +1690,13 @@ bli_sher2k3mh bli_sher2k4m1 bli_sher2k4mh bli_sher2k_ex +bli_sher2_unb_var1 +bli_sher2_unb_var2 +bli_sher2_unb_var3 +bli_sher2_unb_var4 +bli_sher2_unf_var1 +bli_sher2_unf_var4 bli_sher_ex -bli_sher_unb_var1 -bli_sher_unb_var2 bli_sherk bli_sherk1m bli_sherk3m1 @@ -1708,6 +1706,8 @@ bli_sherk4mh bli_sherk_ex bli_sherk_l_ker_var2 bli_sherk_u_ker_var2 +bli_sher_unb_var1 +bli_sher_unb_var2 bli_shiftd bli_shiftd_check bli_shiftd_ex @@ -1889,8 +1889,8 @@ bli_strsm1m bli_strsm3m1 bli_strsm4m1 bli_strsm_ex -bli_strsm_l_ukernel bli_strsm_ll_ker_var2 +bli_strsm_l_ukernel bli_strsm_lu_ker_var2 bli_strsm_rl_ker_var2 bli_strsm_ru_ker_var2 @@ -2062,17 +2062,17 @@ bli_trmm_determine_kc_f bli_trmm_direct bli_trmm_ex bli_trmm_front +bli_trmmind +bli_trmmind_get_avail bli_trmm_ll_ker_var2 bli_trmm_lu_ker_var2 +bli_trmmnat bli_trmm_prune_unref_mparts_k bli_trmm_prune_unref_mparts_m bli_trmm_prune_unref_mparts_n bli_trmm_rl_ker_var2 bli_trmm_ru_ker_var2 bli_trmm_xx_ker_var2 -bli_trmmind -bli_trmmind_get_avail -bli_trmmnat bli_trmv bli_trmv_check bli_trmv_ex @@ -2102,11 +2102,14 @@ bli_trsm_determine_kc_f bli_trsm_direct bli_trsm_ex bli_trsm_front +bli_trsmind +bli_trsmind_get_avail bli_trsm_int bli_trsm_l_cntl_create -bli_trsm_l_ukernel_qfp bli_trsm_ll_ker_var2 +bli_trsm_l_ukernel_qfp bli_trsm_lu_ker_var2 +bli_trsmnat bli_trsm_packa bli_trsm_packb bli_trsm_prune_unref_mparts_k @@ -2115,12 +2118,9 @@ bli_trsm_prune_unref_mparts_n bli_trsm_r_cntl_create bli_trsm_rl_ker_var2 bli_trsm_ru_ker_var2 -bli_trsm_u_ukernel_qfp bli_trsm_ukernel +bli_trsm_u_ukernel_qfp bli_trsm_xx_ker_var2 -bli_trsmind -bli_trsmind_get_avail -bli_trsmnat bli_trsv bli_trsv_check bli_trsv_ex @@ -2249,9 +2249,9 @@ bli_zgemm_haswell_asm_3x4 bli_zgemm_haswell_asm_4x3 bli_zgemm_ker_var2 bli_zgemm_md_c2r_ref -bli_zgemm_ukernel bli_zgemmtrsm_l_ukernel bli_zgemmtrsm_u_ukernel +bli_zgemm_ukernel bli_zgemv bli_zgemv_ex bli_zgemv_unb_var1 @@ -2284,12 +2284,6 @@ bli_zhemv_unf_var3a bli_zher bli_zher2 bli_zher2_ex -bli_zher2_unb_var1 -bli_zher2_unb_var2 -bli_zher2_unb_var3 -bli_zher2_unb_var4 -bli_zher2_unf_var1 -bli_zher2_unf_var4 bli_zher2k bli_zher2k1m bli_zher2k3m1 @@ -2297,9 +2291,13 @@ bli_zher2k3mh bli_zher2k4m1 bli_zher2k4mh bli_zher2k_ex +bli_zher2_unb_var1 +bli_zher2_unb_var2 +bli_zher2_unb_var3 +bli_zher2_unb_var4 +bli_zher2_unf_var1 +bli_zher2_unf_var4 bli_zher_ex -bli_zher_unb_var1 -bli_zher_unb_var2 bli_zherk bli_zherk1m bli_zherk3m1 @@ -2309,6 +2307,8 @@ bli_zherk4mh bli_zherk_ex bli_zherk_l_ker_var2 bli_zherk_u_ker_var2 +bli_zher_unb_var1 +bli_zher_unb_var2 bli_zinvertd bli_zinvertd_ex bli_zinvertsc @@ -2492,8 +2492,8 @@ bli_ztrsm1m bli_ztrsm3m1 bli_ztrsm4m1 bli_ztrsm_ex -bli_ztrsm_l_ukernel bli_ztrsm_ll_ker_var2 +bli_ztrsm_l_ukernel bli_ztrsm_lu_ker_var2 bli_ztrsm_rl_ker_var2 bli_ztrsm_ru_ker_var2 @@ -2567,14 +2567,14 @@ srotmg_ ssbmv_ sscal_ sspmv_ -sspr2_ sspr_ +sspr2_ sswap_ ssymm_ ssymv_ +ssyr_ ssyr2_ ssyr2k_ -ssyr_ ssyrk_ stbmv_ stbsv_ @@ -2606,14 +2606,14 @@ dscal_ dsdot_ dsdotsub_ dspmv_ -dspr2_ dspr_ +dspr2_ dswap_ dsymm_ dsymv_ +dsyr_ dsyr2_ dsyr2k_ -dsyr_ dsyrk_ dtbmv_ dtbsv_ @@ -2641,13 +2641,13 @@ cgeru_ chbmv_ chemm_ chemv_ +cher_ cher2_ cher2k_ -cher_ cherk_ chpmv_ -chpr2_ chpr_ +chpr2_ crotg_ cscal_ csrot_ @@ -2680,13 +2680,13 @@ zgeru_ zhbmv_ zhemm_ zhemv_ +zher_ zher2_ zher2k_ -zher_ zherk_ zhpmv_ -zhpr2_ zhpr_ +zhpr2_ zrotg_ zscal_ zswap_ diff --git a/frame/0/bli_l0_check.c b/frame/0/bli_l0_check.c index 65eeda1b7..aa046285e 100644 --- a/frame/0/bli_l0_check.c +++ b/frame/0/bli_l0_check.c @@ -41,7 +41,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* chi, \ obj_t* psi \ @@ -61,7 +61,7 @@ GENFRONT( subsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* chi \ ) \ @@ -75,7 +75,7 @@ GENFRONT( invertsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* chi, \ obj_t* norm \ diff --git a/frame/0/bli_l0_check.h b/frame/0/bli_l0_check.h index 262679aeb..e1ae0951e 100644 --- a/frame/0/bli_l0_check.h +++ b/frame/0/bli_l0_check.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* chi, \ obj_t* psi \ @@ -57,7 +57,7 @@ GENTPROT( subsc ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* chi \ ); @@ -68,7 +68,7 @@ GENTPROT( invertsc ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* chi, \ obj_t* absq \ @@ -81,7 +81,7 @@ GENTPROT( normfsc ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* chi, \ double* zeta_r, \ @@ -94,7 +94,7 @@ GENTPROT( getsc ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ double zeta_r, \ double zeta_i, \ @@ -107,7 +107,7 @@ GENTPROT( setsc ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* chi, \ obj_t* zeta_r, \ @@ -120,7 +120,7 @@ GENTPROT( unzipsc ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* zeta_r, \ obj_t* zeta_i, \ @@ -132,18 +132,18 @@ GENTPROT( zipsc ) // ----------------------------------------------------------------------------- -void bli_l0_xsc_check +BLIS_EXPORT_BLIS void bli_l0_xsc_check ( obj_t* chi ); -void bli_l0_xxsc_check +BLIS_EXPORT_BLIS void bli_l0_xxsc_check ( obj_t* chi, obj_t* psi ); -void bli_l0_xx2sc_check +BLIS_EXPORT_BLIS void bli_l0_xx2sc_check ( obj_t* chi, obj_t* norm diff --git a/frame/0/bli_l0_fpa.h b/frame/0/bli_l0_fpa.h index 0d9b28361..1749c4af8 100644 --- a/frame/0/bli_l0_fpa.h +++ b/frame/0/bli_l0_fpa.h @@ -40,7 +40,7 @@ #define GENPROT( opname ) \ \ PASTECH(opname,_vft) \ -PASTEMAC(opname,_qfp)( num_t dt ); +BLIS_EXPORT_BLIS BLIS_EXPORT_BLIS PASTEMAC(opname,_qfp)( num_t dt ); GENPROT( absqsc ) GENPROT( normfsc ) diff --git a/frame/0/bli_l0_oapi.c b/frame/0/bli_l0_oapi.c index 9a5492971..c6e98f7b6 100644 --- a/frame/0/bli_l0_oapi.c +++ b/frame/0/bli_l0_oapi.c @@ -41,7 +41,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* chi, \ obj_t* absq \ @@ -81,7 +81,7 @@ GENFRONT( normfsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* chi, \ obj_t* psi \ @@ -120,7 +120,7 @@ GENFRONT( subsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* chi \ ) \ @@ -153,7 +153,7 @@ GENFRONT( invertsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* chi, \ obj_t* psi \ @@ -186,7 +186,7 @@ GENFRONT( sqrtsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* chi, \ double* zeta_r, \ @@ -230,7 +230,7 @@ GENFRONT( getsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ double zeta_r, \ double zeta_i, \ @@ -264,7 +264,7 @@ GENFRONT( setsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* chi, \ obj_t* zeta_r, \ @@ -307,7 +307,7 @@ GENFRONT( unzipsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* zeta_r, \ obj_t* zeta_i, \ diff --git a/frame/0/bli_l0_oapi.h b/frame/0/bli_l0_oapi.h index f73aa08d2..d0b05606f 100644 --- a/frame/0/bli_l0_oapi.h +++ b/frame/0/bli_l0_oapi.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* chi, \ obj_t* absq \ @@ -53,7 +53,7 @@ GENPROT( normfsc ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* chi, \ obj_t* psi \ @@ -69,7 +69,7 @@ GENPROT( subsc ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* chi \ ); @@ -80,7 +80,7 @@ GENPROT( invertsc ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* chi, \ double* zeta_r, \ @@ -93,7 +93,7 @@ GENPROT( getsc ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ double zeta_r, \ double zeta_i, \ @@ -106,7 +106,7 @@ GENPROT( setsc ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* chi, \ obj_t* zeta_r, \ @@ -119,7 +119,7 @@ GENPROT( unzipsc ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* zeta_r, \ obj_t* zeta_i, \ diff --git a/frame/0/bli_l0_tapi.c b/frame/0/bli_l0_tapi.c index 620cad299..1a86ebd0a 100644 --- a/frame/0/bli_l0_tapi.c +++ b/frame/0/bli_l0_tapi.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjchi, \ ctype* chi, \ @@ -64,7 +64,7 @@ INSERT_GENTFUNC_BASIC( subsc, subs ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjchi, \ ctype* chi \ @@ -85,7 +85,7 @@ INSERT_GENTFUNC_BASIC( invertsc, inverts ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjchi, \ ctype* chi, \ @@ -114,7 +114,7 @@ INSERT_GENTFUNC_BASIC( mulsc, scals ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ ctype* chi, \ ctype_r* absq \ @@ -143,7 +143,7 @@ INSERT_GENTFUNCR_BASIC0( absqsc ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ ctype* chi, \ ctype_r* norm \ @@ -161,7 +161,7 @@ INSERT_GENTFUNCR_BASIC0( normfsc ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ ctype* chi, \ ctype* psi \ @@ -179,7 +179,7 @@ INSERT_GENTFUNC_BASIC0( sqrtsc ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ ctype* chi, \ double* zeta_r, \ @@ -197,7 +197,7 @@ INSERT_GENTFUNC_BASIC0( getsc ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ double zeta_r, \ double zeta_i, \ @@ -215,7 +215,7 @@ INSERT_GENTFUNC_BASIC0( setsc ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ ctype* chi, \ ctype_r* zeta_r, \ @@ -233,7 +233,7 @@ INSERT_GENTFUNCR_BASIC0( unzipsc ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ ctype_r* zeta_r, \ ctype_r* zeta_i, \ diff --git a/frame/0/bli_l0_tapi.h b/frame/0/bli_l0_tapi.h index 46c43d935..c2d600d66 100644 --- a/frame/0/bli_l0_tapi.h +++ b/frame/0/bli_l0_tapi.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjchi, \ ctype* chi, \ @@ -56,7 +56,7 @@ INSERT_GENTPROT_BASIC0( subsc ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjchi, \ ctype* chi \ @@ -68,7 +68,7 @@ INSERT_GENTPROT_BASIC0( invertsc ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ ctype* chi, \ ctype_r* absq \ @@ -81,7 +81,7 @@ INSERT_GENTPROTR_BASIC0( normfsc ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ ctype* chi, \ ctype* psi \ @@ -93,7 +93,7 @@ INSERT_GENTPROT_BASIC0( sqrtsc ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ ctype* chi, \ double* zeta_r, \ @@ -106,7 +106,7 @@ INSERT_GENTPROT_BASIC0( getsc ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ double zeta_r, \ double zeta_i, \ @@ -119,7 +119,7 @@ INSERT_GENTPROT_BASIC0( setsc ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ ctype* chi, \ ctype_r* zeta_r, \ @@ -132,7 +132,7 @@ INSERT_GENTPROTR_BASIC0( unzipsc ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ ctype_r* zeta_r, \ ctype_r* zeta_i, \ @@ -143,14 +143,14 @@ INSERT_GENTPROTR_BASIC0( zipsc ) // ----------------------------------------------------------------------------- -void bli_igetsc +BLIS_EXPORT_BLIS void bli_igetsc ( dim_t* chi, double* zeta_r, double* zeta_i ); -void bli_isetsc +BLIS_EXPORT_BLIS void bli_isetsc ( double zeta_r, double zeta_i, diff --git a/frame/0/copysc/bli_copysc.c b/frame/0/copysc/bli_copysc.c index 3001aa6c7..b01678877 100644 --- a/frame/0/copysc/bli_copysc.c +++ b/frame/0/copysc/bli_copysc.c @@ -55,7 +55,7 @@ static FUNCPTR_T GENARRAY2_ALL(ftypes,copysc); #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* chi, \ obj_t* psi \ @@ -103,7 +103,7 @@ GENFRONT( copysc ) #undef GENTFUNC2 #define GENTFUNC2( ctype_x, ctype_y, chx, chy, varname ) \ \ -void PASTEMAC2(chx,chy,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(chx,chy,varname) \ ( \ conj_t conjchi, \ void* chi, \ diff --git a/frame/0/copysc/bli_copysc.h b/frame/0/copysc/bli_copysc.h index 1d43919ca..1dfd9d7bc 100644 --- a/frame/0/copysc/bli_copysc.h +++ b/frame/0/copysc/bli_copysc.h @@ -40,7 +40,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* chi, \ obj_t* psi \ @@ -55,7 +55,7 @@ GENFRONT( copysc ) #undef GENTPROT2 #define GENTPROT2( ctype_x, ctype_y, chx, chy, varname ) \ \ -void PASTEMAC2(chx,chy,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(chx,chy,varname) \ ( \ conj_t conjchi, \ void* chi, \ diff --git a/frame/1/bli_l1v_check.c b/frame/1/bli_l1v_check.c index 74b60febd..e795f7e00 100644 --- a/frame/1/bli_l1v_check.c +++ b/frame/1/bli_l1v_check.c @@ -41,7 +41,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* y \ @@ -59,7 +59,7 @@ GENFRONT( swapv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* index \ @@ -74,7 +74,7 @@ GENFRONT( amaxv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -91,7 +91,7 @@ GENFRONT( axpbyv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -108,7 +108,7 @@ GENFRONT( scal2v ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* y, \ @@ -124,7 +124,7 @@ GENFRONT( dotv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -142,7 +142,7 @@ GENFRONT( dotxv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x \ ) \ @@ -156,7 +156,7 @@ GENFRONT( invertv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -172,7 +172,7 @@ GENFRONT( setv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* beta, \ diff --git a/frame/1/bli_l1v_check.h b/frame/1/bli_l1v_check.h index 98051d0cd..9fc902c04 100644 --- a/frame/1/bli_l1v_check.h +++ b/frame/1/bli_l1v_check.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* y \ @@ -55,7 +55,7 @@ GENTPROT( swapv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* index \ @@ -67,7 +67,7 @@ GENTPROT( amaxv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -81,7 +81,7 @@ GENTPROT( axpbyv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -95,7 +95,7 @@ GENTPROT( scal2v ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* y, \ @@ -108,7 +108,7 @@ GENTPROT( dotv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -123,7 +123,7 @@ GENTPROT( dotxv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x \ ); @@ -134,7 +134,7 @@ GENTPROT( invertv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -147,7 +147,7 @@ GENTPROT( setv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* beta, \ @@ -160,27 +160,27 @@ GENTPROT( xpbyv ) // ----------------------------------------------------------------------------- -void bli_l1v_xy_check +BLIS_EXPORT_BLIS void bli_l1v_xy_check ( obj_t* x, obj_t* y ); -void bli_l1v_axy_check +BLIS_EXPORT_BLIS void bli_l1v_axy_check ( obj_t* alpha, obj_t* x, obj_t* y ); -void bli_l1v_xby_check +BLIS_EXPORT_BLIS void bli_l1v_xby_check ( obj_t* x, obj_t* beta, obj_t* y ); -void bli_l1v_axby_check +BLIS_EXPORT_BLIS void bli_l1v_axby_check ( obj_t* alpha, obj_t* x, @@ -188,7 +188,7 @@ void bli_l1v_axby_check obj_t* y ); -void bli_l1v_dot_check +BLIS_EXPORT_BLIS void bli_l1v_dot_check ( obj_t* alpha, obj_t* x, @@ -197,18 +197,18 @@ void bli_l1v_dot_check obj_t* rho ); -void bli_l1v_x_check +BLIS_EXPORT_BLIS void bli_l1v_x_check ( obj_t* x ); -void bli_l1v_ax_check +BLIS_EXPORT_BLIS void bli_l1v_ax_check ( obj_t* alpha, obj_t* x ); -void bli_l1v_xi_check +BLIS_EXPORT_BLIS void bli_l1v_xi_check ( obj_t* x, obj_t* index diff --git a/frame/1/bli_l1v_fpa.h b/frame/1/bli_l1v_fpa.h index c05a4ff7b..05361bdde 100644 --- a/frame/1/bli_l1v_fpa.h +++ b/frame/1/bli_l1v_fpa.h @@ -40,7 +40,7 @@ #define GENPROT( opname ) \ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) \ -PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); +BLIS_EXPORT_BLIS BLIS_EXPORT_BLIS PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); GENPROT( addv ) GENPROT( copyv ) diff --git a/frame/1/bli_l1v_ker_prot.h b/frame/1/bli_l1v_ker_prot.h index 1a1eec3f3..a06c8539e 100644 --- a/frame/1/bli_l1v_ker_prot.h +++ b/frame/1/bli_l1v_ker_prot.h @@ -39,7 +39,7 @@ #define ADDV_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ dim_t n, \ @@ -51,7 +51,7 @@ void PASTEMAC(ch,opname) \ #define AMAXV_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ dim_t n, \ ctype* restrict x, inc_t incx, \ @@ -62,7 +62,7 @@ void PASTEMAC(ch,opname) \ #define AXPBYV_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ dim_t n, \ @@ -76,7 +76,7 @@ void PASTEMAC(ch,opname) \ #define AXPYV_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ dim_t n, \ @@ -89,7 +89,7 @@ void PASTEMAC(ch,opname) \ #define COPYV_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ dim_t n, \ @@ -101,7 +101,7 @@ void PASTEMAC(ch,opname) \ #define DOTV_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -115,7 +115,7 @@ void PASTEMAC(ch,opname) \ #define DOTXV_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -131,7 +131,7 @@ void PASTEMAC(ch,opname) \ #define INVERTV_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ dim_t n, \ ctype* restrict x, inc_t incx, \ @@ -141,7 +141,7 @@ void PASTEMAC(ch,opname) \ #define SCALV_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjalpha, \ dim_t n, \ @@ -153,7 +153,7 @@ void PASTEMAC(ch,opname) \ #define SCAL2V_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ dim_t n, \ @@ -166,7 +166,7 @@ void PASTEMAC(ch,opname) \ #define SETV_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjalpha, \ dim_t n, \ @@ -178,7 +178,7 @@ void PASTEMAC(ch,opname) \ #define SUBV_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ dim_t n, \ @@ -190,7 +190,7 @@ void PASTEMAC(ch,opname) \ #define SWAPV_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ dim_t n, \ ctype* restrict x, inc_t incx, \ @@ -201,7 +201,7 @@ void PASTEMAC(ch,opname) \ #define XPBYV_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ dim_t n, \ diff --git a/frame/1/bli_l1v_oapi.c b/frame/1/bli_l1v_oapi.c index 19e61bb7a..9c50d93ab 100644 --- a/frame/1/bli_l1v_oapi.c +++ b/frame/1/bli_l1v_oapi.c @@ -43,7 +43,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* y \ @@ -90,7 +90,7 @@ GENFRONT( subv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* index \ @@ -133,7 +133,7 @@ GENFRONT( amaxv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -197,7 +197,7 @@ GENFRONT( axpbyv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -255,7 +255,7 @@ GENFRONT( scal2v ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* y, \ @@ -305,7 +305,7 @@ GENFRONT( dotv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -374,7 +374,7 @@ GENFRONT( dotxv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x \ BLIS_OAPI_EX_PARAMS \ @@ -413,7 +413,7 @@ GENFRONT( invertv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -467,7 +467,7 @@ GENFRONT( setv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* y \ @@ -510,7 +510,7 @@ GENFRONT( swapv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* beta, \ diff --git a/frame/1/bli_l1v_oapi.h b/frame/1/bli_l1v_oapi.h index 3124db9c3..41aecdc4d 100644 --- a/frame/1/bli_l1v_oapi.h +++ b/frame/1/bli_l1v_oapi.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* y \ @@ -55,7 +55,7 @@ GENTPROT( subv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* index \ @@ -68,7 +68,7 @@ GENTPROT( amaxv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -83,7 +83,7 @@ GENTPROT( axpbyv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -98,7 +98,7 @@ GENTPROT( scal2v ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* y, \ @@ -112,7 +112,7 @@ GENTPROT( dotv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -128,7 +128,7 @@ GENTPROT( dotxv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x \ BLIS_OAPI_EX_PARAMS \ @@ -140,7 +140,7 @@ GENTPROT( invertv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -154,7 +154,7 @@ GENTPROT( setv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* y \ @@ -167,7 +167,7 @@ GENTPROT( swapv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* beta, \ diff --git a/frame/1/bli_l1v_tapi.c b/frame/1/bli_l1v_tapi.c index 5fdfdb91e..1127cefe4 100644 --- a/frame/1/bli_l1v_tapi.c +++ b/frame/1/bli_l1v_tapi.c @@ -43,7 +43,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ dim_t n, \ @@ -81,7 +81,7 @@ INSERT_GENTFUNC_BASIC( subv, BLIS_SUBV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -115,7 +115,7 @@ INSERT_GENTFUNC_BASIC( amaxv, BLIS_AMAXV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ dim_t n, \ @@ -155,7 +155,7 @@ INSERT_GENTFUNC_BASIC( axpbyv, BLIS_AXPBYV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ dim_t n, \ @@ -195,7 +195,7 @@ INSERT_GENTFUNC_BASIC( scal2v, BLIS_SCAL2V_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -235,7 +235,7 @@ INSERT_GENTFUNC_BASIC( dotv, BLIS_DOTV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -279,7 +279,7 @@ INSERT_GENTFUNC_BASIC( dotxv, BLIS_DOTXV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx \ @@ -311,7 +311,7 @@ INSERT_GENTFUNC_BASIC( invertv, BLIS_INVERTV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjalpha, \ dim_t n, \ @@ -348,7 +348,7 @@ INSERT_GENTFUNC_BASIC( setv, BLIS_SETV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -381,7 +381,7 @@ INSERT_GENTFUNC_BASIC( swapv, BLIS_SWAPV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ dim_t n, \ diff --git a/frame/1/bli_l1v_tapi.h b/frame/1/bli_l1v_tapi.h index 6ddd0c1af..5cb3295ef 100644 --- a/frame/1/bli_l1v_tapi.h +++ b/frame/1/bli_l1v_tapi.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ dim_t n, \ @@ -57,7 +57,7 @@ INSERT_GENTPROT_BASIC0( subv ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -71,7 +71,7 @@ INSERT_GENTPROT_BASIC0( amaxv ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ dim_t n, \ @@ -88,7 +88,7 @@ INSERT_GENTPROT_BASIC0( axpbyv ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ dim_t n, \ @@ -105,7 +105,7 @@ INSERT_GENTPROT_BASIC0( scal2v ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -122,7 +122,7 @@ INSERT_GENTPROT_BASIC0( dotv ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -141,7 +141,7 @@ INSERT_GENTPROT_BASIC0( dotxv ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx \ @@ -154,7 +154,7 @@ INSERT_GENTPROT_BASIC0( invertv ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjalpha, \ dim_t n, \ @@ -170,7 +170,7 @@ INSERT_GENTPROT_BASIC0( setv ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -184,7 +184,7 @@ INSERT_GENTPROT_BASIC0( swapv ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ dim_t n, \ diff --git a/frame/1/other/packv/bli_packv_check.h b/frame/1/other/packv/bli_packv_check.h index 08dcd476f..7e4c62808 100644 --- a/frame/1/other/packv/bli_packv_check.h +++ b/frame/1/other/packv/bli_packv_check.h @@ -32,7 +32,7 @@ */ -void bli_packv_check +BLIS_EXPORT_BLIS void bli_packv_check ( obj_t* c, obj_t* p, diff --git a/frame/1/other/packv/bli_packv_cntl.h b/frame/1/other/packv/bli_packv_cntl.h index 87f33524b..6ddd1dcc1 100644 --- a/frame/1/other/packv/bli_packv_cntl.h +++ b/frame/1/other/packv/bli_packv_cntl.h @@ -56,7 +56,7 @@ typedef struct packv_params_s packv_params_t; // ----------------------------------------------------------------------------- -cntl_t* bli_packv_cntl_obj_create +BLIS_EXPORT_BLIS cntl_t* bli_packv_cntl_obj_create ( void* var_func, void* packv_var_func, diff --git a/frame/1/other/packv/bli_packv_init.h b/frame/1/other/packv/bli_packv_init.h index 8848b395f..38bbcd92b 100644 --- a/frame/1/other/packv/bli_packv_init.h +++ b/frame/1/other/packv/bli_packv_init.h @@ -32,7 +32,7 @@ */ -void bli_packv_init +BLIS_EXPORT_BLIS void bli_packv_init ( obj_t* a, obj_t* p, @@ -40,7 +40,7 @@ void bli_packv_init packv_t* cntl ); -siz_t bli_packv_init_pack +BLIS_EXPORT_BLIS siz_t bli_packv_init_pack ( pack_t pack_schema, bszid_t bmult_id, diff --git a/frame/1/other/packv/bli_packv_int.h b/frame/1/other/packv/bli_packv_int.h index b922c67a3..07fb60cf5 100644 --- a/frame/1/other/packv/bli_packv_int.h +++ b/frame/1/other/packv/bli_packv_int.h @@ -32,7 +32,7 @@ */ -void bli_packv_int +BLIS_EXPORT_BLIS void bli_packv_int ( obj_t* c, obj_t* p, diff --git a/frame/1/other/packv/bli_packv_unb_var1.c b/frame/1/other/packv/bli_packv_unb_var1.c index 23b370949..5da136ae4 100644 --- a/frame/1/other/packv/bli_packv_unb_var1.c +++ b/frame/1/other/packv/bli_packv_unb_var1.c @@ -81,7 +81,7 @@ void bli_packv_unb_var1( obj_t* c, #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ dim_t m, \ void* c, inc_t incc, \ diff --git a/frame/1/other/packv/bli_packv_unb_var1.h b/frame/1/other/packv/bli_packv_unb_var1.h index f33632015..0f8fbc804 100644 --- a/frame/1/other/packv/bli_packv_unb_var1.h +++ b/frame/1/other/packv/bli_packv_unb_var1.h @@ -32,7 +32,7 @@ */ -void bli_packv_unb_var1( obj_t* c, +BLIS_EXPORT_BLIS void bli_packv_unb_var1( obj_t* c, obj_t* p, cntx_t* cntx, packv_t* cntl ); @@ -40,7 +40,7 @@ void bli_packv_unb_var1( obj_t* c, #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ dim_t m, \ void* c, inc_t incc, \ diff --git a/frame/1/other/scalv/bli_scalv_cntl.h b/frame/1/other/scalv/bli_scalv_cntl.h index c97536387..1c9a4dac0 100644 --- a/frame/1/other/scalv/bli_scalv_cntl.h +++ b/frame/1/other/scalv/bli_scalv_cntl.h @@ -41,11 +41,11 @@ typedef struct scalv_s scalv_t; #define bli_cntl_sub_scalv( cntl ) cntl->sub_scalv -void bli_scalv_cntl_init( void ); -void bli_scalv_cntl_finalize( void ); -scalv_t* bli_scalv_cntl_obj_create( impl_t impl_type, +BLIS_EXPORT_BLIS void bli_scalv_cntl_init( void ); +BLIS_EXPORT_BLIS void bli_scalv_cntl_finalize( void ); +BLIS_EXPORT_BLIS scalv_t* bli_scalv_cntl_obj_create( impl_t impl_type, varnum_t var_num ); -void bli_scalv_cntl_obj_init( scalv_t* cntl, +BLIS_EXPORT_BLIS void bli_scalv_cntl_obj_init( scalv_t* cntl, impl_t impl_type, varnum_t var_num ); diff --git a/frame/1/other/scalv/bli_scalv_int.h b/frame/1/other/scalv/bli_scalv_int.h index fd7cff116..7a2a1eec1 100644 --- a/frame/1/other/scalv/bli_scalv_int.h +++ b/frame/1/other/scalv/bli_scalv_int.h @@ -32,7 +32,7 @@ */ -void bli_scalv_int( obj_t* alpha, +BLIS_EXPORT_BLIS void bli_scalv_int( obj_t* alpha, obj_t* x, cntx_t* cntx, scalv_t* cntl ); diff --git a/frame/1/other/unpackv/bli_unpackv_check.h b/frame/1/other/unpackv/bli_unpackv_check.h index 38d79fb3b..b8f10aa3d 100644 --- a/frame/1/other/unpackv/bli_unpackv_check.h +++ b/frame/1/other/unpackv/bli_unpackv_check.h @@ -32,7 +32,7 @@ */ -void bli_unpackv_check +BLIS_EXPORT_BLIS void bli_unpackv_check ( obj_t* p, obj_t* a, diff --git a/frame/1/other/unpackv/bli_unpackv_cntl.h b/frame/1/other/unpackv/bli_unpackv_cntl.h index 0defc6803..6a8adec82 100644 --- a/frame/1/other/unpackv/bli_unpackv_cntl.h +++ b/frame/1/other/unpackv/bli_unpackv_cntl.h @@ -45,11 +45,11 @@ typedef struct unpackv_s unpackv_t; #define bli_cntl_sub_unpackv_y( cntl ) cntl->sub_unpackv_y #define bli_cntl_sub_unpackv_y1( cntl ) cntl->sub_unpackv_y1 -void bli_unpackv_cntl_init( void ); -void bli_unpackv_cntl_finalize( void ); -unpackv_t* bli_unpackv_cntl_obj_create( impl_t impl_type, +BLIS_EXPORT_BLIS void bli_unpackv_cntl_init( void ); +BLIS_EXPORT_BLIS void bli_unpackv_cntl_finalize( void ); +BLIS_EXPORT_BLIS unpackv_t* bli_unpackv_cntl_obj_create( impl_t impl_type, varnum_t var_num ); -void bli_unpackv_cntl_obj_init( unpackv_t* cntl, +BLIS_EXPORT_BLIS void bli_unpackv_cntl_obj_init( unpackv_t* cntl, impl_t impl_type, varnum_t var_num ); diff --git a/frame/1/other/unpackv/bli_unpackv_int.h b/frame/1/other/unpackv/bli_unpackv_int.h index 940b738eb..043c58924 100644 --- a/frame/1/other/unpackv/bli_unpackv_int.h +++ b/frame/1/other/unpackv/bli_unpackv_int.h @@ -32,13 +32,13 @@ */ -void bli_unpackv_int( obj_t* p, +BLIS_EXPORT_BLIS void bli_unpackv_int( obj_t* p, obj_t* a, cntx_t* cntx, unpackv_t* cntl ); /* -void bli_unpackv_init_cast( obj_t* p, +BLIS_EXPORT_BLIS void bli_unpackv_init_cast( obj_t* p, obj_t* a, obj_t* c ); */ diff --git a/frame/1/other/unpackv/bli_unpackv_unb_var1.c b/frame/1/other/unpackv/bli_unpackv_unb_var1.c index 5dc1101b6..c23f6dc79 100644 --- a/frame/1/other/unpackv/bli_unpackv_unb_var1.c +++ b/frame/1/other/unpackv/bli_unpackv_unb_var1.c @@ -81,7 +81,7 @@ void bli_unpackv_unb_var1( obj_t* p, #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ dim_t m, \ void* p, inc_t incp, \ diff --git a/frame/1/other/unpackv/bli_unpackv_unb_var1.h b/frame/1/other/unpackv/bli_unpackv_unb_var1.h index 4449175b9..f13fb8265 100644 --- a/frame/1/other/unpackv/bli_unpackv_unb_var1.h +++ b/frame/1/other/unpackv/bli_unpackv_unb_var1.h @@ -32,7 +32,7 @@ */ -void bli_unpackv_unb_var1( obj_t* p, +BLIS_EXPORT_BLIS void bli_unpackv_unb_var1( obj_t* p, obj_t* c, cntx_t* cntx, unpackv_t* cntl ); @@ -40,7 +40,7 @@ void bli_unpackv_unb_var1( obj_t* p, #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ dim_t m, \ void* p, inc_t incp, \ diff --git a/frame/1d/bli_l1d_check.c b/frame/1d/bli_l1d_check.c index 908a410ad..4745c8d17 100644 --- a/frame/1d/bli_l1d_check.c +++ b/frame/1d/bli_l1d_check.c @@ -41,7 +41,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* y \ @@ -58,7 +58,7 @@ GENFRONT( subd ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -75,7 +75,7 @@ GENFRONT( scal2d ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x \ ) \ @@ -89,7 +89,7 @@ GENFRONT( invertd ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -107,7 +107,7 @@ GENFRONT( shiftd ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* beta, \ diff --git a/frame/1d/bli_l1d_check.h b/frame/1d/bli_l1d_check.h index 6d000d314..efb6f7af5 100644 --- a/frame/1d/bli_l1d_check.h +++ b/frame/1d/bli_l1d_check.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* y \ @@ -54,7 +54,7 @@ GENTPROT( subd ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -68,7 +68,7 @@ GENTPROT( scal2d ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x \ ); @@ -79,7 +79,7 @@ GENTPROT( invertd ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -94,7 +94,7 @@ GENTPROT( shiftd ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* beta, \ @@ -106,25 +106,25 @@ GENTPROT( xpbyd ) // ----------------------------------------------------------------------------- -void bli_l1d_xy_check +BLIS_EXPORT_BLIS void bli_l1d_xy_check ( obj_t* x, obj_t* y ); -void bli_l1d_axy_check +BLIS_EXPORT_BLIS void bli_l1d_axy_check ( obj_t* alpha, obj_t* x, obj_t* y ); -void bli_l1d_x_check +BLIS_EXPORT_BLIS void bli_l1d_x_check ( obj_t* x ); -void bli_l1d_ax_check +BLIS_EXPORT_BLIS void bli_l1d_ax_check ( obj_t* alpha, obj_t* x diff --git a/frame/1d/bli_l1d_fpa.h b/frame/1d/bli_l1d_fpa.h index 4516912de..743055636 100644 --- a/frame/1d/bli_l1d_fpa.h +++ b/frame/1d/bli_l1d_fpa.h @@ -40,7 +40,7 @@ #define GENPROT( opname ) \ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) \ -PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); +BLIS_EXPORT_BLIS BLIS_EXPORT_BLIS PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); GENPROT( addd ) GENPROT( copyd ) diff --git a/frame/1d/bli_l1d_oapi.c b/frame/1d/bli_l1d_oapi.c index 1a8b8f124..f548410b6 100644 --- a/frame/1d/bli_l1d_oapi.c +++ b/frame/1d/bli_l1d_oapi.c @@ -43,7 +43,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* y \ @@ -98,7 +98,7 @@ GENFRONT( subd ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -164,7 +164,7 @@ GENFRONT( scal2d ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x \ BLIS_OAPI_EX_PARAMS \ @@ -208,7 +208,7 @@ GENFRONT( invertd ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -267,7 +267,7 @@ GENFRONT( setd ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -315,7 +315,7 @@ GENFRONT( setid ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -371,7 +371,7 @@ GENFRONT( shiftd ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* beta, \ diff --git a/frame/1d/bli_l1d_oapi.h b/frame/1d/bli_l1d_oapi.h index d0e39b313..47129b771 100644 --- a/frame/1d/bli_l1d_oapi.h +++ b/frame/1d/bli_l1d_oapi.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* y \ @@ -55,7 +55,7 @@ GENTPROT( subd ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -70,7 +70,7 @@ GENTPROT( scal2d ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x \ BLIS_OAPI_EX_PARAMS \ @@ -82,7 +82,7 @@ GENTPROT( invertd ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -98,7 +98,7 @@ GENTPROT( shiftd ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* beta, \ diff --git a/frame/1d/bli_l1d_tapi.c b/frame/1d/bli_l1d_tapi.c index a8f9e844a..65a24f4cc 100644 --- a/frame/1d/bli_l1d_tapi.c +++ b/frame/1d/bli_l1d_tapi.c @@ -43,7 +43,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -121,7 +121,7 @@ INSERT_GENTFUNC_BASIC2( subd, subv, BLIS_SUBV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -200,7 +200,7 @@ INSERT_GENTFUNC_BASIC2( scal2d, scal2v, BLIS_SCAL2V_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ dim_t m, \ @@ -255,7 +255,7 @@ INSERT_GENTFUNC_BASIC2( invertd, invertv, BLIS_INVERTV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjalpha, \ doff_t diagoffx, \ @@ -315,7 +315,7 @@ INSERT_GENTFUNC_BASIC2( setd, setv, BLIS_SETV_KER ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname, kername, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ dim_t m, \ @@ -390,7 +390,7 @@ INSERT_GENTFUNCR_BASIC2( setid, setv, BLIS_SETV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ dim_t m, \ @@ -448,7 +448,7 @@ INSERT_GENTFUNC_BASIC2( shiftd, addv, BLIS_ADDV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ diff --git a/frame/1d/bli_l1d_tapi.h b/frame/1d/bli_l1d_tapi.h index 823858578..35d093e86 100644 --- a/frame/1d/bli_l1d_tapi.h +++ b/frame/1d/bli_l1d_tapi.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -60,7 +60,7 @@ INSERT_GENTPROT_BASIC0( subd ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -80,7 +80,7 @@ INSERT_GENTPROT_BASIC0( scal2d ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ dim_t m, \ @@ -95,7 +95,7 @@ INSERT_GENTPROT_BASIC0( invertd ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjalpha, \ doff_t diagoffx, \ @@ -113,7 +113,7 @@ INSERT_GENTPROT_BASIC0( setd ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ dim_t m, \ @@ -129,7 +129,7 @@ INSERT_GENTPROTR_BASIC0( setid ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ dim_t m, \ @@ -145,7 +145,7 @@ INSERT_GENTPROT_BASIC0( shiftd ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ diff --git a/frame/1f/bli_l1f_check.h b/frame/1f/bli_l1f_check.h index d630f3205..66ef9ad8c 100644 --- a/frame/1f/bli_l1f_check.h +++ b/frame/1f/bli_l1f_check.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alphax, \ obj_t* alphay, \ @@ -55,7 +55,7 @@ GENTPROT( axpy2v ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -69,7 +69,7 @@ GENTPROT( axpyf ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* xt, \ @@ -85,7 +85,7 @@ GENTPROT( dotaxpyv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* at, \ @@ -103,7 +103,7 @@ GENTPROT( dotxaxpyf ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* a, \ diff --git a/frame/1f/bli_l1f_fpa.h b/frame/1f/bli_l1f_fpa.h index df11439a4..e7059bf0d 100644 --- a/frame/1f/bli_l1f_fpa.h +++ b/frame/1f/bli_l1f_fpa.h @@ -40,7 +40,7 @@ #define GENPROT( opname ) \ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) \ -PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); +BLIS_EXPORT_BLIS PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); GENPROT( axpy2v ) GENPROT( axpyf ) diff --git a/frame/1f/bli_l1f_ker_prot.h b/frame/1f/bli_l1f_ker_prot.h index 18eea4568..824470663 100644 --- a/frame/1f/bli_l1f_ker_prot.h +++ b/frame/1f/bli_l1f_ker_prot.h @@ -39,7 +39,7 @@ #define AXPY2V_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -55,7 +55,7 @@ void PASTEMAC(ch,opname) \ #define AXPYF_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conja, \ conj_t conjx, \ @@ -71,7 +71,7 @@ void PASTEMAC(ch,opname) \ #define DOTAXPYV_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjxt, \ conj_t conjx, \ @@ -88,7 +88,7 @@ void PASTEMAC(ch,opname) \ #define DOTXAXPYF_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjat, \ conj_t conja, \ @@ -109,7 +109,7 @@ void PASTEMAC(ch,opname) \ #define DOTXF_KER_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjat, \ conj_t conjx, \ diff --git a/frame/1f/bli_l1f_oapi.c b/frame/1f/bli_l1f_oapi.c index d1e7f0dbe..285be9370 100644 --- a/frame/1f/bli_l1f_oapi.c +++ b/frame/1f/bli_l1f_oapi.c @@ -43,7 +43,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alphax, \ obj_t* alphay, \ @@ -113,7 +113,7 @@ GENFRONT( axpy2v ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -182,7 +182,7 @@ GENFRONT( axpyf ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* xt, \ @@ -251,7 +251,7 @@ GENFRONT( dotaxpyv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* at, \ @@ -340,7 +340,7 @@ GENFRONT( dotxaxpyf ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ diff --git a/frame/1f/bli_l1f_oapi.h b/frame/1f/bli_l1f_oapi.h index 47fdf381a..0348c4871 100644 --- a/frame/1f/bli_l1f_oapi.h +++ b/frame/1f/bli_l1f_oapi.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alphax, \ obj_t* alphay, \ @@ -56,7 +56,7 @@ GENTPROT( axpy2v ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -71,7 +71,7 @@ GENTPROT( axpyf ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* xt, \ @@ -88,7 +88,7 @@ GENTPROT( dotaxpyv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* at, \ @@ -107,7 +107,7 @@ GENTPROT( dotxaxpyf ) #undef GENTPROT #define GENTPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ diff --git a/frame/1f/bli_l1f_tapi.c b/frame/1f/bli_l1f_tapi.c index 332ff5af2..787273982 100644 --- a/frame/1f/bli_l1f_tapi.c +++ b/frame/1f/bli_l1f_tapi.c @@ -43,7 +43,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -87,7 +87,7 @@ INSERT_GENTFUNC_BASIC( axpy2v, BLIS_AXPY2V_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conja, \ conj_t conjx, \ @@ -131,7 +131,7 @@ INSERT_GENTFUNC_BASIC( axpyf, BLIS_AXPYF_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjxt, \ conj_t conjx, \ @@ -177,7 +177,7 @@ INSERT_GENTFUNC_BASIC( dotaxpyv, BLIS_DOTAXPYV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjat, \ conj_t conja, \ @@ -231,7 +231,7 @@ INSERT_GENTFUNC_BASIC( dotxaxpyf, BLIS_DOTXAXPYF_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjat, \ conj_t conjx, \ diff --git a/frame/1f/bli_l1f_tapi.h b/frame/1f/bli_l1f_tapi.h index 54361e8e6..2138b989d 100644 --- a/frame/1f/bli_l1f_tapi.h +++ b/frame/1f/bli_l1f_tapi.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -59,7 +59,7 @@ INSERT_GENTPROT_BASIC0( axpy2v ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conja, \ conj_t conjx, \ @@ -78,7 +78,7 @@ INSERT_GENTPROT_BASIC0( axpyf ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjxt, \ conj_t conjx, \ @@ -98,7 +98,7 @@ INSERT_GENTPROT_BASIC0( dotaxpyv ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjat, \ conj_t conja, \ @@ -122,7 +122,7 @@ INSERT_GENTPROT_BASIC0( dotxaxpyf ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjat, \ conj_t conjx, \ diff --git a/frame/1m/bli_l1m_check.c b/frame/1m/bli_l1m_check.c index 8914e43b1..e65ac1bbe 100644 --- a/frame/1m/bli_l1m_check.c +++ b/frame/1m/bli_l1m_check.c @@ -41,7 +41,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* y \ @@ -58,7 +58,7 @@ GENFRONT( subm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -75,7 +75,7 @@ GENFRONT( scal2m ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -91,7 +91,7 @@ GENFRONT( setm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* beta, \ diff --git a/frame/1m/bli_l1m_check.h b/frame/1m/bli_l1m_check.h index 030c0e219..a01a7bdd7 100644 --- a/frame/1m/bli_l1m_check.h +++ b/frame/1m/bli_l1m_check.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* y \ @@ -54,7 +54,7 @@ GENPROT( subm ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -68,7 +68,7 @@ GENPROT( scal2m ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -81,7 +81,7 @@ GENPROT( setm ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* beta, \ @@ -93,20 +93,20 @@ GENPROT( xpbym ) // ----------------------------------------------------------------------------- -void bli_l1m_xy_check +BLIS_EXPORT_BLIS void bli_l1m_xy_check ( obj_t* x, obj_t* y ); -void bli_l1m_axy_check +BLIS_EXPORT_BLIS void bli_l1m_axy_check ( obj_t* alpha, obj_t* x, obj_t* y ); -void bli_l1m_ax_check +BLIS_EXPORT_BLIS void bli_l1m_ax_check ( obj_t* alpha, obj_t* x diff --git a/frame/1m/bli_l1m_fpa.h b/frame/1m/bli_l1m_fpa.h index 84ef8b77f..2f4bb6468 100644 --- a/frame/1m/bli_l1m_fpa.h +++ b/frame/1m/bli_l1m_fpa.h @@ -40,7 +40,7 @@ #define GENPROT( opname ) \ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) \ -PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); +BLIS_EXPORT_BLIS PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); GENPROT( addm ) GENPROT( copym ) @@ -55,7 +55,7 @@ GENPROT( xpbym ) #define GENPROT( opname ) \ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) \ -PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp2)( num_t dtx, num_t dty ); +BLIS_EXPORT_BLIS PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp2)( num_t dtx, num_t dty ); GENPROT( xpbym_md ) diff --git a/frame/1m/bli_l1m_ker_prot.h b/frame/1m/bli_l1m_ker_prot.h index ada520b56..725eb750b 100644 --- a/frame/1m/bli_l1m_ker_prot.h +++ b/frame/1m/bli_l1m_ker_prot.h @@ -41,7 +41,7 @@ #define PACKM_KER_PROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ dim_t cdim, \ @@ -58,7 +58,7 @@ void PASTEMAC(ch,varname) \ #define UNPACKM_KER_PROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ dim_t n, \ @@ -73,7 +73,7 @@ void PASTEMAC(ch,varname) \ #define PACKM_3MIS_KER_PROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ dim_t cdim, \ @@ -90,7 +90,7 @@ void PASTEMAC(ch,varname) \ #define PACKM_4MI_KER_PROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ dim_t cdim, \ @@ -107,7 +107,7 @@ void PASTEMAC(ch,varname) \ #define PACKM_RIH_KER_PROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ pack_t schema, \ @@ -125,7 +125,7 @@ void PASTEMAC(ch,varname) \ #define PACKM_1ER_KER_PROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ pack_t schema, \ diff --git a/frame/1m/bli_l1m_oapi.c b/frame/1m/bli_l1m_oapi.c index 4bb0de784..eb94e5aea 100644 --- a/frame/1m/bli_l1m_oapi.c +++ b/frame/1m/bli_l1m_oapi.c @@ -43,7 +43,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* y \ @@ -100,7 +100,7 @@ GENFRONT( subm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -168,7 +168,7 @@ GENFRONT( scal2m ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -243,7 +243,7 @@ GENFRONT( scalm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -305,7 +305,7 @@ GENFRONT( setm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* beta, \ @@ -375,7 +375,7 @@ GENFRONT( xpbym ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* beta, \ diff --git a/frame/1m/bli_l1m_oapi.h b/frame/1m/bli_l1m_oapi.h index 3ca023deb..a6a94cf9f 100644 --- a/frame/1m/bli_l1m_oapi.h +++ b/frame/1m/bli_l1m_oapi.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* y \ @@ -55,7 +55,7 @@ GENPROT( subm ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -70,7 +70,7 @@ GENPROT( scal2m ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -84,7 +84,7 @@ GENPROT( setm ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* beta, \ diff --git a/frame/1m/bli_l1m_tapi.c b/frame/1m/bli_l1m_tapi.c index 2b3c4bb4a..45a17182f 100644 --- a/frame/1m/bli_l1m_tapi.c +++ b/frame/1m/bli_l1m_tapi.c @@ -43,7 +43,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, auxker ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -108,7 +108,7 @@ INSERT_GENTFUNC_BASIC( subm, subd ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -177,7 +177,7 @@ INSERT_GENTFUNC_BASIC0( copym ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -247,7 +247,7 @@ INSERT_GENTFUNC_BASIC0( axpym ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -339,7 +339,7 @@ INSERT_GENTFUNC_BASIC0( scal2m ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjalpha, \ doff_t diagoffx, \ @@ -385,7 +385,7 @@ INSERT_GENTFUNC_BASIC0( setm ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -472,7 +472,7 @@ INSERT_GENTFUNC_BASIC0( xpbym ) #undef GENTFUNC2 #define GENTFUNC2( ctype_x, ctype_y, chx, chy, opname ) \ \ -void PASTEMAC3(chx,chy,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC3(chx,chy,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ diff --git a/frame/1m/bli_l1m_tapi.h b/frame/1m/bli_l1m_tapi.h index a2592f8ba..03a1196ed 100644 --- a/frame/1m/bli_l1m_tapi.h +++ b/frame/1m/bli_l1m_tapi.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -61,7 +61,7 @@ INSERT_GENTPROT_BASIC0( subm ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -82,7 +82,7 @@ INSERT_GENTPROT_BASIC0( scal2m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjalpha, \ doff_t diagoffx, \ @@ -102,7 +102,7 @@ INSERT_GENTPROT_BASIC0( setm ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -122,7 +122,7 @@ INSERT_GENTPROT_BASIC0( xpbym ) #undef GENTPROT2 #define GENTPROT2( ctype_x, ctype_y, chx, chy, opname ) \ \ -void PASTEMAC3(chx,chy,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC3(chx,chy,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ diff --git a/frame/1m/bli_l1m_unb_var1.c b/frame/1m/bli_l1m_unb_var1.c index cb6098e3f..c9104c8d8 100644 --- a/frame/1m/bli_l1m_unb_var1.c +++ b/frame/1m/bli_l1m_unb_var1.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -157,7 +157,7 @@ INSERT_GENTFUNC_BASIC2( subm_unb_var1, subv, BLIS_SUBV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -276,7 +276,7 @@ INSERT_GENTFUNC_BASIC2( scal2m_unb_var1, scal2v, BLIS_SCAL2V_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjalpha, \ doff_t diagoffx, \ @@ -382,7 +382,7 @@ INSERT_GENTFUNC_BASIC2( setm_unb_var1, setv, BLIS_SETV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -500,7 +500,7 @@ INSERT_GENTFUNC_BASIC2( xpbym_unb_var1, xpbyv, BLIS_XPBYV_KER ) #undef GENTFUNC2 #define GENTFUNC2( ctype_x, ctype_y, chx, chy, opname ) \ \ -void PASTEMAC2(chx,chy,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(chx,chy,opname) \ ( \ doff_t diagoffx, \ diag_t diagx, \ diff --git a/frame/1m/bli_l1m_unb_var1.h b/frame/1m/bli_l1m_unb_var1.h index 0364d4b7c..81be9fe80 100644 --- a/frame/1m/bli_l1m_unb_var1.h +++ b/frame/1m/bli_l1m_unb_var1.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,_unb_var1) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,_unb_var1) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -62,7 +62,7 @@ INSERT_GENTPROT_BASIC0( subm ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,_unb_var1) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,_unb_var1) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -84,7 +84,7 @@ INSERT_GENTPROT_BASIC0( scal2m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,_unb_var1) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,_unb_var1) \ ( \ conj_t conjalpha, \ doff_t diagoffx, \ @@ -105,7 +105,7 @@ INSERT_GENTPROT_BASIC0( setm ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,_unb_var1) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,_unb_var1) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -126,7 +126,7 @@ INSERT_GENTPROT_BASIC0( xpbym ) #undef GENTPROT2 #define GENTPROT2( ctype_x, ctype_y, chx, chy, opname ) \ \ -void PASTEMAC3(chx,chy,opname,_unb_var1) \ +BLIS_EXPORT_BLIS void PASTEMAC3(chx,chy,opname,_unb_var1) \ ( \ doff_t diagoffx, \ diag_t diagx, \ diff --git a/frame/1m/other/bli_scalm_cntl.h b/frame/1m/other/bli_scalm_cntl.h index 0d589f207..f87fe110b 100644 --- a/frame/1m/other/bli_scalm_cntl.h +++ b/frame/1m/other/bli_scalm_cntl.h @@ -33,7 +33,7 @@ */ -cntl_t* bli_scalm_cntl_create_node +BLIS_EXPORT_BLIS cntl_t* bli_scalm_cntl_create_node ( void* var_func, cntl_t* sub_node diff --git a/frame/1m/other/bli_scalm_int.h b/frame/1m/other/bli_scalm_int.h index fb043e45f..5b7f054b0 100644 --- a/frame/1m/other/bli_scalm_int.h +++ b/frame/1m/other/bli_scalm_int.h @@ -32,7 +32,7 @@ */ -void bli_scalm_int( obj_t* alpha, +BLIS_EXPORT_BLIS void bli_scalm_int( obj_t* alpha, obj_t* x, cntx_t* cntx, scalm_t* cntl ); diff --git a/frame/1m/packm/bli_packm_blk_var1.c b/frame/1m/packm/bli_packm_blk_var1.c index 6afc48fad..b5fd52b03 100644 --- a/frame/1m/packm/bli_packm_blk_var1.c +++ b/frame/1m/packm/bli_packm_blk_var1.c @@ -276,7 +276,7 @@ void bli_packm_blk_var1 #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/packm/bli_packm_blk_var1_md.c b/frame/1m/packm/bli_packm_blk_var1_md.c index 8d4906c50..c0b5b4709 100644 --- a/frame/1m/packm/bli_packm_blk_var1_md.c +++ b/frame/1m/packm/bli_packm_blk_var1_md.c @@ -57,7 +57,7 @@ typedef void (*FUNCPTR_T)( static FUNCPTR_T GENARRAY2_ALL(ftypes,packm_blk_var1_md); -void bli_packm_blk_var1_md +BLIS_EXPORT_BLIS void bli_packm_blk_var1_md ( obj_t* c, obj_t* p, @@ -164,7 +164,7 @@ void bli_packm_blk_var1_md #undef GENTFUNC2 #define GENTFUNC2( ctype_c, ctype_p, chc, chp, varname ) \ \ -void PASTEMAC2(chc,chp,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(chc,chp,varname) \ ( \ trans_t transc, \ pack_t schema, \ diff --git a/frame/1m/packm/bli_packm_blk_var1_md.h b/frame/1m/packm/bli_packm_blk_var1_md.h index e6bf151d0..99c697da6 100644 --- a/frame/1m/packm/bli_packm_blk_var1_md.h +++ b/frame/1m/packm/bli_packm_blk_var1_md.h @@ -32,7 +32,7 @@ */ -void bli_packm_blk_var1_md +BLIS_EXPORT_BLIS void bli_packm_blk_var1_md ( obj_t* c, obj_t* p, @@ -45,7 +45,7 @@ void bli_packm_blk_var1_md #undef GENTPROT2 #define GENTPROT2( ctype_c, ctype_p, chc, chp, varname ) \ \ -void PASTEMAC2(chc,chp,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(chc,chp,varname) \ ( \ trans_t transc, \ pack_t schema, \ diff --git a/frame/1m/packm/bli_packm_check.c b/frame/1m/packm/bli_packm_check.c index e662a85df..2e0c059c7 100644 --- a/frame/1m/packm/bli_packm_check.c +++ b/frame/1m/packm/bli_packm_check.c @@ -35,7 +35,7 @@ #include "blis.h" -void bli_packm_init_check +BLIS_EXPORT_BLIS void bli_packm_init_check ( obj_t* a, obj_t* p, @@ -57,7 +57,7 @@ void bli_packm_init_check //bli_check_error_code( e_val ); } -void bli_packm_int_check +BLIS_EXPORT_BLIS void bli_packm_int_check ( obj_t* a, obj_t* p, diff --git a/frame/1m/packm/bli_packm_check.h b/frame/1m/packm/bli_packm_check.h index be375fcf7..8b78feb99 100644 --- a/frame/1m/packm/bli_packm_check.h +++ b/frame/1m/packm/bli_packm_check.h @@ -32,14 +32,14 @@ */ -void bli_packm_init_check +BLIS_EXPORT_BLIS void bli_packm_init_check ( obj_t* a, obj_t* p, cntx_t* cntx ); -void bli_packm_int_check +BLIS_EXPORT_BLIS void bli_packm_int_check ( obj_t* a, obj_t* p, diff --git a/frame/1m/packm/bli_packm_cntl.h b/frame/1m/packm/bli_packm_cntl.h index bbf0ea332..418b7b991 100644 --- a/frame/1m/packm/bli_packm_cntl.h +++ b/frame/1m/packm/bli_packm_cntl.h @@ -89,7 +89,7 @@ static packbuf_t bli_cntl_packm_params_pack_buf_type( cntl_t* cntl ) // ----------------------------------------------------------------------------- -cntl_t* bli_packm_cntl_create_node +BLIS_EXPORT_BLIS cntl_t* bli_packm_cntl_create_node ( rntm_t* rntm, void* var_func, diff --git a/frame/1m/packm/bli_packm_cxk.c b/frame/1m/packm/bli_packm_cxk.c index 59f99dd18..9e82bfc8d 100644 --- a/frame/1m/packm/bli_packm_cxk.c +++ b/frame/1m/packm/bli_packm_cxk.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conja, \ dim_t panel_dim, \ diff --git a/frame/1m/packm/bli_packm_cxk.h b/frame/1m/packm/bli_packm_cxk.h index be089f05c..26071af4d 100644 --- a/frame/1m/packm/bli_packm_cxk.h +++ b/frame/1m/packm/bli_packm_cxk.h @@ -36,7 +36,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ dim_t panel_dim, \ diff --git a/frame/1m/packm/bli_packm_cxk_1er.c b/frame/1m/packm/bli_packm_cxk_1er.c index e583c8a82..8331acf1c 100644 --- a/frame/1m/packm/bli_packm_cxk_1er.c +++ b/frame/1m/packm/bli_packm_cxk_1er.c @@ -37,7 +37,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conja, \ pack_t schema, \ diff --git a/frame/1m/packm/bli_packm_cxk_1er.h b/frame/1m/packm/bli_packm_cxk_1er.h index 2b0c977b9..77151a2e5 100644 --- a/frame/1m/packm/bli_packm_cxk_1er.h +++ b/frame/1m/packm/bli_packm_cxk_1er.h @@ -36,7 +36,7 @@ #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ pack_t schema, \ diff --git a/frame/1m/packm/bli_packm_cxk_3mis.c b/frame/1m/packm/bli_packm_cxk_3mis.c index 9435f6a73..900eefb50 100644 --- a/frame/1m/packm/bli_packm_cxk_3mis.c +++ b/frame/1m/packm/bli_packm_cxk_3mis.c @@ -37,7 +37,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conja, \ dim_t panel_dim, \ diff --git a/frame/1m/packm/bli_packm_cxk_3mis.h b/frame/1m/packm/bli_packm_cxk_3mis.h index 358cdcee4..472723986 100644 --- a/frame/1m/packm/bli_packm_cxk_3mis.h +++ b/frame/1m/packm/bli_packm_cxk_3mis.h @@ -36,7 +36,7 @@ #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ dim_t panel_dim, \ diff --git a/frame/1m/packm/bli_packm_cxk_4mi.c b/frame/1m/packm/bli_packm_cxk_4mi.c index c22f551cc..03f151681 100644 --- a/frame/1m/packm/bli_packm_cxk_4mi.c +++ b/frame/1m/packm/bli_packm_cxk_4mi.c @@ -37,7 +37,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conja, \ dim_t panel_dim, \ diff --git a/frame/1m/packm/bli_packm_cxk_4mi.h b/frame/1m/packm/bli_packm_cxk_4mi.h index 244f2d045..1ad57079c 100644 --- a/frame/1m/packm/bli_packm_cxk_4mi.h +++ b/frame/1m/packm/bli_packm_cxk_4mi.h @@ -36,7 +36,7 @@ #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ dim_t panel_dim, \ diff --git a/frame/1m/packm/bli_packm_cxk_rih.c b/frame/1m/packm/bli_packm_cxk_rih.c index 1f2c9f240..62e4b5246 100644 --- a/frame/1m/packm/bli_packm_cxk_rih.c +++ b/frame/1m/packm/bli_packm_cxk_rih.c @@ -37,7 +37,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conja, \ pack_t schema, \ diff --git a/frame/1m/packm/bli_packm_cxk_rih.h b/frame/1m/packm/bli_packm_cxk_rih.h index c1d2ba9fe..7bf49aca7 100644 --- a/frame/1m/packm/bli_packm_cxk_rih.h +++ b/frame/1m/packm/bli_packm_cxk_rih.h @@ -36,7 +36,7 @@ #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ pack_t schema, \ diff --git a/frame/1m/packm/bli_packm_init.h b/frame/1m/packm/bli_packm_init.h index 6896ab913..c1b1a8f62 100644 --- a/frame/1m/packm/bli_packm_init.h +++ b/frame/1m/packm/bli_packm_init.h @@ -32,7 +32,7 @@ */ -siz_t bli_packm_init +BLIS_EXPORT_BLIS siz_t bli_packm_init ( obj_t* a, obj_t* p, @@ -40,7 +40,7 @@ siz_t bli_packm_init cntl_t* cntl ); -siz_t bli_packm_init_pack +BLIS_EXPORT_BLIS siz_t bli_packm_init_pack ( invdiag_t invert_diag, pack_t schema, diff --git a/frame/1m/packm/bli_packm_int.c b/frame/1m/packm/bli_packm_int.c index 6dc9ec85a..c59781532 100644 --- a/frame/1m/packm/bli_packm_int.c +++ b/frame/1m/packm/bli_packm_int.c @@ -34,7 +34,7 @@ #include "blis.h" -void bli_packm_int +BLIS_EXPORT_BLIS void bli_packm_int ( obj_t* a, obj_t* p, diff --git a/frame/1m/packm/bli_packm_int.h b/frame/1m/packm/bli_packm_int.h index 573a299d6..883c72ae9 100644 --- a/frame/1m/packm/bli_packm_int.h +++ b/frame/1m/packm/bli_packm_int.h @@ -32,7 +32,7 @@ */ -void bli_packm_int +BLIS_EXPORT_BLIS void bli_packm_int ( obj_t* a, obj_t* p, diff --git a/frame/1m/packm/bli_packm_part.c b/frame/1m/packm/bli_packm_part.c index 2fff4b7c8..09cedbed1 100644 --- a/frame/1m/packm/bli_packm_part.c +++ b/frame/1m/packm/bli_packm_part.c @@ -38,7 +38,7 @@ // -- Matrix partitioning ------------------------------------------------------ -void bli_packm_acquire_mpart_t2b( subpart_t requested_part, +BLIS_EXPORT_BLIS void bli_packm_acquire_mpart_t2b( subpart_t requested_part, dim_t i, dim_t b, obj_t* obj, @@ -110,7 +110,7 @@ void bli_packm_acquire_mpart_t2b( subpart_t requested_part, -void bli_packm_acquire_mpart_l2r( subpart_t requested_part, +BLIS_EXPORT_BLIS void bli_packm_acquire_mpart_l2r( subpart_t requested_part, dim_t j, dim_t b, obj_t* obj, @@ -186,7 +186,7 @@ void bli_packm_acquire_mpart_l2r( subpart_t requested_part, -void bli_packm_acquire_mpart_tl2br( subpart_t requested_part, +BLIS_EXPORT_BLIS void bli_packm_acquire_mpart_tl2br( subpart_t requested_part, dim_t ij, dim_t b, obj_t* obj, diff --git a/frame/1m/packm/bli_packm_part.h b/frame/1m/packm/bli_packm_part.h index 5930d312e..e2ccbf18e 100644 --- a/frame/1m/packm/bli_packm_part.h +++ b/frame/1m/packm/bli_packm_part.h @@ -34,23 +34,23 @@ // -- Matrix partitioning ------------------------------------------------------ -void bli_packm_acquire_mpart_t2b( subpart_t requested_part, +BLIS_EXPORT_BLIS void bli_packm_acquire_mpart_t2b( subpart_t requested_part, dim_t i, dim_t b, obj_t* obj, obj_t* sub_obj ); -void bli_packm_acquire_mpart_l2r( subpart_t requested_part, +BLIS_EXPORT_BLIS void bli_packm_acquire_mpart_l2r( subpart_t requested_part, dim_t j, dim_t b, obj_t* obj, obj_t* sub_obj ); -void bli_packm_acquire_mpart_tl2br( subpart_t requested_part, +BLIS_EXPORT_BLIS void bli_packm_acquire_mpart_tl2br( subpart_t requested_part, dim_t ij, dim_t b, obj_t* obj, obj_t* sub_obj ); -dim_t bli_packm_offset_to_panel_for( dim_t offmn, obj_t* p ); +BLIS_EXPORT_BLIS dim_t bli_packm_offset_to_panel_for( dim_t offmn, obj_t* p ); diff --git a/frame/1m/packm/bli_packm_struc_cxk.c b/frame/1m/packm/bli_packm_struc_cxk.c index b86a9ebbd..5e7decea6 100644 --- a/frame/1m/packm/bli_packm_struc_cxk.c +++ b/frame/1m/packm/bli_packm_struc_cxk.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -278,7 +278,7 @@ INSERT_GENTFUNC_BASIC( packm_struc_cxk, packm_cxk ) #undef GENTFUNC #define GENTFUNC( ctype, ch, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -532,7 +532,7 @@ INSERT_GENTFUNC_BASIC( packm_herm_cxk, packm_cxk ) #undef GENTFUNC #define GENTFUNC( ctype, ch, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk.h b/frame/1m/packm/bli_packm_struc_cxk.h index 5b486d776..f192bd3cd 100644 --- a/frame/1m/packm/bli_packm_struc_cxk.h +++ b/frame/1m/packm/bli_packm_struc_cxk.h @@ -35,7 +35,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ @@ -62,7 +62,7 @@ INSERT_GENTPROT_BASIC0( packm_struc_cxk ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -92,7 +92,7 @@ INSERT_GENTPROT_BASIC0( packm_herm_cxk ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_1er.c b/frame/1m/packm/bli_packm_struc_cxk_1er.c index 038ee1b8f..9a2c079c3 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_1er.c +++ b/frame/1m/packm/bli_packm_struc_cxk_1er.c @@ -37,7 +37,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -274,7 +274,7 @@ INSERT_GENTFUNCCO_BASIC( packm_struc_cxk_1er, packm_cxk_1er ) #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -520,7 +520,7 @@ INSERT_GENTFUNCCO_BASIC( packm_herm_cxk_1er, packm_cxk_1er ) #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_1er.h b/frame/1m/packm/bli_packm_struc_cxk_1er.h index e63edf8f2..348f5bd30 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_1er.h +++ b/frame/1m/packm/bli_packm_struc_cxk_1er.h @@ -35,7 +35,7 @@ #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ @@ -62,7 +62,7 @@ INSERT_GENTPROTCO_BASIC0( packm_struc_cxk_1er ) #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -92,7 +92,7 @@ INSERT_GENTPROTCO_BASIC0( packm_herm_cxk_1er ) #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_3mis.c b/frame/1m/packm/bli_packm_struc_cxk_3mis.c index 9d01b3b40..7530ad42b 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_3mis.c +++ b/frame/1m/packm/bli_packm_struc_cxk_3mis.c @@ -37,7 +37,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -338,7 +338,7 @@ INSERT_GENTFUNCCO_BASIC( packm_struc_cxk_3mis, packm_cxk_3mis ) #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -657,7 +657,7 @@ INSERT_GENTFUNCCO_BASIC( packm_herm_cxk_3mis, packm_cxk_3mis ) #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_3mis.h b/frame/1m/packm/bli_packm_struc_cxk_3mis.h index 24f2c0fcb..f4568f722 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_3mis.h +++ b/frame/1m/packm/bli_packm_struc_cxk_3mis.h @@ -35,7 +35,7 @@ #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ @@ -62,7 +62,7 @@ INSERT_GENTPROTCO_BASIC0( packm_struc_cxk_3mis ) #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -92,7 +92,7 @@ INSERT_GENTPROTCO_BASIC0( packm_herm_cxk_3mis ) #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_4mi.c b/frame/1m/packm/bli_packm_struc_cxk_4mi.c index 3df849921..80ce1ffb8 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_4mi.c +++ b/frame/1m/packm/bli_packm_struc_cxk_4mi.c @@ -37,7 +37,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -308,7 +308,7 @@ INSERT_GENTFUNCCO_BASIC( packm_struc_cxk_4mi, packm_cxk_4mi ) #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -612,7 +612,7 @@ INSERT_GENTFUNCCO_BASIC( packm_herm_cxk_4mi, packm_cxk_4mi ) #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_4mi.h b/frame/1m/packm/bli_packm_struc_cxk_4mi.h index f2e6636bf..65cee615b 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_4mi.h +++ b/frame/1m/packm/bli_packm_struc_cxk_4mi.h @@ -35,7 +35,7 @@ #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ @@ -62,7 +62,7 @@ INSERT_GENTPROTCO_BASIC0( packm_struc_cxk_4mi ) #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -92,7 +92,7 @@ INSERT_GENTPROTCO_BASIC0( packm_herm_cxk_4mi ) #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_md.c b/frame/1m/packm/bli_packm_struc_cxk_md.c index 52a1f9817..8bae422a6 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_md.c +++ b/frame/1m/packm/bli_packm_struc_cxk_md.c @@ -39,7 +39,7 @@ #undef GENTFUNC2 #define GENTFUNC2( ctype_c, ctype_p, chc, chp, varname ) \ \ -void PASTEMAC2(chc,chp,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(chc,chp,varname) \ ( \ conj_t conjc, \ pack_t schema, \ @@ -313,7 +313,7 @@ INSERT_GENTFUNC2_MIXDP0( packm_struc_cxk_md ) #undef GENTFUNC2 #define GENTFUNC2( ctype_a, ctype_p, cha, chp, opname ) \ \ -void PASTEMAC2(cha,chp,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(cha,chp,opname) \ ( \ conj_t conja, \ dim_t m, \ @@ -440,7 +440,7 @@ INSERT_GENTFUNC2_MIXDP0( packm_cxk_1r_md ) #undef GENTFUNC2 #define GENTFUNC2( ctype_a, ctype_p, cha, chp, opname ) \ \ -void PASTEMAC2(cha,chp,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(cha,chp,opname) \ ( \ conj_t conja, \ dim_t m, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_md.h b/frame/1m/packm/bli_packm_struc_cxk_md.h index 72ca67937..f6b62160c 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_md.h +++ b/frame/1m/packm/bli_packm_struc_cxk_md.h @@ -35,7 +35,7 @@ #undef GENTPROT2 #define GENTPROT2( ctype_c, ctype_p, chc, chp, varname ) \ \ -void PASTEMAC2(chc,chp,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(chc,chp,varname) \ ( \ conj_t conjc, \ pack_t schema, \ @@ -57,7 +57,7 @@ INSERT_GENTPROT2_MIXDP0( packm_struc_cxk_md ) #undef GENTPROT2 #define GENTPROT2( ctype_a, ctype_p, cha, chp, opname ) \ \ -void PASTEMAC2(cha,chp,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(cha,chp,opname) \ ( \ conj_t conja, \ dim_t m, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_rih.c b/frame/1m/packm/bli_packm_struc_cxk_rih.c index 32a7ec1a7..e73970ab5 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_rih.c +++ b/frame/1m/packm/bli_packm_struc_cxk_rih.c @@ -37,7 +37,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -269,7 +269,7 @@ INSERT_GENTFUNCCO_BASIC( packm_struc_cxk_rih, packm_cxk_rih ) #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -522,7 +522,7 @@ INSERT_GENTFUNCCO_BASIC( packm_herm_cxk_rih, packm_cxk_rih ) #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_rih.h b/frame/1m/packm/bli_packm_struc_cxk_rih.h index e87767e26..392124021 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_rih.h +++ b/frame/1m/packm/bli_packm_struc_cxk_rih.h @@ -35,7 +35,7 @@ #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ @@ -62,7 +62,7 @@ INSERT_GENTPROTCO_BASIC0( packm_struc_cxk_rih ) #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -92,7 +92,7 @@ INSERT_GENTPROTCO_BASIC0( packm_herm_cxk_rih ) #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/packm/bli_packm_thrinfo.c b/frame/1m/packm/bli_packm_thrinfo.c index 4b57971ef..a619cd981 100644 --- a/frame/1m/packm/bli_packm_thrinfo.c +++ b/frame/1m/packm/bli_packm_thrinfo.c @@ -35,7 +35,7 @@ #include "blis.h" -void bli_packm_thrinfo_init +BLIS_EXPORT_BLIS void bli_packm_thrinfo_init ( thrinfo_t* thread, thrcomm_t* ocomm, @@ -57,7 +57,7 @@ void bli_packm_thrinfo_init ); } -void bli_packm_thrinfo_init_single +BLIS_EXPORT_BLIS void bli_packm_thrinfo_init_single ( thrinfo_t* thread ) diff --git a/frame/1m/packm/bli_packm_thrinfo.h b/frame/1m/packm/bli_packm_thrinfo.h index 85b61931c..886af5f07 100644 --- a/frame/1m/packm/bli_packm_thrinfo.h +++ b/frame/1m/packm/bli_packm_thrinfo.h @@ -70,7 +70,7 @@ // #if 0 -thrinfo_t* bli_packm_thrinfo_create +BLIS_EXPORT_BLIS thrinfo_t* bli_packm_thrinfo_create ( thrcomm_t* ocomm, dim_t ocomm_id, @@ -80,7 +80,7 @@ thrinfo_t* bli_packm_thrinfo_create ); #endif -void bli_packm_thrinfo_init +BLIS_EXPORT_BLIS void bli_packm_thrinfo_init ( thrinfo_t* thread, thrcomm_t* ocomm, @@ -91,13 +91,13 @@ void bli_packm_thrinfo_init thrinfo_t* sub_node ); -void bli_packm_thrinfo_init_single +BLIS_EXPORT_BLIS void bli_packm_thrinfo_init_single ( thrinfo_t* thread ); #if 0 -void bli_packm_thrinfo_free +BLIS_EXPORT_BLIS void bli_packm_thrinfo_free ( thrinfo_t* thread ); diff --git a/frame/1m/packm/bli_packm_unb_var1.c b/frame/1m/packm/bli_packm_unb_var1.c index 6e72b3e9d..c6705b956 100644 --- a/frame/1m/packm/bli_packm_unb_var1.c +++ b/frame/1m/packm/bli_packm_unb_var1.c @@ -125,7 +125,7 @@ void bli_packm_unb_var1 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/packm/bli_packm_unb_var1.h b/frame/1m/packm/bli_packm_unb_var1.h index 8960c8661..9d7b20c52 100644 --- a/frame/1m/packm/bli_packm_unb_var1.h +++ b/frame/1m/packm/bli_packm_unb_var1.h @@ -32,7 +32,7 @@ */ -void bli_packm_unb_var1 +BLIS_EXPORT_BLIS void bli_packm_unb_var1 ( obj_t* c, obj_t* p, @@ -45,7 +45,7 @@ void bli_packm_unb_var1 #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/packm/bli_packm_var.h b/frame/1m/packm/bli_packm_var.h index ce2065fd1..a37c363bc 100644 --- a/frame/1m/packm/bli_packm_var.h +++ b/frame/1m/packm/bli_packm_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* c, \ obj_t* p, \ @@ -59,7 +59,7 @@ GENPROT( packm_blk_var1 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -81,7 +81,7 @@ INSERT_GENTPROT_BASIC0( packm_unb_var1 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/unpackm/bli_unpackm_blk_var1.c b/frame/1m/unpackm/bli_unpackm_blk_var1.c index b2c862045..430efd45b 100644 --- a/frame/1m/unpackm/bli_unpackm_blk_var1.c +++ b/frame/1m/unpackm/bli_unpackm_blk_var1.c @@ -55,7 +55,7 @@ typedef void (*FUNCPTR_T)( static FUNCPTR_T GENARRAY(ftypes,unpackm_blk_var1); -void bli_unpackm_blk_var1 +BLIS_EXPORT_BLIS void bli_unpackm_blk_var1 ( obj_t* p, obj_t* c, @@ -126,7 +126,7 @@ void bli_unpackm_blk_var1 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/unpackm/bli_unpackm_blk_var1.h b/frame/1m/unpackm/bli_unpackm_blk_var1.h index abd044549..160cef90f 100644 --- a/frame/1m/unpackm/bli_unpackm_blk_var1.h +++ b/frame/1m/unpackm/bli_unpackm_blk_var1.h @@ -32,7 +32,7 @@ */ -void bli_unpackm_blk_var1 +BLIS_EXPORT_BLIS void bli_unpackm_blk_var1 ( obj_t* p, obj_t* c, @@ -45,7 +45,7 @@ void bli_unpackm_blk_var1 #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/unpackm/bli_unpackm_check.c b/frame/1m/unpackm/bli_unpackm_check.c index 5bce60ed3..19189bdbf 100644 --- a/frame/1m/unpackm/bli_unpackm_check.c +++ b/frame/1m/unpackm/bli_unpackm_check.c @@ -34,7 +34,7 @@ #include "blis.h" -void bli_unpackm_int_check +BLIS_EXPORT_BLIS void bli_unpackm_int_check ( obj_t* p, obj_t* a, diff --git a/frame/1m/unpackm/bli_unpackm_check.h b/frame/1m/unpackm/bli_unpackm_check.h index d2a976dd8..0edb6bc57 100644 --- a/frame/1m/unpackm/bli_unpackm_check.h +++ b/frame/1m/unpackm/bli_unpackm_check.h @@ -32,7 +32,7 @@ */ -void bli_unpackm_int_check +BLIS_EXPORT_BLIS void bli_unpackm_int_check ( obj_t* p, obj_t* a, diff --git a/frame/1m/unpackm/bli_unpackm_cntl.h b/frame/1m/unpackm/bli_unpackm_cntl.h index 49a8b19f6..e8409d657 100644 --- a/frame/1m/unpackm/bli_unpackm_cntl.h +++ b/frame/1m/unpackm/bli_unpackm_cntl.h @@ -46,7 +46,7 @@ typedef struct unpackm_params_s unpackm_params_t; // ----------------------------------------------------------------------------- -cntl_t* bli_unpackm_cntl_create_node +BLIS_EXPORT_BLIS cntl_t* bli_unpackm_cntl_create_node ( rntm_t* rntm, void* var_func, diff --git a/frame/1m/unpackm/bli_unpackm_cxk.c b/frame/1m/unpackm/bli_unpackm_cxk.c index 4423c41a2..88dffd692 100644 --- a/frame/1m/unpackm/bli_unpackm_cxk.c +++ b/frame/1m/unpackm/bli_unpackm_cxk.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjp, \ dim_t panel_dim, \ diff --git a/frame/1m/unpackm/bli_unpackm_cxk.h b/frame/1m/unpackm/bli_unpackm_cxk.h index 53c3c0c44..730f15fa9 100644 --- a/frame/1m/unpackm/bli_unpackm_cxk.h +++ b/frame/1m/unpackm/bli_unpackm_cxk.h @@ -36,7 +36,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ conj_t conjp, \ dim_t panel_dim, \ diff --git a/frame/1m/unpackm/bli_unpackm_int.c b/frame/1m/unpackm/bli_unpackm_int.c index f4c8ab82d..83b0acfbe 100644 --- a/frame/1m/unpackm/bli_unpackm_int.c +++ b/frame/1m/unpackm/bli_unpackm_int.c @@ -34,7 +34,7 @@ #include "blis.h" -void bli_unpackm_int +BLIS_EXPORT_BLIS void bli_unpackm_int ( obj_t* p, obj_t* a, diff --git a/frame/1m/unpackm/bli_unpackm_int.h b/frame/1m/unpackm/bli_unpackm_int.h index cb66d0975..690a5479c 100644 --- a/frame/1m/unpackm/bli_unpackm_int.h +++ b/frame/1m/unpackm/bli_unpackm_int.h @@ -32,7 +32,7 @@ */ -void bli_unpackm_int +BLIS_EXPORT_BLIS void bli_unpackm_int ( obj_t* p, obj_t* a, diff --git a/frame/1m/unpackm/bli_unpackm_unb_var1.c b/frame/1m/unpackm/bli_unpackm_unb_var1.c index c1033c2cb..d7bb57e60 100644 --- a/frame/1m/unpackm/bli_unpackm_unb_var1.c +++ b/frame/1m/unpackm/bli_unpackm_unb_var1.c @@ -50,7 +50,7 @@ typedef void (*FUNCPTR_T)( static FUNCPTR_T GENARRAY(ftypes,unpackm_unb_var1); -void bli_unpackm_unb_var1 +BLIS_EXPORT_BLIS void bli_unpackm_unb_var1 ( obj_t* p, obj_t* c, @@ -98,7 +98,7 @@ void bli_unpackm_unb_var1 #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, varname ) \ \ -void PASTEMAC(ch,varname)( \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname)( \ doff_t diagoffp, \ uplo_t uplop, \ trans_t transp, \ diff --git a/frame/1m/unpackm/bli_unpackm_unb_var1.h b/frame/1m/unpackm/bli_unpackm_unb_var1.h index 5119aaa7f..290b1a927 100644 --- a/frame/1m/unpackm/bli_unpackm_unb_var1.h +++ b/frame/1m/unpackm/bli_unpackm_unb_var1.h @@ -32,7 +32,7 @@ */ -void bli_unpackm_unb_var1 +BLIS_EXPORT_BLIS void bli_unpackm_unb_var1 ( obj_t* p, obj_t* c, @@ -44,7 +44,7 @@ void bli_unpackm_unb_var1 #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffp, \ uplo_t uplop, \ diff --git a/frame/2/bli_l2_check.h b/frame/2/bli_l2_check.h index af9388753..6d1e2b2da 100644 --- a/frame/2/bli_l2_check.h +++ b/frame/2/bli_l2_check.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -57,7 +57,7 @@ GENPROT( symv ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -73,7 +73,7 @@ GENPROT( syr2 ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -87,7 +87,7 @@ GENPROT( syr ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -100,7 +100,7 @@ GENPROT( trsv ) // ----------------------------------------------------------------------------- -void bli_xxmv_check +BLIS_EXPORT_BLIS void bli_xxmv_check ( obj_t* alpha, obj_t* a, @@ -109,7 +109,7 @@ void bli_xxmv_check obj_t* y ); -void bli_xxr_check +BLIS_EXPORT_BLIS void bli_xxr_check ( obj_t* alpha, obj_t* x, diff --git a/frame/2/bli_l2_fpa.h b/frame/2/bli_l2_fpa.h index 414bd82c2..c22e040e9 100644 --- a/frame/2/bli_l2_fpa.h +++ b/frame/2/bli_l2_fpa.h @@ -40,7 +40,7 @@ #define GENPROT( opname ) \ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) \ -PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); +BLIS_EXPORT_BLIS PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); GENPROT( gemv ) GENPROT( ger ) @@ -61,7 +61,7 @@ GENPROT( trsv ) #define GENPROT( opname, varname ) \ \ PASTECH2(opname,_unb,_vft) \ -PASTEMAC(varname,_qfp)( num_t dt ); +BLIS_EXPORT_BLIS PASTEMAC(varname,_qfp)( num_t dt ); GENPROT( gemv, gemv_unb_var1 ) GENPROT( gemv, gemv_unb_var2 ) diff --git a/frame/2/bli_l2_oapi.c b/frame/2/bli_l2_oapi.c index 25acb4207..6d4d14170 100644 --- a/frame/2/bli_l2_oapi.c +++ b/frame/2/bli_l2_oapi.c @@ -43,7 +43,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -116,7 +116,7 @@ GENFRONT( gemv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -182,7 +182,7 @@ GENFRONT( ger ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -256,7 +256,7 @@ GENFRONT( symv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -317,7 +317,7 @@ GENFRONT( syr ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -384,7 +384,7 @@ GENFRONT( syr2 ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ diff --git a/frame/2/bli_l2_oapi.h b/frame/2/bli_l2_oapi.h index eb0f47249..6b6a1d77e 100644 --- a/frame/2/bli_l2_oapi.h +++ b/frame/2/bli_l2_oapi.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -58,7 +58,7 @@ GENPROT( symv ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -75,7 +75,7 @@ GENPROT( syr2 ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -90,7 +90,7 @@ GENPROT( syr ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ diff --git a/frame/2/bli_l2_tapi.c b/frame/2/bli_l2_tapi.c index f6eb6c7d9..6b7f5cd12 100644 --- a/frame/2/bli_l2_tapi.c +++ b/frame/2/bli_l2_tapi.c @@ -43,7 +43,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, ftname, rvarname, cvarname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ trans_t transa, \ conj_t conjx, \ @@ -126,7 +126,7 @@ INSERT_GENTFUNC_BASIC3( gemv, gemv, gemv_unf_var1, gemv_unf_var2 ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, ftname, rvarname, cvarname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -178,7 +178,7 @@ INSERT_GENTFUNC_BASIC3( ger, ger, ger_unb_var1, ger_unb_var2 ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, ftname, conjh, rvarname, cvarname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ conj_t conja, \ @@ -255,7 +255,7 @@ INSERT_GENTFUNC_BASIC4( symv, hemv, BLIS_NO_CONJUGATE, hemv_unf_var1, hemv_unf_v #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname, ftname, conjh, rvarname, cvarname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ conj_t conjx, \ @@ -319,7 +319,7 @@ INSERT_GENTFUNCR_BASIC4( her, her, BLIS_CONJUGATE, her_unb_var1, her_unb_var2 ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, ftname, conjh, rvarname, cvarname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ conj_t conjx, \ @@ -376,7 +376,7 @@ INSERT_GENTFUNC_BASIC4( syr, her, BLIS_NO_CONJUGATE, her_unb_var1, her_unb_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, ftname, conjh, rvarname, cvarname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ conj_t conjx, \ @@ -438,7 +438,7 @@ INSERT_GENTFUNC_BASIC4( syr2, her2, BLIS_NO_CONJUGATE, her2_unf_var1, her2_unf_v #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, ftname, rvarname, cvarname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/bli_l2_tapi.h b/frame/2/bli_l2_tapi.h index b66ccfb7a..4b45236e2 100644 --- a/frame/2/bli_l2_tapi.h +++ b/frame/2/bli_l2_tapi.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ trans_t transa, \ conj_t conjx, \ @@ -60,7 +60,7 @@ INSERT_GENTPROT_BASIC0( gemv ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -79,7 +79,7 @@ INSERT_GENTPROT_BASIC0( ger ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ conj_t conja, \ @@ -100,7 +100,7 @@ INSERT_GENTPROT_BASIC0( symv ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ conj_t conjx, \ @@ -117,7 +117,7 @@ INSERT_GENTPROTR_BASIC0( her ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ conj_t conjx, \ @@ -134,7 +134,7 @@ INSERT_GENTPROT_BASIC0( syr ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ conj_t conjx, \ @@ -154,7 +154,7 @@ INSERT_GENTPROT_BASIC0( syr2 ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/gemv/bli_gemv_unb_var1.c b/frame/2/gemv/bli_gemv_unb_var1.c index 3f5681d2b..e3d5de14c 100644 --- a/frame/2/gemv/bli_gemv_unb_var1.c +++ b/frame/2/gemv/bli_gemv_unb_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ trans_t transa, \ conj_t conjx, \ diff --git a/frame/2/gemv/bli_gemv_unb_var2.c b/frame/2/gemv/bli_gemv_unb_var2.c index 8166aa417..4bdad7ab2 100644 --- a/frame/2/gemv/bli_gemv_unb_var2.c +++ b/frame/2/gemv/bli_gemv_unb_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ trans_t transa, \ conj_t conjx, \ diff --git a/frame/2/gemv/bli_gemv_unf_var1.c b/frame/2/gemv/bli_gemv_unf_var1.c index e392e830e..65e00f32f 100644 --- a/frame/2/gemv/bli_gemv_unf_var1.c +++ b/frame/2/gemv/bli_gemv_unf_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ trans_t transa, \ conj_t conjx, \ diff --git a/frame/2/gemv/bli_gemv_unf_var2.c b/frame/2/gemv/bli_gemv_unf_var2.c index fe7702e4c..729826220 100644 --- a/frame/2/gemv/bli_gemv_unf_var2.c +++ b/frame/2/gemv/bli_gemv_unf_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ trans_t transa, \ conj_t conjx, \ diff --git a/frame/2/gemv/bli_gemv_var.h b/frame/2/gemv/bli_gemv_var.h index 2102c1d0b..b19e3ddf2 100644 --- a/frame/2/gemv/bli_gemv_var.h +++ b/frame/2/gemv/bli_gemv_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -68,7 +68,7 @@ GENPROT( gemv_unf_var2 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ trans_t transa, \ conj_t conjx, \ diff --git a/frame/2/gemv/bli_gemv_var_oapi.c b/frame/2/gemv/bli_gemv_var_oapi.c index 2e746b417..d137d21b0 100644 --- a/frame/2/gemv/bli_gemv_var_oapi.c +++ b/frame/2/gemv/bli_gemv_var_oapi.c @@ -37,7 +37,7 @@ #undef GENFRONT #define GENFRONT( opname, varname ) \ \ -void PASTEMAC0(varname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(varname) \ ( \ obj_t* alpha, \ obj_t* a, \ diff --git a/frame/2/gemv/bli_gemv_var_oapi.c.prev b/frame/2/gemv/bli_gemv_var_oapi.c.prev index 595508d0f..c62979732 100644 --- a/frame/2/gemv/bli_gemv_var_oapi.c.prev +++ b/frame/2/gemv/bli_gemv_var_oapi.c.prev @@ -40,7 +40,7 @@ /*static gemv_vft GENARRAY(ftypes,gemv_unb_var1);*/ \ static GENARRAY_VFP(ftname,opname); \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* alpha, \ obj_t* a, \ diff --git a/frame/2/gemv/other/bli_gemv_cntl.h b/frame/2/gemv/other/bli_gemv_cntl.h index f505e8997..848c99442 100644 --- a/frame/2/gemv/other/bli_gemv_cntl.h +++ b/frame/2/gemv/other/bli_gemv_cntl.h @@ -54,9 +54,9 @@ typedef struct gemv_s gemv_t; #define bli_cntl_sub_gemv_t_rp( cntl ) cntl->sub_gemv_t_rp #define bli_cntl_sub_gemv_t_cp( cntl ) cntl->sub_gemv_t_cp -void bli_gemv_cntl_init( void ); -void bli_gemv_cntl_finalize( void ); -gemv_t* bli_gemv_cntl_obj_create( impl_t impl_type, +BLIS_EXPORT_BLIS void bli_gemv_cntl_init( void ); +BLIS_EXPORT_BLIS void bli_gemv_cntl_finalize( void ); +BLIS_EXPORT_BLIS gemv_t* bli_gemv_cntl_obj_create( impl_t impl_type, varnum_t var_num, bszid_t bszid, scalv_t* sub_scalv, @@ -65,7 +65,7 @@ gemv_t* bli_gemv_cntl_obj_create( impl_t impl_type, packv_t* sub_packv_y, gemv_t* sub_gemv, unpackv_t* sub_unpackv_y ); -void bli_gemv_cntl_obj_init( gemv_t* cntl, +BLIS_EXPORT_BLIS void bli_gemv_cntl_obj_init( gemv_t* cntl, impl_t impl_type, varnum_t var_num, bszid_t bszid, diff --git a/frame/2/gemv/other/bli_gemv_front.c b/frame/2/gemv/other/bli_gemv_front.c index 3fd1c8cf7..a7f24610c 100644 --- a/frame/2/gemv/other/bli_gemv_front.c +++ b/frame/2/gemv/other/bli_gemv_front.c @@ -165,7 +165,7 @@ void bli_gemv_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ trans_t transa, \ conj_t conjx, \ diff --git a/frame/2/gemv/other/bli_gemv_front.h b/frame/2/gemv/other/bli_gemv_front.h index 5ffb1aedf..4c8677bdc 100644 --- a/frame/2/gemv/other/bli_gemv_front.h +++ b/frame/2/gemv/other/bli_gemv_front.h @@ -32,7 +32,7 @@ */ -void bli_gemv_front +BLIS_EXPORT_BLIS void bli_gemv_front ( obj_t* alpha, obj_t* a, @@ -45,7 +45,7 @@ void bli_gemv_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ trans_t transa, \ conj_t conjx, \ diff --git a/frame/2/gemv/other/bli_gemv_int.h b/frame/2/gemv/other/bli_gemv_int.h index 478fe5fb7..33ab520a7 100644 --- a/frame/2/gemv/other/bli_gemv_int.h +++ b/frame/2/gemv/other/bli_gemv_int.h @@ -32,7 +32,7 @@ */ -void bli_gemv_int +BLIS_EXPORT_BLIS void bli_gemv_int ( trans_t transa, conj_t conjx, diff --git a/frame/2/ger/bli_ger_unb_var1.c b/frame/2/ger/bli_ger_unb_var1.c index d6cda277e..d2af2a1b9 100644 --- a/frame/2/ger/bli_ger_unb_var1.c +++ b/frame/2/ger/bli_ger_unb_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ conj_t conjx, \ conj_t conjy, \ diff --git a/frame/2/ger/bli_ger_unb_var2.c b/frame/2/ger/bli_ger_unb_var2.c index 1590bfe5e..ed0ab0305 100644 --- a/frame/2/ger/bli_ger_unb_var2.c +++ b/frame/2/ger/bli_ger_unb_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ conj_t conjx, \ conj_t conjy, \ diff --git a/frame/2/ger/bli_ger_var.h b/frame/2/ger/bli_ger_var.h index a19bac08c..0e0abff94 100644 --- a/frame/2/ger/bli_ger_var.h +++ b/frame/2/ger/bli_ger_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -64,7 +64,7 @@ GENPROT( ger_unb_var2 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ conj_t conjx, \ conj_t conjy, \ diff --git a/frame/2/ger/bli_ger_var_oapi.c b/frame/2/ger/bli_ger_var_oapi.c index 3fd95e89f..41e83fdaf 100644 --- a/frame/2/ger/bli_ger_var_oapi.c +++ b/frame/2/ger/bli_ger_var_oapi.c @@ -37,7 +37,7 @@ #undef GENFRONT #define GENFRONT( opname, varname ) \ \ -void PASTEMAC0(varname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(varname) \ ( \ obj_t* alpha, \ obj_t* x, \ diff --git a/frame/2/ger/other/bli_ger_cntl.h b/frame/2/ger/other/bli_ger_cntl.h index b7b460177..f1425c680 100644 --- a/frame/2/ger/other/bli_ger_cntl.h +++ b/frame/2/ger/other/bli_ger_cntl.h @@ -49,9 +49,9 @@ typedef struct ger_s ger_t; #define bli_cntl_sub_ger_rp( cntl ) cntl->sub_ger_rp #define bli_cntl_sub_ger_cp( cntl ) cntl->sub_ger_cp -void bli_ger_cntl_init( void ); -void bli_ger_cntl_finalize( void ); -ger_t* bli_ger_cntl_obj_create( impl_t impl_type, +BLIS_EXPORT_BLIS void bli_ger_cntl_init( void ); +BLIS_EXPORT_BLIS void bli_ger_cntl_finalize( void ); +BLIS_EXPORT_BLIS ger_t* bli_ger_cntl_obj_create( impl_t impl_type, varnum_t var_num, bszid_t bszid, packv_t* sub_packv_x, @@ -59,7 +59,7 @@ ger_t* bli_ger_cntl_obj_create( impl_t impl_type, packm_t* sub_packm_a, ger_t* sub_ger, unpackm_t* sub_unpackm_a ); -void bli_ger_cntl_obj_init( ger_t* cntl, +BLIS_EXPORT_BLIS void bli_ger_cntl_obj_init( ger_t* cntl, impl_t impl_type, varnum_t var_num, bszid_t bszid, diff --git a/frame/2/ger/other/bli_ger_front.c b/frame/2/ger/other/bli_ger_front.c index 8f641fe2e..8ec5549b8 100644 --- a/frame/2/ger/other/bli_ger_front.c +++ b/frame/2/ger/other/bli_ger_front.c @@ -129,7 +129,7 @@ void bli_ger_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ conj_t conjy, \ diff --git a/frame/2/ger/other/bli_ger_front.h b/frame/2/ger/other/bli_ger_front.h index 5547b13d1..0f45417c2 100644 --- a/frame/2/ger/other/bli_ger_front.h +++ b/frame/2/ger/other/bli_ger_front.h @@ -32,7 +32,7 @@ */ -void bli_ger_front +BLIS_EXPORT_BLIS void bli_ger_front ( obj_t* alpha, obj_t* x, @@ -44,7 +44,7 @@ void bli_ger_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ conj_t conjy, \ diff --git a/frame/2/ger/other/bli_ger_int.h b/frame/2/ger/other/bli_ger_int.h index 7cec64b6d..42cd91f96 100644 --- a/frame/2/ger/other/bli_ger_int.h +++ b/frame/2/ger/other/bli_ger_int.h @@ -32,7 +32,7 @@ */ -void bli_ger_int( conj_t conjx, +BLIS_EXPORT_BLIS void bli_ger_int( conj_t conjx, conj_t conjy, obj_t* alpha, obj_t* x, diff --git a/frame/2/hemv/bli_hemv_unb_var1.c b/frame/2/hemv/bli_hemv_unb_var1.c index ea5d478be..dd6eebb76 100644 --- a/frame/2/hemv/bli_hemv_unb_var1.c +++ b/frame/2/hemv/bli_hemv_unb_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_unb_var2.c b/frame/2/hemv/bli_hemv_unb_var2.c index 1f7346517..d75b05394 100644 --- a/frame/2/hemv/bli_hemv_unb_var2.c +++ b/frame/2/hemv/bli_hemv_unb_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_unb_var3.c b/frame/2/hemv/bli_hemv_unb_var3.c index 6573e59fc..c2797faf4 100644 --- a/frame/2/hemv/bli_hemv_unb_var3.c +++ b/frame/2/hemv/bli_hemv_unb_var3.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_unb_var4.c b/frame/2/hemv/bli_hemv_unb_var4.c index deabc3ab4..2b46b83e0 100644 --- a/frame/2/hemv/bli_hemv_unb_var4.c +++ b/frame/2/hemv/bli_hemv_unb_var4.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_unf_var1.c b/frame/2/hemv/bli_hemv_unf_var1.c index d36dc0098..f95699068 100644 --- a/frame/2/hemv/bli_hemv_unf_var1.c +++ b/frame/2/hemv/bli_hemv_unf_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_unf_var1a.c b/frame/2/hemv/bli_hemv_unf_var1a.c index 31ab1515f..b99f17bd1 100644 --- a/frame/2/hemv/bli_hemv_unf_var1a.c +++ b/frame/2/hemv/bli_hemv_unf_var1a.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_unf_var3.c b/frame/2/hemv/bli_hemv_unf_var3.c index d8db9bc78..a1b2e984b 100644 --- a/frame/2/hemv/bli_hemv_unf_var3.c +++ b/frame/2/hemv/bli_hemv_unf_var3.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_unf_var3a.c b/frame/2/hemv/bli_hemv_unf_var3a.c index 54ab0f6ce..b2bd018d5 100644 --- a/frame/2/hemv/bli_hemv_unf_var3a.c +++ b/frame/2/hemv/bli_hemv_unf_var3a.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_var.h b/frame/2/hemv/bli_hemv_var.h index a591f1afe..629af9620 100644 --- a/frame/2/hemv/bli_hemv_var.h +++ b/frame/2/hemv/bli_hemv_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ conj_t conjh, \ obj_t* alpha, \ @@ -75,7 +75,7 @@ GENPROT( hemv_unf_var3a ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_var_oapi.c b/frame/2/hemv/bli_hemv_var_oapi.c index 845f288c3..8d70f8ab1 100644 --- a/frame/2/hemv/bli_hemv_var_oapi.c +++ b/frame/2/hemv/bli_hemv_var_oapi.c @@ -37,7 +37,7 @@ #undef GENFRONT #define GENFRONT( opname, varname ) \ \ -void PASTEMAC0(varname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(varname) \ ( \ conj_t conjh, \ obj_t* alpha, \ diff --git a/frame/2/hemv/other/bli_hemv_cntl.h b/frame/2/hemv/other/bli_hemv_cntl.h index fba7b19b4..3a8d17d26 100644 --- a/frame/2/hemv/other/bli_hemv_cntl.h +++ b/frame/2/hemv/other/bli_hemv_cntl.h @@ -52,9 +52,9 @@ typedef struct hemv_s hemv_t; #define bli_cntl_sub_hemv( cntl ) cntl->sub_hemv -void bli_hemv_cntl_init( void ); -void bli_hemv_cntl_finalize( void ); -hemv_t* bli_hemv_cntl_obj_create( impl_t impl_type, +BLIS_EXPORT_BLIS void bli_hemv_cntl_init( void ); +BLIS_EXPORT_BLIS void bli_hemv_cntl_finalize( void ); +BLIS_EXPORT_BLIS hemv_t* bli_hemv_cntl_obj_create( impl_t impl_type, varnum_t var_num, bszid_t bszid, scalv_t* sub_scalv, @@ -67,7 +67,7 @@ hemv_t* bli_hemv_cntl_obj_create( impl_t impl_type, gemv_t* sub_gemv_t_cp, hemv_t* sub_hemv, unpackv_t* sub_unpackv_y1 ); -void bli_hemv_cntl_obj_init( hemv_t* cntl, +BLIS_EXPORT_BLIS void bli_hemv_cntl_obj_init( hemv_t* cntl, impl_t impl_type, varnum_t var_num, bszid_t bszid, diff --git a/frame/2/hemv/other/bli_hemv_front.c b/frame/2/hemv/other/bli_hemv_front.c index 1293f6b8e..149d8d6db 100644 --- a/frame/2/hemv/other/bli_hemv_front.c +++ b/frame/2/hemv/other/bli_hemv_front.c @@ -162,7 +162,7 @@ void bli_hemv_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploa, \ conj_t conja, \ diff --git a/frame/2/hemv/other/bli_hemv_front.h b/frame/2/hemv/other/bli_hemv_front.h index 5e467be2e..1f111e06e 100644 --- a/frame/2/hemv/other/bli_hemv_front.h +++ b/frame/2/hemv/other/bli_hemv_front.h @@ -33,7 +33,7 @@ */ -void bli_hemv_front +BLIS_EXPORT_BLIS void bli_hemv_front ( obj_t* alpha, obj_t* a, @@ -50,7 +50,7 @@ void bli_hemv_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploa, \ conj_t conja, \ diff --git a/frame/2/hemv/other/bli_hemv_int.h b/frame/2/hemv/other/bli_hemv_int.h index 33c1c2a3f..8576fa406 100644 --- a/frame/2/hemv/other/bli_hemv_int.h +++ b/frame/2/hemv/other/bli_hemv_int.h @@ -32,7 +32,7 @@ */ -void bli_hemv_int( conj_t conjh, +BLIS_EXPORT_BLIS void bli_hemv_int( conj_t conjh, obj_t* alpha, obj_t* a, obj_t* x, diff --git a/frame/2/her/bli_her_unb_var1.c b/frame/2/her/bli_her_unb_var1.c index e7f718680..cdfd116ac 100644 --- a/frame/2/her/bli_her_unb_var1.c +++ b/frame/2/her/bli_her_unb_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her/bli_her_unb_var2.c b/frame/2/her/bli_her_unb_var2.c index 4b39e1df0..90d6051dd 100644 --- a/frame/2/her/bli_her_unb_var2.c +++ b/frame/2/her/bli_her_unb_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her/bli_her_var.h b/frame/2/her/bli_her_var.h index f7f02baac..b6634578f 100644 --- a/frame/2/her/bli_her_var.h +++ b/frame/2/her/bli_her_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ conj_t conjh, \ obj_t* alpha, \ @@ -64,7 +64,7 @@ GENPROT( her_unb_var2 ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her/bli_her_var_oapi.c b/frame/2/her/bli_her_var_oapi.c index ffca2e71e..d063f368b 100644 --- a/frame/2/her/bli_her_var_oapi.c +++ b/frame/2/her/bli_her_var_oapi.c @@ -37,7 +37,7 @@ #undef GENFRONT #define GENFRONT( opname, varname ) \ \ -void PASTEMAC0(varname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(varname) \ ( \ conj_t conjh, \ obj_t* alpha, \ diff --git a/frame/2/her/other/bli_her_cntl.h b/frame/2/her/other/bli_her_cntl.h index 280492b29..311f2fa49 100644 --- a/frame/2/her/other/bli_her_cntl.h +++ b/frame/2/her/other/bli_her_cntl.h @@ -47,9 +47,9 @@ typedef struct her_s her_t; #define bli_cntl_sub_her( cntl ) cntl->sub_her -void bli_her_cntl_init( void ); -void bli_her_cntl_finalize( void ); -her_t* bli_her_cntl_obj_create( impl_t impl_type, +BLIS_EXPORT_BLIS void bli_her_cntl_init( void ); +BLIS_EXPORT_BLIS void bli_her_cntl_finalize( void ); +BLIS_EXPORT_BLIS her_t* bli_her_cntl_obj_create( impl_t impl_type, varnum_t var_num, bszid_t bszid, packv_t* sub_packv_x1, @@ -57,7 +57,7 @@ her_t* bli_her_cntl_obj_create( impl_t impl_type, ger_t* sub_ger, her_t* sub_her, unpackm_t* sub_unpackm_c11 ); -void bli_her_cntl_obj_init( her_t* cntl, +BLIS_EXPORT_BLIS void bli_her_cntl_obj_init( her_t* cntl, impl_t impl_type, varnum_t var_num, bszid_t bszid, diff --git a/frame/2/her/other/bli_her_front.c b/frame/2/her/other/bli_her_front.c index 7753b28cf..7f1a5dce6 100644 --- a/frame/2/her/other/bli_her_front.c +++ b/frame/2/her/other/bli_her_front.c @@ -137,7 +137,7 @@ void bli_her_front #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ conj_t conjx, \ diff --git a/frame/2/her/other/bli_her_front.h b/frame/2/her/other/bli_her_front.h index 99a0b43b8..3ae9a9d50 100644 --- a/frame/2/her/other/bli_her_front.h +++ b/frame/2/her/other/bli_her_front.h @@ -32,7 +32,7 @@ */ -void bli_her_front +BLIS_EXPORT_BLIS void bli_her_front ( obj_t* alpha, obj_t* x, @@ -43,7 +43,7 @@ void bli_her_front #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ conj_t conjx, \ diff --git a/frame/2/her/other/bli_her_int.h b/frame/2/her/other/bli_her_int.h index fc1b2c677..bd2d6bd78 100644 --- a/frame/2/her/other/bli_her_int.h +++ b/frame/2/her/other/bli_her_int.h @@ -32,7 +32,7 @@ */ -void bli_her_int( conj_t conjh, +BLIS_EXPORT_BLIS void bli_her_int( conj_t conjh, obj_t* alpha, obj_t* x, obj_t* c, diff --git a/frame/2/her2/bli_her2_unb_var1.c b/frame/2/her2/bli_her2_unb_var1.c index 37423bfcb..fdd06f26d 100644 --- a/frame/2/her2/bli_her2_unb_var1.c +++ b/frame/2/her2/bli_her2_unb_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her2/bli_her2_unb_var2.c b/frame/2/her2/bli_her2_unb_var2.c index 22d6de07a..fa274f1ca 100644 --- a/frame/2/her2/bli_her2_unb_var2.c +++ b/frame/2/her2/bli_her2_unb_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her2/bli_her2_unb_var3.c b/frame/2/her2/bli_her2_unb_var3.c index 297b9b702..d176fb2af 100644 --- a/frame/2/her2/bli_her2_unb_var3.c +++ b/frame/2/her2/bli_her2_unb_var3.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her2/bli_her2_unb_var4.c b/frame/2/her2/bli_her2_unb_var4.c index 58adb0e70..0ebeef77c 100644 --- a/frame/2/her2/bli_her2_unb_var4.c +++ b/frame/2/her2/bli_her2_unb_var4.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her2/bli_her2_unf_var1.c b/frame/2/her2/bli_her2_unf_var1.c index a0aec48f7..3abc1b316 100644 --- a/frame/2/her2/bli_her2_unf_var1.c +++ b/frame/2/her2/bli_her2_unf_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her2/bli_her2_unf_var4.c b/frame/2/her2/bli_her2_unf_var4.c index 3dea31d53..799f3485f 100644 --- a/frame/2/her2/bli_her2_unf_var4.c +++ b/frame/2/her2/bli_her2_unf_var4.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her2/bli_her2_var.h b/frame/2/her2/bli_her2_var.h index 99672f68c..3055a23c8 100644 --- a/frame/2/her2/bli_her2_var.h +++ b/frame/2/her2/bli_her2_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ conj_t conjh, \ obj_t* alpha, \ @@ -73,7 +73,7 @@ GENPROT( her2_unf_var4 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her2/bli_her2_var_oapi.c b/frame/2/her2/bli_her2_var_oapi.c index 2b26e5476..22e05744e 100644 --- a/frame/2/her2/bli_her2_var_oapi.c +++ b/frame/2/her2/bli_her2_var_oapi.c @@ -37,7 +37,7 @@ #undef GENFRONT #define GENFRONT( opname, varname ) \ \ -void PASTEMAC0(varname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(varname) \ ( \ conj_t conjh, \ obj_t* alpha, \ diff --git a/frame/2/her2/other/bli_her2_cntl.h b/frame/2/her2/other/bli_her2_cntl.h index 4eca63af0..ab8cfc8de 100644 --- a/frame/2/her2/other/bli_her2_cntl.h +++ b/frame/2/her2/other/bli_her2_cntl.h @@ -49,8 +49,8 @@ typedef struct her2_s her2_t; #define bli_cntl_sub_her2( cntl ) cntl->sub_her2 -void bli_her2_cntl_init( void ); -void bli_her2_cntl_finalize( void ); +BLIS_EXPORT_BLIS void bli_her2_cntl_init( void ); +BLIS_EXPORT_BLIS void bli_her2_cntl_finalize( void ); her2_t* bli_her2_cntl_obj_create( impl_t impl_type, varnum_t var_num, bszid_t bszid, @@ -61,7 +61,7 @@ her2_t* bli_her2_cntl_obj_create( impl_t impl_type, ger_t* sub_ger_cp, her2_t* sub_her2, unpackm_t* sub_unpackm_c11 ); -void bli_her2_cntl_obj_init( her2_t* cntl, +BLIS_EXPORT_BLIS void bli_her2_cntl_obj_init( her2_t* cntl, impl_t impl_type, varnum_t var_num, bszid_t bszid, diff --git a/frame/2/her2/other/bli_her2_front.c b/frame/2/her2/other/bli_her2_front.c index 21c9027b5..65bb2ab55 100644 --- a/frame/2/her2/other/bli_her2_front.c +++ b/frame/2/her2/other/bli_her2_front.c @@ -154,7 +154,7 @@ void bli_her2_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ conj_t conjx, \ diff --git a/frame/2/her2/other/bli_her2_front.h b/frame/2/her2/other/bli_her2_front.h index d5a0e3950..15df4151d 100644 --- a/frame/2/her2/other/bli_her2_front.h +++ b/frame/2/her2/other/bli_her2_front.h @@ -32,7 +32,7 @@ */ -void bli_her2_front +BLIS_EXPORT_BLIS void bli_her2_front ( obj_t* alpha, obj_t* x, @@ -44,7 +44,7 @@ void bli_her2_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ conj_t conjx, \ diff --git a/frame/2/her2/other/bli_her2_int.h b/frame/2/her2/other/bli_her2_int.h index d15c6221c..b3eb1566d 100644 --- a/frame/2/her2/other/bli_her2_int.h +++ b/frame/2/her2/other/bli_her2_int.h @@ -32,7 +32,7 @@ */ -void bli_her2_int( conj_t conjh, +BLIS_EXPORT_BLIS void bli_her2_int( conj_t conjh, obj_t* alpha, obj_t* alpha_conj, obj_t* x, diff --git a/frame/2/symv/other/bli_symv_front.c b/frame/2/symv/other/bli_symv_front.c index bac3f2243..ffce1bac5 100644 --- a/frame/2/symv/other/bli_symv_front.c +++ b/frame/2/symv/other/bli_symv_front.c @@ -163,7 +163,7 @@ void bli_symv_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploa, \ conj_t conja, \ diff --git a/frame/2/symv/other/bli_symv_front.h b/frame/2/symv/other/bli_symv_front.h index 40b5c0b2a..d8c5ff4be 100644 --- a/frame/2/symv/other/bli_symv_front.h +++ b/frame/2/symv/other/bli_symv_front.h @@ -33,7 +33,7 @@ */ -void bli_symv_front +BLIS_EXPORT_BLIS void bli_symv_front ( obj_t* alpha, obj_t* a, @@ -46,7 +46,7 @@ void bli_symv_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploa, \ conj_t conja, \ diff --git a/frame/2/syr/other/bli_syr_front.c b/frame/2/syr/other/bli_syr_front.c index efbd24cf8..93ac6e6e9 100644 --- a/frame/2/syr/other/bli_syr_front.c +++ b/frame/2/syr/other/bli_syr_front.c @@ -139,7 +139,7 @@ void bli_syr_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ conj_t conjx, \ diff --git a/frame/2/syr/other/bli_syr_front.h b/frame/2/syr/other/bli_syr_front.h index a0ac22415..344e39181 100644 --- a/frame/2/syr/other/bli_syr_front.h +++ b/frame/2/syr/other/bli_syr_front.h @@ -32,7 +32,7 @@ */ -void bli_syr_front +BLIS_EXPORT_BLIS void bli_syr_front ( obj_t* alpha, obj_t* x, @@ -43,7 +43,7 @@ void bli_syr_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ conj_t conjx, \ diff --git a/frame/2/syr2/other/bli_syr2_front.c b/frame/2/syr2/other/bli_syr2_front.c index 59a36f478..547ff3f06 100644 --- a/frame/2/syr2/other/bli_syr2_front.c +++ b/frame/2/syr2/other/bli_syr2_front.c @@ -147,7 +147,7 @@ void bli_syr2_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ conj_t conjx, \ diff --git a/frame/2/syr2/other/bli_syr2_front.h b/frame/2/syr2/other/bli_syr2_front.h index bb164731e..44846643f 100644 --- a/frame/2/syr2/other/bli_syr2_front.h +++ b/frame/2/syr2/other/bli_syr2_front.h @@ -32,7 +32,7 @@ */ -void bli_syr2_front +BLIS_EXPORT_BLIS void bli_syr2_front ( obj_t* alpha, obj_t* x, @@ -44,7 +44,7 @@ void bli_syr2_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ conj_t conjx, \ diff --git a/frame/2/trmv/bli_trmv_unb_var1.c b/frame/2/trmv/bli_trmv_unb_var1.c index 31bfa6a83..e1b8711b5 100644 --- a/frame/2/trmv/bli_trmv_unb_var1.c +++ b/frame/2/trmv/bli_trmv_unb_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trmv/bli_trmv_unb_var2.c b/frame/2/trmv/bli_trmv_unb_var2.c index 00d4d95f3..f6ab264a0 100644 --- a/frame/2/trmv/bli_trmv_unb_var2.c +++ b/frame/2/trmv/bli_trmv_unb_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trmv/bli_trmv_unf_var1.c b/frame/2/trmv/bli_trmv_unf_var1.c index 6dc3cea36..032856dfe 100644 --- a/frame/2/trmv/bli_trmv_unf_var1.c +++ b/frame/2/trmv/bli_trmv_unf_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trmv/bli_trmv_unf_var2.c b/frame/2/trmv/bli_trmv_unf_var2.c index 8bbd51820..81ad30769 100644 --- a/frame/2/trmv/bli_trmv_unf_var2.c +++ b/frame/2/trmv/bli_trmv_unf_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trmv/bli_trmv_var.h b/frame/2/trmv/bli_trmv_var.h index 5a36a656d..fbe51af0b 100644 --- a/frame/2/trmv/bli_trmv_var.h +++ b/frame/2/trmv/bli_trmv_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -68,7 +68,7 @@ GENPROT( trmv_unf_var2 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trmv/bli_trmv_var_oapi.c b/frame/2/trmv/bli_trmv_var_oapi.c index 931eb2abb..38c5becb1 100644 --- a/frame/2/trmv/bli_trmv_var_oapi.c +++ b/frame/2/trmv/bli_trmv_var_oapi.c @@ -37,7 +37,7 @@ #undef GENFRONT #define GENFRONT( opname, varname ) \ \ -void PASTEMAC0(varname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(varname) \ ( \ obj_t* alpha, \ obj_t* a, \ diff --git a/frame/2/trmv/other/bli_trmv_cntl.h b/frame/2/trmv/other/bli_trmv_cntl.h index 2474f5f6d..e268523b7 100644 --- a/frame/2/trmv/other/bli_trmv_cntl.h +++ b/frame/2/trmv/other/bli_trmv_cntl.h @@ -48,9 +48,9 @@ typedef struct trmv_s trmv_t; #define bli_cntl_sub_trmv( cntl ) cntl->sub_trmv -void bli_trmv_cntl_init( void ); -void bli_trmv_cntl_finalize( void ); -trmv_t* bli_trmv_cntl_obj_create( impl_t impl_type, +BLIS_EXPORT_BLIS void bli_trmv_cntl_init( void ); +BLIS_EXPORT_BLIS void bli_trmv_cntl_finalize( void ); +BLIS_EXPORT_BLIS trmv_t* bli_trmv_cntl_obj_create( impl_t impl_type, varnum_t var_num, bszid_t bszid, packm_t* sub_packm_a11, @@ -59,7 +59,7 @@ trmv_t* bli_trmv_cntl_obj_create( impl_t impl_type, gemv_t* sub_gemv_cp, trmv_t* sub_trmv, unpackv_t* sub_unpackv_x1 ); -void bli_trmv_cntl_obj_init( trmv_t* cntl, +BLIS_EXPORT_BLIS void bli_trmv_cntl_obj_init( trmv_t* cntl, impl_t impl_type, varnum_t var_num, bszid_t bszid, diff --git a/frame/2/trmv/other/bli_trmv_front.c b/frame/2/trmv/other/bli_trmv_front.c index 698f48710..0b361b8a2 100644 --- a/frame/2/trmv/other/bli_trmv_front.c +++ b/frame/2/trmv/other/bli_trmv_front.c @@ -137,7 +137,7 @@ void bli_trmv_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trmv/other/bli_trmv_front.h b/frame/2/trmv/other/bli_trmv_front.h index daf54ca9b..170c6a2d9 100644 --- a/frame/2/trmv/other/bli_trmv_front.h +++ b/frame/2/trmv/other/bli_trmv_front.h @@ -32,7 +32,7 @@ */ -void bli_trmv_front +BLIS_EXPORT_BLIS void bli_trmv_front ( obj_t* alpha, obj_t* a, @@ -43,7 +43,7 @@ void bli_trmv_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trmv/other/bli_trmv_int.h b/frame/2/trmv/other/bli_trmv_int.h index c956c72d1..a04310ed1 100644 --- a/frame/2/trmv/other/bli_trmv_int.h +++ b/frame/2/trmv/other/bli_trmv_int.h @@ -32,7 +32,7 @@ */ -void bli_trmv_int( obj_t* alpha, +BLIS_EXPORT_BLIS void bli_trmv_int( obj_t* alpha, obj_t* a, obj_t* x, cntx_t* cntx, diff --git a/frame/2/trsv/bli_trsv_unb_var1.c b/frame/2/trsv/bli_trsv_unb_var1.c index c7493e33d..9b24333d3 100644 --- a/frame/2/trsv/bli_trsv_unb_var1.c +++ b/frame/2/trsv/bli_trsv_unb_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trsv/bli_trsv_unb_var2.c b/frame/2/trsv/bli_trsv_unb_var2.c index a78e7eef0..def6d92e0 100644 --- a/frame/2/trsv/bli_trsv_unb_var2.c +++ b/frame/2/trsv/bli_trsv_unb_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trsv/bli_trsv_unf_var1.c b/frame/2/trsv/bli_trsv_unf_var1.c index 3b03b43e5..df6913bbc 100644 --- a/frame/2/trsv/bli_trsv_unf_var1.c +++ b/frame/2/trsv/bli_trsv_unf_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trsv/bli_trsv_unf_var2.c b/frame/2/trsv/bli_trsv_unf_var2.c index 10741d291..2e9deea47 100644 --- a/frame/2/trsv/bli_trsv_unf_var2.c +++ b/frame/2/trsv/bli_trsv_unf_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trsv/bli_trsv_var.h b/frame/2/trsv/bli_trsv_var.h index 064394355..cc292b724 100644 --- a/frame/2/trsv/bli_trsv_var.h +++ b/frame/2/trsv/bli_trsv_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -68,7 +68,7 @@ GENPROT( trsv_unf_var2 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trsv/bli_trsv_var_oapi.c b/frame/2/trsv/bli_trsv_var_oapi.c index 4cf346acf..3d1670335 100644 --- a/frame/2/trsv/bli_trsv_var_oapi.c +++ b/frame/2/trsv/bli_trsv_var_oapi.c @@ -37,7 +37,7 @@ #undef GENFRONT #define GENFRONT( opname, varname ) \ \ -void PASTEMAC0(varname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(varname) \ ( \ obj_t* alpha, \ obj_t* a, \ diff --git a/frame/2/trsv/other/bli_trsv_cntl.h b/frame/2/trsv/other/bli_trsv_cntl.h index cb53c0fe9..8224cabcd 100644 --- a/frame/2/trsv/other/bli_trsv_cntl.h +++ b/frame/2/trsv/other/bli_trsv_cntl.h @@ -49,9 +49,9 @@ typedef struct trsv_s trsv_t; #define bli_cntl_sub_trsv( cntl ) cntl->sub_trsv -void bli_trsv_cntl_init( void ); -void bli_trsv_cntl_finalize( void ); -trsv_t* bli_trsv_cntl_obj_create( impl_t impl_type, +BLIS_EXPORT_BLIS void bli_trsv_cntl_init( void ); +BLIS_EXPORT_BLIS void bli_trsv_cntl_finalize( void ); +BLIS_EXPORT_BLIS trsv_t* bli_trsv_cntl_obj_create( impl_t impl_type, varnum_t var_num, bszid_t bszid, scalv_t* sub_scalv, @@ -61,7 +61,7 @@ trsv_t* bli_trsv_cntl_obj_create( impl_t impl_type, gemv_t* sub_gemv_cp, trsv_t* sub_trsv, unpackv_t* sub_unpackv_x1 ); -void bli_trsv_cntl_obj_init( trsv_t* cntl, +BLIS_EXPORT_BLIS void bli_trsv_cntl_obj_init( trsv_t* cntl, impl_t impl_type, varnum_t var_num, bszid_t bszid, diff --git a/frame/2/trsv/other/bli_trsv_front.c b/frame/2/trsv/other/bli_trsv_front.c index 90a152e89..478dc94db 100644 --- a/frame/2/trsv/other/bli_trsv_front.c +++ b/frame/2/trsv/other/bli_trsv_front.c @@ -133,7 +133,7 @@ void bli_trsv_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trsv/other/bli_trsv_front.h b/frame/2/trsv/other/bli_trsv_front.h index 21d2f6e3c..0506a60f7 100644 --- a/frame/2/trsv/other/bli_trsv_front.h +++ b/frame/2/trsv/other/bli_trsv_front.h @@ -32,7 +32,7 @@ */ -void bli_trsv_front +BLIS_EXPORT_BLIS void bli_trsv_front ( obj_t* alpha, obj_t* a, @@ -43,7 +43,7 @@ void bli_trsv_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trsv/other/bli_trsv_int.h b/frame/2/trsv/other/bli_trsv_int.h index a7e6003e3..b4fc83583 100644 --- a/frame/2/trsv/other/bli_trsv_int.h +++ b/frame/2/trsv/other/bli_trsv_int.h @@ -32,7 +32,7 @@ */ -void bli_trsv_int( obj_t* alpha, +BLIS_EXPORT_BLIS void bli_trsv_int( obj_t* alpha, obj_t* a, obj_t* x, cntx_t* cntx, diff --git a/frame/3/bli_l3_blocksize.h b/frame/3/bli_l3_blocksize.h index c3301ee13..47a0e5891 100644 --- a/frame/3/bli_l3_blocksize.h +++ b/frame/3/bli_l3_blocksize.h @@ -32,7 +32,7 @@ */ -dim_t bli_l3_determine_kc +BLIS_EXPORT_BLIS dim_t bli_l3_determine_kc ( dir_t direct, dim_t i, @@ -48,7 +48,7 @@ dim_t bli_l3_determine_kc #undef GENPROT #define GENPROT( opname ) \ \ -dim_t PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS dim_t PASTEMAC0(opname) \ ( \ dir_t direct, \ dim_t i, \ @@ -68,7 +68,7 @@ GENPROT( trsm_determine_kc ) #undef GENPROT #define GENPROT( opname ) \ \ -dim_t PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS dim_t PASTEMAC0(opname) \ ( \ dim_t i, \ dim_t dim, \ diff --git a/frame/3/bli_l3_check.h b/frame/3/bli_l3_check.h index 7d30bb184..c572d14a3 100644 --- a/frame/3/bli_l3_check.h +++ b/frame/3/bli_l3_check.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -58,7 +58,7 @@ GENPROT( syr2k ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ side_t side, \ obj_t* alpha, \ @@ -78,7 +78,7 @@ GENPROT( trsm ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -93,7 +93,7 @@ GENPROT( syrk ) // ----------------------------------------------------------------------------- -void bli_gemm_basic_check +BLIS_EXPORT_BLIS void bli_gemm_basic_check ( obj_t* alpha, obj_t* a, @@ -103,7 +103,7 @@ void bli_gemm_basic_check cntx_t* cntx ); -void bli_hemm_basic_check +BLIS_EXPORT_BLIS void bli_hemm_basic_check ( side_t side, obj_t* alpha, @@ -114,7 +114,7 @@ void bli_hemm_basic_check cntx_t* cntx ); -void bli_herk_basic_check +BLIS_EXPORT_BLIS void bli_herk_basic_check ( obj_t* alpha, obj_t* a, @@ -124,7 +124,7 @@ void bli_herk_basic_check cntx_t* cntx ); -void bli_her2k_basic_check +BLIS_EXPORT_BLIS void bli_her2k_basic_check ( obj_t* alpha, obj_t* a, @@ -136,7 +136,7 @@ void bli_her2k_basic_check cntx_t* cntx ); -void bli_l3_basic_check +BLIS_EXPORT_BLIS void bli_l3_basic_check ( obj_t* alpha, obj_t* a, diff --git a/frame/3/bli_l3_cntl.h b/frame/3/bli_l3_cntl.h index c308c8a96..e54c52afc 100644 --- a/frame/3/bli_l3_cntl.h +++ b/frame/3/bli_l3_cntl.h @@ -38,7 +38,7 @@ // Prototype conditional control tree creation functions. // -void bli_l3_cntl_create_if +BLIS_EXPORT_BLIS void bli_l3_cntl_create_if ( opid_t family, pack_t schema_a, @@ -51,7 +51,7 @@ void bli_l3_cntl_create_if cntl_t** cntl_use ); -void bli_l3_cntl_free +BLIS_EXPORT_BLIS void bli_l3_cntl_free ( rntm_t* rntm, cntl_t* cntl_use, diff --git a/frame/3/bli_l3_direct.h b/frame/3/bli_l3_direct.h index 7383c4a9f..5da1fe1b5 100644 --- a/frame/3/bli_l3_direct.h +++ b/frame/3/bli_l3_direct.h @@ -32,7 +32,7 @@ */ -dir_t bli_l3_direct +BLIS_EXPORT_BLIS dir_t bli_l3_direct ( obj_t* a, obj_t* b, @@ -45,7 +45,7 @@ dir_t bli_l3_direct #undef GENPROT #define GENPROT( opname ) \ \ -dir_t PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS dir_t PASTEMAC0(opname) \ ( \ obj_t* a, \ obj_t* b, \ diff --git a/frame/3/bli_l3_oapi.c b/frame/3/bli_l3_oapi.c index d9ba27369..5792638ef 100644 --- a/frame/3/bli_l3_oapi.c +++ b/frame/3/bli_l3_oapi.c @@ -43,7 +43,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -88,7 +88,7 @@ GENFRONT( syr2k ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ side_t side, \ obj_t* alpha, \ @@ -132,7 +132,7 @@ GENFRONT( trmm3 ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -172,7 +172,7 @@ GENFRONT( syrk ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ side_t side, \ obj_t* alpha, \ diff --git a/frame/3/bli_l3_oapi.h b/frame/3/bli_l3_oapi.h index 2f0af81b2..4f9f20608 100644 --- a/frame/3/bli_l3_oapi.h +++ b/frame/3/bli_l3_oapi.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -58,7 +58,7 @@ GENPROT( syr2k ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ side_t side, \ obj_t* alpha, \ @@ -77,7 +77,7 @@ GENPROT( trmm3 ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -93,7 +93,7 @@ GENPROT( syrk ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ side_t side, \ obj_t* alpha, \ diff --git a/frame/3/bli_l3_packm.h b/frame/3/bli_l3_packm.h index 696dabf59..24537e2dc 100644 --- a/frame/3/bli_l3_packm.h +++ b/frame/3/bli_l3_packm.h @@ -33,7 +33,7 @@ */ -void bli_l3_packm +BLIS_EXPORT_BLIS void bli_l3_packm ( obj_t* x, obj_t* x_pack, diff --git a/frame/3/bli_l3_prune.c b/frame/3/bli_l3_prune.c index fa008fd15..02f6d4f55 100644 --- a/frame/3/bli_l3_prune.c +++ b/frame/3/bli_l3_prune.c @@ -56,7 +56,7 @@ void bli_l3_prune_unref_mparts_m #undef GENFRONT #define GENFRONT( dim ) \ \ -void PASTEMAC(l3_prune_unref_mparts_,dim) \ +BLIS_EXPORT_BLIS void PASTEMAC(l3_prune_unref_mparts_,dim) \ ( \ obj_t* a, \ obj_t* b, \ @@ -82,7 +82,7 @@ GENFRONT( k ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_prune_unref_mparts_m) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_m) \ ( \ obj_t* a, \ obj_t* b, \ @@ -91,7 +91,7 @@ void PASTEMAC(opname,_prune_unref_mparts_m) \ { \ /* No pruning is necessary for gemm. */ \ } \ -void PASTEMAC(opname,_prune_unref_mparts_n) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_n) \ ( \ obj_t* a, \ obj_t* b, \ @@ -100,7 +100,7 @@ void PASTEMAC(opname,_prune_unref_mparts_n) \ { \ /* No pruning is necessary for gemm. */ \ } \ -void PASTEMAC(opname,_prune_unref_mparts_k) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_k) \ ( \ obj_t* a, \ obj_t* b, \ @@ -117,7 +117,7 @@ GENFRONT( gemm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_prune_unref_mparts_m) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_m) \ ( \ obj_t* a, \ obj_t* ah, \ @@ -129,7 +129,7 @@ void PASTEMAC(opname,_prune_unref_mparts_m) \ subpartition of A accordingly. */ \ bli_prune_unref_mparts( c, BLIS_M, a, BLIS_M ); \ } \ -void PASTEMAC(opname,_prune_unref_mparts_n) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_n) \ ( \ obj_t* a, \ obj_t* ah, \ @@ -141,7 +141,7 @@ void PASTEMAC(opname,_prune_unref_mparts_n) \ subpartition of Ah accordingly. */ \ bli_prune_unref_mparts( c, BLIS_N, ah, BLIS_N ); \ } \ -void PASTEMAC(opname,_prune_unref_mparts_k) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_k) \ ( \ obj_t* a, \ obj_t* ah, \ @@ -159,7 +159,7 @@ GENFRONT( herk ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_prune_unref_mparts_m) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_m) \ ( \ obj_t* a, \ obj_t* b, \ @@ -171,7 +171,7 @@ void PASTEMAC(opname,_prune_unref_mparts_m) \ subpartition of C accordingly. */ \ bli_prune_unref_mparts( a, BLIS_M, c, BLIS_M ); \ } \ -void PASTEMAC(opname,_prune_unref_mparts_n) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_n) \ ( \ obj_t* a, \ obj_t* b, \ @@ -183,7 +183,7 @@ void PASTEMAC(opname,_prune_unref_mparts_n) \ subpartition of C accordingly. */ \ bli_prune_unref_mparts( b, BLIS_N, c, BLIS_N ); \ } \ -void PASTEMAC(opname,_prune_unref_mparts_k) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_k) \ ( \ obj_t* a, \ obj_t* b, \ diff --git a/frame/3/bli_l3_prune.h b/frame/3/bli_l3_prune.h index 340ecd4db..dbdc6ee72 100644 --- a/frame/3/bli_l3_prune.h +++ b/frame/3/bli_l3_prune.h @@ -36,7 +36,7 @@ #undef GENPROT #define GENPROT( dim ) \ \ -void PASTEMAC(l3_prune_unref_mparts_,dim) \ +BLIS_EXPORT_BLIS void PASTEMAC(l3_prune_unref_mparts_,dim) \ ( \ obj_t* a, \ obj_t* b, \ @@ -53,7 +53,7 @@ GENPROT( k ) #undef GENPROT #define GENPROT( opname, dim ) \ \ -void PASTEMAC2(opname,_prune_unref_mparts_,dim) \ +BLIS_EXPORT_BLIS void PASTEMAC2(opname,_prune_unref_mparts_,dim) \ ( \ obj_t* a, \ obj_t* b, \ diff --git a/frame/3/bli_l3_tapi.c b/frame/3/bli_l3_tapi.c index 7b7f758ab..318776ae7 100644 --- a/frame/3/bli_l3_tapi.c +++ b/frame/3/bli_l3_tapi.c @@ -44,7 +44,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ trans_t transa, \ trans_t transb, \ @@ -105,7 +105,7 @@ INSERT_GENTFUNC_BASIC0( gemm ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, struca ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ side_t side, \ uplo_t uploa, \ @@ -172,7 +172,7 @@ INSERT_GENTFUNC_BASIC( symm, BLIS_SYMMETRIC ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -229,7 +229,7 @@ INSERT_GENTFUNCR_BASIC0( herk ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -294,7 +294,7 @@ INSERT_GENTFUNCR_BASIC0( her2k ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -350,7 +350,7 @@ INSERT_GENTFUNC_BASIC0( syrk ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -414,7 +414,7 @@ INSERT_GENTFUNC_BASIC0( syr2k ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ side_t side, \ uplo_t uploa, \ @@ -482,7 +482,7 @@ INSERT_GENTFUNC_BASIC0( trmm3 ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ side_t side, \ uplo_t uploa, \ diff --git a/frame/3/bli_l3_tapi.h b/frame/3/bli_l3_tapi.h index 4ae9d6921..a809c2a68 100644 --- a/frame/3/bli_l3_tapi.h +++ b/frame/3/bli_l3_tapi.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ trans_t transa, \ trans_t transb, \ @@ -61,7 +61,7 @@ INSERT_GENTPROT_BASIC0( gemm ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ side_t side, \ uplo_t uploa, \ @@ -84,7 +84,7 @@ INSERT_GENTPROT_BASIC0( symm ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -103,7 +103,7 @@ INSERT_GENTPROTR_BASIC0( herk ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -124,7 +124,7 @@ INSERT_GENTPROTR_BASIC0( her2k ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -143,7 +143,7 @@ INSERT_GENTPROT_BASIC0( syrk ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -164,7 +164,7 @@ INSERT_GENTPROT_BASIC0( syr2k ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ side_t side, \ uplo_t uploa, \ @@ -187,7 +187,7 @@ INSERT_GENTPROT_BASIC0( trmm3 ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ side_t side, \ uplo_t uploa, \ diff --git a/frame/3/bli_l3_thrinfo.h b/frame/3/bli_l3_thrinfo.h index 1dc785615..3b742da10 100644 --- a/frame/3/bli_l3_thrinfo.h +++ b/frame/3/bli_l3_thrinfo.h @@ -72,7 +72,7 @@ // thrinfo_t APIs specific to level-3 operations. // -void bli_l3_thrinfo_init +BLIS_EXPORT_BLIS void bli_l3_thrinfo_init ( thrinfo_t* thread, thrcomm_t* ocomm, @@ -82,12 +82,12 @@ void bli_l3_thrinfo_init thrinfo_t* sub_node ); -void bli_l3_thrinfo_init_single +BLIS_EXPORT_BLIS void bli_l3_thrinfo_init_single ( thrinfo_t* thread ); -void bli_l3_thrinfo_free +BLIS_EXPORT_BLIS void bli_l3_thrinfo_free ( rntm_t* rntm, thrinfo_t* thread @@ -95,7 +95,7 @@ void bli_l3_thrinfo_free // ----------------------------------------------------------------------------- -void bli_l3_thrinfo_create_root +BLIS_EXPORT_BLIS void bli_l3_thrinfo_create_root ( dim_t id, thrcomm_t* gl_comm, @@ -116,7 +116,7 @@ void bli_l3_thrinfo_print_trsm_paths // ----------------------------------------------------------------------------- -void bli_l3_thrinfo_free_paths +BLIS_EXPORT_BLIS void bli_l3_thrinfo_free_paths ( rntm_t* rntm, thrinfo_t** threads diff --git a/frame/3/bli_l3_ukr_fpa.h b/frame/3/bli_l3_ukr_fpa.h index 65bdc6964..24947c6ff 100644 --- a/frame/3/bli_l3_ukr_fpa.h +++ b/frame/3/bli_l3_ukr_fpa.h @@ -40,7 +40,7 @@ #define GENPROT( tname, opname ) \ \ PASTECH2(tname,_ukr,_vft) \ -PASTEMAC(opname,_qfp)( num_t dt ); +BLIS_EXPORT_BLIS PASTEMAC(opname,_qfp)( num_t dt ); GENPROT( gemm, gemm_ukernel ) GENPROT( gemmtrsm, gemmtrsm_l_ukernel ) diff --git a/frame/3/bli_l3_ukr_oapi.c b/frame/3/bli_l3_ukr_oapi.c index a8191b1aa..5b10cf6ab 100644 --- a/frame/3/bli_l3_ukr_oapi.c +++ b/frame/3/bli_l3_ukr_oapi.c @@ -37,7 +37,7 @@ #undef GENFRONT #define GENFRONT( tname, opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -92,7 +92,7 @@ GENFRONT( gemm, gemm_ukernel ) #undef GENFRONT #define GENFRONT( tname, opname, opnamel, opnameu ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* alpha, \ obj_t* a1x, \ @@ -175,7 +175,7 @@ GENFRONT( gemmtrsm, gemmtrsm_ukernel, gemmtrsm_l_ukernel, gemmtrsm_u_ukernel ) #undef GENFRONT #define GENFRONT( tname, opname, opnamel, opnameu ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* a, \ obj_t* b, \ diff --git a/frame/3/bli_l3_ukr_oapi.h b/frame/3/bli_l3_ukr_oapi.h index 512df492b..5fed11ede 100644 --- a/frame/3/bli_l3_ukr_oapi.h +++ b/frame/3/bli_l3_ukr_oapi.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -56,7 +56,7 @@ GENPROT( gemm_ukernel ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* alpha, \ obj_t* a1x, \ @@ -73,7 +73,7 @@ GENPROT( gemmtrsm_ukernel ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* a, \ obj_t* b, \ diff --git a/frame/3/bli_l3_ukr_prot.h b/frame/3/bli_l3_ukr_prot.h index 80733897b..bc9aa3e40 100644 --- a/frame/3/bli_l3_ukr_prot.h +++ b/frame/3/bli_l3_ukr_prot.h @@ -38,7 +38,7 @@ #define GEMM_UKR_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ dim_t k, \ ctype* restrict alpha, \ @@ -53,7 +53,7 @@ void PASTEMAC(ch,opname) \ #define GEMMTRSM_UKR_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ dim_t k, \ ctype* restrict alpha, \ @@ -69,7 +69,7 @@ void PASTEMAC(ch,opname) \ #define TRSM_UKR_PROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ ctype* restrict a, \ ctype* restrict b, \ diff --git a/frame/3/bli_l3_ukr_tapi.c b/frame/3/bli_l3_ukr_tapi.c index 67e33175b..3f17ff6a7 100644 --- a/frame/3/bli_l3_ukr_tapi.c +++ b/frame/3/bli_l3_ukr_tapi.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, tname, kerid ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ dim_t k, \ ctype* restrict alpha, \ @@ -76,7 +76,7 @@ INSERT_GENTFUNC_BASIC2( gemm_ukernel, gemm, BLIS_GEMM_UKR ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, tname, kerid ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ dim_t k, \ ctype* restrict alpha, \ @@ -118,7 +118,7 @@ INSERT_GENTFUNC_BASIC2( gemmtrsm_u_ukernel, gemmtrsm, BLIS_GEMMTRSM_U_UKR ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, tname, kerid ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ ctype* restrict a, \ ctype* restrict b, \ diff --git a/frame/3/gemm/bli_gemm_cntl.c b/frame/3/gemm/bli_gemm_cntl.c index fc0a4a786..606f671b1 100644 --- a/frame/3/gemm/bli_gemm_cntl.c +++ b/frame/3/gemm/bli_gemm_cntl.c @@ -253,7 +253,7 @@ cntl_t* bli_gemmpb_cntl_create // ----------------------------------------------------------------------------- -void bli_gemm_cntl_free +BLIS_EXPORT_BLIS void bli_gemm_cntl_free ( rntm_t* rntm, cntl_t* cntl, diff --git a/frame/3/gemm/bli_gemm_cntl.h b/frame/3/gemm/bli_gemm_cntl.h index c6d20b170..efbfa03a5 100644 --- a/frame/3/gemm/bli_gemm_cntl.h +++ b/frame/3/gemm/bli_gemm_cntl.h @@ -33,7 +33,7 @@ */ -cntl_t* bli_gemm_cntl_create +BLIS_EXPORT_BLIS cntl_t* bli_gemm_cntl_create ( rntm_t* rntm, opid_t family, @@ -43,7 +43,7 @@ cntl_t* bli_gemm_cntl_create // ----------------------------------------------------------------------------- -cntl_t* bli_gemmbp_cntl_create +BLIS_EXPORT_BLIS cntl_t* bli_gemmbp_cntl_create ( rntm_t* rntm, opid_t family, @@ -52,7 +52,7 @@ cntl_t* bli_gemmbp_cntl_create ); #if 0 -cntl_t* bli_gemmpb_cntl_create +BLIS_EXPORT_BLIS cntl_t* bli_gemmpb_cntl_create ( opid_t family, ); @@ -60,7 +60,7 @@ cntl_t* bli_gemmpb_cntl_create // ----------------------------------------------------------------------------- -void bli_gemm_cntl_free +BLIS_EXPORT_BLIS void bli_gemm_cntl_free ( rntm_t* rntm, cntl_t* cntl, @@ -69,7 +69,7 @@ void bli_gemm_cntl_free // ----------------------------------------------------------------------------- -cntl_t* bli_gemm_cntl_create_node +BLIS_EXPORT_BLIS cntl_t* bli_gemm_cntl_create_node ( rntm_t* rntm, opid_t family, diff --git a/frame/3/gemm/bli_gemm_front.c b/frame/3/gemm/bli_gemm_front.c index 20928e198..4c3bbe4db 100644 --- a/frame/3/gemm/bli_gemm_front.c +++ b/frame/3/gemm/bli_gemm_front.c @@ -35,7 +35,7 @@ #include "blis.h" -void bli_gemm_front +BLIS_EXPORT_BLIS void bli_gemm_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/gemm/bli_gemm_front.h b/frame/3/gemm/bli_gemm_front.h index ba65bab8d..0da4e0b9e 100644 --- a/frame/3/gemm/bli_gemm_front.h +++ b/frame/3/gemm/bli_gemm_front.h @@ -32,7 +32,7 @@ */ -void bli_gemm_front +BLIS_EXPORT_BLIS void bli_gemm_front ( obj_t* alpha, obj_t* a, @@ -44,7 +44,7 @@ void bli_gemm_front cntl_t* cntl ); -err_t bli_gemm_small +BLIS_EXPORT_BLIS err_t bli_gemm_small ( obj_t* alpha, obj_t* a, diff --git a/frame/3/gemm/bli_gemm_int.c b/frame/3/gemm/bli_gemm_int.c index 5128bea69..a28ceeb32 100644 --- a/frame/3/gemm/bli_gemm_int.c +++ b/frame/3/gemm/bli_gemm_int.c @@ -35,7 +35,7 @@ #include "blis.h" -void bli_gemm_int +BLIS_EXPORT_BLIS void bli_gemm_int ( obj_t* alpha, obj_t* a, diff --git a/frame/3/gemm/bli_gemm_int.h b/frame/3/gemm/bli_gemm_int.h index 2bbe5480a..725cc64ba 100644 --- a/frame/3/gemm/bli_gemm_int.h +++ b/frame/3/gemm/bli_gemm_int.h @@ -32,7 +32,7 @@ */ -void bli_gemm_int +BLIS_EXPORT_BLIS void bli_gemm_int ( obj_t* alpha, obj_t* a, diff --git a/frame/3/gemm/bli_gemm_ker_var2.c b/frame/3/gemm/bli_gemm_ker_var2.c index e9b43f2ac..e6c5de078 100644 --- a/frame/3/gemm/bli_gemm_ker_var2.c +++ b/frame/3/gemm/bli_gemm_ker_var2.c @@ -191,7 +191,7 @@ void bli_gemm_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/bli_gemm_ker_var2_md.c b/frame/3/gemm/bli_gemm_ker_var2_md.c index 3428be9b4..6badf4a08 100644 --- a/frame/3/gemm/bli_gemm_ker_var2_md.c +++ b/frame/3/gemm/bli_gemm_ker_var2_md.c @@ -192,7 +192,7 @@ void bli_gemm_ker_var2_md #undef GENTFUNC2 #define GENTFUNC2( ctype_c, ctype_e, chc, che, varname ) \ \ -void PASTEMAC2(chc,che,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(chc,che,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/bli_gemm_md.h b/frame/3/gemm/bli_gemm_md.h index 057eb0a1d..4d8825f58 100644 --- a/frame/3/gemm/bli_gemm_md.h +++ b/frame/3/gemm/bli_gemm_md.h @@ -41,7 +41,7 @@ typedef struct mddm_s dom_t exec; } mddm_t; -void bli_gemm_md +BLIS_EXPORT_BLIS void bli_gemm_md ( obj_t* a, obj_t* b, @@ -50,18 +50,18 @@ void bli_gemm_md cntx_t* cntx_local, cntx_t** cntx ); -mddm_t bli_gemm_md_ccc( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); -mddm_t bli_gemm_md_ccr( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); -mddm_t bli_gemm_md_crc( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); -mddm_t bli_gemm_md_rcc( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); -mddm_t bli_gemm_md_rrc( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); -mddm_t bli_gemm_md_rcr( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); -mddm_t bli_gemm_md_crr( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); -mddm_t bli_gemm_md_rrr( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); +BLIS_EXPORT_BLIS mddm_t bli_gemm_md_ccc( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); +BLIS_EXPORT_BLIS mddm_t bli_gemm_md_ccr( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); +BLIS_EXPORT_BLIS mddm_t bli_gemm_md_crc( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); +BLIS_EXPORT_BLIS mddm_t bli_gemm_md_rcc( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); +BLIS_EXPORT_BLIS mddm_t bli_gemm_md_rrc( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); +BLIS_EXPORT_BLIS mddm_t bli_gemm_md_rcr( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); +BLIS_EXPORT_BLIS mddm_t bli_gemm_md_crr( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); +BLIS_EXPORT_BLIS mddm_t bli_gemm_md_rrr( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); // ----------------------------------------------------------------------------- -void bli_gemm_md_front +BLIS_EXPORT_BLIS void bli_gemm_md_front ( obj_t* alpha, obj_t* a, @@ -73,7 +73,7 @@ void bli_gemm_md_front cntl_t* cntl ); -void bli_gemm_md_zgemm +BLIS_EXPORT_BLIS void bli_gemm_md_zgemm ( obj_t* alpha, obj_t* a, @@ -283,7 +283,7 @@ static void bli_gemm_md_ker_var2_recast #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* a, \ obj_t* b, \ @@ -303,7 +303,7 @@ GENPROT( gemm_ker_var2_md ) #undef GENTPROT2 #define GENTPROT2( ctype_c, ctype_e, chc, che, varname ) \ \ -void PASTEMAC2(chc,che,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(chc,che,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/bli_gemm_md_c2r_ref.c b/frame/3/gemm/bli_gemm_md_c2r_ref.c index 6198d85b2..ff4d0dee7 100644 --- a/frame/3/gemm/bli_gemm_md_c2r_ref.c +++ b/frame/3/gemm/bli_gemm_md_c2r_ref.c @@ -39,7 +39,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, opname, suf ) \ \ -void PASTEMAC2(ch,opname,suf) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,suf) \ ( \ dim_t k, \ ctype* restrict alpha, \ diff --git a/frame/3/gemm/bli_gemm_var.h b/frame/3/gemm/bli_gemm_var.h index b08271e9b..f3a74bfc0 100644 --- a/frame/3/gemm/bli_gemm_var.h +++ b/frame/3/gemm/bli_gemm_var.h @@ -41,7 +41,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* a, \ obj_t* b, \ @@ -73,7 +73,7 @@ GENPROT( gemm4mb_ker_var2 ) // 4m1b #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/ind/bli_gemm4mb_ker_var2.c b/frame/3/gemm/ind/bli_gemm4mb_ker_var2.c index cbc3a1929..ab3f7cc98 100644 --- a/frame/3/gemm/ind/bli_gemm4mb_ker_var2.c +++ b/frame/3/gemm/ind/bli_gemm4mb_ker_var2.c @@ -138,7 +138,7 @@ void bli_gemm4mb_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/ind/old/bli_gemm3m2_ker_var2.c b/frame/3/gemm/ind/old/bli_gemm3m2_ker_var2.c index 09830753e..34bf0c656 100644 --- a/frame/3/gemm/ind/old/bli_gemm3m2_ker_var2.c +++ b/frame/3/gemm/ind/old/bli_gemm3m2_ker_var2.c @@ -134,7 +134,7 @@ void bli_gemm3m2_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/other/bli_gemm_ker_var2.c b/frame/3/gemm/other/bli_gemm_ker_var2.c index 73ca61181..a737e5b45 100644 --- a/frame/3/gemm/other/bli_gemm_ker_var2.c +++ b/frame/3/gemm/other/bli_gemm_ker_var2.c @@ -159,7 +159,7 @@ void bli_gemm_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/other/bli_gemm_ker_var2rr.c b/frame/3/gemm/other/bli_gemm_ker_var2rr.c index f79f1311e..b450bb0e7 100644 --- a/frame/3/gemm/other/bli_gemm_ker_var2rr.c +++ b/frame/3/gemm/other/bli_gemm_ker_var2rr.c @@ -160,7 +160,7 @@ void bli_gemm_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/other/bli_gemm_ker_var2sl.c b/frame/3/gemm/other/bli_gemm_ker_var2sl.c index 48ef2791f..b63e1ba9e 100644 --- a/frame/3/gemm/other/bli_gemm_ker_var2sl.c +++ b/frame/3/gemm/other/bli_gemm_ker_var2sl.c @@ -160,7 +160,7 @@ void bli_gemm_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/other/bli_gemm_ker_var5.c b/frame/3/gemm/other/bli_gemm_ker_var5.c index 0d0c914d8..2298e631c 100644 --- a/frame/3/gemm/other/bli_gemm_ker_var5.c +++ b/frame/3/gemm/other/bli_gemm_ker_var5.c @@ -126,7 +126,7 @@ void bli_gemm_ker_var5( obj_t* a, #undef GENTFUNC #define GENTFUNC( ctype, ch, varname, ukrtype ) \ \ -void PASTEMAC(ch,varname)( \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname)( \ dim_t m, \ dim_t n, \ dim_t k, \ diff --git a/frame/3/gemm/other/bli_gemm_ker_var5.h b/frame/3/gemm/other/bli_gemm_ker_var5.h index 7e24bb5f9..ab39b6109 100644 --- a/frame/3/gemm/other/bli_gemm_ker_var5.h +++ b/frame/3/gemm/other/bli_gemm_ker_var5.h @@ -36,7 +36,7 @@ // // Prototype object-based interface. // -void bli_gemm_ker_var5( obj_t* a, +BLIS_EXPORT_BLIS void bli_gemm_ker_var5( obj_t* a, obj_t* b, obj_t* c, cntx_t* cntx, @@ -50,7 +50,7 @@ void bli_gemm_ker_var5( obj_t* a, #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname)( \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname)( \ dim_t m, \ dim_t n, \ dim_t k, \ diff --git a/frame/3/hemm/bli_hemm_front.c b/frame/3/hemm/bli_hemm_front.c index 5949a2e6c..8202d5cf0 100644 --- a/frame/3/hemm/bli_hemm_front.c +++ b/frame/3/hemm/bli_hemm_front.c @@ -34,7 +34,7 @@ #include "blis.h" -void bli_hemm_front +BLIS_EXPORT_BLIS void bli_hemm_front ( side_t side, obj_t* alpha, diff --git a/frame/3/hemm/bli_hemm_front.h b/frame/3/hemm/bli_hemm_front.h index 308b6378b..01affcaa9 100644 --- a/frame/3/hemm/bli_hemm_front.h +++ b/frame/3/hemm/bli_hemm_front.h @@ -32,7 +32,7 @@ */ -void bli_hemm_front +BLIS_EXPORT_BLIS void bli_hemm_front ( side_t side, obj_t* alpha, diff --git a/frame/3/her2k/bli_her2k_front.c b/frame/3/her2k/bli_her2k_front.c index a99aa05c8..234b04e16 100644 --- a/frame/3/her2k/bli_her2k_front.c +++ b/frame/3/her2k/bli_her2k_front.c @@ -34,7 +34,7 @@ #include "blis.h" -void bli_her2k_front +BLIS_EXPORT_BLIS void bli_her2k_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/her2k/bli_her2k_front.h b/frame/3/her2k/bli_her2k_front.h index 0efdb86c2..736d6beff 100644 --- a/frame/3/her2k/bli_her2k_front.h +++ b/frame/3/her2k/bli_her2k_front.h @@ -32,7 +32,7 @@ */ -void bli_her2k_front +BLIS_EXPORT_BLIS void bli_her2k_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/herk/bli_herk_front.c b/frame/3/herk/bli_herk_front.c index be0118f18..40020afb9 100644 --- a/frame/3/herk/bli_herk_front.c +++ b/frame/3/herk/bli_herk_front.c @@ -34,7 +34,7 @@ #include "blis.h" -void bli_herk_front +BLIS_EXPORT_BLIS void bli_herk_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/herk/bli_herk_front.h b/frame/3/herk/bli_herk_front.h index 44778a450..ec05a2249 100644 --- a/frame/3/herk/bli_herk_front.h +++ b/frame/3/herk/bli_herk_front.h @@ -32,7 +32,7 @@ */ -void bli_herk_front +BLIS_EXPORT_BLIS void bli_herk_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/herk/bli_herk_l_ker_var2.c b/frame/3/herk/bli_herk_l_ker_var2.c index d09424d9a..8bed4866b 100644 --- a/frame/3/herk/bli_herk_l_ker_var2.c +++ b/frame/3/herk/bli_herk_l_ker_var2.c @@ -143,7 +143,7 @@ void bli_herk_l_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/bli_herk_u_ker_var2.c b/frame/3/herk/bli_herk_u_ker_var2.c index 51fd5d4d6..a88895e97 100644 --- a/frame/3/herk/bli_herk_u_ker_var2.c +++ b/frame/3/herk/bli_herk_u_ker_var2.c @@ -143,7 +143,7 @@ void bli_herk_u_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/bli_herk_var.h b/frame/3/herk/bli_herk_var.h index 00b85fc5c..a3d0bd370 100644 --- a/frame/3/herk/bli_herk_var.h +++ b/frame/3/herk/bli_herk_var.h @@ -41,7 +41,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* a, \ obj_t* ah, \ @@ -71,7 +71,7 @@ GENPROT( herk_u_ker_var2 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/other/bli_herk_l_ker_var2.1looprr.c b/frame/3/herk/other/bli_herk_l_ker_var2.1looprr.c index 7238716a7..cbadd8add 100644 --- a/frame/3/herk/other/bli_herk_l_ker_var2.1looprr.c +++ b/frame/3/herk/other/bli_herk_l_ker_var2.1looprr.c @@ -143,7 +143,7 @@ void bli_herk_l_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/other/bli_herk_l_ker_var2.c b/frame/3/herk/other/bli_herk_l_ker_var2.c index 650acf0d7..9d65acb03 100644 --- a/frame/3/herk/other/bli_herk_l_ker_var2.c +++ b/frame/3/herk/other/bli_herk_l_ker_var2.c @@ -143,7 +143,7 @@ void bli_herk_l_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/other/bli_herk_l_ker_var2rr.c b/frame/3/herk/other/bli_herk_l_ker_var2rr.c index 19edea32b..f1eeaf86e 100644 --- a/frame/3/herk/other/bli_herk_l_ker_var2rr.c +++ b/frame/3/herk/other/bli_herk_l_ker_var2rr.c @@ -146,7 +146,7 @@ void bli_herk_l_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/other/bli_herk_l_ker_var2sl.c b/frame/3/herk/other/bli_herk_l_ker_var2sl.c index 68e9de181..1be759999 100644 --- a/frame/3/herk/other/bli_herk_l_ker_var2sl.c +++ b/frame/3/herk/other/bli_herk_l_ker_var2sl.c @@ -146,7 +146,7 @@ void bli_herk_l_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/other/bli_herk_u_ker_var2.1looprr.c b/frame/3/herk/other/bli_herk_u_ker_var2.1looprr.c index f1b191a7e..120076dde 100644 --- a/frame/3/herk/other/bli_herk_u_ker_var2.1looprr.c +++ b/frame/3/herk/other/bli_herk_u_ker_var2.1looprr.c @@ -143,7 +143,7 @@ void bli_herk_u_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/other/bli_herk_u_ker_var2.c b/frame/3/herk/other/bli_herk_u_ker_var2.c index 7fbc90fed..5f624ddf4 100644 --- a/frame/3/herk/other/bli_herk_u_ker_var2.c +++ b/frame/3/herk/other/bli_herk_u_ker_var2.c @@ -143,7 +143,7 @@ void bli_herk_u_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/other/bli_herk_u_ker_var2rr.c b/frame/3/herk/other/bli_herk_u_ker_var2rr.c index 1643bbc39..98dce43d4 100644 --- a/frame/3/herk/other/bli_herk_u_ker_var2rr.c +++ b/frame/3/herk/other/bli_herk_u_ker_var2rr.c @@ -146,7 +146,7 @@ void bli_herk_u_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/other/bli_herk_u_ker_var2sl.c b/frame/3/herk/other/bli_herk_u_ker_var2sl.c index 24db2a4a3..7c5d1be9c 100644 --- a/frame/3/herk/other/bli_herk_u_ker_var2sl.c +++ b/frame/3/herk/other/bli_herk_u_ker_var2sl.c @@ -146,7 +146,7 @@ void bli_herk_u_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/symm/bli_symm_front.c b/frame/3/symm/bli_symm_front.c index 820c26fd1..cb59e1657 100644 --- a/frame/3/symm/bli_symm_front.c +++ b/frame/3/symm/bli_symm_front.c @@ -34,7 +34,7 @@ #include "blis.h" -void bli_symm_front +BLIS_EXPORT_BLIS void bli_symm_front ( side_t side, obj_t* alpha, diff --git a/frame/3/symm/bli_symm_front.h b/frame/3/symm/bli_symm_front.h index 909997f6c..be1e1b060 100644 --- a/frame/3/symm/bli_symm_front.h +++ b/frame/3/symm/bli_symm_front.h @@ -32,7 +32,7 @@ */ -void bli_symm_front +BLIS_EXPORT_BLIS void bli_symm_front ( side_t side, obj_t* alpha, diff --git a/frame/3/syr2k/bli_syr2k_front.c b/frame/3/syr2k/bli_syr2k_front.c index 3ccd28c5c..77300ba3d 100644 --- a/frame/3/syr2k/bli_syr2k_front.c +++ b/frame/3/syr2k/bli_syr2k_front.c @@ -34,7 +34,7 @@ #include "blis.h" -void bli_syr2k_front +BLIS_EXPORT_BLIS void bli_syr2k_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/syr2k/bli_syr2k_front.h b/frame/3/syr2k/bli_syr2k_front.h index 767bb6ee1..5251fee38 100644 --- a/frame/3/syr2k/bli_syr2k_front.h +++ b/frame/3/syr2k/bli_syr2k_front.h @@ -32,7 +32,7 @@ */ -void bli_syr2k_front +BLIS_EXPORT_BLIS void bli_syr2k_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/syrk/bli_syrk_front.c b/frame/3/syrk/bli_syrk_front.c index fbf44d80e..ff800b1a5 100644 --- a/frame/3/syrk/bli_syrk_front.c +++ b/frame/3/syrk/bli_syrk_front.c @@ -35,7 +35,7 @@ #include "blis.h" -void bli_syrk_front +BLIS_EXPORT_BLIS void bli_syrk_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/syrk/bli_syrk_front.h b/frame/3/syrk/bli_syrk_front.h index 98b1e1251..623fbd8e1 100644 --- a/frame/3/syrk/bli_syrk_front.h +++ b/frame/3/syrk/bli_syrk_front.h @@ -32,7 +32,7 @@ */ -void bli_syrk_front +BLIS_EXPORT_BLIS void bli_syrk_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/trmm/bli_trmm_front.c b/frame/3/trmm/bli_trmm_front.c index fa9a6389d..0f965af49 100644 --- a/frame/3/trmm/bli_trmm_front.c +++ b/frame/3/trmm/bli_trmm_front.c @@ -35,7 +35,7 @@ #include "blis.h" -void bli_trmm_front +BLIS_EXPORT_BLIS void bli_trmm_front ( side_t side, obj_t* alpha, diff --git a/frame/3/trmm/bli_trmm_front.h b/frame/3/trmm/bli_trmm_front.h index 3e136f9dc..f53dd8133 100644 --- a/frame/3/trmm/bli_trmm_front.h +++ b/frame/3/trmm/bli_trmm_front.h @@ -32,7 +32,7 @@ */ -void bli_trmm_front +BLIS_EXPORT_BLIS void bli_trmm_front ( side_t side, obj_t* alpha, diff --git a/frame/3/trmm/bli_trmm_ll_ker_var2.c b/frame/3/trmm/bli_trmm_ll_ker_var2.c index 5c7a7bcd0..940bcab9e 100644 --- a/frame/3/trmm/bli_trmm_ll_ker_var2.c +++ b/frame/3/trmm/bli_trmm_ll_ker_var2.c @@ -137,7 +137,7 @@ void bli_trmm_ll_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trmm/bli_trmm_lu_ker_var2.c b/frame/3/trmm/bli_trmm_lu_ker_var2.c index 06705da44..c45225240 100644 --- a/frame/3/trmm/bli_trmm_lu_ker_var2.c +++ b/frame/3/trmm/bli_trmm_lu_ker_var2.c @@ -137,7 +137,7 @@ void bli_trmm_lu_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trmm/bli_trmm_rl_ker_var2.c b/frame/3/trmm/bli_trmm_rl_ker_var2.c index 9a17ed644..40c177871 100644 --- a/frame/3/trmm/bli_trmm_rl_ker_var2.c +++ b/frame/3/trmm/bli_trmm_rl_ker_var2.c @@ -137,7 +137,7 @@ void bli_trmm_rl_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trmm/bli_trmm_ru_ker_var2.c b/frame/3/trmm/bli_trmm_ru_ker_var2.c index 1062b95d8..e3816d9cc 100644 --- a/frame/3/trmm/bli_trmm_ru_ker_var2.c +++ b/frame/3/trmm/bli_trmm_ru_ker_var2.c @@ -137,7 +137,7 @@ void bli_trmm_ru_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trmm/bli_trmm_var.h b/frame/3/trmm/bli_trmm_var.h index 262b0490f..3fa5b081a 100644 --- a/frame/3/trmm/bli_trmm_var.h +++ b/frame/3/trmm/bli_trmm_var.h @@ -41,7 +41,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* a, \ obj_t* b, \ @@ -71,7 +71,7 @@ GENPROT( trmm_ru_ker_var2 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoff, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_ll_ker_var2.c b/frame/3/trmm/other/bli_trmm_ll_ker_var2.c index 1e5f9a9f4..7b30179b9 100644 --- a/frame/3/trmm/other/bli_trmm_ll_ker_var2.c +++ b/frame/3/trmm/other/bli_trmm_ll_ker_var2.c @@ -137,7 +137,7 @@ void bli_trmm_ll_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_ll_ker_var2rr.c b/frame/3/trmm/other/bli_trmm_ll_ker_var2rr.c index 3b2575f66..bfcee0dc3 100644 --- a/frame/3/trmm/other/bli_trmm_ll_ker_var2rr.c +++ b/frame/3/trmm/other/bli_trmm_ll_ker_var2rr.c @@ -140,7 +140,7 @@ void bli_trmm_ll_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_ll_ker_var2sl.c b/frame/3/trmm/other/bli_trmm_ll_ker_var2sl.c index 1dbd0053a..69e16f1c3 100644 --- a/frame/3/trmm/other/bli_trmm_ll_ker_var2sl.c +++ b/frame/3/trmm/other/bli_trmm_ll_ker_var2sl.c @@ -140,7 +140,7 @@ void bli_trmm_ll_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_lu_ker_var2.c b/frame/3/trmm/other/bli_trmm_lu_ker_var2.c index 17d2f9a2f..0274fe7c3 100644 --- a/frame/3/trmm/other/bli_trmm_lu_ker_var2.c +++ b/frame/3/trmm/other/bli_trmm_lu_ker_var2.c @@ -137,7 +137,7 @@ void bli_trmm_lu_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_lu_ker_var2rr.c b/frame/3/trmm/other/bli_trmm_lu_ker_var2rr.c index f1a586ce6..2e128929c 100644 --- a/frame/3/trmm/other/bli_trmm_lu_ker_var2rr.c +++ b/frame/3/trmm/other/bli_trmm_lu_ker_var2rr.c @@ -140,7 +140,7 @@ void bli_trmm_lu_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_lu_ker_var2sl.c b/frame/3/trmm/other/bli_trmm_lu_ker_var2sl.c index 26806220a..ca1f44961 100644 --- a/frame/3/trmm/other/bli_trmm_lu_ker_var2sl.c +++ b/frame/3/trmm/other/bli_trmm_lu_ker_var2sl.c @@ -140,7 +140,7 @@ void bli_trmm_lu_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_rl_ker_var2.c b/frame/3/trmm/other/bli_trmm_rl_ker_var2.c index d856cc383..fb1ab36eb 100644 --- a/frame/3/trmm/other/bli_trmm_rl_ker_var2.c +++ b/frame/3/trmm/other/bli_trmm_rl_ker_var2.c @@ -137,7 +137,7 @@ void bli_trmm_rl_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_rl_ker_var2rr.c b/frame/3/trmm/other/bli_trmm_rl_ker_var2rr.c index 80350b401..9f86aeefa 100644 --- a/frame/3/trmm/other/bli_trmm_rl_ker_var2rr.c +++ b/frame/3/trmm/other/bli_trmm_rl_ker_var2rr.c @@ -140,7 +140,7 @@ void bli_trmm_rl_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_rl_ker_var2sl.c b/frame/3/trmm/other/bli_trmm_rl_ker_var2sl.c index a44942da6..e52e887c2 100644 --- a/frame/3/trmm/other/bli_trmm_rl_ker_var2sl.c +++ b/frame/3/trmm/other/bli_trmm_rl_ker_var2sl.c @@ -140,7 +140,7 @@ void bli_trmm_rl_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_ru_ker_var2.c b/frame/3/trmm/other/bli_trmm_ru_ker_var2.c index 120974ef0..6ec23fa78 100644 --- a/frame/3/trmm/other/bli_trmm_ru_ker_var2.c +++ b/frame/3/trmm/other/bli_trmm_ru_ker_var2.c @@ -137,7 +137,7 @@ void bli_trmm_ru_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_ru_ker_var2rr.c b/frame/3/trmm/other/bli_trmm_ru_ker_var2rr.c index 45a7b5628..7073031ad 100644 --- a/frame/3/trmm/other/bli_trmm_ru_ker_var2rr.c +++ b/frame/3/trmm/other/bli_trmm_ru_ker_var2rr.c @@ -140,7 +140,7 @@ void bli_trmm_ru_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_ru_ker_var2sl.c b/frame/3/trmm/other/bli_trmm_ru_ker_var2sl.c index d2b4744e6..e67a61fb9 100644 --- a/frame/3/trmm/other/bli_trmm_ru_ker_var2sl.c +++ b/frame/3/trmm/other/bli_trmm_ru_ker_var2sl.c @@ -140,7 +140,7 @@ void bli_trmm_ru_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trmm3/bli_trmm3_front.c b/frame/3/trmm3/bli_trmm3_front.c index 39067ac0b..ff508d0b5 100644 --- a/frame/3/trmm3/bli_trmm3_front.c +++ b/frame/3/trmm3/bli_trmm3_front.c @@ -34,7 +34,7 @@ #include "blis.h" -void bli_trmm3_front +BLIS_EXPORT_BLIS void bli_trmm3_front ( side_t side, obj_t* alpha, diff --git a/frame/3/trmm3/bli_trmm3_front.h b/frame/3/trmm3/bli_trmm3_front.h index 296b9354b..22c0ff509 100644 --- a/frame/3/trmm3/bli_trmm3_front.h +++ b/frame/3/trmm3/bli_trmm3_front.h @@ -32,7 +32,7 @@ */ -void bli_trmm3_front +BLIS_EXPORT_BLIS void bli_trmm3_front ( side_t side, obj_t* alpha, diff --git a/frame/3/trsm/bli_trsm_cntl.c b/frame/3/trsm/bli_trsm_cntl.c index ff2f18a1f..42d9b257a 100644 --- a/frame/3/trsm/bli_trsm_cntl.c +++ b/frame/3/trsm/bli_trsm_cntl.c @@ -301,7 +301,7 @@ cntl_t* bli_trsm_r_cntl_create return trsm_cntl_vl_mm; } -void bli_trsm_cntl_free +BLIS_EXPORT_BLIS void bli_trsm_cntl_free ( rntm_t* rntm, cntl_t* cntl, diff --git a/frame/3/trsm/bli_trsm_cntl.h b/frame/3/trsm/bli_trsm_cntl.h index f81f70d07..0ea2d3812 100644 --- a/frame/3/trsm/bli_trsm_cntl.h +++ b/frame/3/trsm/bli_trsm_cntl.h @@ -33,7 +33,7 @@ */ -cntl_t* bli_trsm_cntl_create +BLIS_EXPORT_BLIS cntl_t* bli_trsm_cntl_create ( rntm_t* rntm, side_t side, @@ -41,21 +41,21 @@ cntl_t* bli_trsm_cntl_create pack_t schema_b ); -cntl_t* bli_trsm_l_cntl_create +BLIS_EXPORT_BLIS cntl_t* bli_trsm_l_cntl_create ( rntm_t* rntm, pack_t schema_a, pack_t schema_b ); -cntl_t* bli_trsm_r_cntl_create +BLIS_EXPORT_BLIS cntl_t* bli_trsm_r_cntl_create ( rntm_t* rntm, pack_t schema_a, pack_t schema_b ); -void bli_trsm_cntl_free +BLIS_EXPORT_BLIS void bli_trsm_cntl_free ( rntm_t* rntm, cntl_t* cntl, @@ -64,7 +64,7 @@ void bli_trsm_cntl_free // ----------------------------------------------------------------------------- -cntl_t* bli_trsm_cntl_create_node +BLIS_EXPORT_BLIS cntl_t* bli_trsm_cntl_create_node ( rntm_t* rntm, opid_t family, diff --git a/frame/3/trsm/bli_trsm_front.c b/frame/3/trsm/bli_trsm_front.c index 3c3b08a08..9ce6948cb 100644 --- a/frame/3/trsm/bli_trsm_front.c +++ b/frame/3/trsm/bli_trsm_front.c @@ -35,9 +35,7 @@ #include "blis.h" -//#define PRINT_SMALL_TRSM_INFO - -void bli_trsm_front +BLIS_EXPORT_BLIS void bli_trsm_front ( side_t side, obj_t* alpha, diff --git a/frame/3/trsm/bli_trsm_front.h b/frame/3/trsm/bli_trsm_front.h index c8942730b..d50750865 100644 --- a/frame/3/trsm/bli_trsm_front.h +++ b/frame/3/trsm/bli_trsm_front.h @@ -33,7 +33,7 @@ */ -void bli_trsm_front +BLIS_EXPORT_BLIS void bli_trsm_front ( side_t side, obj_t* alpha, diff --git a/frame/3/trsm/bli_trsm_int.c b/frame/3/trsm/bli_trsm_int.c index dc39e69e0..c94b70ec3 100644 --- a/frame/3/trsm/bli_trsm_int.c +++ b/frame/3/trsm/bli_trsm_int.c @@ -34,7 +34,7 @@ #include "blis.h" -void bli_trsm_int +BLIS_EXPORT_BLIS void bli_trsm_int ( obj_t* alpha, obj_t* a, diff --git a/frame/3/trsm/bli_trsm_int.h b/frame/3/trsm/bli_trsm_int.h index aabb2a8aa..ce205765c 100644 --- a/frame/3/trsm/bli_trsm_int.h +++ b/frame/3/trsm/bli_trsm_int.h @@ -32,7 +32,7 @@ */ -void bli_trsm_int +BLIS_EXPORT_BLIS void bli_trsm_int ( obj_t* alpha, obj_t* a, diff --git a/frame/3/trsm/bli_trsm_ll_ker_var2.c b/frame/3/trsm/bli_trsm_ll_ker_var2.c index 0f69057ae..e856cad01 100644 --- a/frame/3/trsm/bli_trsm_ll_ker_var2.c +++ b/frame/3/trsm/bli_trsm_ll_ker_var2.c @@ -140,7 +140,7 @@ void bli_trsm_ll_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trsm/bli_trsm_lu_ker_var2.c b/frame/3/trsm/bli_trsm_lu_ker_var2.c index f2cb62608..681287df3 100644 --- a/frame/3/trsm/bli_trsm_lu_ker_var2.c +++ b/frame/3/trsm/bli_trsm_lu_ker_var2.c @@ -140,7 +140,7 @@ void bli_trsm_lu_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trsm/bli_trsm_rl_ker_var2.c b/frame/3/trsm/bli_trsm_rl_ker_var2.c index 1508cd596..6f6f8c2e5 100644 --- a/frame/3/trsm/bli_trsm_rl_ker_var2.c +++ b/frame/3/trsm/bli_trsm_rl_ker_var2.c @@ -140,7 +140,7 @@ void bli_trsm_rl_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trsm/bli_trsm_ru_ker_var2.c b/frame/3/trsm/bli_trsm_ru_ker_var2.c index 54288a04d..608b99160 100644 --- a/frame/3/trsm/bli_trsm_ru_ker_var2.c +++ b/frame/3/trsm/bli_trsm_ru_ker_var2.c @@ -140,7 +140,7 @@ void bli_trsm_ru_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trsm/bli_trsm_var.h b/frame/3/trsm/bli_trsm_var.h index de7c65936..aa5c3e4a5 100644 --- a/frame/3/trsm/bli_trsm_var.h +++ b/frame/3/trsm/bli_trsm_var.h @@ -41,7 +41,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* a, \ obj_t* b, \ @@ -73,7 +73,7 @@ GENPROT( trsm_ru_ker_var2 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoff, \ pack_t schema_a, \ diff --git a/frame/3/trsm/other/bli_trsm_ll_ker_var2.c b/frame/3/trsm/other/bli_trsm_ll_ker_var2.c index ebd53476d..7d7b40a8f 100644 --- a/frame/3/trsm/other/bli_trsm_ll_ker_var2.c +++ b/frame/3/trsm/other/bli_trsm_ll_ker_var2.c @@ -140,7 +140,7 @@ void bli_trsm_ll_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trsm/other/bli_trsm_ll_ker_var2rr.c b/frame/3/trsm/other/bli_trsm_ll_ker_var2rr.c index eb7435b4a..fd6be7ac2 100644 --- a/frame/3/trsm/other/bli_trsm_ll_ker_var2rr.c +++ b/frame/3/trsm/other/bli_trsm_ll_ker_var2rr.c @@ -143,7 +143,7 @@ void bli_trsm_ll_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trsm/other/bli_trsm_ll_ker_var2sl.c b/frame/3/trsm/other/bli_trsm_ll_ker_var2sl.c index df9235740..63f87ac94 100644 --- a/frame/3/trsm/other/bli_trsm_ll_ker_var2sl.c +++ b/frame/3/trsm/other/bli_trsm_ll_ker_var2sl.c @@ -143,7 +143,7 @@ void bli_trsm_ll_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trsm/other/bli_trsm_lu_ker_var2.c b/frame/3/trsm/other/bli_trsm_lu_ker_var2.c index 97222ffe4..da7baa3d6 100644 --- a/frame/3/trsm/other/bli_trsm_lu_ker_var2.c +++ b/frame/3/trsm/other/bli_trsm_lu_ker_var2.c @@ -140,7 +140,7 @@ void bli_trsm_lu_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trsm/other/bli_trsm_lu_ker_var2rr.c b/frame/3/trsm/other/bli_trsm_lu_ker_var2rr.c index 107aae742..183fc90a1 100644 --- a/frame/3/trsm/other/bli_trsm_lu_ker_var2rr.c +++ b/frame/3/trsm/other/bli_trsm_lu_ker_var2rr.c @@ -143,7 +143,7 @@ void bli_trsm_lu_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trsm/other/bli_trsm_lu_ker_var2sl.c b/frame/3/trsm/other/bli_trsm_lu_ker_var2sl.c index ee18058a4..d141e4b11 100644 --- a/frame/3/trsm/other/bli_trsm_lu_ker_var2sl.c +++ b/frame/3/trsm/other/bli_trsm_lu_ker_var2sl.c @@ -143,7 +143,7 @@ void bli_trsm_lu_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trsm/other/bli_trsm_rl_ker_var2.c b/frame/3/trsm/other/bli_trsm_rl_ker_var2.c index 0fff5cc11..c956eefa7 100644 --- a/frame/3/trsm/other/bli_trsm_rl_ker_var2.c +++ b/frame/3/trsm/other/bli_trsm_rl_ker_var2.c @@ -140,7 +140,7 @@ void bli_trsm_rl_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trsm/other/bli_trsm_ru_ker_var2.c b/frame/3/trsm/other/bli_trsm_ru_ker_var2.c index f4023ace2..0acbac041 100644 --- a/frame/3/trsm/other/bli_trsm_ru_ker_var2.c +++ b/frame/3/trsm/other/bli_trsm_ru_ker_var2.c @@ -140,7 +140,7 @@ void bli_trsm_ru_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/base/bli_apool.h b/frame/base/bli_apool.h index 7d61e8eb1..5d183e03a 100644 --- a/frame/base/bli_apool.h +++ b/frame/base/bli_apool.h @@ -56,7 +56,7 @@ static pool_t* bli_apool_pool( apool_t* apool ) return &(apool->pool); } -static bli_pthread_mutex_t* bli_apool_mutex( apool_t* apool ) +static bli_pthread_mutex_t* bli_apool_mutex( apool_t* apool ) { return &(apool->mutex); } @@ -94,44 +94,44 @@ static void bli_apool_set_def_array_len( siz_t def_array_len, apool_t* pool ) \ // ----------------------------------------------------------------------------- -void bli_apool_init +BLIS_EXPORT_BLIS void bli_apool_init ( apool_t* restrict apool ); -void bli_apool_finalize +BLIS_EXPORT_BLIS void bli_apool_finalize ( apool_t* restrict apool ); -array_t* bli_apool_checkout_array +BLIS_EXPORT_BLIS array_t* bli_apool_checkout_array ( siz_t n_threads, apool_t* restrict apool ); -void bli_apool_checkin_array +BLIS_EXPORT_BLIS void bli_apool_checkin_array ( array_t* restrict array, apool_t* restrict apool ); -pool_t* bli_apool_array_elem +BLIS_EXPORT_BLIS pool_t* bli_apool_array_elem ( siz_t index, array_t* restrict array ); -void bli_apool_grow +BLIS_EXPORT_BLIS void bli_apool_grow ( siz_t num_blocks_add, apool_t* restrict apool ); -void bli_apool_alloc_block +BLIS_EXPORT_BLIS void bli_apool_alloc_block ( siz_t num_elem, array_t** restrict array_p ); -void bli_apool_free_block +BLIS_EXPORT_BLIS void bli_apool_free_block ( array_t* restrict array ); diff --git a/frame/base/bli_arch.c b/frame/base/bli_arch.c index 9cbbade72..09388da0d 100644 --- a/frame/base/bli_arch.c +++ b/frame/base/bli_arch.c @@ -36,6 +36,7 @@ #ifndef BLIS_CONFIGURETIME_CPUID #include "blis.h" #else + #define BLIS_EXPORT_BLIS #include "bli_system.h" #include "bli_type_defs.h" #include "bli_arch.h" diff --git a/frame/base/bli_arch.h b/frame/base/bli_arch.h index 4299a12a0..42a021806 100644 --- a/frame/base/bli_arch.h +++ b/frame/base/bli_arch.h @@ -35,12 +35,12 @@ #ifndef BLIS_ARCH_H #define BLIS_ARCH_H -arch_t bli_arch_query_id( void ); +BLIS_EXPORT_BLIS arch_t bli_arch_query_id( void ); -void bli_arch_set_id_once( void ); -void bli_arch_set_id( void ); +BLIS_EXPORT_BLIS void bli_arch_set_id_once( void ); +BLIS_EXPORT_BLIS void bli_arch_set_id( void ); -char* bli_arch_string( arch_t id ); +BLIS_EXPORT_BLIS char* bli_arch_string( arch_t id ); #endif diff --git a/frame/base/bli_array.h b/frame/base/bli_array.h index cb6db0340..e74b7eca4 100644 --- a/frame/base/bli_array.h +++ b/frame/base/bli_array.h @@ -85,28 +85,28 @@ static void bli_array_set_elem_size( siz_t elem_size, array_t* array ) \ // ----------------------------------------------------------------------------- -void bli_array_init +BLIS_EXPORT_BLIS void bli_array_init ( const siz_t num_elem, const siz_t elem_size, array_t* restrict array ); -void bli_array_resize +BLIS_EXPORT_BLIS void bli_array_resize ( const siz_t num_elem_new, array_t* restrict array ); -void bli_array_finalize +BLIS_EXPORT_BLIS void bli_array_finalize ( array_t* restrict array ); -void* bli_array_elem +BLIS_EXPORT_BLIS void* bli_array_elem ( const siz_t index, array_t* restrict array ); -void bli_array_set_elem +BLIS_EXPORT_BLIS void bli_array_set_elem ( void* restrict elem, const siz_t index, diff --git a/frame/base/bli_blksz.h b/frame/base/bli_blksz.h index 15280ca18..5ca441a29 100644 --- a/frame/base/bli_blksz.h +++ b/frame/base/bli_blksz.h @@ -186,7 +186,7 @@ static void bli_blksz_scale_def_max // ----------------------------------------------------------------------------- -blksz_t* bli_blksz_create_ed +BLIS_EXPORT_BLIS blksz_t* bli_blksz_create_ed ( dim_t b_s, dim_t be_s, dim_t b_d, dim_t be_d, @@ -194,13 +194,13 @@ blksz_t* bli_blksz_create_ed dim_t b_z, dim_t be_z ); -blksz_t* bli_blksz_create +BLIS_EXPORT_BLIS blksz_t* bli_blksz_create ( dim_t b_s, dim_t b_d, dim_t b_c, dim_t b_z, dim_t be_s, dim_t be_d, dim_t be_c, dim_t be_z ); -void bli_blksz_init_ed +BLIS_EXPORT_BLIS void bli_blksz_init_ed ( blksz_t* b, dim_t b_s, dim_t be_s, @@ -209,20 +209,20 @@ void bli_blksz_init_ed dim_t b_z, dim_t be_z ); -void bli_blksz_init +BLIS_EXPORT_BLIS void bli_blksz_init ( blksz_t* b, dim_t b_s, dim_t b_d, dim_t b_c, dim_t b_z, dim_t be_s, dim_t be_d, dim_t be_c, dim_t be_z ); -void bli_blksz_init_easy +BLIS_EXPORT_BLIS void bli_blksz_init_easy ( blksz_t* b, dim_t b_s, dim_t b_d, dim_t b_c, dim_t b_z ); -void bli_blksz_free +BLIS_EXPORT_BLIS void bli_blksz_free ( blksz_t* b ); @@ -230,27 +230,27 @@ void bli_blksz_free // ----------------------------------------------------------------------------- #if 0 -void bli_blksz_reduce_dt_to +BLIS_EXPORT_BLIS void bli_blksz_reduce_dt_to ( num_t dt_bm, blksz_t* bmult, num_t dt_bs, blksz_t* blksz ); #endif -void bli_blksz_reduce_def_to +BLIS_EXPORT_BLIS void bli_blksz_reduce_def_to ( num_t dt_bm, blksz_t* bmult, num_t dt_bs, blksz_t* blksz ); -void bli_blksz_reduce_max_to +BLIS_EXPORT_BLIS void bli_blksz_reduce_max_to ( num_t dt_bm, blksz_t* bmult, num_t dt_bs, blksz_t* blksz ); // ----------------------------------------------------------------------------- -dim_t bli_determine_blocksize +BLIS_EXPORT_BLIS dim_t bli_determine_blocksize ( dir_t direct, dim_t i, @@ -260,7 +260,7 @@ dim_t bli_determine_blocksize cntx_t* cntx ); -dim_t bli_determine_blocksize_f +BLIS_EXPORT_BLIS dim_t bli_determine_blocksize_f ( dim_t i, dim_t dim, @@ -269,7 +269,7 @@ dim_t bli_determine_blocksize_f cntx_t* cntx ); -dim_t bli_determine_blocksize_b +BLIS_EXPORT_BLIS dim_t bli_determine_blocksize_b ( dim_t i, dim_t dim, @@ -278,7 +278,7 @@ dim_t bli_determine_blocksize_b cntx_t* cntx ); -dim_t bli_determine_blocksize_f_sub +BLIS_EXPORT_BLIS dim_t bli_determine_blocksize_f_sub ( dim_t i, dim_t dim, @@ -286,7 +286,7 @@ dim_t bli_determine_blocksize_f_sub dim_t b_max ); -dim_t bli_determine_blocksize_b_sub +BLIS_EXPORT_BLIS dim_t bli_determine_blocksize_b_sub ( dim_t i, dim_t dim, diff --git a/frame/base/bli_check.h b/frame/base/bli_check.h index 90de609ad..2bbbcf31a 100644 --- a/frame/base/bli_check.h +++ b/frame/base/bli_check.h @@ -34,84 +34,84 @@ */ -err_t bli_check_error_code_helper( gint_t code, char* file, guint_t line ); +BLIS_EXPORT_BLIS err_t bli_check_error_code_helper( gint_t code, char* file, guint_t line ); -err_t bli_check_valid_error_level( errlev_t level ); +BLIS_EXPORT_BLIS err_t bli_check_valid_error_level( errlev_t level ); -err_t bli_check_null_pointer( void* ptr ); +BLIS_EXPORT_BLIS err_t bli_check_null_pointer( void* ptr ); -err_t bli_check_valid_side( side_t side ); -err_t bli_check_valid_uplo( uplo_t uplo ); -err_t bli_check_valid_trans( trans_t trans ); -err_t bli_check_valid_diag( diag_t diag ); -err_t bli_check_nonunit_diag( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_valid_side( side_t side ); +BLIS_EXPORT_BLIS err_t bli_check_valid_uplo( uplo_t uplo ); +BLIS_EXPORT_BLIS err_t bli_check_valid_trans( trans_t trans ); +BLIS_EXPORT_BLIS err_t bli_check_valid_diag( diag_t diag ); +BLIS_EXPORT_BLIS err_t bli_check_nonunit_diag( obj_t* a ); -err_t bli_check_valid_datatype( num_t dt ); -err_t bli_check_object_valid_datatype( obj_t* a ); -err_t bli_check_noninteger_datatype( num_t dt ); -err_t bli_check_noninteger_object( obj_t* a ); -err_t bli_check_nonconstant_datatype( num_t dt ); -err_t bli_check_nonconstant_object( obj_t* a ); -err_t bli_check_floating_datatype( num_t dt ); -err_t bli_check_floating_object( obj_t* a ); -err_t bli_check_real_datatype( num_t dt ); -err_t bli_check_real_object( obj_t* a ); -err_t bli_check_integer_datatype( num_t dt ); -err_t bli_check_integer_object( obj_t* a ); -err_t bli_check_consistent_datatypes( num_t dt_a, num_t dt_b ); -err_t bli_check_consistent_object_datatypes( obj_t* a, obj_t* b ); -err_t bli_check_datatype_real_proj_of( num_t dt_c, num_t dt_r ); -err_t bli_check_object_real_proj_of( obj_t* c, obj_t* r ); -err_t bli_check_real_valued_object( obj_t* a ); -err_t bli_check_consistent_precisions( num_t dt_a, num_t dt_b ); -err_t bli_check_consistent_object_precisions( obj_t* a, obj_t* b ); +BLIS_EXPORT_BLIS err_t bli_check_valid_datatype( num_t dt ); +BLIS_EXPORT_BLIS err_t bli_check_object_valid_datatype( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_noninteger_datatype( num_t dt ); +BLIS_EXPORT_BLIS err_t bli_check_noninteger_object( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_nonconstant_datatype( num_t dt ); +BLIS_EXPORT_BLIS err_t bli_check_nonconstant_object( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_floating_datatype( num_t dt ); +BLIS_EXPORT_BLIS err_t bli_check_floating_object( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_real_datatype( num_t dt ); +BLIS_EXPORT_BLIS err_t bli_check_real_object( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_integer_datatype( num_t dt ); +BLIS_EXPORT_BLIS err_t bli_check_integer_object( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_consistent_datatypes( num_t dt_a, num_t dt_b ); +BLIS_EXPORT_BLIS err_t bli_check_consistent_object_datatypes( obj_t* a, obj_t* b ); +BLIS_EXPORT_BLIS err_t bli_check_datatype_real_proj_of( num_t dt_c, num_t dt_r ); +BLIS_EXPORT_BLIS err_t bli_check_object_real_proj_of( obj_t* c, obj_t* r ); +BLIS_EXPORT_BLIS err_t bli_check_real_valued_object( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_consistent_precisions( num_t dt_a, num_t dt_b ); +BLIS_EXPORT_BLIS err_t bli_check_consistent_object_precisions( obj_t* a, obj_t* b ); -err_t bli_check_conformal_dims( obj_t* a, obj_t* b ); -err_t bli_check_level3_dims( obj_t* a, obj_t* b, obj_t* c ); -err_t bli_check_scalar_object( obj_t* a ); -err_t bli_check_vector_object( obj_t* a ); -err_t bli_check_matrix_object( obj_t* a ); -err_t bli_check_equal_vector_lengths( obj_t* x, obj_t* y ); -err_t bli_check_square_object( obj_t* a ); -err_t bli_check_object_length_equals( obj_t* a, dim_t m ); -err_t bli_check_object_width_equals( obj_t* a, dim_t n ); -err_t bli_check_vector_dim_equals( obj_t* a, dim_t n ); -err_t bli_check_object_diag_offset_equals( obj_t* a, doff_t offset ); +BLIS_EXPORT_BLIS err_t bli_check_conformal_dims( obj_t* a, obj_t* b ); +BLIS_EXPORT_BLIS err_t bli_check_level3_dims( obj_t* a, obj_t* b, obj_t* c ); +BLIS_EXPORT_BLIS err_t bli_check_scalar_object( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_vector_object( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_matrix_object( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_equal_vector_lengths( obj_t* x, obj_t* y ); +BLIS_EXPORT_BLIS err_t bli_check_square_object( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_object_length_equals( obj_t* a, dim_t m ); +BLIS_EXPORT_BLIS err_t bli_check_object_width_equals( obj_t* a, dim_t n ); +BLIS_EXPORT_BLIS err_t bli_check_vector_dim_equals( obj_t* a, dim_t n ); +BLIS_EXPORT_BLIS err_t bli_check_object_diag_offset_equals( obj_t* a, doff_t offset ); -err_t bli_check_matrix_strides( dim_t m, dim_t n, inc_t rs, inc_t cs, inc_t is ); +BLIS_EXPORT_BLIS err_t bli_check_matrix_strides( dim_t m, dim_t n, inc_t rs, inc_t cs, inc_t is ); -err_t bli_check_general_object( obj_t* a ); -err_t bli_check_hermitian_object( obj_t* a ); -err_t bli_check_symmetric_object( obj_t* a ); -err_t bli_check_triangular_object( obj_t* a ); -err_t bli_check_object_struc( obj_t* a, struc_t struc ); +BLIS_EXPORT_BLIS err_t bli_check_general_object( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_hermitian_object( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_symmetric_object( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_triangular_object( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_object_struc( obj_t* a, struc_t struc ); -err_t bli_check_upper_or_lower_object( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_upper_or_lower_object( obj_t* a ); -err_t bli_check_valid_3x1_subpart( subpart_t part ); -err_t bli_check_valid_1x3_subpart( subpart_t part ); -err_t bli_check_valid_3x3_subpart( subpart_t part ); +BLIS_EXPORT_BLIS err_t bli_check_valid_3x1_subpart( subpart_t part ); +BLIS_EXPORT_BLIS err_t bli_check_valid_1x3_subpart( subpart_t part ); +BLIS_EXPORT_BLIS err_t bli_check_valid_3x3_subpart( subpart_t part ); -err_t bli_check_valid_cntl( void* cntl ); +BLIS_EXPORT_BLIS err_t bli_check_valid_cntl( void* cntl ); -err_t bli_check_packm_schema_on_unpack( obj_t* a ); -err_t bli_check_packv_schema_on_unpack( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_packm_schema_on_unpack( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_packv_schema_on_unpack( obj_t* a ); -err_t bli_check_object_buffer( obj_t* a ); +BLIS_EXPORT_BLIS err_t bli_check_object_buffer( obj_t* a ); -err_t bli_check_valid_malloc_buf( void* ptr ); +BLIS_EXPORT_BLIS err_t bli_check_valid_malloc_buf( void* ptr ); -err_t bli_check_valid_packbuf( packbuf_t buf_type ); -err_t bli_check_if_exhausted_pool( pool_t* pool ); -err_t bli_check_sufficient_stack_buf_size( num_t dt, cntx_t* cntx ); -err_t bli_check_alignment_is_power_of_two( size_t align_size ); -err_t bli_check_alignment_is_mult_of_ptr_size( size_t align_size ); +BLIS_EXPORT_BLIS err_t bli_check_valid_packbuf( packbuf_t buf_type ); +BLIS_EXPORT_BLIS err_t bli_check_if_exhausted_pool( pool_t* pool ); +BLIS_EXPORT_BLIS err_t bli_check_sufficient_stack_buf_size( num_t dt, cntx_t* cntx ); +BLIS_EXPORT_BLIS err_t bli_check_alignment_is_power_of_two( size_t align_size ); +BLIS_EXPORT_BLIS err_t bli_check_alignment_is_mult_of_ptr_size( size_t align_size ); -err_t bli_check_object_alias_of( obj_t* a, obj_t* b ); +BLIS_EXPORT_BLIS err_t bli_check_object_alias_of( obj_t* a, obj_t* b ); -err_t bli_check_valid_arch_id( arch_t id ); +BLIS_EXPORT_BLIS err_t bli_check_valid_arch_id( arch_t id ); -err_t bli_check_valid_mc_mod_mult( blksz_t* mc, blksz_t* mr ); -err_t bli_check_valid_nc_mod_mult( blksz_t* nc, blksz_t* nr ); -err_t bli_check_valid_kc_mod_mult( blksz_t* kc, blksz_t* kr ); +BLIS_EXPORT_BLIS err_t bli_check_valid_mc_mod_mult( blksz_t* mc, blksz_t* mr ); +BLIS_EXPORT_BLIS err_t bli_check_valid_nc_mod_mult( blksz_t* nc, blksz_t* nr ); +BLIS_EXPORT_BLIS err_t bli_check_valid_kc_mod_mult( blksz_t* kc, blksz_t* kr ); diff --git a/frame/base/bli_clock.h b/frame/base/bli_clock.h index c17eafdd1..f4d952a08 100644 --- a/frame/base/bli_clock.h +++ b/frame/base/bli_clock.h @@ -32,7 +32,7 @@ */ -double bli_clock( void ); -double bli_clock_min_diff( double time_min, double time_start ); -double bli_clock_helper( void ); +BLIS_EXPORT_BLIS double bli_clock( void ); +BLIS_EXPORT_BLIS double bli_clock_min_diff( double time_min, double time_start ); +BLIS_EXPORT_BLIS double bli_clock_helper( void ); diff --git a/frame/base/bli_cntl.h b/frame/base/bli_cntl.h index a697f44ab..610baad15 100644 --- a/frame/base/bli_cntl.h +++ b/frame/base/bli_cntl.h @@ -60,7 +60,7 @@ typedef struct cntl_s cntl_t; // -- Control tree prototypes -- -cntl_t* bli_cntl_create_node +BLIS_EXPORT_BLIS cntl_t* bli_cntl_create_node ( rntm_t* rntm, opid_t family, @@ -70,46 +70,46 @@ cntl_t* bli_cntl_create_node cntl_t* sub_node ); -void bli_cntl_free_node +BLIS_EXPORT_BLIS void bli_cntl_free_node ( rntm_t* rntm, cntl_t* cntl ); -void bli_cntl_clear_node +BLIS_EXPORT_BLIS void bli_cntl_clear_node ( cntl_t* cntl ); // ----------------------------------------------------------------------------- -void bli_cntl_free +BLIS_EXPORT_BLIS void bli_cntl_free ( rntm_t* rntm, cntl_t* cntl, thrinfo_t* thread ); -void bli_cntl_free_w_thrinfo +BLIS_EXPORT_BLIS void bli_cntl_free_w_thrinfo ( rntm_t* rntm, cntl_t* cntl, thrinfo_t* thread ); -void bli_cntl_free_wo_thrinfo +BLIS_EXPORT_BLIS void bli_cntl_free_wo_thrinfo ( rntm_t* rntm, cntl_t* cntl ); -cntl_t* bli_cntl_copy +BLIS_EXPORT_BLIS cntl_t* bli_cntl_copy ( rntm_t* rntm, cntl_t* cntl ); -void bli_cntl_mark_family +BLIS_EXPORT_BLIS void bli_cntl_mark_family ( opid_t family, cntl_t* cntl @@ -117,7 +117,7 @@ void bli_cntl_mark_family // ----------------------------------------------------------------------------- -dim_t bli_cntl_calc_num_threads_in +BLIS_EXPORT_BLIS dim_t bli_cntl_calc_num_threads_in ( rntm_t* rntm, cntl_t* cntl diff --git a/frame/base/bli_cntx.h b/frame/base/bli_cntx.h index 450c753b6..e87794e90 100644 --- a/frame/base/bli_cntx.h +++ b/frame/base/bli_cntx.h @@ -538,18 +538,18 @@ static void bli_cntx_set_unpackm_ker_dt( void* fp, num_t dt, l1mkr_t ker_id, cnt // Function prototypes -void bli_cntx_clear( cntx_t* cntx ); +BLIS_EXPORT_BLIS void bli_cntx_clear( cntx_t* cntx ); -void bli_cntx_set_blkszs( ind_t method, dim_t n_bs, ... ); +BLIS_EXPORT_BLIS void bli_cntx_set_blkszs( ind_t method, dim_t n_bs, ... ); -void bli_cntx_set_ind_blkszs( ind_t method, dim_t n_bs, ... ); +BLIS_EXPORT_BLIS void bli_cntx_set_ind_blkszs( ind_t method, dim_t n_bs, ... ); -void bli_cntx_set_l3_nat_ukrs( dim_t n_ukrs, ... ); -void bli_cntx_set_l1f_kers( dim_t n_kers, ... ); -void bli_cntx_set_l1v_kers( dim_t n_kers, ... ); -void bli_cntx_set_packm_kers( dim_t n_kers, ... ); +BLIS_EXPORT_BLIS void bli_cntx_set_l3_nat_ukrs( dim_t n_ukrs, ... ); +BLIS_EXPORT_BLIS void bli_cntx_set_l1f_kers( dim_t n_kers, ... ); +BLIS_EXPORT_BLIS void bli_cntx_set_l1v_kers( dim_t n_kers, ... ); +BLIS_EXPORT_BLIS void bli_cntx_set_packm_kers( dim_t n_kers, ... ); -void bli_cntx_print( cntx_t* cntx ); +BLIS_EXPORT_BLIS void bli_cntx_print( cntx_t* cntx ); #endif diff --git a/frame/base/bli_const.h b/frame/base/bli_const.h index 1b9799482..ad088addb 100644 --- a/frame/base/bli_const.h +++ b/frame/base/bli_const.h @@ -32,6 +32,6 @@ */ -void bli_const_init( void ); -void bli_const_finalize( void ); +BLIS_EXPORT_BLIS void bli_const_init( void ); +BLIS_EXPORT_BLIS void bli_const_finalize( void ); diff --git a/frame/base/bli_cpuid.c b/frame/base/bli_cpuid.c index d7e954977..ac3346326 100644 --- a/frame/base/bli_cpuid.c +++ b/frame/base/bli_cpuid.c @@ -48,6 +48,7 @@ #ifndef BLIS_CONFIGURETIME_CPUID #include "blis.h" #else + #define BLIS_EXPORT_BLIS #include "bli_system.h" #include "bli_type_defs.h" #include "bli_cpuid.h" diff --git a/frame/base/bli_cpuid.h b/frame/base/bli_cpuid.h index 70c861e2f..93d72289f 100644 --- a/frame/base/bli_cpuid.h +++ b/frame/base/bli_cpuid.h @@ -51,31 +51,31 @@ #ifndef BLIS_CPUID_H #define BLIS_CPUID_H -arch_t bli_cpuid_query_id( void ); +BLIS_EXPORT_BLIS arch_t bli_cpuid_query_id( void ); // Intel -bool_t bli_cpuid_is_skx( uint32_t family, uint32_t model, uint32_t features ); -bool_t bli_cpuid_is_knl( uint32_t family, uint32_t model, uint32_t features ); -bool_t bli_cpuid_is_haswell( uint32_t family, uint32_t model, uint32_t features ); -bool_t bli_cpuid_is_sandybridge( uint32_t family, uint32_t model, uint32_t features ); -bool_t bli_cpuid_is_penryn( uint32_t family, uint32_t model, uint32_t features ); +BLIS_EXPORT_BLIS bool_t bli_cpuid_is_skx( uint32_t family, uint32_t model, uint32_t features ); +BLIS_EXPORT_BLIS bool_t bli_cpuid_is_knl( uint32_t family, uint32_t model, uint32_t features ); +BLIS_EXPORT_BLIS bool_t bli_cpuid_is_haswell( uint32_t family, uint32_t model, uint32_t features ); +BLIS_EXPORT_BLIS bool_t bli_cpuid_is_sandybridge( uint32_t family, uint32_t model, uint32_t features ); +BLIS_EXPORT_BLIS bool_t bli_cpuid_is_penryn( uint32_t family, uint32_t model, uint32_t features ); // AMD -bool_t bli_cpuid_is_zen2( uint32_t family, uint32_t model, uint32_t features ); -bool_t bli_cpuid_is_zen( uint32_t family, uint32_t model, uint32_t features ); -bool_t bli_cpuid_is_excavator( uint32_t family, uint32_t model, uint32_t features ); -bool_t bli_cpuid_is_steamroller( uint32_t family, uint32_t model, uint32_t features ); -bool_t bli_cpuid_is_piledriver( uint32_t family, uint32_t model, uint32_t features ); -bool_t bli_cpuid_is_bulldozer( uint32_t family, uint32_t model, uint32_t features ); +BLIS_EXPORT_BLIS bool_t bli_cpuid_is_zen2( uint32_t family, uint32_t model, uint32_t features ); +BLIS_EXPORT_BLIS bool_t bli_cpuid_is_zen( uint32_t family, uint32_t model, uint32_t features ); +BLIS_EXPORT_BLIS bool_t bli_cpuid_is_excavator( uint32_t family, uint32_t model, uint32_t features ); +BLIS_EXPORT_BLIS bool_t bli_cpuid_is_steamroller( uint32_t family, uint32_t model, uint32_t features ); +BLIS_EXPORT_BLIS bool_t bli_cpuid_is_piledriver( uint32_t family, uint32_t model, uint32_t features ); +BLIS_EXPORT_BLIS bool_t bli_cpuid_is_bulldozer( uint32_t family, uint32_t model, uint32_t features ); // ARM -bool_t bli_cpuid_is_thunderx2( uint32_t model, uint32_t part, uint32_t features ); -bool_t bli_cpuid_is_cortexa57( uint32_t model, uint32_t part, uint32_t features ); -bool_t bli_cpuid_is_cortexa53( uint32_t model, uint32_t part, uint32_t features ); -bool_t bli_cpuid_is_cortexa15( uint32_t model, uint32_t part, uint32_t features ); -bool_t bli_cpuid_is_cortexa9( uint32_t model, uint32_t part, uint32_t features ); +BLIS_EXPORT_BLIS bool_t bli_cpuid_is_thunderx2( uint32_t model, uint32_t part, uint32_t features ); +BLIS_EXPORT_BLIS bool_t bli_cpuid_is_cortexa57( uint32_t model, uint32_t part, uint32_t features ); +BLIS_EXPORT_BLIS bool_t bli_cpuid_is_cortexa53( uint32_t model, uint32_t part, uint32_t features ); +BLIS_EXPORT_BLIS bool_t bli_cpuid_is_cortexa15( uint32_t model, uint32_t part, uint32_t features ); +BLIS_EXPORT_BLIS bool_t bli_cpuid_is_cortexa9( uint32_t model, uint32_t part, uint32_t features ); -uint32_t bli_cpuid_query( uint32_t* family, uint32_t* model, uint32_t* features ); +BLIS_EXPORT_BLIS uint32_t bli_cpuid_query( uint32_t* family, uint32_t* model, uint32_t* features ); // ----------------------------------------------------------------------------- diff --git a/frame/base/bli_error.c b/frame/base/bli_error.c index 54677ae27..eb11bce92 100644 --- a/frame/base/bli_error.c +++ b/frame/base/bli_error.c @@ -143,7 +143,7 @@ errlev_t bli_error_checking_level( void ) return bli_err_chk_level; } -void bli_error_checking_level_set( errlev_t new_level ) +BLIS_EXPORT_BLIS void bli_error_checking_level_set( errlev_t new_level ) { err_t e_val; diff --git a/frame/base/bli_error.h b/frame/base/bli_error.h index bb624a5dc..d0b8101a6 100644 --- a/frame/base/bli_error.h +++ b/frame/base/bli_error.h @@ -33,13 +33,13 @@ */ -void bli_print_msg( char* str, char* file, guint_t line ); -void bli_abort( void ); +BLIS_EXPORT_BLIS void bli_print_msg( char* str, char* file, guint_t line ); +BLIS_EXPORT_BLIS void bli_abort( void ); -errlev_t bli_error_checking_level( void ); -void bli_error_checking_level_set( errlev_t new_level ); +BLIS_EXPORT_BLIS errlev_t bli_error_checking_level( void ); +BLIS_EXPORT_BLIS void bli_error_checking_level_set( errlev_t new_level ); -bool_t bli_error_checking_is_enabled( void ); +BLIS_EXPORT_BLIS bool_t bli_error_checking_is_enabled( void ); -char* bli_error_string_for_code( gint_t code ); +BLIS_EXPORT_BLIS char* bli_error_string_for_code( gint_t code ); diff --git a/frame/base/bli_func.h b/frame/base/bli_func.h index 0f927ad81..aa9186279 100644 --- a/frame/base/bli_func.h +++ b/frame/base/bli_func.h @@ -70,7 +70,7 @@ static void bli_func_copy_dt // ----------------------------------------------------------------------------- -func_t* bli_func_create +BLIS_EXPORT_BLIS func_t* bli_func_create ( void* ptr_s, void* ptr_d, @@ -78,7 +78,7 @@ func_t* bli_func_create void* ptr_z ); -void bli_func_init +BLIS_EXPORT_BLIS void bli_func_init ( func_t* f, void* ptr_s, @@ -87,16 +87,16 @@ void bli_func_init void* ptr_z ); -void bli_func_init_null +BLIS_EXPORT_BLIS void bli_func_init_null ( func_t* f ); -void bli_func_free( func_t* f ); +BLIS_EXPORT_BLIS void bli_func_free( func_t* f ); // ----------------------------------------------------------------------------- -bool_t bli_func_is_null_dt( num_t dt, +BLIS_EXPORT_BLIS bool_t bli_func_is_null_dt( num_t dt, func_t* f ); -bool_t bli_func_is_null( func_t* f ); +BLIS_EXPORT_BLIS bool_t bli_func_is_null( func_t* f ); diff --git a/frame/base/bli_getopt.c b/frame/base/bli_getopt.c index 184439db5..2d39f2e3a 100644 --- a/frame/base/bli_getopt.c +++ b/frame/base/bli_getopt.c @@ -37,7 +37,7 @@ static const char OPT_MARKER = '-'; -void bli_getopt_init_state( int opterr, getopt_t* state ) +BLIS_EXPORT_BLIS void bli_getopt_init_state( int opterr, getopt_t* state ) { state->optarg = NULL; state->optind = 1; diff --git a/frame/base/bli_getopt.h b/frame/base/bli_getopt.h index 215df82f7..1b5a7a002 100644 --- a/frame/base/bli_getopt.h +++ b/frame/base/bli_getopt.h @@ -40,7 +40,7 @@ typedef struct getopt_s int optopt; } getopt_t; -void bli_getopt_init_state( int opterr, getopt_t* state ); +BLIS_EXPORT_BLIS void bli_getopt_init_state( int opterr, getopt_t* state ); -int bli_getopt( int argc, char** const argv, const char* optstring, getopt_t* state ); +BLIS_EXPORT_BLIS int bli_getopt( int argc, char** const argv, const char* optstring, getopt_t* state ); diff --git a/frame/base/bli_gks.h b/frame/base/bli_gks.h index a87a07136..350619f31 100644 --- a/frame/base/bli_gks.h +++ b/frame/base/bli_gks.h @@ -35,30 +35,30 @@ #ifndef BLIS_GKS_H #define BLIS_GKS_H -arch_t bli_arch_query_id( void ); +BLIS_EXPORT_BLIS arch_t bli_arch_query_id( void ); // ----------------------------------------------------------------------------- -void bli_gks_init( void ); -void bli_gks_finalize( void ); +BLIS_EXPORT_BLIS void bli_gks_init( void ); +BLIS_EXPORT_BLIS void bli_gks_finalize( void ); -void bli_gks_init_index( void ); +BLIS_EXPORT_BLIS void bli_gks_init_index( void ); -cntx_t* bli_gks_lookup_nat_cntx( arch_t id ); -cntx_t* bli_gks_lookup_ind_cntx( arch_t id, ind_t ind ); -void bli_gks_register_cntx( arch_t id, void* nat_fp, void* ref_fp, void* ind_fp ); +BLIS_EXPORT_BLIS cntx_t* bli_gks_lookup_nat_cntx( arch_t id ); +BLIS_EXPORT_BLIS cntx_t* bli_gks_lookup_ind_cntx( arch_t id, ind_t ind ); +BLIS_EXPORT_BLIS void bli_gks_register_cntx( arch_t id, void* nat_fp, void* ref_fp, void* ind_fp ); -cntx_t* bli_gks_query_cntx( void ); -cntx_t* bli_gks_query_nat_cntx( void ); -cntx_t* bli_gks_query_cntx_noinit( void ); -cntx_t* bli_gks_query_ind_cntx( ind_t ind, num_t dt ); +BLIS_EXPORT_BLIS cntx_t* bli_gks_query_cntx( void ); +BLIS_EXPORT_BLIS cntx_t* bli_gks_query_nat_cntx( void ); +BLIS_EXPORT_BLIS cntx_t* bli_gks_query_cntx_noinit( void ); +BLIS_EXPORT_BLIS cntx_t* bli_gks_query_ind_cntx( ind_t ind, num_t dt ); -void bli_gks_init_ref_cntx( cntx_t* cntx ); +BLIS_EXPORT_BLIS void bli_gks_init_ref_cntx( cntx_t* cntx ); -bool_t bli_gks_cntx_l3_nat_ukr_is_ref( num_t dt, l3ukr_t ukr_id, cntx_t* cntx ); +BLIS_EXPORT_BLIS bool_t bli_gks_cntx_l3_nat_ukr_is_ref( num_t dt, l3ukr_t ukr_id, cntx_t* cntx ); -char* bli_gks_l3_ukr_impl_string( l3ukr_t ukr, ind_t method, num_t dt ); -kimpl_t bli_gks_l3_ukr_impl_type( l3ukr_t ukr, ind_t method, num_t dt ); +BLIS_EXPORT_BLIS char* bli_gks_l3_ukr_impl_string( l3ukr_t ukr, ind_t method, num_t dt ); +BLIS_EXPORT_BLIS kimpl_t bli_gks_l3_ukr_impl_type( l3ukr_t ukr, ind_t method, num_t dt ); //char* bli_gks_l3_ukr_avail_impl_string( l3ukr_t ukr, num_t dt ); diff --git a/frame/base/bli_info.h b/frame/base/bli_info.h index 2addc0c55..8f7869e51 100644 --- a/frame/base/bli_info.h +++ b/frame/base/bli_info.h @@ -36,37 +36,37 @@ // -- General library information ---------------------------------------------- -char* bli_info_get_version_str( void ); -char* bli_info_get_int_type_size_str( void ); +BLIS_EXPORT_BLIS char* bli_info_get_version_str( void ); +BLIS_EXPORT_BLIS char* bli_info_get_int_type_size_str( void ); // -- General configuration-related -------------------------------------------- -gint_t bli_info_get_int_type_size( void ); -gint_t bli_info_get_num_fp_types( void ); -gint_t bli_info_get_max_type_size( void ); -gint_t bli_info_get_page_size( void ); -gint_t bli_info_get_simd_num_registers( void ); -gint_t bli_info_get_simd_size( void ); -gint_t bli_info_get_simd_align_size( void ); -gint_t bli_info_get_stack_buf_max_size( void ); -gint_t bli_info_get_stack_buf_align_size( void ); -gint_t bli_info_get_heap_addr_align_size( void ); -gint_t bli_info_get_heap_stride_align_size( void ); -gint_t bli_info_get_pool_addr_align_size( void ); -gint_t bli_info_get_enable_stay_auto_init( void ); -gint_t bli_info_get_enable_blas( void ); -gint_t bli_info_get_enable_cblas( void ); -gint_t bli_info_get_blas_int_type_size( void ); -gint_t bli_info_get_enable_pba_pools( void ); -gint_t bli_info_get_enable_sba_pools( void ); -gint_t bli_info_get_enable_threading( void ); -gint_t bli_info_get_enable_openmp( void ); -gint_t bli_info_get_enable_pthreads( void ); -gint_t bli_info_get_thread_part_jrir_slab( void ); -gint_t bli_info_get_thread_part_jrir_rr( void ); -gint_t bli_info_get_enable_memkind( void ); -gint_t bli_info_get_enable_sandbox( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_int_type_size( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_num_fp_types( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_max_type_size( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_page_size( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_simd_num_registers( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_simd_size( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_simd_align_size( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_stack_buf_max_size( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_stack_buf_align_size( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_heap_addr_align_size( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_heap_stride_align_size( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_pool_addr_align_size( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_enable_stay_auto_init( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_enable_blas( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_enable_cblas( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_blas_int_type_size( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_enable_pba_pools( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_enable_sba_pools( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_enable_threading( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_enable_openmp( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_enable_pthreads( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_thread_part_jrir_slab( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_thread_part_jrir_rr( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_enable_memkind( void ); +BLIS_EXPORT_BLIS gint_t bli_info_get_enable_sandbox( void ); // -- Kernel implementation-related -------------------------------------------- @@ -74,23 +74,23 @@ gint_t bli_info_get_enable_sandbox( void ); // -- Level-3 kernel definitions -- -char* bli_info_get_gemm_ukr_impl_string( ind_t method, num_t dt ); -char* bli_info_get_gemmtrsm_l_ukr_impl_string( ind_t method, num_t dt ); -char* bli_info_get_gemmtrsm_u_ukr_impl_string( ind_t method, num_t dt ); -char* bli_info_get_trsm_l_ukr_impl_string( ind_t method, num_t dt ); -char* bli_info_get_trsm_u_ukr_impl_string( ind_t method, num_t dt ); +BLIS_EXPORT_BLIS char* bli_info_get_gemm_ukr_impl_string( ind_t method, num_t dt ); +BLIS_EXPORT_BLIS char* bli_info_get_gemmtrsm_l_ukr_impl_string( ind_t method, num_t dt ); +BLIS_EXPORT_BLIS char* bli_info_get_gemmtrsm_u_ukr_impl_string( ind_t method, num_t dt ); +BLIS_EXPORT_BLIS char* bli_info_get_trsm_l_ukr_impl_string( ind_t method, num_t dt ); +BLIS_EXPORT_BLIS char* bli_info_get_trsm_u_ukr_impl_string( ind_t method, num_t dt ); // -- BLIS implementation query (level-3) -------------------------------------- -char* bli_info_get_gemm_impl_string( num_t dt ); -char* bli_info_get_hemm_impl_string( num_t dt ); -char* bli_info_get_herk_impl_string( num_t dt ); -char* bli_info_get_her2k_impl_string( num_t dt ); -char* bli_info_get_symm_impl_string( num_t dt ); -char* bli_info_get_syrk_impl_string( num_t dt ); -char* bli_info_get_syr2k_impl_string( num_t dt ); -char* bli_info_get_trmm_impl_string( num_t dt ); -char* bli_info_get_trmm3_impl_string( num_t dt ); -char* bli_info_get_trsm_impl_string( num_t dt ); +BLIS_EXPORT_BLIS char* bli_info_get_gemm_impl_string( num_t dt ); +BLIS_EXPORT_BLIS char* bli_info_get_hemm_impl_string( num_t dt ); +BLIS_EXPORT_BLIS char* bli_info_get_herk_impl_string( num_t dt ); +BLIS_EXPORT_BLIS char* bli_info_get_her2k_impl_string( num_t dt ); +BLIS_EXPORT_BLIS char* bli_info_get_symm_impl_string( num_t dt ); +BLIS_EXPORT_BLIS char* bli_info_get_syrk_impl_string( num_t dt ); +BLIS_EXPORT_BLIS char* bli_info_get_syr2k_impl_string( num_t dt ); +BLIS_EXPORT_BLIS char* bli_info_get_trmm_impl_string( num_t dt ); +BLIS_EXPORT_BLIS char* bli_info_get_trmm3_impl_string( num_t dt ); +BLIS_EXPORT_BLIS char* bli_info_get_trsm_impl_string( num_t dt ); diff --git a/frame/base/bli_init.h b/frame/base/bli_init.h index b37a8e342..9f45e2b03 100644 --- a/frame/base/bli_init.h +++ b/frame/base/bli_init.h @@ -32,15 +32,15 @@ */ -void bli_init( void ); -void bli_finalize( void ); +BLIS_EXPORT_BLIS void bli_init( void ); +BLIS_EXPORT_BLIS void bli_finalize( void ); -void bli_init_auto( void ); -void bli_finalize_auto( void ); +BLIS_EXPORT_BLIS void bli_init_auto( void ); +BLIS_EXPORT_BLIS void bli_finalize_auto( void ); -void bli_init_apis( void ); -void bli_finalize_apis( void ); +BLIS_EXPORT_BLIS void bli_init_apis( void ); +BLIS_EXPORT_BLIS void bli_finalize_apis( void ); -void bli_init_once( void ); -void bli_finalize_once( void ); +BLIS_EXPORT_BLIS void bli_init_once( void ); +BLIS_EXPORT_BLIS void bli_finalize_once( void ); diff --git a/frame/base/bli_machval.c b/frame/base/bli_machval.c index e26c5a4d8..495d20b01 100644 --- a/frame/base/bli_machval.c +++ b/frame/base/bli_machval.c @@ -72,7 +72,7 @@ void bli_machval( machval_t mval, #undef GENTFUNCR #define GENTFUNCR( ctype_v, ctype_vr, chv, chvr, opname, varname ) \ \ -void PASTEMAC(chv,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(chv,opname) \ ( \ machval_t mval, \ void* v \ diff --git a/frame/base/bli_machval.h b/frame/base/bli_machval.h index 07606da3f..034af7505 100644 --- a/frame/base/bli_machval.h +++ b/frame/base/bli_machval.h @@ -39,7 +39,7 @@ // // Prototype object-based interface. // -void bli_machval( machval_t mval, +BLIS_EXPORT_BLIS void bli_machval( machval_t mval, obj_t* v ); @@ -49,7 +49,7 @@ void bli_machval( machval_t mval, #undef GENTPROTR #define GENTPROTR( ctype_v, ctype_vr, chv, chvr, opname ) \ \ -void PASTEMAC(chv,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(chv,opname) \ ( \ machval_t mval, \ void* v \ diff --git a/frame/base/bli_malloc.c b/frame/base/bli_malloc.c index 4e9b10ce3..afb82fcdf 100644 --- a/frame/base/bli_malloc.c +++ b/frame/base/bli_malloc.c @@ -249,7 +249,7 @@ void bli_ffree_noalign // ----------------------------------------------------------------------------- -void bli_fmalloc_align_check +BLIS_EXPORT_BLIS void bli_fmalloc_align_check ( malloc_ft f, size_t size, diff --git a/frame/base/bli_malloc.h b/frame/base/bli_malloc.h index 226f732f5..545e4e2e7 100644 --- a/frame/base/bli_malloc.h +++ b/frame/base/bli_malloc.h @@ -40,25 +40,25 @@ typedef void (*free_ft) ( void* p ); // ----------------------------------------------------------------------------- #if 0 -void* bli_malloc_pool( size_t size ); -void bli_free_pool( void* p ); +BLIS_EXPORT_BLIS void* bli_malloc_pool( size_t size ); +BLIS_EXPORT_BLIS void bli_free_pool( void* p ); #endif -void* bli_malloc_intl( size_t size ); -void* bli_calloc_intl( size_t size ); -void bli_free_intl( void* p ); +BLIS_EXPORT_BLIS void* bli_malloc_intl( size_t size ); +BLIS_EXPORT_BLIS void* bli_calloc_intl( size_t size ); +BLIS_EXPORT_BLIS void bli_free_intl( void* p ); -void* bli_malloc_user( size_t size ); -void bli_free_user( void* p ); +BLIS_EXPORT_BLIS void* bli_malloc_user( size_t size ); +BLIS_EXPORT_BLIS void bli_free_user( void* p ); // ----------------------------------------------------------------------------- -void* bli_fmalloc_align( malloc_ft f, size_t size, size_t align_size ); -void bli_ffree_align( free_ft f, void* p ); +BLIS_EXPORT_BLIS void* bli_fmalloc_align( malloc_ft f, size_t size, size_t align_size ); +BLIS_EXPORT_BLIS void bli_ffree_align( free_ft f, void* p ); -void* bli_fmalloc_noalign( malloc_ft f, size_t size ); -void bli_ffree_noalign( free_ft f, void* p ); +BLIS_EXPORT_BLIS void* bli_fmalloc_noalign( malloc_ft f, size_t size ); +BLIS_EXPORT_BLIS void bli_ffree_noalign( free_ft f, void* p ); -void bli_fmalloc_align_check( malloc_ft f, size_t size, size_t align_size ); -void bli_fmalloc_post_check( void* p ); +BLIS_EXPORT_BLIS void bli_fmalloc_align_check( malloc_ft f, size_t size, size_t align_size ); +BLIS_EXPORT_BLIS void bli_fmalloc_post_check( void* p ); diff --git a/frame/base/bli_mbool.h b/frame/base/bli_mbool.h index 4cd4a78fb..01d782549 100644 --- a/frame/base/bli_mbool.h +++ b/frame/base/bli_mbool.h @@ -50,7 +50,7 @@ static void bli_mbool_set_dt( bool_t val, num_t dt, mbool_t* mb ) // ----------------------------------------------------------------------------- -mbool_t* bli_mbool_create +BLIS_EXPORT_BLIS mbool_t* bli_mbool_create ( bool_t b_s, bool_t b_d, @@ -58,7 +58,7 @@ mbool_t* bli_mbool_create bool_t b_z ); -void bli_mbool_init +BLIS_EXPORT_BLIS void bli_mbool_init ( mbool_t* b, bool_t b_s, @@ -67,5 +67,5 @@ void bli_mbool_init bool_t b_z ); -void bli_mbool_free( mbool_t* b ); +BLIS_EXPORT_BLIS void bli_mbool_free( mbool_t* b ); diff --git a/frame/base/bli_membrk.h b/frame/base/bli_membrk.h index acc026081..79ca4f4ac 100644 --- a/frame/base/bli_membrk.h +++ b/frame/base/bli_membrk.h @@ -102,18 +102,18 @@ static void bli_membrk_unlock( membrk_t* membrk ) // ----------------------------------------------------------------------------- -membrk_t* bli_membrk_query( void ); +BLIS_EXPORT_BLIS membrk_t* bli_membrk_query( void ); -void bli_membrk_init +BLIS_EXPORT_BLIS void bli_membrk_init ( cntx_t* cntx ); -void bli_membrk_finalize +BLIS_EXPORT_BLIS void bli_membrk_finalize ( void ); -void bli_membrk_acquire_m +BLIS_EXPORT_BLIS void bli_membrk_acquire_m ( rntm_t* rntm, siz_t req_size, @@ -121,18 +121,18 @@ void bli_membrk_acquire_m mem_t* mem ); -void bli_membrk_release +BLIS_EXPORT_BLIS void bli_membrk_release ( rntm_t* rntm, mem_t* mem ); -void bli_membrk_rntm_set_membrk +BLIS_EXPORT_BLIS void bli_membrk_rntm_set_membrk ( rntm_t* rntm ); -siz_t bli_membrk_pool_size +BLIS_EXPORT_BLIS siz_t bli_membrk_pool_size ( membrk_t* membrk, packbuf_t buf_type @@ -140,24 +140,24 @@ siz_t bli_membrk_pool_size // ---------------------------------------------------------------------------- -void bli_membrk_init_pools +BLIS_EXPORT_BLIS void bli_membrk_init_pools ( cntx_t* cntx, membrk_t* membrk ); -void bli_membrk_finalize_pools +BLIS_EXPORT_BLIS void bli_membrk_finalize_pools ( membrk_t* membrk ); -void bli_membrk_compute_pool_block_sizes +BLIS_EXPORT_BLIS void bli_membrk_compute_pool_block_sizes ( siz_t* bs_a, siz_t* bs_b, siz_t* bs_c, cntx_t* cntx ); -void bli_membrk_compute_pool_block_sizes_dt +BLIS_EXPORT_BLIS void bli_membrk_compute_pool_block_sizes_dt ( num_t dt, siz_t* bs_a, diff --git a/frame/base/bli_memsys.h b/frame/base/bli_memsys.h index be0d48e35..784d16d62 100644 --- a/frame/base/bli_memsys.h +++ b/frame/base/bli_memsys.h @@ -39,8 +39,8 @@ // ----------------------------------------------------------------------------- -void bli_memsys_init( void ); -void bli_memsys_finalize( void ); +BLIS_EXPORT_BLIS void bli_memsys_init( void ); +BLIS_EXPORT_BLIS void bli_memsys_finalize( void ); #endif diff --git a/frame/base/bli_obj.h b/frame/base/bli_obj.h index 69f1aaa80..965f33f1a 100644 --- a/frame/base/bli_obj.h +++ b/frame/base/bli_obj.h @@ -34,7 +34,7 @@ #include "bli_obj_check.h" -void bli_obj_create +BLIS_EXPORT_BLIS void bli_obj_create ( num_t dt, dim_t m, @@ -44,7 +44,7 @@ void bli_obj_create obj_t* obj ); -void bli_obj_create_with_attached_buffer +BLIS_EXPORT_BLIS void bli_obj_create_with_attached_buffer ( num_t dt, dim_t m, @@ -55,7 +55,7 @@ void bli_obj_create_with_attached_buffer obj_t* obj ); -void bli_obj_create_without_buffer +BLIS_EXPORT_BLIS void bli_obj_create_without_buffer ( num_t dt, dim_t m, @@ -63,7 +63,7 @@ void bli_obj_create_without_buffer obj_t* obj ); -void bli_obj_alloc_buffer +BLIS_EXPORT_BLIS void bli_obj_alloc_buffer ( inc_t rs, inc_t cs, @@ -71,7 +71,7 @@ void bli_obj_alloc_buffer obj_t* obj ); -void bli_obj_attach_buffer +BLIS_EXPORT_BLIS void bli_obj_attach_buffer ( void* p, inc_t rs, @@ -80,31 +80,31 @@ void bli_obj_attach_buffer obj_t* obj ); -void bli_obj_create_1x1 +BLIS_EXPORT_BLIS void bli_obj_create_1x1 ( num_t dt, obj_t* obj ); -void bli_obj_create_1x1_with_attached_buffer +BLIS_EXPORT_BLIS void bli_obj_create_1x1_with_attached_buffer ( num_t dt, void* p, obj_t* obj ); -void bli_obj_create_conf_to +BLIS_EXPORT_BLIS void bli_obj_create_conf_to ( obj_t* s, obj_t* d ); -void bli_obj_free +BLIS_EXPORT_BLIS void bli_obj_free ( obj_t* obj ); -void bli_adjust_strides +BLIS_EXPORT_BLIS void bli_adjust_strides ( dim_t m, dim_t n, @@ -114,36 +114,36 @@ void bli_adjust_strides inc_t* is ); -siz_t bli_dt_size +BLIS_EXPORT_BLIS siz_t bli_dt_size ( num_t dt ); -char* bli_dt_string +BLIS_EXPORT_BLIS char* bli_dt_string ( num_t dt ); -dim_t bli_align_dim_to_mult +BLIS_EXPORT_BLIS dim_t bli_align_dim_to_mult ( dim_t dim, dim_t dim_mult ); -dim_t bli_align_dim_to_size +BLIS_EXPORT_BLIS dim_t bli_align_dim_to_size ( dim_t dim, siz_t elem_size, siz_t align_size ); -dim_t bli_align_ptr_to_size +BLIS_EXPORT_BLIS dim_t bli_align_ptr_to_size ( void* p, size_t align_size ); -void bli_obj_print +BLIS_EXPORT_BLIS void bli_obj_print ( char* label, obj_t* obj diff --git a/frame/base/bli_obj_scalar.h b/frame/base/bli_obj_scalar.h index ba890d5b7..f655ff46e 100644 --- a/frame/base/bli_obj_scalar.h +++ b/frame/base/bli_obj_scalar.h @@ -32,13 +32,13 @@ */ -void bli_obj_scalar_init_detached +BLIS_EXPORT_BLIS void bli_obj_scalar_init_detached ( num_t dt, obj_t* beta ); -void bli_obj_scalar_init_detached_copy_of +BLIS_EXPORT_BLIS void bli_obj_scalar_init_detached_copy_of ( num_t dt, conj_t conj, @@ -46,42 +46,42 @@ void bli_obj_scalar_init_detached_copy_of obj_t* beta ); -void bli_obj_scalar_detach +BLIS_EXPORT_BLIS void bli_obj_scalar_detach ( obj_t* a, obj_t* alpha ); -void bli_obj_scalar_attach +BLIS_EXPORT_BLIS void bli_obj_scalar_attach ( conj_t conj, obj_t* alpha, obj_t* a ); -void bli_obj_scalar_cast_to +BLIS_EXPORT_BLIS void bli_obj_scalar_cast_to ( num_t dt, obj_t* a ); -void bli_obj_scalar_apply_scalar +BLIS_EXPORT_BLIS void bli_obj_scalar_apply_scalar ( obj_t* alpha, obj_t* a ); -void bli_obj_scalar_reset +BLIS_EXPORT_BLIS void bli_obj_scalar_reset ( obj_t* a ); -bool_t bli_obj_scalar_has_nonzero_imag +BLIS_EXPORT_BLIS bool_t bli_obj_scalar_has_nonzero_imag ( obj_t* a ); -bool_t bli_obj_scalar_equals +BLIS_EXPORT_BLIS bool_t bli_obj_scalar_equals ( obj_t* a, obj_t* beta diff --git a/frame/base/bli_param_map.h b/frame/base/bli_param_map.h index 8ec4188ec..ac23684fe 100644 --- a/frame/base/bli_param_map.h +++ b/frame/base/bli_param_map.h @@ -36,11 +36,11 @@ // --- BLIS to BLAS/LAPACK mappings -------------------------------------------- -void bli_param_map_blis_to_netlib_side( side_t side, char* blas_side ); -void bli_param_map_blis_to_netlib_uplo( uplo_t uplo, char* blas_uplo ); -void bli_param_map_blis_to_netlib_trans( trans_t trans, char* blas_trans ); -void bli_param_map_blis_to_netlib_diag( diag_t diag, char* blas_diag ); -void bli_param_map_blis_to_netlib_machval( machval_t machval, char* blas_machval ); +BLIS_EXPORT_BLIS void bli_param_map_blis_to_netlib_side( side_t side, char* blas_side ); +BLIS_EXPORT_BLIS void bli_param_map_blis_to_netlib_uplo( uplo_t uplo, char* blas_uplo ); +BLIS_EXPORT_BLIS void bli_param_map_blis_to_netlib_trans( trans_t trans, char* blas_trans ); +BLIS_EXPORT_BLIS void bli_param_map_blis_to_netlib_diag( diag_t diag, char* blas_diag ); +BLIS_EXPORT_BLIS void bli_param_map_blis_to_netlib_machval( machval_t machval, char* blas_machval ); // --- BLAS/LAPACK to BLIS mappings -------------------------------------------- @@ -107,20 +107,20 @@ static void bli_param_map_netlib_to_blis_diag( char diag, diag_t* blis_diag ) // --- BLIS char to BLIS mappings ---------------------------------------------- -void bli_param_map_char_to_blis_side( char side, side_t* blis_side ); -void bli_param_map_char_to_blis_uplo( char uplo, uplo_t* blis_uplo ); -void bli_param_map_char_to_blis_trans( char trans, trans_t* blis_trans ); -void bli_param_map_char_to_blis_conj( char conj, conj_t* blis_conj ); -void bli_param_map_char_to_blis_diag( char diag, diag_t* blis_diag ); -void bli_param_map_char_to_blis_dt( char dt, num_t* blis_dt ); +BLIS_EXPORT_BLIS void bli_param_map_char_to_blis_side( char side, side_t* blis_side ); +BLIS_EXPORT_BLIS void bli_param_map_char_to_blis_uplo( char uplo, uplo_t* blis_uplo ); +BLIS_EXPORT_BLIS void bli_param_map_char_to_blis_trans( char trans, trans_t* blis_trans ); +BLIS_EXPORT_BLIS void bli_param_map_char_to_blis_conj( char conj, conj_t* blis_conj ); +BLIS_EXPORT_BLIS void bli_param_map_char_to_blis_diag( char diag, diag_t* blis_diag ); +BLIS_EXPORT_BLIS void bli_param_map_char_to_blis_dt( char dt, num_t* blis_dt ); // --- BLIS to BLIS char mappings ---------------------------------------------- -void bli_param_map_blis_to_char_side( side_t blis_side, char* side ); -void bli_param_map_blis_to_char_uplo( uplo_t blis_uplo, char* uplo ); -void bli_param_map_blis_to_char_trans( trans_t blis_trans, char* trans ); -void bli_param_map_blis_to_char_conj( conj_t blis_conj, char* conj ); -void bli_param_map_blis_to_char_diag( diag_t blis_diag, char* diag ); -void bli_param_map_blis_to_char_dt( num_t blis_dt, char* dt ); +BLIS_EXPORT_BLIS void bli_param_map_blis_to_char_side( side_t blis_side, char* side ); +BLIS_EXPORT_BLIS void bli_param_map_blis_to_char_uplo( uplo_t blis_uplo, char* uplo ); +BLIS_EXPORT_BLIS void bli_param_map_blis_to_char_trans( trans_t blis_trans, char* trans ); +BLIS_EXPORT_BLIS void bli_param_map_blis_to_char_conj( conj_t blis_conj, char* conj ); +BLIS_EXPORT_BLIS void bli_param_map_blis_to_char_diag( diag_t blis_diag, char* diag ); +BLIS_EXPORT_BLIS void bli_param_map_blis_to_char_dt( num_t blis_dt, char* dt ); diff --git a/frame/base/bli_part.h b/frame/base/bli_part.h index 81232bccd..e2ddccc34 100644 --- a/frame/base/bli_part.h +++ b/frame/base/bli_part.h @@ -36,7 +36,7 @@ // -- Matrix partitioning ------------------------------------------------------ -void bli_acquire_mpart +BLIS_EXPORT_BLIS void bli_acquire_mpart ( dim_t i, dim_t j, @@ -49,7 +49,7 @@ void bli_acquire_mpart #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0( opname ) \ +BLIS_EXPORT_BLIS void PASTEMAC0( opname ) \ ( \ subpart_t req_part, \ dim_t i, \ @@ -69,7 +69,7 @@ GENPROT( acquire_mpart_br2tl ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0( opname ) \ +BLIS_EXPORT_BLIS void PASTEMAC0( opname ) \ ( \ dir_t direct, \ subpart_t req_part, \ @@ -103,7 +103,7 @@ GENPROT( acquire_vpart_b2f ) // -- Scalar acquisition ------------------------------------------------------- -void bli_acquire_mij +BLIS_EXPORT_BLIS void bli_acquire_mij ( dim_t i, dim_t j, @@ -111,7 +111,7 @@ void bli_acquire_mij obj_t* sub_obj ); -void bli_acquire_vi +BLIS_EXPORT_BLIS void bli_acquire_vi ( dim_t i, obj_t* obj, diff --git a/frame/base/bli_pool.h b/frame/base/bli_pool.h index 69d990edd..8802a101b 100644 --- a/frame/base/bli_pool.h +++ b/frame/base/bli_pool.h @@ -191,7 +191,7 @@ static void bli_pool_set_top_index( siz_t top_index, pool_t* pool ) \ // ----------------------------------------------------------------------------- -void bli_pool_init +BLIS_EXPORT_BLIS void bli_pool_init ( siz_t num_blocks, siz_t block_ptrs_len, @@ -201,11 +201,11 @@ void bli_pool_init free_ft free_fp, pool_t* restrict pool ); -void bli_pool_finalize +BLIS_EXPORT_BLIS void bli_pool_finalize ( pool_t* restrict pool ); -void bli_pool_reinit +BLIS_EXPORT_BLIS void bli_pool_reinit ( siz_t num_blocks_new, siz_t block_ptrs_len_new, @@ -214,47 +214,47 @@ void bli_pool_reinit pool_t* restrict pool ); -void bli_pool_checkout_block +BLIS_EXPORT_BLIS void bli_pool_checkout_block ( siz_t req_size, pblk_t* restrict block, pool_t* restrict pool ); -void bli_pool_checkin_block +BLIS_EXPORT_BLIS void bli_pool_checkin_block ( pblk_t* restrict block, pool_t* restrict pool ); -void bli_pool_grow +BLIS_EXPORT_BLIS void bli_pool_grow ( siz_t num_blocks_add, pool_t* restrict pool ); -void bli_pool_shrink +BLIS_EXPORT_BLIS void bli_pool_shrink ( siz_t num_blocks_sub, pool_t* restrict pool ); -void bli_pool_alloc_block +BLIS_EXPORT_BLIS void bli_pool_alloc_block ( siz_t block_size, siz_t align_size, malloc_ft malloc_fp, pblk_t* restrict block ); -void bli_pool_free_block +BLIS_EXPORT_BLIS void bli_pool_free_block ( free_ft free_fp, pblk_t* restrict block ); -void bli_pool_print +BLIS_EXPORT_BLIS void bli_pool_print ( pool_t* restrict pool ); -void bli_pblk_print +BLIS_EXPORT_BLIS void bli_pblk_print ( pblk_t* restrict pblk ); diff --git a/frame/base/bli_prune.h b/frame/base/bli_prune.h index 318096707..1fdb6b5ae 100644 --- a/frame/base/bli_prune.h +++ b/frame/base/bli_prune.h @@ -32,5 +32,5 @@ */ -void bli_prune_unref_mparts( obj_t* p, mdim_t mdim_p, +BLIS_EXPORT_BLIS void bli_prune_unref_mparts( obj_t* p, mdim_t mdim_p, obj_t* s, mdim_t mdim_s ); diff --git a/frame/base/bli_query.h b/frame/base/bli_query.h index 94274f1cd..fa4045b50 100644 --- a/frame/base/bli_query.h +++ b/frame/base/bli_query.h @@ -32,10 +32,10 @@ */ -bool_t bli_obj_equals( obj_t* a, +BLIS_EXPORT_BLIS bool_t bli_obj_equals( obj_t* a, obj_t* b ); -bool_t bli_obj_imag_equals( obj_t* a, +BLIS_EXPORT_BLIS bool_t bli_obj_imag_equals( obj_t* a, obj_t* b ); -bool_t bli_obj_imag_is_zero( obj_t* a ); +BLIS_EXPORT_BLIS bool_t bli_obj_imag_is_zero( obj_t* a ); diff --git a/frame/base/bli_rntm.h b/frame/base/bli_rntm.h index 4e8e74af8..8cf72aa5e 100644 --- a/frame/base/bli_rntm.h +++ b/frame/base/bli_rntm.h @@ -239,7 +239,7 @@ static void bli_rntm_init( rntm_t* rntm ) // Function prototypes -void bli_rntm_set_ways_for_op +BLIS_EXPORT_BLIS void bli_rntm_set_ways_for_op ( opid_t l3_op, side_t side, @@ -249,7 +249,7 @@ void bli_rntm_set_ways_for_op rntm_t* rntm ); -void bli_rntm_set_ways_from_rntm +BLIS_EXPORT_BLIS void bli_rntm_set_ways_from_rntm ( dim_t m, dim_t n, @@ -257,7 +257,7 @@ void bli_rntm_set_ways_from_rntm rntm_t* rntm ); -void bli_rntm_print +BLIS_EXPORT_BLIS void bli_rntm_print ( rntm_t* rntm ); diff --git a/frame/base/bli_sba.h b/frame/base/bli_sba.h index f5e36d759..b3e6b921e 100644 --- a/frame/base/bli_sba.h +++ b/frame/base/bli_sba.h @@ -35,36 +35,36 @@ #ifndef BLIS_SBA_H #define BLIS_SBA_H -apool_t* bli_sba_query( void ); +BLIS_EXPORT_BLIS apool_t* bli_sba_query( void ); // ----------------------------------------------------------------------------- -void bli_sba_init( void ); -void bli_sba_finalize( void ); +BLIS_EXPORT_BLIS void bli_sba_init( void ); +BLIS_EXPORT_BLIS void bli_sba_finalize( void ); -array_t* bli_sba_checkout_array +BLIS_EXPORT_BLIS array_t* bli_sba_checkout_array ( const siz_t n_threads ); -void bli_sba_checkin_array +BLIS_EXPORT_BLIS void bli_sba_checkin_array ( array_t* restrict array ); -void bli_sba_rntm_set_pool +BLIS_EXPORT_BLIS void bli_sba_rntm_set_pool ( siz_t index, array_t* restrict array, rntm_t* restrict rntm ); -void* bli_sba_acquire +BLIS_EXPORT_BLIS void* bli_sba_acquire ( rntm_t* restrict rntm, siz_t req_size ); -void bli_sba_release +BLIS_EXPORT_BLIS void bli_sba_release ( rntm_t* restrict rntm, void* restrict block diff --git a/frame/base/bli_setgetij.c b/frame/base/bli_setgetij.c index 744e24c27..0830b8ae8 100644 --- a/frame/base/bli_setgetij.c +++ b/frame/base/bli_setgetij.c @@ -88,7 +88,7 @@ err_t bli_setijm #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ double ar, \ double ai, \ @@ -182,7 +182,7 @@ err_t bli_getijm #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ dim_t i, \ dim_t j, \ diff --git a/frame/base/bli_setgetij.h b/frame/base/bli_setgetij.h index 9478bd76d..55ce0ee11 100644 --- a/frame/base/bli_setgetij.h +++ b/frame/base/bli_setgetij.h @@ -32,7 +32,7 @@ */ -err_t bli_setijm +BLIS_EXPORT_BLIS err_t bli_setijm ( double ar, double ai, @@ -44,7 +44,7 @@ err_t bli_setijm #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ double ar, \ double ai, \ @@ -57,7 +57,7 @@ INSERT_GENTPROT_BASIC0( setijm ) // ----------------------------------------------------------------------------- -err_t bli_getijm +BLIS_EXPORT_BLIS err_t bli_getijm ( dim_t i, dim_t j, @@ -69,7 +69,7 @@ err_t bli_getijm #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ dim_t i, \ dim_t j, \ diff --git a/frame/base/bli_setri.h b/frame/base/bli_setri.h index 1e124f419..dd6ce9f3f 100644 --- a/frame/base/bli_setri.h +++ b/frame/base/bli_setri.h @@ -34,13 +34,13 @@ // -- setr --------------------------------------------------------------------- -void bli_setrm +BLIS_EXPORT_BLIS void bli_setrm ( obj_t* alpha, obj_t* b ); -void bli_setrv +BLIS_EXPORT_BLIS void bli_setrv ( obj_t* alpha, obj_t* x @@ -48,13 +48,13 @@ void bli_setrv // -- seti --------------------------------------------------------------------- -void bli_setim +BLIS_EXPORT_BLIS void bli_setim ( obj_t* alpha, obj_t* b ); -void bli_setiv +BLIS_EXPORT_BLIS void bli_setiv ( obj_t* alpha, obj_t* x diff --git a/frame/base/bli_string.h b/frame/base/bli_string.h index 426038051..54cf3c7f6 100644 --- a/frame/base/bli_string.h +++ b/frame/base/bli_string.h @@ -32,4 +32,4 @@ */ -void bli_string_mkupper( char* s ); +BLIS_EXPORT_BLIS void bli_string_mkupper( char* s ); diff --git a/frame/base/bli_winsys.h b/frame/base/bli_winsys.h index 0ad7c408c..0c71114ad 100644 --- a/frame/base/bli_winsys.h +++ b/frame/base/bli_winsys.h @@ -33,5 +33,5 @@ */ //int bli_setenv( const char *name, const char *value, int overwrite ); -void bli_sleep( unsigned int secs ); +BLIS_EXPORT_BLIS void bli_sleep( unsigned int secs ); diff --git a/frame/base/cast/bli_castm.c b/frame/base/cast/bli_castm.c index 64db75d24..0e04dc175 100644 --- a/frame/base/cast/bli_castm.c +++ b/frame/base/cast/bli_castm.c @@ -54,7 +54,7 @@ static FUNCPTR_T GENARRAY2_ALL(ftypes,castm); // Define object-based interface. // -void bli_castm +BLIS_EXPORT_BLIS void bli_castm ( obj_t* a, obj_t* b @@ -115,7 +115,7 @@ void bli_castm #undef GENTFUNC2 #define GENTFUNC2( ctype_a, ctype_b, cha, chb, opname ) \ \ -void PASTEMAC2(cha,chb,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(cha,chb,opname) \ ( \ trans_t transa, \ dim_t m, \ @@ -219,7 +219,7 @@ INSERT_GENTFUNC2_MIXDP0( castm ) // Define object-based _check() function. // -void bli_castm_check +BLIS_EXPORT_BLIS void bli_castm_check ( obj_t* a, obj_t* b diff --git a/frame/base/cast/bli_castm.h b/frame/base/cast/bli_castm.h index 5ab13544b..ecc5d4655 100644 --- a/frame/base/cast/bli_castm.h +++ b/frame/base/cast/bli_castm.h @@ -36,7 +36,7 @@ // Prototype object-based interface. // -void bli_castm +BLIS_EXPORT_BLIS void bli_castm ( obj_t* a, obj_t* b @@ -49,7 +49,7 @@ void bli_castm #undef GENTPROT2 #define GENTPROT2( ctype_a, ctype_b, cha, chb, opname ) \ \ -void PASTEMAC2(cha,chb,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(cha,chb,opname) \ ( \ trans_t transa, \ dim_t m, \ @@ -65,7 +65,7 @@ INSERT_GENTPROT2_MIXDP0( castm ) // Prototype object-based _check() function. // -void bli_castm_check +BLIS_EXPORT_BLIS void bli_castm_check ( obj_t* a, obj_t* b diff --git a/frame/base/cast/bli_castnzm.c b/frame/base/cast/bli_castnzm.c index a50bdfc15..04b04e147 100644 --- a/frame/base/cast/bli_castnzm.c +++ b/frame/base/cast/bli_castnzm.c @@ -54,7 +54,7 @@ static FUNCPTR_T GENARRAY2_ALL(ftypes,castnzm); // Define object-based interface. // -void bli_castnzm +BLIS_EXPORT_BLIS void bli_castnzm ( obj_t* a, obj_t* b @@ -115,7 +115,7 @@ void bli_castnzm #undef GENTFUNC2 #define GENTFUNC2( ctype_a, ctype_b, cha, chb, opname ) \ \ -void PASTEMAC2(cha,chb,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(cha,chb,opname) \ ( \ trans_t transa, \ dim_t m, \ @@ -219,7 +219,7 @@ INSERT_GENTFUNC2_MIXDP0( castnzm ) // Define object-based _check() function. // -void bli_castnzm_check +BLIS_EXPORT_BLIS void bli_castnzm_check ( obj_t* a, obj_t* b diff --git a/frame/base/cast/bli_castnzm.h b/frame/base/cast/bli_castnzm.h index e4e1b1cad..bfc062485 100644 --- a/frame/base/cast/bli_castnzm.h +++ b/frame/base/cast/bli_castnzm.h @@ -36,7 +36,7 @@ // Prototype object-based interface. // -void bli_castnzm +BLIS_EXPORT_BLIS void bli_castnzm ( obj_t* a, obj_t* b @@ -49,7 +49,7 @@ void bli_castnzm #undef GENTPROT2 #define GENTPROT2( ctype_a, ctype_b, cha, chb, opname ) \ \ -void PASTEMAC2(cha,chb,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(cha,chb,opname) \ ( \ trans_t transa, \ dim_t m, \ @@ -65,7 +65,7 @@ INSERT_GENTPROT2_MIXDP0( castnzm ) // Prototype object-based _check() function. // -void bli_castnzm_check +BLIS_EXPORT_BLIS void bli_castnzm_check ( obj_t* a, obj_t* b diff --git a/frame/base/cast/bli_castv.c b/frame/base/cast/bli_castv.c index 213c960d8..f07617ac8 100644 --- a/frame/base/cast/bli_castv.c +++ b/frame/base/cast/bli_castv.c @@ -53,7 +53,7 @@ static FUNCPTR_T GENARRAY2_ALL(ftypes,castv); // Define object-based interface. // -void bli_castv +BLIS_EXPORT_BLIS void bli_castv ( obj_t* x, obj_t* y @@ -110,7 +110,7 @@ void bli_castv #undef GENTFUNC2 #define GENTFUNC2( ctype_x, ctype_y, chx, chy, opname ) \ \ -void PASTEMAC2(chx,chy,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(chx,chy,opname) \ ( \ conj_t conjx, \ dim_t n, \ @@ -173,7 +173,7 @@ INSERT_GENTFUNC2_MIXDP0( castv ) // Define object-based _check() function. // -void bli_castv_check +BLIS_EXPORT_BLIS void bli_castv_check ( obj_t* x, obj_t* y diff --git a/frame/base/cast/bli_castv.h b/frame/base/cast/bli_castv.h index eeb376a89..712b83ee9 100644 --- a/frame/base/cast/bli_castv.h +++ b/frame/base/cast/bli_castv.h @@ -36,7 +36,7 @@ // Prototype object-based interface. // -void bli_castv +BLIS_EXPORT_BLIS void bli_castv ( obj_t* x, obj_t* y @@ -49,7 +49,7 @@ void bli_castv #undef GENTPROT2 #define GENTPROT2( ctype_x, ctype_y, chx, chy, opname ) \ \ -void PASTEMAC2(chx,chy,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC2(chx,chy,opname) \ ( \ conj_t conjx, \ dim_t n, \ @@ -64,7 +64,7 @@ INSERT_GENTPROT2_MIXDP0( castv ) // Prototype object-based _check() function. // -void bli_castv_check +BLIS_EXPORT_BLIS void bli_castv_check ( obj_t* x, obj_t* y diff --git a/frame/base/cast/old/bli_cast_check.c b/frame/base/cast/old/bli_cast_check.c index b1184c8e4..7b2610a92 100644 --- a/frame/base/cast/old/bli_cast_check.c +++ b/frame/base/cast/old/bli_cast_check.c @@ -34,7 +34,7 @@ #include "blis.h" -void bli_castm_check +BLIS_EXPORT_BLIS void bli_castm_check ( obj_t* a, obj_t* b @@ -80,7 +80,7 @@ void bli_castm_check bli_check_error_code( e_val ); } -void bli_castv_check +BLIS_EXPORT_BLIS void bli_castv_check ( obj_t* x, obj_t* y diff --git a/frame/base/cast/old/bli_cast_check.h b/frame/base/cast/old/bli_cast_check.h index e963c4cfc..7b805cfce 100644 --- a/frame/base/cast/old/bli_cast_check.h +++ b/frame/base/cast/old/bli_cast_check.h @@ -32,13 +32,13 @@ */ -void bli_castm_check +BLIS_EXPORT_BLIS void bli_castm_check ( obj_t* a, obj_t* b ); -void bli_castv_check +BLIS_EXPORT_BLIS void bli_castv_check ( obj_t* x, obj_t* y diff --git a/frame/base/check/bli_obj_check.c b/frame/base/check/bli_obj_check.c index a971fa19a..0f1e86f40 100644 --- a/frame/base/check/bli_obj_check.c +++ b/frame/base/check/bli_obj_check.c @@ -34,7 +34,7 @@ #include "blis.h" -void bli_obj_create_check( num_t dt, +BLIS_EXPORT_BLIS void bli_obj_create_check( num_t dt, dim_t m, dim_t n, inc_t rs, @@ -53,7 +53,7 @@ void bli_obj_create_check( num_t dt, bli_check_error_code( e_val ); } -void bli_obj_create_without_buffer_check( num_t dt, +BLIS_EXPORT_BLIS void bli_obj_create_without_buffer_check( num_t dt, dim_t m, dim_t n, obj_t* obj ) @@ -67,7 +67,7 @@ void bli_obj_create_without_buffer_check( num_t dt, bli_check_error_code( e_val ); } -void bli_obj_alloc_buffer_check( inc_t rs, +BLIS_EXPORT_BLIS void bli_obj_alloc_buffer_check( inc_t rs, inc_t cs, inc_t is, obj_t* obj ) @@ -83,7 +83,7 @@ void bli_obj_alloc_buffer_check( inc_t rs, bli_check_error_code( e_val ); } -void bli_obj_attach_buffer_check( void* p, +BLIS_EXPORT_BLIS void bli_obj_attach_buffer_check( void* p, inc_t rs, inc_t cs, inc_t is, @@ -109,7 +109,7 @@ void bli_obj_attach_buffer_check( void* p, bli_check_error_code( e_val ); } -void bli_obj_create_scalar_check( num_t dt, +BLIS_EXPORT_BLIS void bli_obj_create_scalar_check( num_t dt, obj_t* obj ) { err_t e_val; @@ -121,7 +121,7 @@ void bli_obj_create_scalar_check( num_t dt, bli_check_error_code( e_val ); } -void bli_obj_free_check( obj_t* obj ) +BLIS_EXPORT_BLIS void bli_obj_free_check( obj_t* obj ) { //err_t e_val; @@ -131,7 +131,7 @@ void bli_obj_free_check( obj_t* obj ) //bli_check_error_code( e_val ); } -void bli_obj_create_const_check( double value, obj_t* obj ) +BLIS_EXPORT_BLIS void bli_obj_create_const_check( double value, obj_t* obj ) { err_t e_val; @@ -158,7 +158,7 @@ void bli_obj_create_const_copy_of_check( obj_t* a, obj_t* b ) } #endif -void bli_dt_size_check( num_t dt ) +BLIS_EXPORT_BLIS void bli_dt_size_check( num_t dt ) { err_t e_val; @@ -166,7 +166,7 @@ void bli_dt_size_check( num_t dt ) bli_check_error_code( e_val ); } -void bli_dt_string_check( num_t dt ) +BLIS_EXPORT_BLIS void bli_dt_string_check( num_t dt ) { err_t e_val; @@ -174,7 +174,7 @@ void bli_dt_string_check( num_t dt ) bli_check_error_code( e_val ); } -void bli_dt_union_check( num_t dt1, num_t dt2 ) +BLIS_EXPORT_BLIS void bli_dt_union_check( num_t dt1, num_t dt2 ) { err_t e_val; @@ -185,7 +185,7 @@ void bli_dt_union_check( num_t dt1, num_t dt2 ) bli_check_error_code( e_val ); } -void bli_obj_print_check( char* label, obj_t* obj ) +BLIS_EXPORT_BLIS void bli_obj_print_check( char* label, obj_t* obj ) { err_t e_val; diff --git a/frame/base/check/bli_obj_check.h b/frame/base/check/bli_obj_check.h index 201842844..48baa4a0e 100644 --- a/frame/base/check/bli_obj_check.h +++ b/frame/base/check/bli_obj_check.h @@ -32,43 +32,43 @@ */ -void bli_obj_create_check( num_t dt, +BLIS_EXPORT_BLIS void bli_obj_create_check( num_t dt, dim_t m, dim_t n, inc_t rs, inc_t cs, obj_t* obj ); -void bli_obj_create_without_buffer_check( num_t dt, +BLIS_EXPORT_BLIS void bli_obj_create_without_buffer_check( num_t dt, dim_t m, dim_t n, obj_t* obj ); -void bli_obj_alloc_buffer_check( inc_t rs, +BLIS_EXPORT_BLIS void bli_obj_alloc_buffer_check( inc_t rs, inc_t cs, inc_t is, obj_t* obj ); -void bli_obj_attach_buffer_check( void* p, +BLIS_EXPORT_BLIS void bli_obj_attach_buffer_check( void* p, inc_t rs, inc_t cs, inc_t is, obj_t* obj ); -void bli_obj_create_scalar_check( num_t dt, +BLIS_EXPORT_BLIS void bli_obj_create_scalar_check( num_t dt, obj_t* obj ); -void bli_obj_free_check( obj_t* obj ); +BLIS_EXPORT_BLIS void bli_obj_free_check( obj_t* obj ); -void bli_obj_create_const_check( double value, obj_t* obj ); +BLIS_EXPORT_BLIS void bli_obj_create_const_check( double value, obj_t* obj ); -void bli_obj_create_const_copy_of_check( obj_t* a, obj_t* b ); +BLIS_EXPORT_BLIS void bli_obj_create_const_copy_of_check( obj_t* a, obj_t* b ); -void bli_dt_size_check( num_t dt ); +BLIS_EXPORT_BLIS void bli_dt_size_check( num_t dt ); -void bli_dt_string_check( num_t dt ); +BLIS_EXPORT_BLIS void bli_dt_string_check( num_t dt ); -void bli_dt_union_check( num_t dt1, num_t dt2 ); +BLIS_EXPORT_BLIS void bli_dt_union_check( num_t dt1, num_t dt2 ); -void bli_obj_print_check( char* label, obj_t* obj ); +BLIS_EXPORT_BLIS void bli_obj_print_check( char* label, obj_t* obj ); diff --git a/frame/base/check/bli_part_check.c b/frame/base/check/bli_part_check.c index 6d9aa37b9..a50a1705d 100644 --- a/frame/base/check/bli_part_check.c +++ b/frame/base/check/bli_part_check.c @@ -34,7 +34,7 @@ #include "blis.h" -void bli_acquire_mpart_t2b_check( subpart_t requested_part, +BLIS_EXPORT_BLIS void bli_acquire_mpart_t2b_check( subpart_t requested_part, dim_t i, dim_t b, obj_t* obj, @@ -52,7 +52,7 @@ void bli_acquire_mpart_t2b_check( subpart_t requested_part, bli_check_error_code( e_val ); } -void bli_acquire_mpart_l2r_check( subpart_t requested_part, +BLIS_EXPORT_BLIS void bli_acquire_mpart_l2r_check( subpart_t requested_part, dim_t j, dim_t b, obj_t* obj, @@ -70,7 +70,7 @@ void bli_acquire_mpart_l2r_check( subpart_t requested_part, bli_check_error_code( e_val ); } -void bli_acquire_mpart_tl2br_check( subpart_t requested_part, +BLIS_EXPORT_BLIS void bli_acquire_mpart_tl2br_check( subpart_t requested_part, dim_t ij, dim_t b, obj_t* obj, diff --git a/frame/base/check/bli_part_check.h b/frame/base/check/bli_part_check.h index 2905af0e4..b0e724db1 100644 --- a/frame/base/check/bli_part_check.h +++ b/frame/base/check/bli_part_check.h @@ -32,19 +32,19 @@ */ -void bli_acquire_mpart_t2b_check( subpart_t requested_part, +BLIS_EXPORT_BLIS void bli_acquire_mpart_t2b_check( subpart_t requested_part, dim_t i, dim_t b, obj_t* obj, obj_t* sub_obj ); -void bli_acquire_mpart_l2r_check( subpart_t requested_part, +BLIS_EXPORT_BLIS void bli_acquire_mpart_l2r_check( subpart_t requested_part, dim_t j, dim_t b, obj_t* obj, obj_t* sub_obj ); -void bli_acquire_mpart_tl2br_check( subpart_t requested_part, +BLIS_EXPORT_BLIS void bli_acquire_mpart_tl2br_check( subpart_t requested_part, dim_t ij, dim_t b, obj_t* obj, diff --git a/frame/base/noopt/bli_dlamch.h b/frame/base/noopt/bli_dlamch.h index a3fcdb1b3..e23883c7e 100644 --- a/frame/base/noopt/bli_dlamch.h +++ b/frame/base/noopt/bli_dlamch.h @@ -32,4 +32,4 @@ */ -bla_double bli_dlamch( bla_character* cmach, ftnlen cmach_len ); +BLIS_EXPORT_BLIS bla_double bli_dlamch( bla_character* cmach, ftnlen cmach_len ); diff --git a/frame/base/noopt/bli_lsame.h b/frame/base/noopt/bli_lsame.h index 8968ab8b0..9f85f3c51 100644 --- a/frame/base/noopt/bli_lsame.h +++ b/frame/base/noopt/bli_lsame.h @@ -32,4 +32,4 @@ */ -bla_logical bli_lsame( bla_character* ca, bla_character* cb, ftnlen ca_len, ftnlen cb_len ); +BLIS_EXPORT_BLIS bla_logical bli_lsame( bla_character* ca, bla_character* cb, ftnlen ca_len, ftnlen cb_len ); diff --git a/frame/base/noopt/bli_slamch.h b/frame/base/noopt/bli_slamch.h index 0e041c8d8..eee97d453 100644 --- a/frame/base/noopt/bli_slamch.h +++ b/frame/base/noopt/bli_slamch.h @@ -32,4 +32,4 @@ */ -bla_real bli_slamch( bla_character* cmach, ftnlen cmach_len ); +BLIS_EXPORT_BLIS bla_real bli_slamch( bla_character* cmach, ftnlen cmach_len ); diff --git a/frame/base/proj/bli_projm.c b/frame/base/proj/bli_projm.c index 949bc2cc9..2e458cbcd 100644 --- a/frame/base/proj/bli_projm.c +++ b/frame/base/proj/bli_projm.c @@ -34,7 +34,7 @@ #include "blis.h" -void bli_projm +BLIS_EXPORT_BLIS void bli_projm ( obj_t* a, obj_t* b @@ -86,7 +86,7 @@ void bli_projm // ----------------------------------------------------------------------------- -void bli_projm_check +BLIS_EXPORT_BLIS void bli_projm_check ( obj_t* a, obj_t* b diff --git a/frame/base/proj/bli_projm.h b/frame/base/proj/bli_projm.h index b34e63dac..e93f0cab8 100644 --- a/frame/base/proj/bli_projm.h +++ b/frame/base/proj/bli_projm.h @@ -32,13 +32,13 @@ */ -void bli_projm +BLIS_EXPORT_BLIS void bli_projm ( obj_t* a, obj_t* b ); -void bli_projm_check +BLIS_EXPORT_BLIS void bli_projm_check ( obj_t* a, obj_t* b diff --git a/frame/base/proj/bli_projv.c b/frame/base/proj/bli_projv.c index 9a6587e5b..d27746f79 100644 --- a/frame/base/proj/bli_projv.c +++ b/frame/base/proj/bli_projv.c @@ -34,7 +34,7 @@ #include "blis.h" -void bli_projv +BLIS_EXPORT_BLIS void bli_projv ( obj_t* x, obj_t* y @@ -86,7 +86,7 @@ void bli_projv // ----------------------------------------------------------------------------- -void bli_projv_check +BLIS_EXPORT_BLIS void bli_projv_check ( obj_t* x, obj_t* y diff --git a/frame/base/proj/bli_projv.h b/frame/base/proj/bli_projv.h index 7c33d834f..2c53076a5 100644 --- a/frame/base/proj/bli_projv.h +++ b/frame/base/proj/bli_projv.h @@ -32,13 +32,13 @@ */ -void bli_projv +BLIS_EXPORT_BLIS void bli_projv ( obj_t* x, obj_t* y ); -void bli_projv_check +BLIS_EXPORT_BLIS void bli_projv_check ( obj_t* x, obj_t* y diff --git a/frame/base/proj/old/bli_proj_check.c b/frame/base/proj/old/bli_proj_check.c index 9ffeef653..9eb3dd4c7 100644 --- a/frame/base/proj/old/bli_proj_check.c +++ b/frame/base/proj/old/bli_proj_check.c @@ -34,7 +34,7 @@ #include "blis.h" -void bli_projm_check +BLIS_EXPORT_BLIS void bli_projm_check ( obj_t* a, obj_t* b @@ -73,7 +73,7 @@ void bli_projm_check bli_check_error_code( e_val ); } -void bli_projv_check +BLIS_EXPORT_BLIS void bli_projv_check ( obj_t* x, obj_t* y diff --git a/frame/base/proj/old/bli_proj_check.h b/frame/base/proj/old/bli_proj_check.h index b32fb6d62..6d6823bd0 100644 --- a/frame/base/proj/old/bli_proj_check.h +++ b/frame/base/proj/old/bli_proj_check.h @@ -32,13 +32,13 @@ */ -void bli_projm_check +BLIS_EXPORT_BLIS void bli_projm_check ( obj_t* a, obj_t* b ); -void bli_projv_check +BLIS_EXPORT_BLIS void bli_projv_check ( obj_t* x, obj_t* y diff --git a/frame/compat/attic/bla_gbmv.c b/frame/compat/attic/bla_gbmv.c index 0d903fa43..09f01d16f 100644 --- a/frame/compat/attic/bla_gbmv.c +++ b/frame/compat/attic/bla_gbmv.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* transa, \ f77_int* m, \ f77_int* n, \ diff --git a/frame/compat/attic/bla_gbmv.h b/frame/compat/attic/bla_gbmv.h index 69b8ea9c5..2e60bbc7c 100644 --- a/frame/compat/attic/bla_gbmv.h +++ b/frame/compat/attic/bla_gbmv.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* transa, \ f77_int* m, \ f77_int* n, \ diff --git a/frame/compat/attic/bla_hbmv.c b/frame/compat/attic/bla_hbmv.c index e34313394..1bc0482c2 100644 --- a/frame/compat/attic/bla_hbmv.c +++ b/frame/compat/attic/bla_hbmv.c @@ -41,7 +41,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ f77_int* k, \ diff --git a/frame/compat/attic/bla_hbmv.h b/frame/compat/attic/bla_hbmv.h index a6362a4ba..89054809e 100644 --- a/frame/compat/attic/bla_hbmv.h +++ b/frame/compat/attic/bla_hbmv.h @@ -39,7 +39,7 @@ #undef GENTPROTCO #define GENTPROTCO( ftype, ftype_r, ch, chr, blasname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ f77_int* k, \ diff --git a/frame/compat/attic/bla_hpmv.c b/frame/compat/attic/bla_hpmv.c index d53da2e4e..27fee32e2 100644 --- a/frame/compat/attic/bla_hpmv.c +++ b/frame/compat/attic/bla_hpmv.c @@ -41,7 +41,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype* alpha, \ diff --git a/frame/compat/attic/bla_hpmv.h b/frame/compat/attic/bla_hpmv.h index fe5b2238a..c58a5ebbf 100644 --- a/frame/compat/attic/bla_hpmv.h +++ b/frame/compat/attic/bla_hpmv.h @@ -39,7 +39,7 @@ #undef GENTPROTCO #define GENTPROTCO( ftype, ftype_r, ch, chr, blasname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype* alpha, \ diff --git a/frame/compat/attic/bla_hpr.c b/frame/compat/attic/bla_hpr.c index c0205f41b..21ec33e63 100644 --- a/frame/compat/attic/bla_hpr.c +++ b/frame/compat/attic/bla_hpr.c @@ -41,7 +41,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype_r* alpha, \ diff --git a/frame/compat/attic/bla_hpr.h b/frame/compat/attic/bla_hpr.h index 264cf60fe..b32c939a7 100644 --- a/frame/compat/attic/bla_hpr.h +++ b/frame/compat/attic/bla_hpr.h @@ -39,7 +39,7 @@ #undef GENTPROTCO #define GENTPROTCO( ftype, ftype_r, ch, chr, blasname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype_r* alpha, \ diff --git a/frame/compat/attic/bla_hpr2.c b/frame/compat/attic/bla_hpr2.c index 2153857d1..882db3b28 100644 --- a/frame/compat/attic/bla_hpr2.c +++ b/frame/compat/attic/bla_hpr2.c @@ -41,7 +41,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype* alpha, \ diff --git a/frame/compat/attic/bla_hpr2.h b/frame/compat/attic/bla_hpr2.h index c288656e0..e62179a5a 100644 --- a/frame/compat/attic/bla_hpr2.h +++ b/frame/compat/attic/bla_hpr2.h @@ -39,7 +39,7 @@ #undef GENTPROTCO #define GENTPROTCO( ftype, ftype_r, ch, chr, blasname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype* alpha, \ diff --git a/frame/compat/attic/bla_rot.c b/frame/compat/attic/bla_rot.c index 5c97d3961..0fdb9fa4b 100644 --- a/frame/compat/attic/bla_rot.c +++ b/frame/compat/attic/bla_rot.c @@ -41,7 +41,7 @@ #undef GENTFUNCR2 #define GENTFUNCR2( ftype_xy, ftype_r, chxy, chr, blasname, blisname ) \ \ -void PASTEF772(chxy,chr,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF772(chxy,chr,blasname)( \ f77_int* n, \ ftype_xy* x, f77_int* incx, \ ftype_xy* y, f77_int* incy, \ diff --git a/frame/compat/attic/bla_rot.h b/frame/compat/attic/bla_rot.h index 964d7001e..1713ccae2 100644 --- a/frame/compat/attic/bla_rot.h +++ b/frame/compat/attic/bla_rot.h @@ -39,7 +39,7 @@ #undef GENTPROTR2 #define GENTPROTR2( ftype_xy, ftype_r, chxy, chr, blasname ) \ \ -void PASTEF772(chxy,chr,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF772(chxy,chr,blasname)( \ f77_int* n, \ ftype_xy* x, f77_int* incx, \ ftype_xy* y, f77_int* incy, \ diff --git a/frame/compat/attic/bla_rotg.c b/frame/compat/attic/bla_rotg.c index f45ef9810..317987f8e 100644 --- a/frame/compat/attic/bla_rotg.c +++ b/frame/compat/attic/bla_rotg.c @@ -41,7 +41,7 @@ #undef GENTFUNCR #define GENTFUNCR( ftype_xy, ftype_r, chxy, chr, blasname, blisname ) \ \ -void PASTEF77(chxy,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(chxy,blasname)( \ ftype_xy* x, \ ftype_xy* y, \ ftype_r* c, \ diff --git a/frame/compat/attic/bla_rotg.h b/frame/compat/attic/bla_rotg.h index 3104aa5dc..9da266113 100644 --- a/frame/compat/attic/bla_rotg.h +++ b/frame/compat/attic/bla_rotg.h @@ -39,7 +39,7 @@ #undef GENTPROTR #define GENTPROTR( ftype_xy, ftype_r, chxy, chr, blasname ) \ \ -void PASTEF77(chxy,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(chxy,blasname)( \ ftype_xy* x, \ ftype_xy* y, \ ftype_r* c, \ diff --git a/frame/compat/attic/bla_rotm.c b/frame/compat/attic/bla_rotm.c index 5660f7238..3626e2897 100644 --- a/frame/compat/attic/bla_rotm.c +++ b/frame/compat/attic/bla_rotm.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_int* n, \ ftype* x, f77_int* incx, \ ftype* y, f77_int* incy, \ diff --git a/frame/compat/attic/bla_rotm.h b/frame/compat/attic/bla_rotm.h index 77ef4a040..73dc6bec9 100644 --- a/frame/compat/attic/bla_rotm.h +++ b/frame/compat/attic/bla_rotm.h @@ -39,7 +39,7 @@ #undef GENTPROTRO #define GENTPROTRO( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_int* n, \ ftype* x, f77_int* incx, \ ftype* y, f77_int* incy, \ diff --git a/frame/compat/attic/bla_rotmg.c b/frame/compat/attic/bla_rotmg.c index 5130cb6e5..5a662283b 100644 --- a/frame/compat/attic/bla_rotmg.c +++ b/frame/compat/attic/bla_rotmg.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ ftype* d1, \ ftype* d2, \ ftype* x, \ diff --git a/frame/compat/attic/bla_rotmg.h b/frame/compat/attic/bla_rotmg.h index b18c867d7..dba9f6f08 100644 --- a/frame/compat/attic/bla_rotmg.h +++ b/frame/compat/attic/bla_rotmg.h @@ -39,7 +39,7 @@ #undef GENTPROTRO #define GENTPROTRO( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ ftype* d1, \ ftype* d2, \ ftype* x, \ diff --git a/frame/compat/attic/bla_sbmv.c b/frame/compat/attic/bla_sbmv.c index 8aa1e63a4..8aca3c8e4 100644 --- a/frame/compat/attic/bla_sbmv.c +++ b/frame/compat/attic/bla_sbmv.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ f77_int* k, \ diff --git a/frame/compat/attic/bla_sbmv.h b/frame/compat/attic/bla_sbmv.h index 8e68d701e..e96e88975 100644 --- a/frame/compat/attic/bla_sbmv.h +++ b/frame/compat/attic/bla_sbmv.h @@ -39,7 +39,7 @@ #undef GENTPROTRO #define GENTPROTRO( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ f77_int* k, \ diff --git a/frame/compat/attic/bla_spmv.c b/frame/compat/attic/bla_spmv.c index 2e562da97..12896d2d0 100644 --- a/frame/compat/attic/bla_spmv.c +++ b/frame/compat/attic/bla_spmv.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype* alpha, \ diff --git a/frame/compat/attic/bla_spmv.h b/frame/compat/attic/bla_spmv.h index fb3ce55cf..60c787eb9 100644 --- a/frame/compat/attic/bla_spmv.h +++ b/frame/compat/attic/bla_spmv.h @@ -39,7 +39,7 @@ #undef GENTPROTRO #define GENTPROTRO( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype* alpha, \ diff --git a/frame/compat/attic/bla_spr.c b/frame/compat/attic/bla_spr.c index 7c2a9e93c..2b4431395 100644 --- a/frame/compat/attic/bla_spr.c +++ b/frame/compat/attic/bla_spr.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype* alpha, \ diff --git a/frame/compat/attic/bla_spr.h b/frame/compat/attic/bla_spr.h index 097931e82..59407b229 100644 --- a/frame/compat/attic/bla_spr.h +++ b/frame/compat/attic/bla_spr.h @@ -39,7 +39,7 @@ #undef GENTPROTRO #define GENTPROTRO( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype* alpha, \ diff --git a/frame/compat/attic/bla_spr2.c b/frame/compat/attic/bla_spr2.c index 08770c4f7..729742c0b 100644 --- a/frame/compat/attic/bla_spr2.c +++ b/frame/compat/attic/bla_spr2.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype* alpha, \ diff --git a/frame/compat/attic/bla_spr2.h b/frame/compat/attic/bla_spr2.h index 8864523ac..911b4301c 100644 --- a/frame/compat/attic/bla_spr2.h +++ b/frame/compat/attic/bla_spr2.h @@ -39,7 +39,7 @@ #undef GENTPROTRO #define GENTPROTRO( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype* alpha, \ diff --git a/frame/compat/attic/bla_tbmv.c b/frame/compat/attic/bla_tbmv.c index 95765d59b..159f907fa 100644 --- a/frame/compat/attic/bla_tbmv.c +++ b/frame/compat/attic/bla_tbmv.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_char* transa, \ f77_char* diaga, \ diff --git a/frame/compat/attic/bla_tbmv.h b/frame/compat/attic/bla_tbmv.h index d28b58d12..7a343c362 100644 --- a/frame/compat/attic/bla_tbmv.h +++ b/frame/compat/attic/bla_tbmv.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_char* transa, \ f77_char* diaga, \ diff --git a/frame/compat/attic/bla_tbsv.c b/frame/compat/attic/bla_tbsv.c index eb4be901f..dffe53375 100644 --- a/frame/compat/attic/bla_tbsv.c +++ b/frame/compat/attic/bla_tbsv.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_char* transa, \ f77_char* diaga, \ diff --git a/frame/compat/attic/bla_tbsv.h b/frame/compat/attic/bla_tbsv.h index a41a15bf1..0837352ae 100644 --- a/frame/compat/attic/bla_tbsv.h +++ b/frame/compat/attic/bla_tbsv.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_char* transa, \ f77_char* diaga, \ diff --git a/frame/compat/attic/bla_tpmv.c b/frame/compat/attic/bla_tpmv.c index 4abe6ba46..a913875ba 100644 --- a/frame/compat/attic/bla_tpmv.c +++ b/frame/compat/attic/bla_tpmv.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_char* transa, \ f77_char* diaga, \ diff --git a/frame/compat/attic/bla_tpmv.h b/frame/compat/attic/bla_tpmv.h index 7689befdc..37cd494a5 100644 --- a/frame/compat/attic/bla_tpmv.h +++ b/frame/compat/attic/bla_tpmv.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_char* transa, \ f77_char* diaga, \ diff --git a/frame/compat/attic/bla_tpsv.c b/frame/compat/attic/bla_tpsv.c index f1a039c66..63900b3ab 100644 --- a/frame/compat/attic/bla_tpsv.c +++ b/frame/compat/attic/bla_tpsv.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_char* transa, \ f77_char* diaga, \ diff --git a/frame/compat/attic/bla_tpsv.h b/frame/compat/attic/bla_tpsv.h index 526769062..179fd607d 100644 --- a/frame/compat/attic/bla_tpsv.h +++ b/frame/compat/attic/bla_tpsv.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname)( \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_char* transa, \ f77_char* diaga, \ diff --git a/frame/compat/bla_amax.c b/frame/compat/bla_amax.c index 9fcce920b..ef2ac46d0 100644 --- a/frame/compat/bla_amax.c +++ b/frame/compat/bla_amax.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype_x, chx, blasname, blisname ) \ \ -f77_int PASTEF772(i,chx,blasname) \ +BLIS_EXPORT_BLAS f77_int PASTEF772(i,chx,blasname) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx \ diff --git a/frame/compat/bla_amax.h b/frame/compat/bla_amax.h index f6e3dd0f6..1f13715dc 100644 --- a/frame/compat/bla_amax.h +++ b/frame/compat/bla_amax.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype_x, chx, blasname ) \ \ -f77_int PASTEF772(i,chx,blasname) \ +BLIS_EXPORT_BLAS f77_int PASTEF772(i,chx,blasname) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx \ diff --git a/frame/compat/bla_asum.c b/frame/compat/bla_asum.c index 8e71bfa8c..920dd823d 100644 --- a/frame/compat/bla_asum.c +++ b/frame/compat/bla_asum.c @@ -41,7 +41,7 @@ #undef GENTFUNCR2 #define GENTFUNCR2( ftype_x, ftype_r, chx, chr, blasname, blisname ) \ \ -ftype_r PASTEF772(chr,chx,blasname) \ +BLIS_EXPORT_BLAS ftype_r PASTEF772(chr,chx,blasname) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx \ diff --git a/frame/compat/bla_asum.h b/frame/compat/bla_asum.h index 036cd1529..a9ef27a03 100644 --- a/frame/compat/bla_asum.h +++ b/frame/compat/bla_asum.h @@ -39,7 +39,7 @@ #undef GENTPROTR2 #define GENTPROTR2( ftype_x, ftype_r, chx, chr, blasname ) \ \ -ftype_r PASTEF772(chr,chx,blasname) \ +BLIS_EXPORT_BLAS ftype_r PASTEF772(chr,chx,blasname) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx \ diff --git a/frame/compat/bla_axpy.c b/frame/compat/bla_axpy.c index e3c67fd55..abe4c0da7 100644 --- a/frame/compat/bla_axpy.c +++ b/frame/compat/bla_axpy.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_int* n, \ const ftype* alpha, \ diff --git a/frame/compat/bla_axpy.h b/frame/compat/bla_axpy.h index 3c014f36f..294a385c7 100644 --- a/frame/compat/bla_axpy.h +++ b/frame/compat/bla_axpy.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_int* n, \ const ftype* alpha, \ diff --git a/frame/compat/bla_copy.c b/frame/compat/bla_copy.c index d9d3b7cce..2d0f50ca3 100644 --- a/frame/compat/bla_copy.c +++ b/frame/compat/bla_copy.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_int* n, \ const ftype* x, const f77_int* incx, \ diff --git a/frame/compat/bla_copy.h b/frame/compat/bla_copy.h index 5f95afff2..679017b19 100644 --- a/frame/compat/bla_copy.h +++ b/frame/compat/bla_copy.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_int* n, \ const ftype* x, const f77_int* incx, \ diff --git a/frame/compat/bla_dot.c b/frame/compat/bla_dot.c index dbab039d1..453c7aec8 100644 --- a/frame/compat/bla_dot.c +++ b/frame/compat/bla_dot.c @@ -41,7 +41,7 @@ #undef GENTFUNCDOT #define GENTFUNCDOT( ftype, ch, chc, blis_conjx, blasname, blisname ) \ \ -ftype PASTEF772(ch,blasname,chc) \ +BLIS_EXPORT_BLAS ftype PASTEF772(ch,blasname,chc) \ ( \ const f77_int* n, \ const ftype* x, const f77_int* incx, \ @@ -93,7 +93,7 @@ INSERT_GENTFUNCDOT_BLAS( dot, dotv ) // Input vectors stored in single precision, computed in double precision, // with result returned in single precision. -float PASTEF77(sd,sdot) +BLIS_EXPORT_BLAS float PASTEF77(sd,sdot) ( const f77_int* n, const float* sb, @@ -109,7 +109,7 @@ float PASTEF77(sd,sdot) // Input vectors stored in single precision, computed in double precision, // with result returned in double precision. -double PASTEF77(d,sdot) +BLIS_EXPORT_BLAS double PASTEF77(d,sdot) ( const f77_int* n, const float* x, const f77_int* incx, diff --git a/frame/compat/bla_dot.h b/frame/compat/bla_dot.h index 01eb532e6..373e1a7b7 100644 --- a/frame/compat/bla_dot.h +++ b/frame/compat/bla_dot.h @@ -39,7 +39,7 @@ #undef GENTPROTDOT #define GENTPROTDOT( ftype, ch, chc, blasname ) \ \ -ftype PASTEF772(ch,blasname,chc) \ +BLIS_EXPORT_BLAS ftype PASTEF772(ch,blasname,chc) \ ( \ const f77_int* n, \ const ftype* x, const f77_int* incx, \ @@ -52,7 +52,7 @@ INSERT_GENTPROTDOT_BLAS( dot ) // -- "Black sheep" dot product function prototypes -- -float PASTEF77(sd,sdot) +BLIS_EXPORT_BLAS float PASTEF77(sd,sdot) ( const f77_int* n, const float* sb, @@ -60,7 +60,7 @@ float PASTEF77(sd,sdot) const float* y, const f77_int* incy ); -double PASTEF77(d,sdot) +BLIS_EXPORT_BLAS double PASTEF77(d,sdot) ( const f77_int* n, const float* x, const f77_int* incx, diff --git a/frame/compat/bla_gemm.c b/frame/compat/bla_gemm.c index e04e48cf5..24311d6b6 100644 --- a/frame/compat/bla_gemm.c +++ b/frame/compat/bla_gemm.c @@ -45,7 +45,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* transa, \ const f77_char* transb, \ diff --git a/frame/compat/bla_gemm.h b/frame/compat/bla_gemm.h index 18a101da1..77111dbd8 100644 --- a/frame/compat/bla_gemm.h +++ b/frame/compat/bla_gemm.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* transa, \ const f77_char* transb, \ diff --git a/frame/compat/bla_gemv.c b/frame/compat/bla_gemv.c index 85c65dde4..b4f27177d 100644 --- a/frame/compat/bla_gemv.c +++ b/frame/compat/bla_gemv.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* transa, \ const f77_int* m, \ diff --git a/frame/compat/bla_gemv.h b/frame/compat/bla_gemv.h index da4561606..22c8bf1c0 100644 --- a/frame/compat/bla_gemv.h +++ b/frame/compat/bla_gemv.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* transa, \ const f77_int* m, \ diff --git a/frame/compat/bla_ger.c b/frame/compat/bla_ger.c index db4f76f18..7113b73bd 100644 --- a/frame/compat/bla_ger.c +++ b/frame/compat/bla_ger.c @@ -41,7 +41,7 @@ #undef GENTFUNCDOT #define GENTFUNCDOT( ftype, ch, chc, blis_conjy, blasname, blisname ) \ \ -void PASTEF772(ch,blasname,chc) \ +BLIS_EXPORT_BLAS void PASTEF772(ch,blasname,chc) \ ( \ const f77_int* m, \ const f77_int* n, \ diff --git a/frame/compat/bla_ger.h b/frame/compat/bla_ger.h index d37511c0a..a31548f61 100644 --- a/frame/compat/bla_ger.h +++ b/frame/compat/bla_ger.h @@ -39,7 +39,7 @@ #undef GENTPROTDOT #define GENTPROTDOT( ftype, chxy, chc, blasname ) \ \ -void PASTEF772(chxy,blasname,chc) \ +BLIS_EXPORT_BLAS void PASTEF772(chxy,blasname,chc) \ ( \ const f77_int* m, \ const f77_int* n, \ diff --git a/frame/compat/bla_hemm.c b/frame/compat/bla_hemm.c index 79ccd9a2c..9c7003a9b 100644 --- a/frame/compat/bla_hemm.c +++ b/frame/compat/bla_hemm.c @@ -45,7 +45,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* side, \ const f77_char* uploa, \ diff --git a/frame/compat/bla_hemm.h b/frame/compat/bla_hemm.h index 712fc611a..711877ede 100644 --- a/frame/compat/bla_hemm.h +++ b/frame/compat/bla_hemm.h @@ -39,7 +39,7 @@ #undef GENTPROTCO #define GENTPROTCO( ftype, ftype_r, ch, chr, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* side, \ const f77_char* uploa, \ diff --git a/frame/compat/bla_hemv.c b/frame/compat/bla_hemv.c index 944468278..fa488b052 100644 --- a/frame/compat/bla_hemv.c +++ b/frame/compat/bla_hemv.c @@ -41,7 +41,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_hemv.h b/frame/compat/bla_hemv.h index 01c25e324..4e8230114 100644 --- a/frame/compat/bla_hemv.h +++ b/frame/compat/bla_hemv.h @@ -39,7 +39,7 @@ #undef GENTPROTCO #define GENTPROTCO( ftype, ftype_r, ch, chr, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_her.c b/frame/compat/bla_her.c index ade3cbdda..a80d1b364 100644 --- a/frame/compat/bla_her.c +++ b/frame/compat/bla_her.c @@ -41,7 +41,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_her.h b/frame/compat/bla_her.h index f93f49ac0..b9ae30d90 100644 --- a/frame/compat/bla_her.h +++ b/frame/compat/bla_her.h @@ -39,7 +39,7 @@ #undef GENTPROTCO #define GENTPROTCO( ftype, ftype_r, ch, chr, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_her2.c b/frame/compat/bla_her2.c index e3ed4ce31..1286e21bc 100644 --- a/frame/compat/bla_her2.c +++ b/frame/compat/bla_her2.c @@ -41,7 +41,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_her2.h b/frame/compat/bla_her2.h index c96374130..7cf0bb867 100644 --- a/frame/compat/bla_her2.h +++ b/frame/compat/bla_her2.h @@ -39,7 +39,7 @@ #undef GENTPROTCO #define GENTPROTCO( ftype, ftype_r, ch, chr, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_her2k.c b/frame/compat/bla_her2k.c index 566cd41fb..d5272bbd6 100644 --- a/frame/compat/bla_her2k.c +++ b/frame/compat/bla_her2k.c @@ -45,7 +45,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploc, \ const f77_char* transa, \ diff --git a/frame/compat/bla_her2k.h b/frame/compat/bla_her2k.h index e04b11755..c771f78d4 100644 --- a/frame/compat/bla_her2k.h +++ b/frame/compat/bla_her2k.h @@ -39,7 +39,7 @@ #undef GENTPROTCO #define GENTPROTCO( ftype, ftype_r, ch, chr, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploc, \ const f77_char* transa, \ diff --git a/frame/compat/bla_herk.c b/frame/compat/bla_herk.c index c919be9d7..d4223fdcd 100644 --- a/frame/compat/bla_herk.c +++ b/frame/compat/bla_herk.c @@ -45,7 +45,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploc, \ const f77_char* transa, \ diff --git a/frame/compat/bla_herk.h b/frame/compat/bla_herk.h index 6b3ebd38c..e649a74ab 100644 --- a/frame/compat/bla_herk.h +++ b/frame/compat/bla_herk.h @@ -39,7 +39,7 @@ #undef GENTPROTCO #define GENTPROTCO( ftype, ftype_r, ch, chr, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploc, \ const f77_char* transa, \ diff --git a/frame/compat/bla_nrm2.c b/frame/compat/bla_nrm2.c index 0b41a0673..79fa9116e 100644 --- a/frame/compat/bla_nrm2.c +++ b/frame/compat/bla_nrm2.c @@ -41,7 +41,7 @@ #undef GENTFUNCR2 #define GENTFUNCR2( ftype_x, ftype_r, chx, chr, blasname, blisname ) \ \ -ftype_r PASTEF772(chr,chx,blasname) \ +BLIS_EXPORT_BLAS ftype_r PASTEF772(chr,chx,blasname) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx \ diff --git a/frame/compat/bla_nrm2.h b/frame/compat/bla_nrm2.h index af18d6ec3..a8bc25ef4 100644 --- a/frame/compat/bla_nrm2.h +++ b/frame/compat/bla_nrm2.h @@ -39,7 +39,7 @@ #undef GENTPROTR2 #define GENTPROTR2( ftype_x, ftype_r, chx, chr, blasname ) \ \ -ftype_r PASTEF772(chr,chx,blasname) \ +BLIS_EXPORT_BLAS ftype_r PASTEF772(chr,chx,blasname) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx \ diff --git a/frame/compat/bla_scal.c b/frame/compat/bla_scal.c index 6c2a3c3db..9dc3a89c6 100644 --- a/frame/compat/bla_scal.c +++ b/frame/compat/bla_scal.c @@ -41,7 +41,7 @@ #undef GENTFUNCSCAL #define GENTFUNCSCAL( ftype_x, ftype_a, chx, cha, blasname, blisname ) \ \ -void PASTEF772(chx,cha,blasname) \ +BLIS_EXPORT_BLAS void PASTEF772(chx,cha,blasname) \ ( \ const f77_int* n, \ const ftype_a* alpha, \ diff --git a/frame/compat/bla_scal.h b/frame/compat/bla_scal.h index a615ea13f..c8e898b6b 100644 --- a/frame/compat/bla_scal.h +++ b/frame/compat/bla_scal.h @@ -39,7 +39,7 @@ #undef GENTPROTSCAL #define GENTPROTSCAL( ftype_a, ftype_x, cha, chx, blasname ) \ \ -void PASTEF772(chx,cha,blasname) \ +BLIS_EXPORT_BLAS void PASTEF772(chx,cha,blasname) \ ( \ const f77_int* n, \ const ftype_a* alpha, \ diff --git a/frame/compat/bla_swap.c b/frame/compat/bla_swap.c index 72bc9d6d5..b2619510e 100644 --- a/frame/compat/bla_swap.c +++ b/frame/compat/bla_swap.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_int* n, \ ftype* x, const f77_int* incx, \ diff --git a/frame/compat/bla_swap.h b/frame/compat/bla_swap.h index 4943a6504..54c0613a9 100644 --- a/frame/compat/bla_swap.h +++ b/frame/compat/bla_swap.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_int* n, \ ftype* x, const f77_int* incx, \ diff --git a/frame/compat/bla_symm.c b/frame/compat/bla_symm.c index 3711b34c9..b206d9976 100644 --- a/frame/compat/bla_symm.c +++ b/frame/compat/bla_symm.c @@ -45,7 +45,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* side, \ const f77_char* uploa, \ diff --git a/frame/compat/bla_symm.h b/frame/compat/bla_symm.h index 6bfdec35e..b186e4b43 100644 --- a/frame/compat/bla_symm.h +++ b/frame/compat/bla_symm.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* side, \ const f77_char* uploa, \ diff --git a/frame/compat/bla_symv.c b/frame/compat/bla_symv.c index 79076194c..76ebd07e5 100644 --- a/frame/compat/bla_symv.c +++ b/frame/compat/bla_symv.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_symv.h b/frame/compat/bla_symv.h index d003f1124..9d1662fad 100644 --- a/frame/compat/bla_symv.h +++ b/frame/compat/bla_symv.h @@ -39,7 +39,7 @@ #undef GENTPROTRO #define GENTPROTRO( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_syr.c b/frame/compat/bla_syr.c index 0ed4aebb1..3abcca28a 100644 --- a/frame/compat/bla_syr.c +++ b/frame/compat/bla_syr.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_syr.h b/frame/compat/bla_syr.h index 4a1d79d3e..0d2a1e031 100644 --- a/frame/compat/bla_syr.h +++ b/frame/compat/bla_syr.h @@ -39,7 +39,7 @@ #undef GENTPROTRO #define GENTPROTRO( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_syr2.c b/frame/compat/bla_syr2.c index dbae67027..302864b8f 100644 --- a/frame/compat/bla_syr2.c +++ b/frame/compat/bla_syr2.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_syr2.h b/frame/compat/bla_syr2.h index 06e4c2d91..b45876794 100644 --- a/frame/compat/bla_syr2.h +++ b/frame/compat/bla_syr2.h @@ -39,7 +39,7 @@ #undef GENTPROTRO #define GENTPROTRO( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_syr2k.c b/frame/compat/bla_syr2k.c index a977820a6..bd41457d9 100644 --- a/frame/compat/bla_syr2k.c +++ b/frame/compat/bla_syr2k.c @@ -45,7 +45,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploc, \ const f77_char* transa, \ diff --git a/frame/compat/bla_syr2k.h b/frame/compat/bla_syr2k.h index f1eb8e127..91d9a3acf 100644 --- a/frame/compat/bla_syr2k.h +++ b/frame/compat/bla_syr2k.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploc, \ const f77_char* transa, \ diff --git a/frame/compat/bla_syrk.c b/frame/compat/bla_syrk.c index 5bc2d356a..0c24c1f8e 100644 --- a/frame/compat/bla_syrk.c +++ b/frame/compat/bla_syrk.c @@ -45,7 +45,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploc, \ const f77_char* transa, \ diff --git a/frame/compat/bla_syrk.h b/frame/compat/bla_syrk.h index 9b2e49c5a..b6ca938a6 100644 --- a/frame/compat/bla_syrk.h +++ b/frame/compat/bla_syrk.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploc, \ const f77_char* transa, \ diff --git a/frame/compat/bla_trmm.c b/frame/compat/bla_trmm.c index 7ca20da74..7f035b1cc 100644 --- a/frame/compat/bla_trmm.c +++ b/frame/compat/bla_trmm.c @@ -45,7 +45,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* side, \ const f77_char* uploa, \ diff --git a/frame/compat/bla_trmm.h b/frame/compat/bla_trmm.h index 7c800f9eb..4f0c20b1b 100644 --- a/frame/compat/bla_trmm.h +++ b/frame/compat/bla_trmm.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* side, \ const f77_char* uploa, \ diff --git a/frame/compat/bla_trmv.c b/frame/compat/bla_trmv.c index ffb31b12f..783d975e7 100644 --- a/frame/compat/bla_trmv.c +++ b/frame/compat/bla_trmv.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_char* transa, \ diff --git a/frame/compat/bla_trmv.h b/frame/compat/bla_trmv.h index 4faec098b..4096ffe79 100644 --- a/frame/compat/bla_trmv.h +++ b/frame/compat/bla_trmv.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_char* transa, \ diff --git a/frame/compat/bla_trsm.c b/frame/compat/bla_trsm.c index 0e1c2e329..59705edbe 100644 --- a/frame/compat/bla_trsm.c +++ b/frame/compat/bla_trsm.c @@ -45,7 +45,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* side, \ const f77_char* uploa, \ diff --git a/frame/compat/bla_trsm.h b/frame/compat/bla_trsm.h index a2c2222b0..5694db52a 100644 --- a/frame/compat/bla_trsm.h +++ b/frame/compat/bla_trsm.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* side, \ const f77_char* uploa, \ diff --git a/frame/compat/bla_trsv.c b/frame/compat/bla_trsv.c index 445059720..2717b1940 100644 --- a/frame/compat/bla_trsv.c +++ b/frame/compat/bla_trsv.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_char* transa, \ diff --git a/frame/compat/bla_trsv.h b/frame/compat/bla_trsv.h index cec3976be..6edb435f1 100644 --- a/frame/compat/bla_trsv.h +++ b/frame/compat/bla_trsv.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype, ch, blasname ) \ \ -void PASTEF77(ch,blasname) \ +BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_char* transa, \ diff --git a/frame/compat/blis/thread/b77_thread.c b/frame/compat/blis/thread/b77_thread.c index c864339a3..28ba737aa 100644 --- a/frame/compat/blis/thread/b77_thread.c +++ b/frame/compat/blis/thread/b77_thread.c @@ -39,7 +39,7 @@ // Define Fortran-compatible BLIS interfaces. // -void PASTEF770(bli_thread_set_ways) +BLIS_EXPORT_BLAS void PASTEF770(bli_thread_set_ways) ( const f77_int* jc, const f77_int* pc, @@ -71,7 +71,7 @@ void PASTEF770(bli_thread_set_ways) bli_finalize_auto(); } -void PASTEF770(bli_thread_set_num_threads) +BLIS_EXPORT_BLAS void PASTEF770(bli_thread_set_num_threads) ( const f77_int* nt ) diff --git a/frame/compat/blis/thread/b77_thread.h b/frame/compat/blis/thread/b77_thread.h index 0e87f6bb0..922ed6e13 100644 --- a/frame/compat/blis/thread/b77_thread.h +++ b/frame/compat/blis/thread/b77_thread.h @@ -37,7 +37,7 @@ // Prototype Fortran-compatible BLIS interfaces. // -void PASTEF770(bli_thread_set_ways) +BLIS_EXPORT_BLAS void PASTEF770(bli_thread_set_ways) ( const f77_int* jc, const f77_int* pc, @@ -46,7 +46,7 @@ void PASTEF770(bli_thread_set_ways) const f77_int* ir ); -void PASTEF770(bli_thread_set_num_threads) +BLIS_EXPORT_BLAS void PASTEF770(bli_thread_set_num_threads) ( const f77_int* nt ); diff --git a/frame/compat/cblas/f77_sub/f77_amax_sub.c b/frame/compat/cblas/f77_sub/f77_amax_sub.c index cc26196d7..3fa18894c 100644 --- a/frame/compat/cblas/f77_sub/f77_amax_sub.c +++ b/frame/compat/cblas/f77_sub/f77_amax_sub.c @@ -42,7 +42,7 @@ #undef GENTFUNC #define GENTFUNC( ftype_x, chx, blasname, blisname ) \ \ -void PASTEF773(i,chx,blasname,sub) \ +BLIS_EXPORT_BLAS void PASTEF773(i,chx,blasname,sub) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx, \ diff --git a/frame/compat/cblas/f77_sub/f77_amax_sub.h b/frame/compat/cblas/f77_sub/f77_amax_sub.h index 9a4ebb0af..9cd1202d2 100644 --- a/frame/compat/cblas/f77_sub/f77_amax_sub.h +++ b/frame/compat/cblas/f77_sub/f77_amax_sub.h @@ -39,7 +39,7 @@ #undef GENTPROT #define GENTPROT( ftype_x, chx, blasname ) \ \ -void PASTEF773(i,chx,blasname,sub) \ +BLIS_EXPORT_BLAS void PASTEF773(i,chx,blasname,sub) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx, \ diff --git a/frame/compat/cblas/f77_sub/f77_asum_sub.c b/frame/compat/cblas/f77_sub/f77_asum_sub.c index f1cb35b0c..f0d4abe43 100644 --- a/frame/compat/cblas/f77_sub/f77_asum_sub.c +++ b/frame/compat/cblas/f77_sub/f77_asum_sub.c @@ -42,7 +42,7 @@ #undef GENTFUNCR2 #define GENTFUNCR2( ftype_x, ftype_r, chx, chr, blasname, blisname ) \ \ -void PASTEF773(chr,chx,blasname,sub) \ +BLIS_EXPORT_BLAS void PASTEF773(chr,chx,blasname,sub) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx, \ diff --git a/frame/compat/cblas/f77_sub/f77_asum_sub.h b/frame/compat/cblas/f77_sub/f77_asum_sub.h index 2c61e14d0..4b8634c16 100644 --- a/frame/compat/cblas/f77_sub/f77_asum_sub.h +++ b/frame/compat/cblas/f77_sub/f77_asum_sub.h @@ -39,7 +39,7 @@ #undef GENTPROTR2 #define GENTPROTR2( ftype_x, ftype_r, chx, chr, blasname ) \ \ -void PASTEF773(chr,chx,blasname,sub) \ +BLIS_EXPORT_BLAS void PASTEF773(chr,chx,blasname,sub) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx, \ diff --git a/frame/compat/cblas/f77_sub/f77_dot_sub.c b/frame/compat/cblas/f77_sub/f77_dot_sub.c index 6c06133f1..0dbd5a7e4 100644 --- a/frame/compat/cblas/f77_sub/f77_dot_sub.c +++ b/frame/compat/cblas/f77_sub/f77_dot_sub.c @@ -42,7 +42,7 @@ #undef GENTFUNCDOT #define GENTFUNCDOT( ftype, ch, chc, blis_conjx, blasname, blisname ) \ \ -void PASTEF773(ch,blasname,chc,sub) \ +BLIS_EXPORT_BLAS void PASTEF773(ch,blasname,chc,sub) \ ( \ const f77_int* n, \ const ftype* x, const f77_int* incx, \ @@ -66,7 +66,7 @@ INSERT_GENTFUNCDOT_BLAS( dot, NULL ) // Input vectors stored in single precision, computed in double precision, // with result returned in single precision. -void PASTEF772(sds,dot,sub) +BLIS_EXPORT_BLAS void PASTEF772(sds,dot,sub) ( const f77_int* n, const float* sb, @@ -86,7 +86,7 @@ void PASTEF772(sds,dot,sub) // Input vectors stored in single precision, computed in double precision, // with result returned in double precision. -void PASTEF772(ds,dot,sub) +BLIS_EXPORT_BLAS void PASTEF772(ds,dot,sub) ( const f77_int* n, const float* x, const f77_int* incx, diff --git a/frame/compat/cblas/f77_sub/f77_dot_sub.h b/frame/compat/cblas/f77_sub/f77_dot_sub.h index 2ee169591..8aab2728b 100644 --- a/frame/compat/cblas/f77_sub/f77_dot_sub.h +++ b/frame/compat/cblas/f77_sub/f77_dot_sub.h @@ -39,7 +39,7 @@ #undef GENTPROTDOT #define GENTPROTDOT( ftype, ch, chc, blasname ) \ \ -void PASTEF773(ch,blasname,chc,sub) \ +BLIS_EXPORT_BLAS void PASTEF773(ch,blasname,chc,sub) \ ( \ const f77_int* n, \ const ftype* x, const f77_int* incx, \ @@ -53,7 +53,7 @@ INSERT_GENTPROTDOT_BLAS( dot ) // -- "Black sheep" dot product function prototypes -- -void PASTEF772(sds,dot,sub) +BLIS_EXPORT_BLAS void PASTEF772(sds,dot,sub) ( const f77_int* n, const float* sb, @@ -62,7 +62,7 @@ void PASTEF772(sds,dot,sub) float* rval ); -void PASTEF772(ds,dot,sub) +BLIS_EXPORT_BLAS void PASTEF772(ds,dot,sub) ( const f77_int* n, const float* x, const f77_int* incx, diff --git a/frame/compat/cblas/f77_sub/f77_nrm2_sub.c b/frame/compat/cblas/f77_sub/f77_nrm2_sub.c index 54ce1a5b4..d3b75a5fe 100644 --- a/frame/compat/cblas/f77_sub/f77_nrm2_sub.c +++ b/frame/compat/cblas/f77_sub/f77_nrm2_sub.c @@ -42,7 +42,7 @@ #undef GENTFUNCR2 #define GENTFUNCR2( ftype_x, ftype_r, chx, chr, blasname, blisname ) \ \ -void PASTEF773(chr,chx,blasname,sub) \ +BLIS_EXPORT_BLAS void PASTEF773(chr,chx,blasname,sub) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx, \ diff --git a/frame/compat/cblas/f77_sub/f77_nrm2_sub.h b/frame/compat/cblas/f77_sub/f77_nrm2_sub.h index df2dd2357..c51a94292 100644 --- a/frame/compat/cblas/f77_sub/f77_nrm2_sub.h +++ b/frame/compat/cblas/f77_sub/f77_nrm2_sub.h @@ -39,7 +39,7 @@ #undef GENTPROTR2 #define GENTPROTR2( ftype_x, ftype_r, chx, chr, blasname ) \ \ -void PASTEF773(chr,chx,blasname,sub) \ +BLIS_EXPORT_BLAS void PASTEF773(chr,chx,blasname,sub) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx, \ diff --git a/frame/compat/cblas/src/cblas.h b/frame/compat/cblas/src/cblas.h index 1ee6209c9..85778c8a4 100644 --- a/frame/compat/cblas/src/cblas.h +++ b/frame/compat/cblas/src/cblas.h @@ -28,52 +28,52 @@ extern "C" { * Prototypes for level 1 BLAS functions (complex are recast as routines) * =========================================================================== */ -float cblas_sdsdot(f77_int N, float alpha, const float *X, +BLIS_EXPORT_BLAS float cblas_sdsdot(f77_int N, float alpha, const float *X, f77_int incX, const float *Y, f77_int incY); -double cblas_dsdot(f77_int N, const float *X, f77_int incX, const float *Y, +BLIS_EXPORT_BLAS double cblas_dsdot(f77_int N, const float *X, f77_int incX, const float *Y, f77_int incY); -float cblas_sdot(f77_int N, const float *X, f77_int incX, +BLIS_EXPORT_BLAS float cblas_sdot(f77_int N, const float *X, f77_int incX, const float *Y, f77_int incY); -double cblas_ddot(f77_int N, const double *X, f77_int incX, +BLIS_EXPORT_BLAS double cblas_ddot(f77_int N, const double *X, f77_int incX, const double *Y, f77_int incY); /* * Functions having prefixes Z and C only */ -void cblas_cdotu_sub(f77_int N, const void *X, f77_int incX, +BLIS_EXPORT_BLAS void cblas_cdotu_sub(f77_int N, const void *X, f77_int incX, const void *Y, f77_int incY, void *dotu); -void cblas_cdotc_sub(f77_int N, const void *X, f77_int incX, +BLIS_EXPORT_BLAS void cblas_cdotc_sub(f77_int N, const void *X, f77_int incX, const void *Y, f77_int incY, void *dotc); -void cblas_zdotu_sub(f77_int N, const void *X, f77_int incX, +BLIS_EXPORT_BLAS void cblas_zdotu_sub(f77_int N, const void *X, f77_int incX, const void *Y, f77_int incY, void *dotu); -void cblas_zdotc_sub(f77_int N, const void *X, f77_int incX, +BLIS_EXPORT_BLAS void cblas_zdotc_sub(f77_int N, const void *X, f77_int incX, const void *Y, f77_int incY, void *dotc); /* * Functions having prefixes S D SC DZ */ -float cblas_snrm2(f77_int N, const float *X, f77_int incX); -float cblas_sasum(f77_int N, const float *X, f77_int incX); +BLIS_EXPORT_BLAS float cblas_snrm2(f77_int N, const float *X, f77_int incX); +BLIS_EXPORT_BLAS float cblas_sasum(f77_int N, const float *X, f77_int incX); -double cblas_dnrm2(f77_int N, const double *X, f77_int incX); -double cblas_dasum(f77_int N, const double *X, f77_int incX); +BLIS_EXPORT_BLAS double cblas_dnrm2(f77_int N, const double *X, f77_int incX); +BLIS_EXPORT_BLAS double cblas_dasum(f77_int N, const double *X, f77_int incX); -float cblas_scnrm2(f77_int N, const void *X, f77_int incX); -float cblas_scasum(f77_int N, const void *X, f77_int incX); +BLIS_EXPORT_BLAS float cblas_scnrm2(f77_int N, const void *X, f77_int incX); +BLIS_EXPORT_BLAS float cblas_scasum(f77_int N, const void *X, f77_int incX); -double cblas_dznrm2(f77_int N, const void *X, f77_int incX); -double cblas_dzasum(f77_int N, const void *X, f77_int incX); +BLIS_EXPORT_BLAS double cblas_dznrm2(f77_int N, const void *X, f77_int incX); +BLIS_EXPORT_BLAS double cblas_dzasum(f77_int N, const void *X, f77_int incX); /* * Functions having standard 4 prefixes (S D C Z) */ -f77_int cblas_isamax(f77_int N, const float *X, f77_int incX); -f77_int cblas_idamax(f77_int N, const double *X, f77_int incX); -f77_int cblas_icamax(f77_int N, const void *X, f77_int incX); -f77_int cblas_izamax(f77_int N, const void *X, f77_int incX); +BLIS_EXPORT_BLAS f77_int cblas_isamax(f77_int N, const float *X, f77_int incX); +BLIS_EXPORT_BLAS f77_int cblas_idamax(f77_int N, const double *X, f77_int incX); +BLIS_EXPORT_BLAS f77_int cblas_icamax(f77_int N, const void *X, f77_int incX); +BLIS_EXPORT_BLAS f77_int cblas_izamax(f77_int N, const void *X, f77_int incX); /* * =========================================================================== @@ -84,62 +84,62 @@ f77_int cblas_izamax(f77_int N, const void *X, f77_int incX); /* * Routines with standard 4 prefixes (s, d, c, z) */ -void cblas_sswap(f77_int N, float *X, f77_int incX, +void BLIS_EXPORT_BLAS cblas_sswap(f77_int N, float *X, f77_int incX, float *Y, f77_int incY); -void cblas_scopy(f77_int N, const float *X, f77_int incX, +void BLIS_EXPORT_BLAS cblas_scopy(f77_int N, const float *X, f77_int incX, float *Y, f77_int incY); -void cblas_saxpy(f77_int N, float alpha, const float *X, +void BLIS_EXPORT_BLAS cblas_saxpy(f77_int N, float alpha, const float *X, f77_int incX, float *Y, f77_int incY); -void cblas_dswap(f77_int N, double *X, f77_int incX, +void BLIS_EXPORT_BLAS cblas_dswap(f77_int N, double *X, f77_int incX, double *Y, f77_int incY); -void cblas_dcopy(f77_int N, const double *X, f77_int incX, +void BLIS_EXPORT_BLAS cblas_dcopy(f77_int N, const double *X, f77_int incX, double *Y, f77_int incY); -void cblas_daxpy(f77_int N, double alpha, const double *X, +void BLIS_EXPORT_BLAS cblas_daxpy(f77_int N, double alpha, const double *X, f77_int incX, double *Y, f77_int incY); -void cblas_cswap(f77_int N, void *X, f77_int incX, +void BLIS_EXPORT_BLAS cblas_cswap(f77_int N, void *X, f77_int incX, void *Y, f77_int incY); -void cblas_ccopy(f77_int N, const void *X, f77_int incX, +void BLIS_EXPORT_BLAS cblas_ccopy(f77_int N, const void *X, f77_int incX, void *Y, f77_int incY); -void cblas_caxpy(f77_int N, const void *alpha, const void *X, +void BLIS_EXPORT_BLAS cblas_caxpy(f77_int N, const void *alpha, const void *X, f77_int incX, void *Y, f77_int incY); -void cblas_zswap(f77_int N, void *X, f77_int incX, +void BLIS_EXPORT_BLAS cblas_zswap(f77_int N, void *X, f77_int incX, void *Y, f77_int incY); -void cblas_zcopy(f77_int N, const void *X, f77_int incX, +void BLIS_EXPORT_BLAS cblas_zcopy(f77_int N, const void *X, f77_int incX, void *Y, f77_int incY); -void cblas_zaxpy(f77_int N, const void *alpha, const void *X, +void BLIS_EXPORT_BLAS cblas_zaxpy(f77_int N, const void *alpha, const void *X, f77_int incX, void *Y, f77_int incY); /* * Routines with S and D prefix only */ -void cblas_srotg(float *a, float *b, float *c, float *s); -void cblas_srotmg(float *d1, float *d2, float *b1, const float b2, float *P); -void cblas_srot(f77_int N, float *X, f77_int incX, +void BLIS_EXPORT_BLAS cblas_srotg(float *a, float *b, float *c, float *s); +void BLIS_EXPORT_BLAS cblas_srotmg(float *d1, float *d2, float *b1, const float b2, float *P); +void BLIS_EXPORT_BLAS cblas_srot(f77_int N, float *X, f77_int incX, float *Y, f77_int incY, const float c, const float s); -void cblas_srotm(f77_int N, float *X, f77_int incX, +void BLIS_EXPORT_BLAS cblas_srotm(f77_int N, float *X, f77_int incX, float *Y, f77_int incY, const float *P); -void cblas_drotg(double *a, double *b, double *c, double *s); -void cblas_drotmg(double *d1, double *d2, double *b1, const double b2, double *P); -void cblas_drot(f77_int N, double *X, f77_int incX, +void BLIS_EXPORT_BLAS cblas_drotg(double *a, double *b, double *c, double *s); +void BLIS_EXPORT_BLAS cblas_drotmg(double *d1, double *d2, double *b1, const double b2, double *P); +void BLIS_EXPORT_BLAS cblas_drot(f77_int N, double *X, f77_int incX, double *Y, f77_int incY, const double c, const double s); -void cblas_drotm(f77_int N, double *X, f77_int incX, +void BLIS_EXPORT_BLAS cblas_drotm(f77_int N, double *X, f77_int incX, double *Y, f77_int incY, const double *P); /* * Routines with S D C Z CS and ZD prefixes */ -void cblas_sscal(f77_int N, float alpha, float *X, f77_int incX); -void cblas_dscal(f77_int N, double alpha, double *X, f77_int incX); -void cblas_cscal(f77_int N, const void *alpha, void *X, f77_int incX); -void cblas_zscal(f77_int N, const void *alpha, void *X, f77_int incX); -void cblas_csscal(f77_int N, float alpha, void *X, f77_int incX); -void cblas_zdscal(f77_int N, double alpha, void *X, f77_int incX); +void BLIS_EXPORT_BLAS cblas_sscal(f77_int N, float alpha, float *X, f77_int incX); +void BLIS_EXPORT_BLAS cblas_dscal(f77_int N, double alpha, double *X, f77_int incX); +void BLIS_EXPORT_BLAS cblas_cscal(f77_int N, const void *alpha, void *X, f77_int incX); +void BLIS_EXPORT_BLAS cblas_zscal(f77_int N, const void *alpha, void *X, f77_int incX); +void BLIS_EXPORT_BLAS cblas_csscal(f77_int N, float alpha, void *X, f77_int incX); +void BLIS_EXPORT_BLAS cblas_zdscal(f77_int N, double alpha, void *X, f77_int incX); /* * =========================================================================== @@ -150,135 +150,135 @@ void cblas_zdscal(f77_int N, double alpha, void *X, f77_int incX); /* * Routines with standard 4 prefixes (S, D, C, Z) */ -void cblas_sgemv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_sgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, float alpha, const float *A, f77_int lda, const float *X, f77_int incX, float beta, float *Y, f77_int incY); -void cblas_sgbmv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_sgbmv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, f77_int KL, f77_int KU, float alpha, const float *A, f77_int lda, const float *X, f77_int incX, float beta, float *Y, f77_int incY); -void cblas_strmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_strmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const float *A, f77_int lda, float *X, f77_int incX); -void cblas_stbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_stbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const float *A, f77_int lda, float *X, f77_int incX); -void cblas_stpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_stpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const float *Ap, float *X, f77_int incX); -void cblas_strsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_strsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const float *A, f77_int lda, float *X, f77_int incX); -void cblas_stbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_stbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const float *A, f77_int lda, float *X, f77_int incX); -void cblas_stpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_stpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const float *Ap, float *X, f77_int incX); -void cblas_dgemv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_dgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, double alpha, const double *A, f77_int lda, const double *X, f77_int incX, double beta, double *Y, f77_int incY); -void cblas_dgbmv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_dgbmv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, f77_int KL, f77_int KU, double alpha, const double *A, f77_int lda, const double *X, f77_int incX, double beta, double *Y, f77_int incY); -void cblas_dtrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dtrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const double *A, f77_int lda, double *X, f77_int incX); -void cblas_dtbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dtbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const double *A, f77_int lda, double *X, f77_int incX); -void cblas_dtpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dtpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const double *Ap, double *X, f77_int incX); -void cblas_dtrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dtrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const double *A, f77_int lda, double *X, f77_int incX); -void cblas_dtbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dtbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const double *A, f77_int lda, double *X, f77_int incX); -void cblas_dtpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dtpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const double *Ap, double *X, f77_int incX); -void cblas_cgemv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_cgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, void *Y, f77_int incY); -void cblas_cgbmv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_cgbmv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, f77_int KL, f77_int KU, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, void *Y, f77_int incY); -void cblas_ctrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ctrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *A, f77_int lda, void *X, f77_int incX); -void cblas_ctbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ctbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const void *A, f77_int lda, void *X, f77_int incX); -void cblas_ctpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ctpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *Ap, void *X, f77_int incX); -void cblas_ctrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ctrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *A, f77_int lda, void *X, f77_int incX); -void cblas_ctbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ctbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const void *A, f77_int lda, void *X, f77_int incX); -void cblas_ctpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ctpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *Ap, void *X, f77_int incX); -void cblas_zgemv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_zgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, void *Y, f77_int incY); -void cblas_zgbmv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_zgbmv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, f77_int KL, f77_int KU, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, void *Y, f77_int incY); -void cblas_ztrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ztrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *A, f77_int lda, void *X, f77_int incX); -void cblas_ztbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ztbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const void *A, f77_int lda, void *X, f77_int incX); -void cblas_ztpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ztpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *Ap, void *X, f77_int incX); -void cblas_ztrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ztrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *A, f77_int lda, void *X, f77_int incX); -void cblas_ztbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ztbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const void *A, f77_int lda, void *X, f77_int incX); -void cblas_ztpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ztpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *Ap, void *X, f77_int incX); @@ -286,61 +286,61 @@ void cblas_ztpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, /* * Routines with S and D prefixes only */ -void cblas_ssymv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ssymv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, float alpha, const float *A, f77_int lda, const float *X, f77_int incX, float beta, float *Y, f77_int incY); -void cblas_ssbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ssbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, f77_int K, float alpha, const float *A, f77_int lda, const float *X, f77_int incX, float beta, float *Y, f77_int incY); -void cblas_sspmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_sspmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, float alpha, const float *Ap, const float *X, f77_int incX, float beta, float *Y, f77_int incY); -void cblas_sger(enum CBLAS_ORDER order, f77_int M, f77_int N, +void BLIS_EXPORT_BLAS cblas_sger(enum CBLAS_ORDER order, f77_int M, f77_int N, float alpha, const float *X, f77_int incX, const float *Y, f77_int incY, float *A, f77_int lda); -void cblas_ssyr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ssyr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, float alpha, const float *X, f77_int incX, float *A, f77_int lda); -void cblas_sspr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_sspr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, float alpha, const float *X, f77_int incX, float *Ap); -void cblas_ssyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ssyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, float alpha, const float *X, f77_int incX, const float *Y, f77_int incY, float *A, f77_int lda); -void cblas_sspr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_sspr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, float alpha, const float *X, f77_int incX, const float *Y, f77_int incY, float *A); -void cblas_dsymv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dsymv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const double *A, f77_int lda, const double *X, f77_int incX, double beta, double *Y, f77_int incY); -void cblas_dsbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dsbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, f77_int K, double alpha, const double *A, f77_int lda, const double *X, f77_int incX, double beta, double *Y, f77_int incY); -void cblas_dspmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dspmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const double *Ap, const double *X, f77_int incX, double beta, double *Y, f77_int incY); -void cblas_dger(enum CBLAS_ORDER order, f77_int M, f77_int N, +void BLIS_EXPORT_BLAS cblas_dger(enum CBLAS_ORDER order, f77_int M, f77_int N, double alpha, const double *X, f77_int incX, const double *Y, f77_int incY, double *A, f77_int lda); -void cblas_dsyr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dsyr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const double *X, f77_int incX, double *A, f77_int lda); -void cblas_dspr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dspr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const double *X, f77_int incX, double *Ap); -void cblas_dsyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dsyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const double *X, f77_int incX, const double *Y, f77_int incY, double *A, f77_int lda); -void cblas_dspr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dspr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const double *X, f77_int incX, const double *Y, f77_int incY, double *A); @@ -348,65 +348,65 @@ void cblas_dspr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, /* * Routines with C and Z prefixes only */ -void cblas_chemv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_chemv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, void *Y, f77_int incY); -void cblas_chbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_chbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, void *Y, f77_int incY); -void cblas_chpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_chpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const void *alpha, const void *Ap, const void *X, f77_int incX, const void *beta, void *Y, f77_int incY); -void cblas_cgeru(enum CBLAS_ORDER order, f77_int M, f77_int N, +void BLIS_EXPORT_BLAS cblas_cgeru(enum CBLAS_ORDER order, f77_int M, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda); -void cblas_cgerc(enum CBLAS_ORDER order, f77_int M, f77_int N, +void BLIS_EXPORT_BLAS cblas_cgerc(enum CBLAS_ORDER order, f77_int M, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda); -void cblas_cher(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_cher(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, float alpha, const void *X, f77_int incX, void *A, f77_int lda); -void cblas_chpr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_chpr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, float alpha, const void *X, f77_int incX, void *A); -void cblas_cher2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, +void BLIS_EXPORT_BLAS cblas_cher2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda); -void cblas_chpr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, +void BLIS_EXPORT_BLAS cblas_chpr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *Ap); -void cblas_zhemv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zhemv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, void *Y, f77_int incY); -void cblas_zhbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zhbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, void *Y, f77_int incY); -void cblas_zhpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zhpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const void *alpha, const void *Ap, const void *X, f77_int incX, const void *beta, void *Y, f77_int incY); -void cblas_zgeru(enum CBLAS_ORDER order, f77_int M, f77_int N, +void BLIS_EXPORT_BLAS cblas_zgeru(enum CBLAS_ORDER order, f77_int M, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda); -void cblas_zgerc(enum CBLAS_ORDER order, f77_int M, f77_int N, +void BLIS_EXPORT_BLAS cblas_zgerc(enum CBLAS_ORDER order, f77_int M, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda); -void cblas_zher(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zher(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const void *X, f77_int incX, void *A, f77_int lda); -void cblas_zhpr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zhpr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const void *X, f77_int incX, void *A); -void cblas_zher2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, +void BLIS_EXPORT_BLAS cblas_zher2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda); -void cblas_zhpr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, +void BLIS_EXPORT_BLAS cblas_zhpr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *Ap); @@ -419,121 +419,121 @@ void cblas_zhpr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, /* * Routines with standard 4 prefixes (S, D, C, Z) */ -void cblas_sgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, +void BLIS_EXPORT_BLAS cblas_sgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB, f77_int M, f77_int N, f77_int K, float alpha, const float *A, f77_int lda, const float *B, f77_int ldb, float beta, float *C, f77_int ldc); -void cblas_ssymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_ssymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, float alpha, const float *A, f77_int lda, const float *B, f77_int ldb, float beta, float *C, f77_int ldc); -void cblas_ssyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ssyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, float alpha, const float *A, f77_int lda, float beta, float *C, f77_int ldc); -void cblas_ssyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ssyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, float alpha, const float *A, f77_int lda, const float *B, f77_int ldb, float beta, float *C, f77_int ldc); -void cblas_strmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_strmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, float alpha, const float *A, f77_int lda, float *B, f77_int ldb); -void cblas_strsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_strsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, float alpha, const float *A, f77_int lda, float *B, f77_int ldb); -void cblas_dgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, +void BLIS_EXPORT_BLAS cblas_dgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB, f77_int M, f77_int N, f77_int K, double alpha, const double *A, f77_int lda, const double *B, f77_int ldb, double beta, double *C, f77_int ldc); -void cblas_dsymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_dsymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, double alpha, const double *A, f77_int lda, const double *B, f77_int ldb, double beta, double *C, f77_int ldc); -void cblas_dsyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dsyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, double alpha, const double *A, f77_int lda, double beta, double *C, f77_int ldc); -void cblas_dsyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dsyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, double alpha, const double *A, f77_int lda, const double *B, f77_int ldb, double beta, double *C, f77_int ldc); -void cblas_dtrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_dtrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, double alpha, const double *A, f77_int lda, double *B, f77_int ldb); -void cblas_dtrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_dtrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, double alpha, const double *A, f77_int lda, double *B, f77_int ldb); -void cblas_cgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, +void BLIS_EXPORT_BLAS cblas_cgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB, f77_int M, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, void *C, f77_int ldc); -void cblas_csymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_csymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, void *C, f77_int ldc); -void cblas_csyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_csyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *beta, void *C, f77_int ldc); -void cblas_csyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_csyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, void *C, f77_int ldc); -void cblas_ctrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_ctrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, void *B, f77_int ldb); -void cblas_ctrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_ctrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, void *B, f77_int ldb); -void cblas_zgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, +void BLIS_EXPORT_BLAS cblas_zgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB, f77_int M, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, void *C, f77_int ldc); -void cblas_zsymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_zsymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, void *C, f77_int ldc); -void cblas_zsyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zsyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *beta, void *C, f77_int ldc); -void cblas_zsyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zsyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, void *C, f77_int ldc); -void cblas_ztrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_ztrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, void *B, f77_int ldb); -void cblas_ztrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_ztrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, @@ -543,37 +543,37 @@ void cblas_ztrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, /* * Routines with prefixes C and Z only */ -void cblas_chemm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_chemm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, void *C, f77_int ldc); -void cblas_cherk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_cherk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, float alpha, const void *A, f77_int lda, float beta, void *C, f77_int ldc); -void cblas_cher2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_cher2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, float beta, void *C, f77_int ldc); -void cblas_zhemm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_zhemm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, void *C, f77_int ldc); -void cblas_zherk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zherk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, double alpha, const void *A, f77_int lda, double beta, void *C, f77_int ldc); -void cblas_zher2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zher2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, double beta, void *C, f77_int ldc); -void cblas_xerbla(f77_int p, const char *rout, const char *form, ...); +void BLIS_EXPORT_BLAS cblas_xerbla(f77_int p, const char *rout, const char *form, ...); #ifdef __cplusplus } diff --git a/frame/compat/cblas/src/cblas_caxpy.c b/frame/compat/cblas/src/cblas_caxpy.c index 748d146c6..fe63ecc5f 100644 --- a/frame/compat/cblas/src/cblas_caxpy.c +++ b/frame/compat/cblas/src/cblas_caxpy.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_caxpy( f77_int N, const void *alpha, const void *X, +void BLIS_EXPORT_BLAS cblas_caxpy( f77_int N, const void *alpha, const void *X, f77_int incX, void *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_ccopy.c b/frame/compat/cblas/src/cblas_ccopy.c index 8871680b1..3334a0c6b 100644 --- a/frame/compat/cblas/src/cblas_ccopy.c +++ b/frame/compat/cblas/src/cblas_ccopy.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_ccopy( f77_int N, const void *X, +void BLIS_EXPORT_BLAS cblas_ccopy( f77_int N, const void *X, f77_int incX, void *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_cdotc_sub.c b/frame/compat/cblas/src/cblas_cdotc_sub.c index d0800ca4f..8ba14bf96 100644 --- a/frame/compat/cblas/src/cblas_cdotc_sub.c +++ b/frame/compat/cblas/src/cblas_cdotc_sub.c @@ -11,7 +11,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_cdotc_sub( f77_int N, const void *X, f77_int incX, +void BLIS_EXPORT_BLAS cblas_cdotc_sub( f77_int N, const void *X, f77_int incX, const void *Y, f77_int incY,void *dotc) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_cdotu_sub.c b/frame/compat/cblas/src/cblas_cdotu_sub.c index fd14f5bb4..af5d14a55 100644 --- a/frame/compat/cblas/src/cblas_cdotu_sub.c +++ b/frame/compat/cblas/src/cblas_cdotu_sub.c @@ -11,7 +11,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_cdotu_sub( f77_int N, const void *X, +void BLIS_EXPORT_BLAS cblas_cdotu_sub( f77_int N, const void *X, f77_int incX, const void *Y, f77_int incY,void *dotu) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_cgbmv.c b/frame/compat/cblas/src/cblas_cgbmv.c index 74872186e..1be1c3838 100644 --- a/frame/compat/cblas/src/cblas_cgbmv.c +++ b/frame/compat/cblas/src/cblas_cgbmv.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_cgbmv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_cgbmv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, f77_int KL, f77_int KU, const void *alpha, const void *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_cgemm.c b/frame/compat/cblas/src/cblas_cgemm.c index 5680a19f6..343140922 100644 --- a/frame/compat/cblas/src/cblas_cgemm.c +++ b/frame/compat/cblas/src/cblas_cgemm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_cgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, +void BLIS_EXPORT_BLAS cblas_cgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB, f77_int M, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, diff --git a/frame/compat/cblas/src/cblas_cgemv.c b/frame/compat/cblas/src/cblas_cgemv.c index e5d226262..3203b4d6e 100644 --- a/frame/compat/cblas/src/cblas_cgemv.c +++ b/frame/compat/cblas/src/cblas_cgemv.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_cgemv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_cgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, diff --git a/frame/compat/cblas/src/cblas_cgerc.c b/frame/compat/cblas/src/cblas_cgerc.c index dc582dd04..4f84d1c24 100644 --- a/frame/compat/cblas/src/cblas_cgerc.c +++ b/frame/compat/cblas/src/cblas_cgerc.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_cgerc(enum CBLAS_ORDER order, f77_int M, f77_int N, +void BLIS_EXPORT_BLAS cblas_cgerc(enum CBLAS_ORDER order, f77_int M, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_cgeru.c b/frame/compat/cblas/src/cblas_cgeru.c index 6339ef08a..c494d24d7 100644 --- a/frame/compat/cblas/src/cblas_cgeru.c +++ b/frame/compat/cblas/src/cblas_cgeru.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_cgeru(enum CBLAS_ORDER order, f77_int M, f77_int N, +void BLIS_EXPORT_BLAS cblas_cgeru(enum CBLAS_ORDER order, f77_int M, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_chbmv.c b/frame/compat/cblas/src/cblas_chbmv.c index 463f8ef25..d2f128dcd 100644 --- a/frame/compat/cblas/src/cblas_chbmv.c +++ b/frame/compat/cblas/src/cblas_chbmv.c @@ -11,7 +11,7 @@ #include "cblas_f77.h" #include #include -void cblas_chbmv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_chbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo,f77_int N,f77_int K, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, diff --git a/frame/compat/cblas/src/cblas_chemm.c b/frame/compat/cblas/src/cblas_chemm.c index e8e1e374d..f2e772edb 100644 --- a/frame/compat/cblas/src/cblas_chemm.c +++ b/frame/compat/cblas/src/cblas_chemm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_chemm(enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_chemm(enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, diff --git a/frame/compat/cblas/src/cblas_chemv.c b/frame/compat/cblas/src/cblas_chemv.c index b1df3ef12..949ece77c 100644 --- a/frame/compat/cblas/src/cblas_chemv.c +++ b/frame/compat/cblas/src/cblas_chemv.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_chemv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_chemv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, diff --git a/frame/compat/cblas/src/cblas_cher.c b/frame/compat/cblas/src/cblas_cher.c index 05e1c684a..01f7ccc69 100644 --- a/frame/compat/cblas/src/cblas_cher.c +++ b/frame/compat/cblas/src/cblas_cher.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_cher(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_cher(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, float alpha, const void *X, f77_int incX ,void *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_cher2.c b/frame/compat/cblas/src/cblas_cher2.c index 9b82423d6..1eb711f33 100644 --- a/frame/compat/cblas/src/cblas_cher2.c +++ b/frame/compat/cblas/src/cblas_cher2.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_cher2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_cher2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_cher2k.c b/frame/compat/cblas/src/cblas_cher2k.c index fcd1c4b01..6e3e3b01d 100644 --- a/frame/compat/cblas/src/cblas_cher2k.c +++ b/frame/compat/cblas/src/cblas_cher2k.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_cher2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_cher2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, float beta, diff --git a/frame/compat/cblas/src/cblas_cherk.c b/frame/compat/cblas/src/cblas_cherk.c index 80bc4a7a8..8adf3c2b9 100644 --- a/frame/compat/cblas/src/cblas_cherk.c +++ b/frame/compat/cblas/src/cblas_cherk.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_cherk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_cherk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, float alpha, const void *A, f77_int lda, float beta, void *C, f77_int ldc) diff --git a/frame/compat/cblas/src/cblas_chpmv.c b/frame/compat/cblas/src/cblas_chpmv.c index 5857070a0..79c72b090 100644 --- a/frame/compat/cblas/src/cblas_chpmv.c +++ b/frame/compat/cblas/src/cblas_chpmv.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_chpmv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_chpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo,f77_int N, const void *alpha, const void *AP, const void *X, f77_int incX, const void *beta, diff --git a/frame/compat/cblas/src/cblas_chpr.c b/frame/compat/cblas/src/cblas_chpr.c index cd2f5baa3..031b275a2 100644 --- a/frame/compat/cblas/src/cblas_chpr.c +++ b/frame/compat/cblas/src/cblas_chpr.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_chpr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_chpr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, float alpha, const void *X, f77_int incX, void *A) { diff --git a/frame/compat/cblas/src/cblas_chpr2.c b/frame/compat/cblas/src/cblas_chpr2.c index f696083ab..67e1a6aaa 100644 --- a/frame/compat/cblas/src/cblas_chpr2.c +++ b/frame/compat/cblas/src/cblas_chpr2.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_chpr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_chpr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N,const void *alpha, const void *X, f77_int incX,const void *Y, f77_int incY, void *Ap) diff --git a/frame/compat/cblas/src/cblas_cscal.c b/frame/compat/cblas/src/cblas_cscal.c index 966b93ae9..5e3aaff2b 100644 --- a/frame/compat/cblas/src/cblas_cscal.c +++ b/frame/compat/cblas/src/cblas_cscal.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_cscal( f77_int N, const void *alpha, void *X, +void BLIS_EXPORT_BLAS cblas_cscal( f77_int N, const void *alpha, void *X, f77_int incX) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_csscal.c b/frame/compat/cblas/src/cblas_csscal.c index b2940d7d4..f40e88976 100644 --- a/frame/compat/cblas/src/cblas_csscal.c +++ b/frame/compat/cblas/src/cblas_csscal.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_csscal( f77_int N, float alpha, void *X, +void BLIS_EXPORT_BLAS cblas_csscal( f77_int N, float alpha, void *X, f77_int incX) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_cswap.c b/frame/compat/cblas/src/cblas_cswap.c index a5713a24c..d5b166e5e 100644 --- a/frame/compat/cblas/src/cblas_cswap.c +++ b/frame/compat/cblas/src/cblas_cswap.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_cswap( f77_int N, void *X, f77_int incX, void *Y, +void BLIS_EXPORT_BLAS cblas_cswap( f77_int N, void *X, f77_int incX, void *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_csymm.c b/frame/compat/cblas/src/cblas_csymm.c index 22cb266e4..9d2d34a3f 100644 --- a/frame/compat/cblas/src/cblas_csymm.c +++ b/frame/compat/cblas/src/cblas_csymm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_csymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_csymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, diff --git a/frame/compat/cblas/src/cblas_csyr2k.c b/frame/compat/cblas/src/cblas_csyr2k.c index c47072d74..a6f32622e 100644 --- a/frame/compat/cblas/src/cblas_csyr2k.c +++ b/frame/compat/cblas/src/cblas_csyr2k.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_csyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_csyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, diff --git a/frame/compat/cblas/src/cblas_csyrk.c b/frame/compat/cblas/src/cblas_csyrk.c index 94d9e2a8f..7a085e45c 100644 --- a/frame/compat/cblas/src/cblas_csyrk.c +++ b/frame/compat/cblas/src/cblas_csyrk.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_csyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_csyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *beta, void *C, f77_int ldc) diff --git a/frame/compat/cblas/src/cblas_ctbmv.c b/frame/compat/cblas/src/cblas_ctbmv.c index 8dd2499c7..3689facfb 100644 --- a/frame/compat/cblas/src/cblas_ctbmv.c +++ b/frame/compat/cblas/src/cblas_ctbmv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_ctbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ctbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const void *A, f77_int lda, void *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_ctbsv.c b/frame/compat/cblas/src/cblas_ctbsv.c index d9dfdcd22..2f4832922 100644 --- a/frame/compat/cblas/src/cblas_ctbsv.c +++ b/frame/compat/cblas/src/cblas_ctbsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_ctbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ctbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const void *A, f77_int lda, void *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_ctpmv.c b/frame/compat/cblas/src/cblas_ctpmv.c index 8f9cb33a4..6a384baa1 100644 --- a/frame/compat/cblas/src/cblas_ctpmv.c +++ b/frame/compat/cblas/src/cblas_ctpmv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_ctpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ctpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *Ap, void *X, f77_int incX) { diff --git a/frame/compat/cblas/src/cblas_ctpsv.c b/frame/compat/cblas/src/cblas_ctpsv.c index 77d5821e3..e76a1ba4d 100644 --- a/frame/compat/cblas/src/cblas_ctpsv.c +++ b/frame/compat/cblas/src/cblas_ctpsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_ctpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ctpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *Ap, void *X, f77_int incX) { diff --git a/frame/compat/cblas/src/cblas_ctrmm.c b/frame/compat/cblas/src/cblas_ctrmm.c index 7eb621f3b..5335bf893 100644 --- a/frame/compat/cblas/src/cblas_ctrmm.c +++ b/frame/compat/cblas/src/cblas_ctrmm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_ctrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_ctrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_ctrmv.c b/frame/compat/cblas/src/cblas_ctrmv.c index 756720207..f546a6a6f 100644 --- a/frame/compat/cblas/src/cblas_ctrmv.c +++ b/frame/compat/cblas/src/cblas_ctrmv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_ctrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ctrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *A, f77_int lda, void *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_ctrsm.c b/frame/compat/cblas/src/cblas_ctrsm.c index f6e016a21..04b1f0f71 100644 --- a/frame/compat/cblas/src/cblas_ctrsm.c +++ b/frame/compat/cblas/src/cblas_ctrsm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_ctrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_ctrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_ctrsv.c b/frame/compat/cblas/src/cblas_ctrsv.c index 539d97e55..e0824dd98 100644 --- a/frame/compat/cblas/src/cblas_ctrsv.c +++ b/frame/compat/cblas/src/cblas_ctrsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_ctrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ctrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *A, f77_int lda, void *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_daxpy.c b/frame/compat/cblas/src/cblas_daxpy.c index 5a3d08d6a..16032c5f6 100644 --- a/frame/compat/cblas/src/cblas_daxpy.c +++ b/frame/compat/cblas/src/cblas_daxpy.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_daxpy( f77_int N, double alpha, const double *X, +void BLIS_EXPORT_BLAS cblas_daxpy( f77_int N, double alpha, const double *X, f77_int incX, double *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_dcopy.c b/frame/compat/cblas/src/cblas_dcopy.c index 186c3d1d6..27bf873c0 100644 --- a/frame/compat/cblas/src/cblas_dcopy.c +++ b/frame/compat/cblas/src/cblas_dcopy.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_dcopy( f77_int N, const double *X, +void BLIS_EXPORT_BLAS cblas_dcopy( f77_int N, const double *X, f77_int incX, double *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_dgbmv.c b/frame/compat/cblas/src/cblas_dgbmv.c index f0a19d5e8..610eaf7d5 100644 --- a/frame/compat/cblas/src/cblas_dgbmv.c +++ b/frame/compat/cblas/src/cblas_dgbmv.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_dgbmv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_dgbmv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, f77_int KL, f77_int KU, double alpha, const double *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_dgemm.c b/frame/compat/cblas/src/cblas_dgemm.c index 479a15abd..f27d4a835 100644 --- a/frame/compat/cblas/src/cblas_dgemm.c +++ b/frame/compat/cblas/src/cblas_dgemm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_dgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, +void BLIS_EXPORT_BLAS cblas_dgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB, f77_int M, f77_int N, f77_int K, double alpha, const double *A, f77_int lda, const double *B, f77_int ldb, diff --git a/frame/compat/cblas/src/cblas_dgemv.c b/frame/compat/cblas/src/cblas_dgemv.c index 025523b2c..f781e66a2 100644 --- a/frame/compat/cblas/src/cblas_dgemv.c +++ b/frame/compat/cblas/src/cblas_dgemv.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_dgemv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_dgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, double alpha, const double *A, f77_int lda, const double *X, f77_int incX, double beta, diff --git a/frame/compat/cblas/src/cblas_dger.c b/frame/compat/cblas/src/cblas_dger.c index 366d393b6..b178f0ceb 100644 --- a/frame/compat/cblas/src/cblas_dger.c +++ b/frame/compat/cblas/src/cblas_dger.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_dger(enum CBLAS_ORDER order, f77_int M, f77_int N, +void BLIS_EXPORT_BLAS cblas_dger(enum CBLAS_ORDER order, f77_int M, f77_int N, double alpha, const double *X, f77_int incX, const double *Y, f77_int incY, double *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_drot.c b/frame/compat/cblas/src/cblas_drot.c index b5dac7cad..314e4972e 100644 --- a/frame/compat/cblas/src/cblas_drot.c +++ b/frame/compat/cblas/src/cblas_drot.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_drot(f77_int N, double *X, f77_int incX, +void BLIS_EXPORT_BLAS cblas_drot(f77_int N, double *X, f77_int incX, double *Y, f77_int incY, const double c, const double s) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_drotg.c b/frame/compat/cblas/src/cblas_drotg.c index c509bafc7..fc174084c 100644 --- a/frame/compat/cblas/src/cblas_drotg.c +++ b/frame/compat/cblas/src/cblas_drotg.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_drotg( double *a, double *b, double *c, double *s) +void BLIS_EXPORT_BLAS cblas_drotg( double *a, double *b, double *c, double *s) { F77_drotg(a,b,c,s); } diff --git a/frame/compat/cblas/src/cblas_drotm.c b/frame/compat/cblas/src/cblas_drotm.c index f0ae348dd..1b05592df 100644 --- a/frame/compat/cblas/src/cblas_drotm.c +++ b/frame/compat/cblas/src/cblas_drotm.c @@ -2,7 +2,7 @@ #ifdef BLIS_ENABLE_CBLAS #include "cblas.h" #include "cblas_f77.h" -void cblas_drotm( f77_int N, double *X, f77_int incX, double *Y, +void BLIS_EXPORT_BLAS cblas_drotm( f77_int N, double *X, f77_int incX, double *Y, f77_int incY, const double *P) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_drotmg.c b/frame/compat/cblas/src/cblas_drotmg.c index 6b969bf87..ebbea6573 100644 --- a/frame/compat/cblas/src/cblas_drotmg.c +++ b/frame/compat/cblas/src/cblas_drotmg.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_drotmg( double *d1, double *d2, double *b1, +void BLIS_EXPORT_BLAS cblas_drotmg( double *d1, double *d2, double *b1, const double b2, double *p) { F77_drotmg(d1,d2,b1,&b2,p); diff --git a/frame/compat/cblas/src/cblas_dsbmv.c b/frame/compat/cblas/src/cblas_dsbmv.c index 8398dd6ce..af04d90a0 100644 --- a/frame/compat/cblas/src/cblas_dsbmv.c +++ b/frame/compat/cblas/src/cblas_dsbmv.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_dsbmv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_dsbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, f77_int K, double alpha, const double *A, f77_int lda, const double *X, f77_int incX, double beta, diff --git a/frame/compat/cblas/src/cblas_dscal.c b/frame/compat/cblas/src/cblas_dscal.c index bb6da3f67..6c5bda1b9 100644 --- a/frame/compat/cblas/src/cblas_dscal.c +++ b/frame/compat/cblas/src/cblas_dscal.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_dscal( f77_int N, double alpha, double *X, +void BLIS_EXPORT_BLAS cblas_dscal( f77_int N, double alpha, double *X, f77_int incX) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_dspmv.c b/frame/compat/cblas/src/cblas_dspmv.c index b8e95cfa8..c56c4125d 100644 --- a/frame/compat/cblas/src/cblas_dspmv.c +++ b/frame/compat/cblas/src/cblas_dspmv.c @@ -12,7 +12,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_dspmv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_dspmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const double *AP, const double *X, f77_int incX, double beta, diff --git a/frame/compat/cblas/src/cblas_dspr.c b/frame/compat/cblas/src/cblas_dspr.c index 9156f7a83..21a2da21c 100644 --- a/frame/compat/cblas/src/cblas_dspr.c +++ b/frame/compat/cblas/src/cblas_dspr.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_dspr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dspr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const double *X, f77_int incX, double *Ap) { diff --git a/frame/compat/cblas/src/cblas_dspr2.c b/frame/compat/cblas/src/cblas_dspr2.c index 8fade8319..0fd33c080 100644 --- a/frame/compat/cblas/src/cblas_dspr2.c +++ b/frame/compat/cblas/src/cblas_dspr2.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_dspr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dspr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const double alpha, const double *X, f77_int incX, const double *Y, f77_int incY, double *A) { diff --git a/frame/compat/cblas/src/cblas_dswap.c b/frame/compat/cblas/src/cblas_dswap.c index e204baea0..ec676d9ca 100644 --- a/frame/compat/cblas/src/cblas_dswap.c +++ b/frame/compat/cblas/src/cblas_dswap.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_dswap( f77_int N, double *X, f77_int incX, double *Y, +void BLIS_EXPORT_BLAS cblas_dswap( f77_int N, double *X, f77_int incX, double *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_dsymm.c b/frame/compat/cblas/src/cblas_dsymm.c index 81bc52268..119f7a419 100644 --- a/frame/compat/cblas/src/cblas_dsymm.c +++ b/frame/compat/cblas/src/cblas_dsymm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_dsymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_dsymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, double alpha, const double *A, f77_int lda, const double *B, f77_int ldb, double beta, diff --git a/frame/compat/cblas/src/cblas_dsymv.c b/frame/compat/cblas/src/cblas_dsymv.c index d0c2aa642..6e3ddc1f4 100644 --- a/frame/compat/cblas/src/cblas_dsymv.c +++ b/frame/compat/cblas/src/cblas_dsymv.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_dsymv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_dsymv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const double *A, f77_int lda, const double *X, f77_int incX, double beta, diff --git a/frame/compat/cblas/src/cblas_dsyr.c b/frame/compat/cblas/src/cblas_dsyr.c index f6dd66c75..69eec6ff4 100644 --- a/frame/compat/cblas/src/cblas_dsyr.c +++ b/frame/compat/cblas/src/cblas_dsyr.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_dsyr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dsyr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const double alpha, const double *X, f77_int incX, double *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_dsyr2.c b/frame/compat/cblas/src/cblas_dsyr2.c index c0d773939..b43ce4c6a 100644 --- a/frame/compat/cblas/src/cblas_dsyr2.c +++ b/frame/compat/cblas/src/cblas_dsyr2.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_dsyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dsyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const double alpha, const double *X, f77_int incX, const double *Y, f77_int incY, double *A, f77_int lda) diff --git a/frame/compat/cblas/src/cblas_dsyr2k.c b/frame/compat/cblas/src/cblas_dsyr2k.c index 2c35b9929..45b12a12c 100644 --- a/frame/compat/cblas/src/cblas_dsyr2k.c +++ b/frame/compat/cblas/src/cblas_dsyr2k.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_dsyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dsyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, double alpha, const double *A, f77_int lda, const double *B, f77_int ldb, double beta, diff --git a/frame/compat/cblas/src/cblas_dsyrk.c b/frame/compat/cblas/src/cblas_dsyrk.c index 8a7ca1651..4a71e3b40 100644 --- a/frame/compat/cblas/src/cblas_dsyrk.c +++ b/frame/compat/cblas/src/cblas_dsyrk.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_dsyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dsyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, double alpha, const double *A, f77_int lda, double beta, double *C, f77_int ldc) diff --git a/frame/compat/cblas/src/cblas_dtbmv.c b/frame/compat/cblas/src/cblas_dtbmv.c index 6502c1c22..702bfca63 100644 --- a/frame/compat/cblas/src/cblas_dtbmv.c +++ b/frame/compat/cblas/src/cblas_dtbmv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_dtbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dtbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const double *A, f77_int lda, double *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_dtbsv.c b/frame/compat/cblas/src/cblas_dtbsv.c index aae08e956..2817ff3d2 100644 --- a/frame/compat/cblas/src/cblas_dtbsv.c +++ b/frame/compat/cblas/src/cblas_dtbsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_dtbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dtbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const double *A, f77_int lda, double *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_dtpmv.c b/frame/compat/cblas/src/cblas_dtpmv.c index b72b4ed7e..4e74b95f6 100644 --- a/frame/compat/cblas/src/cblas_dtpmv.c +++ b/frame/compat/cblas/src/cblas_dtpmv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_dtpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dtpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const double *Ap, double *X, f77_int incX) { diff --git a/frame/compat/cblas/src/cblas_dtpsv.c b/frame/compat/cblas/src/cblas_dtpsv.c index 501e4a256..484358acf 100644 --- a/frame/compat/cblas/src/cblas_dtpsv.c +++ b/frame/compat/cblas/src/cblas_dtpsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_dtpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dtpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const double *Ap, double *X, f77_int incX) { diff --git a/frame/compat/cblas/src/cblas_dtrmm.c b/frame/compat/cblas/src/cblas_dtrmm.c index c93c4862a..4cd180261 100644 --- a/frame/compat/cblas/src/cblas_dtrmm.c +++ b/frame/compat/cblas/src/cblas_dtrmm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_dtrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_dtrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, double alpha, const double *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_dtrmv.c b/frame/compat/cblas/src/cblas_dtrmv.c index 904d4b75b..404110b91 100644 --- a/frame/compat/cblas/src/cblas_dtrmv.c +++ b/frame/compat/cblas/src/cblas_dtrmv.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_dtrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dtrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const double *A, f77_int lda, double *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_dtrsm.c b/frame/compat/cblas/src/cblas_dtrsm.c index 552620495..1480ff2c5 100644 --- a/frame/compat/cblas/src/cblas_dtrsm.c +++ b/frame/compat/cblas/src/cblas_dtrsm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_dtrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_dtrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, double alpha, const double *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_dtrsv.c b/frame/compat/cblas/src/cblas_dtrsv.c index 4d257f7ea..428b36781 100644 --- a/frame/compat/cblas/src/cblas_dtrsv.c +++ b/frame/compat/cblas/src/cblas_dtrsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_dtrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_dtrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const double *A, f77_int lda, double *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_saxpy.c b/frame/compat/cblas/src/cblas_saxpy.c index b7f2b2d4e..c3846e9e4 100644 --- a/frame/compat/cblas/src/cblas_saxpy.c +++ b/frame/compat/cblas/src/cblas_saxpy.c @@ -11,7 +11,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_saxpy( f77_int N, float alpha, const float *X, +void BLIS_EXPORT_BLAS cblas_saxpy( f77_int N, float alpha, const float *X, f77_int incX, float *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_scopy.c b/frame/compat/cblas/src/cblas_scopy.c index f54343ff1..5f254eb52 100644 --- a/frame/compat/cblas/src/cblas_scopy.c +++ b/frame/compat/cblas/src/cblas_scopy.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_scopy( f77_int N, const float *X, +void BLIS_EXPORT_BLAS cblas_scopy( f77_int N, const float *X, f77_int incX, float *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_sgbmv.c b/frame/compat/cblas/src/cblas_sgbmv.c index 8bf944f9d..bf6b02ad9 100644 --- a/frame/compat/cblas/src/cblas_sgbmv.c +++ b/frame/compat/cblas/src/cblas_sgbmv.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_sgbmv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_sgbmv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, f77_int KL, f77_int KU, float alpha, const float *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_sgemm.c b/frame/compat/cblas/src/cblas_sgemm.c index 89d0f07a8..09ed071ff 100644 --- a/frame/compat/cblas/src/cblas_sgemm.c +++ b/frame/compat/cblas/src/cblas_sgemm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_sgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, +void BLIS_EXPORT_BLAS cblas_sgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB, f77_int M, f77_int N, f77_int K, float alpha, const float *A, f77_int lda, const float *B, f77_int ldb, diff --git a/frame/compat/cblas/src/cblas_sgemv.c b/frame/compat/cblas/src/cblas_sgemv.c index 552140fec..79d536f6b 100644 --- a/frame/compat/cblas/src/cblas_sgemv.c +++ b/frame/compat/cblas/src/cblas_sgemv.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_sgemv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_sgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, float alpha, const float *A, f77_int lda, const float *X, f77_int incX, float beta, diff --git a/frame/compat/cblas/src/cblas_sger.c b/frame/compat/cblas/src/cblas_sger.c index 0617bad1e..64fb8bf8d 100644 --- a/frame/compat/cblas/src/cblas_sger.c +++ b/frame/compat/cblas/src/cblas_sger.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_sger(enum CBLAS_ORDER order, f77_int M, f77_int N, +void BLIS_EXPORT_BLAS cblas_sger(enum CBLAS_ORDER order, f77_int M, f77_int N, const float alpha, const float *X, f77_int incX, const float *Y, f77_int incY, float *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_srot.c b/frame/compat/cblas/src/cblas_srot.c index b9e7ede46..3279a5b99 100644 --- a/frame/compat/cblas/src/cblas_srot.c +++ b/frame/compat/cblas/src/cblas_srot.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_srot( f77_int N, float *X, f77_int incX, float *Y, +void BLIS_EXPORT_BLAS cblas_srot( f77_int N, float *X, f77_int incX, float *Y, f77_int incY, const float c, const float s) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_srotg.c b/frame/compat/cblas/src/cblas_srotg.c index 165497f7e..761dc34e3 100644 --- a/frame/compat/cblas/src/cblas_srotg.c +++ b/frame/compat/cblas/src/cblas_srotg.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_srotg( float *a, float *b, float *c, float *s) +void BLIS_EXPORT_BLAS cblas_srotg( float *a, float *b, float *c, float *s) { F77_srotg(a,b,c,s); } diff --git a/frame/compat/cblas/src/cblas_srotm.c b/frame/compat/cblas/src/cblas_srotm.c index ce417d769..335f76733 100644 --- a/frame/compat/cblas/src/cblas_srotm.c +++ b/frame/compat/cblas/src/cblas_srotm.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_srotm( f77_int N, float *X, f77_int incX, float *Y, +void BLIS_EXPORT_BLAS cblas_srotm( f77_int N, float *X, f77_int incX, float *Y, f77_int incY, const float *P) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_srotmg.c b/frame/compat/cblas/src/cblas_srotmg.c index 7f26ac659..c5c845aa7 100644 --- a/frame/compat/cblas/src/cblas_srotmg.c +++ b/frame/compat/cblas/src/cblas_srotmg.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_srotmg( float *d1, float *d2, float *b1, +void BLIS_EXPORT_BLAS cblas_srotmg( float *d1, float *d2, float *b1, const float b2, float *p) { F77_srotmg(d1,d2,b1,&b2,p); diff --git a/frame/compat/cblas/src/cblas_ssbmv.c b/frame/compat/cblas/src/cblas_ssbmv.c index ef8a96cfb..4935323b0 100644 --- a/frame/compat/cblas/src/cblas_ssbmv.c +++ b/frame/compat/cblas/src/cblas_ssbmv.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_ssbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ssbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, f77_int K, float alpha, const float *A, f77_int lda, const float *X, f77_int incX, float beta, float *Y, f77_int incY) diff --git a/frame/compat/cblas/src/cblas_sscal.c b/frame/compat/cblas/src/cblas_sscal.c index 55547ae64..fda92231c 100644 --- a/frame/compat/cblas/src/cblas_sscal.c +++ b/frame/compat/cblas/src/cblas_sscal.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_sscal( f77_int N, float alpha, float *X, +void BLIS_EXPORT_BLAS cblas_sscal( f77_int N, float alpha, float *X, f77_int incX) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_sspmv.c b/frame/compat/cblas/src/cblas_sspmv.c index a54f64214..28dc0b36c 100644 --- a/frame/compat/cblas/src/cblas_sspmv.c +++ b/frame/compat/cblas/src/cblas_sspmv.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_sspmv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_sspmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, float alpha, const float *AP, const float *X, f77_int incX, float beta, diff --git a/frame/compat/cblas/src/cblas_sspr.c b/frame/compat/cblas/src/cblas_sspr.c index 693dbba8c..a2b60e96d 100644 --- a/frame/compat/cblas/src/cblas_sspr.c +++ b/frame/compat/cblas/src/cblas_sspr.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_sspr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_sspr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const float alpha, const float *X, f77_int incX, float *Ap) { diff --git a/frame/compat/cblas/src/cblas_sspr2.c b/frame/compat/cblas/src/cblas_sspr2.c index a4b612897..e38e6749f 100644 --- a/frame/compat/cblas/src/cblas_sspr2.c +++ b/frame/compat/cblas/src/cblas_sspr2.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_sspr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_sspr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const float alpha, const float *X, f77_int incX, const float *Y, f77_int incY, float *A) { diff --git a/frame/compat/cblas/src/cblas_sswap.c b/frame/compat/cblas/src/cblas_sswap.c index 2c24ad0fa..e97aa27ef 100644 --- a/frame/compat/cblas/src/cblas_sswap.c +++ b/frame/compat/cblas/src/cblas_sswap.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_sswap( f77_int N, float *X, f77_int incX, float *Y, +void BLIS_EXPORT_BLAS cblas_sswap( f77_int N, float *X, f77_int incX, float *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_ssymm.c b/frame/compat/cblas/src/cblas_ssymm.c index 218ddba6a..138c3b47d 100644 --- a/frame/compat/cblas/src/cblas_ssymm.c +++ b/frame/compat/cblas/src/cblas_ssymm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_ssymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_ssymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, float alpha, const float *A, f77_int lda, const float *B, f77_int ldb, float beta, diff --git a/frame/compat/cblas/src/cblas_ssymv.c b/frame/compat/cblas/src/cblas_ssymv.c index 6027aaddf..43a835cdd 100644 --- a/frame/compat/cblas/src/cblas_ssymv.c +++ b/frame/compat/cblas/src/cblas_ssymv.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_ssymv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_ssymv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, float alpha, const float *A, f77_int lda, const float *X, f77_int incX, float beta, diff --git a/frame/compat/cblas/src/cblas_ssyr.c b/frame/compat/cblas/src/cblas_ssyr.c index 14ed8fe54..90d4a748f 100644 --- a/frame/compat/cblas/src/cblas_ssyr.c +++ b/frame/compat/cblas/src/cblas_ssyr.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_ssyr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ssyr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const float alpha, const float *X, f77_int incX, float *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_ssyr2.c b/frame/compat/cblas/src/cblas_ssyr2.c index 48263f2ae..287eacdd6 100644 --- a/frame/compat/cblas/src/cblas_ssyr2.c +++ b/frame/compat/cblas/src/cblas_ssyr2.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_ssyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ssyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const float alpha, const float *X, f77_int incX, const float *Y, f77_int incY, float *A, f77_int lda) diff --git a/frame/compat/cblas/src/cblas_ssyr2k.c b/frame/compat/cblas/src/cblas_ssyr2k.c index 50cf8bf1d..9687f2dd9 100644 --- a/frame/compat/cblas/src/cblas_ssyr2k.c +++ b/frame/compat/cblas/src/cblas_ssyr2k.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_ssyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ssyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, float alpha, const float *A, f77_int lda, const float *B, f77_int ldb, float beta, diff --git a/frame/compat/cblas/src/cblas_ssyrk.c b/frame/compat/cblas/src/cblas_ssyrk.c index 6f486870f..63364bb91 100644 --- a/frame/compat/cblas/src/cblas_ssyrk.c +++ b/frame/compat/cblas/src/cblas_ssyrk.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_ssyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ssyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, float alpha, const float *A, f77_int lda, float beta, float *C, f77_int ldc) diff --git a/frame/compat/cblas/src/cblas_stbmv.c b/frame/compat/cblas/src/cblas_stbmv.c index 15daa49da..7f67b0d64 100644 --- a/frame/compat/cblas/src/cblas_stbmv.c +++ b/frame/compat/cblas/src/cblas_stbmv.c @@ -9,7 +9,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_stbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_stbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const float *A, f77_int lda, float *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_stbsv.c b/frame/compat/cblas/src/cblas_stbsv.c index ec9d9c844..d2137984b 100644 --- a/frame/compat/cblas/src/cblas_stbsv.c +++ b/frame/compat/cblas/src/cblas_stbsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_stbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_stbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const float *A, f77_int lda, float *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_stpmv.c b/frame/compat/cblas/src/cblas_stpmv.c index 91b308176..f8b9dc979 100644 --- a/frame/compat/cblas/src/cblas_stpmv.c +++ b/frame/compat/cblas/src/cblas_stpmv.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_stpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_stpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const float *Ap, float *X, f77_int incX) { diff --git a/frame/compat/cblas/src/cblas_stpsv.c b/frame/compat/cblas/src/cblas_stpsv.c index 548eaec79..d0bbc7661 100644 --- a/frame/compat/cblas/src/cblas_stpsv.c +++ b/frame/compat/cblas/src/cblas_stpsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_stpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_stpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const float *Ap, float *X, f77_int incX) { diff --git a/frame/compat/cblas/src/cblas_strmm.c b/frame/compat/cblas/src/cblas_strmm.c index a7737109b..93f2406c5 100644 --- a/frame/compat/cblas/src/cblas_strmm.c +++ b/frame/compat/cblas/src/cblas_strmm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_strmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_strmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, float alpha, const float *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_strmv.c b/frame/compat/cblas/src/cblas_strmv.c index 987589eb7..4d0e7ebc7 100644 --- a/frame/compat/cblas/src/cblas_strmv.c +++ b/frame/compat/cblas/src/cblas_strmv.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_strmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_strmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const float *A, f77_int lda, float *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_strsm.c b/frame/compat/cblas/src/cblas_strsm.c index ef78969f0..64cea9327 100644 --- a/frame/compat/cblas/src/cblas_strsm.c +++ b/frame/compat/cblas/src/cblas_strsm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_strsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_strsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, float alpha, const float *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_strsv.c b/frame/compat/cblas/src/cblas_strsv.c index a37c797b8..d3c2cb063 100644 --- a/frame/compat/cblas/src/cblas_strsv.c +++ b/frame/compat/cblas/src/cblas_strsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_strsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_strsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const float *A, f77_int lda, float *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_xerbla.c b/frame/compat/cblas/src/cblas_xerbla.c index ebe6bd800..8577f5fb2 100644 --- a/frame/compat/cblas/src/cblas_xerbla.c +++ b/frame/compat/cblas/src/cblas_xerbla.c @@ -7,7 +7,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_xerbla(f77_int info, const char *rout, const char *form, ...) +void BLIS_EXPORT_BLAS cblas_xerbla(f77_int info, const char *rout, const char *form, ...) { extern int RowMajorStrg; char empty[1] = ""; diff --git a/frame/compat/cblas/src/cblas_zaxpy.c b/frame/compat/cblas/src/cblas_zaxpy.c index dcf2f5c78..60998af86 100644 --- a/frame/compat/cblas/src/cblas_zaxpy.c +++ b/frame/compat/cblas/src/cblas_zaxpy.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_zaxpy( f77_int N, const void *alpha, const void *X, +void BLIS_EXPORT_BLAS cblas_zaxpy( f77_int N, const void *alpha, const void *X, f77_int incX, void *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_zcopy.c b/frame/compat/cblas/src/cblas_zcopy.c index 5b0a7dd5d..81bac5ae9 100644 --- a/frame/compat/cblas/src/cblas_zcopy.c +++ b/frame/compat/cblas/src/cblas_zcopy.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_zcopy( f77_int N, const void *X, +void BLIS_EXPORT_BLAS cblas_zcopy( f77_int N, const void *X, f77_int incX, void *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_zdotc_sub.c b/frame/compat/cblas/src/cblas_zdotc_sub.c index 2e0808c88..d9603a849 100644 --- a/frame/compat/cblas/src/cblas_zdotc_sub.c +++ b/frame/compat/cblas/src/cblas_zdotc_sub.c @@ -11,7 +11,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_zdotc_sub( f77_int N, const void *X, f77_int incX, +void BLIS_EXPORT_BLAS cblas_zdotc_sub( f77_int N, const void *X, f77_int incX, const void *Y, f77_int incY, void *dotc) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_zdotu_sub.c b/frame/compat/cblas/src/cblas_zdotu_sub.c index 255ad833f..2561df276 100644 --- a/frame/compat/cblas/src/cblas_zdotu_sub.c +++ b/frame/compat/cblas/src/cblas_zdotu_sub.c @@ -11,7 +11,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_zdotu_sub( f77_int N, const void *X, f77_int incX, +void BLIS_EXPORT_BLAS cblas_zdotu_sub( f77_int N, const void *X, f77_int incX, const void *Y, f77_int incY, void *dotu) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_zdscal.c b/frame/compat/cblas/src/cblas_zdscal.c index 9666e4509..062609b08 100644 --- a/frame/compat/cblas/src/cblas_zdscal.c +++ b/frame/compat/cblas/src/cblas_zdscal.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_zdscal( f77_int N, double alpha, void *X, +void BLIS_EXPORT_BLAS cblas_zdscal( f77_int N, double alpha, void *X, f77_int incX) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_zgbmv.c b/frame/compat/cblas/src/cblas_zgbmv.c index f6efa4e7b..967b14981 100644 --- a/frame/compat/cblas/src/cblas_zgbmv.c +++ b/frame/compat/cblas/src/cblas_zgbmv.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_zgbmv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_zgbmv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, f77_int KL, f77_int KU, const void *alpha, const void *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_zgemm.c b/frame/compat/cblas/src/cblas_zgemm.c index e50de2205..a3ccc9a07 100644 --- a/frame/compat/cblas/src/cblas_zgemm.c +++ b/frame/compat/cblas/src/cblas_zgemm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_zgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, +void BLIS_EXPORT_BLAS cblas_zgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB, f77_int M, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, diff --git a/frame/compat/cblas/src/cblas_zgemv.c b/frame/compat/cblas/src/cblas_zgemv.c index 05b0bfe84..689702d6f 100644 --- a/frame/compat/cblas/src/cblas_zgemv.c +++ b/frame/compat/cblas/src/cblas_zgemv.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_zgemv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_zgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, diff --git a/frame/compat/cblas/src/cblas_zgerc.c b/frame/compat/cblas/src/cblas_zgerc.c index 9667958c5..e93fa21b8 100644 --- a/frame/compat/cblas/src/cblas_zgerc.c +++ b/frame/compat/cblas/src/cblas_zgerc.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_zgerc(enum CBLAS_ORDER order, f77_int M, f77_int N, +void BLIS_EXPORT_BLAS cblas_zgerc(enum CBLAS_ORDER order, f77_int M, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_zgeru.c b/frame/compat/cblas/src/cblas_zgeru.c index 3538ed044..9471781f7 100644 --- a/frame/compat/cblas/src/cblas_zgeru.c +++ b/frame/compat/cblas/src/cblas_zgeru.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_zgeru(enum CBLAS_ORDER order, f77_int M, f77_int N, +void BLIS_EXPORT_BLAS cblas_zgeru(enum CBLAS_ORDER order, f77_int M, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_zhbmv.c b/frame/compat/cblas/src/cblas_zhbmv.c index 8bfd139e9..dc544841a 100644 --- a/frame/compat/cblas/src/cblas_zhbmv.c +++ b/frame/compat/cblas/src/cblas_zhbmv.c @@ -11,7 +11,7 @@ #include "cblas_f77.h" #include #include -void cblas_zhbmv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_zhbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo,f77_int N,f77_int K, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, diff --git a/frame/compat/cblas/src/cblas_zhemm.c b/frame/compat/cblas/src/cblas_zhemm.c index 7da2a41e6..bc19ae828 100644 --- a/frame/compat/cblas/src/cblas_zhemm.c +++ b/frame/compat/cblas/src/cblas_zhemm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_zhemm(enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_zhemm(enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, diff --git a/frame/compat/cblas/src/cblas_zhemv.c b/frame/compat/cblas/src/cblas_zhemv.c index a0b6082ce..62d44b3e6 100644 --- a/frame/compat/cblas/src/cblas_zhemv.c +++ b/frame/compat/cblas/src/cblas_zhemv.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_zhemv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_zhemv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, diff --git a/frame/compat/cblas/src/cblas_zher.c b/frame/compat/cblas/src/cblas_zher.c index 9e513d43b..ecbd36418 100644 --- a/frame/compat/cblas/src/cblas_zher.c +++ b/frame/compat/cblas/src/cblas_zher.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_zher(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zher(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const void *X, f77_int incX ,void *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_zher2.c b/frame/compat/cblas/src/cblas_zher2.c index 5d49302f9..9c523d952 100644 --- a/frame/compat/cblas/src/cblas_zher2.c +++ b/frame/compat/cblas/src/cblas_zher2.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_zher2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zher2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_zher2k.c b/frame/compat/cblas/src/cblas_zher2k.c index 424f650d0..d03ec1370 100644 --- a/frame/compat/cblas/src/cblas_zher2k.c +++ b/frame/compat/cblas/src/cblas_zher2k.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_zher2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zher2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, double beta, diff --git a/frame/compat/cblas/src/cblas_zherk.c b/frame/compat/cblas/src/cblas_zherk.c index 5ddb45184..3167dc0fa 100644 --- a/frame/compat/cblas/src/cblas_zherk.c +++ b/frame/compat/cblas/src/cblas_zherk.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_zherk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zherk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, double alpha, const void *A, f77_int lda, double beta, void *C, f77_int ldc) diff --git a/frame/compat/cblas/src/cblas_zhpmv.c b/frame/compat/cblas/src/cblas_zhpmv.c index 912300d44..602007023 100644 --- a/frame/compat/cblas/src/cblas_zhpmv.c +++ b/frame/compat/cblas/src/cblas_zhpmv.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_zhpmv(enum CBLAS_ORDER order, +void BLIS_EXPORT_BLAS cblas_zhpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo,f77_int N, const void *alpha, const void *AP, const void *X, f77_int incX, const void *beta, diff --git a/frame/compat/cblas/src/cblas_zhpr.c b/frame/compat/cblas/src/cblas_zhpr.c index 80d238170..0f45fd261 100644 --- a/frame/compat/cblas/src/cblas_zhpr.c +++ b/frame/compat/cblas/src/cblas_zhpr.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_zhpr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zhpr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const void *X, f77_int incX, void *A) { diff --git a/frame/compat/cblas/src/cblas_zhpr2.c b/frame/compat/cblas/src/cblas_zhpr2.c index 2aa46062a..6358efc1a 100644 --- a/frame/compat/cblas/src/cblas_zhpr2.c +++ b/frame/compat/cblas/src/cblas_zhpr2.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void cblas_zhpr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zhpr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N,const void *alpha, const void *X, f77_int incX,const void *Y, f77_int incY, void *Ap) diff --git a/frame/compat/cblas/src/cblas_zscal.c b/frame/compat/cblas/src/cblas_zscal.c index a66ea6f9d..c58ddf84b 100644 --- a/frame/compat/cblas/src/cblas_zscal.c +++ b/frame/compat/cblas/src/cblas_zscal.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_zscal( f77_int N, const void *alpha, void *X, +void BLIS_EXPORT_BLAS cblas_zscal( f77_int N, const void *alpha, void *X, f77_int incX) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_zswap.c b/frame/compat/cblas/src/cblas_zswap.c index 6b2eb1a20..662933988 100644 --- a/frame/compat/cblas/src/cblas_zswap.c +++ b/frame/compat/cblas/src/cblas_zswap.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_zswap( f77_int N, void *X, f77_int incX, void *Y, +void BLIS_EXPORT_BLAS cblas_zswap( f77_int N, void *X, f77_int incX, void *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_zsymm.c b/frame/compat/cblas/src/cblas_zsymm.c index 9303c5921..4292d6709 100644 --- a/frame/compat/cblas/src/cblas_zsymm.c +++ b/frame/compat/cblas/src/cblas_zsymm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_zsymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_zsymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, diff --git a/frame/compat/cblas/src/cblas_zsyr2k.c b/frame/compat/cblas/src/cblas_zsyr2k.c index c275cc693..f4a4f0e12 100644 --- a/frame/compat/cblas/src/cblas_zsyr2k.c +++ b/frame/compat/cblas/src/cblas_zsyr2k.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_zsyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zsyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, diff --git a/frame/compat/cblas/src/cblas_zsyrk.c b/frame/compat/cblas/src/cblas_zsyrk.c index ce2c0e1c8..641a975e6 100644 --- a/frame/compat/cblas/src/cblas_zsyrk.c +++ b/frame/compat/cblas/src/cblas_zsyrk.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_zsyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_zsyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *beta, void *C, f77_int ldc) diff --git a/frame/compat/cblas/src/cblas_ztbmv.c b/frame/compat/cblas/src/cblas_ztbmv.c index 3c7f58b96..e07fb42d2 100644 --- a/frame/compat/cblas/src/cblas_ztbmv.c +++ b/frame/compat/cblas/src/cblas_ztbmv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_ztbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ztbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const void *A, f77_int lda, void *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_ztbsv.c b/frame/compat/cblas/src/cblas_ztbsv.c index 56d936e1b..e2126e49c 100644 --- a/frame/compat/cblas/src/cblas_ztbsv.c +++ b/frame/compat/cblas/src/cblas_ztbsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_ztbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ztbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const void *A, f77_int lda, void *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_ztpmv.c b/frame/compat/cblas/src/cblas_ztpmv.c index a8717ccc5..a89a3fdc7 100644 --- a/frame/compat/cblas/src/cblas_ztpmv.c +++ b/frame/compat/cblas/src/cblas_ztpmv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_ztpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ztpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *Ap, void *X, f77_int incX) { diff --git a/frame/compat/cblas/src/cblas_ztpsv.c b/frame/compat/cblas/src/cblas_ztpsv.c index 4aa3706cc..1f51f5d9f 100644 --- a/frame/compat/cblas/src/cblas_ztpsv.c +++ b/frame/compat/cblas/src/cblas_ztpsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_ztpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ztpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *Ap, void *X, f77_int incX) { diff --git a/frame/compat/cblas/src/cblas_ztrmm.c b/frame/compat/cblas/src/cblas_ztrmm.c index 6fa8a2ca9..958a232b3 100644 --- a/frame/compat/cblas/src/cblas_ztrmm.c +++ b/frame/compat/cblas/src/cblas_ztrmm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_ztrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_ztrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_ztrmv.c b/frame/compat/cblas/src/cblas_ztrmv.c index 590105d62..bb3bf4516 100644 --- a/frame/compat/cblas/src/cblas_ztrmv.c +++ b/frame/compat/cblas/src/cblas_ztrmv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_ztrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ztrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *A, f77_int lda, void *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_ztrsm.c b/frame/compat/cblas/src/cblas_ztrsm.c index a68c70e1c..fda012933 100644 --- a/frame/compat/cblas/src/cblas_ztrsm.c +++ b/frame/compat/cblas/src/cblas_ztrsm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void cblas_ztrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void BLIS_EXPORT_BLAS cblas_ztrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_ztrsv.c b/frame/compat/cblas/src/cblas_ztrsv.c index 1a541f7b1..e68d9ebe8 100644 --- a/frame/compat/cblas/src/cblas_ztrsv.c +++ b/frame/compat/cblas/src/cblas_ztrsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void cblas_ztrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void BLIS_EXPORT_BLAS cblas_ztrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *A, f77_int lda, void *X, f77_int incX) diff --git a/frame/compat/f2c/bla_cabs1.c b/frame/compat/f2c/bla_cabs1.c index 59459f2fe..c62cb233a 100644 --- a/frame/compat/f2c/bla_cabs1.c +++ b/frame/compat/f2c/bla_cabs1.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ bla_real PASTEF77(s,cabs1)(bla_scomplex *z) +/* Subroutine */ bla_real BLIS_EXPORT_BLAS PASTEF77(s,cabs1)(bla_scomplex *z) { return bli_fabs( bli_creal( *z ) ) + bli_fabs( bli_cimag( *z ) ); @@ -52,7 +52,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ bla_double PASTEF77(d,cabs1)(bla_dcomplex *z) +/* Subroutine */ bla_double BLIS_EXPORT_BLAS PASTEF77(d,cabs1)(bla_dcomplex *z) { return bli_fabs( bli_zreal( *z ) ) + bli_fabs( bli_zimag( *z ) ); diff --git a/frame/compat/f2c/bla_cabs1.h b/frame/compat/f2c/bla_cabs1.h index edec8c86e..753765a1d 100644 --- a/frame/compat/f2c/bla_cabs1.h +++ b/frame/compat/f2c/bla_cabs1.h @@ -34,7 +34,7 @@ #ifdef BLIS_ENABLE_BLAS -bla_real PASTEF77(s,cabs1)(bla_scomplex *z); -bla_double PASTEF77(d,cabs1)(bla_dcomplex *z); +BLIS_EXPORT_BLAS bla_real PASTEF77(s,cabs1)(bla_scomplex *z); +BLIS_EXPORT_BLAS bla_double PASTEF77(d,cabs1)(bla_dcomplex *z); #endif diff --git a/frame/compat/f2c/bla_gbmv.c b/frame/compat/f2c/bla_gbmv.c index d53dd322a..5f68b5beb 100644 --- a/frame/compat/f2c/bla_gbmv.c +++ b/frame/compat/f2c/bla_gbmv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(c,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_scomplex *alpha, const bla_scomplex *a, const bla_integer *lda, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_scomplex *alpha, const bla_scomplex *a, const bla_integer *lda, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6; @@ -54,9 +54,9 @@ bla_integer info; bla_scomplex temp; bla_integer lenx, leny, i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj; bla_integer kup1; @@ -482,7 +482,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(d,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_double *alpha, const bla_double *a, const bla_integer *lda, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_double *alpha, const bla_double *a, const bla_integer *lda, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6; @@ -491,9 +491,9 @@ bla_integer info; bla_double temp; bla_integer lenx, leny, i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_integer kup1; /* .. Scalar Arguments .. */ @@ -838,7 +838,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(s,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_real *alpha, const bla_real *a, const bla_integer *lda, const bla_real *x, const bla_integer * incx, const bla_real *beta, bla_real *y, const bla_integer *incy) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_real *alpha, const bla_real *a, const bla_integer *lda, const bla_real *x, const bla_integer * incx, const bla_real *beta, bla_real *y, const bla_integer *incy) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6; @@ -847,9 +847,9 @@ bla_integer info; bla_real temp; bla_integer lenx, leny, i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_integer kup1; /* .. Scalar Arguments .. */ @@ -1194,7 +1194,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(z,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_dcomplex *alpha, const bla_dcomplex *a, const bla_integer *lda, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *beta, bla_dcomplex * y, const bla_integer *incy) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_dcomplex *alpha, const bla_dcomplex *a, const bla_integer *lda, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *beta, bla_dcomplex * y, const bla_integer *incy) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6; @@ -1207,9 +1207,9 @@ bla_integer info; bla_dcomplex temp; bla_integer lenx, leny, i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj; bla_integer kup1; diff --git a/frame/compat/f2c/bla_gbmv.h b/frame/compat/f2c/bla_gbmv.h index b0fd7f30b..eb8ce2534 100644 --- a/frame/compat/f2c/bla_gbmv.h +++ b/frame/compat/f2c/bla_gbmv.h @@ -34,9 +34,9 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(c,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_scomplex *alpha, const bla_scomplex *a, const bla_integer *lda, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy); -int PASTEF77(d,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_double *alpha, const bla_double *a, const bla_integer *lda, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy); -int PASTEF77(s,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_real *alpha, const bla_real *a, const bla_integer *lda, const bla_real *x, const bla_integer * incx, const bla_real *beta, bla_real *y, const bla_integer *incy); -int PASTEF77(z,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_dcomplex *alpha, const bla_dcomplex *a, const bla_integer *lda, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *beta, bla_dcomplex * y, const bla_integer *incy); +BLIS_EXPORT_BLAS int PASTEF77(c,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_scomplex *alpha, const bla_scomplex *a, const bla_integer *lda, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy); +BLIS_EXPORT_BLAS int PASTEF77(d,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_double *alpha, const bla_double *a, const bla_integer *lda, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy); +BLIS_EXPORT_BLAS int PASTEF77(s,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_real *alpha, const bla_real *a, const bla_integer *lda, const bla_real *x, const bla_integer * incx, const bla_real *beta, bla_real *y, const bla_integer *incy); +BLIS_EXPORT_BLAS int PASTEF77(z,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_dcomplex *alpha, const bla_dcomplex *a, const bla_integer *lda, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *beta, bla_dcomplex * y, const bla_integer *incy); #endif diff --git a/frame/compat/f2c/bla_hbmv.c b/frame/compat/f2c/bla_hbmv.c index 198336d04..f548331f6 100644 --- a/frame/compat/f2c/bla_hbmv.c +++ b/frame/compat/f2c/bla_hbmv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(c,hbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_scomplex * alpha, const bla_scomplex *a, const bla_integer *lda, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,hbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_scomplex * alpha, const bla_scomplex *a, const bla_integer *lda, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5; @@ -55,9 +55,9 @@ bla_integer info; bla_scomplex temp1, temp2; bla_integer i__, j, l; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ @@ -487,7 +487,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(z,hbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_dcomplex *alpha, const bla_dcomplex *a, const bla_integer *lda, const bla_dcomplex *x, const bla_integer * incx, const bla_dcomplex *beta, bla_dcomplex *y, const bla_integer *incy) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,hbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_dcomplex *alpha, const bla_dcomplex *a, const bla_integer *lda, const bla_dcomplex *x, const bla_integer * incx, const bla_dcomplex *beta, bla_dcomplex *y, const bla_integer *incy) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5; @@ -501,9 +501,9 @@ bla_integer info; bla_dcomplex temp1, temp2; bla_integer i__, j, l; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ diff --git a/frame/compat/f2c/bla_hbmv.h b/frame/compat/f2c/bla_hbmv.h index 8a10c75da..1ddb83807 100644 --- a/frame/compat/f2c/bla_hbmv.h +++ b/frame/compat/f2c/bla_hbmv.h @@ -34,7 +34,7 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(c,hbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_scomplex *alpha, const bla_scomplex *a, const bla_integer *lda, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy); -int PASTEF77(z,hbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_dcomplex *alpha, const bla_dcomplex *a, const bla_integer *lda, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *beta, bla_dcomplex *y, const bla_integer *incy); +BLIS_EXPORT_BLAS int PASTEF77(c,hbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_scomplex *alpha, const bla_scomplex *a, const bla_integer *lda, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy); +BLIS_EXPORT_BLAS int PASTEF77(z,hbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_dcomplex *alpha, const bla_dcomplex *a, const bla_integer *lda, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *beta, bla_dcomplex *y, const bla_integer *incy); #endif diff --git a/frame/compat/f2c/bla_hpmv.c b/frame/compat/f2c/bla_hpmv.c index 0d7ebce9d..2daa47bf5 100644 --- a/frame/compat/f2c/bla_hpmv.c +++ b/frame/compat/f2c/bla_hpmv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(c,hpmv)(const bla_character *uplo, const bla_integer *n, const bla_scomplex *alpha, const bla_scomplex * ap, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,hpmv)(const bla_character *uplo, const bla_integer *n, const bla_scomplex *alpha, const bla_scomplex * ap, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5; @@ -55,9 +55,9 @@ bla_integer info; bla_scomplex temp1, temp2; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ @@ -439,7 +439,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(z,hpmv)(const bla_character *uplo, const bla_integer *n, const bla_dcomplex *alpha, const bla_dcomplex *ap, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *beta, bla_dcomplex *y, const bla_integer *incy) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,hpmv)(const bla_character *uplo, const bla_integer *n, const bla_dcomplex *alpha, const bla_dcomplex *ap, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *beta, bla_dcomplex *y, const bla_integer *incy) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5; @@ -453,9 +453,9 @@ bla_integer info; bla_dcomplex temp1, temp2; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ diff --git a/frame/compat/f2c/bla_hpmv.h b/frame/compat/f2c/bla_hpmv.h index fc744f985..26d055eff 100644 --- a/frame/compat/f2c/bla_hpmv.h +++ b/frame/compat/f2c/bla_hpmv.h @@ -34,7 +34,7 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(c,hpmv)(const bla_character *uplo, const bla_integer *n, const bla_scomplex *alpha, const bla_scomplex *ap, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy); -int PASTEF77(z,hpmv)(const bla_character *uplo, const bla_integer *n, const bla_dcomplex *alpha, const bla_dcomplex *ap, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *beta, bla_dcomplex *y, const bla_integer *incy); +BLIS_EXPORT_BLAS int PASTEF77(c,hpmv)(const bla_character *uplo, const bla_integer *n, const bla_scomplex *alpha, const bla_scomplex *ap, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy); +BLIS_EXPORT_BLAS int PASTEF77(z,hpmv)(const bla_character *uplo, const bla_integer *n, const bla_dcomplex *alpha, const bla_dcomplex *ap, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *beta, bla_dcomplex *y, const bla_integer *incy); #endif diff --git a/frame/compat/f2c/bla_hpr.c b/frame/compat/f2c/bla_hpr.c index da1f0a0f3..be0f796c6 100644 --- a/frame/compat/f2c/bla_hpr.c +++ b/frame/compat/f2c/bla_hpr.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(c,hpr)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_scomplex *x, const bla_integer *incx, bla_scomplex *ap) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,hpr)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_scomplex *x, const bla_integer *incx, bla_scomplex *ap) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5; @@ -55,9 +55,9 @@ bla_integer info; bla_scomplex temp; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ @@ -353,7 +353,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(z,hpr)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_dcomplex *x, const bla_integer *incx, bla_dcomplex *ap) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,hpr)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_dcomplex *x, const bla_integer *incx, bla_dcomplex *ap) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5; @@ -367,9 +367,9 @@ bla_integer info; bla_dcomplex temp; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ diff --git a/frame/compat/f2c/bla_hpr.h b/frame/compat/f2c/bla_hpr.h index 1c1a96fc8..cfce9e177 100644 --- a/frame/compat/f2c/bla_hpr.h +++ b/frame/compat/f2c/bla_hpr.h @@ -34,7 +34,7 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(c,hpr)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_scomplex *x, const bla_integer *incx, bla_scomplex *ap); -int PASTEF77(z,hpr)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_dcomplex *x, const bla_integer *incx, bla_dcomplex *ap); +BLIS_EXPORT_BLAS int PASTEF77(c,hpr)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_scomplex *x, const bla_integer *incx, bla_scomplex *ap); +BLIS_EXPORT_BLAS int PASTEF77(z,hpr)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_dcomplex *x, const bla_integer *incx, bla_dcomplex *ap); #endif diff --git a/frame/compat/f2c/bla_hpr2.c b/frame/compat/f2c/bla_hpr2.c index c78c1eec0..597ab7439 100644 --- a/frame/compat/f2c/bla_hpr2.c +++ b/frame/compat/f2c/bla_hpr2.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(c,hpr2)(const bla_character *uplo, const bla_integer *n, const bla_scomplex *alpha, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *y, const bla_integer *incy, bla_scomplex *ap) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,hpr2)(const bla_character *uplo, const bla_integer *n, const bla_scomplex *alpha, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *y, const bla_integer *incy, bla_scomplex *ap) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5, i__6; @@ -55,9 +55,9 @@ bla_integer info; bla_scomplex temp1, temp2; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, iy, jx = 0, jy = 0, kx = 0, ky = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ @@ -429,7 +429,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(z,hpr2)(const bla_character *uplo, const bla_integer *n, const bla_dcomplex *alpha, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *y, const bla_integer *incy, bla_dcomplex *ap) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,hpr2)(const bla_character *uplo, const bla_integer *n, const bla_dcomplex *alpha, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *y, const bla_integer *incy, bla_dcomplex *ap) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5, i__6; @@ -443,9 +443,9 @@ bla_integer info; bla_dcomplex temp1, temp2; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, iy, jx = 0, jy = 0, kx = 0, ky = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ diff --git a/frame/compat/f2c/bla_hpr2.h b/frame/compat/f2c/bla_hpr2.h index 766974eaf..16f929d61 100644 --- a/frame/compat/f2c/bla_hpr2.h +++ b/frame/compat/f2c/bla_hpr2.h @@ -34,7 +34,7 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(c,hpr2)(const bla_character *uplo, const bla_integer *n, const bla_scomplex *alpha, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *y, const bla_integer *incy, bla_scomplex *ap); -int PASTEF77(z,hpr2)(const bla_character *uplo, const bla_integer *n, const bla_dcomplex *alpha, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *y, const bla_integer *incy, bla_dcomplex *ap); +BLIS_EXPORT_BLAS int PASTEF77(c,hpr2)(const bla_character *uplo, const bla_integer *n, const bla_scomplex *alpha, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *y, const bla_integer *incy, bla_scomplex *ap); +BLIS_EXPORT_BLAS int PASTEF77(z,hpr2)(const bla_character *uplo, const bla_integer *n, const bla_dcomplex *alpha, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *y, const bla_integer *incy, bla_dcomplex *ap); #endif diff --git a/frame/compat/f2c/bla_lsame.c b/frame/compat/f2c/bla_lsame.c index edee918d1..c5a7d2558 100644 --- a/frame/compat/f2c/bla_lsame.c +++ b/frame/compat/f2c/bla_lsame.c @@ -45,7 +45,7 @@ #ifdef LAPACK_ILP64 long PASTEF770(lsame)(const char *ca, const char *cb, long ca_len, long cb_len) #else -int PASTEF770(lsame)(const char *ca, const char *cb, int ca_len, int cb_len) +BLIS_EXPORT_BLAS int PASTEF770(lsame)(const char *ca, const char *cb, int ca_len, int cb_len) #endif { /* System generated locals */ diff --git a/frame/compat/f2c/bla_lsame.h b/frame/compat/f2c/bla_lsame.h index 738ce08b8..656032688 100644 --- a/frame/compat/f2c/bla_lsame.h +++ b/frame/compat/f2c/bla_lsame.h @@ -37,7 +37,7 @@ #ifdef LAPACK_ILP64 long PASTEF770(lsame)(const char *ca, const char *cb, long ca_len, long cb_len); #else -int PASTEF770(lsame)(const char *ca, const char *cb, int ca_len, int cb_len); +BLIS_EXPORT_BLAS int PASTEF770(lsame)(const char *ca, const char *cb, int ca_len, int cb_len); #endif #endif diff --git a/frame/compat/f2c/bla_rot.c b/frame/compat/f2c/bla_rot.c index c79769bc0..4c66e4aa8 100644 --- a/frame/compat/f2c/bla_rot.c +++ b/frame/compat/f2c/bla_rot.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(s,rot)(const bla_integer *n, bla_real *sx, const bla_integer *incx, bla_real *sy, const bla_integer *incy, const bla_real *c__, const bla_real *s) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,rot)(const bla_integer *n, bla_real *sx, const bla_integer *incx, bla_real *sy, const bla_integer *incy, const bla_real *c__, const bla_real *s) { /* System generated locals */ bla_integer i__1; @@ -109,7 +109,7 @@ L20: -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(d,rot)(const bla_integer *n, bla_double *dx, const bla_integer *incx, bla_double *dy, const bla_integer *incy, const bla_double *c__, const bla_double *s) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,rot)(const bla_integer *n, bla_double *dx, const bla_integer *incx, bla_double *dy, const bla_integer *incy, const bla_double *c__, const bla_double *s) { /* System generated locals */ bla_integer i__1; @@ -177,7 +177,7 @@ L20: -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(cs,rot)(const bla_integer *n, bla_scomplex *cx, const bla_integer *incx, bla_scomplex *cy, const bla_integer *incy, const bla_real *c__, const bla_real *s) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(cs,rot)(const bla_integer *n, bla_scomplex *cx, const bla_integer *incx, bla_scomplex *cy, const bla_integer *incy, const bla_real *c__, const bla_real *s) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4; @@ -270,7 +270,7 @@ L20: -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(zd,rot)(const bla_integer *n, bla_dcomplex *zx, const bla_integer *incx, bla_dcomplex *zy, const bla_integer *incy, const bla_double *c__, const bla_double *s) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(zd,rot)(const bla_integer *n, bla_dcomplex *zx, const bla_integer *incx, bla_dcomplex *zy, const bla_integer *incy, const bla_double *c__, const bla_double *s) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4; diff --git a/frame/compat/f2c/bla_rot.h b/frame/compat/f2c/bla_rot.h index 1532a7cfc..609355560 100644 --- a/frame/compat/f2c/bla_rot.h +++ b/frame/compat/f2c/bla_rot.h @@ -34,9 +34,9 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(s,rot)(const bla_integer *n, bla_real *sx, const bla_integer *incx, bla_real *sy, const bla_integer *incy, const bla_real *c__, const bla_real *s); -int PASTEF77(d,rot)(const bla_integer *n, bla_double *dx, const bla_integer *incx, bla_double *dy, const bla_integer *incy, const bla_double *c__, const bla_double *s); -int PASTEF77(cs,rot)(const bla_integer *n, bla_scomplex *cx, const bla_integer *incx, bla_scomplex *cy, const bla_integer *incy, const bla_real *c__, const bla_real *s); -int PASTEF77(zd,rot)(const bla_integer *n, bla_dcomplex *zx, const bla_integer *incx, bla_dcomplex *zy, const bla_integer *incy, const bla_double *c__, const bla_double *s); +BLIS_EXPORT_BLAS int PASTEF77(s,rot)(const bla_integer *n, bla_real *sx, const bla_integer *incx, bla_real *sy, const bla_integer *incy, const bla_real *c__, const bla_real *s); +BLIS_EXPORT_BLAS int PASTEF77(d,rot)(const bla_integer *n, bla_double *dx, const bla_integer *incx, bla_double *dy, const bla_integer *incy, const bla_double *c__, const bla_double *s); +BLIS_EXPORT_BLAS int PASTEF77(cs,rot)(const bla_integer *n, bla_scomplex *cx, const bla_integer *incx, bla_scomplex *cy, const bla_integer *incy, const bla_real *c__, const bla_real *s); +BLIS_EXPORT_BLAS int PASTEF77(zd,rot)(const bla_integer *n, bla_dcomplex *zx, const bla_integer *incx, bla_dcomplex *zy, const bla_integer *incy, const bla_double *c__, const bla_double *s); #endif diff --git a/frame/compat/f2c/bla_rotg.c b/frame/compat/f2c/bla_rotg.c index 1572689f5..1315bd6aa 100644 --- a/frame/compat/f2c/bla_rotg.c +++ b/frame/compat/f2c/bla_rotg.c @@ -45,7 +45,7 @@ static bla_real sc_b4 = 1.f; -/* Subroutine */ int PASTEF77(s,rotg)(bla_real *sa, bla_real *sb, bla_real *c__, bla_real *s) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,rotg)(bla_real *sa, bla_real *sb, bla_real *c__, bla_real *s) { /* System generated locals */ bla_real r__1, r__2; @@ -105,7 +105,7 @@ L20: static bla_double dc_b4 = 1.; -/* Subroutine */ int PASTEF77(d,rotg)(bla_double *da, bla_double *db, bla_double *c__, bla_double *s) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,rotg)(bla_double *da, bla_double *db, bla_double *c__, bla_double *s) { /* System generated locals */ bla_double d__1, d__2; @@ -161,7 +161,7 @@ L20: -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(c,rotg)(bla_scomplex *ca, bla_scomplex *cb, bla_real *c__, bla_scomplex *s) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,rotg)(bla_scomplex *ca, bla_scomplex *cb, bla_real *c__, bla_scomplex *s) { /* System generated locals */ bla_real r__1, r__2; @@ -211,7 +211,7 @@ L20: -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(z,rotg)(bla_dcomplex *ca, bla_dcomplex *cb, bla_double *c__, bla_dcomplex *s) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,rotg)(bla_dcomplex *ca, bla_dcomplex *cb, bla_double *c__, bla_dcomplex *s) { /* System generated locals */ bla_double d__1, d__2; diff --git a/frame/compat/f2c/bla_rotg.h b/frame/compat/f2c/bla_rotg.h index c89f0279b..b968ebbea 100644 --- a/frame/compat/f2c/bla_rotg.h +++ b/frame/compat/f2c/bla_rotg.h @@ -34,9 +34,9 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(s,rotg)(bla_real *sa, bla_real *sb, bla_real *c__, bla_real *s); -int PASTEF77(d,rotg)(bla_double *da, bla_double *db, bla_double *c__, bla_double *s); -int PASTEF77(c,rotg)(bla_scomplex *ca, bla_scomplex *cb, bla_real *c__, bla_scomplex *s); -int PASTEF77(z,rotg)(bla_dcomplex *ca, bla_dcomplex *cb, bla_double *c__, bla_dcomplex *s); +BLIS_EXPORT_BLAS int PASTEF77(s,rotg)(bla_real *sa, bla_real *sb, bla_real *c__, bla_real *s); +BLIS_EXPORT_BLAS int PASTEF77(d,rotg)(bla_double *da, bla_double *db, bla_double *c__, bla_double *s); +BLIS_EXPORT_BLAS int PASTEF77(c,rotg)(bla_scomplex *ca, bla_scomplex *cb, bla_real *c__, bla_scomplex *s); +BLIS_EXPORT_BLAS int PASTEF77(z,rotg)(bla_dcomplex *ca, bla_dcomplex *cb, bla_double *c__, bla_dcomplex *s); #endif diff --git a/frame/compat/f2c/bla_rotm.c b/frame/compat/f2c/bla_rotm.c index 003dea715..b39d33115 100644 --- a/frame/compat/f2c/bla_rotm.c +++ b/frame/compat/f2c/bla_rotm.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(s,rotm)(const bla_integer *n, bla_real *sx, const bla_integer *incx, bla_real *sy, const bla_integer *incy, const bla_real *sparam) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,rotm)(const bla_integer *n, bla_real *sx, const bla_integer *incx, bla_real *sy, const bla_integer *incy, const bla_real *sparam) { /* Initialized data */ @@ -207,7 +207,7 @@ L140: -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(d,rotm)(const bla_integer *n, bla_double *dx, const bla_integer *incx, bla_double *dy, const bla_integer *incy, const bla_double *dparam) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,rotm)(const bla_integer *n, bla_double *dx, const bla_integer *incx, bla_double *dy, const bla_integer *incy, const bla_double *dparam) { /* Initialized data */ diff --git a/frame/compat/f2c/bla_rotm.h b/frame/compat/f2c/bla_rotm.h index d28f0919b..21906358b 100644 --- a/frame/compat/f2c/bla_rotm.h +++ b/frame/compat/f2c/bla_rotm.h @@ -34,7 +34,7 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(s,rotm)(const bla_integer *n, bla_real *sx, const bla_integer *incx, bla_real *sy, const bla_integer *incy, const bla_real *sparam); -int PASTEF77(d,rotm)(const bla_integer *n, bla_double *dx, const bla_integer *incx, bla_double *dy, const bla_integer *incy, const bla_double *dparam); +BLIS_EXPORT_BLAS int PASTEF77(s,rotm)(const bla_integer *n, bla_real *sx, const bla_integer *incx, bla_real *sy, const bla_integer *incy, const bla_real *sparam); +BLIS_EXPORT_BLAS int PASTEF77(d,rotm)(const bla_integer *n, bla_double *dx, const bla_integer *incx, bla_double *dy, const bla_integer *incy, const bla_double *dparam); #endif diff --git a/frame/compat/f2c/bla_rotmg.c b/frame/compat/f2c/bla_rotmg.c index 11ccc6f33..2803417fe 100644 --- a/frame/compat/f2c/bla_rotmg.c +++ b/frame/compat/f2c/bla_rotmg.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(s,rotmg)(bla_real *sd1, bla_real *sd2, bla_real *sx1, const bla_real *sy1, bla_real *sparam) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,rotmg)(bla_real *sd1, bla_real *sd2, bla_real *sx1, const bla_real *sy1, bla_real *sparam) { /* Initialized data */ @@ -281,7 +281,7 @@ L260: -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(d,rotmg)(bla_double *dd1, bla_double *dd2, bla_double *dx1, const bla_double *dy1, bla_double *dparam) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,rotmg)(bla_double *dd1, bla_double *dd2, bla_double *dx1, const bla_double *dy1, bla_double *dparam) { /* Initialized data */ diff --git a/frame/compat/f2c/bla_rotmg.h b/frame/compat/f2c/bla_rotmg.h index 29d42a90f..63e9710da 100644 --- a/frame/compat/f2c/bla_rotmg.h +++ b/frame/compat/f2c/bla_rotmg.h @@ -34,7 +34,7 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(s,rotmg)(bla_real *sd1, bla_real *sd2, bla_real *sx1, const bla_real *sy1, bla_real *sparam); -int PASTEF77(d,rotmg)(bla_double *dd1, bla_double *dd2, bla_double *dx1, const bla_double *dy1, bla_double *dparam); +BLIS_EXPORT_BLAS int PASTEF77(s,rotmg)(bla_real *sd1, bla_real *sd2, bla_real *sx1, const bla_real *sy1, bla_real *sparam); +BLIS_EXPORT_BLAS int PASTEF77(d,rotmg)(bla_double *dd1, bla_double *dd2, bla_double *dx1, const bla_double *dy1, bla_double *dparam); #endif diff --git a/frame/compat/f2c/bla_sbmv.c b/frame/compat/f2c/bla_sbmv.c index 566fabd81..ddedc9ea7 100644 --- a/frame/compat/f2c/bla_sbmv.c +++ b/frame/compat/f2c/bla_sbmv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(d,sbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_double *alpha, const bla_double *a, const bla_integer *lda, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,sbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_double *alpha, const bla_double *a, const bla_integer *lda, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4; @@ -50,9 +50,9 @@ bla_integer info; bla_double temp1, temp2; bla_integer i__, j, l; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ @@ -392,7 +392,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(s,sbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_real *alpha, const bla_real *a, const bla_integer *lda, const bla_real *x, const bla_integer *incx, const bla_real *beta, bla_real *y, const bla_integer *incy) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,sbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_real *alpha, const bla_real *a, const bla_integer *lda, const bla_real *x, const bla_integer *incx, const bla_real *beta, bla_real *y, const bla_integer *incy) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4; @@ -401,9 +401,9 @@ bla_integer info; bla_real temp1, temp2; bla_integer i__, j, l; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ diff --git a/frame/compat/f2c/bla_sbmv.h b/frame/compat/f2c/bla_sbmv.h index 75442fc7c..c3f3fc24f 100644 --- a/frame/compat/f2c/bla_sbmv.h +++ b/frame/compat/f2c/bla_sbmv.h @@ -34,7 +34,7 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(d,sbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_double *alpha, const bla_double *a, const bla_integer *lda, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy); -int PASTEF77(s,sbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_real *alpha, const bla_real *a, const bla_integer *lda, const bla_real *x, const bla_integer *incx, const bla_real *beta, bla_real *y, const bla_integer *incy); +BLIS_EXPORT_BLAS int PASTEF77(d,sbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_double *alpha, const bla_double *a, const bla_integer *lda, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy); +BLIS_EXPORT_BLAS int PASTEF77(s,sbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_real *alpha, const bla_real *a, const bla_integer *lda, const bla_real *x, const bla_integer *incx, const bla_real *beta, bla_real *y, const bla_integer *incy); #endif diff --git a/frame/compat/f2c/bla_spmv.c b/frame/compat/f2c/bla_spmv.c index 0485e1dc3..909085f38 100644 --- a/frame/compat/f2c/bla_spmv.c +++ b/frame/compat/f2c/bla_spmv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(d,spmv)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *ap, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,spmv)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *ap, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy) { /* System generated locals */ bla_integer i__1, i__2; @@ -50,9 +50,9 @@ bla_integer info; bla_double temp1, temp2; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ @@ -342,7 +342,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(s,spmv)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *ap, const bla_real *x, const bla_integer *incx, const bla_real *beta, bla_real *y, const bla_integer *incy) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,spmv)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *ap, const bla_real *x, const bla_integer *incx, const bla_real *beta, bla_real *y, const bla_integer *incy) { /* System generated locals */ bla_integer i__1, i__2; @@ -351,9 +351,9 @@ bla_integer info; bla_real temp1, temp2; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ diff --git a/frame/compat/f2c/bla_spmv.h b/frame/compat/f2c/bla_spmv.h index 8e0d0c1ff..7db7d4a8b 100644 --- a/frame/compat/f2c/bla_spmv.h +++ b/frame/compat/f2c/bla_spmv.h @@ -34,7 +34,7 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(d,spmv)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *ap, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy); -int PASTEF77(s,spmv)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *ap, const bla_real *x, const bla_integer *incx, const bla_real *beta, bla_real *y, const bla_integer *incy); +BLIS_EXPORT_BLAS int PASTEF77(d,spmv)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *ap, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy); +BLIS_EXPORT_BLAS int PASTEF77(s,spmv)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *ap, const bla_real *x, const bla_integer *incx, const bla_real *beta, bla_real *y, const bla_integer *incy); #endif diff --git a/frame/compat/f2c/bla_spr.c b/frame/compat/f2c/bla_spr.c index d276458b4..84f33b569 100644 --- a/frame/compat/f2c/bla_spr.c +++ b/frame/compat/f2c/bla_spr.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(d,spr)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *x, const bla_integer *incx, bla_double *ap) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,spr)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *x, const bla_integer *incx, bla_double *ap) { /* System generated locals */ bla_integer i__1, i__2; @@ -50,9 +50,9 @@ bla_integer info; bla_double temp; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ @@ -268,7 +268,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(s,spr)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *x, const bla_integer *incx, bla_real *ap) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,spr)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *x, const bla_integer *incx, bla_real *ap) { /* System generated locals */ bla_integer i__1, i__2; @@ -277,9 +277,9 @@ bla_integer info; bla_real temp; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ diff --git a/frame/compat/f2c/bla_spr.h b/frame/compat/f2c/bla_spr.h index af63cea52..6712d7c16 100644 --- a/frame/compat/f2c/bla_spr.h +++ b/frame/compat/f2c/bla_spr.h @@ -34,7 +34,7 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(d,spr)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *x, const bla_integer *incx, bla_double *ap); -int PASTEF77(s,spr)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *x, const bla_integer *incx, bla_real *ap); +BLIS_EXPORT_BLAS int PASTEF77(d,spr)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *x, const bla_integer *incx, bla_double *ap); +BLIS_EXPORT_BLAS int PASTEF77(s,spr)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *x, const bla_integer *incx, bla_real *ap); #endif diff --git a/frame/compat/f2c/bla_spr2.c b/frame/compat/f2c/bla_spr2.c index 7c7538212..e2df99299 100644 --- a/frame/compat/f2c/bla_spr2.c +++ b/frame/compat/f2c/bla_spr2.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(d,spr2)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *x, const bla_integer *incx, const bla_double *y, const bla_integer *incy, bla_double *ap) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,spr2)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *x, const bla_integer *incx, const bla_double *y, const bla_integer *incy, bla_double *ap) { /* System generated locals */ bla_integer i__1, i__2; @@ -50,9 +50,9 @@ bla_integer info; bla_double temp1, temp2; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, iy, jx = 0, jy = 0, kx = 0, ky = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ @@ -300,7 +300,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(s,spr2)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *x, const bla_integer *incx, const bla_real *y, const bla_integer *incy, bla_real *ap) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,spr2)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *x, const bla_integer *incx, const bla_real *y, const bla_integer *incy, bla_real *ap) { /* System generated locals */ bla_integer i__1, i__2; @@ -309,9 +309,9 @@ bla_integer info; bla_real temp1, temp2; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, iy, jx = 0, jy = 0, kx = 0, ky = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ diff --git a/frame/compat/f2c/bla_spr2.h b/frame/compat/f2c/bla_spr2.h index b6322cc37..5a1d60747 100644 --- a/frame/compat/f2c/bla_spr2.h +++ b/frame/compat/f2c/bla_spr2.h @@ -34,7 +34,7 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(d,spr2)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *x, const bla_integer *incx, const bla_double *y, const bla_integer *incy, bla_double *ap); -int PASTEF77(s,spr2)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *x, const bla_integer *incx, const bla_real *y, const bla_integer *incy, bla_real *ap); +BLIS_EXPORT_BLAS int PASTEF77(d,spr2)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *x, const bla_integer *incx, const bla_double *y, const bla_integer *incy, bla_double *ap); +BLIS_EXPORT_BLAS int PASTEF77(s,spr2)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *x, const bla_integer *incx, const bla_real *y, const bla_integer *incy, bla_real *ap); #endif diff --git a/frame/compat/f2c/bla_tbmv.c b/frame/compat/f2c/bla_tbmv.c index 78feb7056..2d25bde6c 100644 --- a/frame/compat/f2c/bla_tbmv.c +++ b/frame/compat/f2c/bla_tbmv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(c,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_scomplex *a, const bla_integer *lda, bla_scomplex *x, const bla_integer *incx) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_scomplex *a, const bla_integer *lda, bla_scomplex *x, const bla_integer *incx) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5; @@ -54,9 +54,9 @@ bla_integer info; bla_scomplex temp; bla_integer i__, j, l; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj, nounit; /* .. Scalar Arguments .. */ @@ -611,7 +611,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(d,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_double *a, const bla_integer *lda, bla_double *x, const bla_integer *incx) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_double *a, const bla_integer *lda, bla_double *x, const bla_integer *incx) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4; @@ -620,9 +620,9 @@ bla_integer info; bla_double temp; bla_integer i__, j, l; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical nounit; /* .. Scalar Arguments .. */ @@ -1022,7 +1022,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(s,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_real *a, const bla_integer *lda, bla_real *x, const bla_integer *incx) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_real *a, const bla_integer *lda, bla_real *x, const bla_integer *incx) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4; @@ -1031,9 +1031,9 @@ bla_integer info; bla_real temp; bla_integer i__, j, l; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical nounit; /* .. Scalar Arguments .. */ @@ -1433,7 +1433,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(z,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_dcomplex *a, const bla_integer *lda, bla_dcomplex *x, const bla_integer *incx) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_dcomplex *a, const bla_integer *lda, bla_dcomplex *x, const bla_integer *incx) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5; @@ -1446,9 +1446,9 @@ bla_integer info; bla_dcomplex temp; bla_integer i__, j, l; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj, nounit; /* .. Scalar Arguments .. */ diff --git a/frame/compat/f2c/bla_tbmv.h b/frame/compat/f2c/bla_tbmv.h index c524f0ee2..f34654762 100644 --- a/frame/compat/f2c/bla_tbmv.h +++ b/frame/compat/f2c/bla_tbmv.h @@ -34,9 +34,9 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(c,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_scomplex *a, const bla_integer *lda, bla_scomplex *x, const bla_integer *incx); -int PASTEF77(d,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_double *a, const bla_integer *lda, bla_double *x, const bla_integer *incx); -int PASTEF77(s,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_real *a, const bla_integer *lda, bla_real *x, const bla_integer *incx); -int PASTEF77(z,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_dcomplex *a, const bla_integer *lda, bla_dcomplex *x, const bla_integer *incx); +BLIS_EXPORT_BLAS int PASTEF77(c,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_scomplex *a, const bla_integer *lda, bla_scomplex *x, const bla_integer *incx); +BLIS_EXPORT_BLAS int PASTEF77(d,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_double *a, const bla_integer *lda, bla_double *x, const bla_integer *incx); +BLIS_EXPORT_BLAS int PASTEF77(s,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_real *a, const bla_integer *lda, bla_real *x, const bla_integer *incx); +BLIS_EXPORT_BLAS int PASTEF77(z,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_dcomplex *a, const bla_integer *lda, bla_dcomplex *x, const bla_integer *incx); #endif diff --git a/frame/compat/f2c/bla_tbsv.c b/frame/compat/f2c/bla_tbsv.c index 6914882d2..733e90a2d 100644 --- a/frame/compat/f2c/bla_tbsv.c +++ b/frame/compat/f2c/bla_tbsv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(c,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_scomplex *a, const bla_integer *lda, bla_scomplex *x, const bla_integer *incx) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_scomplex *a, const bla_integer *lda, bla_scomplex *x, const bla_integer *incx) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5; @@ -54,9 +54,9 @@ bla_integer info; bla_scomplex temp; bla_integer i__, j, l; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj, nounit; /* .. Scalar Arguments .. */ @@ -603,7 +603,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(d,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_double *a, const bla_integer *lda, bla_double *x, const bla_integer *incx) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_double *a, const bla_integer *lda, bla_double *x, const bla_integer *incx) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4; @@ -612,9 +612,9 @@ bla_integer info; bla_double temp; bla_integer i__, j, l; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical nounit; /* .. Scalar Arguments .. */ @@ -1018,7 +1018,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(s,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_real *a, const bla_integer *lda, bla_real *x, const bla_integer *incx) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_real *a, const bla_integer *lda, bla_real *x, const bla_integer *incx) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4; @@ -1027,9 +1027,9 @@ bla_integer info; bla_real temp; bla_integer i__, j, l; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical nounit; /* .. Scalar Arguments .. */ @@ -1433,7 +1433,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(z,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_dcomplex *a, const bla_integer *lda, bla_dcomplex *x, const bla_integer *incx) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_dcomplex *a, const bla_integer *lda, bla_dcomplex *x, const bla_integer *incx) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5; @@ -1447,9 +1447,9 @@ bla_integer info; bla_dcomplex temp; bla_integer i__, j, l; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj, nounit; /* .. Scalar Arguments .. */ diff --git a/frame/compat/f2c/bla_tbsv.h b/frame/compat/f2c/bla_tbsv.h index e48de07e1..5e84f5c36 100644 --- a/frame/compat/f2c/bla_tbsv.h +++ b/frame/compat/f2c/bla_tbsv.h @@ -34,9 +34,9 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(c,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_scomplex *a, const bla_integer *lda, bla_scomplex *x, const bla_integer *incx); -int PASTEF77(d,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_double *a, const bla_integer *lda, bla_double *x, const bla_integer *incx); -int PASTEF77(s,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_real *a, const bla_integer *lda, bla_real *x, const bla_integer *incx); -int PASTEF77(z,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_dcomplex *a, const bla_integer *lda, bla_dcomplex *x, const bla_integer *incx); +BLIS_EXPORT_BLAS int PASTEF77(c,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_scomplex *a, const bla_integer *lda, bla_scomplex *x, const bla_integer *incx); +BLIS_EXPORT_BLAS int PASTEF77(d,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_double *a, const bla_integer *lda, bla_double *x, const bla_integer *incx); +BLIS_EXPORT_BLAS int PASTEF77(s,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_real *a, const bla_integer *lda, bla_real *x, const bla_integer *incx); +BLIS_EXPORT_BLAS int PASTEF77(z,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_dcomplex *a, const bla_integer *lda, bla_dcomplex *x, const bla_integer *incx); #endif diff --git a/frame/compat/f2c/bla_tpmv.c b/frame/compat/f2c/bla_tpmv.c index 8fa46f4c4..eddd776d6 100644 --- a/frame/compat/f2c/bla_tpmv.c +++ b/frame/compat/f2c/bla_tpmv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(c,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_scomplex *ap, bla_scomplex *x, const bla_integer *incx) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_scomplex *ap, bla_scomplex *x, const bla_integer *incx) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5; @@ -54,9 +54,9 @@ bla_integer info; bla_scomplex temp; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj, nounit; /* .. Scalar Arguments .. */ @@ -542,7 +542,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(d,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_double *ap, bla_double *x, const bla_integer *incx) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_double *ap, bla_double *x, const bla_integer *incx) { /* System generated locals */ bla_integer i__1, i__2; @@ -551,9 +551,9 @@ bla_integer info; bla_double temp; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical nounit; /* .. Scalar Arguments .. */ @@ -890,7 +890,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(s,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_real *ap, bla_real *x, const bla_integer *incx) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_real *ap, bla_real *x, const bla_integer *incx) { /* System generated locals */ bla_integer i__1, i__2; @@ -899,9 +899,9 @@ bla_integer info; bla_real temp; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical nounit; /* .. Scalar Arguments .. */ @@ -1238,7 +1238,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(z,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_dcomplex *ap, bla_dcomplex *x, const bla_integer *incx) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_dcomplex *ap, bla_dcomplex *x, const bla_integer *incx) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5; @@ -1251,9 +1251,9 @@ bla_integer info; bla_dcomplex temp; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj, nounit; /* .. Scalar Arguments .. */ diff --git a/frame/compat/f2c/bla_tpmv.h b/frame/compat/f2c/bla_tpmv.h index 095d7d414..2376ecfe3 100644 --- a/frame/compat/f2c/bla_tpmv.h +++ b/frame/compat/f2c/bla_tpmv.h @@ -34,9 +34,9 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(c,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_scomplex *ap, bla_scomplex *x, const bla_integer *incx); -int PASTEF77(d,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_double *ap, bla_double *x, const bla_integer *incx); -int PASTEF77(s,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_real *ap, bla_real *x, const bla_integer *incx); -int PASTEF77(z,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_dcomplex *ap, bla_dcomplex *x, const bla_integer *incx); +BLIS_EXPORT_BLAS int PASTEF77(c,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_scomplex *ap, bla_scomplex *x, const bla_integer *incx); +BLIS_EXPORT_BLAS int PASTEF77(d,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_double *ap, bla_double *x, const bla_integer *incx); +BLIS_EXPORT_BLAS int PASTEF77(s,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_real *ap, bla_real *x, const bla_integer *incx); +BLIS_EXPORT_BLAS int PASTEF77(z,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_dcomplex *ap, bla_dcomplex *x, const bla_integer *incx); #endif diff --git a/frame/compat/f2c/bla_tpsv.c b/frame/compat/f2c/bla_tpsv.c index 076494097..8cb43f007 100644 --- a/frame/compat/f2c/bla_tpsv.c +++ b/frame/compat/f2c/bla_tpsv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(c,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_scomplex *ap, bla_scomplex *x, const bla_integer *incx) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_scomplex *ap, bla_scomplex *x, const bla_integer *incx) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5; @@ -54,9 +54,9 @@ bla_integer info; bla_scomplex temp; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj, nounit; /* .. Scalar Arguments .. */ @@ -534,7 +534,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(d,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_double *ap, bla_double *x, const bla_integer *incx) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_double *ap, bla_double *x, const bla_integer *incx) { /* System generated locals */ bla_integer i__1, i__2; @@ -543,9 +543,9 @@ bla_integer info; bla_double temp; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical nounit; /* .. Scalar Arguments .. */ @@ -885,7 +885,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(s,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_real *ap, bla_real *x, const bla_integer *incx) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_real *ap, bla_real *x, const bla_integer *incx) { /* System generated locals */ bla_integer i__1, i__2; @@ -894,9 +894,9 @@ bla_integer info; bla_real temp; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical nounit; /* .. Scalar Arguments .. */ @@ -1236,7 +1236,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int PASTEF77(z,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_dcomplex *ap, bla_dcomplex *x, const bla_integer *incx) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_dcomplex *ap, bla_dcomplex *x, const bla_integer *incx) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5; @@ -1250,9 +1250,9 @@ bla_integer info; bla_dcomplex temp; bla_integer i__, j, k; - //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj, nounit; /* .. Scalar Arguments .. */ diff --git a/frame/compat/f2c/bla_tpsv.h b/frame/compat/f2c/bla_tpsv.h index 9c3de2ea0..77bd55979 100644 --- a/frame/compat/f2c/bla_tpsv.h +++ b/frame/compat/f2c/bla_tpsv.h @@ -34,9 +34,9 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF77(c,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_scomplex *ap, bla_scomplex *x, const bla_integer *incx); -int PASTEF77(d,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_double *ap, bla_double *x, const bla_integer *incx); -int PASTEF77(s,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_real *ap, bla_real *x, const bla_integer *incx); -int PASTEF77(z,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_dcomplex *ap, bla_dcomplex *x, const bla_integer *incx); +BLIS_EXPORT_BLAS int PASTEF77(c,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_scomplex *ap, bla_scomplex *x, const bla_integer *incx); +BLIS_EXPORT_BLAS int PASTEF77(d,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_double *ap, bla_double *x, const bla_integer *incx); +BLIS_EXPORT_BLAS int PASTEF77(s,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_real *ap, bla_real *x, const bla_integer *incx); +BLIS_EXPORT_BLAS int PASTEF77(z,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_dcomplex *ap, bla_dcomplex *x, const bla_integer *incx); #endif diff --git a/frame/compat/f2c/bla_xerbla.c b/frame/compat/f2c/bla_xerbla.c index a6500c443..543e06fdb 100644 --- a/frame/compat/f2c/bla_xerbla.c +++ b/frame/compat/f2c/bla_xerbla.c @@ -43,7 +43,7 @@ /* Table of constant values */ -/* Subroutine */ int PASTEF770(xerbla)(const bla_character *srname, const bla_integer *info, ftnlen srname_len) +/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(const bla_character *srname, const bla_integer *info, ftnlen srname_len) { /* -- LAPACK auxiliary routine (preliminary version) -- */ /* Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., */ diff --git a/frame/compat/f2c/bla_xerbla.h b/frame/compat/f2c/bla_xerbla.h index 4110cf281..44c168e58 100644 --- a/frame/compat/f2c/bla_xerbla.h +++ b/frame/compat/f2c/bla_xerbla.h @@ -34,6 +34,6 @@ #ifdef BLIS_ENABLE_BLAS -int PASTEF770(xerbla)(const bla_character *srname, const bla_integer *info, ftnlen srname_len); +BLIS_EXPORT_BLAS int PASTEF770(xerbla)(const bla_character *srname, const bla_integer *info, ftnlen srname_len); #endif diff --git a/frame/include/bli_arch_config_pre.h b/frame/include/bli_arch_config_pre.h index 1ab0561d8..2fa61b0d0 100644 --- a/frame/include/bli_arch_config_pre.h +++ b/frame/include/bli_arch_config_pre.h @@ -58,15 +58,15 @@ // Prototype-generating macro for bli_cntx_init_*() functions. #define CNTX_INIT_PROTS( archname ) \ \ -void PASTEMAC(cntx_init_,archname) \ +BLIS_EXPORT_BLIS void PASTEMAC(cntx_init_,archname) \ ( \ cntx_t* cntx \ ); \ -void PASTEMAC2(cntx_init_,archname,BLIS_REF_SUFFIX) \ +BLIS_EXPORT_BLIS void PASTEMAC2(cntx_init_,archname,BLIS_REF_SUFFIX) \ ( \ cntx_t* cntx \ ); \ -void PASTEMAC2(cntx_init_,archname,BLIS_IND_SUFFIX) \ +BLIS_EXPORT_BLIS void PASTEMAC2(cntx_init_,archname,BLIS_IND_SUFFIX) \ ( \ ind_t method, \ num_t dt, \ diff --git a/frame/include/bli_macro_defs.h b/frame/include/bli_macro_defs.h index ff23597d1..adeca1355 100644 --- a/frame/include/bli_macro_defs.h +++ b/frame/include/bli_macro_defs.h @@ -153,10 +153,10 @@ #define STRINGIFY_INT( s ) MKSTR( s ) // Fortran-77 name-mangling macros. -#define PASTEF770(name) name ## _ -#define PASTEF77(ch1,name) ch1 ## name ## _ -#define PASTEF772(ch1,ch2,name) ch1 ## ch2 ## name ## _ -#define PASTEF773(ch1,ch2,ch3,name) ch1 ## ch2 ## ch3 ## name ## _ +#define PASTEF770(name) name ## _ +#define PASTEF77(ch1,name) ch1 ## name ## _ +#define PASTEF772(ch1,ch2,name) ch1 ## ch2 ## name ## _ +#define PASTEF773(ch1,ch2,ch3,name) ch1 ## ch2 ## ch3 ## name ## _ // -- Include other groups of macros diff --git a/frame/include/bli_param_macro_defs.h b/frame/include/bli_param_macro_defs.h index 28b93743f..8273ab343 100644 --- a/frame/include/bli_param_macro_defs.h +++ b/frame/include/bli_param_macro_defs.h @@ -985,7 +985,7 @@ static bool_t bli_is_nonnull( void* p ) // argument. static -void bli_set_dims_incs_uplo_1m +void bli_set_dims_incs_uplo_1m ( doff_t diagoffa, diag_t diaga, uplo_t uploa, dim_t m, dim_t n, inc_t rs_a, inc_t cs_a, @@ -1080,7 +1080,7 @@ void bli_set_dims_incs_uplo_1m // argument (without column-wise stride optimization). static -void bli_set_dims_incs_uplo_1m_noswap +void bli_set_dims_incs_uplo_1m_noswap ( doff_t diagoffa, diag_t diaga, uplo_t uploa, dim_t m, dim_t n, inc_t rs_a, inc_t cs_a, @@ -1166,7 +1166,7 @@ void bli_set_dims_incs_uplo_1m_noswap // Set dimensions and increments for TWO matrix arguments. static -void bli_set_dims_incs_2m +void bli_set_dims_incs_2m ( trans_t transa, dim_t m, dim_t n, inc_t rs_a, inc_t cs_a, @@ -1202,7 +1202,7 @@ void bli_set_dims_incs_2m // arguments. static -void bli_set_dims_incs_uplo_2m +void bli_set_dims_incs_uplo_2m ( doff_t diagoffa, diag_t diaga, trans_t transa, uplo_t uploa, dim_t m, dim_t n, inc_t rs_a, inc_t cs_a, @@ -1310,7 +1310,7 @@ void bli_set_dims_incs_uplo_2m // on the diagonal. static -void bli_set_dims_incs_1d +void bli_set_dims_incs_1d ( doff_t diagoffx, dim_t m, dim_t n, inc_t rs_x, inc_t cs_x, @@ -1334,7 +1334,7 @@ void bli_set_dims_incs_1d // Set dimensions, increments, etc for TWO matrix arguments when operating // on diagonals. static -void bli_set_dims_incs_2d +void bli_set_dims_incs_2d ( doff_t diagoffx, trans_t transx, dim_t m, dim_t n, inc_t rs_x, inc_t cs_x, diff --git a/frame/ind/bli_ind.h b/frame/ind/bli_ind.h index 9618acd8e..f3a8ea690 100644 --- a/frame/ind/bli_ind.h +++ b/frame/ind/bli_ind.h @@ -48,27 +48,27 @@ #include "bli_cntx_ind_stage.h" -void bli_ind_init( void ); -void bli_ind_finalize( void ); +BLIS_EXPORT_BLIS void bli_ind_init( void ); +BLIS_EXPORT_BLIS void bli_ind_finalize( void ); -void bli_ind_enable( ind_t method ); -void bli_ind_disable( ind_t method ); -void bli_ind_disable_all( void ); +BLIS_EXPORT_BLIS void bli_ind_enable( ind_t method ); +BLIS_EXPORT_BLIS void bli_ind_disable( ind_t method ); +BLIS_EXPORT_BLIS void bli_ind_disable_all( void ); -void bli_ind_enable_dt( ind_t method, num_t dt ); -void bli_ind_disable_dt( ind_t method, num_t dt ); -void bli_ind_disable_all_dt( num_t dt ); +BLIS_EXPORT_BLIS void bli_ind_enable_dt( ind_t method, num_t dt ); +BLIS_EXPORT_BLIS void bli_ind_disable_dt( ind_t method, num_t dt ); +BLIS_EXPORT_BLIS void bli_ind_disable_all_dt( num_t dt ); -void bli_ind_oper_enable_only( opid_t oper, ind_t method, num_t dt ); +BLIS_EXPORT_BLIS void bli_ind_oper_enable_only( opid_t oper, ind_t method, num_t dt ); -bool_t bli_ind_oper_is_impl( opid_t oper, ind_t method ); +BLIS_EXPORT_BLIS bool_t bli_ind_oper_is_impl( opid_t oper, ind_t method ); //bool_t bli_ind_oper_has_avail( opid_t oper, num_t dt ); -void* bli_ind_oper_get_avail( opid_t oper, num_t dt ); -ind_t bli_ind_oper_find_avail( opid_t oper, num_t dt ); -char* bli_ind_oper_get_avail_impl_string( opid_t oper, num_t dt ); +BLIS_EXPORT_BLIS void* bli_ind_oper_get_avail( opid_t oper, num_t dt ); +BLIS_EXPORT_BLIS ind_t bli_ind_oper_find_avail( opid_t oper, num_t dt ); +BLIS_EXPORT_BLIS char* bli_ind_oper_get_avail_impl_string( opid_t oper, num_t dt ); -char* bli_ind_get_impl_string( ind_t method ); -num_t bli_ind_map_cdt_to_index( num_t dt ); +BLIS_EXPORT_BLIS char* bli_ind_get_impl_string( ind_t method ); +BLIS_EXPORT_BLIS num_t bli_ind_map_cdt_to_index( num_t dt ); #endif diff --git a/frame/ind/bli_l3_ind.h b/frame/ind/bli_l3_ind.h index 0b9f49ec3..454eb6240 100644 --- a/frame/ind/bli_l3_ind.h +++ b/frame/ind/bli_l3_ind.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void* PASTEMAC(opname,ind_get_avail)( num_t dt ); +BLIS_EXPORT_BLIS void* PASTEMAC(opname,ind_get_avail)( num_t dt ); /*bool_t PASTEMAC(opname,ind_has_avail)( num_t dt ); */ GENPROT( gemm ) @@ -58,17 +58,17 @@ GENPROT( trsm ) //bool_t bli_l3_ind_oper_is_avail( opid_t oper, ind_t method, num_t dt ); -ind_t bli_l3_ind_oper_find_avail( opid_t oper, num_t dt ); +BLIS_EXPORT_BLIS ind_t bli_l3_ind_oper_find_avail( opid_t oper, num_t dt ); -void bli_l3_ind_set_enable_dt( ind_t method, num_t dt, bool_t status ); +BLIS_EXPORT_BLIS void bli_l3_ind_set_enable_dt( ind_t method, num_t dt, bool_t status ); -void bli_l3_ind_oper_enable_only( opid_t oper, ind_t method, num_t dt ); -void bli_l3_ind_oper_set_enable_all( opid_t oper, num_t dt, bool_t status ); +BLIS_EXPORT_BLIS void bli_l3_ind_oper_enable_only( opid_t oper, ind_t method, num_t dt ); +BLIS_EXPORT_BLIS void bli_l3_ind_oper_set_enable_all( opid_t oper, num_t dt, bool_t status ); -void bli_l3_ind_oper_set_enable( opid_t oper, ind_t method, num_t dt, bool_t status ); -bool_t bli_l3_ind_oper_get_enable( opid_t oper, ind_t method, num_t dt ); +BLIS_EXPORT_BLIS void bli_l3_ind_oper_set_enable( opid_t oper, ind_t method, num_t dt, bool_t status ); +BLIS_EXPORT_BLIS bool_t bli_l3_ind_oper_get_enable( opid_t oper, ind_t method, num_t dt ); -void* bli_l3_ind_oper_get_func( opid_t oper, ind_t method ); +BLIS_EXPORT_BLIS void* bli_l3_ind_oper_get_func( opid_t oper, ind_t method ); #endif diff --git a/frame/ind/cntx/bli_cntx_ind_stage.c b/frame/ind/cntx/bli_cntx_ind_stage.c index 671be681d..c48dbe234 100644 --- a/frame/ind/cntx/bli_cntx_ind_stage.c +++ b/frame/ind/cntx/bli_cntx_ind_stage.c @@ -53,7 +53,7 @@ static void* bli_cntx_ind_stage_fp[BLIS_NUM_IND_METHODS] = // Execute the context initialization/finalization function associated // with a given induced method. -void bli_cntx_ind_stage( ind_t method, dim_t stage, cntx_t* cntx ) +BLIS_EXPORT_BLIS void bli_cntx_ind_stage( ind_t method, dim_t stage, cntx_t* cntx ) { cntx_stage_ft func = bli_cntx_ind_stage_fp[ method ]; @@ -69,7 +69,7 @@ void bli_cntx_ind_stage( ind_t method, dim_t stage, cntx_t* cntx ) // ----------------------------------------------------------------------------- -void bli_cntx_3mh_stage( dim_t stage, cntx_t* cntx ) +BLIS_EXPORT_BLIS void bli_cntx_3mh_stage( dim_t stage, cntx_t* cntx ) { // Set the pack_t schemas as a function of the stage of execution. if ( stage == 0 ) @@ -91,13 +91,13 @@ void bli_cntx_3mh_stage( dim_t stage, cntx_t* cntx ) // ----------------------------------------------------------------------------- -void bli_cntx_3m1_stage( dim_t stage, cntx_t* cntx ) +BLIS_EXPORT_BLIS void bli_cntx_3m1_stage( dim_t stage, cntx_t* cntx ) { } // ----------------------------------------------------------------------------- -void bli_cntx_4mh_stage( dim_t stage, cntx_t* cntx ) +BLIS_EXPORT_BLIS void bli_cntx_4mh_stage( dim_t stage, cntx_t* cntx ) { // Set the pack_t schemas as a function of the stage of execution. if ( stage == 0 ) @@ -124,25 +124,25 @@ void bli_cntx_4mh_stage( dim_t stage, cntx_t* cntx ) // ----------------------------------------------------------------------------- -void bli_cntx_4mb_stage( dim_t stage, cntx_t* cntx ) +BLIS_EXPORT_BLIS void bli_cntx_4mb_stage( dim_t stage, cntx_t* cntx ) { } // ----------------------------------------------------------------------------- -void bli_cntx_4m1_stage( dim_t stage, cntx_t* cntx ) +BLIS_EXPORT_BLIS void bli_cntx_4m1_stage( dim_t stage, cntx_t* cntx ) { } // ----------------------------------------------------------------------------- -void bli_cntx_1m_stage( dim_t stage, cntx_t* cntx ) +BLIS_EXPORT_BLIS void bli_cntx_1m_stage( dim_t stage, cntx_t* cntx ) { } // ----------------------------------------------------------------------------- -void bli_cntx_nat_stage( dim_t stage, cntx_t* cntx ) +BLIS_EXPORT_BLIS void bli_cntx_nat_stage( dim_t stage, cntx_t* cntx ) { } diff --git a/frame/ind/cntx/bli_cntx_ind_stage.h b/frame/ind/cntx/bli_cntx_ind_stage.h index affaa84f4..d469319c3 100644 --- a/frame/ind/cntx/bli_cntx_ind_stage.h +++ b/frame/ind/cntx/bli_cntx_ind_stage.h @@ -32,13 +32,13 @@ */ -void bli_cntx_ind_stage( ind_t method, dim_t stage, cntx_t* cntx ); +BLIS_EXPORT_BLIS void bli_cntx_ind_stage( ind_t method, dim_t stage, cntx_t* cntx ); -void bli_cntx_3mh_stage( dim_t stage, cntx_t* cntx ); -void bli_cntx_3m1_stage( dim_t stage, cntx_t* cntx ); -void bli_cntx_4mh_stage( dim_t stage, cntx_t* cntx ); -void bli_cntx_4mb_stage( dim_t stage, cntx_t* cntx ); -void bli_cntx_4m1_stage( dim_t stage, cntx_t* cntx ); -void bli_cntx_1m_stage( dim_t stage, cntx_t* cntx ); -void bli_cntx_nat_stage( dim_t stage, cntx_t* cntx ); +BLIS_EXPORT_BLIS void bli_cntx_3mh_stage( dim_t stage, cntx_t* cntx ); +BLIS_EXPORT_BLIS void bli_cntx_3m1_stage( dim_t stage, cntx_t* cntx ); +BLIS_EXPORT_BLIS void bli_cntx_4mh_stage( dim_t stage, cntx_t* cntx ); +BLIS_EXPORT_BLIS void bli_cntx_4mb_stage( dim_t stage, cntx_t* cntx ); +BLIS_EXPORT_BLIS void bli_cntx_4m1_stage( dim_t stage, cntx_t* cntx ); +BLIS_EXPORT_BLIS void bli_cntx_1m_stage( dim_t stage, cntx_t* cntx ); +BLIS_EXPORT_BLIS void bli_cntx_nat_stage( dim_t stage, cntx_t* cntx ); diff --git a/frame/ind/oapi/bli_l3_3m4m1m_oapi.c b/frame/ind/oapi/bli_l3_3m4m1m_oapi.c index 3d47e6b51..d260eeb99 100644 --- a/frame/ind/oapi/bli_l3_3m4m1m_oapi.c +++ b/frame/ind/oapi/bli_l3_3m4m1m_oapi.c @@ -40,7 +40,7 @@ #undef GENFRONT #define GENFRONT( opname, cname, imeth, nstage ) \ \ -void PASTEMAC(opname,imeth) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -147,7 +147,7 @@ GENFRONT( syr2k, gemm, 1m, 1 ) #undef GENFRONT #define GENFRONT( opname, cname, imeth, nstage ) \ \ -void PASTEMAC(opname,imeth) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ ( \ side_t side, \ obj_t* alpha, \ @@ -240,7 +240,7 @@ GENFRONT( trmm3, gemm, 1m, 1 ) #undef GENFRONT #define GENFRONT( opname, cname, imeth, nstage ) \ \ -void PASTEMAC(opname,imeth) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -323,7 +323,7 @@ GENFRONT( syrk, gemm, 1m, 1 ) #undef GENFRONT #define GENFRONT( opname, cname, imeth, nstage ) \ \ -void PASTEMAC(opname,imeth) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ ( \ side_t side, \ obj_t* alpha, \ @@ -387,7 +387,7 @@ GENFRONT( trmm, gemm, 1m, 1 ) #undef GENFRONT #define GENFRONT( opname, cname, imeth, nstage ) \ \ -void PASTEMAC(opname,imeth) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ ( \ side_t side, \ obj_t* alpha, \ diff --git a/frame/ind/oapi/bli_l3_ind_oapi.c b/frame/ind/oapi/bli_l3_ind_oapi.c index 85b4b443e..2940e3038 100644 --- a/frame/ind/oapi/bli_l3_ind_oapi.c +++ b/frame/ind/oapi/bli_l3_ind_oapi.c @@ -41,7 +41,7 @@ #undef GENFRONT #define GENFRONT( opname, imeth ) \ \ -void PASTEMAC(opname,imeth) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -76,7 +76,7 @@ GENFRONT( syr2k, ind ) #undef GENFRONT #define GENFRONT( opname, imeth ) \ \ -void PASTEMAC(opname,imeth) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ ( \ side_t side, \ obj_t* alpha, \ @@ -112,7 +112,7 @@ GENFRONT( trmm3, ind ) #undef GENFRONT #define GENFRONT( opname, imeth ) \ \ -void PASTEMAC(opname,imeth) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -145,7 +145,7 @@ GENFRONT( syrk, ind ) #undef GENFRONT #define GENFRONT( opname, imeth ) \ \ -void PASTEMAC(opname,imeth) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ ( \ side_t side, \ obj_t* alpha, \ diff --git a/frame/ind/oapi/bli_l3_ind_oapi.h b/frame/ind/oapi/bli_l3_ind_oapi.h index c8370a2a5..d4767925d 100644 --- a/frame/ind/oapi/bli_l3_ind_oapi.h +++ b/frame/ind/oapi/bli_l3_ind_oapi.h @@ -40,16 +40,16 @@ #undef GENPROT #define GENPROT( imeth ) \ \ -void PASTEMAC(gemm,imeth) ( obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ -void PASTEMAC(hemm,imeth) ( side_t side, obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ -void PASTEMAC(herk,imeth) ( obj_t* alpha, obj_t* a, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ -void PASTEMAC(her2k,imeth)( obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ -void PASTEMAC(symm,imeth) ( side_t side, obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ -void PASTEMAC(syrk,imeth) ( obj_t* alpha, obj_t* a, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ -void PASTEMAC(syr2k,imeth)( obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ -void PASTEMAC(trmm3,imeth)( side_t side, obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ -void PASTEMAC(trmm,imeth) ( side_t side, obj_t* alpha, obj_t* a, obj_t* b, cntx_t* cntx, rntm_t* rntm ); \ -void PASTEMAC(trsm,imeth) ( side_t side, obj_t* alpha, obj_t* a, obj_t* b, cntx_t* cntx, rntm_t* rntm ); +BLIS_EXPORT_BLIS void PASTEMAC(gemm,imeth) ( obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ +BLIS_EXPORT_BLIS void PASTEMAC(hemm,imeth) ( side_t side, obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ +BLIS_EXPORT_BLIS void PASTEMAC(herk,imeth) ( obj_t* alpha, obj_t* a, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ +BLIS_EXPORT_BLIS void PASTEMAC(her2k,imeth)( obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ +BLIS_EXPORT_BLIS void PASTEMAC(symm,imeth) ( side_t side, obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ +BLIS_EXPORT_BLIS void PASTEMAC(syrk,imeth) ( obj_t* alpha, obj_t* a, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ +BLIS_EXPORT_BLIS void PASTEMAC(syr2k,imeth)( obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ +BLIS_EXPORT_BLIS void PASTEMAC(trmm3,imeth)( side_t side, obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ +BLIS_EXPORT_BLIS void PASTEMAC(trmm,imeth) ( side_t side, obj_t* alpha, obj_t* a, obj_t* b, cntx_t* cntx, rntm_t* rntm ); \ +BLIS_EXPORT_BLIS void PASTEMAC(trsm,imeth) ( side_t side, obj_t* alpha, obj_t* a, obj_t* b, cntx_t* cntx, rntm_t* rntm ); GENPROT( nat ) GENPROT( ind ) @@ -65,14 +65,14 @@ GENPROT( 1m ) #undef GENPROT_NO2OP #define GENPROT_NO2OP( imeth ) \ \ -void PASTEMAC(gemm,imeth) ( obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ -void PASTEMAC(hemm,imeth) ( side_t side, obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ -void PASTEMAC(herk,imeth) ( obj_t* alpha, obj_t* a, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ -void PASTEMAC(her2k,imeth)( obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ -void PASTEMAC(symm,imeth) ( side_t side, obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ -void PASTEMAC(syrk,imeth) ( obj_t* alpha, obj_t* a, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ -void PASTEMAC(syr2k,imeth)( obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ -void PASTEMAC(trmm3,imeth)( side_t side, obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); +BLIS_EXPORT_BLIS void PASTEMAC(gemm,imeth) ( obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ +BLIS_EXPORT_BLIS void PASTEMAC(hemm,imeth) ( side_t side, obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ +BLIS_EXPORT_BLIS void PASTEMAC(herk,imeth) ( obj_t* alpha, obj_t* a, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ +BLIS_EXPORT_BLIS void PASTEMAC(her2k,imeth)( obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ +BLIS_EXPORT_BLIS void PASTEMAC(symm,imeth) ( side_t side, obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ +BLIS_EXPORT_BLIS void PASTEMAC(syrk,imeth) ( obj_t* alpha, obj_t* a, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ +BLIS_EXPORT_BLIS void PASTEMAC(syr2k,imeth)( obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); \ +BLIS_EXPORT_BLIS void PASTEMAC(trmm3,imeth)( side_t side, obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx, rntm_t* rntm ); GENPROT_NO2OP( 3mh ) GENPROT_NO2OP( 4mh ) @@ -88,7 +88,7 @@ GENPROT_NO2OP( 4mb ) #undef GENPROT #define GENPROT( imeth, alg ) \ \ -void PASTEMAC2(gemm,imeth,alg) ( obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c ); \ +BLIS_EXPORT_BLIS void PASTEMAC2(gemm,imeth,alg) ( obj_t* alpha, obj_t* a, obj_t* b, obj_t* beta, obj_t* c ); \ */ //GENPROT( 1m, bp ) diff --git a/frame/ind/oapi/bli_l3_nat_oapi.c b/frame/ind/oapi/bli_l3_nat_oapi.c index 470db9c8c..ff8bb24ba 100644 --- a/frame/ind/oapi/bli_l3_nat_oapi.c +++ b/frame/ind/oapi/bli_l3_nat_oapi.c @@ -46,7 +46,7 @@ #undef GENFRONT #define GENFRONT( opname, cname, imeth ) \ \ -void PASTEMAC(opname,imeth) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -89,7 +89,7 @@ GENFRONT( syr2k, gemm, nat ) #undef GENFRONT #define GENFRONT( opname, cname, imeth ) \ \ -void PASTEMAC(opname,imeth) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ ( \ side_t side, \ obj_t* alpha, \ @@ -129,7 +129,7 @@ GENFRONT( trmm3, gemm, nat ) #undef GENFRONT #define GENFRONT( opname, cname, imeth ) \ \ -void PASTEMAC(opname,imeth) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -166,7 +166,7 @@ GENFRONT( syrk, gemm, nat ) #undef GENFRONT #define GENFRONT( opname, cname, imeth ) \ \ -void PASTEMAC(opname,imeth) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ ( \ side_t side, \ obj_t* alpha, \ @@ -202,7 +202,7 @@ GENFRONT( trmm, gemm, nat ) #undef GENFRONT #define GENFRONT( opname, cname, imeth ) \ \ -void PASTEMAC(opname,imeth) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ ( \ side_t side, \ obj_t* alpha, \ diff --git a/frame/ind/tapi/bli_l3_ind_tapi.c b/frame/ind/tapi/bli_l3_ind_tapi.c index 9ca7746bc..35060a572 100644 --- a/frame/ind/tapi/bli_l3_ind_tapi.c +++ b/frame/ind/tapi/bli_l3_ind_tapi.c @@ -40,7 +40,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ trans_t transa, \ trans_t transb, \ @@ -103,7 +103,7 @@ INSERT_GENTFUNC_BASIC0( gemm1m ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ @@ -170,7 +170,7 @@ INSERT_GENTFUNC_BASIC0( hemm1m ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -229,7 +229,7 @@ INSERT_GENTFUNCR_BASIC0( herk1m ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -295,7 +295,7 @@ INSERT_GENTFUNCR_BASIC0( her2k1m ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ @@ -362,7 +362,7 @@ INSERT_GENTFUNC_BASIC0( symm1m ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -420,7 +420,7 @@ INSERT_GENTFUNC_BASIC0( syrk1m ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -485,7 +485,7 @@ INSERT_GENTFUNC_BASIC0( syr2k1m ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ @@ -554,7 +554,7 @@ INSERT_GENTFUNC_BASIC0( trmm31m ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ @@ -611,7 +611,7 @@ INSERT_GENTFUNC_BASIC0( trmm1m ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ diff --git a/frame/ind/tapi/bli_l3_ind_tapi.h b/frame/ind/tapi/bli_l3_ind_tapi.h index 49ff6a873..7c693cea0 100644 --- a/frame/ind/tapi/bli_l3_ind_tapi.h +++ b/frame/ind/tapi/bli_l3_ind_tapi.h @@ -36,7 +36,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ trans_t transa, \ trans_t transb, \ @@ -63,7 +63,7 @@ INSERT_GENTPROT_BASIC0( gemm1m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ @@ -90,7 +90,7 @@ INSERT_GENTPROT_BASIC0( hemm1m ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -116,7 +116,7 @@ INSERT_GENTPROTR_BASIC0( her2k1m ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -140,7 +140,7 @@ INSERT_GENTPROTR_BASIC0( herk1m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ @@ -167,7 +167,7 @@ INSERT_GENTPROT_BASIC0( symm1m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -193,7 +193,7 @@ INSERT_GENTPROT_BASIC0( syr2k1m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -217,7 +217,7 @@ INSERT_GENTPROT_BASIC0( syrk1m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ @@ -245,7 +245,7 @@ INSERT_GENTPROT_BASIC0( trmm31m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ @@ -268,7 +268,7 @@ INSERT_GENTPROT_BASIC0( trmm1m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ diff --git a/frame/ind/ukernels/bli_l3_ind_ukr.h b/frame/ind/ukernels/bli_l3_ind_ukr.h index 53cb0b6f8..1b9e7bebc 100644 --- a/frame/ind/ukernels/bli_l3_ind_ukr.h +++ b/frame/ind/ukernels/bli_l3_ind_ukr.h @@ -41,7 +41,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ dim_t k, \ ctype* restrict alpha, \ @@ -64,7 +64,7 @@ INSERT_GENTPROT_BASIC0( gemm1m_ukr_name ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ dim_t k, \ ctype* restrict alpha, \ @@ -88,7 +88,7 @@ INSERT_GENTPROT_BASIC0( gemmtrsm1m_u_ukr_name ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ ctype* restrict a, \ ctype* restrict b, \ diff --git a/frame/thread/bli_pthread.h b/frame/thread/bli_pthread.h index 337eadc33..7fb47ff8c 100644 --- a/frame/thread/bli_pthread.h +++ b/frame/thread/bli_pthread.h @@ -46,34 +46,34 @@ typedef void bli_pthread_mutexattr_t; #define BLIS_PTHREAD_MUTEX_INITIALIZER SRWLOCK_INIT -int bli_pthread_mutex_init( bli_pthread_mutex_t* mutex, const bli_pthread_mutexattr_t *attr ); +BLIS_EXPORT_BLIS int bli_pthread_mutex_init( bli_pthread_mutex_t* mutex, const bli_pthread_mutexattr_t *attr ); -int bli_pthread_mutex_destroy( bli_pthread_mutex_t* mutex ); +BLIS_EXPORT_BLIS int bli_pthread_mutex_destroy( bli_pthread_mutex_t* mutex ); -int bli_pthread_mutex_lock( bli_pthread_mutex_t* mutex ); +BLIS_EXPORT_BLIS int bli_pthread_mutex_lock( bli_pthread_mutex_t* mutex ); -int bli_pthread_mutex_trylock( bli_pthread_mutex_t* mutex ); +BLIS_EXPORT_BLIS int bli_pthread_mutex_trylock( bli_pthread_mutex_t* mutex ); -int bli_pthread_mutex_unlock( bli_pthread_mutex_t* mutex ); +BLIS_EXPORT_BLIS int bli_pthread_mutex_unlock( bli_pthread_mutex_t* mutex ); typedef INIT_ONCE bli_pthread_once_t; #define BLIS_PTHREAD_ONCE_INIT INIT_ONCE_STATIC_INIT -void bli_pthread_once( bli_pthread_once_t* once, void (*init)( void ) ); +BLIS_EXPORT_BLIS void bli_pthread_once( bli_pthread_once_t* once, void (*init)( void ) ); typedef CONDITION_VARIABLE bli_pthread_cond_t; typedef void bli_pthread_condattr_t; #define BLIS_PTHREAD_COND_INITIALIZER CONDITION_VARIABLE_INIT -int bli_pthread_cond_init( bli_pthread_cond_t* cond, const bli_pthread_condattr_t* attr ); +BLIS_EXPORT_BLIS int bli_pthread_cond_init( bli_pthread_cond_t* cond, const bli_pthread_condattr_t* attr ); -int bli_pthread_cond_destroy( bli_pthread_cond_t* cond ); +BLIS_EXPORT_BLIS int bli_pthread_cond_destroy( bli_pthread_cond_t* cond ); -int bli_pthread_cond_wait( bli_pthread_cond_t* cond, bli_pthread_mutex_t* mutex ); +BLIS_EXPORT_BLIS int bli_pthread_cond_wait( bli_pthread_cond_t* cond, bli_pthread_mutex_t* mutex ); -int bli_pthread_cond_broadcast( bli_pthread_cond_t* cond ); +BLIS_EXPORT_BLIS int bli_pthread_cond_broadcast( bli_pthread_cond_t* cond ); typedef struct { HANDLE handle; @@ -82,9 +82,9 @@ typedef struct typedef void bli_pthread_attr_t; -int bli_pthread_create( bli_pthread_t *thread, const bli_pthread_attr_t *attr, void* (*start_routine)( void* ), void *arg ); +BLIS_EXPORT_BLIS int bli_pthread_create( bli_pthread_t *thread, const bli_pthread_attr_t *attr, void* (*start_routine)( void* ), void *arg ); -int bli_pthread_join( bli_pthread_t thread, void **retval ); +BLIS_EXPORT_BLIS int bli_pthread_join( bli_pthread_t thread, void **retval ); // barrier-related definitions @@ -98,11 +98,11 @@ typedef struct int tripCount; } bli_pthread_barrier_t; -int bli_pthread_barrier_init( bli_pthread_barrier_t *barrier, const bli_pthread_barrierattr_t *attr, unsigned int count ); +BLIS_EXPORT_BLIS int bli_pthread_barrier_init( bli_pthread_barrier_t *barrier, const bli_pthread_barrierattr_t *attr, unsigned int count ); -int bli_pthread_barrier_destroy( bli_pthread_barrier_t *barrier ); +BLIS_EXPORT_BLIS int bli_pthread_barrier_destroy( bli_pthread_barrier_t *barrier ); -int bli_pthread_barrier_wait( bli_pthread_barrier_t *barrier ); +BLIS_EXPORT_BLIS int bli_pthread_barrier_wait( bli_pthread_barrier_t *barrier ); #else // !defined(_MSC_VER) @@ -155,7 +155,7 @@ typedef pthread_barrierattr_t bli_pthread_barrierattr_t; // -- pthread_create(), pthread_join() -- -int bli_pthread_create +BLIS_EXPORT_BLIS int bli_pthread_create ( bli_pthread_t* thread, const bli_pthread_attr_t* attr, @@ -163,7 +163,7 @@ int bli_pthread_create void* arg ); -int bli_pthread_join +BLIS_EXPORT_BLIS int bli_pthread_join ( bli_pthread_t thread, void** retval @@ -171,59 +171,59 @@ int bli_pthread_join // -- pthread_mutex_*() -- -int bli_pthread_mutex_init +BLIS_EXPORT_BLIS int bli_pthread_mutex_init ( bli_pthread_mutex_t* mutex, const bli_pthread_mutexattr_t* attr ); -int bli_pthread_mutex_destroy +BLIS_EXPORT_BLIS int bli_pthread_mutex_destroy ( bli_pthread_mutex_t* mutex ); -int bli_pthread_mutex_lock +BLIS_EXPORT_BLIS int bli_pthread_mutex_lock ( bli_pthread_mutex_t* mutex ); -int bli_pthread_mutex_trylock +BLIS_EXPORT_BLIS int bli_pthread_mutex_trylock ( bli_pthread_mutex_t* mutex ); -int bli_pthread_mutex_unlock +BLIS_EXPORT_BLIS int bli_pthread_mutex_unlock ( bli_pthread_mutex_t* mutex ); // -- pthread_cond_*() -- -int bli_pthread_cond_init +BLIS_EXPORT_BLIS int bli_pthread_cond_init ( bli_pthread_cond_t* cond, const bli_pthread_condattr_t* attr ); -int bli_pthread_cond_destroy +BLIS_EXPORT_BLIS int bli_pthread_cond_destroy ( bli_pthread_cond_t* cond ); -int bli_pthread_cond_wait +BLIS_EXPORT_BLIS int bli_pthread_cond_wait ( bli_pthread_cond_t* cond, bli_pthread_mutex_t* mutex ); -int bli_pthread_cond_broadcast +BLIS_EXPORT_BLIS int bli_pthread_cond_broadcast ( bli_pthread_cond_t* cond ); // -- pthread_once_*() -- -void bli_pthread_once +BLIS_EXPORT_BLIS void bli_pthread_once ( bli_pthread_once_t* once, void (*init)(void) @@ -231,19 +231,19 @@ void bli_pthread_once // -- pthread_barrier_*() -- -int bli_pthread_barrier_init +BLIS_EXPORT_BLIS int bli_pthread_barrier_init ( bli_pthread_barrier_t* barrier, const bli_pthread_barrierattr_t* attr, unsigned int count ); -int bli_pthread_barrier_destroy +BLIS_EXPORT_BLIS int bli_pthread_barrier_destroy ( bli_pthread_barrier_t* barrier ); -int bli_pthread_barrier_wait +BLIS_EXPORT_BLIS int bli_pthread_barrier_wait ( bli_pthread_barrier_t* barrier ); diff --git a/frame/thread/bli_thrcomm.h b/frame/thread/bli_thrcomm.h index b4b7a88db..dbc75dc82 100644 --- a/frame/thread/bli_thrcomm.h +++ b/frame/thread/bli_thrcomm.h @@ -44,7 +44,7 @@ // thread entry point prototype. -void* bli_l3_thread_entry( void* data_void ); +BLIS_EXPORT_BLIS void* bli_l3_thread_entry( void* data_void ); // thrcomm_t query (field only) @@ -56,14 +56,14 @@ static dim_t bli_thrcomm_num_threads( thrcomm_t* comm ) // Thread communicator prototypes. -thrcomm_t* bli_thrcomm_create( rntm_t* rntm, dim_t n_threads ); -void bli_thrcomm_free( rntm_t* rntm, thrcomm_t* comm ); -void bli_thrcomm_init( dim_t n_threads, thrcomm_t* comm ); -void bli_thrcomm_cleanup( thrcomm_t* comm ); -void bli_thrcomm_barrier( dim_t thread_id, thrcomm_t* comm ); -void* bli_thrcomm_bcast( dim_t inside_id, void* to_send, thrcomm_t* comm ); +BLIS_EXPORT_BLIS thrcomm_t* bli_thrcomm_create( rntm_t* rntm, dim_t n_threads ); +BLIS_EXPORT_BLIS void bli_thrcomm_free( rntm_t* rntm, thrcomm_t* comm ); +BLIS_EXPORT_BLIS void bli_thrcomm_init( dim_t n_threads, thrcomm_t* comm ); +BLIS_EXPORT_BLIS void bli_thrcomm_cleanup( thrcomm_t* comm ); +BLIS_EXPORT_BLIS void bli_thrcomm_barrier( dim_t thread_id, thrcomm_t* comm ); +BLIS_EXPORT_BLIS void* bli_thrcomm_bcast( dim_t inside_id, void* to_send, thrcomm_t* comm ); -void bli_thrcomm_barrier_atomic( dim_t thread_id, thrcomm_t* comm ); +BLIS_EXPORT_BLIS void bli_thrcomm_barrier_atomic( dim_t thread_id, thrcomm_t* comm ); #endif diff --git a/frame/thread/bli_thrcomm_openmp.h b/frame/thread/bli_thrcomm_openmp.h index d655bd131..5d3d282a2 100644 --- a/frame/thread/bli_thrcomm_openmp.h +++ b/frame/thread/bli_thrcomm_openmp.h @@ -74,12 +74,12 @@ typedef struct thrcomm_s thrcomm_t; // Prototypes specific to tree barriers. #ifdef BLIS_TREE_BARRIER -barrier_t* bli_thrcomm_tree_barrier_create( int num_threads, int arity, barrier_t** leaves, int leaf_index ); -void bli_thrcomm_tree_barrier_free( barrier_t* barrier ); -void bli_thrcomm_tree_barrier( barrier_t* barack ); +BLIS_EXPORT_BLIS barrier_t* bli_thrcomm_tree_barrier_create( int num_threads, int arity, barrier_t** leaves, int leaf_index ); +BLIS_EXPORT_BLIS void bli_thrcomm_tree_barrier_free( barrier_t* barrier ); +BLIS_EXPORT_BLIS void bli_thrcomm_tree_barrier( barrier_t* barack ); #endif -void bli_l3_thread_decorator_thread_check +BLIS_EXPORT_BLIS void bli_l3_thread_decorator_thread_check ( dim_t n_threads, dim_t tid, diff --git a/frame/thread/bli_thread.h b/frame/thread/bli_thread.h index d9bd3d241..9e8d1d012 100644 --- a/frame/thread/bli_thread.h +++ b/frame/thread/bli_thread.h @@ -49,8 +49,8 @@ #include "bli_l3_thrinfo.h" // Initialization-related prototypes. -void bli_thread_init( void ); -void bli_thread_finalize( void ); +BLIS_EXPORT_BLIS void bli_thread_init( void ); +BLIS_EXPORT_BLIS void bli_thread_finalize( void ); #ifdef _MSC_VER #define strerror_r(errno,buf,len) strerror_s(buf,len,errno) @@ -58,7 +58,7 @@ void bli_thread_finalize( void ); // Thread range-related prototypes. -void bli_thread_range_sub +BLIS_EXPORT_BLIS void bli_thread_range_sub ( thrinfo_t* thread, dim_t n, @@ -71,7 +71,7 @@ void bli_thread_range_sub #undef GENPROT #define GENPROT( opname ) \ \ -siz_t PASTEMAC0( opname ) \ +BLIS_EXPORT_BLIS siz_t PASTEMAC0( opname ) \ ( \ dir_t direct, \ thrinfo_t* thr, \ @@ -90,7 +90,7 @@ GENPROT( thread_range_ndim ) #undef GENPROT #define GENPROT( opname ) \ \ -siz_t PASTEMAC0( opname ) \ +BLIS_EXPORT_BLIS siz_t PASTEMAC0( opname ) \ ( \ thrinfo_t* thr, \ obj_t* a, \ @@ -110,7 +110,7 @@ GENPROT( thread_range_weighted_t2b ) GENPROT( thread_range_weighted_b2t ) -dim_t bli_thread_range_width_l +BLIS_EXPORT_BLIS dim_t bli_thread_range_width_l ( doff_t diagoff_j, dim_t m, @@ -122,13 +122,13 @@ dim_t bli_thread_range_width_l double area_per_thr, bool_t handle_edge_low ); -siz_t bli_find_area_trap_l +BLIS_EXPORT_BLIS siz_t bli_find_area_trap_l ( dim_t m, dim_t n, doff_t diagoff ); -siz_t bli_thread_range_weighted_sub +BLIS_EXPORT_BLIS siz_t bli_thread_range_weighted_sub ( thrinfo_t* restrict thread, doff_t diagoff, @@ -158,7 +158,7 @@ typedef void (*l3int_t) ); // Level-3 thread decorator prototype -void bli_l3_thread_decorator +BLIS_EXPORT_BLIS void bli_l3_thread_decorator ( l3int_t func, opid_t family, @@ -182,36 +182,36 @@ typedef struct dim_t f; } bli_prime_factors_t; -void bli_prime_factorization(dim_t n, bli_prime_factors_t* factors); +BLIS_EXPORT_BLIS void bli_prime_factorization(dim_t n, bli_prime_factors_t* factors); -dim_t bli_next_prime_factor(bli_prime_factors_t* factors); +BLIS_EXPORT_BLIS dim_t bli_next_prime_factor(bli_prime_factors_t* factors); -void bli_partition_2x2(dim_t nthread, dim_t work1, dim_t work2, dim_t* nt1, dim_t* nt2); +BLIS_EXPORT_BLIS void bli_partition_2x2(dim_t nthread, dim_t work1, dim_t work2, dim_t* nt1, dim_t* nt2); // ----------------------------------------------------------------------------- -dim_t bli_gcd( dim_t x, dim_t y ); -dim_t bli_lcm( dim_t x, dim_t y ); -dim_t bli_ipow( dim_t base, dim_t power ); +BLIS_EXPORT_BLIS dim_t bli_gcd( dim_t x, dim_t y ); +BLIS_EXPORT_BLIS dim_t bli_lcm( dim_t x, dim_t y ); +BLIS_EXPORT_BLIS dim_t bli_ipow( dim_t base, dim_t power ); // ----------------------------------------------------------------------------- -dim_t bli_thread_get_env( const char* env, dim_t fallback ); +BLIS_EXPORT_BLIS dim_t bli_thread_get_env( const char* env, dim_t fallback ); //void bli_thread_set_env( const char* env, dim_t value ); -dim_t bli_thread_get_jc_nt( void ); -dim_t bli_thread_get_pc_nt( void ); -dim_t bli_thread_get_ic_nt( void ); -dim_t bli_thread_get_jr_nt( void ); -dim_t bli_thread_get_ir_nt( void ); -dim_t bli_thread_get_num_threads( void ); +BLIS_EXPORT_BLIS dim_t bli_thread_get_jc_nt( void ); +BLIS_EXPORT_BLIS dim_t bli_thread_get_pc_nt( void ); +BLIS_EXPORT_BLIS dim_t bli_thread_get_ic_nt( void ); +BLIS_EXPORT_BLIS dim_t bli_thread_get_jr_nt( void ); +BLIS_EXPORT_BLIS dim_t bli_thread_get_ir_nt( void ); +BLIS_EXPORT_BLIS dim_t bli_thread_get_num_threads( void ); -void bli_thread_set_ways( dim_t jc, dim_t pc, dim_t ic, dim_t jr, dim_t ir ); -void bli_thread_set_num_threads( dim_t value ); +BLIS_EXPORT_BLIS void bli_thread_set_ways( dim_t jc, dim_t pc, dim_t ic, dim_t jr, dim_t ir ); +BLIS_EXPORT_BLIS void bli_thread_set_num_threads( dim_t value ); -void bli_thread_init_rntm( rntm_t* rntm ); +BLIS_EXPORT_BLIS void bli_thread_init_rntm( rntm_t* rntm ); -void bli_thread_init_rntm_from_env( rntm_t* rntm ); +BLIS_EXPORT_BLIS void bli_thread_init_rntm_from_env( rntm_t* rntm ); // ----------------------------------------------------------------------------- diff --git a/frame/thread/bli_thrinfo.h b/frame/thread/bli_thrinfo.h index 6b72c80d6..c689e1051 100644 --- a/frame/thread/bli_thrinfo.h +++ b/frame/thread/bli_thrinfo.h @@ -156,7 +156,7 @@ static void bli_thread_obarrier( thrinfo_t* t ) // Prototypes for level-3 thrinfo functions not specific to any operation. // -thrinfo_t* bli_thrinfo_create +BLIS_EXPORT_BLIS thrinfo_t* bli_thrinfo_create ( rntm_t* rntm, thrcomm_t* ocomm, @@ -168,7 +168,7 @@ thrinfo_t* bli_thrinfo_create thrinfo_t* sub_node ); -void bli_thrinfo_init +BLIS_EXPORT_BLIS void bli_thrinfo_init ( thrinfo_t* thread, thrcomm_t* ocomm, @@ -180,12 +180,12 @@ void bli_thrinfo_init thrinfo_t* sub_node ); -void bli_thrinfo_init_single +BLIS_EXPORT_BLIS void bli_thrinfo_init_single ( thrinfo_t* thread ); -void bli_thrinfo_free +BLIS_EXPORT_BLIS void bli_thrinfo_free ( rntm_t* rntm, thrinfo_t* thread diff --git a/frame/util/bli_util_check.c b/frame/util/bli_util_check.c index ae4ebb461..27a21279e 100644 --- a/frame/util/bli_util_check.c +++ b/frame/util/bli_util_check.c @@ -41,7 +41,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* asum \ @@ -56,7 +56,7 @@ GENFRONT( asumv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x \ ) \ @@ -72,7 +72,7 @@ GENFRONT( mktrim ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* norm \ @@ -89,7 +89,7 @@ GENFRONT( normiv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* norm \ @@ -106,7 +106,7 @@ GENFRONT( normim ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ FILE* file, \ char* s1, \ @@ -125,7 +125,7 @@ GENFRONT( fprintm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x \ ) \ @@ -142,7 +142,7 @@ GENFRONT( randnm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* scale, \ diff --git a/frame/util/bli_util_check.h b/frame/util/bli_util_check.h index a789211c9..fa5d230a1 100644 --- a/frame/util/bli_util_check.h +++ b/frame/util/bli_util_check.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* asum \ @@ -52,7 +52,7 @@ GENPROT( asumv ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x \ ); @@ -65,7 +65,7 @@ GENPROT( mktrim ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* norm \ @@ -79,7 +79,7 @@ GENPROT( normiv ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* norm \ @@ -93,7 +93,7 @@ GENPROT( normim ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ FILE* file, \ char* s1, \ @@ -109,7 +109,7 @@ GENPROT( fprintm ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x \ ); @@ -123,7 +123,7 @@ GENPROT( randnm ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,_check) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* scale, \ @@ -135,36 +135,36 @@ GENPROT( sumsqv ) // ----------------------------------------------------------------------------- -void bli_utilv_xi_check +BLIS_EXPORT_BLIS void bli_utilv_xi_check ( obj_t* x, obj_t* index ); -void bli_utilv_xa_check +BLIS_EXPORT_BLIS void bli_utilv_xa_check ( obj_t* x, obj_t* asum ); -void bli_utilm_mkhst_check +BLIS_EXPORT_BLIS void bli_utilm_mkhst_check ( obj_t* a ); -void bli_utilv_norm_check +BLIS_EXPORT_BLIS void bli_utilv_norm_check ( obj_t* x, obj_t* norm ); -void bli_utilm_norm_check +BLIS_EXPORT_BLIS void bli_utilm_norm_check ( obj_t* x, obj_t* norm ); -void bli_utilm_fprint_check +BLIS_EXPORT_BLIS void bli_utilm_fprint_check ( FILE* file, char* s1, @@ -173,12 +173,12 @@ void bli_utilm_fprint_check char* s2 ); -void bli_utilm_rand_check +BLIS_EXPORT_BLIS void bli_utilm_rand_check ( obj_t* x ); -void bli_utilv_sumsqv_check +BLIS_EXPORT_BLIS void bli_utilv_sumsqv_check ( obj_t* x, obj_t* scale, diff --git a/frame/util/bli_util_fpa.h b/frame/util/bli_util_fpa.h index 3eb2c4868..cdff4b07f 100644 --- a/frame/util/bli_util_fpa.h +++ b/frame/util/bli_util_fpa.h @@ -40,7 +40,7 @@ #define GENPROT( opname ) \ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) \ -PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); +BLIS_EXPORT_BLIS PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); GENPROT( asumv ) GENPROT( mkherm ) @@ -67,7 +67,7 @@ GENPROT( sumsqv ) #define GENPROT( opname ) \ \ PASTECH(opname,_vft) \ -PASTEMAC(opname,_qfp)( num_t dt ); +BLIS_EXPORT_BLIS PASTEMAC(opname,_qfp)( num_t dt ); GENPROT( fprintv ) GENPROT( fprintm ) diff --git a/frame/util/bli_util_oapi.c b/frame/util/bli_util_oapi.c index f9f9b4c93..b786a56dd 100644 --- a/frame/util/bli_util_oapi.c +++ b/frame/util/bli_util_oapi.c @@ -43,7 +43,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* asum \ @@ -86,7 +86,7 @@ GENFRONT( asumv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* a \ BLIS_OAPI_EX_PARAMS \ @@ -130,7 +130,7 @@ GENFRONT( mktrim ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* norm \ @@ -174,7 +174,7 @@ GENFRONT( normiv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* norm \ @@ -227,7 +227,7 @@ GENFRONT( normim ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ FILE* file, \ char* s1, \ @@ -278,7 +278,7 @@ GENFRONT( fprintv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ FILE* file, \ char* s1, \ @@ -347,7 +347,7 @@ GENFRONT( fprintm ) #undef GENFRONT #define GENFRONT( opname, varname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ char* s1, \ obj_t* x, \ @@ -381,7 +381,7 @@ GENFRONT( printm, fprintm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x \ BLIS_OAPI_EX_PARAMS \ @@ -421,7 +421,7 @@ GENFRONT( randnv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x \ BLIS_OAPI_EX_PARAMS \ @@ -468,7 +468,7 @@ GENFRONT( randnm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* scale, \ diff --git a/frame/util/bli_util_oapi.h b/frame/util/bli_util_oapi.h index b7952c822..1acce1606 100644 --- a/frame/util/bli_util_oapi.h +++ b/frame/util/bli_util_oapi.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* asum \ @@ -53,7 +53,7 @@ GENPROT( asumv ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* a \ BLIS_OAPI_EX_PARAMS \ @@ -67,7 +67,7 @@ GENPROT( mktrim ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* norm \ @@ -82,7 +82,7 @@ GENPROT( normiv ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* norm \ @@ -97,7 +97,7 @@ GENPROT( normim ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ FILE* file, \ char* s1, \ @@ -114,7 +114,7 @@ GENPROT( fprintm ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ char* s1, \ obj_t* x, \ @@ -130,7 +130,7 @@ GENPROT( printm ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x \ BLIS_OAPI_EX_PARAMS \ @@ -143,7 +143,7 @@ GENPROT( randnv ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x \ BLIS_OAPI_EX_PARAMS \ @@ -156,7 +156,7 @@ GENPROT( randnm ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC(opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* scale, \ diff --git a/frame/util/bli_util_tapi.c b/frame/util/bli_util_tapi.c index 6bef27d43..b069b3b27 100644 --- a/frame/util/bli_util_tapi.c +++ b/frame/util/bli_util_tapi.c @@ -43,7 +43,7 @@ #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -84,7 +84,7 @@ INSERT_GENTFUNCR_BASIC0( asumv ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ dim_t m, \ @@ -122,7 +122,7 @@ INSERT_GENTFUNC_BASIC0( mktrim ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -165,7 +165,7 @@ INSERT_GENTFUNCR_BASIC0( normiv ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -216,7 +216,7 @@ INSERT_GENTFUNCR_BASIC0( normim ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, varname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ char* s1, \ dim_t n, \ @@ -244,7 +244,7 @@ INSERT_GENTFUNC_BASIC_I( printv, fprintv ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, varname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ char* s1, \ dim_t m, \ @@ -274,7 +274,7 @@ INSERT_GENTFUNC_BASIC_I( printm, fprintm ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx \ @@ -309,7 +309,7 @@ INSERT_GENTFUNC_BASIC0( randnv ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ uplo_t uplox, \ @@ -350,7 +350,7 @@ INSERT_GENTFUNC_BASIC0( randnm ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ diff --git a/frame/util/bli_util_tapi.h b/frame/util/bli_util_tapi.h index f48acbd11..c35702cbc 100644 --- a/frame/util/bli_util_tapi.h +++ b/frame/util/bli_util_tapi.h @@ -40,7 +40,7 @@ #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -54,7 +54,7 @@ INSERT_GENTPROTR_BASIC0( asumv ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ dim_t m, \ @@ -70,7 +70,7 @@ INSERT_GENTPROT_BASIC0( mktrim ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -86,7 +86,7 @@ INSERT_GENTPROTR_BASIC0( normiv ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -106,7 +106,7 @@ INSERT_GENTPROTR_BASIC0( normim ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ char* s1, \ dim_t n, \ @@ -121,7 +121,7 @@ INSERT_GENTPROT_BASIC0_I( printv ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ char* s1, \ dim_t m, \ @@ -137,7 +137,7 @@ INSERT_GENTPROT_BASIC0_I( printm ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx \ @@ -151,7 +151,7 @@ INSERT_GENTPROT_BASIC0( randnv ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ uplo_t uplox, \ @@ -168,7 +168,7 @@ INSERT_GENTPROT_BASIC0( randnm ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -void PASTEMAC2(ch,opname,EX_SUF) \ +BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ diff --git a/frame/util/bli_util_unb_var1.c b/frame/util/bli_util_unb_var1.c index 32197819a..fc2bfe2ed 100644 --- a/frame/util/bli_util_unb_var1.c +++ b/frame/util/bli_util_unb_var1.c @@ -43,7 +43,7 @@ #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -87,7 +87,7 @@ INSERT_GENTFUNCR_BASIC0( asumv_unb_var1 ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ dim_t m, \ @@ -143,7 +143,7 @@ INSERT_GENTFUNCR_BASIC0( mkherm_unb_var1 ) #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ dim_t m, \ @@ -185,7 +185,7 @@ INSERT_GENTFUNC_BASIC0( mksymm_unb_var1 ) #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ dim_t m, \ @@ -230,7 +230,7 @@ INSERT_GENTFUNC_BASIC0( mktrim_unb_var1 ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -268,7 +268,7 @@ INSERT_GENTFUNCR_BASIC0( norm1v_unb_var1 ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -314,7 +314,7 @@ GENTFUNCR( dcomplex, double, z, d, normfv_unb_var1, sumsqv_unb_var1 ) #ifdef FE_OVERFLOW #define GENTFUNCR( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -393,7 +393,7 @@ void PASTEMAC(ch,varname) \ #else #define GENTFUNCR( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -439,7 +439,7 @@ GENTFUNCR( double, double, d, d, normfv_unb_var1, sumsqv_unb_var1 ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -485,7 +485,7 @@ INSERT_GENTFUNCR_BASIC0( normiv_unb_var1 ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -649,7 +649,7 @@ INSERT_GENTFUNCR_BASIC( norm1m_unb_var1, norm1v_unb_var1 ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -816,7 +816,7 @@ INSERT_GENTFUNCR_BASIC( normfm_unb_var1, sumsqv_unb_var1 ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -858,7 +858,7 @@ INSERT_GENTFUNCR_BASIC( normim_unb_var1, norm1m_unb_var1 ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ FILE* file, \ char* s1, \ @@ -895,7 +895,7 @@ INSERT_GENTFUNC_BASIC0_I( fprintv ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ FILE* file, \ char* s1, \ @@ -937,7 +937,7 @@ INSERT_GENTFUNC_BASIC0_I( fprintm ) #undef GENTFUNC #define GENTFUNC( ctype, ch, varname, randmac ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -965,7 +965,7 @@ INSERT_GENTFUNC_BASIC( randnv_unb_var1, randnp2s ) #undef GENTFUNC #define GENTFUNC( ctype, ch, varname, kername ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffx, \ uplo_t uplox, \ @@ -1118,7 +1118,7 @@ INSERT_GENTFUNC_BASIC( randnm_unb_var1, randnv ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ diff --git a/frame/util/bli_util_unb_var1.h b/frame/util/bli_util_unb_var1.h index 6f2a3fc85..9f5838161 100644 --- a/frame/util/bli_util_unb_var1.h +++ b/frame/util/bli_util_unb_var1.h @@ -40,7 +40,7 @@ #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -55,7 +55,7 @@ INSERT_GENTPROTR_BASIC0( asumv_unb_var1 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ dim_t m, \ @@ -72,7 +72,7 @@ INSERT_GENTPROT_BASIC0( mktrim_unb_var1 ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -89,7 +89,7 @@ INSERT_GENTPROTR_BASIC0( normiv_unb_var1 ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -110,7 +110,7 @@ INSERT_GENTPROTR_BASIC0( normim_unb_var1 ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ FILE* file, \ char* s1, \ @@ -126,7 +126,7 @@ INSERT_GENTPROT_BASIC0_I( fprintv ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -void PASTEMAC(ch,opname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ ( \ FILE* file, \ char* s1, \ @@ -143,7 +143,7 @@ INSERT_GENTPROT_BASIC0_I( fprintm ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -158,7 +158,7 @@ INSERT_GENTPROT_BASIC0( randnv_unb_var1 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ doff_t diagoffx, \ uplo_t uplox, \ @@ -176,7 +176,7 @@ INSERT_GENTPROT_BASIC0( randnm_unb_var1 ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, varname ) \ \ -void PASTEMAC(ch,varname) \ +BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ From 7918a6decacda173b912b1c7800a6837f1067f1c Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Thu, 28 Feb 2019 13:58:59 -0600 Subject: [PATCH 012/109] Updates (from ls5) to test/3m4m/runme.sh. Details: - Lonestar5-specific updates to runme.sh. --- test/3m4m/runme.sh | 83 ++++++++++++++++++++++++++++------------------ 1 file changed, 51 insertions(+), 32 deletions(-) diff --git a/test/3m4m/runme.sh b/test/3m4m/runme.sh index a48cca989..50fd61ae8 100755 --- a/test/3m4m/runme.sh +++ b/test/3m4m/runme.sh @@ -5,19 +5,12 @@ exec_root="test" out_root="output" #sys="blis" -#sys="stampede" #sys="stampede2" -#sys="lonestar5" -sys="ul252" +sys="lonestar5" +#sys="ul252" # Bind threads to processors. #export OMP_PROC_BIND=true -#export GOMP_CPU_AFFINITY="0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15" -#export GOMP_CPU_AFFINITY="0 1 2 3 4 5 6 7" -#export GOMP_CPU_AFFINITY="0 1 2 3 4 5 6 7" -#export GOMP_CPU_AFFINITY="0 2 4 6 1 3 5 7" -#export GOMP_CPU_AFFINITY="0 4 1 5 2 6 3 7" -#export GOMP_CPU_AFFINITY="0 1 4 5 8 9 12 13 16 17 20 21 24 25 28 29 32 33 36 37 40 41 44 45" #export GOMP_CPU_AFFINITY="0 2 4 6 8 10 12 14 16 18 20 22 1 3 5 7 9 11 13 15 17 19 21 23" # Modify LD_LIBRARY_PATH. @@ -36,25 +29,30 @@ elif [ ${sys} = "stampede2" ]; then echo "Need to set GOMP_CPU_AFFINITY." exit 1 - jc_nt=4 # 5th loop + jc_nt=4 # 5th loop ic_nt=12 # 3rd loop - jr_nt=1 # 2nd loop - ir_nt=1 # 1st loop + jr_nt=1 # 2nd loop + ir_nt=1 # 1st loop nt=48 elif [ ${sys} = "lonestar5" ]; then - echo "Need to set GOMP_CPU_AFFINITY." - exit 1 + export GOMP_CPU_AFFINITY="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23" # A hack to use libiomp5 with gcc. - export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/apps/intel/16.0.1.150/compilers_and_libraries_2016.1.150/linux/compiler/lib/intel64" + #export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/apps/intel/16.0.1.150/compilers_and_libraries_2016.1.150/linux/compiler/lib/intel64" - jc_nt=2 # 5th loop - ic_nt=12 # 3rd loop - jr_nt=1 # 2nd loop - ir_nt=1 # 1st loop - nt=24 + # runner-up: + #jc_nt=6 # 5th loop + #ic_nt=4 # 3rd loop + #jr_nt=1 # 2nd loop + + jc_nt=2 # 5th loop + ic_nt=3 # 3rd loop + jr_nt=2 # 2nd loop + + ir_nt=1 # 1st loop + nt=12 elif [ ${sys} = "ul252" ]; then @@ -62,15 +60,17 @@ elif [ ${sys} = "ul252" ]; then #export GOMP_CPU_AFFINITY="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103" export GOMP_CPU_AFFINITY="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51" - #jc_nt=4 # 5th loop - jc_nt=2 # 5th loop + #jc_nt=4 # 5th loop + jc_nt=2 # 5th loop ic_nt=13 # 3rd loop - jr_nt=1 # 2nd loop - ir_nt=1 # 1st loop + jr_nt=1 # 2nd loop + ir_nt=1 # 1st loop #nt=52 nt=26 fi +echo "Setting BLIS threading params for ${sys}: jc${jc_nt}ic${ic_nt}jr${jr_nt}." + # Save a copy of GOMP_CPU_AFFINITY so that if we have to unset it, we can # restore the value. GOMP_CPU_AFFINITYsave=${GOMP_CPU_AFFINITY} @@ -82,6 +82,8 @@ threads_r="mt" #threads_r="st" # Datatypes to test. +dts="" +dts_r="" dts="z c" dts_r="d s" @@ -94,11 +96,24 @@ test_ops_r="${l3_ops}" #test_impls="3mhw_blis 3m1_blis 4mhw_blis 4m1b_blis 4m1a_blis 1m_blis" #test_impls="openblas mkl asm_blis" +# Implementations to test. +impls="allasm" -# Real domain implementations to test. -test_impls_r="openblas asm_blis mkl" -test_impls="openblas asm_blis mkl" -#test_impls_r="asm_blis openblas" +if [ ${impls} = "allasm" ]; then + + test_impls_r="openblas asm_blis mkl" + test_impls="openblas asm_blis mkl" + +elif [ ${impls} = "comp" ]; then + + test_impls_r="openblas mkl" + test_impls="openblas mkl" + +elif [ ${impls} = "blis" ]; then + + test_impls_r="asm_blis" + test_impls="asm_blis" +fi # First perform real test cases. for th in ${threads_r}; do @@ -118,13 +133,14 @@ for th in ${threads_r}; do export BLIS_IR_NT=${ir_nt} export OPENBLAS_NUM_THREADS=${nt} export MKL_NUM_THREADS=${nt} + export nt_use=${nt} # Unset GOMP_CPU_AFFINITY for OpenBLAS. if [ ${im} = "openblas" ]; then unset GOMP_CPU_AFFINITY else - export GOMP_CPU_AFFINITY=${GOMP_CPU_AFFINITYsave} + export GOMP_CPU_AFFINITY="${GOMP_CPU_AFFINITYsave}" fi else @@ -134,6 +150,7 @@ for th in ${threads_r}; do export BLIS_IR_NT=1 export OPENBLAS_NUM_THREADS=1 export MKL_NUM_THREADS=1 + export nt_use=1 fi # Construct the name of the test executable. @@ -142,7 +159,7 @@ for th in ${threads_r}; do # Construct the name of the output file. out_file="${out_root}_${th}_${dt}${op}_${im}.m" - echo "Running (nt = ${nt}) ./${exec_name} > ${out_file}" + echo "Running (nt = ${nt_use}) ./${exec_name} > ${out_file}" # Run executable. ./${exec_name} > ${out_file} @@ -172,13 +189,14 @@ for th in ${threads}; do export BLIS_IR_NT=${ir_nt} export OPENBLAS_NUM_THREADS=${nt} export MKL_NUM_THREADS=${nt} + export nt_use=${nt} # Unset GOMP_CPU_AFFINITY for OpenBLAS. if [ ${im} = "openblas" ]; then unset GOMP_CPU_AFFINITY else - export GOMP_CPU_AFFINITY=${GOMP_CPU_AFFINITYsave} + export GOMP_CPU_AFFINITY="${GOMP_CPU_AFFINITYsave}" fi else @@ -188,6 +206,7 @@ for th in ${threads}; do export BLIS_IR_NT=1 export OPENBLAS_NUM_THREADS=1 export MKL_NUM_THREADS=1 + export nt_use=1 fi # Construct the name of the test executable. @@ -196,7 +215,7 @@ for th in ${threads}; do # Construct the name of the output file. out_file="${out_root}_${th}_${dt}${op}_${im}.m" - echo "Running (nt = ${nt}) ./${exec_name} > ${out_file}" + echo "Running (nt = ${nt_use}) ./${exec_name} > ${out_file}" # Run executable. ./${exec_name} > ${out_file} From 8beda64ea58ff9d2694230d07e831d9e6e1d0d2b Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 5 Mar 2019 17:47:55 -0600 Subject: [PATCH 013/109] Overhauled test/3m4m Makefile and scripts. Details: - Rewrote much of Makefile to generate executables for single- and dual- socket multithreading as well as single-threaded. Each of the three can also use a different problem size range/increment, as is often appropriate when doubling/halving the number of threads. - Rewrote runme.sh script to flexibly execute as many threading parameter scenarios as is given in the input parameter string (currently set within the script itself). The string also encodes the maximum problem size for each threading scenario, which is used to identify the executable to run. Also improved the "progress" output of the script to reduce redundant info and improve readability in terminals that are not especially wide. - Minor updates to test_*.c source files. - Updated matlab scripts according to changes made to the Makefile, test drivers, and runme.sh script, and renamed 'plot_all.m' to 'runme.m'. --- test/3m4m/Makefile | 516 +++++++++--------------------- test/3m4m/matlab/plot_all.m | 9 - test/3m4m/matlab/plot_l3_perf.m | 2 +- test/3m4m/matlab/plot_panel_4x5.m | 19 +- test/3m4m/matlab/runme.m | 9 + test/3m4m/runme.sh | 240 ++++++-------- test/3m4m/test_gemm.c | 217 ++++++------- test/3m4m/test_hemm.c | 200 ++++++------ test/3m4m/test_herk.c | 177 +++++----- test/3m4m/test_trmm.c | 176 +++++----- test/3m4m/test_trsm.c | 176 +++++----- 11 files changed, 727 insertions(+), 1014 deletions(-) delete mode 100644 test/3m4m/matlab/plot_all.m create mode 100644 test/3m4m/matlab/runme.m diff --git a/test/3m4m/Makefile b/test/3m4m/Makefile index b4ae45bb8..3136dfa02 100644 --- a/test/3m4m/Makefile +++ b/test/3m4m/Makefile @@ -46,8 +46,6 @@ # .PHONY: all \ - blis-gemm-st openblas-gemm-st mkl-gemm-st acml-gemm-st \ - blis-gemm-mt openblas-gemm-mt mkl-gemm-mt acml-gemm-mt \ clean cleanx @@ -94,21 +92,19 @@ endif #BLIS_LIB := $(BLIS_LIB_PATH)/libblis.a # BLAS library path(s). This is where the BLAS libraries reside. -HOME_LIB_PATH := $(HOME)/flame/lib -#MKL_LIB_PATH := /opt/apps/intel/13/composer_xe_2013.2.146/mkl/lib/intel64 -MKL_LIB_PATH := $(HOME)/intel/mkl/lib/intel64 -#MKL_LIB_PATH := ${MKLROOT}/lib/intel64 +HOME_LIB_PATH := $(HOME)/flame/lib +#VENDOR_LIB_PATH := /opt/apps/intel/13/composer_xe_2013.2.146/mkl/lib/intel64 +MKL_LIB_PATH := $(HOME)/intel/mkl/lib/intel64 +#VENDOR_LIB_PATH := ${MKLROOT}/lib/intel64 #ICC_LIB_PATH := /opt/apps/intel/13/composer_xe_2013.2.146/compiler/lib/intel64 -ACML_LIB_PATH := $(HOME_LIB_PATH)/acml/5.3.1/gfortran64_fma4_int64/lib -ACMLP_LIB_PATH := $(HOME_LIB_PATH)/acml/5.3.1/gfortran64_fma4_mp_int64/lib # OpenBLAS OPENBLAS_LIB := $(HOME_LIB_PATH)/libopenblas.a OPENBLASP_LIB := $(HOME_LIB_PATH)/libopenblasp.a # ATLAS -ATLAS_LIB := $(HOME_LIB_PATH)/libf77blas.a \ - $(HOME_LIB_PATH)/libatlas.a +#ATLAS_LIB := $(HOME_LIB_PATH)/libf77blas.a \ +# $(HOME_LIB_PATH)/libatlas.a # MKL MKL_LIB := -L$(MKL_LIB_PATH) \ @@ -130,13 +126,29 @@ MKLP_LIB := -L$(MKL_LIB_PATH) \ #-L$(ICC_LIB_PATH) \ #-lgomp -# ACML -ACML_LIB := -L$(ACML_LIB_PATH) \ - -lgfortran -lm -lrt -ldl -lacml -ACMLP_LIB := -L$(ACMLP_LIB_PATH) \ - -lgfortran -lm -lrt -ldl -lacml_mp +VENDOR_LIB := $(MKL_LIB) +VENDORP_LIB := $(MKLP_LIB) +# +# --- Problem size definitions ------------------------------------------------- +# + +# Single core (single-threaded) +PS_BEGIN := 40 +PS_MAX := 2000 +PS_INC := 40 + +# Single-socket (multithreaded) +P1_BEGIN := 120 +P1_MAX := 6000 +P1_INC := 120 + +# Dual-socket (multithreaded) +P2_BEGIN := 160 +P2_MAX := 8000 +P2_INC := 160 + # # --- General build definitions ------------------------------------------------ @@ -165,12 +177,6 @@ CFLAGS += -I$(TEST_SRC_PATH) LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) -# Datatype -DT_S := -DDT=BLIS_FLOAT -DT_D := -DDT=BLIS_DOUBLE -DT_C := -DDT=BLIS_SCOMPLEX -DT_Z := -DDT=BLIS_DCOMPLEX - # Which library? BLI_DEF := -DBLIS BLA_DEF := -DBLAS @@ -185,29 +191,25 @@ D1M := -DIND=BLIS_1M DNAT := -DIND=BLIS_NAT # Implementation string -STR_3MHW := -DSTR=\"3mhw\" -STR_3M1 := -DSTR=\"3m1\" -STR_4MHW := -DSTR=\"4mhw\" -STR_4M1B := -DSTR=\"4m1b\" -STR_4M1A := -DSTR=\"4m1a\" -STR_1M := -DSTR=\"1m\" -STR_NAT := -DSTR=\"asm\" +#STR_3MHW := -DSTR=\"3mhw\" +#STR_3M1 := -DSTR=\"3m1\" +#STR_4MHW := -DSTR=\"4mhw\" +#STR_4M1B := -DSTR=\"4m1b\" +#STR_4M1A := -DSTR=\"4m1a\" +#STR_1M := -DSTR=\"1m\" +STR_NAT := -DSTR=\"asm_blis\" STR_OBL := -DSTR=\"openblas\" -STR_MKL := -DSTR=\"mkl\" -STR_ACML := -DSTR=\"acml\" +STR_VEN := -DSTR=\"vendor\" # Single or multithreaded string STR_ST := -DTHR_STR=\"st\" -STR_MT := -DTHR_STR=\"mt\" +STR_1S := -DTHR_STR=\"1s\" +STR_2S := -DTHR_STR=\"2s\" # Problem size specification -PDEF_ST := -DP_BEGIN=56 \ - -DP_END=2800 \ - -DP_INC=56 - -PDEF_MT := -DP_BEGIN=160 \ - -DP_END=8000 \ - -DP_INC=160 +PDEF_ST := -DP_BEGIN=$(PS_BEGIN) -DP_INC=$(PS_INC) -DP_MAX=$(PS_MAX) +PDEF_1S := -DP_BEGIN=$(P1_BEGIN) -DP_INC=$(P1_INC) -DP_MAX=$(P1_MAX) +PDEF_2S := -DP_BEGIN=$(P2_BEGIN) -DP_INC=$(P2_INC) -DP_MAX=$(P2_MAX) @@ -215,340 +217,129 @@ PDEF_MT := -DP_BEGIN=160 \ # --- Targets/rules ------------------------------------------------------------ # -all: all-st all-mt -blis: blis-st blis-mt -openblas: openblas-st openblas-mt -mkl: mkl-st mkl-mt +all: all-st all-1s all-2s +blis: blis-st blis-1s blis-2s +openblas: openblas-st openblas-1s openblas-2s +vendor: vendor-st vendor-1s vendor-2s +mkl: vendor +armpl: vendor all-st: blis-st openblas-st mkl-st -all-mt: blis-mt openblas-mt mkl-mt +all-1s: blis-1s openblas-1s mkl-1s +all-2s: blis-2s openblas-2s mkl-2s blis-st: blis-nat-st -blis-mt: blis-nat-mt +blis-1s: blis-nat-1s +blis-2s: blis-nat-2s -blis-ind: blis-ind-st blis-ind-mt -blis-nat: blis-nat-st blis-nat-mt +#blis-ind: blis-ind-st blis-ind-mt +blis-nat: blis-nat-st blis-nat-1s blis-nat-2s -blis-ind-st: \ - test_cgemm_3mhw_blis_st.x \ - test_zgemm_3mhw_blis_st.x \ - test_cgemm_3m1_blis_st.x \ - test_zgemm_3m1_blis_st.x \ - test_cgemm_4mhw_blis_st.x \ - test_zgemm_4mhw_blis_st.x \ - test_cgemm_4m1b_blis_st.x \ - test_zgemm_4m1b_blis_st.x \ - test_cgemm_4m1a_blis_st.x \ - test_zgemm_4m1a_blis_st.x \ - test_cgemm_1m_blis_st.x \ - test_zgemm_1m_blis_st.x +# Define the datatypes, operations, and implementations. +DTS := s d c z +OPS := gemm hemm herk trmm trsm +IMPLS := asm_blis openblas vendor -blis-ind-mt: \ - test_cgemm_3mhw_blis_mt.x \ - test_zgemm_3mhw_blis_mt.x \ - test_cgemm_3m1_blis_mt.x \ - test_zgemm_3m1_blis_mt.x \ - test_cgemm_4mhw_blis_mt.x \ - test_zgemm_4mhw_blis_mt.x \ - test_cgemm_4m1b_blis_mt.x \ - test_zgemm_4m1b_blis_mt.x \ - test_cgemm_4m1a_blis_mt.x \ - test_zgemm_4m1a_blis_mt.x \ - test_cgemm_1m_blis_mt.x \ - test_zgemm_1m_blis_mt.x +# Define functions to construct object filenames from the datatypes and +# operations given an implementation. We define one function for single- +# threaded, single-socket, and dual-socket filenames. +get-st-objs = $(foreach dt,$(DTS),$(foreach op,$(OPS),test_$(dt)$(op)_$(PS_MAX)_$(1)_st.o)) +get-1s-objs = $(foreach dt,$(DTS),$(foreach op,$(OPS),test_$(dt)$(op)_$(P1_MAX)_$(1)_1s.o)) +get-2s-objs = $(foreach dt,$(DTS),$(foreach op,$(OPS),test_$(dt)$(op)_$(P2_MAX)_$(1)_2s.o)) -blis-nat-st: \ - test_sgemm_asm_blis_st.x \ - test_dgemm_asm_blis_st.x \ - test_cgemm_asm_blis_st.x \ - test_zgemm_asm_blis_st.x \ - test_shemm_asm_blis_st.x \ - test_dhemm_asm_blis_st.x \ - test_chemm_asm_blis_st.x \ - test_zhemm_asm_blis_st.x \ - test_sherk_asm_blis_st.x \ - test_dherk_asm_blis_st.x \ - test_cherk_asm_blis_st.x \ - test_zherk_asm_blis_st.x \ - test_strmm_asm_blis_st.x \ - test_dtrmm_asm_blis_st.x \ - test_ctrmm_asm_blis_st.x \ - test_ztrmm_asm_blis_st.x \ - test_strsm_asm_blis_st.x \ - test_dtrsm_asm_blis_st.x \ - test_ctrsm_asm_blis_st.x \ - test_ztrsm_asm_blis_st.x +# Construct object and binary names for single-threaded, single-socket, and +# dual-socket files for BLIS, OpenBLAS, and a vendor library (e.g. MKL). +BLIS_NAT_ST_OBJS := $(call get-st-objs,asm_blis) +BLIS_NAT_ST_BINS := $(patsubst %.o,%.x,$(BLIS_NAT_ST_OBJS)) +BLIS_NAT_1S_OBJS := $(call get-1s-objs,asm_blis) +BLIS_NAT_1S_BINS := $(patsubst %.o,%.x,$(BLIS_NAT_1S_OBJS)) +BLIS_NAT_2S_OBJS := $(call get-2s-objs,asm_blis) +BLIS_NAT_2S_BINS := $(patsubst %.o,%.x,$(BLIS_NAT_2S_OBJS)) -blis-nat-mt: \ - test_sgemm_asm_blis_mt.x \ - test_dgemm_asm_blis_mt.x \ - test_cgemm_asm_blis_mt.x \ - test_zgemm_asm_blis_mt.x \ - test_shemm_asm_blis_mt.x \ - test_dhemm_asm_blis_mt.x \ - test_chemm_asm_blis_mt.x \ - test_zhemm_asm_blis_mt.x \ - test_sherk_asm_blis_mt.x \ - test_dherk_asm_blis_mt.x \ - test_cherk_asm_blis_mt.x \ - test_zherk_asm_blis_mt.x \ - test_strmm_asm_blis_mt.x \ - test_dtrmm_asm_blis_mt.x \ - test_ctrmm_asm_blis_mt.x \ - test_ztrmm_asm_blis_mt.x \ - test_strsm_asm_blis_mt.x \ - test_dtrsm_asm_blis_mt.x \ - test_ctrsm_asm_blis_mt.x \ - test_ztrsm_asm_blis_mt.x +OPENBLAS_ST_OBJS := $(call get-st-objs,openblas) +OPENBLAS_ST_BINS := $(patsubst %.o,%.x,$(OPENBLAS_ST_OBJS)) +OPENBLAS_1S_OBJS := $(call get-1s-objs,openblas) +OPENBLAS_1S_BINS := $(patsubst %.o,%.x,$(OPENBLAS_1S_OBJS)) +OPENBLAS_2S_OBJS := $(call get-2s-objs,openblas) +OPENBLAS_2S_BINS := $(patsubst %.o,%.x,$(OPENBLAS_2S_OBJS)) -openblas-st: \ - test_sgemm_openblas_st.x \ - test_dgemm_openblas_st.x \ - test_cgemm_openblas_st.x \ - test_zgemm_openblas_st.x \ - test_shemm_openblas_st.x \ - test_dhemm_openblas_st.x \ - test_chemm_openblas_st.x \ - test_zhemm_openblas_st.x \ - test_sherk_openblas_st.x \ - test_dherk_openblas_st.x \ - test_cherk_openblas_st.x \ - test_zherk_openblas_st.x \ - test_strmm_openblas_st.x \ - test_dtrmm_openblas_st.x \ - test_ctrmm_openblas_st.x \ - test_ztrmm_openblas_st.x \ - test_strsm_openblas_st.x \ - test_dtrsm_openblas_st.x \ - test_ctrsm_openblas_st.x \ - test_ztrsm_openblas_st.x +VENDOR_ST_OBJS := $(call get-st-objs,vendor) +VENDOR_ST_BINS := $(patsubst %.o,%.x,$(VENDOR_ST_OBJS)) +VENDOR_1S_OBJS := $(call get-1s-objs,vendor) +VENDOR_1S_BINS := $(patsubst %.o,%.x,$(VENDOR_1S_OBJS)) +VENDOR_2S_OBJS := $(call get-2s-objs,vendor) +VENDOR_2S_BINS := $(patsubst %.o,%.x,$(VENDOR_2S_OBJS)) -openblas-mt: \ - test_sgemm_openblas_mt.x \ - test_dgemm_openblas_mt.x \ - test_cgemm_openblas_mt.x \ - test_zgemm_openblas_mt.x \ - test_shemm_openblas_mt.x \ - test_dhemm_openblas_mt.x \ - test_chemm_openblas_mt.x \ - test_zhemm_openblas_mt.x \ - test_sherk_openblas_mt.x \ - test_dherk_openblas_mt.x \ - test_cherk_openblas_mt.x \ - test_zherk_openblas_mt.x \ - test_strmm_openblas_mt.x \ - test_dtrmm_openblas_mt.x \ - test_ctrmm_openblas_mt.x \ - test_ztrmm_openblas_mt.x \ - test_strsm_openblas_mt.x \ - test_dtrsm_openblas_mt.x \ - test_ctrsm_openblas_mt.x \ - test_ztrsm_openblas_mt.x +# Define some targets associated with the above object/binary files. +blis-nat-st: $(BLIS_NAT_ST_BINS) +blis-nat-1s: $(BLIS_NAT_1S_BINS) +blis-nat-2s: $(BLIS_NAT_2S_BINS) -mkl-st: \ - test_sgemm_mkl_st.x \ - test_dgemm_mkl_st.x \ - test_cgemm_mkl_st.x \ - test_zgemm_mkl_st.x \ - test_shemm_mkl_st.x \ - test_dhemm_mkl_st.x \ - test_chemm_mkl_st.x \ - test_zhemm_mkl_st.x \ - test_sherk_mkl_st.x \ - test_dherk_mkl_st.x \ - test_cherk_mkl_st.x \ - test_zherk_mkl_st.x \ - test_strmm_mkl_st.x \ - test_dtrmm_mkl_st.x \ - test_ctrmm_mkl_st.x \ - test_ztrmm_mkl_st.x \ - test_strsm_mkl_st.x \ - test_dtrsm_mkl_st.x \ - test_ctrsm_mkl_st.x \ - test_ztrsm_mkl_st.x +openblas-st: $(OPENBLAS_ST_BINS) +openblas-1s: $(OPENBLAS_1S_BINS) +openblas-2s: $(OPENBLAS_2S_BINS) -mkl-mt: \ - test_sgemm_mkl_mt.x \ - test_dgemm_mkl_mt.x \ - test_cgemm_mkl_mt.x \ - test_zgemm_mkl_mt.x \ - test_shemm_mkl_mt.x \ - test_dhemm_mkl_mt.x \ - test_chemm_mkl_mt.x \ - test_zhemm_mkl_mt.x \ - test_sherk_mkl_mt.x \ - test_dherk_mkl_mt.x \ - test_cherk_mkl_mt.x \ - test_zherk_mkl_mt.x \ - test_strmm_mkl_mt.x \ - test_dtrmm_mkl_mt.x \ - test_ctrmm_mkl_mt.x \ - test_ztrmm_mkl_mt.x \ - test_strsm_mkl_mt.x \ - test_dtrsm_mkl_mt.x \ - test_ctrsm_mkl_mt.x \ - test_ztrsm_mkl_mt.x +vendor-st: $(VENDOR_ST_BINS) +vendor-1s: $(VENDOR_1S_BINS) +vendor-2s: $(VENDOR_2S_BINS) +mkl-st: vendor-st +mkl-1s: vendor-1s +mkl-2s: vendor-2s +armpl-st: vendor-st +armpl-1s: vendor-1s +armpl-2s: vendor-2s + +# Mark the object files as intermediate so that make will remove them +# automatically after building the binaries on which they depend. +.INTERMEDIATE: $(BLIS_NAT_ST_OBJS) $(OPENBLAS_ST_OBJS) $(VENDOR_ST_OBJS) +.INTERMEDIATE: $(BLIS_NAT_1S_OBJS) $(OPENBLAS_1S_OBJS) $(VENDOR_1S_OBJS) +.INTERMEDIATE: $(BLIS_NAT_2S_OBJS) $(OPENBLAS_2S_OBJS) $(VENDOR_2S_OBJS) # --Object file rules -- -$(TEST_OBJ_PATH)/%.o: $(TEST_SRC_PATH)/%.c - $(CC) $(CFLAGS) -c $< -o $@ +#$(TEST_OBJ_PATH)/%.o: $(TEST_SRC_PATH)/%.c +# $(CC) $(CFLAGS) -c $< -o $@ -# blis 3mhw -test_z%_3mhw_blis_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_Z) $(BLI_DEF) $(D3MHW) $(STR_3MHW) $(STR_ST) -c $< -o $@ +# A function to return the datatype cpp macro def from the datatype +# character. +get-dt-cpp = -DDT=bli_$(1)type -test_c%_3mhw_blis_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_C) $(BLI_DEF) $(D3MHW) $(STR_3MHW) $(STR_ST) -c $< -o $@ +# A function to return other cpp macros that help the test driver +# identify the implementation. +get-bl-cpp = $(strip \ + $(if $(findstring blis,$(1)),$(STR_NAT) $(BLI_DEF),\ + $(if $(findstring openblas,$(1)),$(STR_OBL) $(BLA_DEF),\ + $(STR_VEN) $(BLA_DEF)))) -test_z%_3mhw_blis_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_Z) $(BLI_DEF) $(D3MHW) $(STR_3MHW) $(STR_MT) -c $< -o $@ +define make-st-rule +test_$(1)$(2)_$(PS_MAX)_$(3)_st.o: test_$(op).c Makefile + $(CC) $(CFLAGS) $(PDEF_ST) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3)) $(DNAT) $(STR_ST) -c $$< -o $$@ +endef -test_c%_3mhw_blis_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_C) $(BLI_DEF) $(D3MHW) $(STR_3MHW) $(STR_MT) -c $< -o $@ +define make-1s-rule +test_$(1)$(2)_$(P1_MAX)_$(3)_1s.o: test_$(op).c Makefile + $(CC) $(CFLAGS) $(PDEF_1S) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3)) $(DNAT) $(STR_1S) -c $$< -o $$@ +endef -# blis 3m1 -test_z%_3m1_blis_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_Z) $(BLI_DEF) $(D3M1) $(STR_3M1) $(STR_ST) -c $< -o $@ +define make-2s-rule +test_$(1)$(2)_$(P2_MAX)_$(3)_2s.o: test_$(op).c Makefile + $(CC) $(CFLAGS) $(PDEF_2S) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3)) $(DNAT) $(STR_2S) -c $$< -o $$@ +endef -test_c%_3m1_blis_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_C) $(BLI_DEF) $(D3M1) $(STR_3M1) $(STR_ST) -c $< -o $@ +$(foreach dt,$(DTS), \ +$(foreach op,$(OPS), \ +$(foreach im,$(IMPLS),$(eval $(call make-st-rule,$(dt),$(op),$(im)))))) -test_z%_3m1_blis_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_Z) $(BLI_DEF) $(D3M1) $(STR_3M1) $(STR_MT) -c $< -o $@ +$(foreach dt,$(DTS), \ +$(foreach op,$(OPS), \ +$(foreach im,$(IMPLS),$(eval $(call make-1s-rule,$(dt),$(op),$(im)))))) -test_c%_3m1_blis_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_C) $(BLI_DEF) $(D3M1) $(STR_3M1) $(STR_MT) -c $< -o $@ - -# blis 4mhw -test_z%_4mhw_blis_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_Z) $(BLI_DEF) $(D4MHW) $(STR_4MHW) $(STR_ST) -c $< -o $@ - -test_c%_4mhw_blis_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_C) $(BLI_DEF) $(D4MHW) $(STR_4MHW) $(STR_ST) -c $< -o $@ - -test_z%_4mhw_blis_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_Z) $(BLI_DEF) $(D4MHW) $(STR_4MHW) $(STR_MT) -c $< -o $@ - -test_c%_4mhw_blis_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_C) $(BLI_DEF) $(D4MHW) $(STR_4MHW) $(STR_MT) -c $< -o $@ - -# blis 4m1b -test_z%_4m1b_blis_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_Z) $(BLI_DEF) $(D4M1B) $(STR_4M1B) $(STR_ST) -c $< -o $@ - -test_c%_4m1b_blis_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_C) $(BLI_DEF) $(D4M1B) $(STR_4M1B) $(STR_ST) -c $< -o $@ - -test_z%_4m1b_blis_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_Z) $(BLI_DEF) $(D4M1B) $(STR_4M1B) $(STR_MT) -c $< -o $@ - -test_c%_4m1b_blis_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_C) $(BLI_DEF) $(D4M1B) $(STR_4M1B) $(STR_MT) -c $< -o $@ - -# blis 4m1a -test_z%_4m1a_blis_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_Z) $(BLI_DEF) $(D4M1A) $(STR_4M1A) $(STR_ST) -c $< -o $@ - -test_c%_4m1a_blis_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_C) $(BLI_DEF) $(D4M1A) $(STR_4M1A) $(STR_ST) -c $< -o $@ - -test_z%_4m1a_blis_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_Z) $(BLI_DEF) $(D4M1A) $(STR_4M1A) $(STR_MT) -c $< -o $@ - -test_c%_4m1a_blis_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_C) $(BLI_DEF) $(D4M1A) $(STR_4M1A) $(STR_MT) -c $< -o $@ - -# blis 1m -test_z%_1m_blis_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_Z) $(BLI_DEF) $(D1M) $(STR_1M) $(STR_ST) -c $< -o $@ - -test_c%_1m_blis_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_C) $(BLI_DEF) $(D1M) $(STR_1M) $(STR_ST) -c $< -o $@ - -test_z%_1m_blis_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_Z) $(BLI_DEF) $(D1M) $(STR_1M) $(STR_MT) -c $< -o $@ - -test_c%_1m_blis_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_C) $(BLI_DEF) $(D1M) $(STR_1M) $(STR_MT) -c $< -o $@ - -# blis asm -test_d%_asm_blis_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_D) $(BLI_DEF) $(DNAT) $(STR_NAT) $(STR_ST) -c $< -o $@ - -test_s%_asm_blis_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_S) $(BLI_DEF) $(DNAT) $(STR_NAT) $(STR_ST) -c $< -o $@ - -test_z%_asm_blis_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_Z) $(BLI_DEF) $(DNAT) $(STR_NAT) $(STR_ST) -c $< -o $@ - -test_c%_asm_blis_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_C) $(BLI_DEF) $(DNAT) $(STR_NAT) $(STR_ST) -c $< -o $@ - -test_d%_asm_blis_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_D) $(BLI_DEF) $(DNAT) $(STR_NAT) $(STR_MT) -c $< -o $@ - -test_s%_asm_blis_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_S) $(BLI_DEF) $(DNAT) $(STR_NAT) $(STR_MT) -c $< -o $@ - -test_z%_asm_blis_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_Z) $(BLI_DEF) $(DNAT) $(STR_NAT) $(STR_MT) -c $< -o $@ - -test_c%_asm_blis_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_C) $(BLI_DEF) $(DNAT) $(STR_NAT) $(STR_MT) -c $< -o $@ - -# openblas -test_d%_openblas_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_D) $(BLA_DEF) $(DNAT) $(STR_OBL) $(STR_ST) -c $< -o $@ - -test_s%_openblas_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_S) $(BLA_DEF) $(DNAT) $(STR_OBL) $(STR_ST) -c $< -o $@ - -test_z%_openblas_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_Z) $(BLA_DEF) $(DNAT) $(STR_OBL) $(STR_ST) -c $< -o $@ - -test_c%_openblas_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_C) $(BLA_DEF) $(DNAT) $(STR_OBL) $(STR_ST) -c $< -o $@ - -test_d%_openblas_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_D) $(BLA_DEF) $(DNAT) $(STR_OBL) $(STR_MT) -c $< -o $@ - -test_s%_openblas_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_S) $(BLA_DEF) $(DNAT) $(STR_OBL) $(STR_MT) -c $< -o $@ - -test_z%_openblas_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_Z) $(BLA_DEF) $(DNAT) $(STR_OBL) $(STR_MT) -c $< -o $@ - -test_c%_openblas_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_C) $(BLA_DEF) $(DNAT) $(STR_OBL) $(STR_MT) -c $< -o $@ - -# mkl -test_d%_mkl_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_D) $(BLA_DEF) $(DNAT) $(STR_MKL) $(STR_ST) -c $< -o $@ - -test_s%_mkl_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_S) $(BLA_DEF) $(DNAT) $(STR_MKL) $(STR_ST) -c $< -o $@ - -test_z%_mkl_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_Z) $(BLA_DEF) $(DNAT) $(STR_MKL) $(STR_ST) -c $< -o $@ - -test_c%_mkl_st.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(DT_C) $(BLA_DEF) $(DNAT) $(STR_MKL) $(STR_ST) -c $< -o $@ - -test_d%_mkl_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_D) $(BLA_DEF) $(DNAT) $(STR_MKL) $(STR_MT) -c $< -o $@ - -test_s%_mkl_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_S) $(BLA_DEF) $(DNAT) $(STR_MKL) $(STR_MT) -c $< -o $@ - -test_z%_mkl_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_Z) $(BLA_DEF) $(DNAT) $(STR_MKL) $(STR_MT) -c $< -o $@ - -test_c%_mkl_mt.o: test_%.c Makefile - $(CC) $(CFLAGS) $(PDEF_MT) $(DT_C) $(BLA_DEF) $(DNAT) $(STR_MKL) $(STR_MT) -c $< -o $@ +$(foreach dt,$(DTS), \ +$(foreach op,$(OPS), \ +$(foreach im,$(IMPLS),$(eval $(call make-2s-rule,$(dt),$(op),$(im)))))) # -- Executable file rules -- @@ -558,23 +349,34 @@ test_c%_mkl_mt.o: test_%.c Makefile # compatibility layer. This prevents BLIS from inadvertently getting called # for the BLAS routines we are trying to test with. -test_%_openblas_st.x: test_%_openblas_st.o $(LIBBLIS_LINK) - $(LINKER) $< $(OPENBLAS_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@ +test_%_$(PS_MAX)_openblas_st.x: test_%_$(PS_MAX)_openblas_st.o $(LIBBLIS_LINK) + $(LINKER) $(strip $< $(OPENBLAS_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) -test_%_openblas_mt.x: test_%_openblas_mt.o $(LIBBLIS_LINK) - $(LINKER) $< $(OPENBLASP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@ +test_%_$(P1_MAX)_openblas_1s.x: test_%_$(P1_MAX)_openblas_1s.o $(LIBBLIS_LINK) + $(LINKER) $(strip $< $(OPENBLASP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) -test_%_mkl_st.x: test_%_mkl_st.o $(LIBBLIS_LINK) - $(LINKER) $< $(MKL_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@ +test_%_$(P2_MAX)_openblas_2s.x: test_%_$(P2_MAX)_openblas_2s.o $(LIBBLIS_LINK) + $(LINKER) $(strip $< $(OPENBLASP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) -test_%_mkl_mt.x: test_%_mkl_mt.o $(LIBBLIS_LINK) - $(LINKER) $< $(MKLP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@ -test_%_blis_st.x: test_%_blis_st.o $(LIBBLIS_LINK) - $(LINKER) $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@ +test_%_$(PS_MAX)_vendor_st.x: test_%_$(PS_MAX)_vendor_st.o $(LIBBLIS_LINK) + $(LINKER) $(strip $< $(VENDOR_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) -test_%_blis_mt.x: test_%_blis_mt.o $(LIBBLIS_LINK) - $(LINKER) $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@ +test_%_$(P1_MAX)_vendor_1s.x: test_%_$(P1_MAX)_vendor_1s.o $(LIBBLIS_LINK) + $(LINKER) $(strip $< $(VENDORP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P2_MAX)_vendor_2s.x: test_%_$(P2_MAX)_vendor_2s.o $(LIBBLIS_LINK) + $(LINKER) $(strip $< $(VENDORP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + + +test_%_$(PS_MAX)_asm_blis_st.x: test_%_$(PS_MAX)_asm_blis_st.o $(LIBBLIS_LINK) + $(LINKER) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P1_MAX)_asm_blis_1s.x: test_%_$(P1_MAX)_asm_blis_1s.o $(LIBBLIS_LINK) + $(LINKER) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P2_MAX)_asm_blis_2s.x: test_%_$(P2_MAX)_asm_blis_2s.o $(LIBBLIS_LINK) + $(LINKER) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) # -- Clean rules -- diff --git a/test/3m4m/matlab/plot_all.m b/test/3m4m/matlab/plot_all.m deleted file mode 100644 index e5b478f23..000000000 --- a/test/3m4m/matlab/plot_all.m +++ /dev/null @@ -1,9 +0,0 @@ -% tx2 -plot_panel_4x5(2.2,8,1, '../results/tx2/st', 'tx2', 'ARMPL'); close; clear all; -plot_panel_4x5(2.2,8,28,'../results/tx2/jc4ic7','tx2_jc4ic7','ARMPL'); close; clear all; -plot_panel_4x5(2.2,8,56,'../results/tx2/jc8ic7','tx2_jc8ic7','ARMPL'); close; clear all; - -% skx -plot_panel_4x5(2.0,32,1,'../results/skx/st/20190218','skx','MKL'); close; clear all; -plot_panel_4x5(2.0,32,26,'../results/skx/jc2ic13/20190218','skx_jc2ic13','MKL'); close; clear all; -plot_panel_4x5(2.0,32,52,'../results/skx/jc4ic13/20190218','skx_jc4ic13','MKL'); close; clear all; diff --git a/test/3m4m/matlab/plot_l3_perf.m b/test/3m4m/matlab/plot_l3_perf.m index 181871039..63ec55660 100644 --- a/test/3m4m/matlab/plot_l3_perf.m +++ b/test/3m4m/matlab/plot_l3_perf.m @@ -99,7 +99,7 @@ vend_ln = line( x_axis( :, 1 ), data_vend( :, flopscol ) / nth, ... xlim( ax1, [x_begin x_end] ); ylim( ax1, [y_begin y_end] ); -if x_end == 10000 || x_end == 8000 +if x_end == 10000 || x_end == 8000 || x_end == 6000 x_tick2 = x_end - 2000; x_tick1 = x_tick2/2; xticks( ax1, [ x_tick1 x_tick2 ] ); diff --git a/test/3m4m/matlab/plot_panel_4x5.m b/test/3m4m/matlab/plot_panel_4x5.m index 71b0b803d..740ca5666 100644 --- a/test/3m4m/matlab/plot_panel_4x5.m +++ b/test/3m4m/matlab/plot_panel_4x5.m @@ -1,6 +1,7 @@ function r_val = plot_panel_4x5( cfreq, ... dflopspercycle, ... nth, ... + thr_str, ... dirpath, ... arch_str, ... vend_str ) @@ -12,18 +13,12 @@ function r_val = plot_panel_4x5( cfreq, ... % results. filetemp_blis = '%s/output_%s_%s_asm_blis.m'; filetemp_open = '%s/output_%s_%s_openblas.m'; -filetemp_mkl = '%s/output_%s_%s_mkl.m'; +filetemp_vend = '%s/output_%s_%s_vendor.m'; % Create a variable name "template" for the variables contained in the % files outlined above. vartemp = 'data_%s_%s_%s( :, : )'; -if nth == 1 - thr_str = 'st'; -else - thr_str = 'mt'; -end - % Define the datatypes and operations we will be plotting. dts = [ 's' 'd' 'c' 'z' ]; ops( 1, : ) = 'gemm'; @@ -63,26 +58,26 @@ for opi = 1:n_opnames % Construct filenames for the data files from templates. file_blis = sprintf( filetemp_blis, dirpath, thr_str, opname ); file_open = sprintf( filetemp_open, dirpath, thr_str, opname ); - file_mkl = sprintf( filetemp_mkl, dirpath, thr_str, opname ); + file_vend = sprintf( filetemp_vend, dirpath, thr_str, opname ); % Load the data files. %str = sprintf( ' Loading %s', file_blis ); disp(str); run( file_blis ) %str = sprintf( ' Loading %s', file_open ); disp(str); run( file_open ) - %str = sprintf( ' Loading %s', file_mkl ); disp(str); - run( file_mkl ) + %str = sprintf( ' Loading %s', file_vend ); disp(str); + run( file_vend ) % Construct variable names for the variables in the data files. var_blis = sprintf( vartemp, thr_str, opname, 'asm_blis' ); var_open = sprintf( vartemp, thr_str, opname, 'openblas' ); - var_vend = sprintf( vartemp, thr_str, opname, 'mkl' ); + var_vend = sprintf( vartemp, thr_str, opname, 'vendor' ); % Use eval() to instantiate the variable names constructed above, % copying each to a simplified name. data_blis = eval( var_blis ); % e.g. data_st_sgemm_asm_blis( :, : ); data_open = eval( var_open ); % e.g. data_st_sgemm_openblas( :, : ); - data_vend = eval( var_vend ); % e.g. data_st_sgemm_mkl( :, : ); + data_vend = eval( var_vend ); % e.g. data_st_sgemm_vendor( :, : ); % Plot one result in an m x n grid of plots, via the subplot() % function. diff --git a/test/3m4m/matlab/runme.m b/test/3m4m/matlab/runme.m new file mode 100644 index 000000000..2a34a2233 --- /dev/null +++ b/test/3m4m/matlab/runme.m @@ -0,0 +1,9 @@ +% tx2 +plot_panel_4x5(2.2,8,1, 'st','../results/tx2/st', 'tx2', 'ARMPL'); close; clear all; +plot_panel_4x5(2.2,8,28,'1s','../results/tx2/jc4ic7','tx2_jc4ic7','ARMPL'); close; clear all; +plot_panel_4x5(2.2,8,56,'2s','../results/tx2/jc8ic7','tx2_jc8ic7','ARMPL'); close; clear all; + +% skx +plot_panel_4x5(2.0,32,1, 'st','../results/skx/st/20190218', 'skx', 'MKL'); close; clear all; +plot_panel_4x5(2.0,32,26,'1s','../results/skx/jc2ic13/20190218','skx_jc2ic13','MKL'); close; clear all; +plot_panel_4x5(2.0,32,52,'2s','../results/skx/jc4ic13/20190218','skx_jc4ic13','MKL'); close; clear all; diff --git a/test/3m4m/runme.sh b/test/3m4m/runme.sh index 50fd61ae8..f7f33a772 100755 --- a/test/3m4m/runme.sh +++ b/test/3m4m/runme.sh @@ -3,37 +3,33 @@ # File pefixes. exec_root="test" out_root="output" +delay=0.1 #sys="blis" #sys="stampede2" -sys="lonestar5" +#sys="lonestar5" #sys="ul252" +sys="ul264" # Bind threads to processors. #export OMP_PROC_BIND=true #export GOMP_CPU_AFFINITY="0 2 4 6 8 10 12 14 16 18 20 22 1 3 5 7 9 11 13 15 17 19 21 23" +#export GOMP_CPU_AFFINITY="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103" -# Modify LD_LIBRARY_PATH. if [ ${sys} = "blis" ]; then export GOMP_CPU_AFFINITY="0 1 2 3" - jc_nt=1 # 5th loop - ic_nt=4 # 3rd loop - jr_nt=1 # 2nd loop - ir_nt=1 # 1st loop - nt=4 + threads="jc2ic2jr1_4000 + jc2ic2jr1_6000" elif [ ${sys} = "stampede2" ]; then echo "Need to set GOMP_CPU_AFFINITY." exit 1 - jc_nt=4 # 5th loop - ic_nt=12 # 3rd loop - jr_nt=1 # 2nd loop - ir_nt=1 # 1st loop - nt=48 + threads="jc4ic6jr1_6000 + jc4ic12jr1_8000" elif [ ${sys} = "lonestar5" ]; then @@ -42,148 +38,115 @@ elif [ ${sys} = "lonestar5" ]; then # A hack to use libiomp5 with gcc. #export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/apps/intel/16.0.1.150/compilers_and_libraries_2016.1.150/linux/compiler/lib/intel64" - # runner-up: - #jc_nt=6 # 5th loop - #ic_nt=4 # 3rd loop - #jr_nt=1 # 2nd loop - - jc_nt=2 # 5th loop - ic_nt=3 # 3rd loop - jr_nt=2 # 2nd loop - - ir_nt=1 # 1st loop - nt=12 + threads="jc2ic3jr2_6000 + jc4ic3jr2_8000" elif [ ${sys} = "ul252" ]; then export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/field/intel/mkl/lib/intel64" - #export GOMP_CPU_AFFINITY="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103" export GOMP_CPU_AFFINITY="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51" - #jc_nt=4 # 5th loop - jc_nt=2 # 5th loop - ic_nt=13 # 3rd loop - jr_nt=1 # 2nd loop - ir_nt=1 # 1st loop - #nt=52 - nt=26 + threads="jc2ic13jr1_6000 + jc4ic13jr1_8000" + +elif [ ${sys} = "ul264" ]; then + + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/field/intel/mkl/lib/intel64" + export GOMP_CPU_AFFINITY="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63" + + threads="jc1ic8jr4_6000 + jc2ic8jr4_8000" + fi -echo "Setting BLIS threading params for ${sys}: jc${jc_nt}ic${ic_nt}jr${jr_nt}." +# Datatypes to test. +test_dts="d s z c" + +# Operations to test. +test_ops="gemm hemm herk trmm trsm" +test_ops="gemm" + +# Implementations to test. +impls="all" +#impls="other" +#impls="blis" + +if [ "${impls}" = "blis" ]; then + + test_impls="asm_blis" + +elif [ "${impls}" = "other" ]; then + + test_impls="openblas vendor" + +else + + test_impls="openblas asm_blis vendor" +fi # Save a copy of GOMP_CPU_AFFINITY so that if we have to unset it, we can # restore the value. GOMP_CPU_AFFINITYsave=${GOMP_CPU_AFFINITY} -# Threadedness to test. -threads="mt" -threads_r="mt" -#threads="st" -#threads_r="st" - -# Datatypes to test. -dts="" -dts_r="" -dts="z c" -dts_r="d s" - -# Operations to test. -l3_ops="gemm hemm herk trmm trsm" -test_ops="${l3_ops}" -test_ops_r="${l3_ops}" - -# Complex domain implementations to test. -#test_impls="3mhw_blis 3m1_blis 4mhw_blis 4m1b_blis 4m1a_blis 1m_blis" -#test_impls="openblas mkl asm_blis" - -# Implementations to test. -impls="allasm" - -if [ ${impls} = "allasm" ]; then - - test_impls_r="openblas asm_blis mkl" - test_impls="openblas asm_blis mkl" - -elif [ ${impls} = "comp" ]; then - - test_impls_r="openblas mkl" - test_impls="openblas mkl" - -elif [ ${impls} = "blis" ]; then - - test_impls_r="asm_blis" - test_impls="asm_blis" -fi # First perform real test cases. -for th in ${threads_r}; do - - for dt in ${dts_r}; do - - for im in ${test_impls_r}; do - - for op in ${test_ops_r}; do - - # Set the number of threads according to th. - if [ ${th} = "mt" ]; then - - export BLIS_JC_NT=${jc_nt} - export BLIS_IC_NT=${ic_nt} - export BLIS_JR_NT=${jr_nt} - export BLIS_IR_NT=${ir_nt} - export OPENBLAS_NUM_THREADS=${nt} - export MKL_NUM_THREADS=${nt} - export nt_use=${nt} - - # Unset GOMP_CPU_AFFINITY for OpenBLAS. - if [ ${im} = "openblas" ]; then - - unset GOMP_CPU_AFFINITY - else - export GOMP_CPU_AFFINITY="${GOMP_CPU_AFFINITYsave}" - fi - else - - export BLIS_JC_NT=1 - export BLIS_IC_NT=1 - export BLIS_JR_NT=1 - export BLIS_IR_NT=1 - export OPENBLAS_NUM_THREADS=1 - export MKL_NUM_THREADS=1 - export nt_use=1 - fi - - # Construct the name of the test executable. - exec_name="${exec_root}_${dt}${op}_${im}_${th}.x" - - # Construct the name of the output file. - out_file="${out_root}_${th}_${dt}${op}_${im}.m" - - echo "Running (nt = ${nt_use}) ./${exec_name} > ${out_file}" - - # Run executable. - ./${exec_name} > ${out_file} - - sleep 1 - - done - done - done -done - -# Now perform complex test cases. for th in ${threads}; do - for dt in ${dts}; do + # Start with one way of parallelism in each loop. We will now begin + # parsing the 'th' variable to update one or more of these threading + # parameters. + jc_nt=1; pc_nt=1; ic_nt=1; jr_nt=1; ir_nt=1 + + # Strip everything before and after the underscore so that what remains + # is the problem size and threading parameter string, respectively. + psize=${th##*_}; thinfo=${th%%_*} + + # Identify each threading parameter and insert a space before it. + thsep=$(echo -e ${thinfo} | sed -e "s/\([jip][cr]\)/ \1/g" ) + + nt=1 + + for loopnum in ${thsep}; do + + # Given the current string, which identifies a loop and the + # number of ways of parallelism for that loop, strip out + # the ways and loop separately to identify each. + loop=$(echo -e ${loopnum} | sed -e "s/[0-9]//g" ) + num=$(echo -e ${loopnum} | sed -e "s/[a-z]//g" ) + + # Construct a string that we can evaluate to set the number + # of ways of parallelism for the current loop. + loop_nt_eq_num="${loop}_nt=${num}" + + # Update the total number of threads. + nt=$(expr ${nt} \* ${num}) + + # Evaluate the string to assign the ways to the variable. + eval ${loop_nt_eq_num} + + done + + echo "Switching to: jc${jc_nt} pc${pc_nt} ic${ic_nt} jr${jr_nt} ir${ir_nt} (nt = ${nt}) p_max${psize}" + + + for dt in ${test_dts}; do for im in ${test_impls}; do for op in ${test_ops}; do + # Find the threading suffix by probing the executable. + binname=$(ls ${exec_root}_${dt}${op}_${psize}_${im}_*.x) + suf_ext=${binname##*_} + suf=${suf_ext%%.*} + + #echo "found file: ${binname} with suffix ${suf}" + # Set the number of threads according to th. - if [ ${th} = "mt" ]; then + if [ "${suf}" = "1s" ] || [ "${suf}" = "2s" ]; then export BLIS_JC_NT=${jc_nt} + export BLIS_PC_NT=${pc_nt} export BLIS_IC_NT=${ic_nt} export BLIS_JR_NT=${jr_nt} export BLIS_IR_NT=${ir_nt} @@ -191,9 +154,11 @@ for th in ${threads}; do export MKL_NUM_THREADS=${nt} export nt_use=${nt} - # Unset GOMP_CPU_AFFINITY for OpenBLAS. + # Multithreaded OpenBLAS seems to have a problem running + # properly if GOMP_CPU_AFFINITY is set. So we temporarily + # unset it here if we are about to execute OpenBLAS, but + # otherwise restore it. if [ ${im} = "openblas" ]; then - unset GOMP_CPU_AFFINITY else export GOMP_CPU_AFFINITY="${GOMP_CPU_AFFINITYsave}" @@ -201,6 +166,7 @@ for th in ${threads}; do else export BLIS_JC_NT=1 + export BLIS_PC_NT=1 export BLIS_IC_NT=1 export BLIS_JR_NT=1 export BLIS_IR_NT=1 @@ -210,19 +176,21 @@ for th in ${threads}; do fi # Construct the name of the test executable. - exec_name="${exec_root}_${dt}${op}_${im}_${th}.x" + exec_name="${exec_root}_${dt}${op}_${psize}_${im}_${suf}.x" # Construct the name of the output file. - out_file="${out_root}_${th}_${dt}${op}_${im}.m" + out_file="${out_root}_${suf}_${dt}${op}_${im}.m" - echo "Running (nt = ${nt_use}) ./${exec_name} > ${out_file}" + #echo "Running (nt = ${nt_use}) ./${exec_name} > ${out_file}" + echo "Running ./${exec_name} > ${out_file}" # Run executable. - ./${exec_name} > ${out_file} + #./${exec_name} > ${out_file} - sleep 1 + sleep ${delay} done done done done + diff --git a/test/3m4m/test_gemm.c b/test/3m4m/test_gemm.c index 8ba53d63a..67c0a845d 100644 --- a/test/3m4m/test_gemm.c +++ b/test/3m4m/test_gemm.c @@ -44,7 +44,7 @@ int main( int argc, char** argv ) obj_t alpha, beta; dim_t m, n, k; dim_t p; - dim_t p_begin, p_end, p_inc; + dim_t p_begin, p_max, p_inc; int m_input, n_input, k_input; ind_t ind; num_t dt; @@ -70,7 +70,7 @@ int main( int argc, char** argv ) ind = IND; p_begin = P_BEGIN; - p_end = P_END; + p_max = P_MAX; p_inc = P_INC; m_input = -1; @@ -116,12 +116,9 @@ int main( int argc, char** argv ) // Begin with initializing the last entry to zero so that // matlab allocates space for the entire array once up-front. - for ( p = p_begin; p + p_inc <= p_end; p += p_inc ) ; -#ifdef BLIS - printf( "data_%s_%cgemm_%s_blis", THR_STR, dt_ch, STR ); -#else - printf( "data_%s_%cgemm_%s", THR_STR, dt_ch, STR ); -#endif + for ( p = p_begin; p + p_inc <= p_max; p += p_inc ) ; + + printf( "data_%s_%cgemm_%s", THR_STR, dt_ch, STR ); printf( "( %2lu, 1:4 ) = [ %4lu %4lu %4lu %7.2f ];\n", ( unsigned long )(p - p_begin + 1)/p_inc + 1, ( unsigned long )0, @@ -129,7 +126,7 @@ int main( int argc, char** argv ) ( unsigned long )0, 0.0 ); - for ( p = p_begin; p <= p_end; p += p_inc ) + for ( p = p_begin; p <= p_max; p += p_inc ) { if ( m_input < 0 ) m = p / ( dim_t )abs(m_input); @@ -157,7 +154,6 @@ int main( int argc, char** argv ) bli_setsc( (2.0/1.0), 0.0, &alpha ); bli_setsc( (1.0/1.0), 0.0, &beta ); - bli_copym( &c, &c_save ); #if 0 //def BLIS @@ -173,7 +169,6 @@ int main( int argc, char** argv ) dtime = bli_clock(); - #ifdef PRINT bli_printm( "a", &a, "%4.1f", "" ); bli_printm( "b", &b, "%4.1f", "" ); @@ -190,107 +185,106 @@ int main( int argc, char** argv ) #else - if ( bli_is_float( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width_after_trans( &a ); - f77_int nn = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldb = bli_obj_col_stride( &b ); - f77_int ldc = bli_obj_col_stride( &c ); - float* alphap = bli_obj_buffer( &alpha ); - float* ap = bli_obj_buffer( &a ); - float* bp = bli_obj_buffer( &b ); - float* betap = bli_obj_buffer( &beta ); - float* cp = bli_obj_buffer( &c ); + if ( bli_is_float( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + float* alphap = bli_obj_buffer( &alpha ); + float* ap = bli_obj_buffer( &a ); + float* bp = bli_obj_buffer( &b ); + float* betap = bli_obj_buffer( &beta ); + float* cp = bli_obj_buffer( &c ); - sgemm_( &f77_transa, - &f77_transb, - &mm, - &nn, - &kk, - alphap, - ap, &lda, - bp, &ldb, - betap, - cp, &ldc ); - } - else if ( bli_is_double( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width_after_trans( &a ); - f77_int nn = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldb = bli_obj_col_stride( &b ); - f77_int ldc = bli_obj_col_stride( &c ); - double* alphap = bli_obj_buffer( &alpha ); - double* ap = bli_obj_buffer( &a ); - double* bp = bli_obj_buffer( &b ); - double* betap = bli_obj_buffer( &beta ); - double* cp = bli_obj_buffer( &c ); + sgemm_( &f77_transa, + &f77_transb, + &mm, + &nn, + &kk, + alphap, + ap, &lda, + bp, &ldb, + betap, + cp, &ldc ); + } + else if ( bli_is_double( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + double* alphap = bli_obj_buffer( &alpha ); + double* ap = bli_obj_buffer( &a ); + double* bp = bli_obj_buffer( &b ); + double* betap = bli_obj_buffer( &beta ); + double* cp = bli_obj_buffer( &c ); - dgemm_( &f77_transa, - &f77_transb, - &mm, - &nn, - &kk, - alphap, - ap, &lda, - bp, &ldb, - betap, - cp, &ldc ); - } - else if ( bli_is_scomplex( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width_after_trans( &a ); - f77_int nn = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldb = bli_obj_col_stride( &b ); - f77_int ldc = bli_obj_col_stride( &c ); - scomplex* alphap = bli_obj_buffer( &alpha ); - scomplex* ap = bli_obj_buffer( &a ); - scomplex* bp = bli_obj_buffer( &b ); - scomplex* betap = bli_obj_buffer( &beta ); - scomplex* cp = bli_obj_buffer( &c ); + dgemm_( &f77_transa, + &f77_transb, + &mm, + &nn, + &kk, + alphap, + ap, &lda, + bp, &ldb, + betap, + cp, &ldc ); + } + else if ( bli_is_scomplex( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + scomplex* alphap = bli_obj_buffer( &alpha ); + scomplex* ap = bli_obj_buffer( &a ); + scomplex* bp = bli_obj_buffer( &b ); + scomplex* betap = bli_obj_buffer( &beta ); + scomplex* cp = bli_obj_buffer( &c ); - cgemm_( &f77_transa, - &f77_transb, - &mm, - &nn, - &kk, - alphap, - ap, &lda, - bp, &ldb, - betap, - cp, &ldc ); - } - else if ( bli_is_dcomplex( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width_after_trans( &a ); - f77_int nn = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldb = bli_obj_col_stride( &b ); - f77_int ldc = bli_obj_col_stride( &c ); - dcomplex* alphap = bli_obj_buffer( &alpha ); - dcomplex* ap = bli_obj_buffer( &a ); - dcomplex* bp = bli_obj_buffer( &b ); - dcomplex* betap = bli_obj_buffer( &beta ); - dcomplex* cp = bli_obj_buffer( &c ); + cgemm_( &f77_transa, + &f77_transb, + &mm, + &nn, + &kk, + alphap, + ap, &lda, + bp, &ldb, + betap, + cp, &ldc ); + } + else if ( bli_is_dcomplex( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + dcomplex* alphap = bli_obj_buffer( &alpha ); + dcomplex* ap = bli_obj_buffer( &a ); + dcomplex* bp = bli_obj_buffer( &b ); + dcomplex* betap = bli_obj_buffer( &beta ); + dcomplex* cp = bli_obj_buffer( &c ); - zgemm_( &f77_transa, - //zgemm3m_( &f77_transa, - &f77_transb, - &mm, - &nn, - &kk, - alphap, - ap, &lda, - bp, &ldb, - betap, - cp, &ldc ); - } + zgemm_( &f77_transa, + &f77_transb, + &mm, + &nn, + &kk, + alphap, + ap, &lda, + bp, &ldb, + betap, + cp, &ldc ); + } #endif #ifdef PRINT @@ -298,7 +292,6 @@ int main( int argc, char** argv ) exit(1); #endif - dtime_save = bli_clock_min_diff( dtime_save, dtime ); } @@ -306,11 +299,7 @@ int main( int argc, char** argv ) if ( bli_is_complex( dt ) ) gflops *= 4.0; -#ifdef BLIS - printf( "data_%s_%cgemm_%s_blis", THR_STR, dt_ch, STR ); -#else - printf( "data_%s_%cgemm_%s", THR_STR, dt_ch, STR ); -#endif + printf( "data_%s_%cgemm_%s", THR_STR, dt_ch, STR ); printf( "( %2lu, 1:4 ) = [ %4lu %4lu %4lu %7.2f ];\n", ( unsigned long )(p - p_begin + 1)/p_inc + 1, ( unsigned long )m, diff --git a/test/3m4m/test_hemm.c b/test/3m4m/test_hemm.c index bbf404379..46cd3708a 100644 --- a/test/3m4m/test_hemm.c +++ b/test/3m4m/test_hemm.c @@ -44,7 +44,7 @@ int main( int argc, char** argv ) obj_t alpha, beta; dim_t m, n; dim_t p; - dim_t p_begin, p_end, p_inc; + dim_t p_begin, p_max, p_inc; int m_input, n_input; ind_t ind; num_t dt; @@ -70,7 +70,7 @@ int main( int argc, char** argv ) ind = IND; p_begin = P_BEGIN; - p_end = P_END; + p_max = P_MAX; p_inc = P_INC; m_input = -1; @@ -115,19 +115,16 @@ int main( int argc, char** argv ) // Begin with initializing the last entry to zero so that // matlab allocates space for the entire array once up-front. - for ( p = p_begin; p + p_inc <= p_end; p += p_inc ) ; -#ifdef BLIS - printf( "data_%s_%chemm_%s_blis", THR_STR, dt_ch, STR ); -#else - printf( "data_%s_%chemm_%s", THR_STR, dt_ch, STR ); -#endif + for ( p = p_begin; p + p_inc <= p_max; p += p_inc ) ; + + printf( "data_%s_%chemm_%s", THR_STR, dt_ch, STR ); printf( "( %2lu, 1:3 ) = [ %4lu %4lu %7.2f ];\n", ( unsigned long )(p - p_begin + 1)/p_inc + 1, ( unsigned long )0, ( unsigned long )0, 0.0 ); - for ( p = p_begin; p <= p_end; p += p_inc ) + for ( p = p_begin; p <= p_max; p += p_inc ) { if ( m_input < 0 ) m = p / ( dim_t )abs(m_input); @@ -161,7 +158,6 @@ int main( int argc, char** argv ) bli_setsc( (2.0/1.0), 0.0, &alpha ); bli_setsc( (1.0/1.0), 0.0, &beta ); - bli_copym( &c, &c_save ); #if 0 //def BLIS @@ -177,7 +173,6 @@ int main( int argc, char** argv ) dtime = bli_clock(); - #ifdef PRINT bli_printm( "a", &a, "%4.1f", "" ); bli_printm( "b", &b, "%4.1f", "" ); @@ -195,98 +190,98 @@ int main( int argc, char** argv ) #else - if ( bli_is_float( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int nn = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldb = bli_obj_col_stride( &b ); - f77_int ldc = bli_obj_col_stride( &c ); - float* alphap = bli_obj_buffer( &alpha ); - float* ap = bli_obj_buffer( &a ); - float* bp = bli_obj_buffer( &b ); - float* betap = bli_obj_buffer( &beta ); - float* cp = bli_obj_buffer( &c ); + if ( bli_is_float( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + float* alphap = bli_obj_buffer( &alpha ); + float* ap = bli_obj_buffer( &a ); + float* bp = bli_obj_buffer( &b ); + float* betap = bli_obj_buffer( &beta ); + float* cp = bli_obj_buffer( &c ); - ssymm_( &f77_side, - &f77_uploa, - &mm, - &nn, - alphap, - ap, &lda, - bp, &ldb, - betap, - cp, &ldc ); - } - else if ( bli_is_double( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int nn = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldb = bli_obj_col_stride( &b ); - f77_int ldc = bli_obj_col_stride( &c ); - double* alphap = bli_obj_buffer( &alpha ); - double* ap = bli_obj_buffer( &a ); - double* bp = bli_obj_buffer( &b ); - double* betap = bli_obj_buffer( &beta ); - double* cp = bli_obj_buffer( &c ); + ssymm_( &f77_side, + &f77_uploa, + &mm, + &nn, + alphap, + ap, &lda, + bp, &ldb, + betap, + cp, &ldc ); + } + else if ( bli_is_double( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + double* alphap = bli_obj_buffer( &alpha ); + double* ap = bli_obj_buffer( &a ); + double* bp = bli_obj_buffer( &b ); + double* betap = bli_obj_buffer( &beta ); + double* cp = bli_obj_buffer( &c ); - dsymm_( &f77_side, - &f77_uploa, - &mm, - &nn, - alphap, - ap, &lda, - bp, &ldb, - betap, - cp, &ldc ); - } - else if ( bli_is_scomplex( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int nn = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldb = bli_obj_col_stride( &b ); - f77_int ldc = bli_obj_col_stride( &c ); - scomplex* alphap = bli_obj_buffer( &alpha ); - scomplex* ap = bli_obj_buffer( &a ); - scomplex* bp = bli_obj_buffer( &b ); - scomplex* betap = bli_obj_buffer( &beta ); - scomplex* cp = bli_obj_buffer( &c ); + dsymm_( &f77_side, + &f77_uploa, + &mm, + &nn, + alphap, + ap, &lda, + bp, &ldb, + betap, + cp, &ldc ); + } + else if ( bli_is_scomplex( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + scomplex* alphap = bli_obj_buffer( &alpha ); + scomplex* ap = bli_obj_buffer( &a ); + scomplex* bp = bli_obj_buffer( &b ); + scomplex* betap = bli_obj_buffer( &beta ); + scomplex* cp = bli_obj_buffer( &c ); - chemm_( &f77_side, - &f77_uploa, - &mm, - &nn, - alphap, - ap, &lda, - bp, &ldb, - betap, - cp, &ldc ); - } - else if ( bli_is_dcomplex( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int nn = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldb = bli_obj_col_stride( &b ); - f77_int ldc = bli_obj_col_stride( &c ); - dcomplex* alphap = bli_obj_buffer( &alpha ); - dcomplex* ap = bli_obj_buffer( &a ); - dcomplex* bp = bli_obj_buffer( &b ); - dcomplex* betap = bli_obj_buffer( &beta ); - dcomplex* cp = bli_obj_buffer( &c ); + chemm_( &f77_side, + &f77_uploa, + &mm, + &nn, + alphap, + ap, &lda, + bp, &ldb, + betap, + cp, &ldc ); + } + else if ( bli_is_dcomplex( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + dcomplex* alphap = bli_obj_buffer( &alpha ); + dcomplex* ap = bli_obj_buffer( &a ); + dcomplex* bp = bli_obj_buffer( &b ); + dcomplex* betap = bli_obj_buffer( &beta ); + dcomplex* cp = bli_obj_buffer( &c ); - zhemm_( &f77_side, - &f77_uploa, - &mm, - &nn, - alphap, - ap, &lda, - bp, &ldb, - betap, - cp, &ldc ); - } + zhemm_( &f77_side, + &f77_uploa, + &mm, + &nn, + alphap, + ap, &lda, + bp, &ldb, + betap, + cp, &ldc ); + } #endif #ifdef PRINT @@ -294,7 +289,6 @@ int main( int argc, char** argv ) exit(1); #endif - dtime_save = bli_clock_min_diff( dtime_save, dtime ); } @@ -305,11 +299,7 @@ int main( int argc, char** argv ) if ( bli_is_complex( dt ) ) gflops *= 4.0; -#ifdef BLIS - printf( "data_%s_%chemm_%s_blis", THR_STR, dt_ch, STR ); -#else - printf( "data_%s_%chemm_%s", THR_STR, dt_ch, STR ); -#endif + printf( "data_%s_%chemm_%s", THR_STR, dt_ch, STR ); printf( "( %2lu, 1:3 ) = [ %4lu %4lu %7.2f ];\n", ( unsigned long )(p - p_begin + 1)/p_inc + 1, ( unsigned long )m, diff --git a/test/3m4m/test_herk.c b/test/3m4m/test_herk.c index 1626bb6fa..686a15b6c 100644 --- a/test/3m4m/test_herk.c +++ b/test/3m4m/test_herk.c @@ -46,7 +46,7 @@ int main( int argc, char** argv ) obj_t alpha, beta; dim_t m, k; dim_t p; - dim_t p_begin, p_end, p_inc; + dim_t p_begin, p_max, p_inc; int m_input, k_input; ind_t ind; num_t dt, dt_real; @@ -73,7 +73,7 @@ int main( int argc, char** argv ) ind = IND; p_begin = P_BEGIN; - p_end = P_END; + p_max = P_MAX; p_inc = P_INC; m_input = -1; @@ -118,19 +118,16 @@ int main( int argc, char** argv ) // Begin with initializing the last entry to zero so that // matlab allocates space for the entire array once up-front. - for ( p = p_begin; p + p_inc <= p_end; p += p_inc ) ; -#ifdef BLIS - printf( "data_%s_%cherk_%s_blis", THR_STR, dt_ch, STR ); -#else - printf( "data_%s_%cherk_%s", THR_STR, dt_ch, STR ); -#endif + for ( p = p_begin; p + p_inc <= p_max; p += p_inc ) ; + + printf( "data_%s_%cherk_%s", THR_STR, dt_ch, STR ); printf( "( %2lu, 1:3 ) = [ %4lu %4lu %7.2f ];\n", ( unsigned long )(p - p_begin + 1)/p_inc + 1, ( unsigned long )0, ( unsigned long )0, 0.0 ); - for ( p = p_begin; p <= p_end; p += p_inc ) + for ( p = p_begin; p <= p_max; p += p_inc ) { if ( m_input < 0 ) m = p / ( dim_t )abs(m_input); @@ -162,7 +159,6 @@ int main( int argc, char** argv ) bli_setsc( (2.0/1.0), 0.0, &alpha ); bli_setsc( (1.0/1.0), 0.0, &beta ); - bli_copym( &c, &c_save ); #if 0 //def BLIS @@ -176,10 +172,8 @@ int main( int argc, char** argv ) { bli_copym( &c_save, &c ); - dtime = bli_clock(); - #ifdef PRINT bli_printm( "a", &a, "%4.1f", "" ); bli_printm( "c", &c, "%4.1f", "" ); @@ -194,86 +188,86 @@ int main( int argc, char** argv ) #else - if ( bli_is_float( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width_after_trans( &a ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - float* alphap = bli_obj_buffer( &alpha ); - float* ap = bli_obj_buffer( &a ); - float* betap = bli_obj_buffer( &beta ); - float* cp = bli_obj_buffer( &c ); + if ( bli_is_float( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); + float* alphap = bli_obj_buffer( &alpha ); + float* ap = bli_obj_buffer( &a ); + float* betap = bli_obj_buffer( &beta ); + float* cp = bli_obj_buffer( &c ); - ssyrk_( &f77_uploc, - &f77_transa, - &mm, - &kk, - alphap, - ap, &lda, - betap, - cp, &ldc ); - } - else if ( bli_is_double( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width_after_trans( &a ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - double* alphap = bli_obj_buffer( &alpha ); - double* ap = bli_obj_buffer( &a ); - double* betap = bli_obj_buffer( &beta ); - double* cp = bli_obj_buffer( &c ); + ssyrk_( &f77_uploc, + &f77_transa, + &mm, + &kk, + alphap, + ap, &lda, + betap, + cp, &ldc ); + } + else if ( bli_is_double( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); + double* alphap = bli_obj_buffer( &alpha ); + double* ap = bli_obj_buffer( &a ); + double* betap = bli_obj_buffer( &beta ); + double* cp = bli_obj_buffer( &c ); - dsyrk_( &f77_uploc, - &f77_transa, - &mm, - &kk, - alphap, - ap, &lda, - betap, - cp, &ldc ); - } - else if ( bli_is_scomplex( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width_after_trans( &a ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - float* alphap = bli_obj_buffer( &alpha ); - scomplex* ap = bli_obj_buffer( &a ); - float* betap = bli_obj_buffer( &beta ); - scomplex* cp = bli_obj_buffer( &c ); + dsyrk_( &f77_uploc, + &f77_transa, + &mm, + &kk, + alphap, + ap, &lda, + betap, + cp, &ldc ); + } + else if ( bli_is_scomplex( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); + float* alphap = bli_obj_buffer( &alpha ); + scomplex* ap = bli_obj_buffer( &a ); + float* betap = bli_obj_buffer( &beta ); + scomplex* cp = bli_obj_buffer( &c ); - cherk_( &f77_uploc, - &f77_transa, - &mm, - &kk, - alphap, - ap, &lda, - betap, - cp, &ldc ); - } - else if ( bli_is_dcomplex( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width_after_trans( &a ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - double* alphap = bli_obj_buffer( &alpha ); - dcomplex* ap = bli_obj_buffer( &a ); - double* betap = bli_obj_buffer( &beta ); - dcomplex* cp = bli_obj_buffer( &c ); + cherk_( &f77_uploc, + &f77_transa, + &mm, + &kk, + alphap, + ap, &lda, + betap, + cp, &ldc ); + } + else if ( bli_is_dcomplex( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); + double* alphap = bli_obj_buffer( &alpha ); + dcomplex* ap = bli_obj_buffer( &a ); + double* betap = bli_obj_buffer( &beta ); + dcomplex* cp = bli_obj_buffer( &c ); - zherk_( &f77_uploc, - &f77_transa, - &mm, - &kk, - alphap, - ap, &lda, - betap, - cp, &ldc ); - } + zherk_( &f77_uploc, + &f77_transa, + &mm, + &kk, + alphap, + ap, &lda, + betap, + cp, &ldc ); + } #endif #ifdef PRINT @@ -281,7 +275,6 @@ int main( int argc, char** argv ) exit(1); #endif - dtime_save = bli_clock_min_diff( dtime_save, dtime ); } @@ -289,11 +282,7 @@ int main( int argc, char** argv ) if ( bli_is_complex( dt ) ) gflops *= 4.0; -#ifdef BLIS - printf( "data_%s_%cherk_%s_blis", THR_STR, dt_ch, STR ); -#else - printf( "data_%s_%cherk_%s", THR_STR, dt_ch, STR ); -#endif + printf( "data_%s_%cherk_%s", THR_STR, dt_ch, STR ); printf( "( %2lu, 1:3 ) = [ %4lu %4lu %7.2f ];\n", ( unsigned long )(p - p_begin + 1)/p_inc + 1, ( unsigned long )m, diff --git a/test/3m4m/test_trmm.c b/test/3m4m/test_trmm.c index 20bfa11c0..fdef053ed 100644 --- a/test/3m4m/test_trmm.c +++ b/test/3m4m/test_trmm.c @@ -46,7 +46,7 @@ int main( int argc, char** argv ) obj_t alpha; dim_t m, n; dim_t p; - dim_t p_begin, p_end, p_inc; + dim_t p_begin, p_max, p_inc; int m_input, n_input; ind_t ind; num_t dt; @@ -76,7 +76,7 @@ int main( int argc, char** argv ) ind = IND; p_begin = P_BEGIN; - p_end = P_END; + p_max = P_MAX; p_inc = P_INC; m_input = -1; @@ -133,19 +133,16 @@ int main( int argc, char** argv ) // Begin with initializing the last entry to zero so that // matlab allocates space for the entire array once up-front. - for ( p = p_begin; p + p_inc <= p_end; p += p_inc ) ; -#ifdef BLIS - printf( "data_%s_%ctrmm_%s_blis", THR_STR, dt_ch, STR ); -#else - printf( "data_%s_%ctrmm_%s", THR_STR, dt_ch, STR ); -#endif + for ( p = p_begin; p + p_inc <= p_max; p += p_inc ) ; + + printf( "data_%s_%ctrmm_%s", THR_STR, dt_ch, STR ); printf( "( %2lu, 1:3 ) = [ %4lu %4lu %7.2f ];\n", ( unsigned long )(p - p_begin + 1)/p_inc + 1, ( unsigned long )0, ( unsigned long )0, 0.0 ); - for ( p = p_begin; p <= p_end; p += p_inc ) + for ( p = p_begin; p <= p_max; p += p_inc ) { if ( m_input < 0 ) m = p / ( dim_t )abs(m_input); @@ -188,10 +185,8 @@ int main( int argc, char** argv ) { bli_copym( &c_save, &c ); - dtime = bli_clock(); - #ifdef PRINT bli_printm( "a", &a, "%4.1f", "" ); bli_printm( "c", &c, "%4.1f", "" ); @@ -206,86 +201,86 @@ int main( int argc, char** argv ) #else - if ( bli_is_float( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - float* alphap = bli_obj_buffer( &alpha ); - float* ap = bli_obj_buffer( &a ); - float* cp = bli_obj_buffer( &c ); + if ( bli_is_float( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); + float* alphap = bli_obj_buffer( &alpha ); + float* ap = bli_obj_buffer( &a ); + float* cp = bli_obj_buffer( &c ); - strmm_( &f77_side, - &f77_uploa, - &f77_transa, - &f77_diaga, - &mm, - &kk, - alphap, - ap, &lda, - cp, &ldc ); - } - else if ( bli_is_double( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - double* alphap = bli_obj_buffer( &alpha ); - double* ap = bli_obj_buffer( &a ); - double* cp = bli_obj_buffer( &c ); + strmm_( &f77_side, + &f77_uploa, + &f77_transa, + &f77_diaga, + &mm, + &kk, + alphap, + ap, &lda, + cp, &ldc ); + } + else if ( bli_is_double( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); + double* alphap = bli_obj_buffer( &alpha ); + double* ap = bli_obj_buffer( &a ); + double* cp = bli_obj_buffer( &c ); - dtrmm_( &f77_side, - &f77_uploa, - &f77_transa, - &f77_diaga, - &mm, - &kk, - alphap, - ap, &lda, - cp, &ldc ); - } - else if ( bli_is_scomplex( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - scomplex* alphap = bli_obj_buffer( &alpha ); - scomplex* ap = bli_obj_buffer( &a ); - scomplex* cp = bli_obj_buffer( &c ); + dtrmm_( &f77_side, + &f77_uploa, + &f77_transa, + &f77_diaga, + &mm, + &kk, + alphap, + ap, &lda, + cp, &ldc ); + } + else if ( bli_is_scomplex( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); + scomplex* alphap = bli_obj_buffer( &alpha ); + scomplex* ap = bli_obj_buffer( &a ); + scomplex* cp = bli_obj_buffer( &c ); - ctrmm_( &f77_side, - &f77_uploa, - &f77_transa, - &f77_diaga, - &mm, - &kk, - alphap, - ap, &lda, - cp, &ldc ); - } - else if ( bli_is_dcomplex( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - dcomplex* alphap = bli_obj_buffer( &alpha ); - dcomplex* ap = bli_obj_buffer( &a ); - dcomplex* cp = bli_obj_buffer( &c ); + ctrmm_( &f77_side, + &f77_uploa, + &f77_transa, + &f77_diaga, + &mm, + &kk, + alphap, + ap, &lda, + cp, &ldc ); + } + else if ( bli_is_dcomplex( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); + dcomplex* alphap = bli_obj_buffer( &alpha ); + dcomplex* ap = bli_obj_buffer( &a ); + dcomplex* cp = bli_obj_buffer( &c ); - ztrmm_( &f77_side, - &f77_uploa, - &f77_transa, - &f77_diaga, - &mm, - &kk, - alphap, - ap, &lda, - cp, &ldc ); - } + ztrmm_( &f77_side, + &f77_uploa, + &f77_transa, + &f77_diaga, + &mm, + &kk, + alphap, + ap, &lda, + cp, &ldc ); + } #endif #ifdef PRINT @@ -293,7 +288,6 @@ int main( int argc, char** argv ) exit(1); #endif - dtime_save = bli_clock_min_diff( dtime_save, dtime ); } @@ -304,11 +298,7 @@ int main( int argc, char** argv ) if ( bli_is_complex( dt ) ) gflops *= 4.0; -#ifdef BLIS - printf( "data_%s_%ctrmm_%s_blis", THR_STR, dt_ch, STR ); -#else - printf( "data_%s_%ctrmm_%s", THR_STR, dt_ch, STR ); -#endif + printf( "data_%s_%ctrmm_%s", THR_STR, dt_ch, STR ); printf( "( %2lu, 1:3 ) = [ %4lu %4lu %7.2f ];\n", ( unsigned long )(p - p_begin + 1)/p_inc + 1, ( unsigned long )m, diff --git a/test/3m4m/test_trsm.c b/test/3m4m/test_trsm.c index a696a87a6..6d834f0a9 100644 --- a/test/3m4m/test_trsm.c +++ b/test/3m4m/test_trsm.c @@ -46,7 +46,7 @@ int main( int argc, char** argv ) obj_t alpha; dim_t m, n; dim_t p; - dim_t p_begin, p_end, p_inc; + dim_t p_begin, p_max, p_inc; int m_input, n_input; ind_t ind; num_t dt; @@ -76,7 +76,7 @@ int main( int argc, char** argv ) ind = IND; p_begin = P_BEGIN; - p_end = P_END; + p_max = P_MAX; p_inc = P_INC; m_input = -1; @@ -133,19 +133,16 @@ int main( int argc, char** argv ) // Begin with initializing the last entry to zero so that // matlab allocates space for the entire array once up-front. - for ( p = p_begin; p + p_inc <= p_end; p += p_inc ) ; -#ifdef BLIS - printf( "data_%s_%ctrsm_%s_blis", THR_STR, dt_ch, STR ); -#else - printf( "data_%s_%ctrsm_%s", THR_STR, dt_ch, STR ); -#endif + for ( p = p_begin; p + p_inc <= p_max; p += p_inc ) ; + + printf( "data_%s_%ctrsm_%s", THR_STR, dt_ch, STR ); printf( "( %2lu, 1:3 ) = [ %4lu %4lu %7.2f ];\n", ( unsigned long )(p - p_begin + 1)/p_inc + 1, ( unsigned long )0, ( unsigned long )0, 0.0 ); - for ( p = p_begin; p <= p_end; p += p_inc ) + for ( p = p_begin; p <= p_max; p += p_inc ) { if ( m_input < 0 ) m = p / ( dim_t )abs(m_input); @@ -192,10 +189,8 @@ int main( int argc, char** argv ) { bli_copym( &c_save, &c ); - dtime = bli_clock(); - #ifdef PRINT bli_printm( "a", &a, "%4.1f", "" ); bli_printm( "c", &c, "%4.1f", "" ); @@ -210,86 +205,86 @@ int main( int argc, char** argv ) #else - if ( bli_is_float( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - float* alphap = bli_obj_buffer( &alpha ); - float* ap = bli_obj_buffer( &a ); - float* cp = bli_obj_buffer( &c ); + if ( bli_is_float( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); + float* alphap = bli_obj_buffer( &alpha ); + float* ap = bli_obj_buffer( &a ); + float* cp = bli_obj_buffer( &c ); - strsm_( &f77_side, - &f77_uploa, - &f77_transa, - &f77_diaga, - &mm, - &kk, - alphap, - ap, &lda, - cp, &ldc ); - } - else if ( bli_is_double( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - double* alphap = bli_obj_buffer( &alpha ); - double* ap = bli_obj_buffer( &a ); - double* cp = bli_obj_buffer( &c ); + strsm_( &f77_side, + &f77_uploa, + &f77_transa, + &f77_diaga, + &mm, + &kk, + alphap, + ap, &lda, + cp, &ldc ); + } + else if ( bli_is_double( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); + double* alphap = bli_obj_buffer( &alpha ); + double* ap = bli_obj_buffer( &a ); + double* cp = bli_obj_buffer( &c ); - dtrsm_( &f77_side, - &f77_uploa, - &f77_transa, - &f77_diaga, - &mm, - &kk, - alphap, - ap, &lda, - cp, &ldc ); - } - else if ( bli_is_scomplex( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - scomplex* alphap = bli_obj_buffer( &alpha ); - scomplex* ap = bli_obj_buffer( &a ); - scomplex* cp = bli_obj_buffer( &c ); + dtrsm_( &f77_side, + &f77_uploa, + &f77_transa, + &f77_diaga, + &mm, + &kk, + alphap, + ap, &lda, + cp, &ldc ); + } + else if ( bli_is_scomplex( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); + scomplex* alphap = bli_obj_buffer( &alpha ); + scomplex* ap = bli_obj_buffer( &a ); + scomplex* cp = bli_obj_buffer( &c ); - ctrsm_( &f77_side, - &f77_uploa, - &f77_transa, - &f77_diaga, - &mm, - &kk, - alphap, - ap, &lda, - cp, &ldc ); - } - else if ( bli_is_dcomplex( dt ) ) - { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - dcomplex* alphap = bli_obj_buffer( &alpha ); - dcomplex* ap = bli_obj_buffer( &a ); - dcomplex* cp = bli_obj_buffer( &c ); + ctrsm_( &f77_side, + &f77_uploa, + &f77_transa, + &f77_diaga, + &mm, + &kk, + alphap, + ap, &lda, + cp, &ldc ); + } + else if ( bli_is_dcomplex( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); + dcomplex* alphap = bli_obj_buffer( &alpha ); + dcomplex* ap = bli_obj_buffer( &a ); + dcomplex* cp = bli_obj_buffer( &c ); - ztrsm_( &f77_side, - &f77_uploa, - &f77_transa, - &f77_diaga, - &mm, - &kk, - alphap, - ap, &lda, - cp, &ldc ); - } + ztrsm_( &f77_side, + &f77_uploa, + &f77_transa, + &f77_diaga, + &mm, + &kk, + alphap, + ap, &lda, + cp, &ldc ); + } #endif #ifdef PRINT @@ -297,7 +292,6 @@ int main( int argc, char** argv ) exit(1); #endif - dtime_save = bli_clock_min_diff( dtime_save, dtime ); } @@ -308,11 +302,7 @@ int main( int argc, char** argv ) if ( bli_is_complex( dt ) ) gflops *= 4.0; -#ifdef BLIS - printf( "data_%s_%ctrsm_%s_blis", THR_STR, dt_ch, STR ); -#else - printf( "data_%s_%ctrsm_%s", THR_STR, dt_ch, STR ); -#endif + printf( "data_%s_%ctrsm_%s", THR_STR, dt_ch, STR ); printf( "( %2lu, 1:3 ) = [ %4lu %4lu %7.2f ];\n", ( unsigned long )(p - p_begin + 1)/p_inc + 1, ( unsigned long )m, From 09ed72c5a7da92288de16e2743c8361fa1f73c45 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Thu, 7 Mar 2019 01:04:05 +0000 Subject: [PATCH 014/109] Very minor updates to test/3m4m for ul252. Details: - Very minor updates to the newly revamped test/3m4m drivers when used on a Xeon Platinum (SkylakeX). --- test/3m4m/Makefile | 6 +++--- test/3m4m/runme.sh | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/test/3m4m/Makefile b/test/3m4m/Makefile index 3136dfa02..48dc9433b 100644 --- a/test/3m4m/Makefile +++ b/test/3m4m/Makefile @@ -135,9 +135,9 @@ VENDORP_LIB := $(MKLP_LIB) # # Single core (single-threaded) -PS_BEGIN := 40 -PS_MAX := 2000 -PS_INC := 40 +PS_BEGIN := 48 +PS_MAX := 2400 +PS_INC := 48 # Single-socket (multithreaded) P1_BEGIN := 120 diff --git a/test/3m4m/runme.sh b/test/3m4m/runme.sh index f7f33a772..433f4d3bc 100755 --- a/test/3m4m/runme.sh +++ b/test/3m4m/runme.sh @@ -8,8 +8,8 @@ delay=0.1 #sys="blis" #sys="stampede2" #sys="lonestar5" -#sys="ul252" -sys="ul264" +sys="ul252" +#sys="ul264" # Bind threads to processors. #export OMP_PROC_BIND=true @@ -46,7 +46,8 @@ elif [ ${sys} = "ul252" ]; then export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/field/intel/mkl/lib/intel64" export GOMP_CPU_AFFINITY="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51" - threads="jc2ic13jr1_6000 + threads="jc1ic1jr1_2400 + jc2ic13jr1_6000 jc4ic13jr1_8000" elif [ ${sys} = "ul264" ]; then @@ -64,7 +65,6 @@ test_dts="d s z c" # Operations to test. test_ops="gemm hemm herk trmm trsm" -test_ops="gemm" # Implementations to test. impls="all" @@ -185,7 +185,7 @@ for th in ${threads}; do echo "Running ./${exec_name} > ${out_file}" # Run executable. - #./${exec_name} > ${out_file} + ./${exec_name} > ${out_file} sleep ${delay} From 2ebe4aafe597073409b63aab6942bd5693bccbdd Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Thu, 7 Mar 2019 16:26:12 -0600 Subject: [PATCH 015/109] More minor updates and edits to test/3m4m. Details: - Further updates to matlab scripts, mostly for compatibility with GNU Octave. - More tweaks to runme.sh. - Updates to runme.m that allow copy-paste into matlab interactive session to generate graphs. --- test/3m4m/matlab/plot_l3_perf.m | 98 ++++++++++++++++++------------- test/3m4m/matlab/plot_panel_4x5.m | 20 +++---- test/3m4m/matlab/runme.m | 22 +++++-- test/3m4m/runme.sh | 17 +++--- 4 files changed, 92 insertions(+), 65 deletions(-) diff --git a/test/3m4m/matlab/plot_l3_perf.m b/test/3m4m/matlab/plot_l3_perf.m index 63ec55660..8717fb5eb 100644 --- a/test/3m4m/matlab/plot_l3_perf.m +++ b/test/3m4m/matlab/plot_l3_perf.m @@ -30,8 +30,13 @@ max_perf_core = (flopspercycle * cfreq) * 1; % Adjust title for real domain hemm and herk. title_opname = opname; if opname(1) == 's' || opname(1) == 'd' - if strcmp( extractAfter( opname, 1 ), 'hemm' ) || ... - strcmp( extractAfter( opname, 1 ), 'herk' ) +% if strcmp( extractAfter( opname, 1 ), 'hemm' ) || ... +% strcmp( extractAfter( opname, 1 ), 'herk' ) +% title_opname(2:3) = 'sy'; +% end + opname_u = opname; opname_u(1) = '_'; + if strcmp( opname_u, '_hemm' ) || ... + strcmp( opname_u, '_herk' ) title_opname(2:3) = 'sy'; end end @@ -99,52 +104,61 @@ vend_ln = line( x_axis( :, 1 ), data_vend( :, flopscol ) / nth, ... xlim( ax1, [x_begin x_end] ); ylim( ax1, [y_begin y_end] ); -if x_end == 10000 || x_end == 8000 || x_end == 6000 +if 6000 <= x_end && x_end < 10000 x_tick2 = x_end - 2000; x_tick1 = x_tick2/2; xticks( ax1, [ x_tick1 x_tick2 ] ); +elseif 4000 <= x_end && x_end < 6000 + x_tick2 = x_end - 1000; + x_tick1 = x_tick2/2; + xticks( ax1, [ x_tick1 x_tick2 ] ); +elseif 2000 <= x_end && x_end < 3000 + x_tick2 = x_end - 400; + x_tick1 = x_tick2/2; + xticks( ax1, [ x_tick1 x_tick2 ] ); end -if rows == 4 && cols == 5 && ... - theid == 3 - if nth == 1 - leg = legend( ... - [ ... - blis_ln ... - open_ln ... - vend_ln ... - ], ... - blis_legend, ... - open_legend, ... - vend_legend, ... - 'Location', legend_loc ); - set( leg,'Box','off' ); - set( leg,'Color','none' ); - set( leg,'FontSize',fontsize-3 ); - set( leg,'Units','inches' ); - %set( leg,'Position',[3.15 10.2 0.7 0.3 ] ); % 1600 1200 - %set( leg,'Position',[4.20 12.7 0.7 0.3 ] ); % (0,0) - set( leg,'Position',[11.20 12.7 0.7 0.3 ] ); % (0,2) - else - leg = legend( ... - [ ... - blis_ln ... - open_ln ... - vend_ln ... - ], ... - blis_legend, ... - open_legend, ... - vend_legend, ... - 'Location', legend_loc ); - set( leg,'Box','off' ); - set( leg,'Color','none' ); - set( leg,'FontSize',fontsize-3 ); - set( leg,'Units','inches' ); - %set( leg,'Position',[3.15 10.2 0.7 0.3 ] ); % 1600 1200 - %set( leg,'Position',[17.60 14.30 0.7 0.3 ] ); % (0,4) - set( leg,'Position',[11.20 12.7 0.7 0.3 ] ); % (0,2) - end +if rows == 4 && cols == 5 + if nth == 1 && theid == 3 + leg = legend( ... + [ ... + blis_ln ... + open_ln ... + vend_ln ... + ], ... + blis_legend, ... + open_legend, ... + vend_legend, ... + 'Location', legend_loc ); + set( leg,'Box','off' ); + set( leg,'Color','none' ); + set( leg,'FontSize',fontsize-3 ); + set( leg,'Units','inches' ); + set( leg,'Position',[11.20 12.75 0.7 0.3 ] ); % (0,2br) + elseif nth > 1 && theid == 4 + leg = legend( ... + [ ... + blis_ln ... + open_ln ... + vend_ln ... + ], ... + blis_legend, ... + open_legend, ... + vend_legend, ... + 'Location', legend_loc ); + set( leg,'Box','off' ); + set( leg,'Color','none' ); + set( leg,'FontSize',fontsize-3 ); + set( leg,'Units','inches' ); + %set( leg,'Position',[7.70 12.75 0.7 0.3 ] ); % (0,1br) + %set( leg,'Position',[10.47 14.28 0.7 0.3 ] ); % (0,2tl) + set( leg,'Position',[11.20 12.75 0.7 0.3 ] ); % (0,2br) + %set( leg,'Position',[13.95 14.28 0.7 0.3 ] ); % (0,3tl) + %set( leg,'Position',[14.70 12.75 0.7 0.3 ] ); % (0,3br) + %set( leg,'Position',[17.45 14.28 0.7 0.3 ] ); % (0,4tl) + %set( leg,'Position',[18.22 12.75 0.7 0.3 ] ); % (0,4br) + end end set( ax1,'FontSize',fontsize ); diff --git a/test/3m4m/matlab/plot_panel_4x5.m b/test/3m4m/matlab/plot_panel_4x5.m index 740ca5666..40e212a68 100644 --- a/test/3m4m/matlab/plot_panel_4x5.m +++ b/test/3m4m/matlab/plot_panel_4x5.m @@ -32,20 +32,20 @@ ops( 5, : ) = 'trsm'; opnames = gen_opnames( ops, dts ); n_opnames = size( opnames, 1 ); -%fig = figure; -%fig = figure('Position', [100, 100, 1600, 1200]); fig = figure('Position', [100, 100, 2000, 1500]); orient( fig, 'portrait' ); -%set(gcf,'Position',[0 0 2000 900]); set(gcf,'PaperUnits', 'inches'); -%set(gcf,'PaperSize', [16 12.4]); -%set(gcf,'PaperPosition', [0 0 16 12.4]); -set(gcf,'PaperSize', [11 15.0]); -set(gcf,'PaperPosition', [0 0 11 15.0]); -%set(gcf,'PaperPositionMode','auto'); -set(gcf,'PaperPositionMode','manual'); +if 1 == 1 % matlab + set(gcf,'PaperSize', [11 15.0]); + set(gcf,'PaperPosition', [0 0 11 15.0]); + set(gcf,'PaperPositionMode','manual'); +else % octave 4.x + set(gcf,'PaperSize', [15 19.0]); + set(gcf,'PaperPositionMode','auto'); +end set(gcf,'PaperOrientation','landscape'); + % Iterate over the list of datatype-specific operation names. for opi = 1:n_opnames %for opi = 1:1 @@ -94,7 +94,7 @@ for opi = 1:n_opnames end % Construct the name of the file to which we will output the graph. -outfile = sprintf( 'l3_perf_%s_nt%d', arch_str, nth ); +outfile = sprintf( 'l3_perf_%s_nt%d.pdf', arch_str, nth ); % Output the graph to pdf format. %print(gcf, 'gemm_md','-fillpage','-dpdf'); diff --git a/test/3m4m/matlab/runme.m b/test/3m4m/matlab/runme.m index 2a34a2233..2da7d7442 100644 --- a/test/3m4m/matlab/runme.m +++ b/test/3m4m/matlab/runme.m @@ -1,9 +1,19 @@ % tx2 -plot_panel_4x5(2.2,8,1, 'st','../results/tx2/st', 'tx2', 'ARMPL'); close; clear all; -plot_panel_4x5(2.2,8,28,'1s','../results/tx2/jc4ic7','tx2_jc4ic7','ARMPL'); close; clear all; -plot_panel_4x5(2.2,8,56,'2s','../results/tx2/jc8ic7','tx2_jc8ic7','ARMPL'); close; clear all; +plot_panel_4x5(2.20,8,1, 'st','../results/tx2/20190205/st', 'tx2', 'ARMPL'); close; clear all; +plot_panel_4x5(2.20,8,28,'1s','../results/tx2/20190205/jc4ic7','tx2_jc4ic7','ARMPL'); close; clear all; +plot_panel_4x5(2.20,8,56,'2s','../results/tx2/20190205/jc8ic7','tx2_jc8ic7','ARMPL'); close; clear all; % skx -plot_panel_4x5(2.0,32,1, 'st','../results/skx/st/20190218', 'skx', 'MKL'); close; clear all; -plot_panel_4x5(2.0,32,26,'1s','../results/skx/jc2ic13/20190218','skx_jc2ic13','MKL'); close; clear all; -plot_panel_4x5(2.0,32,52,'2s','../results/skx/jc4ic13/20190218','skx_jc4ic13','MKL'); close; clear all; +plot_panel_4x5(2.00,32,1, 'st','../results/skx/20190306/st', 'skx', 'MKL'); close; clear all; +plot_panel_4x5(2.00,32,26,'1s','../results/skx/20190306/jc2ic13','skx_jc2ic13','MKL'); close; clear all; +plot_panel_4x5(2.00,32,52,'2s','../results/skx/20190306/jc4ic13','skx_jc4ic13','MKL'); close; clear all; + +% has +plot_panel_4x5(3.25,16,1, 'st','../results/has/20190206/st', 'has', 'MKL'); close; clear all; +plot_panel_4x5(3.00,16,12,'1s','../results/has/20190206/jc2ic3jr2','has_jc2ic3jr2','MKL'); close; clear all; +plot_panel_4x5(3.00,16,24,'2s','../results/has/20190206/jc4ic3jr2','has_jc4ic3jr2','MKL'); close; clear all; + +% epyc +plot_panel_4x5(3.00,8,1, 'st','../results/epyc/20190306/st', 'epyc', 'MKL'); close; clear all; +plot_panel_4x5(2.55,8,32,'1s','../results/epyc/20190306/jc1ic8jr4','epyc_jc1ic8jr4','MKL'); close; clear all; +plot_panel_4x5(2.55,8,64,'2s','../results/epyc/20190306/jc2ic8jr4','epyc_jc2ic8jr4','MKL'); close; clear all; diff --git a/test/3m4m/runme.sh b/test/3m4m/runme.sh index 433f4d3bc..aeed7d98b 100755 --- a/test/3m4m/runme.sh +++ b/test/3m4m/runme.sh @@ -5,10 +5,10 @@ exec_root="test" out_root="output" delay=0.1 -#sys="blis" +sys="blis" #sys="stampede2" #sys="lonestar5" -sys="ul252" +#sys="ul252" #sys="ul264" # Bind threads to processors. @@ -20,15 +20,16 @@ if [ ${sys} = "blis" ]; then export GOMP_CPU_AFFINITY="0 1 2 3" - threads="jc2ic2jr1_4000 - jc2ic2jr1_6000" + threads="jc1ic1jr1_2400 + jc2ic2jr1_4000" elif [ ${sys} = "stampede2" ]; then echo "Need to set GOMP_CPU_AFFINITY." exit 1 - threads="jc4ic6jr1_6000 + threads="jc1ic1jr1_2400 + jc4ic6jr1_6000 jc4ic12jr1_8000" elif [ ${sys} = "lonestar5" ]; then @@ -38,7 +39,8 @@ elif [ ${sys} = "lonestar5" ]; then # A hack to use libiomp5 with gcc. #export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/apps/intel/16.0.1.150/compilers_and_libraries_2016.1.150/linux/compiler/lib/intel64" - threads="jc2ic3jr2_6000 + threads="jc1ic1jr1_2400 + jc2ic3jr2_6000 jc4ic3jr2_8000" elif [ ${sys} = "ul252" ]; then @@ -55,7 +57,8 @@ elif [ ${sys} = "ul264" ]; then export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/field/intel/mkl/lib/intel64" export GOMP_CPU_AFFINITY="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63" - threads="jc1ic8jr4_6000 + threads="jc1ic1jr1_2400 + jc1ic8jr4_6000 jc2ic8jr4_8000" fi From da590746b022552b6eb7d9385b9b90f52f0b6f5c Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Thu, 7 Mar 2019 16:40:39 -0600 Subject: [PATCH 016/109] Renamed test/3m4m to test/3. Details: - Renamed '3m4m' directory to '3', which captures the directory nicely since it builds test drivers to test level-3 operations. - These test drivers ceased to be used to test the 3m and 4m (or even 1m) induced methods long ago, hence the name change. --- test/{3m4m => 3}/Makefile | 0 test/{3m4m => 3}/matlab/gen_opnames.m | 0 test/{3m4m => 3}/matlab/plot_l3_perf.m | 0 test/{3m4m => 3}/matlab/plot_panel_4x5.m | 0 test/{3m4m => 3}/matlab/runme.m | 0 test/{3m4m => 3}/runme.sh | 0 test/{3m4m => 3}/test_gemm.c | 0 test/{3m4m => 3}/test_hemm.c | 0 test/{3m4m => 3}/test_herk.c | 0 test/{3m4m => 3}/test_trmm.c | 0 test/{3m4m => 3}/test_trsm.c | 0 11 files changed, 0 insertions(+), 0 deletions(-) rename test/{3m4m => 3}/Makefile (100%) rename test/{3m4m => 3}/matlab/gen_opnames.m (100%) rename test/{3m4m => 3}/matlab/plot_l3_perf.m (100%) rename test/{3m4m => 3}/matlab/plot_panel_4x5.m (100%) rename test/{3m4m => 3}/matlab/runme.m (100%) rename test/{3m4m => 3}/runme.sh (100%) rename test/{3m4m => 3}/test_gemm.c (100%) rename test/{3m4m => 3}/test_hemm.c (100%) rename test/{3m4m => 3}/test_herk.c (100%) rename test/{3m4m => 3}/test_trmm.c (100%) rename test/{3m4m => 3}/test_trsm.c (100%) diff --git a/test/3m4m/Makefile b/test/3/Makefile similarity index 100% rename from test/3m4m/Makefile rename to test/3/Makefile diff --git a/test/3m4m/matlab/gen_opnames.m b/test/3/matlab/gen_opnames.m similarity index 100% rename from test/3m4m/matlab/gen_opnames.m rename to test/3/matlab/gen_opnames.m diff --git a/test/3m4m/matlab/plot_l3_perf.m b/test/3/matlab/plot_l3_perf.m similarity index 100% rename from test/3m4m/matlab/plot_l3_perf.m rename to test/3/matlab/plot_l3_perf.m diff --git a/test/3m4m/matlab/plot_panel_4x5.m b/test/3/matlab/plot_panel_4x5.m similarity index 100% rename from test/3m4m/matlab/plot_panel_4x5.m rename to test/3/matlab/plot_panel_4x5.m diff --git a/test/3m4m/matlab/runme.m b/test/3/matlab/runme.m similarity index 100% rename from test/3m4m/matlab/runme.m rename to test/3/matlab/runme.m diff --git a/test/3m4m/runme.sh b/test/3/runme.sh similarity index 100% rename from test/3m4m/runme.sh rename to test/3/runme.sh diff --git a/test/3m4m/test_gemm.c b/test/3/test_gemm.c similarity index 100% rename from test/3m4m/test_gemm.c rename to test/3/test_gemm.c diff --git a/test/3m4m/test_hemm.c b/test/3/test_hemm.c similarity index 100% rename from test/3m4m/test_hemm.c rename to test/3/test_hemm.c diff --git a/test/3m4m/test_herk.c b/test/3/test_herk.c similarity index 100% rename from test/3m4m/test_herk.c rename to test/3/test_herk.c diff --git a/test/3m4m/test_trmm.c b/test/3/test_trmm.c similarity index 100% rename from test/3m4m/test_trmm.c rename to test/3/test_trmm.c diff --git a/test/3m4m/test_trsm.c b/test/3/test_trsm.c similarity index 100% rename from test/3m4m/test_trsm.c rename to test/3/test_trsm.c From dcb0f50455292541912a089684b23311a8bc4278 Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Mon, 11 Mar 2019 19:05:32 -0500 Subject: [PATCH 017/109] Export functions without def file (#303) * Revert "restore bli_extern_defs exporting for now" This reverts commit 09fb07c350b2acee17645e8e9e1b8d829c73dca8. * Remove symbols not intended to be public * No need of def file anymore * Fix whitespace * No need of configure option * Remove export macro from definitions * Remove blas export macro from definitions --- build/bli_config.h.in | 20 ++++++- build/libblis-symbols.def | 57 ------------------- common.mk | 4 +- frame/0/bli_l0_check.c | 6 +- frame/0/bli_l0_oapi.c | 16 +++--- frame/0/bli_l0_tapi.c | 20 +++---- frame/0/copysc/bli_copysc.c | 4 +- frame/1/bli_l1v_check.c | 18 +++--- frame/1/bli_l1v_oapi.c | 20 +++---- frame/1/bli_l1v_tapi.c | 20 +++---- frame/1/other/packv/bli_packv_unb_var1.c | 2 +- frame/1/other/unpackv/bli_unpackv_unb_var1.c | 2 +- frame/1d/bli_l1d_check.c | 10 ++-- frame/1d/bli_l1d_oapi.c | 14 ++--- frame/1d/bli_l1d_tapi.c | 14 ++--- frame/1f/bli_l1f_oapi.c | 10 ++-- frame/1f/bli_l1f_tapi.c | 10 ++-- frame/1m/bli_l1m_check.c | 8 +-- frame/1m/bli_l1m_oapi.c | 12 ++-- frame/1m/bli_l1m_tapi.c | 14 ++--- frame/1m/bli_l1m_unb_var1.c | 10 ++-- frame/1m/packm/bli_packm_blk_var1.c | 2 +- frame/1m/packm/bli_packm_blk_var1_md.c | 4 +- frame/1m/packm/bli_packm_check.c | 4 +- frame/1m/packm/bli_packm_cxk.c | 2 +- frame/1m/packm/bli_packm_cxk_1er.c | 2 +- frame/1m/packm/bli_packm_cxk_3mis.c | 2 +- frame/1m/packm/bli_packm_cxk_4mi.c | 2 +- frame/1m/packm/bli_packm_cxk_rih.c | 2 +- frame/1m/packm/bli_packm_int.c | 2 +- frame/1m/packm/bli_packm_part.c | 6 +- frame/1m/packm/bli_packm_struc_cxk.c | 6 +- frame/1m/packm/bli_packm_struc_cxk_1er.c | 6 +- frame/1m/packm/bli_packm_struc_cxk_3mis.c | 6 +- frame/1m/packm/bli_packm_struc_cxk_4mi.c | 6 +- frame/1m/packm/bli_packm_struc_cxk_md.c | 6 +- frame/1m/packm/bli_packm_struc_cxk_rih.c | 6 +- frame/1m/packm/bli_packm_thrinfo.c | 4 +- frame/1m/packm/bli_packm_unb_var1.c | 2 +- frame/1m/unpackm/bli_unpackm_blk_var1.c | 4 +- frame/1m/unpackm/bli_unpackm_check.c | 2 +- frame/1m/unpackm/bli_unpackm_cxk.c | 2 +- frame/1m/unpackm/bli_unpackm_int.c | 2 +- frame/1m/unpackm/bli_unpackm_unb_var1.c | 4 +- frame/2/bli_l2_oapi.c | 12 ++-- frame/2/bli_l2_tapi.c | 14 ++--- frame/2/gemv/bli_gemv_unb_var1.c | 2 +- frame/2/gemv/bli_gemv_unb_var2.c | 2 +- frame/2/gemv/bli_gemv_unf_var1.c | 2 +- frame/2/gemv/bli_gemv_unf_var2.c | 2 +- frame/2/gemv/bli_gemv_var_oapi.c | 2 +- frame/2/gemv/other/bli_gemv_front.c | 2 +- frame/2/ger/bli_ger_unb_var1.c | 2 +- frame/2/ger/bli_ger_unb_var2.c | 2 +- frame/2/ger/bli_ger_var_oapi.c | 2 +- frame/2/ger/other/bli_ger_front.c | 2 +- frame/2/hemv/bli_hemv_unb_var1.c | 2 +- frame/2/hemv/bli_hemv_unb_var2.c | 2 +- frame/2/hemv/bli_hemv_unb_var3.c | 2 +- frame/2/hemv/bli_hemv_unb_var4.c | 2 +- frame/2/hemv/bli_hemv_unf_var1.c | 2 +- frame/2/hemv/bli_hemv_unf_var1a.c | 2 +- frame/2/hemv/bli_hemv_unf_var3.c | 2 +- frame/2/hemv/bli_hemv_unf_var3a.c | 2 +- frame/2/hemv/bli_hemv_var_oapi.c | 2 +- frame/2/hemv/other/bli_hemv_front.c | 2 +- frame/2/her/bli_her_unb_var1.c | 2 +- frame/2/her/bli_her_unb_var2.c | 2 +- frame/2/her/bli_her_var_oapi.c | 2 +- frame/2/her/other/bli_her_front.c | 2 +- frame/2/her2/bli_her2_unb_var1.c | 2 +- frame/2/her2/bli_her2_unb_var2.c | 2 +- frame/2/her2/bli_her2_unb_var3.c | 2 +- frame/2/her2/bli_her2_unb_var4.c | 2 +- frame/2/her2/bli_her2_unf_var1.c | 2 +- frame/2/her2/bli_her2_unf_var4.c | 2 +- frame/2/her2/bli_her2_var_oapi.c | 2 +- frame/2/her2/other/bli_her2_front.c | 2 +- frame/2/symv/other/bli_symv_front.c | 2 +- frame/2/syr/other/bli_syr_front.c | 2 +- frame/2/syr2/other/bli_syr2_front.c | 2 +- frame/2/trmv/bli_trmv_unb_var1.c | 2 +- frame/2/trmv/bli_trmv_unb_var2.c | 2 +- frame/2/trmv/bli_trmv_unf_var1.c | 2 +- frame/2/trmv/bli_trmv_unf_var2.c | 2 +- frame/2/trmv/bli_trmv_var_oapi.c | 2 +- frame/2/trmv/other/bli_trmv_front.c | 2 +- frame/2/trsv/bli_trsv_unb_var1.c | 2 +- frame/2/trsv/bli_trsv_unb_var2.c | 2 +- frame/2/trsv/bli_trsv_unf_var1.c | 2 +- frame/2/trsv/bli_trsv_unf_var2.c | 2 +- frame/2/trsv/bli_trsv_var_oapi.c | 2 +- frame/2/trsv/other/bli_trsv_front.c | 2 +- frame/3/bli_l3_oapi.c | 8 +-- frame/3/bli_l3_prune.c | 20 +++---- frame/3/bli_l3_tapi.c | 16 +++--- frame/3/bli_l3_ukr_oapi.c | 6 +- frame/3/bli_l3_ukr_tapi.c | 6 +- frame/3/gemm/bli_gemm_cntl.c | 2 +- frame/3/gemm/bli_gemm_front.c | 2 +- frame/3/gemm/bli_gemm_int.c | 2 +- frame/3/gemm/bli_gemm_ker_var2.c | 2 +- frame/3/gemm/bli_gemm_ker_var2_md.c | 2 +- frame/3/gemm/bli_gemm_md_c2r_ref.c | 2 +- frame/3/gemm/ind/bli_gemm4mb_ker_var2.c | 2 +- frame/3/gemm/ind/old/bli_gemm3m2_ker_var2.c | 2 +- frame/3/gemm/other/bli_gemm_ker_var2.c | 2 +- frame/3/gemm/other/bli_gemm_ker_var2rr.c | 2 +- frame/3/gemm/other/bli_gemm_ker_var2sl.c | 2 +- frame/3/gemm/other/bli_gemm_ker_var5.c | 2 +- frame/3/hemm/bli_hemm_front.c | 2 +- frame/3/her2k/bli_her2k_front.c | 2 +- frame/3/herk/bli_herk_front.c | 2 +- frame/3/herk/bli_herk_l_ker_var2.c | 2 +- frame/3/herk/bli_herk_u_ker_var2.c | 2 +- .../herk/other/bli_herk_l_ker_var2.1looprr.c | 2 +- frame/3/herk/other/bli_herk_l_ker_var2.c | 2 +- frame/3/herk/other/bli_herk_l_ker_var2rr.c | 2 +- frame/3/herk/other/bli_herk_l_ker_var2sl.c | 2 +- .../herk/other/bli_herk_u_ker_var2.1looprr.c | 2 +- frame/3/herk/other/bli_herk_u_ker_var2.c | 2 +- frame/3/herk/other/bli_herk_u_ker_var2rr.c | 2 +- frame/3/herk/other/bli_herk_u_ker_var2sl.c | 2 +- frame/3/symm/bli_symm_front.c | 2 +- frame/3/syr2k/bli_syr2k_front.c | 2 +- frame/3/syrk/bli_syrk_front.c | 2 +- frame/3/trmm/bli_trmm_front.c | 2 +- frame/3/trmm/bli_trmm_ll_ker_var2.c | 2 +- frame/3/trmm/bli_trmm_lu_ker_var2.c | 2 +- frame/3/trmm/bli_trmm_rl_ker_var2.c | 2 +- frame/3/trmm/bli_trmm_ru_ker_var2.c | 2 +- frame/3/trmm/other/bli_trmm_ll_ker_var2.c | 2 +- frame/3/trmm/other/bli_trmm_ll_ker_var2rr.c | 2 +- frame/3/trmm/other/bli_trmm_ll_ker_var2sl.c | 2 +- frame/3/trmm/other/bli_trmm_lu_ker_var2.c | 2 +- frame/3/trmm/other/bli_trmm_lu_ker_var2rr.c | 2 +- frame/3/trmm/other/bli_trmm_lu_ker_var2sl.c | 2 +- frame/3/trmm/other/bli_trmm_rl_ker_var2.c | 2 +- frame/3/trmm/other/bli_trmm_rl_ker_var2rr.c | 2 +- frame/3/trmm/other/bli_trmm_rl_ker_var2sl.c | 2 +- frame/3/trmm/other/bli_trmm_ru_ker_var2.c | 2 +- frame/3/trmm/other/bli_trmm_ru_ker_var2rr.c | 2 +- frame/3/trmm/other/bli_trmm_ru_ker_var2sl.c | 2 +- frame/3/trmm3/bli_trmm3_front.c | 2 +- frame/3/trsm/bli_trsm_cntl.c | 2 +- frame/3/trsm/bli_trsm_front.c | 2 +- frame/3/trsm/bli_trsm_int.c | 2 +- frame/3/trsm/bli_trsm_ll_ker_var2.c | 2 +- frame/3/trsm/bli_trsm_lu_ker_var2.c | 2 +- frame/3/trsm/bli_trsm_rl_ker_var2.c | 2 +- frame/3/trsm/bli_trsm_ru_ker_var2.c | 2 +- frame/3/trsm/other/bli_trsm_ll_ker_var2.c | 2 +- frame/3/trsm/other/bli_trsm_ll_ker_var2rr.c | 2 +- frame/3/trsm/other/bli_trsm_ll_ker_var2sl.c | 2 +- frame/3/trsm/other/bli_trsm_lu_ker_var2.c | 2 +- frame/3/trsm/other/bli_trsm_lu_ker_var2rr.c | 2 +- frame/3/trsm/other/bli_trsm_lu_ker_var2sl.c | 2 +- frame/3/trsm/other/bli_trsm_rl_ker_var2.c | 2 +- frame/3/trsm/other/bli_trsm_ru_ker_var2.c | 2 +- frame/base/bli_error.c | 2 +- frame/base/bli_getopt.c | 2 +- frame/base/bli_machval.c | 2 +- frame/base/bli_malloc.c | 2 +- frame/base/bli_setgetij.c | 4 +- frame/base/cast/bli_castm.c | 6 +- frame/base/cast/bli_castnzm.c | 6 +- frame/base/cast/bli_castv.c | 6 +- frame/base/cast/old/bli_cast_check.c | 4 +- frame/base/check/bli_obj_check.c | 22 +++---- frame/base/check/bli_part_check.c | 6 +- frame/base/proj/bli_projm.c | 4 +- frame/base/proj/bli_projv.c | 4 +- frame/base/proj/old/bli_proj_check.c | 4 +- frame/compat/attic/bla_gbmv.c | 2 +- frame/compat/attic/bla_hbmv.c | 2 +- frame/compat/attic/bla_hpmv.c | 2 +- frame/compat/attic/bla_hpr.c | 2 +- frame/compat/attic/bla_hpr2.c | 2 +- frame/compat/attic/bla_rot.c | 2 +- frame/compat/attic/bla_rotg.c | 2 +- frame/compat/attic/bla_rotm.c | 2 +- frame/compat/attic/bla_rotmg.c | 2 +- frame/compat/attic/bla_sbmv.c | 2 +- frame/compat/attic/bla_spmv.c | 2 +- frame/compat/attic/bla_spr.c | 2 +- frame/compat/attic/bla_spr2.c | 2 +- frame/compat/attic/bla_tbmv.c | 2 +- frame/compat/attic/bla_tbsv.c | 2 +- frame/compat/attic/bla_tpmv.c | 2 +- frame/compat/attic/bla_tpsv.c | 2 +- frame/compat/bla_amax.c | 2 +- frame/compat/bla_asum.c | 2 +- frame/compat/bla_axpy.c | 2 +- frame/compat/bla_copy.c | 2 +- frame/compat/bla_dot.c | 6 +- frame/compat/bla_gemm.c | 2 +- frame/compat/bla_gemv.c | 2 +- frame/compat/bla_ger.c | 2 +- frame/compat/bla_hemm.c | 2 +- frame/compat/bla_hemv.c | 2 +- frame/compat/bla_her.c | 2 +- frame/compat/bla_her2.c | 2 +- frame/compat/bla_her2k.c | 2 +- frame/compat/bla_herk.c | 2 +- frame/compat/bla_nrm2.c | 2 +- frame/compat/bla_scal.c | 2 +- frame/compat/bla_swap.c | 2 +- frame/compat/bla_symm.c | 2 +- frame/compat/bla_symv.c | 2 +- frame/compat/bla_syr.c | 2 +- frame/compat/bla_syr2.c | 2 +- frame/compat/bla_syr2k.c | 2 +- frame/compat/bla_syrk.c | 2 +- frame/compat/bla_trmm.c | 2 +- frame/compat/bla_trmv.c | 2 +- frame/compat/bla_trsm.c | 2 +- frame/compat/bla_trsv.c | 2 +- frame/compat/blis/thread/b77_thread.c | 4 +- frame/compat/cblas/f77_sub/f77_amax_sub.c | 2 +- frame/compat/cblas/f77_sub/f77_asum_sub.c | 2 +- frame/compat/cblas/f77_sub/f77_dot_sub.c | 6 +- frame/compat/cblas/f77_sub/f77_nrm2_sub.c | 2 +- frame/compat/cblas/src/cblas_caxpy.c | 2 +- frame/compat/cblas/src/cblas_ccopy.c | 2 +- frame/compat/cblas/src/cblas_cdotc_sub.c | 2 +- frame/compat/cblas/src/cblas_cdotu_sub.c | 2 +- frame/compat/cblas/src/cblas_cgbmv.c | 2 +- frame/compat/cblas/src/cblas_cgemm.c | 2 +- frame/compat/cblas/src/cblas_cgemv.c | 2 +- frame/compat/cblas/src/cblas_cgerc.c | 2 +- frame/compat/cblas/src/cblas_cgeru.c | 2 +- frame/compat/cblas/src/cblas_chbmv.c | 2 +- frame/compat/cblas/src/cblas_chemm.c | 2 +- frame/compat/cblas/src/cblas_chemv.c | 2 +- frame/compat/cblas/src/cblas_cher.c | 2 +- frame/compat/cblas/src/cblas_cher2.c | 2 +- frame/compat/cblas/src/cblas_cher2k.c | 2 +- frame/compat/cblas/src/cblas_cherk.c | 2 +- frame/compat/cblas/src/cblas_chpmv.c | 2 +- frame/compat/cblas/src/cblas_chpr.c | 2 +- frame/compat/cblas/src/cblas_chpr2.c | 2 +- frame/compat/cblas/src/cblas_cscal.c | 2 +- frame/compat/cblas/src/cblas_csscal.c | 2 +- frame/compat/cblas/src/cblas_cswap.c | 2 +- frame/compat/cblas/src/cblas_csymm.c | 2 +- frame/compat/cblas/src/cblas_csyr2k.c | 2 +- frame/compat/cblas/src/cblas_csyrk.c | 2 +- frame/compat/cblas/src/cblas_ctbmv.c | 2 +- frame/compat/cblas/src/cblas_ctbsv.c | 2 +- frame/compat/cblas/src/cblas_ctpmv.c | 2 +- frame/compat/cblas/src/cblas_ctpsv.c | 2 +- frame/compat/cblas/src/cblas_ctrmm.c | 2 +- frame/compat/cblas/src/cblas_ctrmv.c | 2 +- frame/compat/cblas/src/cblas_ctrsm.c | 2 +- frame/compat/cblas/src/cblas_ctrsv.c | 2 +- frame/compat/cblas/src/cblas_daxpy.c | 2 +- frame/compat/cblas/src/cblas_dcopy.c | 2 +- frame/compat/cblas/src/cblas_dgbmv.c | 2 +- frame/compat/cblas/src/cblas_dgemm.c | 2 +- frame/compat/cblas/src/cblas_dgemv.c | 2 +- frame/compat/cblas/src/cblas_dger.c | 2 +- frame/compat/cblas/src/cblas_drot.c | 2 +- frame/compat/cblas/src/cblas_drotg.c | 2 +- frame/compat/cblas/src/cblas_drotm.c | 2 +- frame/compat/cblas/src/cblas_drotmg.c | 2 +- frame/compat/cblas/src/cblas_dsbmv.c | 2 +- frame/compat/cblas/src/cblas_dscal.c | 2 +- frame/compat/cblas/src/cblas_dspmv.c | 2 +- frame/compat/cblas/src/cblas_dspr.c | 2 +- frame/compat/cblas/src/cblas_dspr2.c | 2 +- frame/compat/cblas/src/cblas_dswap.c | 2 +- frame/compat/cblas/src/cblas_dsymm.c | 2 +- frame/compat/cblas/src/cblas_dsymv.c | 2 +- frame/compat/cblas/src/cblas_dsyr.c | 2 +- frame/compat/cblas/src/cblas_dsyr2.c | 2 +- frame/compat/cblas/src/cblas_dsyr2k.c | 2 +- frame/compat/cblas/src/cblas_dsyrk.c | 2 +- frame/compat/cblas/src/cblas_dtbmv.c | 2 +- frame/compat/cblas/src/cblas_dtbsv.c | 2 +- frame/compat/cblas/src/cblas_dtpmv.c | 2 +- frame/compat/cblas/src/cblas_dtpsv.c | 2 +- frame/compat/cblas/src/cblas_dtrmm.c | 2 +- frame/compat/cblas/src/cblas_dtrmv.c | 2 +- frame/compat/cblas/src/cblas_dtrsm.c | 2 +- frame/compat/cblas/src/cblas_dtrsv.c | 2 +- frame/compat/cblas/src/cblas_saxpy.c | 2 +- frame/compat/cblas/src/cblas_scopy.c | 2 +- frame/compat/cblas/src/cblas_sgbmv.c | 2 +- frame/compat/cblas/src/cblas_sgemm.c | 2 +- frame/compat/cblas/src/cblas_sgemv.c | 2 +- frame/compat/cblas/src/cblas_sger.c | 2 +- frame/compat/cblas/src/cblas_srot.c | 2 +- frame/compat/cblas/src/cblas_srotg.c | 2 +- frame/compat/cblas/src/cblas_srotm.c | 2 +- frame/compat/cblas/src/cblas_srotmg.c | 2 +- frame/compat/cblas/src/cblas_ssbmv.c | 2 +- frame/compat/cblas/src/cblas_sscal.c | 2 +- frame/compat/cblas/src/cblas_sspmv.c | 2 +- frame/compat/cblas/src/cblas_sspr.c | 2 +- frame/compat/cblas/src/cblas_sspr2.c | 2 +- frame/compat/cblas/src/cblas_sswap.c | 2 +- frame/compat/cblas/src/cblas_ssymm.c | 2 +- frame/compat/cblas/src/cblas_ssymv.c | 2 +- frame/compat/cblas/src/cblas_ssyr.c | 2 +- frame/compat/cblas/src/cblas_ssyr2.c | 2 +- frame/compat/cblas/src/cblas_ssyr2k.c | 2 +- frame/compat/cblas/src/cblas_ssyrk.c | 2 +- frame/compat/cblas/src/cblas_stbmv.c | 2 +- frame/compat/cblas/src/cblas_stbsv.c | 2 +- frame/compat/cblas/src/cblas_stpmv.c | 2 +- frame/compat/cblas/src/cblas_stpsv.c | 2 +- frame/compat/cblas/src/cblas_strmm.c | 2 +- frame/compat/cblas/src/cblas_strmv.c | 2 +- frame/compat/cblas/src/cblas_strsm.c | 2 +- frame/compat/cblas/src/cblas_strsv.c | 2 +- frame/compat/cblas/src/cblas_xerbla.c | 2 +- frame/compat/cblas/src/cblas_zaxpy.c | 2 +- frame/compat/cblas/src/cblas_zcopy.c | 2 +- frame/compat/cblas/src/cblas_zdotc_sub.c | 2 +- frame/compat/cblas/src/cblas_zdotu_sub.c | 2 +- frame/compat/cblas/src/cblas_zdscal.c | 2 +- frame/compat/cblas/src/cblas_zgbmv.c | 2 +- frame/compat/cblas/src/cblas_zgemm.c | 2 +- frame/compat/cblas/src/cblas_zgemv.c | 2 +- frame/compat/cblas/src/cblas_zgerc.c | 2 +- frame/compat/cblas/src/cblas_zgeru.c | 2 +- frame/compat/cblas/src/cblas_zhbmv.c | 2 +- frame/compat/cblas/src/cblas_zhemm.c | 2 +- frame/compat/cblas/src/cblas_zhemv.c | 2 +- frame/compat/cblas/src/cblas_zher.c | 2 +- frame/compat/cblas/src/cblas_zher2.c | 2 +- frame/compat/cblas/src/cblas_zher2k.c | 2 +- frame/compat/cblas/src/cblas_zherk.c | 2 +- frame/compat/cblas/src/cblas_zhpmv.c | 2 +- frame/compat/cblas/src/cblas_zhpr.c | 2 +- frame/compat/cblas/src/cblas_zhpr2.c | 2 +- frame/compat/cblas/src/cblas_zscal.c | 2 +- frame/compat/cblas/src/cblas_zswap.c | 2 +- frame/compat/cblas/src/cblas_zsymm.c | 2 +- frame/compat/cblas/src/cblas_zsyr2k.c | 2 +- frame/compat/cblas/src/cblas_zsyrk.c | 2 +- frame/compat/cblas/src/cblas_ztbmv.c | 2 +- frame/compat/cblas/src/cblas_ztbsv.c | 2 +- frame/compat/cblas/src/cblas_ztpmv.c | 2 +- frame/compat/cblas/src/cblas_ztpsv.c | 2 +- frame/compat/cblas/src/cblas_ztrmm.c | 2 +- frame/compat/cblas/src/cblas_ztrmv.c | 2 +- frame/compat/cblas/src/cblas_ztrsm.c | 2 +- frame/compat/cblas/src/cblas_ztrsv.c | 2 +- frame/compat/f2c/bla_cabs1.c | 4 +- frame/compat/f2c/bla_gbmv.c | 24 ++++---- frame/compat/f2c/bla_hbmv.c | 12 ++-- frame/compat/f2c/bla_hpmv.c | 12 ++-- frame/compat/f2c/bla_hpr.c | 12 ++-- frame/compat/f2c/bla_hpr2.c | 12 ++-- frame/compat/f2c/bla_lsame.c | 2 +- frame/compat/f2c/bla_rot.c | 8 +-- frame/compat/f2c/bla_rotg.c | 8 +-- frame/compat/f2c/bla_rotm.c | 4 +- frame/compat/f2c/bla_rotmg.c | 4 +- frame/compat/f2c/bla_sbmv.c | 12 ++-- frame/compat/f2c/bla_spmv.c | 12 ++-- frame/compat/f2c/bla_spr.c | 12 ++-- frame/compat/f2c/bla_spr2.c | 12 ++-- frame/compat/f2c/bla_tbmv.c | 24 ++++---- frame/compat/f2c/bla_tbsv.c | 24 ++++---- frame/compat/f2c/bla_tpmv.c | 24 ++++---- frame/compat/f2c/bla_tpsv.c | 24 ++++---- frame/compat/f2c/bla_xerbla.c | 2 +- frame/include/bli_extern_defs.h | 32 ++++------- frame/ind/cntx/bli_cntx_ind_stage.c | 16 +++--- frame/ind/oapi/bli_l3_3m4m1m_oapi.c | 10 ++-- frame/ind/oapi/bli_l3_ind_oapi.c | 8 +-- frame/ind/oapi/bli_l3_nat_oapi.c | 10 ++-- frame/ind/tapi/bli_l3_ind_tapi.c | 20 +++---- frame/util/bli_util_check.c | 14 ++--- frame/util/bli_util_oapi.c | 20 +++---- frame/util/bli_util_tapi.c | 18 +++--- frame/util/bli_util_unb_var1.c | 34 +++++------ 379 files changed, 743 insertions(+), 796 deletions(-) diff --git a/build/bli_config.h.in b/build/bli_config.h.in index cc5386f57..2dadbc8c4 100644 --- a/build/bli_config.h.in +++ b/build/bli_config.h.in @@ -159,7 +159,23 @@ #define BLIS_DISABLE_SHARED #endif -#define BLIS_EXPORT_BLAS -#define BLIS_EXPORT_BLIS +#if !defined(BLIS_ENABLE_SHARED) + #define BLIS_EXPORT +#else + #if defined(_WIN32) || defined(__CYGWIN__) + #ifdef BLIS_IS_BUILDING_LIBRARY + #define BLIS_EXPORT __declspec(dllexport) + #else + #define BLIS_EXPORT __declspec(dllimport) + #endif + #elif defined(__GNUC__) && __GNUC__ >= 4 + #define BLIS_EXPORT __attribute__ ((visibility ("default"))) + #else + #define BLIS_EXPORT + #endif +#endif + +#define BLIS_EXPORT_BLIS BLIS_EXPORT +#define BLIS_EXPORT_BLAS BLIS_EXPORT #endif diff --git a/build/libblis-symbols.def b/build/libblis-symbols.def index f8752018b..e1bfce807 100644 --- a/build/libblis-symbols.def +++ b/build/libblis-symbols.def @@ -183,8 +183,6 @@ bli_cgemm4mb bli_cgemm4mb_ker_var2 bli_cgemm4mh bli_cgemm_ex -bli_cgemm_haswell_asm_3x8 -bli_cgemm_haswell_asm_8x3 bli_cgemm_ker_var2 bli_cgemm_md_c2r_ref bli_cgemmtrsm_l_ukernel @@ -591,7 +589,6 @@ bli_daddv bli_daddv_ex bli_damaxv bli_damaxv_ex -bli_damaxv_zen_int bli_dasumv bli_dasumv_ex bli_dasumv_unb_var1 @@ -603,14 +600,11 @@ bli_daxpyd bli_daxpyd_ex bli_daxpyf bli_daxpyf_ex -bli_daxpyf_zen_int_8 bli_daxpym bli_daxpym_ex bli_daxpym_unb_var1 bli_daxpyv bli_daxpyv_ex -bli_daxpyv_zen_int -bli_daxpyv_zen_int10 bli_dccastm bli_dccastnzm bli_dccastv @@ -640,16 +634,12 @@ bli_ddotaxpyv bli_ddotaxpyv_ex bli_ddotv bli_ddotv_ex -bli_ddotv_zen_int -bli_ddotv_zen_int10 bli_ddotxaxpyf bli_ddotxaxpyf_ex bli_ddotxf bli_ddotxf_ex -bli_ddotxf_zen_int_8 bli_ddotxv bli_ddotxv_ex -bli_ddotxv_zen_int bli_ddpackm_blk_var1_md bli_ddpackm_cxk_1e_md bli_ddpackm_cxk_1r_md @@ -673,12 +663,8 @@ bli_dgemm4mb bli_dgemm4mb_ker_var2 bli_dgemm4mh bli_dgemm_ex -bli_dgemm_haswell_asm_6x8 -bli_dgemm_haswell_asm_8x6 bli_dgemm_ker_var2 -bli_dgemmtrsm_l_haswell_asm_6x8 bli_dgemmtrsm_l_ukernel -bli_dgemmtrsm_u_haswell_asm_6x8 bli_dgemmtrsm_u_ukernel bli_dgemm_ukernel bli_dgemv @@ -746,11 +732,6 @@ bli_dinvertv_ex bli_divsc bli_divsc_check bli_divsc_qfp -bli_dlamc1 -bli_dlamc2 -bli_dlamc3 -bli_dlamc4 -bli_dlamc5 bli_dlamch bli_dmachval bli_dmkherm @@ -838,8 +819,6 @@ bli_dscalm_ex bli_dscalm_unb_var1 bli_dscalv bli_dscalv_ex -bli_dscalv_zen_int -bli_dscalv_zen_int10 bli_dscastm bli_dscastnzm bli_dscastv @@ -1452,8 +1431,6 @@ bli_pool_init bli_pool_print bli_pool_reinit bli_pool_shrink -bli_pow_di -bli_pow_ri bli_prime_factorization bli_printm bli_printm_ex @@ -1510,7 +1487,6 @@ bli_saddv bli_saddv_ex bli_samaxv bli_samaxv_ex -bli_samaxv_zen_int bli_sasumv bli_sasumv_ex bli_sasumv_unb_var1 @@ -1522,14 +1498,11 @@ bli_saxpyd bli_saxpyd_ex bli_saxpyf bli_saxpyf_ex -bli_saxpyf_zen_int_8 bli_saxpym bli_saxpym_ex bli_saxpym_unb_var1 bli_saxpyv bli_saxpyv_ex -bli_saxpyv_zen_int -bli_saxpyv_zen_int10 bli_sba_acquire bli_sba_checkin_array bli_sba_checkout_array @@ -1591,16 +1564,12 @@ bli_sdotaxpyv bli_sdotaxpyv_ex bli_sdotv bli_sdotv_ex -bli_sdotv_zen_int -bli_sdotv_zen_int10 bli_sdotxaxpyf bli_sdotxaxpyf_ex bli_sdotxf bli_sdotxf_ex -bli_sdotxf_zen_int_8 bli_sdotxv bli_sdotxv_ex -bli_sdotxv_zen_int bli_sdpackm_blk_var1_md bli_sdpackm_cxk_1e_md bli_sdpackm_cxk_1r_md @@ -1643,12 +1612,8 @@ bli_sgemm4mb bli_sgemm4mb_ker_var2 bli_sgemm4mh bli_sgemm_ex -bli_sgemm_haswell_asm_16x6 -bli_sgemm_haswell_asm_6x16 bli_sgemm_ker_var2 -bli_sgemmtrsm_l_haswell_asm_6x16 bli_sgemmtrsm_l_ukernel -bli_sgemmtrsm_u_haswell_asm_6x16 bli_sgemmtrsm_u_ukernel bli_sgemm_ukernel bli_sgemv @@ -1717,11 +1682,6 @@ bli_sinvertd_ex bli_sinvertsc bli_sinvertv bli_sinvertv_ex -bli_slamc1 -bli_slamc2 -bli_slamc3 -bli_slamc4 -bli_slamc5 bli_slamch bli_sleep bli_smachval @@ -1793,8 +1753,6 @@ bli_sscalm_ex bli_sscalm_unb_var1 bli_sscalv bli_sscalv_ex -bli_sscalv_zen_int -bli_sscalv_zen_int10 bli_sscastm bli_sscastnzm bli_sscastv @@ -2245,8 +2203,6 @@ bli_zgemm4mb bli_zgemm4mb_ker_var2 bli_zgemm4mh bli_zgemm_ex -bli_zgemm_haswell_asm_3x4 -bli_zgemm_haswell_asm_4x3 bli_zgemm_ker_var2 bli_zgemm_md_c2r_ref bli_zgemmtrsm_l_ukernel @@ -2528,19 +2484,6 @@ bli_zzpackm_struc_cxk_md bli_zzxpbym_md bli_zzxpbym_md_ex bli_zzxpbym_md_unb_var1 -bla_c_abs -bla_c_div -bla_d_abs -bla_d_cnjg -bla_d_imag -bla_d_sign -bla_f__cabs -bla_r_abs -bla_r_cnjg -bla_r_imag -bla_r_sign -bla_z_abs -bla_z_div sasum_ sasumsub_ saxpy_ diff --git a/common.mk b/common.mk index 2e43a46f8..75e563878 100644 --- a/common.mk +++ b/common.mk @@ -506,9 +506,9 @@ SOFLAGS := -shared ifeq ($(IS_WIN),yes) # Windows shared library link flags. ifeq ($(CC_VENDOR),clang) -SOFLAGS += -Wl,-def:build/libblis-symbols.def -Wl,-implib:$(BASE_LIB_PATH)/$(LIBBLIS).lib +SOFLAGS += -Wl,-implib:$(BASE_LIB_PATH)/$(LIBBLIS).lib else -SOFLAGS += -Wl,--export-all-symbols -Wl,--out-implib,$(BASE_LIB_PATH)/$(LIBBLIS).dll.a +SOFLAGS += -Wl,--out-implib,$(BASE_LIB_PATH)/$(LIBBLIS).dll.a endif else # Linux shared library link flags. diff --git a/frame/0/bli_l0_check.c b/frame/0/bli_l0_check.c index aa046285e..65eeda1b7 100644 --- a/frame/0/bli_l0_check.c +++ b/frame/0/bli_l0_check.c @@ -41,7 +41,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* chi, \ obj_t* psi \ @@ -61,7 +61,7 @@ GENFRONT( subsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* chi \ ) \ @@ -75,7 +75,7 @@ GENFRONT( invertsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* chi, \ obj_t* norm \ diff --git a/frame/0/bli_l0_oapi.c b/frame/0/bli_l0_oapi.c index c6e98f7b6..9a5492971 100644 --- a/frame/0/bli_l0_oapi.c +++ b/frame/0/bli_l0_oapi.c @@ -41,7 +41,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* chi, \ obj_t* absq \ @@ -81,7 +81,7 @@ GENFRONT( normfsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* chi, \ obj_t* psi \ @@ -120,7 +120,7 @@ GENFRONT( subsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* chi \ ) \ @@ -153,7 +153,7 @@ GENFRONT( invertsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* chi, \ obj_t* psi \ @@ -186,7 +186,7 @@ GENFRONT( sqrtsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* chi, \ double* zeta_r, \ @@ -230,7 +230,7 @@ GENFRONT( getsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ double zeta_r, \ double zeta_i, \ @@ -264,7 +264,7 @@ GENFRONT( setsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* chi, \ obj_t* zeta_r, \ @@ -307,7 +307,7 @@ GENFRONT( unzipsc ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* zeta_r, \ obj_t* zeta_i, \ diff --git a/frame/0/bli_l0_tapi.c b/frame/0/bli_l0_tapi.c index 1a86ebd0a..620cad299 100644 --- a/frame/0/bli_l0_tapi.c +++ b/frame/0/bli_l0_tapi.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjchi, \ ctype* chi, \ @@ -64,7 +64,7 @@ INSERT_GENTFUNC_BASIC( subsc, subs ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjchi, \ ctype* chi \ @@ -85,7 +85,7 @@ INSERT_GENTFUNC_BASIC( invertsc, inverts ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjchi, \ ctype* chi, \ @@ -114,7 +114,7 @@ INSERT_GENTFUNC_BASIC( mulsc, scals ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ ctype* chi, \ ctype_r* absq \ @@ -143,7 +143,7 @@ INSERT_GENTFUNCR_BASIC0( absqsc ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ ctype* chi, \ ctype_r* norm \ @@ -161,7 +161,7 @@ INSERT_GENTFUNCR_BASIC0( normfsc ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ ctype* chi, \ ctype* psi \ @@ -179,7 +179,7 @@ INSERT_GENTFUNC_BASIC0( sqrtsc ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ ctype* chi, \ double* zeta_r, \ @@ -197,7 +197,7 @@ INSERT_GENTFUNC_BASIC0( getsc ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ double zeta_r, \ double zeta_i, \ @@ -215,7 +215,7 @@ INSERT_GENTFUNC_BASIC0( setsc ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ ctype* chi, \ ctype_r* zeta_r, \ @@ -233,7 +233,7 @@ INSERT_GENTFUNCR_BASIC0( unzipsc ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ ctype_r* zeta_r, \ ctype_r* zeta_i, \ diff --git a/frame/0/copysc/bli_copysc.c b/frame/0/copysc/bli_copysc.c index b01678877..3001aa6c7 100644 --- a/frame/0/copysc/bli_copysc.c +++ b/frame/0/copysc/bli_copysc.c @@ -55,7 +55,7 @@ static FUNCPTR_T GENARRAY2_ALL(ftypes,copysc); #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* chi, \ obj_t* psi \ @@ -103,7 +103,7 @@ GENFRONT( copysc ) #undef GENTFUNC2 #define GENTFUNC2( ctype_x, ctype_y, chx, chy, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(chx,chy,varname) \ +void PASTEMAC2(chx,chy,varname) \ ( \ conj_t conjchi, \ void* chi, \ diff --git a/frame/1/bli_l1v_check.c b/frame/1/bli_l1v_check.c index e795f7e00..74b60febd 100644 --- a/frame/1/bli_l1v_check.c +++ b/frame/1/bli_l1v_check.c @@ -41,7 +41,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* y \ @@ -59,7 +59,7 @@ GENFRONT( swapv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* index \ @@ -74,7 +74,7 @@ GENFRONT( amaxv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -91,7 +91,7 @@ GENFRONT( axpbyv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -108,7 +108,7 @@ GENFRONT( scal2v ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* y, \ @@ -124,7 +124,7 @@ GENFRONT( dotv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -142,7 +142,7 @@ GENFRONT( dotxv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x \ ) \ @@ -156,7 +156,7 @@ GENFRONT( invertv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -172,7 +172,7 @@ GENFRONT( setv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* beta, \ diff --git a/frame/1/bli_l1v_oapi.c b/frame/1/bli_l1v_oapi.c index 9c50d93ab..19e61bb7a 100644 --- a/frame/1/bli_l1v_oapi.c +++ b/frame/1/bli_l1v_oapi.c @@ -43,7 +43,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* y \ @@ -90,7 +90,7 @@ GENFRONT( subv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* index \ @@ -133,7 +133,7 @@ GENFRONT( amaxv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -197,7 +197,7 @@ GENFRONT( axpbyv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -255,7 +255,7 @@ GENFRONT( scal2v ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* y, \ @@ -305,7 +305,7 @@ GENFRONT( dotv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -374,7 +374,7 @@ GENFRONT( dotxv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x \ BLIS_OAPI_EX_PARAMS \ @@ -413,7 +413,7 @@ GENFRONT( invertv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -467,7 +467,7 @@ GENFRONT( setv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* y \ @@ -510,7 +510,7 @@ GENFRONT( swapv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* beta, \ diff --git a/frame/1/bli_l1v_tapi.c b/frame/1/bli_l1v_tapi.c index 1127cefe4..5fdfdb91e 100644 --- a/frame/1/bli_l1v_tapi.c +++ b/frame/1/bli_l1v_tapi.c @@ -43,7 +43,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ dim_t n, \ @@ -81,7 +81,7 @@ INSERT_GENTFUNC_BASIC( subv, BLIS_SUBV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -115,7 +115,7 @@ INSERT_GENTFUNC_BASIC( amaxv, BLIS_AMAXV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ dim_t n, \ @@ -155,7 +155,7 @@ INSERT_GENTFUNC_BASIC( axpbyv, BLIS_AXPBYV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ dim_t n, \ @@ -195,7 +195,7 @@ INSERT_GENTFUNC_BASIC( scal2v, BLIS_SCAL2V_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -235,7 +235,7 @@ INSERT_GENTFUNC_BASIC( dotv, BLIS_DOTV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -279,7 +279,7 @@ INSERT_GENTFUNC_BASIC( dotxv, BLIS_DOTXV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx \ @@ -311,7 +311,7 @@ INSERT_GENTFUNC_BASIC( invertv, BLIS_INVERTV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjalpha, \ dim_t n, \ @@ -348,7 +348,7 @@ INSERT_GENTFUNC_BASIC( setv, BLIS_SETV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -381,7 +381,7 @@ INSERT_GENTFUNC_BASIC( swapv, BLIS_SWAPV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ dim_t n, \ diff --git a/frame/1/other/packv/bli_packv_unb_var1.c b/frame/1/other/packv/bli_packv_unb_var1.c index 5da136ae4..23b370949 100644 --- a/frame/1/other/packv/bli_packv_unb_var1.c +++ b/frame/1/other/packv/bli_packv_unb_var1.c @@ -81,7 +81,7 @@ void bli_packv_unb_var1( obj_t* c, #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ dim_t m, \ void* c, inc_t incc, \ diff --git a/frame/1/other/unpackv/bli_unpackv_unb_var1.c b/frame/1/other/unpackv/bli_unpackv_unb_var1.c index c23f6dc79..5dc1101b6 100644 --- a/frame/1/other/unpackv/bli_unpackv_unb_var1.c +++ b/frame/1/other/unpackv/bli_unpackv_unb_var1.c @@ -81,7 +81,7 @@ void bli_unpackv_unb_var1( obj_t* p, #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ dim_t m, \ void* p, inc_t incp, \ diff --git a/frame/1d/bli_l1d_check.c b/frame/1d/bli_l1d_check.c index 4745c8d17..908a410ad 100644 --- a/frame/1d/bli_l1d_check.c +++ b/frame/1d/bli_l1d_check.c @@ -41,7 +41,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* y \ @@ -58,7 +58,7 @@ GENFRONT( subd ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -75,7 +75,7 @@ GENFRONT( scal2d ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x \ ) \ @@ -89,7 +89,7 @@ GENFRONT( invertd ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -107,7 +107,7 @@ GENFRONT( shiftd ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* beta, \ diff --git a/frame/1d/bli_l1d_oapi.c b/frame/1d/bli_l1d_oapi.c index f548410b6..1a8b8f124 100644 --- a/frame/1d/bli_l1d_oapi.c +++ b/frame/1d/bli_l1d_oapi.c @@ -43,7 +43,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* y \ @@ -98,7 +98,7 @@ GENFRONT( subd ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -164,7 +164,7 @@ GENFRONT( scal2d ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x \ BLIS_OAPI_EX_PARAMS \ @@ -208,7 +208,7 @@ GENFRONT( invertd ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -267,7 +267,7 @@ GENFRONT( setd ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -315,7 +315,7 @@ GENFRONT( setid ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -371,7 +371,7 @@ GENFRONT( shiftd ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* beta, \ diff --git a/frame/1d/bli_l1d_tapi.c b/frame/1d/bli_l1d_tapi.c index 65a24f4cc..a8f9e844a 100644 --- a/frame/1d/bli_l1d_tapi.c +++ b/frame/1d/bli_l1d_tapi.c @@ -43,7 +43,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -121,7 +121,7 @@ INSERT_GENTFUNC_BASIC2( subd, subv, BLIS_SUBV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -200,7 +200,7 @@ INSERT_GENTFUNC_BASIC2( scal2d, scal2v, BLIS_SCAL2V_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ dim_t m, \ @@ -255,7 +255,7 @@ INSERT_GENTFUNC_BASIC2( invertd, invertv, BLIS_INVERTV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjalpha, \ doff_t diagoffx, \ @@ -315,7 +315,7 @@ INSERT_GENTFUNC_BASIC2( setd, setv, BLIS_SETV_KER ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname, kername, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ dim_t m, \ @@ -390,7 +390,7 @@ INSERT_GENTFUNCR_BASIC2( setid, setv, BLIS_SETV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ dim_t m, \ @@ -448,7 +448,7 @@ INSERT_GENTFUNC_BASIC2( shiftd, addv, BLIS_ADDV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ diff --git a/frame/1f/bli_l1f_oapi.c b/frame/1f/bli_l1f_oapi.c index 285be9370..d1e7f0dbe 100644 --- a/frame/1f/bli_l1f_oapi.c +++ b/frame/1f/bli_l1f_oapi.c @@ -43,7 +43,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alphax, \ obj_t* alphay, \ @@ -113,7 +113,7 @@ GENFRONT( axpy2v ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -182,7 +182,7 @@ GENFRONT( axpyf ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* xt, \ @@ -251,7 +251,7 @@ GENFRONT( dotaxpyv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* at, \ @@ -340,7 +340,7 @@ GENFRONT( dotxaxpyf ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ diff --git a/frame/1f/bli_l1f_tapi.c b/frame/1f/bli_l1f_tapi.c index 787273982..332ff5af2 100644 --- a/frame/1f/bli_l1f_tapi.c +++ b/frame/1f/bli_l1f_tapi.c @@ -43,7 +43,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -87,7 +87,7 @@ INSERT_GENTFUNC_BASIC( axpy2v, BLIS_AXPY2V_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conja, \ conj_t conjx, \ @@ -131,7 +131,7 @@ INSERT_GENTFUNC_BASIC( axpyf, BLIS_AXPYF_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjxt, \ conj_t conjx, \ @@ -177,7 +177,7 @@ INSERT_GENTFUNC_BASIC( dotaxpyv, BLIS_DOTAXPYV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjat, \ conj_t conja, \ @@ -231,7 +231,7 @@ INSERT_GENTFUNC_BASIC( dotxaxpyf, BLIS_DOTXAXPYF_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjat, \ conj_t conjx, \ diff --git a/frame/1m/bli_l1m_check.c b/frame/1m/bli_l1m_check.c index e65ac1bbe..8914e43b1 100644 --- a/frame/1m/bli_l1m_check.c +++ b/frame/1m/bli_l1m_check.c @@ -41,7 +41,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* y \ @@ -58,7 +58,7 @@ GENFRONT( subm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -75,7 +75,7 @@ GENFRONT( scal2m ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -91,7 +91,7 @@ GENFRONT( setm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* beta, \ diff --git a/frame/1m/bli_l1m_oapi.c b/frame/1m/bli_l1m_oapi.c index eb94e5aea..4bb0de784 100644 --- a/frame/1m/bli_l1m_oapi.c +++ b/frame/1m/bli_l1m_oapi.c @@ -43,7 +43,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* y \ @@ -100,7 +100,7 @@ GENFRONT( subm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -168,7 +168,7 @@ GENFRONT( scal2m ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -243,7 +243,7 @@ GENFRONT( scalm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -305,7 +305,7 @@ GENFRONT( setm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* beta, \ @@ -375,7 +375,7 @@ GENFRONT( xpbym ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* beta, \ diff --git a/frame/1m/bli_l1m_tapi.c b/frame/1m/bli_l1m_tapi.c index 45a17182f..2b3c4bb4a 100644 --- a/frame/1m/bli_l1m_tapi.c +++ b/frame/1m/bli_l1m_tapi.c @@ -43,7 +43,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, auxker ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -108,7 +108,7 @@ INSERT_GENTFUNC_BASIC( subm, subd ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -177,7 +177,7 @@ INSERT_GENTFUNC_BASIC0( copym ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -247,7 +247,7 @@ INSERT_GENTFUNC_BASIC0( axpym ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -339,7 +339,7 @@ INSERT_GENTFUNC_BASIC0( scal2m ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjalpha, \ doff_t diagoffx, \ @@ -385,7 +385,7 @@ INSERT_GENTFUNC_BASIC0( setm ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -472,7 +472,7 @@ INSERT_GENTFUNC_BASIC0( xpbym ) #undef GENTFUNC2 #define GENTFUNC2( ctype_x, ctype_y, chx, chy, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC3(chx,chy,opname,EX_SUF) \ +void PASTEMAC3(chx,chy,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ diff --git a/frame/1m/bli_l1m_unb_var1.c b/frame/1m/bli_l1m_unb_var1.c index c9104c8d8..cb6098e3f 100644 --- a/frame/1m/bli_l1m_unb_var1.c +++ b/frame/1m/bli_l1m_unb_var1.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -157,7 +157,7 @@ INSERT_GENTFUNC_BASIC2( subm_unb_var1, subv, BLIS_SUBV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -276,7 +276,7 @@ INSERT_GENTFUNC_BASIC2( scal2m_unb_var1, scal2v, BLIS_SCAL2V_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjalpha, \ doff_t diagoffx, \ @@ -382,7 +382,7 @@ INSERT_GENTFUNC_BASIC2( setm_unb_var1, setv, BLIS_SETV_KER ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, kername, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -500,7 +500,7 @@ INSERT_GENTFUNC_BASIC2( xpbym_unb_var1, xpbyv, BLIS_XPBYV_KER ) #undef GENTFUNC2 #define GENTFUNC2( ctype_x, ctype_y, chx, chy, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(chx,chy,opname) \ +void PASTEMAC2(chx,chy,opname) \ ( \ doff_t diagoffx, \ diag_t diagx, \ diff --git a/frame/1m/packm/bli_packm_blk_var1.c b/frame/1m/packm/bli_packm_blk_var1.c index b5fd52b03..6afc48fad 100644 --- a/frame/1m/packm/bli_packm_blk_var1.c +++ b/frame/1m/packm/bli_packm_blk_var1.c @@ -276,7 +276,7 @@ void bli_packm_blk_var1 #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/packm/bli_packm_blk_var1_md.c b/frame/1m/packm/bli_packm_blk_var1_md.c index c0b5b4709..8d4906c50 100644 --- a/frame/1m/packm/bli_packm_blk_var1_md.c +++ b/frame/1m/packm/bli_packm_blk_var1_md.c @@ -57,7 +57,7 @@ typedef void (*FUNCPTR_T)( static FUNCPTR_T GENARRAY2_ALL(ftypes,packm_blk_var1_md); -BLIS_EXPORT_BLIS void bli_packm_blk_var1_md +void bli_packm_blk_var1_md ( obj_t* c, obj_t* p, @@ -164,7 +164,7 @@ BLIS_EXPORT_BLIS void bli_packm_blk_var1_md #undef GENTFUNC2 #define GENTFUNC2( ctype_c, ctype_p, chc, chp, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(chc,chp,varname) \ +void PASTEMAC2(chc,chp,varname) \ ( \ trans_t transc, \ pack_t schema, \ diff --git a/frame/1m/packm/bli_packm_check.c b/frame/1m/packm/bli_packm_check.c index 2e0c059c7..e662a85df 100644 --- a/frame/1m/packm/bli_packm_check.c +++ b/frame/1m/packm/bli_packm_check.c @@ -35,7 +35,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_packm_init_check +void bli_packm_init_check ( obj_t* a, obj_t* p, @@ -57,7 +57,7 @@ BLIS_EXPORT_BLIS void bli_packm_init_check //bli_check_error_code( e_val ); } -BLIS_EXPORT_BLIS void bli_packm_int_check +void bli_packm_int_check ( obj_t* a, obj_t* p, diff --git a/frame/1m/packm/bli_packm_cxk.c b/frame/1m/packm/bli_packm_cxk.c index 9e82bfc8d..59f99dd18 100644 --- a/frame/1m/packm/bli_packm_cxk.c +++ b/frame/1m/packm/bli_packm_cxk.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conja, \ dim_t panel_dim, \ diff --git a/frame/1m/packm/bli_packm_cxk_1er.c b/frame/1m/packm/bli_packm_cxk_1er.c index 8331acf1c..e583c8a82 100644 --- a/frame/1m/packm/bli_packm_cxk_1er.c +++ b/frame/1m/packm/bli_packm_cxk_1er.c @@ -37,7 +37,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conja, \ pack_t schema, \ diff --git a/frame/1m/packm/bli_packm_cxk_3mis.c b/frame/1m/packm/bli_packm_cxk_3mis.c index 900eefb50..9435f6a73 100644 --- a/frame/1m/packm/bli_packm_cxk_3mis.c +++ b/frame/1m/packm/bli_packm_cxk_3mis.c @@ -37,7 +37,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conja, \ dim_t panel_dim, \ diff --git a/frame/1m/packm/bli_packm_cxk_4mi.c b/frame/1m/packm/bli_packm_cxk_4mi.c index 03f151681..c22f551cc 100644 --- a/frame/1m/packm/bli_packm_cxk_4mi.c +++ b/frame/1m/packm/bli_packm_cxk_4mi.c @@ -37,7 +37,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conja, \ dim_t panel_dim, \ diff --git a/frame/1m/packm/bli_packm_cxk_rih.c b/frame/1m/packm/bli_packm_cxk_rih.c index 62e4b5246..1f2c9f240 100644 --- a/frame/1m/packm/bli_packm_cxk_rih.c +++ b/frame/1m/packm/bli_packm_cxk_rih.c @@ -37,7 +37,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conja, \ pack_t schema, \ diff --git a/frame/1m/packm/bli_packm_int.c b/frame/1m/packm/bli_packm_int.c index c59781532..6dc9ec85a 100644 --- a/frame/1m/packm/bli_packm_int.c +++ b/frame/1m/packm/bli_packm_int.c @@ -34,7 +34,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_packm_int +void bli_packm_int ( obj_t* a, obj_t* p, diff --git a/frame/1m/packm/bli_packm_part.c b/frame/1m/packm/bli_packm_part.c index 09cedbed1..2fff4b7c8 100644 --- a/frame/1m/packm/bli_packm_part.c +++ b/frame/1m/packm/bli_packm_part.c @@ -38,7 +38,7 @@ // -- Matrix partitioning ------------------------------------------------------ -BLIS_EXPORT_BLIS void bli_packm_acquire_mpart_t2b( subpart_t requested_part, +void bli_packm_acquire_mpart_t2b( subpart_t requested_part, dim_t i, dim_t b, obj_t* obj, @@ -110,7 +110,7 @@ BLIS_EXPORT_BLIS void bli_packm_acquire_mpart_t2b( subpart_t requested_part, -BLIS_EXPORT_BLIS void bli_packm_acquire_mpart_l2r( subpart_t requested_part, +void bli_packm_acquire_mpart_l2r( subpart_t requested_part, dim_t j, dim_t b, obj_t* obj, @@ -186,7 +186,7 @@ BLIS_EXPORT_BLIS void bli_packm_acquire_mpart_l2r( subpart_t requested_part, -BLIS_EXPORT_BLIS void bli_packm_acquire_mpart_tl2br( subpart_t requested_part, +void bli_packm_acquire_mpart_tl2br( subpart_t requested_part, dim_t ij, dim_t b, obj_t* obj, diff --git a/frame/1m/packm/bli_packm_struc_cxk.c b/frame/1m/packm/bli_packm_struc_cxk.c index 5e7decea6..b86a9ebbd 100644 --- a/frame/1m/packm/bli_packm_struc_cxk.c +++ b/frame/1m/packm/bli_packm_struc_cxk.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -278,7 +278,7 @@ INSERT_GENTFUNC_BASIC( packm_struc_cxk, packm_cxk ) #undef GENTFUNC #define GENTFUNC( ctype, ch, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -532,7 +532,7 @@ INSERT_GENTFUNC_BASIC( packm_herm_cxk, packm_cxk ) #undef GENTFUNC #define GENTFUNC( ctype, ch, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_1er.c b/frame/1m/packm/bli_packm_struc_cxk_1er.c index 9a2c079c3..038ee1b8f 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_1er.c +++ b/frame/1m/packm/bli_packm_struc_cxk_1er.c @@ -37,7 +37,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -274,7 +274,7 @@ INSERT_GENTFUNCCO_BASIC( packm_struc_cxk_1er, packm_cxk_1er ) #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -520,7 +520,7 @@ INSERT_GENTFUNCCO_BASIC( packm_herm_cxk_1er, packm_cxk_1er ) #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_3mis.c b/frame/1m/packm/bli_packm_struc_cxk_3mis.c index 7530ad42b..9d01b3b40 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_3mis.c +++ b/frame/1m/packm/bli_packm_struc_cxk_3mis.c @@ -37,7 +37,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -338,7 +338,7 @@ INSERT_GENTFUNCCO_BASIC( packm_struc_cxk_3mis, packm_cxk_3mis ) #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -657,7 +657,7 @@ INSERT_GENTFUNCCO_BASIC( packm_herm_cxk_3mis, packm_cxk_3mis ) #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_4mi.c b/frame/1m/packm/bli_packm_struc_cxk_4mi.c index 80ce1ffb8..3df849921 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_4mi.c +++ b/frame/1m/packm/bli_packm_struc_cxk_4mi.c @@ -37,7 +37,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -308,7 +308,7 @@ INSERT_GENTFUNCCO_BASIC( packm_struc_cxk_4mi, packm_cxk_4mi ) #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -612,7 +612,7 @@ INSERT_GENTFUNCCO_BASIC( packm_herm_cxk_4mi, packm_cxk_4mi ) #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_md.c b/frame/1m/packm/bli_packm_struc_cxk_md.c index 8bae422a6..52a1f9817 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_md.c +++ b/frame/1m/packm/bli_packm_struc_cxk_md.c @@ -39,7 +39,7 @@ #undef GENTFUNC2 #define GENTFUNC2( ctype_c, ctype_p, chc, chp, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(chc,chp,varname) \ +void PASTEMAC2(chc,chp,varname) \ ( \ conj_t conjc, \ pack_t schema, \ @@ -313,7 +313,7 @@ INSERT_GENTFUNC2_MIXDP0( packm_struc_cxk_md ) #undef GENTFUNC2 #define GENTFUNC2( ctype_a, ctype_p, cha, chp, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(cha,chp,opname) \ +void PASTEMAC2(cha,chp,opname) \ ( \ conj_t conja, \ dim_t m, \ @@ -440,7 +440,7 @@ INSERT_GENTFUNC2_MIXDP0( packm_cxk_1r_md ) #undef GENTFUNC2 #define GENTFUNC2( ctype_a, ctype_p, cha, chp, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(cha,chp,opname) \ +void PASTEMAC2(cha,chp,opname) \ ( \ conj_t conja, \ dim_t m, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_rih.c b/frame/1m/packm/bli_packm_struc_cxk_rih.c index e73970ab5..32a7ec1a7 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_rih.c +++ b/frame/1m/packm/bli_packm_struc_cxk_rih.c @@ -37,7 +37,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -269,7 +269,7 @@ INSERT_GENTFUNCCO_BASIC( packm_struc_cxk_rih, packm_cxk_rih ) #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -522,7 +522,7 @@ INSERT_GENTFUNCCO_BASIC( packm_herm_cxk_rih, packm_cxk_rih ) #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ diff --git a/frame/1m/packm/bli_packm_thrinfo.c b/frame/1m/packm/bli_packm_thrinfo.c index a619cd981..4b57971ef 100644 --- a/frame/1m/packm/bli_packm_thrinfo.c +++ b/frame/1m/packm/bli_packm_thrinfo.c @@ -35,7 +35,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_packm_thrinfo_init +void bli_packm_thrinfo_init ( thrinfo_t* thread, thrcomm_t* ocomm, @@ -57,7 +57,7 @@ BLIS_EXPORT_BLIS void bli_packm_thrinfo_init ); } -BLIS_EXPORT_BLIS void bli_packm_thrinfo_init_single +void bli_packm_thrinfo_init_single ( thrinfo_t* thread ) diff --git a/frame/1m/packm/bli_packm_unb_var1.c b/frame/1m/packm/bli_packm_unb_var1.c index c6705b956..6e72b3e9d 100644 --- a/frame/1m/packm/bli_packm_unb_var1.c +++ b/frame/1m/packm/bli_packm_unb_var1.c @@ -125,7 +125,7 @@ void bli_packm_unb_var1 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/unpackm/bli_unpackm_blk_var1.c b/frame/1m/unpackm/bli_unpackm_blk_var1.c index 430efd45b..b2c862045 100644 --- a/frame/1m/unpackm/bli_unpackm_blk_var1.c +++ b/frame/1m/unpackm/bli_unpackm_blk_var1.c @@ -55,7 +55,7 @@ typedef void (*FUNCPTR_T)( static FUNCPTR_T GENARRAY(ftypes,unpackm_blk_var1); -BLIS_EXPORT_BLIS void bli_unpackm_blk_var1 +void bli_unpackm_blk_var1 ( obj_t* p, obj_t* c, @@ -126,7 +126,7 @@ BLIS_EXPORT_BLIS void bli_unpackm_blk_var1 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/unpackm/bli_unpackm_check.c b/frame/1m/unpackm/bli_unpackm_check.c index 19189bdbf..5bce60ed3 100644 --- a/frame/1m/unpackm/bli_unpackm_check.c +++ b/frame/1m/unpackm/bli_unpackm_check.c @@ -34,7 +34,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_unpackm_int_check +void bli_unpackm_int_check ( obj_t* p, obj_t* a, diff --git a/frame/1m/unpackm/bli_unpackm_cxk.c b/frame/1m/unpackm/bli_unpackm_cxk.c index 88dffd692..4423c41a2 100644 --- a/frame/1m/unpackm/bli_unpackm_cxk.c +++ b/frame/1m/unpackm/bli_unpackm_cxk.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjp, \ dim_t panel_dim, \ diff --git a/frame/1m/unpackm/bli_unpackm_int.c b/frame/1m/unpackm/bli_unpackm_int.c index 83b0acfbe..f4c8ab82d 100644 --- a/frame/1m/unpackm/bli_unpackm_int.c +++ b/frame/1m/unpackm/bli_unpackm_int.c @@ -34,7 +34,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_unpackm_int +void bli_unpackm_int ( obj_t* p, obj_t* a, diff --git a/frame/1m/unpackm/bli_unpackm_unb_var1.c b/frame/1m/unpackm/bli_unpackm_unb_var1.c index d7bb57e60..c1033c2cb 100644 --- a/frame/1m/unpackm/bli_unpackm_unb_var1.c +++ b/frame/1m/unpackm/bli_unpackm_unb_var1.c @@ -50,7 +50,7 @@ typedef void (*FUNCPTR_T)( static FUNCPTR_T GENARRAY(ftypes,unpackm_unb_var1); -BLIS_EXPORT_BLIS void bli_unpackm_unb_var1 +void bli_unpackm_unb_var1 ( obj_t* p, obj_t* c, @@ -98,7 +98,7 @@ BLIS_EXPORT_BLIS void bli_unpackm_unb_var1 #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname)( \ +void PASTEMAC(ch,varname)( \ doff_t diagoffp, \ uplo_t uplop, \ trans_t transp, \ diff --git a/frame/2/bli_l2_oapi.c b/frame/2/bli_l2_oapi.c index 6d4d14170..25acb4207 100644 --- a/frame/2/bli_l2_oapi.c +++ b/frame/2/bli_l2_oapi.c @@ -43,7 +43,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -116,7 +116,7 @@ GENFRONT( gemv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -182,7 +182,7 @@ GENFRONT( ger ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -256,7 +256,7 @@ GENFRONT( symv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -317,7 +317,7 @@ GENFRONT( syr ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -384,7 +384,7 @@ GENFRONT( syr2 ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ diff --git a/frame/2/bli_l2_tapi.c b/frame/2/bli_l2_tapi.c index 6b7f5cd12..f6eb6c7d9 100644 --- a/frame/2/bli_l2_tapi.c +++ b/frame/2/bli_l2_tapi.c @@ -43,7 +43,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, ftname, rvarname, cvarname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ trans_t transa, \ conj_t conjx, \ @@ -126,7 +126,7 @@ INSERT_GENTFUNC_BASIC3( gemv, gemv, gemv_unf_var1, gemv_unf_var2 ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, ftname, rvarname, cvarname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -178,7 +178,7 @@ INSERT_GENTFUNC_BASIC3( ger, ger, ger_unb_var1, ger_unb_var2 ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, ftname, conjh, rvarname, cvarname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ conj_t conja, \ @@ -255,7 +255,7 @@ INSERT_GENTFUNC_BASIC4( symv, hemv, BLIS_NO_CONJUGATE, hemv_unf_var1, hemv_unf_v #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname, ftname, conjh, rvarname, cvarname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ conj_t conjx, \ @@ -319,7 +319,7 @@ INSERT_GENTFUNCR_BASIC4( her, her, BLIS_CONJUGATE, her_unb_var1, her_unb_var2 ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, ftname, conjh, rvarname, cvarname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ conj_t conjx, \ @@ -376,7 +376,7 @@ INSERT_GENTFUNC_BASIC4( syr, her, BLIS_NO_CONJUGATE, her_unb_var1, her_unb_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, ftname, conjh, rvarname, cvarname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ conj_t conjx, \ @@ -438,7 +438,7 @@ INSERT_GENTFUNC_BASIC4( syr2, her2, BLIS_NO_CONJUGATE, her2_unf_var1, her2_unf_v #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, ftname, rvarname, cvarname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/gemv/bli_gemv_unb_var1.c b/frame/2/gemv/bli_gemv_unb_var1.c index e3d5de14c..3f5681d2b 100644 --- a/frame/2/gemv/bli_gemv_unb_var1.c +++ b/frame/2/gemv/bli_gemv_unb_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ trans_t transa, \ conj_t conjx, \ diff --git a/frame/2/gemv/bli_gemv_unb_var2.c b/frame/2/gemv/bli_gemv_unb_var2.c index 4bdad7ab2..8166aa417 100644 --- a/frame/2/gemv/bli_gemv_unb_var2.c +++ b/frame/2/gemv/bli_gemv_unb_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ trans_t transa, \ conj_t conjx, \ diff --git a/frame/2/gemv/bli_gemv_unf_var1.c b/frame/2/gemv/bli_gemv_unf_var1.c index 65e00f32f..e392e830e 100644 --- a/frame/2/gemv/bli_gemv_unf_var1.c +++ b/frame/2/gemv/bli_gemv_unf_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ trans_t transa, \ conj_t conjx, \ diff --git a/frame/2/gemv/bli_gemv_unf_var2.c b/frame/2/gemv/bli_gemv_unf_var2.c index 729826220..fe7702e4c 100644 --- a/frame/2/gemv/bli_gemv_unf_var2.c +++ b/frame/2/gemv/bli_gemv_unf_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ trans_t transa, \ conj_t conjx, \ diff --git a/frame/2/gemv/bli_gemv_var_oapi.c b/frame/2/gemv/bli_gemv_var_oapi.c index d137d21b0..2e746b417 100644 --- a/frame/2/gemv/bli_gemv_var_oapi.c +++ b/frame/2/gemv/bli_gemv_var_oapi.c @@ -37,7 +37,7 @@ #undef GENFRONT #define GENFRONT( opname, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(varname) \ +void PASTEMAC0(varname) \ ( \ obj_t* alpha, \ obj_t* a, \ diff --git a/frame/2/gemv/other/bli_gemv_front.c b/frame/2/gemv/other/bli_gemv_front.c index a7f24610c..3fd1c8cf7 100644 --- a/frame/2/gemv/other/bli_gemv_front.c +++ b/frame/2/gemv/other/bli_gemv_front.c @@ -165,7 +165,7 @@ void bli_gemv_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ trans_t transa, \ conj_t conjx, \ diff --git a/frame/2/ger/bli_ger_unb_var1.c b/frame/2/ger/bli_ger_unb_var1.c index d2af2a1b9..d6cda277e 100644 --- a/frame/2/ger/bli_ger_unb_var1.c +++ b/frame/2/ger/bli_ger_unb_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ conj_t conjx, \ conj_t conjy, \ diff --git a/frame/2/ger/bli_ger_unb_var2.c b/frame/2/ger/bli_ger_unb_var2.c index ed0ab0305..1590bfe5e 100644 --- a/frame/2/ger/bli_ger_unb_var2.c +++ b/frame/2/ger/bli_ger_unb_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ conj_t conjx, \ conj_t conjy, \ diff --git a/frame/2/ger/bli_ger_var_oapi.c b/frame/2/ger/bli_ger_var_oapi.c index 41e83fdaf..3fd95e89f 100644 --- a/frame/2/ger/bli_ger_var_oapi.c +++ b/frame/2/ger/bli_ger_var_oapi.c @@ -37,7 +37,7 @@ #undef GENFRONT #define GENFRONT( opname, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(varname) \ +void PASTEMAC0(varname) \ ( \ obj_t* alpha, \ obj_t* x, \ diff --git a/frame/2/ger/other/bli_ger_front.c b/frame/2/ger/other/bli_ger_front.c index 8ec5549b8..8f641fe2e 100644 --- a/frame/2/ger/other/bli_ger_front.c +++ b/frame/2/ger/other/bli_ger_front.c @@ -129,7 +129,7 @@ void bli_ger_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ conj_t conjy, \ diff --git a/frame/2/hemv/bli_hemv_unb_var1.c b/frame/2/hemv/bli_hemv_unb_var1.c index dd6eebb76..ea5d478be 100644 --- a/frame/2/hemv/bli_hemv_unb_var1.c +++ b/frame/2/hemv/bli_hemv_unb_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_unb_var2.c b/frame/2/hemv/bli_hemv_unb_var2.c index d75b05394..1f7346517 100644 --- a/frame/2/hemv/bli_hemv_unb_var2.c +++ b/frame/2/hemv/bli_hemv_unb_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_unb_var3.c b/frame/2/hemv/bli_hemv_unb_var3.c index c2797faf4..6573e59fc 100644 --- a/frame/2/hemv/bli_hemv_unb_var3.c +++ b/frame/2/hemv/bli_hemv_unb_var3.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_unb_var4.c b/frame/2/hemv/bli_hemv_unb_var4.c index 2b46b83e0..deabc3ab4 100644 --- a/frame/2/hemv/bli_hemv_unb_var4.c +++ b/frame/2/hemv/bli_hemv_unb_var4.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_unf_var1.c b/frame/2/hemv/bli_hemv_unf_var1.c index f95699068..d36dc0098 100644 --- a/frame/2/hemv/bli_hemv_unf_var1.c +++ b/frame/2/hemv/bli_hemv_unf_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_unf_var1a.c b/frame/2/hemv/bli_hemv_unf_var1a.c index b99f17bd1..31ab1515f 100644 --- a/frame/2/hemv/bli_hemv_unf_var1a.c +++ b/frame/2/hemv/bli_hemv_unf_var1a.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_unf_var3.c b/frame/2/hemv/bli_hemv_unf_var3.c index a1b2e984b..d8db9bc78 100644 --- a/frame/2/hemv/bli_hemv_unf_var3.c +++ b/frame/2/hemv/bli_hemv_unf_var3.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_unf_var3a.c b/frame/2/hemv/bli_hemv_unf_var3a.c index b2bd018d5..54ab0f6ce 100644 --- a/frame/2/hemv/bli_hemv_unf_var3a.c +++ b/frame/2/hemv/bli_hemv_unf_var3a.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/bli_hemv_var_oapi.c b/frame/2/hemv/bli_hemv_var_oapi.c index 8d70f8ab1..845f288c3 100644 --- a/frame/2/hemv/bli_hemv_var_oapi.c +++ b/frame/2/hemv/bli_hemv_var_oapi.c @@ -37,7 +37,7 @@ #undef GENFRONT #define GENFRONT( opname, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(varname) \ +void PASTEMAC0(varname) \ ( \ conj_t conjh, \ obj_t* alpha, \ diff --git a/frame/2/hemv/other/bli_hemv_front.c b/frame/2/hemv/other/bli_hemv_front.c index 149d8d6db..1293f6b8e 100644 --- a/frame/2/hemv/other/bli_hemv_front.c +++ b/frame/2/hemv/other/bli_hemv_front.c @@ -162,7 +162,7 @@ void bli_hemv_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploa, \ conj_t conja, \ diff --git a/frame/2/her/bli_her_unb_var1.c b/frame/2/her/bli_her_unb_var1.c index cdfd116ac..e7f718680 100644 --- a/frame/2/her/bli_her_unb_var1.c +++ b/frame/2/her/bli_her_unb_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her/bli_her_unb_var2.c b/frame/2/her/bli_her_unb_var2.c index 90d6051dd..4b39e1df0 100644 --- a/frame/2/her/bli_her_unb_var2.c +++ b/frame/2/her/bli_her_unb_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her/bli_her_var_oapi.c b/frame/2/her/bli_her_var_oapi.c index d063f368b..ffca2e71e 100644 --- a/frame/2/her/bli_her_var_oapi.c +++ b/frame/2/her/bli_her_var_oapi.c @@ -37,7 +37,7 @@ #undef GENFRONT #define GENFRONT( opname, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(varname) \ +void PASTEMAC0(varname) \ ( \ conj_t conjh, \ obj_t* alpha, \ diff --git a/frame/2/her/other/bli_her_front.c b/frame/2/her/other/bli_her_front.c index 7f1a5dce6..7753b28cf 100644 --- a/frame/2/her/other/bli_her_front.c +++ b/frame/2/her/other/bli_her_front.c @@ -137,7 +137,7 @@ void bli_her_front #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ conj_t conjx, \ diff --git a/frame/2/her2/bli_her2_unb_var1.c b/frame/2/her2/bli_her2_unb_var1.c index fdd06f26d..37423bfcb 100644 --- a/frame/2/her2/bli_her2_unb_var1.c +++ b/frame/2/her2/bli_her2_unb_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her2/bli_her2_unb_var2.c b/frame/2/her2/bli_her2_unb_var2.c index fa274f1ca..22d6de07a 100644 --- a/frame/2/her2/bli_her2_unb_var2.c +++ b/frame/2/her2/bli_her2_unb_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her2/bli_her2_unb_var3.c b/frame/2/her2/bli_her2_unb_var3.c index d176fb2af..297b9b702 100644 --- a/frame/2/her2/bli_her2_unb_var3.c +++ b/frame/2/her2/bli_her2_unb_var3.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her2/bli_her2_unb_var4.c b/frame/2/her2/bli_her2_unb_var4.c index 0ebeef77c..58adb0e70 100644 --- a/frame/2/her2/bli_her2_unb_var4.c +++ b/frame/2/her2/bli_her2_unb_var4.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her2/bli_her2_unf_var1.c b/frame/2/her2/bli_her2_unf_var1.c index 3abc1b316..a0aec48f7 100644 --- a/frame/2/her2/bli_her2_unf_var1.c +++ b/frame/2/her2/bli_her2_unf_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her2/bli_her2_unf_var4.c b/frame/2/her2/bli_her2_unf_var4.c index 799f3485f..3dea31d53 100644 --- a/frame/2/her2/bli_her2_unf_var4.c +++ b/frame/2/her2/bli_her2_unf_var4.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her2/bli_her2_var_oapi.c b/frame/2/her2/bli_her2_var_oapi.c index 22e05744e..2b26e5476 100644 --- a/frame/2/her2/bli_her2_var_oapi.c +++ b/frame/2/her2/bli_her2_var_oapi.c @@ -37,7 +37,7 @@ #undef GENFRONT #define GENFRONT( opname, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(varname) \ +void PASTEMAC0(varname) \ ( \ conj_t conjh, \ obj_t* alpha, \ diff --git a/frame/2/her2/other/bli_her2_front.c b/frame/2/her2/other/bli_her2_front.c index 65bb2ab55..21c9027b5 100644 --- a/frame/2/her2/other/bli_her2_front.c +++ b/frame/2/her2/other/bli_her2_front.c @@ -154,7 +154,7 @@ void bli_her2_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ conj_t conjx, \ diff --git a/frame/2/symv/other/bli_symv_front.c b/frame/2/symv/other/bli_symv_front.c index ffce1bac5..bac3f2243 100644 --- a/frame/2/symv/other/bli_symv_front.c +++ b/frame/2/symv/other/bli_symv_front.c @@ -163,7 +163,7 @@ void bli_symv_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploa, \ conj_t conja, \ diff --git a/frame/2/syr/other/bli_syr_front.c b/frame/2/syr/other/bli_syr_front.c index 93ac6e6e9..efbd24cf8 100644 --- a/frame/2/syr/other/bli_syr_front.c +++ b/frame/2/syr/other/bli_syr_front.c @@ -139,7 +139,7 @@ void bli_syr_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ conj_t conjx, \ diff --git a/frame/2/syr2/other/bli_syr2_front.c b/frame/2/syr2/other/bli_syr2_front.c index 547ff3f06..59a36f478 100644 --- a/frame/2/syr2/other/bli_syr2_front.c +++ b/frame/2/syr2/other/bli_syr2_front.c @@ -147,7 +147,7 @@ void bli_syr2_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ conj_t conjx, \ diff --git a/frame/2/trmv/bli_trmv_unb_var1.c b/frame/2/trmv/bli_trmv_unb_var1.c index e1b8711b5..31bfa6a83 100644 --- a/frame/2/trmv/bli_trmv_unb_var1.c +++ b/frame/2/trmv/bli_trmv_unb_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trmv/bli_trmv_unb_var2.c b/frame/2/trmv/bli_trmv_unb_var2.c index f6ab264a0..00d4d95f3 100644 --- a/frame/2/trmv/bli_trmv_unb_var2.c +++ b/frame/2/trmv/bli_trmv_unb_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trmv/bli_trmv_unf_var1.c b/frame/2/trmv/bli_trmv_unf_var1.c index 032856dfe..6dc3cea36 100644 --- a/frame/2/trmv/bli_trmv_unf_var1.c +++ b/frame/2/trmv/bli_trmv_unf_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trmv/bli_trmv_unf_var2.c b/frame/2/trmv/bli_trmv_unf_var2.c index 81ad30769..8bbd51820 100644 --- a/frame/2/trmv/bli_trmv_unf_var2.c +++ b/frame/2/trmv/bli_trmv_unf_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trmv/bli_trmv_var_oapi.c b/frame/2/trmv/bli_trmv_var_oapi.c index 38c5becb1..931eb2abb 100644 --- a/frame/2/trmv/bli_trmv_var_oapi.c +++ b/frame/2/trmv/bli_trmv_var_oapi.c @@ -37,7 +37,7 @@ #undef GENFRONT #define GENFRONT( opname, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(varname) \ +void PASTEMAC0(varname) \ ( \ obj_t* alpha, \ obj_t* a, \ diff --git a/frame/2/trmv/other/bli_trmv_front.c b/frame/2/trmv/other/bli_trmv_front.c index 0b361b8a2..698f48710 100644 --- a/frame/2/trmv/other/bli_trmv_front.c +++ b/frame/2/trmv/other/bli_trmv_front.c @@ -137,7 +137,7 @@ void bli_trmv_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trsv/bli_trsv_unb_var1.c b/frame/2/trsv/bli_trsv_unb_var1.c index 9b24333d3..c7493e33d 100644 --- a/frame/2/trsv/bli_trsv_unb_var1.c +++ b/frame/2/trsv/bli_trsv_unb_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trsv/bli_trsv_unb_var2.c b/frame/2/trsv/bli_trsv_unb_var2.c index def6d92e0..a78e7eef0 100644 --- a/frame/2/trsv/bli_trsv_unb_var2.c +++ b/frame/2/trsv/bli_trsv_unb_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trsv/bli_trsv_unf_var1.c b/frame/2/trsv/bli_trsv_unf_var1.c index df6913bbc..3b03b43e5 100644 --- a/frame/2/trsv/bli_trsv_unf_var1.c +++ b/frame/2/trsv/bli_trsv_unf_var1.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trsv/bli_trsv_unf_var2.c b/frame/2/trsv/bli_trsv_unf_var2.c index 2e9deea47..10741d291 100644 --- a/frame/2/trsv/bli_trsv_unf_var2.c +++ b/frame/2/trsv/bli_trsv_unf_var2.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trsv/bli_trsv_var_oapi.c b/frame/2/trsv/bli_trsv_var_oapi.c index 3d1670335..4cf346acf 100644 --- a/frame/2/trsv/bli_trsv_var_oapi.c +++ b/frame/2/trsv/bli_trsv_var_oapi.c @@ -37,7 +37,7 @@ #undef GENFRONT #define GENFRONT( opname, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(varname) \ +void PASTEMAC0(varname) \ ( \ obj_t* alpha, \ obj_t* a, \ diff --git a/frame/2/trsv/other/bli_trsv_front.c b/frame/2/trsv/other/bli_trsv_front.c index 478dc94db..90a152e89 100644 --- a/frame/2/trsv/other/bli_trsv_front.c +++ b/frame/2/trsv/other/bli_trsv_front.c @@ -133,7 +133,7 @@ void bli_trsv_front #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/3/bli_l3_oapi.c b/frame/3/bli_l3_oapi.c index 5792638ef..d9ba27369 100644 --- a/frame/3/bli_l3_oapi.c +++ b/frame/3/bli_l3_oapi.c @@ -43,7 +43,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -88,7 +88,7 @@ GENFRONT( syr2k ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ side_t side, \ obj_t* alpha, \ @@ -132,7 +132,7 @@ GENFRONT( trmm3 ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -172,7 +172,7 @@ GENFRONT( syrk ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ side_t side, \ obj_t* alpha, \ diff --git a/frame/3/bli_l3_prune.c b/frame/3/bli_l3_prune.c index 02f6d4f55..fa008fd15 100644 --- a/frame/3/bli_l3_prune.c +++ b/frame/3/bli_l3_prune.c @@ -56,7 +56,7 @@ void bli_l3_prune_unref_mparts_m #undef GENFRONT #define GENFRONT( dim ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(l3_prune_unref_mparts_,dim) \ +void PASTEMAC(l3_prune_unref_mparts_,dim) \ ( \ obj_t* a, \ obj_t* b, \ @@ -82,7 +82,7 @@ GENFRONT( k ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_m) \ +void PASTEMAC(opname,_prune_unref_mparts_m) \ ( \ obj_t* a, \ obj_t* b, \ @@ -91,7 +91,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_m) \ { \ /* No pruning is necessary for gemm. */ \ } \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_n) \ +void PASTEMAC(opname,_prune_unref_mparts_n) \ ( \ obj_t* a, \ obj_t* b, \ @@ -100,7 +100,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_n) \ { \ /* No pruning is necessary for gemm. */ \ } \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_k) \ +void PASTEMAC(opname,_prune_unref_mparts_k) \ ( \ obj_t* a, \ obj_t* b, \ @@ -117,7 +117,7 @@ GENFRONT( gemm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_m) \ +void PASTEMAC(opname,_prune_unref_mparts_m) \ ( \ obj_t* a, \ obj_t* ah, \ @@ -129,7 +129,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_m) \ subpartition of A accordingly. */ \ bli_prune_unref_mparts( c, BLIS_M, a, BLIS_M ); \ } \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_n) \ +void PASTEMAC(opname,_prune_unref_mparts_n) \ ( \ obj_t* a, \ obj_t* ah, \ @@ -141,7 +141,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_n) \ subpartition of Ah accordingly. */ \ bli_prune_unref_mparts( c, BLIS_N, ah, BLIS_N ); \ } \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_k) \ +void PASTEMAC(opname,_prune_unref_mparts_k) \ ( \ obj_t* a, \ obj_t* ah, \ @@ -159,7 +159,7 @@ GENFRONT( herk ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_m) \ +void PASTEMAC(opname,_prune_unref_mparts_m) \ ( \ obj_t* a, \ obj_t* b, \ @@ -171,7 +171,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_m) \ subpartition of C accordingly. */ \ bli_prune_unref_mparts( a, BLIS_M, c, BLIS_M ); \ } \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_n) \ +void PASTEMAC(opname,_prune_unref_mparts_n) \ ( \ obj_t* a, \ obj_t* b, \ @@ -183,7 +183,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_n) \ subpartition of C accordingly. */ \ bli_prune_unref_mparts( b, BLIS_N, c, BLIS_N ); \ } \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_prune_unref_mparts_k) \ +void PASTEMAC(opname,_prune_unref_mparts_k) \ ( \ obj_t* a, \ obj_t* b, \ diff --git a/frame/3/bli_l3_tapi.c b/frame/3/bli_l3_tapi.c index 318776ae7..7b7f758ab 100644 --- a/frame/3/bli_l3_tapi.c +++ b/frame/3/bli_l3_tapi.c @@ -44,7 +44,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ trans_t transa, \ trans_t transb, \ @@ -105,7 +105,7 @@ INSERT_GENTFUNC_BASIC0( gemm ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, struca ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ side_t side, \ uplo_t uploa, \ @@ -172,7 +172,7 @@ INSERT_GENTFUNC_BASIC( symm, BLIS_SYMMETRIC ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -229,7 +229,7 @@ INSERT_GENTFUNCR_BASIC0( herk ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -294,7 +294,7 @@ INSERT_GENTFUNCR_BASIC0( her2k ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -350,7 +350,7 @@ INSERT_GENTFUNC_BASIC0( syrk ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -414,7 +414,7 @@ INSERT_GENTFUNC_BASIC0( syr2k ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ side_t side, \ uplo_t uploa, \ @@ -482,7 +482,7 @@ INSERT_GENTFUNC_BASIC0( trmm3 ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ side_t side, \ uplo_t uploa, \ diff --git a/frame/3/bli_l3_ukr_oapi.c b/frame/3/bli_l3_ukr_oapi.c index 5b10cf6ab..a8191b1aa 100644 --- a/frame/3/bli_l3_ukr_oapi.c +++ b/frame/3/bli_l3_ukr_oapi.c @@ -37,7 +37,7 @@ #undef GENFRONT #define GENFRONT( tname, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -92,7 +92,7 @@ GENFRONT( gemm, gemm_ukernel ) #undef GENFRONT #define GENFRONT( tname, opname, opnamel, opnameu ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* alpha, \ obj_t* a1x, \ @@ -175,7 +175,7 @@ GENFRONT( gemmtrsm, gemmtrsm_ukernel, gemmtrsm_l_ukernel, gemmtrsm_u_ukernel ) #undef GENFRONT #define GENFRONT( tname, opname, opnamel, opnameu ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* a, \ obj_t* b, \ diff --git a/frame/3/bli_l3_ukr_tapi.c b/frame/3/bli_l3_ukr_tapi.c index 3f17ff6a7..67e33175b 100644 --- a/frame/3/bli_l3_ukr_tapi.c +++ b/frame/3/bli_l3_ukr_tapi.c @@ -37,7 +37,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, tname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ dim_t k, \ ctype* restrict alpha, \ @@ -76,7 +76,7 @@ INSERT_GENTFUNC_BASIC2( gemm_ukernel, gemm, BLIS_GEMM_UKR ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, tname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ dim_t k, \ ctype* restrict alpha, \ @@ -118,7 +118,7 @@ INSERT_GENTFUNC_BASIC2( gemmtrsm_u_ukernel, gemmtrsm, BLIS_GEMMTRSM_U_UKR ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, tname, kerid ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ ctype* restrict a, \ ctype* restrict b, \ diff --git a/frame/3/gemm/bli_gemm_cntl.c b/frame/3/gemm/bli_gemm_cntl.c index 606f671b1..fc0a4a786 100644 --- a/frame/3/gemm/bli_gemm_cntl.c +++ b/frame/3/gemm/bli_gemm_cntl.c @@ -253,7 +253,7 @@ cntl_t* bli_gemmpb_cntl_create // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_gemm_cntl_free +void bli_gemm_cntl_free ( rntm_t* rntm, cntl_t* cntl, diff --git a/frame/3/gemm/bli_gemm_front.c b/frame/3/gemm/bli_gemm_front.c index 4c3bbe4db..20928e198 100644 --- a/frame/3/gemm/bli_gemm_front.c +++ b/frame/3/gemm/bli_gemm_front.c @@ -35,7 +35,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_gemm_front +void bli_gemm_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/gemm/bli_gemm_int.c b/frame/3/gemm/bli_gemm_int.c index a28ceeb32..5128bea69 100644 --- a/frame/3/gemm/bli_gemm_int.c +++ b/frame/3/gemm/bli_gemm_int.c @@ -35,7 +35,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_gemm_int +void bli_gemm_int ( obj_t* alpha, obj_t* a, diff --git a/frame/3/gemm/bli_gemm_ker_var2.c b/frame/3/gemm/bli_gemm_ker_var2.c index e6c5de078..e9b43f2ac 100644 --- a/frame/3/gemm/bli_gemm_ker_var2.c +++ b/frame/3/gemm/bli_gemm_ker_var2.c @@ -191,7 +191,7 @@ void bli_gemm_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/bli_gemm_ker_var2_md.c b/frame/3/gemm/bli_gemm_ker_var2_md.c index 6badf4a08..3428be9b4 100644 --- a/frame/3/gemm/bli_gemm_ker_var2_md.c +++ b/frame/3/gemm/bli_gemm_ker_var2_md.c @@ -192,7 +192,7 @@ void bli_gemm_ker_var2_md #undef GENTFUNC2 #define GENTFUNC2( ctype_c, ctype_e, chc, che, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(chc,che,varname) \ +void PASTEMAC2(chc,che,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/bli_gemm_md_c2r_ref.c b/frame/3/gemm/bli_gemm_md_c2r_ref.c index ff4d0dee7..6198d85b2 100644 --- a/frame/3/gemm/bli_gemm_md_c2r_ref.c +++ b/frame/3/gemm/bli_gemm_md_c2r_ref.c @@ -39,7 +39,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ctype, ctype_r, ch, chr, opname, suf ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,suf) \ +void PASTEMAC2(ch,opname,suf) \ ( \ dim_t k, \ ctype* restrict alpha, \ diff --git a/frame/3/gemm/ind/bli_gemm4mb_ker_var2.c b/frame/3/gemm/ind/bli_gemm4mb_ker_var2.c index ab3f7cc98..cbc3a1929 100644 --- a/frame/3/gemm/ind/bli_gemm4mb_ker_var2.c +++ b/frame/3/gemm/ind/bli_gemm4mb_ker_var2.c @@ -138,7 +138,7 @@ void bli_gemm4mb_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/ind/old/bli_gemm3m2_ker_var2.c b/frame/3/gemm/ind/old/bli_gemm3m2_ker_var2.c index 34bf0c656..09830753e 100644 --- a/frame/3/gemm/ind/old/bli_gemm3m2_ker_var2.c +++ b/frame/3/gemm/ind/old/bli_gemm3m2_ker_var2.c @@ -134,7 +134,7 @@ void bli_gemm3m2_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/other/bli_gemm_ker_var2.c b/frame/3/gemm/other/bli_gemm_ker_var2.c index a737e5b45..73ca61181 100644 --- a/frame/3/gemm/other/bli_gemm_ker_var2.c +++ b/frame/3/gemm/other/bli_gemm_ker_var2.c @@ -159,7 +159,7 @@ void bli_gemm_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/other/bli_gemm_ker_var2rr.c b/frame/3/gemm/other/bli_gemm_ker_var2rr.c index b450bb0e7..f79f1311e 100644 --- a/frame/3/gemm/other/bli_gemm_ker_var2rr.c +++ b/frame/3/gemm/other/bli_gemm_ker_var2rr.c @@ -160,7 +160,7 @@ void bli_gemm_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/other/bli_gemm_ker_var2sl.c b/frame/3/gemm/other/bli_gemm_ker_var2sl.c index b63e1ba9e..48ef2791f 100644 --- a/frame/3/gemm/other/bli_gemm_ker_var2sl.c +++ b/frame/3/gemm/other/bli_gemm_ker_var2sl.c @@ -160,7 +160,7 @@ void bli_gemm_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/other/bli_gemm_ker_var5.c b/frame/3/gemm/other/bli_gemm_ker_var5.c index 2298e631c..0d0c914d8 100644 --- a/frame/3/gemm/other/bli_gemm_ker_var5.c +++ b/frame/3/gemm/other/bli_gemm_ker_var5.c @@ -126,7 +126,7 @@ void bli_gemm_ker_var5( obj_t* a, #undef GENTFUNC #define GENTFUNC( ctype, ch, varname, ukrtype ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname)( \ +void PASTEMAC(ch,varname)( \ dim_t m, \ dim_t n, \ dim_t k, \ diff --git a/frame/3/hemm/bli_hemm_front.c b/frame/3/hemm/bli_hemm_front.c index 8202d5cf0..5949a2e6c 100644 --- a/frame/3/hemm/bli_hemm_front.c +++ b/frame/3/hemm/bli_hemm_front.c @@ -34,7 +34,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_hemm_front +void bli_hemm_front ( side_t side, obj_t* alpha, diff --git a/frame/3/her2k/bli_her2k_front.c b/frame/3/her2k/bli_her2k_front.c index 234b04e16..a99aa05c8 100644 --- a/frame/3/her2k/bli_her2k_front.c +++ b/frame/3/her2k/bli_her2k_front.c @@ -34,7 +34,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_her2k_front +void bli_her2k_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/herk/bli_herk_front.c b/frame/3/herk/bli_herk_front.c index 40020afb9..be0118f18 100644 --- a/frame/3/herk/bli_herk_front.c +++ b/frame/3/herk/bli_herk_front.c @@ -34,7 +34,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_herk_front +void bli_herk_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/herk/bli_herk_l_ker_var2.c b/frame/3/herk/bli_herk_l_ker_var2.c index 8bed4866b..d09424d9a 100644 --- a/frame/3/herk/bli_herk_l_ker_var2.c +++ b/frame/3/herk/bli_herk_l_ker_var2.c @@ -143,7 +143,7 @@ void bli_herk_l_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/bli_herk_u_ker_var2.c b/frame/3/herk/bli_herk_u_ker_var2.c index a88895e97..51fd5d4d6 100644 --- a/frame/3/herk/bli_herk_u_ker_var2.c +++ b/frame/3/herk/bli_herk_u_ker_var2.c @@ -143,7 +143,7 @@ void bli_herk_u_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/other/bli_herk_l_ker_var2.1looprr.c b/frame/3/herk/other/bli_herk_l_ker_var2.1looprr.c index cbadd8add..7238716a7 100644 --- a/frame/3/herk/other/bli_herk_l_ker_var2.1looprr.c +++ b/frame/3/herk/other/bli_herk_l_ker_var2.1looprr.c @@ -143,7 +143,7 @@ void bli_herk_l_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/other/bli_herk_l_ker_var2.c b/frame/3/herk/other/bli_herk_l_ker_var2.c index 9d65acb03..650acf0d7 100644 --- a/frame/3/herk/other/bli_herk_l_ker_var2.c +++ b/frame/3/herk/other/bli_herk_l_ker_var2.c @@ -143,7 +143,7 @@ void bli_herk_l_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/other/bli_herk_l_ker_var2rr.c b/frame/3/herk/other/bli_herk_l_ker_var2rr.c index f1eeaf86e..19edea32b 100644 --- a/frame/3/herk/other/bli_herk_l_ker_var2rr.c +++ b/frame/3/herk/other/bli_herk_l_ker_var2rr.c @@ -146,7 +146,7 @@ void bli_herk_l_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/other/bli_herk_l_ker_var2sl.c b/frame/3/herk/other/bli_herk_l_ker_var2sl.c index 1be759999..68e9de181 100644 --- a/frame/3/herk/other/bli_herk_l_ker_var2sl.c +++ b/frame/3/herk/other/bli_herk_l_ker_var2sl.c @@ -146,7 +146,7 @@ void bli_herk_l_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/other/bli_herk_u_ker_var2.1looprr.c b/frame/3/herk/other/bli_herk_u_ker_var2.1looprr.c index 120076dde..f1b191a7e 100644 --- a/frame/3/herk/other/bli_herk_u_ker_var2.1looprr.c +++ b/frame/3/herk/other/bli_herk_u_ker_var2.1looprr.c @@ -143,7 +143,7 @@ void bli_herk_u_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/other/bli_herk_u_ker_var2.c b/frame/3/herk/other/bli_herk_u_ker_var2.c index 5f624ddf4..7fbc90fed 100644 --- a/frame/3/herk/other/bli_herk_u_ker_var2.c +++ b/frame/3/herk/other/bli_herk_u_ker_var2.c @@ -143,7 +143,7 @@ void bli_herk_u_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/other/bli_herk_u_ker_var2rr.c b/frame/3/herk/other/bli_herk_u_ker_var2rr.c index 98dce43d4..1643bbc39 100644 --- a/frame/3/herk/other/bli_herk_u_ker_var2rr.c +++ b/frame/3/herk/other/bli_herk_u_ker_var2rr.c @@ -146,7 +146,7 @@ void bli_herk_u_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/herk/other/bli_herk_u_ker_var2sl.c b/frame/3/herk/other/bli_herk_u_ker_var2sl.c index 7c5d1be9c..24db2a4a3 100644 --- a/frame/3/herk/other/bli_herk_u_ker_var2sl.c +++ b/frame/3/herk/other/bli_herk_u_ker_var2sl.c @@ -146,7 +146,7 @@ void bli_herk_u_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/symm/bli_symm_front.c b/frame/3/symm/bli_symm_front.c index cb59e1657..820c26fd1 100644 --- a/frame/3/symm/bli_symm_front.c +++ b/frame/3/symm/bli_symm_front.c @@ -34,7 +34,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_symm_front +void bli_symm_front ( side_t side, obj_t* alpha, diff --git a/frame/3/syr2k/bli_syr2k_front.c b/frame/3/syr2k/bli_syr2k_front.c index 77300ba3d..3ccd28c5c 100644 --- a/frame/3/syr2k/bli_syr2k_front.c +++ b/frame/3/syr2k/bli_syr2k_front.c @@ -34,7 +34,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_syr2k_front +void bli_syr2k_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/syrk/bli_syrk_front.c b/frame/3/syrk/bli_syrk_front.c index ff800b1a5..fbf44d80e 100644 --- a/frame/3/syrk/bli_syrk_front.c +++ b/frame/3/syrk/bli_syrk_front.c @@ -35,7 +35,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_syrk_front +void bli_syrk_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/trmm/bli_trmm_front.c b/frame/3/trmm/bli_trmm_front.c index 0f965af49..fa9a6389d 100644 --- a/frame/3/trmm/bli_trmm_front.c +++ b/frame/3/trmm/bli_trmm_front.c @@ -35,7 +35,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_trmm_front +void bli_trmm_front ( side_t side, obj_t* alpha, diff --git a/frame/3/trmm/bli_trmm_ll_ker_var2.c b/frame/3/trmm/bli_trmm_ll_ker_var2.c index 940bcab9e..5c7a7bcd0 100644 --- a/frame/3/trmm/bli_trmm_ll_ker_var2.c +++ b/frame/3/trmm/bli_trmm_ll_ker_var2.c @@ -137,7 +137,7 @@ void bli_trmm_ll_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trmm/bli_trmm_lu_ker_var2.c b/frame/3/trmm/bli_trmm_lu_ker_var2.c index c45225240..06705da44 100644 --- a/frame/3/trmm/bli_trmm_lu_ker_var2.c +++ b/frame/3/trmm/bli_trmm_lu_ker_var2.c @@ -137,7 +137,7 @@ void bli_trmm_lu_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trmm/bli_trmm_rl_ker_var2.c b/frame/3/trmm/bli_trmm_rl_ker_var2.c index 40c177871..9a17ed644 100644 --- a/frame/3/trmm/bli_trmm_rl_ker_var2.c +++ b/frame/3/trmm/bli_trmm_rl_ker_var2.c @@ -137,7 +137,7 @@ void bli_trmm_rl_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trmm/bli_trmm_ru_ker_var2.c b/frame/3/trmm/bli_trmm_ru_ker_var2.c index e3816d9cc..1062b95d8 100644 --- a/frame/3/trmm/bli_trmm_ru_ker_var2.c +++ b/frame/3/trmm/bli_trmm_ru_ker_var2.c @@ -137,7 +137,7 @@ void bli_trmm_ru_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_ll_ker_var2.c b/frame/3/trmm/other/bli_trmm_ll_ker_var2.c index 7b30179b9..1e5f9a9f4 100644 --- a/frame/3/trmm/other/bli_trmm_ll_ker_var2.c +++ b/frame/3/trmm/other/bli_trmm_ll_ker_var2.c @@ -137,7 +137,7 @@ void bli_trmm_ll_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_ll_ker_var2rr.c b/frame/3/trmm/other/bli_trmm_ll_ker_var2rr.c index bfcee0dc3..3b2575f66 100644 --- a/frame/3/trmm/other/bli_trmm_ll_ker_var2rr.c +++ b/frame/3/trmm/other/bli_trmm_ll_ker_var2rr.c @@ -140,7 +140,7 @@ void bli_trmm_ll_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_ll_ker_var2sl.c b/frame/3/trmm/other/bli_trmm_ll_ker_var2sl.c index 69e16f1c3..1dbd0053a 100644 --- a/frame/3/trmm/other/bli_trmm_ll_ker_var2sl.c +++ b/frame/3/trmm/other/bli_trmm_ll_ker_var2sl.c @@ -140,7 +140,7 @@ void bli_trmm_ll_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_lu_ker_var2.c b/frame/3/trmm/other/bli_trmm_lu_ker_var2.c index 0274fe7c3..17d2f9a2f 100644 --- a/frame/3/trmm/other/bli_trmm_lu_ker_var2.c +++ b/frame/3/trmm/other/bli_trmm_lu_ker_var2.c @@ -137,7 +137,7 @@ void bli_trmm_lu_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_lu_ker_var2rr.c b/frame/3/trmm/other/bli_trmm_lu_ker_var2rr.c index 2e128929c..f1a586ce6 100644 --- a/frame/3/trmm/other/bli_trmm_lu_ker_var2rr.c +++ b/frame/3/trmm/other/bli_trmm_lu_ker_var2rr.c @@ -140,7 +140,7 @@ void bli_trmm_lu_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_lu_ker_var2sl.c b/frame/3/trmm/other/bli_trmm_lu_ker_var2sl.c index ca1f44961..26806220a 100644 --- a/frame/3/trmm/other/bli_trmm_lu_ker_var2sl.c +++ b/frame/3/trmm/other/bli_trmm_lu_ker_var2sl.c @@ -140,7 +140,7 @@ void bli_trmm_lu_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_rl_ker_var2.c b/frame/3/trmm/other/bli_trmm_rl_ker_var2.c index fb1ab36eb..d856cc383 100644 --- a/frame/3/trmm/other/bli_trmm_rl_ker_var2.c +++ b/frame/3/trmm/other/bli_trmm_rl_ker_var2.c @@ -137,7 +137,7 @@ void bli_trmm_rl_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_rl_ker_var2rr.c b/frame/3/trmm/other/bli_trmm_rl_ker_var2rr.c index 9f86aeefa..80350b401 100644 --- a/frame/3/trmm/other/bli_trmm_rl_ker_var2rr.c +++ b/frame/3/trmm/other/bli_trmm_rl_ker_var2rr.c @@ -140,7 +140,7 @@ void bli_trmm_rl_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_rl_ker_var2sl.c b/frame/3/trmm/other/bli_trmm_rl_ker_var2sl.c index e52e887c2..a44942da6 100644 --- a/frame/3/trmm/other/bli_trmm_rl_ker_var2sl.c +++ b/frame/3/trmm/other/bli_trmm_rl_ker_var2sl.c @@ -140,7 +140,7 @@ void bli_trmm_rl_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_ru_ker_var2.c b/frame/3/trmm/other/bli_trmm_ru_ker_var2.c index 6ec23fa78..120974ef0 100644 --- a/frame/3/trmm/other/bli_trmm_ru_ker_var2.c +++ b/frame/3/trmm/other/bli_trmm_ru_ker_var2.c @@ -137,7 +137,7 @@ void bli_trmm_ru_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_ru_ker_var2rr.c b/frame/3/trmm/other/bli_trmm_ru_ker_var2rr.c index 7073031ad..45a7b5628 100644 --- a/frame/3/trmm/other/bli_trmm_ru_ker_var2rr.c +++ b/frame/3/trmm/other/bli_trmm_ru_ker_var2rr.c @@ -140,7 +140,7 @@ void bli_trmm_ru_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trmm/other/bli_trmm_ru_ker_var2sl.c b/frame/3/trmm/other/bli_trmm_ru_ker_var2sl.c index e67a61fb9..d2b4744e6 100644 --- a/frame/3/trmm/other/bli_trmm_ru_ker_var2sl.c +++ b/frame/3/trmm/other/bli_trmm_ru_ker_var2sl.c @@ -140,7 +140,7 @@ void bli_trmm_ru_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trmm3/bli_trmm3_front.c b/frame/3/trmm3/bli_trmm3_front.c index ff508d0b5..39067ac0b 100644 --- a/frame/3/trmm3/bli_trmm3_front.c +++ b/frame/3/trmm3/bli_trmm3_front.c @@ -34,7 +34,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_trmm3_front +void bli_trmm3_front ( side_t side, obj_t* alpha, diff --git a/frame/3/trsm/bli_trsm_cntl.c b/frame/3/trsm/bli_trsm_cntl.c index 42d9b257a..ff2f18a1f 100644 --- a/frame/3/trsm/bli_trsm_cntl.c +++ b/frame/3/trsm/bli_trsm_cntl.c @@ -301,7 +301,7 @@ cntl_t* bli_trsm_r_cntl_create return trsm_cntl_vl_mm; } -BLIS_EXPORT_BLIS void bli_trsm_cntl_free +void bli_trsm_cntl_free ( rntm_t* rntm, cntl_t* cntl, diff --git a/frame/3/trsm/bli_trsm_front.c b/frame/3/trsm/bli_trsm_front.c index 9ce6948cb..a69f4b76c 100644 --- a/frame/3/trsm/bli_trsm_front.c +++ b/frame/3/trsm/bli_trsm_front.c @@ -35,7 +35,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_trsm_front +void bli_trsm_front ( side_t side, obj_t* alpha, diff --git a/frame/3/trsm/bli_trsm_int.c b/frame/3/trsm/bli_trsm_int.c index c94b70ec3..dc39e69e0 100644 --- a/frame/3/trsm/bli_trsm_int.c +++ b/frame/3/trsm/bli_trsm_int.c @@ -34,7 +34,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_trsm_int +void bli_trsm_int ( obj_t* alpha, obj_t* a, diff --git a/frame/3/trsm/bli_trsm_ll_ker_var2.c b/frame/3/trsm/bli_trsm_ll_ker_var2.c index e856cad01..0f69057ae 100644 --- a/frame/3/trsm/bli_trsm_ll_ker_var2.c +++ b/frame/3/trsm/bli_trsm_ll_ker_var2.c @@ -140,7 +140,7 @@ void bli_trsm_ll_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trsm/bli_trsm_lu_ker_var2.c b/frame/3/trsm/bli_trsm_lu_ker_var2.c index 681287df3..f2cb62608 100644 --- a/frame/3/trsm/bli_trsm_lu_ker_var2.c +++ b/frame/3/trsm/bli_trsm_lu_ker_var2.c @@ -140,7 +140,7 @@ void bli_trsm_lu_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trsm/bli_trsm_rl_ker_var2.c b/frame/3/trsm/bli_trsm_rl_ker_var2.c index 6f6f8c2e5..1508cd596 100644 --- a/frame/3/trsm/bli_trsm_rl_ker_var2.c +++ b/frame/3/trsm/bli_trsm_rl_ker_var2.c @@ -140,7 +140,7 @@ void bli_trsm_rl_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trsm/bli_trsm_ru_ker_var2.c b/frame/3/trsm/bli_trsm_ru_ker_var2.c index 608b99160..54288a04d 100644 --- a/frame/3/trsm/bli_trsm_ru_ker_var2.c +++ b/frame/3/trsm/bli_trsm_ru_ker_var2.c @@ -140,7 +140,7 @@ void bli_trsm_ru_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trsm/other/bli_trsm_ll_ker_var2.c b/frame/3/trsm/other/bli_trsm_ll_ker_var2.c index 7d7b40a8f..ebd53476d 100644 --- a/frame/3/trsm/other/bli_trsm_ll_ker_var2.c +++ b/frame/3/trsm/other/bli_trsm_ll_ker_var2.c @@ -140,7 +140,7 @@ void bli_trsm_ll_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trsm/other/bli_trsm_ll_ker_var2rr.c b/frame/3/trsm/other/bli_trsm_ll_ker_var2rr.c index fd6be7ac2..eb7435b4a 100644 --- a/frame/3/trsm/other/bli_trsm_ll_ker_var2rr.c +++ b/frame/3/trsm/other/bli_trsm_ll_ker_var2rr.c @@ -143,7 +143,7 @@ void bli_trsm_ll_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trsm/other/bli_trsm_ll_ker_var2sl.c b/frame/3/trsm/other/bli_trsm_ll_ker_var2sl.c index 63f87ac94..df9235740 100644 --- a/frame/3/trsm/other/bli_trsm_ll_ker_var2sl.c +++ b/frame/3/trsm/other/bli_trsm_ll_ker_var2sl.c @@ -143,7 +143,7 @@ void bli_trsm_ll_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trsm/other/bli_trsm_lu_ker_var2.c b/frame/3/trsm/other/bli_trsm_lu_ker_var2.c index da7baa3d6..97222ffe4 100644 --- a/frame/3/trsm/other/bli_trsm_lu_ker_var2.c +++ b/frame/3/trsm/other/bli_trsm_lu_ker_var2.c @@ -140,7 +140,7 @@ void bli_trsm_lu_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trsm/other/bli_trsm_lu_ker_var2rr.c b/frame/3/trsm/other/bli_trsm_lu_ker_var2rr.c index 183fc90a1..107aae742 100644 --- a/frame/3/trsm/other/bli_trsm_lu_ker_var2rr.c +++ b/frame/3/trsm/other/bli_trsm_lu_ker_var2rr.c @@ -143,7 +143,7 @@ void bli_trsm_lu_ker_var2rr #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trsm/other/bli_trsm_lu_ker_var2sl.c b/frame/3/trsm/other/bli_trsm_lu_ker_var2sl.c index d141e4b11..ee18058a4 100644 --- a/frame/3/trsm/other/bli_trsm_lu_ker_var2sl.c +++ b/frame/3/trsm/other/bli_trsm_lu_ker_var2sl.c @@ -143,7 +143,7 @@ void bli_trsm_lu_ker_var2sl #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffa, \ pack_t schema_a, \ diff --git a/frame/3/trsm/other/bli_trsm_rl_ker_var2.c b/frame/3/trsm/other/bli_trsm_rl_ker_var2.c index c956eefa7..0fff5cc11 100644 --- a/frame/3/trsm/other/bli_trsm_rl_ker_var2.c +++ b/frame/3/trsm/other/bli_trsm_rl_ker_var2.c @@ -140,7 +140,7 @@ void bli_trsm_rl_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/3/trsm/other/bli_trsm_ru_ker_var2.c b/frame/3/trsm/other/bli_trsm_ru_ker_var2.c index 0acbac041..f4023ace2 100644 --- a/frame/3/trsm/other/bli_trsm_ru_ker_var2.c +++ b/frame/3/trsm/other/bli_trsm_ru_ker_var2.c @@ -140,7 +140,7 @@ void bli_trsm_ru_ker_var2 #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffb, \ pack_t schema_a, \ diff --git a/frame/base/bli_error.c b/frame/base/bli_error.c index eb11bce92..54677ae27 100644 --- a/frame/base/bli_error.c +++ b/frame/base/bli_error.c @@ -143,7 +143,7 @@ errlev_t bli_error_checking_level( void ) return bli_err_chk_level; } -BLIS_EXPORT_BLIS void bli_error_checking_level_set( errlev_t new_level ) +void bli_error_checking_level_set( errlev_t new_level ) { err_t e_val; diff --git a/frame/base/bli_getopt.c b/frame/base/bli_getopt.c index 2d39f2e3a..184439db5 100644 --- a/frame/base/bli_getopt.c +++ b/frame/base/bli_getopt.c @@ -37,7 +37,7 @@ static const char OPT_MARKER = '-'; -BLIS_EXPORT_BLIS void bli_getopt_init_state( int opterr, getopt_t* state ) +void bli_getopt_init_state( int opterr, getopt_t* state ) { state->optarg = NULL; state->optind = 1; diff --git a/frame/base/bli_machval.c b/frame/base/bli_machval.c index 495d20b01..e26c5a4d8 100644 --- a/frame/base/bli_machval.c +++ b/frame/base/bli_machval.c @@ -72,7 +72,7 @@ void bli_machval( machval_t mval, #undef GENTFUNCR #define GENTFUNCR( ctype_v, ctype_vr, chv, chvr, opname, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(chv,opname) \ +void PASTEMAC(chv,opname) \ ( \ machval_t mval, \ void* v \ diff --git a/frame/base/bli_malloc.c b/frame/base/bli_malloc.c index afb82fcdf..4e9b10ce3 100644 --- a/frame/base/bli_malloc.c +++ b/frame/base/bli_malloc.c @@ -249,7 +249,7 @@ void bli_ffree_noalign // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_fmalloc_align_check +void bli_fmalloc_align_check ( malloc_ft f, size_t size, diff --git a/frame/base/bli_setgetij.c b/frame/base/bli_setgetij.c index 0830b8ae8..744e24c27 100644 --- a/frame/base/bli_setgetij.c +++ b/frame/base/bli_setgetij.c @@ -88,7 +88,7 @@ err_t bli_setijm #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ double ar, \ double ai, \ @@ -182,7 +182,7 @@ err_t bli_getijm #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ dim_t i, \ dim_t j, \ diff --git a/frame/base/cast/bli_castm.c b/frame/base/cast/bli_castm.c index 0e04dc175..64db75d24 100644 --- a/frame/base/cast/bli_castm.c +++ b/frame/base/cast/bli_castm.c @@ -54,7 +54,7 @@ static FUNCPTR_T GENARRAY2_ALL(ftypes,castm); // Define object-based interface. // -BLIS_EXPORT_BLIS void bli_castm +void bli_castm ( obj_t* a, obj_t* b @@ -115,7 +115,7 @@ BLIS_EXPORT_BLIS void bli_castm #undef GENTFUNC2 #define GENTFUNC2( ctype_a, ctype_b, cha, chb, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(cha,chb,opname) \ +void PASTEMAC2(cha,chb,opname) \ ( \ trans_t transa, \ dim_t m, \ @@ -219,7 +219,7 @@ INSERT_GENTFUNC2_MIXDP0( castm ) // Define object-based _check() function. // -BLIS_EXPORT_BLIS void bli_castm_check +void bli_castm_check ( obj_t* a, obj_t* b diff --git a/frame/base/cast/bli_castnzm.c b/frame/base/cast/bli_castnzm.c index 04b04e147..a50bdfc15 100644 --- a/frame/base/cast/bli_castnzm.c +++ b/frame/base/cast/bli_castnzm.c @@ -54,7 +54,7 @@ static FUNCPTR_T GENARRAY2_ALL(ftypes,castnzm); // Define object-based interface. // -BLIS_EXPORT_BLIS void bli_castnzm +void bli_castnzm ( obj_t* a, obj_t* b @@ -115,7 +115,7 @@ BLIS_EXPORT_BLIS void bli_castnzm #undef GENTFUNC2 #define GENTFUNC2( ctype_a, ctype_b, cha, chb, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(cha,chb,opname) \ +void PASTEMAC2(cha,chb,opname) \ ( \ trans_t transa, \ dim_t m, \ @@ -219,7 +219,7 @@ INSERT_GENTFUNC2_MIXDP0( castnzm ) // Define object-based _check() function. // -BLIS_EXPORT_BLIS void bli_castnzm_check +void bli_castnzm_check ( obj_t* a, obj_t* b diff --git a/frame/base/cast/bli_castv.c b/frame/base/cast/bli_castv.c index f07617ac8..213c960d8 100644 --- a/frame/base/cast/bli_castv.c +++ b/frame/base/cast/bli_castv.c @@ -53,7 +53,7 @@ static FUNCPTR_T GENARRAY2_ALL(ftypes,castv); // Define object-based interface. // -BLIS_EXPORT_BLIS void bli_castv +void bli_castv ( obj_t* x, obj_t* y @@ -110,7 +110,7 @@ BLIS_EXPORT_BLIS void bli_castv #undef GENTFUNC2 #define GENTFUNC2( ctype_x, ctype_y, chx, chy, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(chx,chy,opname) \ +void PASTEMAC2(chx,chy,opname) \ ( \ conj_t conjx, \ dim_t n, \ @@ -173,7 +173,7 @@ INSERT_GENTFUNC2_MIXDP0( castv ) // Define object-based _check() function. // -BLIS_EXPORT_BLIS void bli_castv_check +void bli_castv_check ( obj_t* x, obj_t* y diff --git a/frame/base/cast/old/bli_cast_check.c b/frame/base/cast/old/bli_cast_check.c index 7b2610a92..b1184c8e4 100644 --- a/frame/base/cast/old/bli_cast_check.c +++ b/frame/base/cast/old/bli_cast_check.c @@ -34,7 +34,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_castm_check +void bli_castm_check ( obj_t* a, obj_t* b @@ -80,7 +80,7 @@ BLIS_EXPORT_BLIS void bli_castm_check bli_check_error_code( e_val ); } -BLIS_EXPORT_BLIS void bli_castv_check +void bli_castv_check ( obj_t* x, obj_t* y diff --git a/frame/base/check/bli_obj_check.c b/frame/base/check/bli_obj_check.c index 0f1e86f40..a971fa19a 100644 --- a/frame/base/check/bli_obj_check.c +++ b/frame/base/check/bli_obj_check.c @@ -34,7 +34,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_obj_create_check( num_t dt, +void bli_obj_create_check( num_t dt, dim_t m, dim_t n, inc_t rs, @@ -53,7 +53,7 @@ BLIS_EXPORT_BLIS void bli_obj_create_check( num_t dt, bli_check_error_code( e_val ); } -BLIS_EXPORT_BLIS void bli_obj_create_without_buffer_check( num_t dt, +void bli_obj_create_without_buffer_check( num_t dt, dim_t m, dim_t n, obj_t* obj ) @@ -67,7 +67,7 @@ BLIS_EXPORT_BLIS void bli_obj_create_without_buffer_check( num_t dt, bli_check_error_code( e_val ); } -BLIS_EXPORT_BLIS void bli_obj_alloc_buffer_check( inc_t rs, +void bli_obj_alloc_buffer_check( inc_t rs, inc_t cs, inc_t is, obj_t* obj ) @@ -83,7 +83,7 @@ BLIS_EXPORT_BLIS void bli_obj_alloc_buffer_check( inc_t rs, bli_check_error_code( e_val ); } -BLIS_EXPORT_BLIS void bli_obj_attach_buffer_check( void* p, +void bli_obj_attach_buffer_check( void* p, inc_t rs, inc_t cs, inc_t is, @@ -109,7 +109,7 @@ BLIS_EXPORT_BLIS void bli_obj_attach_buffer_check( void* p, bli_check_error_code( e_val ); } -BLIS_EXPORT_BLIS void bli_obj_create_scalar_check( num_t dt, +void bli_obj_create_scalar_check( num_t dt, obj_t* obj ) { err_t e_val; @@ -121,7 +121,7 @@ BLIS_EXPORT_BLIS void bli_obj_create_scalar_check( num_t dt, bli_check_error_code( e_val ); } -BLIS_EXPORT_BLIS void bli_obj_free_check( obj_t* obj ) +void bli_obj_free_check( obj_t* obj ) { //err_t e_val; @@ -131,7 +131,7 @@ BLIS_EXPORT_BLIS void bli_obj_free_check( obj_t* obj ) //bli_check_error_code( e_val ); } -BLIS_EXPORT_BLIS void bli_obj_create_const_check( double value, obj_t* obj ) +void bli_obj_create_const_check( double value, obj_t* obj ) { err_t e_val; @@ -158,7 +158,7 @@ void bli_obj_create_const_copy_of_check( obj_t* a, obj_t* b ) } #endif -BLIS_EXPORT_BLIS void bli_dt_size_check( num_t dt ) +void bli_dt_size_check( num_t dt ) { err_t e_val; @@ -166,7 +166,7 @@ BLIS_EXPORT_BLIS void bli_dt_size_check( num_t dt ) bli_check_error_code( e_val ); } -BLIS_EXPORT_BLIS void bli_dt_string_check( num_t dt ) +void bli_dt_string_check( num_t dt ) { err_t e_val; @@ -174,7 +174,7 @@ BLIS_EXPORT_BLIS void bli_dt_string_check( num_t dt ) bli_check_error_code( e_val ); } -BLIS_EXPORT_BLIS void bli_dt_union_check( num_t dt1, num_t dt2 ) +void bli_dt_union_check( num_t dt1, num_t dt2 ) { err_t e_val; @@ -185,7 +185,7 @@ BLIS_EXPORT_BLIS void bli_dt_union_check( num_t dt1, num_t dt2 ) bli_check_error_code( e_val ); } -BLIS_EXPORT_BLIS void bli_obj_print_check( char* label, obj_t* obj ) +void bli_obj_print_check( char* label, obj_t* obj ) { err_t e_val; diff --git a/frame/base/check/bli_part_check.c b/frame/base/check/bli_part_check.c index a50a1705d..6d9aa37b9 100644 --- a/frame/base/check/bli_part_check.c +++ b/frame/base/check/bli_part_check.c @@ -34,7 +34,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_acquire_mpart_t2b_check( subpart_t requested_part, +void bli_acquire_mpart_t2b_check( subpart_t requested_part, dim_t i, dim_t b, obj_t* obj, @@ -52,7 +52,7 @@ BLIS_EXPORT_BLIS void bli_acquire_mpart_t2b_check( subpart_t requested_part, bli_check_error_code( e_val ); } -BLIS_EXPORT_BLIS void bli_acquire_mpart_l2r_check( subpart_t requested_part, +void bli_acquire_mpart_l2r_check( subpart_t requested_part, dim_t j, dim_t b, obj_t* obj, @@ -70,7 +70,7 @@ BLIS_EXPORT_BLIS void bli_acquire_mpart_l2r_check( subpart_t requested_part, bli_check_error_code( e_val ); } -BLIS_EXPORT_BLIS void bli_acquire_mpart_tl2br_check( subpart_t requested_part, +void bli_acquire_mpart_tl2br_check( subpart_t requested_part, dim_t ij, dim_t b, obj_t* obj, diff --git a/frame/base/proj/bli_projm.c b/frame/base/proj/bli_projm.c index 2e458cbcd..949bc2cc9 100644 --- a/frame/base/proj/bli_projm.c +++ b/frame/base/proj/bli_projm.c @@ -34,7 +34,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_projm +void bli_projm ( obj_t* a, obj_t* b @@ -86,7 +86,7 @@ BLIS_EXPORT_BLIS void bli_projm // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_projm_check +void bli_projm_check ( obj_t* a, obj_t* b diff --git a/frame/base/proj/bli_projv.c b/frame/base/proj/bli_projv.c index d27746f79..9a6587e5b 100644 --- a/frame/base/proj/bli_projv.c +++ b/frame/base/proj/bli_projv.c @@ -34,7 +34,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_projv +void bli_projv ( obj_t* x, obj_t* y @@ -86,7 +86,7 @@ BLIS_EXPORT_BLIS void bli_projv // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_projv_check +void bli_projv_check ( obj_t* x, obj_t* y diff --git a/frame/base/proj/old/bli_proj_check.c b/frame/base/proj/old/bli_proj_check.c index 9eb3dd4c7..9ffeef653 100644 --- a/frame/base/proj/old/bli_proj_check.c +++ b/frame/base/proj/old/bli_proj_check.c @@ -34,7 +34,7 @@ #include "blis.h" -BLIS_EXPORT_BLIS void bli_projm_check +void bli_projm_check ( obj_t* a, obj_t* b @@ -73,7 +73,7 @@ BLIS_EXPORT_BLIS void bli_projm_check bli_check_error_code( e_val ); } -BLIS_EXPORT_BLIS void bli_projv_check +void bli_projv_check ( obj_t* x, obj_t* y diff --git a/frame/compat/attic/bla_gbmv.c b/frame/compat/attic/bla_gbmv.c index 09f01d16f..0d903fa43 100644 --- a/frame/compat/attic/bla_gbmv.c +++ b/frame/compat/attic/bla_gbmv.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ +void PASTEF77(ch,blasname)( \ f77_char* transa, \ f77_int* m, \ f77_int* n, \ diff --git a/frame/compat/attic/bla_hbmv.c b/frame/compat/attic/bla_hbmv.c index 1bc0482c2..e34313394 100644 --- a/frame/compat/attic/bla_hbmv.c +++ b/frame/compat/attic/bla_hbmv.c @@ -41,7 +41,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ +void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ f77_int* k, \ diff --git a/frame/compat/attic/bla_hpmv.c b/frame/compat/attic/bla_hpmv.c index 27fee32e2..d53da2e4e 100644 --- a/frame/compat/attic/bla_hpmv.c +++ b/frame/compat/attic/bla_hpmv.c @@ -41,7 +41,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ +void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype* alpha, \ diff --git a/frame/compat/attic/bla_hpr.c b/frame/compat/attic/bla_hpr.c index 21ec33e63..c0205f41b 100644 --- a/frame/compat/attic/bla_hpr.c +++ b/frame/compat/attic/bla_hpr.c @@ -41,7 +41,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ +void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype_r* alpha, \ diff --git a/frame/compat/attic/bla_hpr2.c b/frame/compat/attic/bla_hpr2.c index 882db3b28..2153857d1 100644 --- a/frame/compat/attic/bla_hpr2.c +++ b/frame/compat/attic/bla_hpr2.c @@ -41,7 +41,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ +void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype* alpha, \ diff --git a/frame/compat/attic/bla_rot.c b/frame/compat/attic/bla_rot.c index 0fdb9fa4b..5c97d3961 100644 --- a/frame/compat/attic/bla_rot.c +++ b/frame/compat/attic/bla_rot.c @@ -41,7 +41,7 @@ #undef GENTFUNCR2 #define GENTFUNCR2( ftype_xy, ftype_r, chxy, chr, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF772(chxy,chr,blasname)( \ +void PASTEF772(chxy,chr,blasname)( \ f77_int* n, \ ftype_xy* x, f77_int* incx, \ ftype_xy* y, f77_int* incy, \ diff --git a/frame/compat/attic/bla_rotg.c b/frame/compat/attic/bla_rotg.c index 317987f8e..f45ef9810 100644 --- a/frame/compat/attic/bla_rotg.c +++ b/frame/compat/attic/bla_rotg.c @@ -41,7 +41,7 @@ #undef GENTFUNCR #define GENTFUNCR( ftype_xy, ftype_r, chxy, chr, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(chxy,blasname)( \ +void PASTEF77(chxy,blasname)( \ ftype_xy* x, \ ftype_xy* y, \ ftype_r* c, \ diff --git a/frame/compat/attic/bla_rotm.c b/frame/compat/attic/bla_rotm.c index 3626e2897..5660f7238 100644 --- a/frame/compat/attic/bla_rotm.c +++ b/frame/compat/attic/bla_rotm.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ +void PASTEF77(ch,blasname)( \ f77_int* n, \ ftype* x, f77_int* incx, \ ftype* y, f77_int* incy, \ diff --git a/frame/compat/attic/bla_rotmg.c b/frame/compat/attic/bla_rotmg.c index 5a662283b..5130cb6e5 100644 --- a/frame/compat/attic/bla_rotmg.c +++ b/frame/compat/attic/bla_rotmg.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ +void PASTEF77(ch,blasname)( \ ftype* d1, \ ftype* d2, \ ftype* x, \ diff --git a/frame/compat/attic/bla_sbmv.c b/frame/compat/attic/bla_sbmv.c index 8aca3c8e4..8aa1e63a4 100644 --- a/frame/compat/attic/bla_sbmv.c +++ b/frame/compat/attic/bla_sbmv.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ +void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ f77_int* k, \ diff --git a/frame/compat/attic/bla_spmv.c b/frame/compat/attic/bla_spmv.c index 12896d2d0..2e562da97 100644 --- a/frame/compat/attic/bla_spmv.c +++ b/frame/compat/attic/bla_spmv.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ +void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype* alpha, \ diff --git a/frame/compat/attic/bla_spr.c b/frame/compat/attic/bla_spr.c index 2b4431395..7c2a9e93c 100644 --- a/frame/compat/attic/bla_spr.c +++ b/frame/compat/attic/bla_spr.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ +void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype* alpha, \ diff --git a/frame/compat/attic/bla_spr2.c b/frame/compat/attic/bla_spr2.c index 729742c0b..08770c4f7 100644 --- a/frame/compat/attic/bla_spr2.c +++ b/frame/compat/attic/bla_spr2.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ +void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_int* m, \ ftype* alpha, \ diff --git a/frame/compat/attic/bla_tbmv.c b/frame/compat/attic/bla_tbmv.c index 159f907fa..95765d59b 100644 --- a/frame/compat/attic/bla_tbmv.c +++ b/frame/compat/attic/bla_tbmv.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ +void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_char* transa, \ f77_char* diaga, \ diff --git a/frame/compat/attic/bla_tbsv.c b/frame/compat/attic/bla_tbsv.c index dffe53375..eb4be901f 100644 --- a/frame/compat/attic/bla_tbsv.c +++ b/frame/compat/attic/bla_tbsv.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ +void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_char* transa, \ f77_char* diaga, \ diff --git a/frame/compat/attic/bla_tpmv.c b/frame/compat/attic/bla_tpmv.c index a913875ba..4abe6ba46 100644 --- a/frame/compat/attic/bla_tpmv.c +++ b/frame/compat/attic/bla_tpmv.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ +void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_char* transa, \ f77_char* diaga, \ diff --git a/frame/compat/attic/bla_tpsv.c b/frame/compat/attic/bla_tpsv.c index 63900b3ab..f1a039c66 100644 --- a/frame/compat/attic/bla_tpsv.c +++ b/frame/compat/attic/bla_tpsv.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname)( \ +void PASTEF77(ch,blasname)( \ f77_char* uploa, \ f77_char* transa, \ f77_char* diaga, \ diff --git a/frame/compat/bla_amax.c b/frame/compat/bla_amax.c index ef2ac46d0..9fcce920b 100644 --- a/frame/compat/bla_amax.c +++ b/frame/compat/bla_amax.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype_x, chx, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS f77_int PASTEF772(i,chx,blasname) \ +f77_int PASTEF772(i,chx,blasname) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx \ diff --git a/frame/compat/bla_asum.c b/frame/compat/bla_asum.c index 920dd823d..8e71bfa8c 100644 --- a/frame/compat/bla_asum.c +++ b/frame/compat/bla_asum.c @@ -41,7 +41,7 @@ #undef GENTFUNCR2 #define GENTFUNCR2( ftype_x, ftype_r, chx, chr, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS ftype_r PASTEF772(chr,chx,blasname) \ +ftype_r PASTEF772(chr,chx,blasname) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx \ diff --git a/frame/compat/bla_axpy.c b/frame/compat/bla_axpy.c index abe4c0da7..e3c67fd55 100644 --- a/frame/compat/bla_axpy.c +++ b/frame/compat/bla_axpy.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_int* n, \ const ftype* alpha, \ diff --git a/frame/compat/bla_copy.c b/frame/compat/bla_copy.c index 2d0f50ca3..d9d3b7cce 100644 --- a/frame/compat/bla_copy.c +++ b/frame/compat/bla_copy.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_int* n, \ const ftype* x, const f77_int* incx, \ diff --git a/frame/compat/bla_dot.c b/frame/compat/bla_dot.c index 453c7aec8..dbab039d1 100644 --- a/frame/compat/bla_dot.c +++ b/frame/compat/bla_dot.c @@ -41,7 +41,7 @@ #undef GENTFUNCDOT #define GENTFUNCDOT( ftype, ch, chc, blis_conjx, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS ftype PASTEF772(ch,blasname,chc) \ +ftype PASTEF772(ch,blasname,chc) \ ( \ const f77_int* n, \ const ftype* x, const f77_int* incx, \ @@ -93,7 +93,7 @@ INSERT_GENTFUNCDOT_BLAS( dot, dotv ) // Input vectors stored in single precision, computed in double precision, // with result returned in single precision. -BLIS_EXPORT_BLAS float PASTEF77(sd,sdot) +float PASTEF77(sd,sdot) ( const f77_int* n, const float* sb, @@ -109,7 +109,7 @@ BLIS_EXPORT_BLAS float PASTEF77(sd,sdot) // Input vectors stored in single precision, computed in double precision, // with result returned in double precision. -BLIS_EXPORT_BLAS double PASTEF77(d,sdot) +double PASTEF77(d,sdot) ( const f77_int* n, const float* x, const f77_int* incx, diff --git a/frame/compat/bla_gemm.c b/frame/compat/bla_gemm.c index 24311d6b6..e04e48cf5 100644 --- a/frame/compat/bla_gemm.c +++ b/frame/compat/bla_gemm.c @@ -45,7 +45,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* transa, \ const f77_char* transb, \ diff --git a/frame/compat/bla_gemv.c b/frame/compat/bla_gemv.c index b4f27177d..85c65dde4 100644 --- a/frame/compat/bla_gemv.c +++ b/frame/compat/bla_gemv.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* transa, \ const f77_int* m, \ diff --git a/frame/compat/bla_ger.c b/frame/compat/bla_ger.c index 7113b73bd..db4f76f18 100644 --- a/frame/compat/bla_ger.c +++ b/frame/compat/bla_ger.c @@ -41,7 +41,7 @@ #undef GENTFUNCDOT #define GENTFUNCDOT( ftype, ch, chc, blis_conjy, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF772(ch,blasname,chc) \ +void PASTEF772(ch,blasname,chc) \ ( \ const f77_int* m, \ const f77_int* n, \ diff --git a/frame/compat/bla_hemm.c b/frame/compat/bla_hemm.c index 9c7003a9b..79ccd9a2c 100644 --- a/frame/compat/bla_hemm.c +++ b/frame/compat/bla_hemm.c @@ -45,7 +45,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* side, \ const f77_char* uploa, \ diff --git a/frame/compat/bla_hemv.c b/frame/compat/bla_hemv.c index fa488b052..944468278 100644 --- a/frame/compat/bla_hemv.c +++ b/frame/compat/bla_hemv.c @@ -41,7 +41,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_her.c b/frame/compat/bla_her.c index a80d1b364..ade3cbdda 100644 --- a/frame/compat/bla_her.c +++ b/frame/compat/bla_her.c @@ -41,7 +41,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_her2.c b/frame/compat/bla_her2.c index 1286e21bc..e3ed4ce31 100644 --- a/frame/compat/bla_her2.c +++ b/frame/compat/bla_her2.c @@ -41,7 +41,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_her2k.c b/frame/compat/bla_her2k.c index d5272bbd6..566cd41fb 100644 --- a/frame/compat/bla_her2k.c +++ b/frame/compat/bla_her2k.c @@ -45,7 +45,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* uploc, \ const f77_char* transa, \ diff --git a/frame/compat/bla_herk.c b/frame/compat/bla_herk.c index d4223fdcd..c919be9d7 100644 --- a/frame/compat/bla_herk.c +++ b/frame/compat/bla_herk.c @@ -45,7 +45,7 @@ #undef GENTFUNCCO #define GENTFUNCCO( ftype, ftype_r, ch, chr, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* uploc, \ const f77_char* transa, \ diff --git a/frame/compat/bla_nrm2.c b/frame/compat/bla_nrm2.c index 79fa9116e..0b41a0673 100644 --- a/frame/compat/bla_nrm2.c +++ b/frame/compat/bla_nrm2.c @@ -41,7 +41,7 @@ #undef GENTFUNCR2 #define GENTFUNCR2( ftype_x, ftype_r, chx, chr, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS ftype_r PASTEF772(chr,chx,blasname) \ +ftype_r PASTEF772(chr,chx,blasname) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx \ diff --git a/frame/compat/bla_scal.c b/frame/compat/bla_scal.c index 9dc3a89c6..6c2a3c3db 100644 --- a/frame/compat/bla_scal.c +++ b/frame/compat/bla_scal.c @@ -41,7 +41,7 @@ #undef GENTFUNCSCAL #define GENTFUNCSCAL( ftype_x, ftype_a, chx, cha, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF772(chx,cha,blasname) \ +void PASTEF772(chx,cha,blasname) \ ( \ const f77_int* n, \ const ftype_a* alpha, \ diff --git a/frame/compat/bla_swap.c b/frame/compat/bla_swap.c index b2619510e..72bc9d6d5 100644 --- a/frame/compat/bla_swap.c +++ b/frame/compat/bla_swap.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_int* n, \ ftype* x, const f77_int* incx, \ diff --git a/frame/compat/bla_symm.c b/frame/compat/bla_symm.c index b206d9976..3711b34c9 100644 --- a/frame/compat/bla_symm.c +++ b/frame/compat/bla_symm.c @@ -45,7 +45,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* side, \ const f77_char* uploa, \ diff --git a/frame/compat/bla_symv.c b/frame/compat/bla_symv.c index 76ebd07e5..79076194c 100644 --- a/frame/compat/bla_symv.c +++ b/frame/compat/bla_symv.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_syr.c b/frame/compat/bla_syr.c index 3abcca28a..0ed4aebb1 100644 --- a/frame/compat/bla_syr.c +++ b/frame/compat/bla_syr.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_syr2.c b/frame/compat/bla_syr2.c index 302864b8f..dbae67027 100644 --- a/frame/compat/bla_syr2.c +++ b/frame/compat/bla_syr2.c @@ -41,7 +41,7 @@ #undef GENTFUNCRO #define GENTFUNCRO( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_int* m, \ diff --git a/frame/compat/bla_syr2k.c b/frame/compat/bla_syr2k.c index bd41457d9..a977820a6 100644 --- a/frame/compat/bla_syr2k.c +++ b/frame/compat/bla_syr2k.c @@ -45,7 +45,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* uploc, \ const f77_char* transa, \ diff --git a/frame/compat/bla_syrk.c b/frame/compat/bla_syrk.c index 0c24c1f8e..5bc2d356a 100644 --- a/frame/compat/bla_syrk.c +++ b/frame/compat/bla_syrk.c @@ -45,7 +45,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* uploc, \ const f77_char* transa, \ diff --git a/frame/compat/bla_trmm.c b/frame/compat/bla_trmm.c index 7f035b1cc..7ca20da74 100644 --- a/frame/compat/bla_trmm.c +++ b/frame/compat/bla_trmm.c @@ -45,7 +45,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* side, \ const f77_char* uploa, \ diff --git a/frame/compat/bla_trmv.c b/frame/compat/bla_trmv.c index 783d975e7..ffb31b12f 100644 --- a/frame/compat/bla_trmv.c +++ b/frame/compat/bla_trmv.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_char* transa, \ diff --git a/frame/compat/bla_trsm.c b/frame/compat/bla_trsm.c index 59705edbe..0e1c2e329 100644 --- a/frame/compat/bla_trsm.c +++ b/frame/compat/bla_trsm.c @@ -45,7 +45,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* side, \ const f77_char* uploa, \ diff --git a/frame/compat/bla_trsv.c b/frame/compat/bla_trsv.c index 2717b1940..445059720 100644 --- a/frame/compat/bla_trsv.c +++ b/frame/compat/bla_trsv.c @@ -41,7 +41,7 @@ #undef GENTFUNC #define GENTFUNC( ftype, ch, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF77(ch,blasname) \ +void PASTEF77(ch,blasname) \ ( \ const f77_char* uploa, \ const f77_char* transa, \ diff --git a/frame/compat/blis/thread/b77_thread.c b/frame/compat/blis/thread/b77_thread.c index 28ba737aa..c864339a3 100644 --- a/frame/compat/blis/thread/b77_thread.c +++ b/frame/compat/blis/thread/b77_thread.c @@ -39,7 +39,7 @@ // Define Fortran-compatible BLIS interfaces. // -BLIS_EXPORT_BLAS void PASTEF770(bli_thread_set_ways) +void PASTEF770(bli_thread_set_ways) ( const f77_int* jc, const f77_int* pc, @@ -71,7 +71,7 @@ BLIS_EXPORT_BLAS void PASTEF770(bli_thread_set_ways) bli_finalize_auto(); } -BLIS_EXPORT_BLAS void PASTEF770(bli_thread_set_num_threads) +void PASTEF770(bli_thread_set_num_threads) ( const f77_int* nt ) diff --git a/frame/compat/cblas/f77_sub/f77_amax_sub.c b/frame/compat/cblas/f77_sub/f77_amax_sub.c index 3fa18894c..cc26196d7 100644 --- a/frame/compat/cblas/f77_sub/f77_amax_sub.c +++ b/frame/compat/cblas/f77_sub/f77_amax_sub.c @@ -42,7 +42,7 @@ #undef GENTFUNC #define GENTFUNC( ftype_x, chx, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF773(i,chx,blasname,sub) \ +void PASTEF773(i,chx,blasname,sub) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx, \ diff --git a/frame/compat/cblas/f77_sub/f77_asum_sub.c b/frame/compat/cblas/f77_sub/f77_asum_sub.c index f0d4abe43..f1cb35b0c 100644 --- a/frame/compat/cblas/f77_sub/f77_asum_sub.c +++ b/frame/compat/cblas/f77_sub/f77_asum_sub.c @@ -42,7 +42,7 @@ #undef GENTFUNCR2 #define GENTFUNCR2( ftype_x, ftype_r, chx, chr, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF773(chr,chx,blasname,sub) \ +void PASTEF773(chr,chx,blasname,sub) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx, \ diff --git a/frame/compat/cblas/f77_sub/f77_dot_sub.c b/frame/compat/cblas/f77_sub/f77_dot_sub.c index 0dbd5a7e4..6c06133f1 100644 --- a/frame/compat/cblas/f77_sub/f77_dot_sub.c +++ b/frame/compat/cblas/f77_sub/f77_dot_sub.c @@ -42,7 +42,7 @@ #undef GENTFUNCDOT #define GENTFUNCDOT( ftype, ch, chc, blis_conjx, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF773(ch,blasname,chc,sub) \ +void PASTEF773(ch,blasname,chc,sub) \ ( \ const f77_int* n, \ const ftype* x, const f77_int* incx, \ @@ -66,7 +66,7 @@ INSERT_GENTFUNCDOT_BLAS( dot, NULL ) // Input vectors stored in single precision, computed in double precision, // with result returned in single precision. -BLIS_EXPORT_BLAS void PASTEF772(sds,dot,sub) +void PASTEF772(sds,dot,sub) ( const f77_int* n, const float* sb, @@ -86,7 +86,7 @@ BLIS_EXPORT_BLAS void PASTEF772(sds,dot,sub) // Input vectors stored in single precision, computed in double precision, // with result returned in double precision. -BLIS_EXPORT_BLAS void PASTEF772(ds,dot,sub) +void PASTEF772(ds,dot,sub) ( const f77_int* n, const float* x, const f77_int* incx, diff --git a/frame/compat/cblas/f77_sub/f77_nrm2_sub.c b/frame/compat/cblas/f77_sub/f77_nrm2_sub.c index d3b75a5fe..54ce1a5b4 100644 --- a/frame/compat/cblas/f77_sub/f77_nrm2_sub.c +++ b/frame/compat/cblas/f77_sub/f77_nrm2_sub.c @@ -42,7 +42,7 @@ #undef GENTFUNCR2 #define GENTFUNCR2( ftype_x, ftype_r, chx, chr, blasname, blisname ) \ \ -BLIS_EXPORT_BLAS void PASTEF773(chr,chx,blasname,sub) \ +void PASTEF773(chr,chx,blasname,sub) \ ( \ const f77_int* n, \ const ftype_x* x, const f77_int* incx, \ diff --git a/frame/compat/cblas/src/cblas_caxpy.c b/frame/compat/cblas/src/cblas_caxpy.c index fe63ecc5f..748d146c6 100644 --- a/frame/compat/cblas/src/cblas_caxpy.c +++ b/frame/compat/cblas/src/cblas_caxpy.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_caxpy( f77_int N, const void *alpha, const void *X, +void cblas_caxpy( f77_int N, const void *alpha, const void *X, f77_int incX, void *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_ccopy.c b/frame/compat/cblas/src/cblas_ccopy.c index 3334a0c6b..8871680b1 100644 --- a/frame/compat/cblas/src/cblas_ccopy.c +++ b/frame/compat/cblas/src/cblas_ccopy.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ccopy( f77_int N, const void *X, +void cblas_ccopy( f77_int N, const void *X, f77_int incX, void *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_cdotc_sub.c b/frame/compat/cblas/src/cblas_cdotc_sub.c index 8ba14bf96..d0800ca4f 100644 --- a/frame/compat/cblas/src/cblas_cdotc_sub.c +++ b/frame/compat/cblas/src/cblas_cdotc_sub.c @@ -11,7 +11,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_cdotc_sub( f77_int N, const void *X, f77_int incX, +void cblas_cdotc_sub( f77_int N, const void *X, f77_int incX, const void *Y, f77_int incY,void *dotc) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_cdotu_sub.c b/frame/compat/cblas/src/cblas_cdotu_sub.c index af5d14a55..fd14f5bb4 100644 --- a/frame/compat/cblas/src/cblas_cdotu_sub.c +++ b/frame/compat/cblas/src/cblas_cdotu_sub.c @@ -11,7 +11,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_cdotu_sub( f77_int N, const void *X, +void cblas_cdotu_sub( f77_int N, const void *X, f77_int incX, const void *Y, f77_int incY,void *dotu) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_cgbmv.c b/frame/compat/cblas/src/cblas_cgbmv.c index 1be1c3838..74872186e 100644 --- a/frame/compat/cblas/src/cblas_cgbmv.c +++ b/frame/compat/cblas/src/cblas_cgbmv.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_cgbmv(enum CBLAS_ORDER order, +void cblas_cgbmv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, f77_int KL, f77_int KU, const void *alpha, const void *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_cgemm.c b/frame/compat/cblas/src/cblas_cgemm.c index 343140922..5680a19f6 100644 --- a/frame/compat/cblas/src/cblas_cgemm.c +++ b/frame/compat/cblas/src/cblas_cgemm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_cgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, +void cblas_cgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB, f77_int M, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, diff --git a/frame/compat/cblas/src/cblas_cgemv.c b/frame/compat/cblas/src/cblas_cgemv.c index 3203b4d6e..e5d226262 100644 --- a/frame/compat/cblas/src/cblas_cgemv.c +++ b/frame/compat/cblas/src/cblas_cgemv.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_cgemv(enum CBLAS_ORDER order, +void cblas_cgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, diff --git a/frame/compat/cblas/src/cblas_cgerc.c b/frame/compat/cblas/src/cblas_cgerc.c index 4f84d1c24..dc582dd04 100644 --- a/frame/compat/cblas/src/cblas_cgerc.c +++ b/frame/compat/cblas/src/cblas_cgerc.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_cgerc(enum CBLAS_ORDER order, f77_int M, f77_int N, +void cblas_cgerc(enum CBLAS_ORDER order, f77_int M, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_cgeru.c b/frame/compat/cblas/src/cblas_cgeru.c index c494d24d7..6339ef08a 100644 --- a/frame/compat/cblas/src/cblas_cgeru.c +++ b/frame/compat/cblas/src/cblas_cgeru.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_cgeru(enum CBLAS_ORDER order, f77_int M, f77_int N, +void cblas_cgeru(enum CBLAS_ORDER order, f77_int M, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_chbmv.c b/frame/compat/cblas/src/cblas_chbmv.c index d2f128dcd..463f8ef25 100644 --- a/frame/compat/cblas/src/cblas_chbmv.c +++ b/frame/compat/cblas/src/cblas_chbmv.c @@ -11,7 +11,7 @@ #include "cblas_f77.h" #include #include -void BLIS_EXPORT_BLAS cblas_chbmv(enum CBLAS_ORDER order, +void cblas_chbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo,f77_int N,f77_int K, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, diff --git a/frame/compat/cblas/src/cblas_chemm.c b/frame/compat/cblas/src/cblas_chemm.c index f2e772edb..e8e1e374d 100644 --- a/frame/compat/cblas/src/cblas_chemm.c +++ b/frame/compat/cblas/src/cblas_chemm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_chemm(enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, +void cblas_chemm(enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, diff --git a/frame/compat/cblas/src/cblas_chemv.c b/frame/compat/cblas/src/cblas_chemv.c index 949ece77c..b1df3ef12 100644 --- a/frame/compat/cblas/src/cblas_chemv.c +++ b/frame/compat/cblas/src/cblas_chemv.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_chemv(enum CBLAS_ORDER order, +void cblas_chemv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, diff --git a/frame/compat/cblas/src/cblas_cher.c b/frame/compat/cblas/src/cblas_cher.c index 01f7ccc69..05e1c684a 100644 --- a/frame/compat/cblas/src/cblas_cher.c +++ b/frame/compat/cblas/src/cblas_cher.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_cher(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_cher(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, float alpha, const void *X, f77_int incX ,void *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_cher2.c b/frame/compat/cblas/src/cblas_cher2.c index 1eb711f33..9b82423d6 100644 --- a/frame/compat/cblas/src/cblas_cher2.c +++ b/frame/compat/cblas/src/cblas_cher2.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_cher2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_cher2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_cher2k.c b/frame/compat/cblas/src/cblas_cher2k.c index 6e3e3b01d..fcd1c4b01 100644 --- a/frame/compat/cblas/src/cblas_cher2k.c +++ b/frame/compat/cblas/src/cblas_cher2k.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_cher2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void cblas_cher2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, float beta, diff --git a/frame/compat/cblas/src/cblas_cherk.c b/frame/compat/cblas/src/cblas_cherk.c index 8adf3c2b9..80bc4a7a8 100644 --- a/frame/compat/cblas/src/cblas_cherk.c +++ b/frame/compat/cblas/src/cblas_cherk.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_cherk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void cblas_cherk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, float alpha, const void *A, f77_int lda, float beta, void *C, f77_int ldc) diff --git a/frame/compat/cblas/src/cblas_chpmv.c b/frame/compat/cblas/src/cblas_chpmv.c index 79c72b090..5857070a0 100644 --- a/frame/compat/cblas/src/cblas_chpmv.c +++ b/frame/compat/cblas/src/cblas_chpmv.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_chpmv(enum CBLAS_ORDER order, +void cblas_chpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo,f77_int N, const void *alpha, const void *AP, const void *X, f77_int incX, const void *beta, diff --git a/frame/compat/cblas/src/cblas_chpr.c b/frame/compat/cblas/src/cblas_chpr.c index 031b275a2..cd2f5baa3 100644 --- a/frame/compat/cblas/src/cblas_chpr.c +++ b/frame/compat/cblas/src/cblas_chpr.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_chpr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_chpr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, float alpha, const void *X, f77_int incX, void *A) { diff --git a/frame/compat/cblas/src/cblas_chpr2.c b/frame/compat/cblas/src/cblas_chpr2.c index 67e1a6aaa..f696083ab 100644 --- a/frame/compat/cblas/src/cblas_chpr2.c +++ b/frame/compat/cblas/src/cblas_chpr2.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_chpr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_chpr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N,const void *alpha, const void *X, f77_int incX,const void *Y, f77_int incY, void *Ap) diff --git a/frame/compat/cblas/src/cblas_cscal.c b/frame/compat/cblas/src/cblas_cscal.c index 5e3aaff2b..966b93ae9 100644 --- a/frame/compat/cblas/src/cblas_cscal.c +++ b/frame/compat/cblas/src/cblas_cscal.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_cscal( f77_int N, const void *alpha, void *X, +void cblas_cscal( f77_int N, const void *alpha, void *X, f77_int incX) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_csscal.c b/frame/compat/cblas/src/cblas_csscal.c index f40e88976..b2940d7d4 100644 --- a/frame/compat/cblas/src/cblas_csscal.c +++ b/frame/compat/cblas/src/cblas_csscal.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_csscal( f77_int N, float alpha, void *X, +void cblas_csscal( f77_int N, float alpha, void *X, f77_int incX) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_cswap.c b/frame/compat/cblas/src/cblas_cswap.c index d5b166e5e..a5713a24c 100644 --- a/frame/compat/cblas/src/cblas_cswap.c +++ b/frame/compat/cblas/src/cblas_cswap.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_cswap( f77_int N, void *X, f77_int incX, void *Y, +void cblas_cswap( f77_int N, void *X, f77_int incX, void *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_csymm.c b/frame/compat/cblas/src/cblas_csymm.c index 9d2d34a3f..22cb266e4 100644 --- a/frame/compat/cblas/src/cblas_csymm.c +++ b/frame/compat/cblas/src/cblas_csymm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_csymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void cblas_csymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, diff --git a/frame/compat/cblas/src/cblas_csyr2k.c b/frame/compat/cblas/src/cblas_csyr2k.c index a6f32622e..c47072d74 100644 --- a/frame/compat/cblas/src/cblas_csyr2k.c +++ b/frame/compat/cblas/src/cblas_csyr2k.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_csyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void cblas_csyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, diff --git a/frame/compat/cblas/src/cblas_csyrk.c b/frame/compat/cblas/src/cblas_csyrk.c index 7a085e45c..94d9e2a8f 100644 --- a/frame/compat/cblas/src/cblas_csyrk.c +++ b/frame/compat/cblas/src/cblas_csyrk.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_csyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void cblas_csyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *beta, void *C, f77_int ldc) diff --git a/frame/compat/cblas/src/cblas_ctbmv.c b/frame/compat/cblas/src/cblas_ctbmv.c index 3689facfb..8dd2499c7 100644 --- a/frame/compat/cblas/src/cblas_ctbmv.c +++ b/frame/compat/cblas/src/cblas_ctbmv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ctbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_ctbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const void *A, f77_int lda, void *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_ctbsv.c b/frame/compat/cblas/src/cblas_ctbsv.c index 2f4832922..d9dfdcd22 100644 --- a/frame/compat/cblas/src/cblas_ctbsv.c +++ b/frame/compat/cblas/src/cblas_ctbsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ctbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_ctbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const void *A, f77_int lda, void *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_ctpmv.c b/frame/compat/cblas/src/cblas_ctpmv.c index 6a384baa1..8f9cb33a4 100644 --- a/frame/compat/cblas/src/cblas_ctpmv.c +++ b/frame/compat/cblas/src/cblas_ctpmv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ctpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_ctpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *Ap, void *X, f77_int incX) { diff --git a/frame/compat/cblas/src/cblas_ctpsv.c b/frame/compat/cblas/src/cblas_ctpsv.c index e76a1ba4d..77d5821e3 100644 --- a/frame/compat/cblas/src/cblas_ctpsv.c +++ b/frame/compat/cblas/src/cblas_ctpsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ctpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_ctpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *Ap, void *X, f77_int incX) { diff --git a/frame/compat/cblas/src/cblas_ctrmm.c b/frame/compat/cblas/src/cblas_ctrmm.c index 5335bf893..7eb621f3b 100644 --- a/frame/compat/cblas/src/cblas_ctrmm.c +++ b/frame/compat/cblas/src/cblas_ctrmm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ctrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void cblas_ctrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_ctrmv.c b/frame/compat/cblas/src/cblas_ctrmv.c index f546a6a6f..756720207 100644 --- a/frame/compat/cblas/src/cblas_ctrmv.c +++ b/frame/compat/cblas/src/cblas_ctrmv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ctrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_ctrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *A, f77_int lda, void *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_ctrsm.c b/frame/compat/cblas/src/cblas_ctrsm.c index 04b1f0f71..f6e016a21 100644 --- a/frame/compat/cblas/src/cblas_ctrsm.c +++ b/frame/compat/cblas/src/cblas_ctrsm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ctrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void cblas_ctrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_ctrsv.c b/frame/compat/cblas/src/cblas_ctrsv.c index e0824dd98..539d97e55 100644 --- a/frame/compat/cblas/src/cblas_ctrsv.c +++ b/frame/compat/cblas/src/cblas_ctrsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ctrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_ctrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *A, f77_int lda, void *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_daxpy.c b/frame/compat/cblas/src/cblas_daxpy.c index 16032c5f6..5a3d08d6a 100644 --- a/frame/compat/cblas/src/cblas_daxpy.c +++ b/frame/compat/cblas/src/cblas_daxpy.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_daxpy( f77_int N, double alpha, const double *X, +void cblas_daxpy( f77_int N, double alpha, const double *X, f77_int incX, double *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_dcopy.c b/frame/compat/cblas/src/cblas_dcopy.c index 27bf873c0..186c3d1d6 100644 --- a/frame/compat/cblas/src/cblas_dcopy.c +++ b/frame/compat/cblas/src/cblas_dcopy.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dcopy( f77_int N, const double *X, +void cblas_dcopy( f77_int N, const double *X, f77_int incX, double *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_dgbmv.c b/frame/compat/cblas/src/cblas_dgbmv.c index 610eaf7d5..f0a19d5e8 100644 --- a/frame/compat/cblas/src/cblas_dgbmv.c +++ b/frame/compat/cblas/src/cblas_dgbmv.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dgbmv(enum CBLAS_ORDER order, +void cblas_dgbmv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, f77_int KL, f77_int KU, double alpha, const double *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_dgemm.c b/frame/compat/cblas/src/cblas_dgemm.c index f27d4a835..479a15abd 100644 --- a/frame/compat/cblas/src/cblas_dgemm.c +++ b/frame/compat/cblas/src/cblas_dgemm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, +void cblas_dgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB, f77_int M, f77_int N, f77_int K, double alpha, const double *A, f77_int lda, const double *B, f77_int ldb, diff --git a/frame/compat/cblas/src/cblas_dgemv.c b/frame/compat/cblas/src/cblas_dgemv.c index f781e66a2..025523b2c 100644 --- a/frame/compat/cblas/src/cblas_dgemv.c +++ b/frame/compat/cblas/src/cblas_dgemv.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dgemv(enum CBLAS_ORDER order, +void cblas_dgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, double alpha, const double *A, f77_int lda, const double *X, f77_int incX, double beta, diff --git a/frame/compat/cblas/src/cblas_dger.c b/frame/compat/cblas/src/cblas_dger.c index b178f0ceb..366d393b6 100644 --- a/frame/compat/cblas/src/cblas_dger.c +++ b/frame/compat/cblas/src/cblas_dger.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dger(enum CBLAS_ORDER order, f77_int M, f77_int N, +void cblas_dger(enum CBLAS_ORDER order, f77_int M, f77_int N, double alpha, const double *X, f77_int incX, const double *Y, f77_int incY, double *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_drot.c b/frame/compat/cblas/src/cblas_drot.c index 314e4972e..b5dac7cad 100644 --- a/frame/compat/cblas/src/cblas_drot.c +++ b/frame/compat/cblas/src/cblas_drot.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_drot(f77_int N, double *X, f77_int incX, +void cblas_drot(f77_int N, double *X, f77_int incX, double *Y, f77_int incY, const double c, const double s) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_drotg.c b/frame/compat/cblas/src/cblas_drotg.c index fc174084c..c509bafc7 100644 --- a/frame/compat/cblas/src/cblas_drotg.c +++ b/frame/compat/cblas/src/cblas_drotg.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_drotg( double *a, double *b, double *c, double *s) +void cblas_drotg( double *a, double *b, double *c, double *s) { F77_drotg(a,b,c,s); } diff --git a/frame/compat/cblas/src/cblas_drotm.c b/frame/compat/cblas/src/cblas_drotm.c index 1b05592df..f0ae348dd 100644 --- a/frame/compat/cblas/src/cblas_drotm.c +++ b/frame/compat/cblas/src/cblas_drotm.c @@ -2,7 +2,7 @@ #ifdef BLIS_ENABLE_CBLAS #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_drotm( f77_int N, double *X, f77_int incX, double *Y, +void cblas_drotm( f77_int N, double *X, f77_int incX, double *Y, f77_int incY, const double *P) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_drotmg.c b/frame/compat/cblas/src/cblas_drotmg.c index ebbea6573..6b969bf87 100644 --- a/frame/compat/cblas/src/cblas_drotmg.c +++ b/frame/compat/cblas/src/cblas_drotmg.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_drotmg( double *d1, double *d2, double *b1, +void cblas_drotmg( double *d1, double *d2, double *b1, const double b2, double *p) { F77_drotmg(d1,d2,b1,&b2,p); diff --git a/frame/compat/cblas/src/cblas_dsbmv.c b/frame/compat/cblas/src/cblas_dsbmv.c index af04d90a0..8398dd6ce 100644 --- a/frame/compat/cblas/src/cblas_dsbmv.c +++ b/frame/compat/cblas/src/cblas_dsbmv.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dsbmv(enum CBLAS_ORDER order, +void cblas_dsbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, f77_int K, double alpha, const double *A, f77_int lda, const double *X, f77_int incX, double beta, diff --git a/frame/compat/cblas/src/cblas_dscal.c b/frame/compat/cblas/src/cblas_dscal.c index 6c5bda1b9..bb6da3f67 100644 --- a/frame/compat/cblas/src/cblas_dscal.c +++ b/frame/compat/cblas/src/cblas_dscal.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dscal( f77_int N, double alpha, double *X, +void cblas_dscal( f77_int N, double alpha, double *X, f77_int incX) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_dspmv.c b/frame/compat/cblas/src/cblas_dspmv.c index c56c4125d..b8e95cfa8 100644 --- a/frame/compat/cblas/src/cblas_dspmv.c +++ b/frame/compat/cblas/src/cblas_dspmv.c @@ -12,7 +12,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dspmv(enum CBLAS_ORDER order, +void cblas_dspmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const double *AP, const double *X, f77_int incX, double beta, diff --git a/frame/compat/cblas/src/cblas_dspr.c b/frame/compat/cblas/src/cblas_dspr.c index 21a2da21c..9156f7a83 100644 --- a/frame/compat/cblas/src/cblas_dspr.c +++ b/frame/compat/cblas/src/cblas_dspr.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dspr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_dspr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const double *X, f77_int incX, double *Ap) { diff --git a/frame/compat/cblas/src/cblas_dspr2.c b/frame/compat/cblas/src/cblas_dspr2.c index 0fd33c080..8fade8319 100644 --- a/frame/compat/cblas/src/cblas_dspr2.c +++ b/frame/compat/cblas/src/cblas_dspr2.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dspr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_dspr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const double alpha, const double *X, f77_int incX, const double *Y, f77_int incY, double *A) { diff --git a/frame/compat/cblas/src/cblas_dswap.c b/frame/compat/cblas/src/cblas_dswap.c index ec676d9ca..e204baea0 100644 --- a/frame/compat/cblas/src/cblas_dswap.c +++ b/frame/compat/cblas/src/cblas_dswap.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dswap( f77_int N, double *X, f77_int incX, double *Y, +void cblas_dswap( f77_int N, double *X, f77_int incX, double *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_dsymm.c b/frame/compat/cblas/src/cblas_dsymm.c index 119f7a419..81bc52268 100644 --- a/frame/compat/cblas/src/cblas_dsymm.c +++ b/frame/compat/cblas/src/cblas_dsymm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dsymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void cblas_dsymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, double alpha, const double *A, f77_int lda, const double *B, f77_int ldb, double beta, diff --git a/frame/compat/cblas/src/cblas_dsymv.c b/frame/compat/cblas/src/cblas_dsymv.c index 6e3ddc1f4..d0c2aa642 100644 --- a/frame/compat/cblas/src/cblas_dsymv.c +++ b/frame/compat/cblas/src/cblas_dsymv.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dsymv(enum CBLAS_ORDER order, +void cblas_dsymv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const double *A, f77_int lda, const double *X, f77_int incX, double beta, diff --git a/frame/compat/cblas/src/cblas_dsyr.c b/frame/compat/cblas/src/cblas_dsyr.c index 69eec6ff4..f6dd66c75 100644 --- a/frame/compat/cblas/src/cblas_dsyr.c +++ b/frame/compat/cblas/src/cblas_dsyr.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dsyr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_dsyr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const double alpha, const double *X, f77_int incX, double *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_dsyr2.c b/frame/compat/cblas/src/cblas_dsyr2.c index b43ce4c6a..c0d773939 100644 --- a/frame/compat/cblas/src/cblas_dsyr2.c +++ b/frame/compat/cblas/src/cblas_dsyr2.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dsyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_dsyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const double alpha, const double *X, f77_int incX, const double *Y, f77_int incY, double *A, f77_int lda) diff --git a/frame/compat/cblas/src/cblas_dsyr2k.c b/frame/compat/cblas/src/cblas_dsyr2k.c index 45b12a12c..2c35b9929 100644 --- a/frame/compat/cblas/src/cblas_dsyr2k.c +++ b/frame/compat/cblas/src/cblas_dsyr2k.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dsyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void cblas_dsyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, double alpha, const double *A, f77_int lda, const double *B, f77_int ldb, double beta, diff --git a/frame/compat/cblas/src/cblas_dsyrk.c b/frame/compat/cblas/src/cblas_dsyrk.c index 4a71e3b40..8a7ca1651 100644 --- a/frame/compat/cblas/src/cblas_dsyrk.c +++ b/frame/compat/cblas/src/cblas_dsyrk.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dsyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void cblas_dsyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, double alpha, const double *A, f77_int lda, double beta, double *C, f77_int ldc) diff --git a/frame/compat/cblas/src/cblas_dtbmv.c b/frame/compat/cblas/src/cblas_dtbmv.c index 702bfca63..6502c1c22 100644 --- a/frame/compat/cblas/src/cblas_dtbmv.c +++ b/frame/compat/cblas/src/cblas_dtbmv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dtbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_dtbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const double *A, f77_int lda, double *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_dtbsv.c b/frame/compat/cblas/src/cblas_dtbsv.c index 2817ff3d2..aae08e956 100644 --- a/frame/compat/cblas/src/cblas_dtbsv.c +++ b/frame/compat/cblas/src/cblas_dtbsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dtbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_dtbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const double *A, f77_int lda, double *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_dtpmv.c b/frame/compat/cblas/src/cblas_dtpmv.c index 4e74b95f6..b72b4ed7e 100644 --- a/frame/compat/cblas/src/cblas_dtpmv.c +++ b/frame/compat/cblas/src/cblas_dtpmv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dtpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_dtpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const double *Ap, double *X, f77_int incX) { diff --git a/frame/compat/cblas/src/cblas_dtpsv.c b/frame/compat/cblas/src/cblas_dtpsv.c index 484358acf..501e4a256 100644 --- a/frame/compat/cblas/src/cblas_dtpsv.c +++ b/frame/compat/cblas/src/cblas_dtpsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dtpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_dtpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const double *Ap, double *X, f77_int incX) { diff --git a/frame/compat/cblas/src/cblas_dtrmm.c b/frame/compat/cblas/src/cblas_dtrmm.c index 4cd180261..c93c4862a 100644 --- a/frame/compat/cblas/src/cblas_dtrmm.c +++ b/frame/compat/cblas/src/cblas_dtrmm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dtrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void cblas_dtrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, double alpha, const double *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_dtrmv.c b/frame/compat/cblas/src/cblas_dtrmv.c index 404110b91..904d4b75b 100644 --- a/frame/compat/cblas/src/cblas_dtrmv.c +++ b/frame/compat/cblas/src/cblas_dtrmv.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dtrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_dtrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const double *A, f77_int lda, double *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_dtrsm.c b/frame/compat/cblas/src/cblas_dtrsm.c index 1480ff2c5..552620495 100644 --- a/frame/compat/cblas/src/cblas_dtrsm.c +++ b/frame/compat/cblas/src/cblas_dtrsm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dtrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void cblas_dtrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, double alpha, const double *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_dtrsv.c b/frame/compat/cblas/src/cblas_dtrsv.c index 428b36781..4d257f7ea 100644 --- a/frame/compat/cblas/src/cblas_dtrsv.c +++ b/frame/compat/cblas/src/cblas_dtrsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_dtrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_dtrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const double *A, f77_int lda, double *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_saxpy.c b/frame/compat/cblas/src/cblas_saxpy.c index c3846e9e4..b7f2b2d4e 100644 --- a/frame/compat/cblas/src/cblas_saxpy.c +++ b/frame/compat/cblas/src/cblas_saxpy.c @@ -11,7 +11,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_saxpy( f77_int N, float alpha, const float *X, +void cblas_saxpy( f77_int N, float alpha, const float *X, f77_int incX, float *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_scopy.c b/frame/compat/cblas/src/cblas_scopy.c index 5f254eb52..f54343ff1 100644 --- a/frame/compat/cblas/src/cblas_scopy.c +++ b/frame/compat/cblas/src/cblas_scopy.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_scopy( f77_int N, const float *X, +void cblas_scopy( f77_int N, const float *X, f77_int incX, float *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_sgbmv.c b/frame/compat/cblas/src/cblas_sgbmv.c index bf6b02ad9..8bf944f9d 100644 --- a/frame/compat/cblas/src/cblas_sgbmv.c +++ b/frame/compat/cblas/src/cblas_sgbmv.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_sgbmv(enum CBLAS_ORDER order, +void cblas_sgbmv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, f77_int KL, f77_int KU, float alpha, const float *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_sgemm.c b/frame/compat/cblas/src/cblas_sgemm.c index 09ed071ff..89d0f07a8 100644 --- a/frame/compat/cblas/src/cblas_sgemm.c +++ b/frame/compat/cblas/src/cblas_sgemm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_sgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, +void cblas_sgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB, f77_int M, f77_int N, f77_int K, float alpha, const float *A, f77_int lda, const float *B, f77_int ldb, diff --git a/frame/compat/cblas/src/cblas_sgemv.c b/frame/compat/cblas/src/cblas_sgemv.c index 79d536f6b..552140fec 100644 --- a/frame/compat/cblas/src/cblas_sgemv.c +++ b/frame/compat/cblas/src/cblas_sgemv.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_sgemv(enum CBLAS_ORDER order, +void cblas_sgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, float alpha, const float *A, f77_int lda, const float *X, f77_int incX, float beta, diff --git a/frame/compat/cblas/src/cblas_sger.c b/frame/compat/cblas/src/cblas_sger.c index 64fb8bf8d..0617bad1e 100644 --- a/frame/compat/cblas/src/cblas_sger.c +++ b/frame/compat/cblas/src/cblas_sger.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_sger(enum CBLAS_ORDER order, f77_int M, f77_int N, +void cblas_sger(enum CBLAS_ORDER order, f77_int M, f77_int N, const float alpha, const float *X, f77_int incX, const float *Y, f77_int incY, float *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_srot.c b/frame/compat/cblas/src/cblas_srot.c index 3279a5b99..b9e7ede46 100644 --- a/frame/compat/cblas/src/cblas_srot.c +++ b/frame/compat/cblas/src/cblas_srot.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_srot( f77_int N, float *X, f77_int incX, float *Y, +void cblas_srot( f77_int N, float *X, f77_int incX, float *Y, f77_int incY, const float c, const float s) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_srotg.c b/frame/compat/cblas/src/cblas_srotg.c index 761dc34e3..165497f7e 100644 --- a/frame/compat/cblas/src/cblas_srotg.c +++ b/frame/compat/cblas/src/cblas_srotg.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_srotg( float *a, float *b, float *c, float *s) +void cblas_srotg( float *a, float *b, float *c, float *s) { F77_srotg(a,b,c,s); } diff --git a/frame/compat/cblas/src/cblas_srotm.c b/frame/compat/cblas/src/cblas_srotm.c index 335f76733..ce417d769 100644 --- a/frame/compat/cblas/src/cblas_srotm.c +++ b/frame/compat/cblas/src/cblas_srotm.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_srotm( f77_int N, float *X, f77_int incX, float *Y, +void cblas_srotm( f77_int N, float *X, f77_int incX, float *Y, f77_int incY, const float *P) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_srotmg.c b/frame/compat/cblas/src/cblas_srotmg.c index c5c845aa7..7f26ac659 100644 --- a/frame/compat/cblas/src/cblas_srotmg.c +++ b/frame/compat/cblas/src/cblas_srotmg.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_srotmg( float *d1, float *d2, float *b1, +void cblas_srotmg( float *d1, float *d2, float *b1, const float b2, float *p) { F77_srotmg(d1,d2,b1,&b2,p); diff --git a/frame/compat/cblas/src/cblas_ssbmv.c b/frame/compat/cblas/src/cblas_ssbmv.c index 4935323b0..ef8a96cfb 100644 --- a/frame/compat/cblas/src/cblas_ssbmv.c +++ b/frame/compat/cblas/src/cblas_ssbmv.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ssbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_ssbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, f77_int K, float alpha, const float *A, f77_int lda, const float *X, f77_int incX, float beta, float *Y, f77_int incY) diff --git a/frame/compat/cblas/src/cblas_sscal.c b/frame/compat/cblas/src/cblas_sscal.c index fda92231c..55547ae64 100644 --- a/frame/compat/cblas/src/cblas_sscal.c +++ b/frame/compat/cblas/src/cblas_sscal.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_sscal( f77_int N, float alpha, float *X, +void cblas_sscal( f77_int N, float alpha, float *X, f77_int incX) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_sspmv.c b/frame/compat/cblas/src/cblas_sspmv.c index 28dc0b36c..a54f64214 100644 --- a/frame/compat/cblas/src/cblas_sspmv.c +++ b/frame/compat/cblas/src/cblas_sspmv.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_sspmv(enum CBLAS_ORDER order, +void cblas_sspmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, float alpha, const float *AP, const float *X, f77_int incX, float beta, diff --git a/frame/compat/cblas/src/cblas_sspr.c b/frame/compat/cblas/src/cblas_sspr.c index a2b60e96d..693dbba8c 100644 --- a/frame/compat/cblas/src/cblas_sspr.c +++ b/frame/compat/cblas/src/cblas_sspr.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_sspr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_sspr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const float alpha, const float *X, f77_int incX, float *Ap) { diff --git a/frame/compat/cblas/src/cblas_sspr2.c b/frame/compat/cblas/src/cblas_sspr2.c index e38e6749f..a4b612897 100644 --- a/frame/compat/cblas/src/cblas_sspr2.c +++ b/frame/compat/cblas/src/cblas_sspr2.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_sspr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_sspr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const float alpha, const float *X, f77_int incX, const float *Y, f77_int incY, float *A) { diff --git a/frame/compat/cblas/src/cblas_sswap.c b/frame/compat/cblas/src/cblas_sswap.c index e97aa27ef..2c24ad0fa 100644 --- a/frame/compat/cblas/src/cblas_sswap.c +++ b/frame/compat/cblas/src/cblas_sswap.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_sswap( f77_int N, float *X, f77_int incX, float *Y, +void cblas_sswap( f77_int N, float *X, f77_int incX, float *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_ssymm.c b/frame/compat/cblas/src/cblas_ssymm.c index 138c3b47d..218ddba6a 100644 --- a/frame/compat/cblas/src/cblas_ssymm.c +++ b/frame/compat/cblas/src/cblas_ssymm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ssymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void cblas_ssymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, float alpha, const float *A, f77_int lda, const float *B, f77_int ldb, float beta, diff --git a/frame/compat/cblas/src/cblas_ssymv.c b/frame/compat/cblas/src/cblas_ssymv.c index 43a835cdd..6027aaddf 100644 --- a/frame/compat/cblas/src/cblas_ssymv.c +++ b/frame/compat/cblas/src/cblas_ssymv.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ssymv(enum CBLAS_ORDER order, +void cblas_ssymv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, float alpha, const float *A, f77_int lda, const float *X, f77_int incX, float beta, diff --git a/frame/compat/cblas/src/cblas_ssyr.c b/frame/compat/cblas/src/cblas_ssyr.c index 90d4a748f..14ed8fe54 100644 --- a/frame/compat/cblas/src/cblas_ssyr.c +++ b/frame/compat/cblas/src/cblas_ssyr.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ssyr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_ssyr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const float alpha, const float *X, f77_int incX, float *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_ssyr2.c b/frame/compat/cblas/src/cblas_ssyr2.c index 287eacdd6..48263f2ae 100644 --- a/frame/compat/cblas/src/cblas_ssyr2.c +++ b/frame/compat/cblas/src/cblas_ssyr2.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ssyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_ssyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const float alpha, const float *X, f77_int incX, const float *Y, f77_int incY, float *A, f77_int lda) diff --git a/frame/compat/cblas/src/cblas_ssyr2k.c b/frame/compat/cblas/src/cblas_ssyr2k.c index 9687f2dd9..50cf8bf1d 100644 --- a/frame/compat/cblas/src/cblas_ssyr2k.c +++ b/frame/compat/cblas/src/cblas_ssyr2k.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ssyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void cblas_ssyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, float alpha, const float *A, f77_int lda, const float *B, f77_int ldb, float beta, diff --git a/frame/compat/cblas/src/cblas_ssyrk.c b/frame/compat/cblas/src/cblas_ssyrk.c index 63364bb91..6f486870f 100644 --- a/frame/compat/cblas/src/cblas_ssyrk.c +++ b/frame/compat/cblas/src/cblas_ssyrk.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ssyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void cblas_ssyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, float alpha, const float *A, f77_int lda, float beta, float *C, f77_int ldc) diff --git a/frame/compat/cblas/src/cblas_stbmv.c b/frame/compat/cblas/src/cblas_stbmv.c index 7f67b0d64..15daa49da 100644 --- a/frame/compat/cblas/src/cblas_stbmv.c +++ b/frame/compat/cblas/src/cblas_stbmv.c @@ -9,7 +9,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_stbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_stbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const float *A, f77_int lda, float *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_stbsv.c b/frame/compat/cblas/src/cblas_stbsv.c index d2137984b..ec9d9c844 100644 --- a/frame/compat/cblas/src/cblas_stbsv.c +++ b/frame/compat/cblas/src/cblas_stbsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_stbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_stbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const float *A, f77_int lda, float *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_stpmv.c b/frame/compat/cblas/src/cblas_stpmv.c index f8b9dc979..91b308176 100644 --- a/frame/compat/cblas/src/cblas_stpmv.c +++ b/frame/compat/cblas/src/cblas_stpmv.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_stpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_stpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const float *Ap, float *X, f77_int incX) { diff --git a/frame/compat/cblas/src/cblas_stpsv.c b/frame/compat/cblas/src/cblas_stpsv.c index d0bbc7661..548eaec79 100644 --- a/frame/compat/cblas/src/cblas_stpsv.c +++ b/frame/compat/cblas/src/cblas_stpsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_stpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_stpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const float *Ap, float *X, f77_int incX) { diff --git a/frame/compat/cblas/src/cblas_strmm.c b/frame/compat/cblas/src/cblas_strmm.c index 93f2406c5..a7737109b 100644 --- a/frame/compat/cblas/src/cblas_strmm.c +++ b/frame/compat/cblas/src/cblas_strmm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_strmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void cblas_strmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, float alpha, const float *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_strmv.c b/frame/compat/cblas/src/cblas_strmv.c index 4d0e7ebc7..987589eb7 100644 --- a/frame/compat/cblas/src/cblas_strmv.c +++ b/frame/compat/cblas/src/cblas_strmv.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_strmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_strmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const float *A, f77_int lda, float *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_strsm.c b/frame/compat/cblas/src/cblas_strsm.c index 64cea9327..ef78969f0 100644 --- a/frame/compat/cblas/src/cblas_strsm.c +++ b/frame/compat/cblas/src/cblas_strsm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_strsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void cblas_strsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, float alpha, const float *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_strsv.c b/frame/compat/cblas/src/cblas_strsv.c index d3c2cb063..a37c797b8 100644 --- a/frame/compat/cblas/src/cblas_strsv.c +++ b/frame/compat/cblas/src/cblas_strsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_strsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_strsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const float *A, f77_int lda, float *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_xerbla.c b/frame/compat/cblas/src/cblas_xerbla.c index 8577f5fb2..ebe6bd800 100644 --- a/frame/compat/cblas/src/cblas_xerbla.c +++ b/frame/compat/cblas/src/cblas_xerbla.c @@ -7,7 +7,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_xerbla(f77_int info, const char *rout, const char *form, ...) +void cblas_xerbla(f77_int info, const char *rout, const char *form, ...) { extern int RowMajorStrg; char empty[1] = ""; diff --git a/frame/compat/cblas/src/cblas_zaxpy.c b/frame/compat/cblas/src/cblas_zaxpy.c index 60998af86..dcf2f5c78 100644 --- a/frame/compat/cblas/src/cblas_zaxpy.c +++ b/frame/compat/cblas/src/cblas_zaxpy.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zaxpy( f77_int N, const void *alpha, const void *X, +void cblas_zaxpy( f77_int N, const void *alpha, const void *X, f77_int incX, void *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_zcopy.c b/frame/compat/cblas/src/cblas_zcopy.c index 81bac5ae9..5b0a7dd5d 100644 --- a/frame/compat/cblas/src/cblas_zcopy.c +++ b/frame/compat/cblas/src/cblas_zcopy.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zcopy( f77_int N, const void *X, +void cblas_zcopy( f77_int N, const void *X, f77_int incX, void *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_zdotc_sub.c b/frame/compat/cblas/src/cblas_zdotc_sub.c index d9603a849..2e0808c88 100644 --- a/frame/compat/cblas/src/cblas_zdotc_sub.c +++ b/frame/compat/cblas/src/cblas_zdotc_sub.c @@ -11,7 +11,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zdotc_sub( f77_int N, const void *X, f77_int incX, +void cblas_zdotc_sub( f77_int N, const void *X, f77_int incX, const void *Y, f77_int incY, void *dotc) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_zdotu_sub.c b/frame/compat/cblas/src/cblas_zdotu_sub.c index 2561df276..255ad833f 100644 --- a/frame/compat/cblas/src/cblas_zdotu_sub.c +++ b/frame/compat/cblas/src/cblas_zdotu_sub.c @@ -11,7 +11,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zdotu_sub( f77_int N, const void *X, f77_int incX, +void cblas_zdotu_sub( f77_int N, const void *X, f77_int incX, const void *Y, f77_int incY, void *dotu) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_zdscal.c b/frame/compat/cblas/src/cblas_zdscal.c index 062609b08..9666e4509 100644 --- a/frame/compat/cblas/src/cblas_zdscal.c +++ b/frame/compat/cblas/src/cblas_zdscal.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zdscal( f77_int N, double alpha, void *X, +void cblas_zdscal( f77_int N, double alpha, void *X, f77_int incX) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_zgbmv.c b/frame/compat/cblas/src/cblas_zgbmv.c index 967b14981..f6efa4e7b 100644 --- a/frame/compat/cblas/src/cblas_zgbmv.c +++ b/frame/compat/cblas/src/cblas_zgbmv.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zgbmv(enum CBLAS_ORDER order, +void cblas_zgbmv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, f77_int KL, f77_int KU, const void *alpha, const void *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_zgemm.c b/frame/compat/cblas/src/cblas_zgemm.c index a3ccc9a07..e50de2205 100644 --- a/frame/compat/cblas/src/cblas_zgemm.c +++ b/frame/compat/cblas/src/cblas_zgemm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, +void cblas_zgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB, f77_int M, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, diff --git a/frame/compat/cblas/src/cblas_zgemv.c b/frame/compat/cblas/src/cblas_zgemv.c index 689702d6f..05b0bfe84 100644 --- a/frame/compat/cblas/src/cblas_zgemv.c +++ b/frame/compat/cblas/src/cblas_zgemv.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zgemv(enum CBLAS_ORDER order, +void cblas_zgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, diff --git a/frame/compat/cblas/src/cblas_zgerc.c b/frame/compat/cblas/src/cblas_zgerc.c index e93fa21b8..9667958c5 100644 --- a/frame/compat/cblas/src/cblas_zgerc.c +++ b/frame/compat/cblas/src/cblas_zgerc.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zgerc(enum CBLAS_ORDER order, f77_int M, f77_int N, +void cblas_zgerc(enum CBLAS_ORDER order, f77_int M, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_zgeru.c b/frame/compat/cblas/src/cblas_zgeru.c index 9471781f7..3538ed044 100644 --- a/frame/compat/cblas/src/cblas_zgeru.c +++ b/frame/compat/cblas/src/cblas_zgeru.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zgeru(enum CBLAS_ORDER order, f77_int M, f77_int N, +void cblas_zgeru(enum CBLAS_ORDER order, f77_int M, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_zhbmv.c b/frame/compat/cblas/src/cblas_zhbmv.c index dc544841a..8bfd139e9 100644 --- a/frame/compat/cblas/src/cblas_zhbmv.c +++ b/frame/compat/cblas/src/cblas_zhbmv.c @@ -11,7 +11,7 @@ #include "cblas_f77.h" #include #include -void BLIS_EXPORT_BLAS cblas_zhbmv(enum CBLAS_ORDER order, +void cblas_zhbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo,f77_int N,f77_int K, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, diff --git a/frame/compat/cblas/src/cblas_zhemm.c b/frame/compat/cblas/src/cblas_zhemm.c index bc19ae828..7da2a41e6 100644 --- a/frame/compat/cblas/src/cblas_zhemm.c +++ b/frame/compat/cblas/src/cblas_zhemm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zhemm(enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, +void cblas_zhemm(enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, diff --git a/frame/compat/cblas/src/cblas_zhemv.c b/frame/compat/cblas/src/cblas_zhemv.c index 62d44b3e6..a0b6082ce 100644 --- a/frame/compat/cblas/src/cblas_zhemv.c +++ b/frame/compat/cblas/src/cblas_zhemv.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zhemv(enum CBLAS_ORDER order, +void cblas_zhemv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const void *alpha, const void *A, f77_int lda, const void *X, f77_int incX, const void *beta, diff --git a/frame/compat/cblas/src/cblas_zher.c b/frame/compat/cblas/src/cblas_zher.c index ecbd36418..9e513d43b 100644 --- a/frame/compat/cblas/src/cblas_zher.c +++ b/frame/compat/cblas/src/cblas_zher.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zher(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_zher(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const void *X, f77_int incX ,void *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_zher2.c b/frame/compat/cblas/src/cblas_zher2.c index 9c523d952..5d49302f9 100644 --- a/frame/compat/cblas/src/cblas_zher2.c +++ b/frame/compat/cblas/src/cblas_zher2.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zher2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_zher2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, const void *alpha, const void *X, f77_int incX, const void *Y, f77_int incY, void *A, f77_int lda) { diff --git a/frame/compat/cblas/src/cblas_zher2k.c b/frame/compat/cblas/src/cblas_zher2k.c index d03ec1370..424f650d0 100644 --- a/frame/compat/cblas/src/cblas_zher2k.c +++ b/frame/compat/cblas/src/cblas_zher2k.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zher2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void cblas_zher2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, double beta, diff --git a/frame/compat/cblas/src/cblas_zherk.c b/frame/compat/cblas/src/cblas_zherk.c index 3167dc0fa..5ddb45184 100644 --- a/frame/compat/cblas/src/cblas_zherk.c +++ b/frame/compat/cblas/src/cblas_zherk.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zherk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void cblas_zherk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, double alpha, const void *A, f77_int lda, double beta, void *C, f77_int ldc) diff --git a/frame/compat/cblas/src/cblas_zhpmv.c b/frame/compat/cblas/src/cblas_zhpmv.c index 602007023..912300d44 100644 --- a/frame/compat/cblas/src/cblas_zhpmv.c +++ b/frame/compat/cblas/src/cblas_zhpmv.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zhpmv(enum CBLAS_ORDER order, +void cblas_zhpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo,f77_int N, const void *alpha, const void *AP, const void *X, f77_int incX, const void *beta, diff --git a/frame/compat/cblas/src/cblas_zhpr.c b/frame/compat/cblas/src/cblas_zhpr.c index 0f45fd261..80d238170 100644 --- a/frame/compat/cblas/src/cblas_zhpr.c +++ b/frame/compat/cblas/src/cblas_zhpr.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zhpr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_zhpr(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N, double alpha, const void *X, f77_int incX, void *A) { diff --git a/frame/compat/cblas/src/cblas_zhpr2.c b/frame/compat/cblas/src/cblas_zhpr2.c index 6358efc1a..2aa46062a 100644 --- a/frame/compat/cblas/src/cblas_zhpr2.c +++ b/frame/compat/cblas/src/cblas_zhpr2.c @@ -11,7 +11,7 @@ #include #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zhpr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_zhpr2(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, f77_int N,const void *alpha, const void *X, f77_int incX,const void *Y, f77_int incY, void *Ap) diff --git a/frame/compat/cblas/src/cblas_zscal.c b/frame/compat/cblas/src/cblas_zscal.c index c58ddf84b..a66ea6f9d 100644 --- a/frame/compat/cblas/src/cblas_zscal.c +++ b/frame/compat/cblas/src/cblas_zscal.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zscal( f77_int N, const void *alpha, void *X, +void cblas_zscal( f77_int N, const void *alpha, void *X, f77_int incX) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_zswap.c b/frame/compat/cblas/src/cblas_zswap.c index 662933988..6b2eb1a20 100644 --- a/frame/compat/cblas/src/cblas_zswap.c +++ b/frame/compat/cblas/src/cblas_zswap.c @@ -10,7 +10,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zswap( f77_int N, void *X, f77_int incX, void *Y, +void cblas_zswap( f77_int N, void *X, f77_int incX, void *Y, f77_int incY) { #ifdef F77_INT diff --git a/frame/compat/cblas/src/cblas_zsymm.c b/frame/compat/cblas/src/cblas_zsymm.c index 4292d6709..9303c5921 100644 --- a/frame/compat/cblas/src/cblas_zsymm.c +++ b/frame/compat/cblas/src/cblas_zsymm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zsymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void cblas_zsymm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, diff --git a/frame/compat/cblas/src/cblas_zsyr2k.c b/frame/compat/cblas/src/cblas_zsyr2k.c index f4a4f0e12..c275cc693 100644 --- a/frame/compat/cblas/src/cblas_zsyr2k.c +++ b/frame/compat/cblas/src/cblas_zsyr2k.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zsyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void cblas_zsyr2k(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *B, f77_int ldb, const void *beta, diff --git a/frame/compat/cblas/src/cblas_zsyrk.c b/frame/compat/cblas/src/cblas_zsyrk.c index 641a975e6..ce2c0e1c8 100644 --- a/frame/compat/cblas/src/cblas_zsyrk.c +++ b/frame/compat/cblas/src/cblas_zsyrk.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_zsyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, +void cblas_zsyrk(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Trans, f77_int N, f77_int K, const void *alpha, const void *A, f77_int lda, const void *beta, void *C, f77_int ldc) diff --git a/frame/compat/cblas/src/cblas_ztbmv.c b/frame/compat/cblas/src/cblas_ztbmv.c index e07fb42d2..3c7f58b96 100644 --- a/frame/compat/cblas/src/cblas_ztbmv.c +++ b/frame/compat/cblas/src/cblas_ztbmv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ztbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_ztbmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const void *A, f77_int lda, void *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_ztbsv.c b/frame/compat/cblas/src/cblas_ztbsv.c index e2126e49c..56d936e1b 100644 --- a/frame/compat/cblas/src/cblas_ztbsv.c +++ b/frame/compat/cblas/src/cblas_ztbsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ztbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_ztbsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, f77_int K, const void *A, f77_int lda, void *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_ztpmv.c b/frame/compat/cblas/src/cblas_ztpmv.c index a89a3fdc7..a8717ccc5 100644 --- a/frame/compat/cblas/src/cblas_ztpmv.c +++ b/frame/compat/cblas/src/cblas_ztpmv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ztpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_ztpmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *Ap, void *X, f77_int incX) { diff --git a/frame/compat/cblas/src/cblas_ztpsv.c b/frame/compat/cblas/src/cblas_ztpsv.c index 1f51f5d9f..4aa3706cc 100644 --- a/frame/compat/cblas/src/cblas_ztpsv.c +++ b/frame/compat/cblas/src/cblas_ztpsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ztpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_ztpsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *Ap, void *X, f77_int incX) { diff --git a/frame/compat/cblas/src/cblas_ztrmm.c b/frame/compat/cblas/src/cblas_ztrmm.c index 958a232b3..6fa8a2ca9 100644 --- a/frame/compat/cblas/src/cblas_ztrmm.c +++ b/frame/compat/cblas/src/cblas_ztrmm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ztrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void cblas_ztrmm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_ztrmv.c b/frame/compat/cblas/src/cblas_ztrmv.c index bb3bf4516..590105d62 100644 --- a/frame/compat/cblas/src/cblas_ztrmv.c +++ b/frame/compat/cblas/src/cblas_ztrmv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ztrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_ztrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *A, f77_int lda, void *X, f77_int incX) diff --git a/frame/compat/cblas/src/cblas_ztrsm.c b/frame/compat/cblas/src/cblas_ztrsm.c index fda012933..a68c70e1c 100644 --- a/frame/compat/cblas/src/cblas_ztrsm.c +++ b/frame/compat/cblas/src/cblas_ztrsm.c @@ -11,7 +11,7 @@ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ztrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, +void cblas_ztrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int M, f77_int N, const void *alpha, const void *A, f77_int lda, diff --git a/frame/compat/cblas/src/cblas_ztrsv.c b/frame/compat/cblas/src/cblas_ztrsv.c index e68d9ebe8..1a541f7b1 100644 --- a/frame/compat/cblas/src/cblas_ztrsv.c +++ b/frame/compat/cblas/src/cblas_ztrsv.c @@ -9,7 +9,7 @@ */ #include "cblas.h" #include "cblas_f77.h" -void BLIS_EXPORT_BLAS cblas_ztrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, +void cblas_ztrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE TransA, enum CBLAS_DIAG Diag, f77_int N, const void *A, f77_int lda, void *X, f77_int incX) diff --git a/frame/compat/f2c/bla_cabs1.c b/frame/compat/f2c/bla_cabs1.c index c62cb233a..59459f2fe 100644 --- a/frame/compat/f2c/bla_cabs1.c +++ b/frame/compat/f2c/bla_cabs1.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ bla_real BLIS_EXPORT_BLAS PASTEF77(s,cabs1)(bla_scomplex *z) +/* Subroutine */ bla_real PASTEF77(s,cabs1)(bla_scomplex *z) { return bli_fabs( bli_creal( *z ) ) + bli_fabs( bli_cimag( *z ) ); @@ -52,7 +52,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ bla_double BLIS_EXPORT_BLAS PASTEF77(d,cabs1)(bla_dcomplex *z) +/* Subroutine */ bla_double PASTEF77(d,cabs1)(bla_dcomplex *z) { return bli_fabs( bli_zreal( *z ) ) + bli_fabs( bli_zimag( *z ) ); diff --git a/frame/compat/f2c/bla_gbmv.c b/frame/compat/f2c/bla_gbmv.c index 5f68b5beb..d53dd322a 100644 --- a/frame/compat/f2c/bla_gbmv.c +++ b/frame/compat/f2c/bla_gbmv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_scomplex *alpha, const bla_scomplex *a, const bla_integer *lda, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy) +/* Subroutine */ int PASTEF77(c,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_scomplex *alpha, const bla_scomplex *a, const bla_integer *lda, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6; @@ -54,9 +54,9 @@ bla_integer info; bla_scomplex temp; bla_integer lenx, leny, i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj; bla_integer kup1; @@ -482,7 +482,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_double *alpha, const bla_double *a, const bla_integer *lda, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy) +/* Subroutine */ int PASTEF77(d,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_double *alpha, const bla_double *a, const bla_integer *lda, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6; @@ -491,9 +491,9 @@ bla_integer info; bla_double temp; bla_integer lenx, leny, i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_integer kup1; /* .. Scalar Arguments .. */ @@ -838,7 +838,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_real *alpha, const bla_real *a, const bla_integer *lda, const bla_real *x, const bla_integer * incx, const bla_real *beta, bla_real *y, const bla_integer *incy) +/* Subroutine */ int PASTEF77(s,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_real *alpha, const bla_real *a, const bla_integer *lda, const bla_real *x, const bla_integer * incx, const bla_real *beta, bla_real *y, const bla_integer *incy) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6; @@ -847,9 +847,9 @@ bla_integer info; bla_real temp; bla_integer lenx, leny, i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_integer kup1; /* .. Scalar Arguments .. */ @@ -1194,7 +1194,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_dcomplex *alpha, const bla_dcomplex *a, const bla_integer *lda, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *beta, bla_dcomplex * y, const bla_integer *incy) +/* Subroutine */ int PASTEF77(z,gbmv)(const bla_character *trans, const bla_integer *m, const bla_integer *n, const bla_integer *kl, const bla_integer *ku, const bla_dcomplex *alpha, const bla_dcomplex *a, const bla_integer *lda, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *beta, bla_dcomplex * y, const bla_integer *incy) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6; @@ -1207,9 +1207,9 @@ bla_integer info; bla_dcomplex temp; bla_integer lenx, leny, i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj; bla_integer kup1; diff --git a/frame/compat/f2c/bla_hbmv.c b/frame/compat/f2c/bla_hbmv.c index f548331f6..198336d04 100644 --- a/frame/compat/f2c/bla_hbmv.c +++ b/frame/compat/f2c/bla_hbmv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,hbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_scomplex * alpha, const bla_scomplex *a, const bla_integer *lda, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy) +/* Subroutine */ int PASTEF77(c,hbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_scomplex * alpha, const bla_scomplex *a, const bla_integer *lda, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5; @@ -55,9 +55,9 @@ bla_integer info; bla_scomplex temp1, temp2; bla_integer i__, j, l; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ @@ -487,7 +487,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,hbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_dcomplex *alpha, const bla_dcomplex *a, const bla_integer *lda, const bla_dcomplex *x, const bla_integer * incx, const bla_dcomplex *beta, bla_dcomplex *y, const bla_integer *incy) +/* Subroutine */ int PASTEF77(z,hbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_dcomplex *alpha, const bla_dcomplex *a, const bla_integer *lda, const bla_dcomplex *x, const bla_integer * incx, const bla_dcomplex *beta, bla_dcomplex *y, const bla_integer *incy) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5; @@ -501,9 +501,9 @@ bla_integer info; bla_dcomplex temp1, temp2; bla_integer i__, j, l; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ diff --git a/frame/compat/f2c/bla_hpmv.c b/frame/compat/f2c/bla_hpmv.c index 2daa47bf5..0d7ebce9d 100644 --- a/frame/compat/f2c/bla_hpmv.c +++ b/frame/compat/f2c/bla_hpmv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,hpmv)(const bla_character *uplo, const bla_integer *n, const bla_scomplex *alpha, const bla_scomplex * ap, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy) +/* Subroutine */ int PASTEF77(c,hpmv)(const bla_character *uplo, const bla_integer *n, const bla_scomplex *alpha, const bla_scomplex * ap, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *beta, bla_scomplex *y, const bla_integer *incy) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5; @@ -55,9 +55,9 @@ bla_integer info; bla_scomplex temp1, temp2; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ @@ -439,7 +439,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,hpmv)(const bla_character *uplo, const bla_integer *n, const bla_dcomplex *alpha, const bla_dcomplex *ap, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *beta, bla_dcomplex *y, const bla_integer *incy) +/* Subroutine */ int PASTEF77(z,hpmv)(const bla_character *uplo, const bla_integer *n, const bla_dcomplex *alpha, const bla_dcomplex *ap, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *beta, bla_dcomplex *y, const bla_integer *incy) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5; @@ -453,9 +453,9 @@ bla_integer info; bla_dcomplex temp1, temp2; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ diff --git a/frame/compat/f2c/bla_hpr.c b/frame/compat/f2c/bla_hpr.c index be0f796c6..da1f0a0f3 100644 --- a/frame/compat/f2c/bla_hpr.c +++ b/frame/compat/f2c/bla_hpr.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,hpr)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_scomplex *x, const bla_integer *incx, bla_scomplex *ap) +/* Subroutine */ int PASTEF77(c,hpr)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_scomplex *x, const bla_integer *incx, bla_scomplex *ap) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5; @@ -55,9 +55,9 @@ bla_integer info; bla_scomplex temp; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ @@ -353,7 +353,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,hpr)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_dcomplex *x, const bla_integer *incx, bla_dcomplex *ap) +/* Subroutine */ int PASTEF77(z,hpr)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_dcomplex *x, const bla_integer *incx, bla_dcomplex *ap) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5; @@ -367,9 +367,9 @@ bla_integer info; bla_dcomplex temp; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ diff --git a/frame/compat/f2c/bla_hpr2.c b/frame/compat/f2c/bla_hpr2.c index 597ab7439..c78c1eec0 100644 --- a/frame/compat/f2c/bla_hpr2.c +++ b/frame/compat/f2c/bla_hpr2.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,hpr2)(const bla_character *uplo, const bla_integer *n, const bla_scomplex *alpha, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *y, const bla_integer *incy, bla_scomplex *ap) +/* Subroutine */ int PASTEF77(c,hpr2)(const bla_character *uplo, const bla_integer *n, const bla_scomplex *alpha, const bla_scomplex *x, const bla_integer *incx, const bla_scomplex *y, const bla_integer *incy, bla_scomplex *ap) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5, i__6; @@ -55,9 +55,9 @@ bla_integer info; bla_scomplex temp1, temp2; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, iy, jx = 0, jy = 0, kx = 0, ky = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ @@ -429,7 +429,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,hpr2)(const bla_character *uplo, const bla_integer *n, const bla_dcomplex *alpha, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *y, const bla_integer *incy, bla_dcomplex *ap) +/* Subroutine */ int PASTEF77(z,hpr2)(const bla_character *uplo, const bla_integer *n, const bla_dcomplex *alpha, const bla_dcomplex *x, const bla_integer *incx, const bla_dcomplex *y, const bla_integer *incy, bla_dcomplex *ap) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5, i__6; @@ -443,9 +443,9 @@ bla_integer info; bla_dcomplex temp1, temp2; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, iy, jx = 0, jy = 0, kx = 0, ky = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ diff --git a/frame/compat/f2c/bla_lsame.c b/frame/compat/f2c/bla_lsame.c index c5a7d2558..edee918d1 100644 --- a/frame/compat/f2c/bla_lsame.c +++ b/frame/compat/f2c/bla_lsame.c @@ -45,7 +45,7 @@ #ifdef LAPACK_ILP64 long PASTEF770(lsame)(const char *ca, const char *cb, long ca_len, long cb_len) #else -BLIS_EXPORT_BLAS int PASTEF770(lsame)(const char *ca, const char *cb, int ca_len, int cb_len) +int PASTEF770(lsame)(const char *ca, const char *cb, int ca_len, int cb_len) #endif { /* System generated locals */ diff --git a/frame/compat/f2c/bla_rot.c b/frame/compat/f2c/bla_rot.c index 4c66e4aa8..c79769bc0 100644 --- a/frame/compat/f2c/bla_rot.c +++ b/frame/compat/f2c/bla_rot.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,rot)(const bla_integer *n, bla_real *sx, const bla_integer *incx, bla_real *sy, const bla_integer *incy, const bla_real *c__, const bla_real *s) +/* Subroutine */ int PASTEF77(s,rot)(const bla_integer *n, bla_real *sx, const bla_integer *incx, bla_real *sy, const bla_integer *incy, const bla_real *c__, const bla_real *s) { /* System generated locals */ bla_integer i__1; @@ -109,7 +109,7 @@ L20: -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,rot)(const bla_integer *n, bla_double *dx, const bla_integer *incx, bla_double *dy, const bla_integer *incy, const bla_double *c__, const bla_double *s) +/* Subroutine */ int PASTEF77(d,rot)(const bla_integer *n, bla_double *dx, const bla_integer *incx, bla_double *dy, const bla_integer *incy, const bla_double *c__, const bla_double *s) { /* System generated locals */ bla_integer i__1; @@ -177,7 +177,7 @@ L20: -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(cs,rot)(const bla_integer *n, bla_scomplex *cx, const bla_integer *incx, bla_scomplex *cy, const bla_integer *incy, const bla_real *c__, const bla_real *s) +/* Subroutine */ int PASTEF77(cs,rot)(const bla_integer *n, bla_scomplex *cx, const bla_integer *incx, bla_scomplex *cy, const bla_integer *incy, const bla_real *c__, const bla_real *s) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4; @@ -270,7 +270,7 @@ L20: -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(zd,rot)(const bla_integer *n, bla_dcomplex *zx, const bla_integer *incx, bla_dcomplex *zy, const bla_integer *incy, const bla_double *c__, const bla_double *s) +/* Subroutine */ int PASTEF77(zd,rot)(const bla_integer *n, bla_dcomplex *zx, const bla_integer *incx, bla_dcomplex *zy, const bla_integer *incy, const bla_double *c__, const bla_double *s) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4; diff --git a/frame/compat/f2c/bla_rotg.c b/frame/compat/f2c/bla_rotg.c index 1315bd6aa..1572689f5 100644 --- a/frame/compat/f2c/bla_rotg.c +++ b/frame/compat/f2c/bla_rotg.c @@ -45,7 +45,7 @@ static bla_real sc_b4 = 1.f; -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,rotg)(bla_real *sa, bla_real *sb, bla_real *c__, bla_real *s) +/* Subroutine */ int PASTEF77(s,rotg)(bla_real *sa, bla_real *sb, bla_real *c__, bla_real *s) { /* System generated locals */ bla_real r__1, r__2; @@ -105,7 +105,7 @@ L20: static bla_double dc_b4 = 1.; -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,rotg)(bla_double *da, bla_double *db, bla_double *c__, bla_double *s) +/* Subroutine */ int PASTEF77(d,rotg)(bla_double *da, bla_double *db, bla_double *c__, bla_double *s) { /* System generated locals */ bla_double d__1, d__2; @@ -161,7 +161,7 @@ L20: -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,rotg)(bla_scomplex *ca, bla_scomplex *cb, bla_real *c__, bla_scomplex *s) +/* Subroutine */ int PASTEF77(c,rotg)(bla_scomplex *ca, bla_scomplex *cb, bla_real *c__, bla_scomplex *s) { /* System generated locals */ bla_real r__1, r__2; @@ -211,7 +211,7 @@ L20: -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,rotg)(bla_dcomplex *ca, bla_dcomplex *cb, bla_double *c__, bla_dcomplex *s) +/* Subroutine */ int PASTEF77(z,rotg)(bla_dcomplex *ca, bla_dcomplex *cb, bla_double *c__, bla_dcomplex *s) { /* System generated locals */ bla_double d__1, d__2; diff --git a/frame/compat/f2c/bla_rotm.c b/frame/compat/f2c/bla_rotm.c index b39d33115..003dea715 100644 --- a/frame/compat/f2c/bla_rotm.c +++ b/frame/compat/f2c/bla_rotm.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,rotm)(const bla_integer *n, bla_real *sx, const bla_integer *incx, bla_real *sy, const bla_integer *incy, const bla_real *sparam) +/* Subroutine */ int PASTEF77(s,rotm)(const bla_integer *n, bla_real *sx, const bla_integer *incx, bla_real *sy, const bla_integer *incy, const bla_real *sparam) { /* Initialized data */ @@ -207,7 +207,7 @@ L140: -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,rotm)(const bla_integer *n, bla_double *dx, const bla_integer *incx, bla_double *dy, const bla_integer *incy, const bla_double *dparam) +/* Subroutine */ int PASTEF77(d,rotm)(const bla_integer *n, bla_double *dx, const bla_integer *incx, bla_double *dy, const bla_integer *incy, const bla_double *dparam) { /* Initialized data */ diff --git a/frame/compat/f2c/bla_rotmg.c b/frame/compat/f2c/bla_rotmg.c index 2803417fe..11ccc6f33 100644 --- a/frame/compat/f2c/bla_rotmg.c +++ b/frame/compat/f2c/bla_rotmg.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,rotmg)(bla_real *sd1, bla_real *sd2, bla_real *sx1, const bla_real *sy1, bla_real *sparam) +/* Subroutine */ int PASTEF77(s,rotmg)(bla_real *sd1, bla_real *sd2, bla_real *sx1, const bla_real *sy1, bla_real *sparam) { /* Initialized data */ @@ -281,7 +281,7 @@ L260: -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,rotmg)(bla_double *dd1, bla_double *dd2, bla_double *dx1, const bla_double *dy1, bla_double *dparam) +/* Subroutine */ int PASTEF77(d,rotmg)(bla_double *dd1, bla_double *dd2, bla_double *dx1, const bla_double *dy1, bla_double *dparam) { /* Initialized data */ diff --git a/frame/compat/f2c/bla_sbmv.c b/frame/compat/f2c/bla_sbmv.c index ddedc9ea7..566fabd81 100644 --- a/frame/compat/f2c/bla_sbmv.c +++ b/frame/compat/f2c/bla_sbmv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,sbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_double *alpha, const bla_double *a, const bla_integer *lda, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy) +/* Subroutine */ int PASTEF77(d,sbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_double *alpha, const bla_double *a, const bla_integer *lda, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4; @@ -50,9 +50,9 @@ bla_integer info; bla_double temp1, temp2; bla_integer i__, j, l; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ @@ -392,7 +392,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,sbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_real *alpha, const bla_real *a, const bla_integer *lda, const bla_real *x, const bla_integer *incx, const bla_real *beta, bla_real *y, const bla_integer *incy) +/* Subroutine */ int PASTEF77(s,sbmv)(const bla_character *uplo, const bla_integer *n, const bla_integer *k, const bla_real *alpha, const bla_real *a, const bla_integer *lda, const bla_real *x, const bla_integer *incx, const bla_real *beta, bla_real *y, const bla_integer *incy) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4; @@ -401,9 +401,9 @@ bla_integer info; bla_real temp1, temp2; bla_integer i__, j, l; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ diff --git a/frame/compat/f2c/bla_spmv.c b/frame/compat/f2c/bla_spmv.c index 909085f38..0485e1dc3 100644 --- a/frame/compat/f2c/bla_spmv.c +++ b/frame/compat/f2c/bla_spmv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,spmv)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *ap, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy) +/* Subroutine */ int PASTEF77(d,spmv)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *ap, const bla_double *x, const bla_integer *incx, const bla_double *beta, bla_double *y, const bla_integer *incy) { /* System generated locals */ bla_integer i__1, i__2; @@ -50,9 +50,9 @@ bla_integer info; bla_double temp1, temp2; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ @@ -342,7 +342,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,spmv)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *ap, const bla_real *x, const bla_integer *incx, const bla_real *beta, bla_real *y, const bla_integer *incy) +/* Subroutine */ int PASTEF77(s,spmv)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *ap, const bla_real *x, const bla_integer *incx, const bla_real *beta, bla_real *y, const bla_integer *incy) { /* System generated locals */ bla_integer i__1, i__2; @@ -351,9 +351,9 @@ bla_integer info; bla_real temp1, temp2; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, iy, jx, jy, kx, ky; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ diff --git a/frame/compat/f2c/bla_spr.c b/frame/compat/f2c/bla_spr.c index 84f33b569..d276458b4 100644 --- a/frame/compat/f2c/bla_spr.c +++ b/frame/compat/f2c/bla_spr.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,spr)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *x, const bla_integer *incx, bla_double *ap) +/* Subroutine */ int PASTEF77(d,spr)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *x, const bla_integer *incx, bla_double *ap) { /* System generated locals */ bla_integer i__1, i__2; @@ -50,9 +50,9 @@ bla_integer info; bla_double temp; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ @@ -268,7 +268,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,spr)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *x, const bla_integer *incx, bla_real *ap) +/* Subroutine */ int PASTEF77(s,spr)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *x, const bla_integer *incx, bla_real *ap) { /* System generated locals */ bla_integer i__1, i__2; @@ -277,9 +277,9 @@ bla_integer info; bla_real temp; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ diff --git a/frame/compat/f2c/bla_spr2.c b/frame/compat/f2c/bla_spr2.c index e2df99299..7c7538212 100644 --- a/frame/compat/f2c/bla_spr2.c +++ b/frame/compat/f2c/bla_spr2.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,spr2)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *x, const bla_integer *incx, const bla_double *y, const bla_integer *incy, bla_double *ap) +/* Subroutine */ int PASTEF77(d,spr2)(const bla_character *uplo, const bla_integer *n, const bla_double *alpha, const bla_double *x, const bla_integer *incx, const bla_double *y, const bla_integer *incy, bla_double *ap) { /* System generated locals */ bla_integer i__1, i__2; @@ -50,9 +50,9 @@ bla_integer info; bla_double temp1, temp2; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, iy, jx = 0, jy = 0, kx = 0, ky = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ @@ -300,7 +300,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,spr2)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *x, const bla_integer *incx, const bla_real *y, const bla_integer *incy, bla_real *ap) +/* Subroutine */ int PASTEF77(s,spr2)(const bla_character *uplo, const bla_integer *n, const bla_real *alpha, const bla_real *x, const bla_integer *incx, const bla_real *y, const bla_integer *incy, bla_real *ap) { /* System generated locals */ bla_integer i__1, i__2; @@ -309,9 +309,9 @@ bla_integer info; bla_real temp1, temp2; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, iy, jx = 0, jy = 0, kx = 0, ky = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); /* .. Scalar Arguments .. */ /* .. Array Arguments .. */ diff --git a/frame/compat/f2c/bla_tbmv.c b/frame/compat/f2c/bla_tbmv.c index 2d25bde6c..78feb7056 100644 --- a/frame/compat/f2c/bla_tbmv.c +++ b/frame/compat/f2c/bla_tbmv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_scomplex *a, const bla_integer *lda, bla_scomplex *x, const bla_integer *incx) +/* Subroutine */ int PASTEF77(c,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_scomplex *a, const bla_integer *lda, bla_scomplex *x, const bla_integer *incx) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5; @@ -54,9 +54,9 @@ bla_integer info; bla_scomplex temp; bla_integer i__, j, l; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj, nounit; /* .. Scalar Arguments .. */ @@ -611,7 +611,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_double *a, const bla_integer *lda, bla_double *x, const bla_integer *incx) +/* Subroutine */ int PASTEF77(d,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_double *a, const bla_integer *lda, bla_double *x, const bla_integer *incx) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4; @@ -620,9 +620,9 @@ bla_integer info; bla_double temp; bla_integer i__, j, l; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical nounit; /* .. Scalar Arguments .. */ @@ -1022,7 +1022,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_real *a, const bla_integer *lda, bla_real *x, const bla_integer *incx) +/* Subroutine */ int PASTEF77(s,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_real *a, const bla_integer *lda, bla_real *x, const bla_integer *incx) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4; @@ -1031,9 +1031,9 @@ bla_integer info; bla_real temp; bla_integer i__, j, l; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical nounit; /* .. Scalar Arguments .. */ @@ -1433,7 +1433,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_dcomplex *a, const bla_integer *lda, bla_dcomplex *x, const bla_integer *incx) +/* Subroutine */ int PASTEF77(z,tbmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_dcomplex *a, const bla_integer *lda, bla_dcomplex *x, const bla_integer *incx) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5; @@ -1446,9 +1446,9 @@ bla_integer info; bla_dcomplex temp; bla_integer i__, j, l; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj, nounit; /* .. Scalar Arguments .. */ diff --git a/frame/compat/f2c/bla_tbsv.c b/frame/compat/f2c/bla_tbsv.c index 733e90a2d..6914882d2 100644 --- a/frame/compat/f2c/bla_tbsv.c +++ b/frame/compat/f2c/bla_tbsv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_scomplex *a, const bla_integer *lda, bla_scomplex *x, const bla_integer *incx) +/* Subroutine */ int PASTEF77(c,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_scomplex *a, const bla_integer *lda, bla_scomplex *x, const bla_integer *incx) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5; @@ -54,9 +54,9 @@ bla_integer info; bla_scomplex temp; bla_integer i__, j, l; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj, nounit; /* .. Scalar Arguments .. */ @@ -603,7 +603,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_double *a, const bla_integer *lda, bla_double *x, const bla_integer *incx) +/* Subroutine */ int PASTEF77(d,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_double *a, const bla_integer *lda, bla_double *x, const bla_integer *incx) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4; @@ -612,9 +612,9 @@ bla_integer info; bla_double temp; bla_integer i__, j, l; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical nounit; /* .. Scalar Arguments .. */ @@ -1018,7 +1018,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_real *a, const bla_integer *lda, bla_real *x, const bla_integer *incx) +/* Subroutine */ int PASTEF77(s,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_real *a, const bla_integer *lda, bla_real *x, const bla_integer *incx) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4; @@ -1027,9 +1027,9 @@ bla_integer info; bla_real temp; bla_integer i__, j, l; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical nounit; /* .. Scalar Arguments .. */ @@ -1433,7 +1433,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_dcomplex *a, const bla_integer *lda, bla_dcomplex *x, const bla_integer *incx) +/* Subroutine */ int PASTEF77(z,tbsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_integer *k, const bla_dcomplex *a, const bla_integer *lda, bla_dcomplex *x, const bla_integer *incx) { /* System generated locals */ bla_integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5; @@ -1447,9 +1447,9 @@ bla_integer info; bla_dcomplex temp; bla_integer i__, j, l; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kplus1, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj, nounit; /* .. Scalar Arguments .. */ diff --git a/frame/compat/f2c/bla_tpmv.c b/frame/compat/f2c/bla_tpmv.c index eddd776d6..8fa46f4c4 100644 --- a/frame/compat/f2c/bla_tpmv.c +++ b/frame/compat/f2c/bla_tpmv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_scomplex *ap, bla_scomplex *x, const bla_integer *incx) +/* Subroutine */ int PASTEF77(c,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_scomplex *ap, bla_scomplex *x, const bla_integer *incx) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5; @@ -54,9 +54,9 @@ bla_integer info; bla_scomplex temp; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj, nounit; /* .. Scalar Arguments .. */ @@ -542,7 +542,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_double *ap, bla_double *x, const bla_integer *incx) +/* Subroutine */ int PASTEF77(d,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_double *ap, bla_double *x, const bla_integer *incx) { /* System generated locals */ bla_integer i__1, i__2; @@ -551,9 +551,9 @@ bla_integer info; bla_double temp; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical nounit; /* .. Scalar Arguments .. */ @@ -890,7 +890,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_real *ap, bla_real *x, const bla_integer *incx) +/* Subroutine */ int PASTEF77(s,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_real *ap, bla_real *x, const bla_integer *incx) { /* System generated locals */ bla_integer i__1, i__2; @@ -899,9 +899,9 @@ bla_integer info; bla_real temp; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical nounit; /* .. Scalar Arguments .. */ @@ -1238,7 +1238,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_dcomplex *ap, bla_dcomplex *x, const bla_integer *incx) +/* Subroutine */ int PASTEF77(z,tpmv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_dcomplex *ap, bla_dcomplex *x, const bla_integer *incx) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5; @@ -1251,9 +1251,9 @@ bla_integer info; bla_dcomplex temp; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj, nounit; /* .. Scalar Arguments .. */ diff --git a/frame/compat/f2c/bla_tpsv.c b/frame/compat/f2c/bla_tpsv.c index 8cb43f007..076494097 100644 --- a/frame/compat/f2c/bla_tpsv.c +++ b/frame/compat/f2c/bla_tpsv.c @@ -41,7 +41,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(c,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_scomplex *ap, bla_scomplex *x, const bla_integer *incx) +/* Subroutine */ int PASTEF77(c,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_scomplex *ap, bla_scomplex *x, const bla_integer *incx) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5; @@ -54,9 +54,9 @@ bla_integer info; bla_scomplex temp; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj, nounit; /* .. Scalar Arguments .. */ @@ -534,7 +534,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(d,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_double *ap, bla_double *x, const bla_integer *incx) +/* Subroutine */ int PASTEF77(d,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_double *ap, bla_double *x, const bla_integer *incx) { /* System generated locals */ bla_integer i__1, i__2; @@ -543,9 +543,9 @@ bla_integer info; bla_double temp; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical nounit; /* .. Scalar Arguments .. */ @@ -885,7 +885,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(s,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_real *ap, bla_real *x, const bla_integer *incx) +/* Subroutine */ int PASTEF77(s,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_real *ap, bla_real *x, const bla_integer *incx) { /* System generated locals */ bla_integer i__1, i__2; @@ -894,9 +894,9 @@ bla_integer info; bla_real temp; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical nounit; /* .. Scalar Arguments .. */ @@ -1236,7 +1236,7 @@ -lf2c -lm (in that order) */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF77(z,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_dcomplex *ap, bla_dcomplex *x, const bla_integer *incx) +/* Subroutine */ int PASTEF77(z,tpsv)(const bla_character *uplo, const bla_character *trans, const bla_character *diag, const bla_integer *n, const bla_dcomplex *ap, bla_dcomplex *x, const bla_integer *incx) { /* System generated locals */ bla_integer i__1, i__2, i__3, i__4, i__5; @@ -1250,9 +1250,9 @@ bla_integer info; bla_dcomplex temp; bla_integer i__, j, k; - //extern bla_logical BLIS_EXPORT_BLAS PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); + //extern bla_logical PASTEF770(lsame)(bla_character *, bla_character *, ftnlen, ftnlen); bla_integer kk, ix, jx, kx = 0; - //extern /* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); + //extern /* Subroutine */ int PASTEF770(xerbla)(bla_character *, bla_integer *, ftnlen); bla_logical noconj, nounit; /* .. Scalar Arguments .. */ diff --git a/frame/compat/f2c/bla_xerbla.c b/frame/compat/f2c/bla_xerbla.c index 543e06fdb..a6500c443 100644 --- a/frame/compat/f2c/bla_xerbla.c +++ b/frame/compat/f2c/bla_xerbla.c @@ -43,7 +43,7 @@ /* Table of constant values */ -/* Subroutine */ int BLIS_EXPORT_BLAS PASTEF770(xerbla)(const bla_character *srname, const bla_integer *info, ftnlen srname_len) +/* Subroutine */ int PASTEF770(xerbla)(const bla_character *srname, const bla_integer *info, ftnlen srname_len) { /* -- LAPACK auxiliary routine (preliminary version) -- */ /* Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., */ diff --git a/frame/include/bli_extern_defs.h b/frame/include/bli_extern_defs.h index d577de4bf..9773e5e69 100644 --- a/frame/include/bli_extern_defs.h +++ b/frame/include/bli_extern_defs.h @@ -35,28 +35,16 @@ #ifndef BLIS_EXTERN_DEFS_H #define BLIS_EXTERN_DEFS_H -#if !defined(BLIS_ENABLE_SHARED) || !defined(_MSC_VER) -#define BLIS_EXPORT -#else -// Windows builds require us to explicitly identify global variable symbols -// to be imported from the .dll. -#ifdef BLIS_IS_BUILDING_LIBRARY -#define BLIS_EXPORT __declspec(dllexport) -#else -#define BLIS_EXPORT __declspec(dllimport) -#endif -#endif +BLIS_EXPORT_BLIS extern obj_t BLIS_TWO; +BLIS_EXPORT_BLIS extern obj_t BLIS_ONE; +//BLIS_EXPORT_BLIS extern obj_t BLIS_ONE_HALF; +BLIS_EXPORT_BLIS extern obj_t BLIS_ZERO; +//BLIS_EXPORT_BLIS extern obj_t BLIS_MINUS_ONE_HALF; +BLIS_EXPORT_BLIS extern obj_t BLIS_MINUS_ONE; +BLIS_EXPORT_BLIS extern obj_t BLIS_MINUS_TWO; -BLIS_EXPORT extern obj_t BLIS_TWO; -BLIS_EXPORT extern obj_t BLIS_ONE; -//BLIS_EXPORT extern obj_t BLIS_ONE_HALF; -BLIS_EXPORT extern obj_t BLIS_ZERO; -//BLIS_EXPORT extern obj_t BLIS_MINUS_ONE_HALF; -BLIS_EXPORT extern obj_t BLIS_MINUS_ONE; -BLIS_EXPORT extern obj_t BLIS_MINUS_TWO; - -BLIS_EXPORT extern thrcomm_t BLIS_SINGLE_COMM; -BLIS_EXPORT extern thrinfo_t BLIS_PACKM_SINGLE_THREADED; -BLIS_EXPORT extern thrinfo_t BLIS_GEMM_SINGLE_THREADED; +BLIS_EXPORT_BLIS extern thrcomm_t BLIS_SINGLE_COMM; +BLIS_EXPORT_BLIS extern thrinfo_t BLIS_PACKM_SINGLE_THREADED; +BLIS_EXPORT_BLIS extern thrinfo_t BLIS_GEMM_SINGLE_THREADED; #endif diff --git a/frame/ind/cntx/bli_cntx_ind_stage.c b/frame/ind/cntx/bli_cntx_ind_stage.c index c48dbe234..671be681d 100644 --- a/frame/ind/cntx/bli_cntx_ind_stage.c +++ b/frame/ind/cntx/bli_cntx_ind_stage.c @@ -53,7 +53,7 @@ static void* bli_cntx_ind_stage_fp[BLIS_NUM_IND_METHODS] = // Execute the context initialization/finalization function associated // with a given induced method. -BLIS_EXPORT_BLIS void bli_cntx_ind_stage( ind_t method, dim_t stage, cntx_t* cntx ) +void bli_cntx_ind_stage( ind_t method, dim_t stage, cntx_t* cntx ) { cntx_stage_ft func = bli_cntx_ind_stage_fp[ method ]; @@ -69,7 +69,7 @@ BLIS_EXPORT_BLIS void bli_cntx_ind_stage( ind_t method, dim_t stage, cntx_t* cnt // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_cntx_3mh_stage( dim_t stage, cntx_t* cntx ) +void bli_cntx_3mh_stage( dim_t stage, cntx_t* cntx ) { // Set the pack_t schemas as a function of the stage of execution. if ( stage == 0 ) @@ -91,13 +91,13 @@ BLIS_EXPORT_BLIS void bli_cntx_3mh_stage( dim_t stage, cntx_t* cntx ) // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_cntx_3m1_stage( dim_t stage, cntx_t* cntx ) +void bli_cntx_3m1_stage( dim_t stage, cntx_t* cntx ) { } // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_cntx_4mh_stage( dim_t stage, cntx_t* cntx ) +void bli_cntx_4mh_stage( dim_t stage, cntx_t* cntx ) { // Set the pack_t schemas as a function of the stage of execution. if ( stage == 0 ) @@ -124,25 +124,25 @@ BLIS_EXPORT_BLIS void bli_cntx_4mh_stage( dim_t stage, cntx_t* cntx ) // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_cntx_4mb_stage( dim_t stage, cntx_t* cntx ) +void bli_cntx_4mb_stage( dim_t stage, cntx_t* cntx ) { } // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_cntx_4m1_stage( dim_t stage, cntx_t* cntx ) +void bli_cntx_4m1_stage( dim_t stage, cntx_t* cntx ) { } // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_cntx_1m_stage( dim_t stage, cntx_t* cntx ) +void bli_cntx_1m_stage( dim_t stage, cntx_t* cntx ) { } // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_cntx_nat_stage( dim_t stage, cntx_t* cntx ) +void bli_cntx_nat_stage( dim_t stage, cntx_t* cntx ) { } diff --git a/frame/ind/oapi/bli_l3_3m4m1m_oapi.c b/frame/ind/oapi/bli_l3_3m4m1m_oapi.c index d260eeb99..3d47e6b51 100644 --- a/frame/ind/oapi/bli_l3_3m4m1m_oapi.c +++ b/frame/ind/oapi/bli_l3_3m4m1m_oapi.c @@ -40,7 +40,7 @@ #undef GENFRONT #define GENFRONT( opname, cname, imeth, nstage ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ +void PASTEMAC(opname,imeth) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -147,7 +147,7 @@ GENFRONT( syr2k, gemm, 1m, 1 ) #undef GENFRONT #define GENFRONT( opname, cname, imeth, nstage ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ +void PASTEMAC(opname,imeth) \ ( \ side_t side, \ obj_t* alpha, \ @@ -240,7 +240,7 @@ GENFRONT( trmm3, gemm, 1m, 1 ) #undef GENFRONT #define GENFRONT( opname, cname, imeth, nstage ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ +void PASTEMAC(opname,imeth) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -323,7 +323,7 @@ GENFRONT( syrk, gemm, 1m, 1 ) #undef GENFRONT #define GENFRONT( opname, cname, imeth, nstage ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ +void PASTEMAC(opname,imeth) \ ( \ side_t side, \ obj_t* alpha, \ @@ -387,7 +387,7 @@ GENFRONT( trmm, gemm, 1m, 1 ) #undef GENFRONT #define GENFRONT( opname, cname, imeth, nstage ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ +void PASTEMAC(opname,imeth) \ ( \ side_t side, \ obj_t* alpha, \ diff --git a/frame/ind/oapi/bli_l3_ind_oapi.c b/frame/ind/oapi/bli_l3_ind_oapi.c index 2940e3038..85b4b443e 100644 --- a/frame/ind/oapi/bli_l3_ind_oapi.c +++ b/frame/ind/oapi/bli_l3_ind_oapi.c @@ -41,7 +41,7 @@ #undef GENFRONT #define GENFRONT( opname, imeth ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ +void PASTEMAC(opname,imeth) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -76,7 +76,7 @@ GENFRONT( syr2k, ind ) #undef GENFRONT #define GENFRONT( opname, imeth ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ +void PASTEMAC(opname,imeth) \ ( \ side_t side, \ obj_t* alpha, \ @@ -112,7 +112,7 @@ GENFRONT( trmm3, ind ) #undef GENFRONT #define GENFRONT( opname, imeth ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ +void PASTEMAC(opname,imeth) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -145,7 +145,7 @@ GENFRONT( syrk, ind ) #undef GENFRONT #define GENFRONT( opname, imeth ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ +void PASTEMAC(opname,imeth) \ ( \ side_t side, \ obj_t* alpha, \ diff --git a/frame/ind/oapi/bli_l3_nat_oapi.c b/frame/ind/oapi/bli_l3_nat_oapi.c index ff8bb24ba..470db9c8c 100644 --- a/frame/ind/oapi/bli_l3_nat_oapi.c +++ b/frame/ind/oapi/bli_l3_nat_oapi.c @@ -46,7 +46,7 @@ #undef GENFRONT #define GENFRONT( opname, cname, imeth ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ +void PASTEMAC(opname,imeth) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -89,7 +89,7 @@ GENFRONT( syr2k, gemm, nat ) #undef GENFRONT #define GENFRONT( opname, cname, imeth ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ +void PASTEMAC(opname,imeth) \ ( \ side_t side, \ obj_t* alpha, \ @@ -129,7 +129,7 @@ GENFRONT( trmm3, gemm, nat ) #undef GENFRONT #define GENFRONT( opname, cname, imeth ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ +void PASTEMAC(opname,imeth) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -166,7 +166,7 @@ GENFRONT( syrk, gemm, nat ) #undef GENFRONT #define GENFRONT( opname, cname, imeth ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ +void PASTEMAC(opname,imeth) \ ( \ side_t side, \ obj_t* alpha, \ @@ -202,7 +202,7 @@ GENFRONT( trmm, gemm, nat ) #undef GENFRONT #define GENFRONT( opname, cname, imeth ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,imeth) \ +void PASTEMAC(opname,imeth) \ ( \ side_t side, \ obj_t* alpha, \ diff --git a/frame/ind/tapi/bli_l3_ind_tapi.c b/frame/ind/tapi/bli_l3_ind_tapi.c index 35060a572..9ca7746bc 100644 --- a/frame/ind/tapi/bli_l3_ind_tapi.c +++ b/frame/ind/tapi/bli_l3_ind_tapi.c @@ -40,7 +40,7 @@ #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ trans_t transa, \ trans_t transb, \ @@ -103,7 +103,7 @@ INSERT_GENTFUNC_BASIC0( gemm1m ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ @@ -170,7 +170,7 @@ INSERT_GENTFUNC_BASIC0( hemm1m ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -229,7 +229,7 @@ INSERT_GENTFUNCR_BASIC0( herk1m ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -295,7 +295,7 @@ INSERT_GENTFUNCR_BASIC0( her2k1m ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ @@ -362,7 +362,7 @@ INSERT_GENTFUNC_BASIC0( symm1m ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -420,7 +420,7 @@ INSERT_GENTFUNC_BASIC0( syrk1m ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -485,7 +485,7 @@ INSERT_GENTFUNC_BASIC0( syr2k1m ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ @@ -554,7 +554,7 @@ INSERT_GENTFUNC_BASIC0( trmm31m ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ @@ -611,7 +611,7 @@ INSERT_GENTFUNC_BASIC0( trmm1m ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ diff --git a/frame/util/bli_util_check.c b/frame/util/bli_util_check.c index 27a21279e..ae4ebb461 100644 --- a/frame/util/bli_util_check.c +++ b/frame/util/bli_util_check.c @@ -41,7 +41,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* asum \ @@ -56,7 +56,7 @@ GENFRONT( asumv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x \ ) \ @@ -72,7 +72,7 @@ GENFRONT( mktrim ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* norm \ @@ -89,7 +89,7 @@ GENFRONT( normiv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* norm \ @@ -106,7 +106,7 @@ GENFRONT( normim ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ FILE* file, \ char* s1, \ @@ -125,7 +125,7 @@ GENFRONT( fprintm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x \ ) \ @@ -142,7 +142,7 @@ GENFRONT( randnm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* scale, \ diff --git a/frame/util/bli_util_oapi.c b/frame/util/bli_util_oapi.c index b786a56dd..f9f9b4c93 100644 --- a/frame/util/bli_util_oapi.c +++ b/frame/util/bli_util_oapi.c @@ -43,7 +43,7 @@ #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* asum \ @@ -86,7 +86,7 @@ GENFRONT( asumv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* a \ BLIS_OAPI_EX_PARAMS \ @@ -130,7 +130,7 @@ GENFRONT( mktrim ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* norm \ @@ -174,7 +174,7 @@ GENFRONT( normiv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* norm \ @@ -227,7 +227,7 @@ GENFRONT( normim ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ FILE* file, \ char* s1, \ @@ -278,7 +278,7 @@ GENFRONT( fprintv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ FILE* file, \ char* s1, \ @@ -347,7 +347,7 @@ GENFRONT( fprintm ) #undef GENFRONT #define GENFRONT( opname, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ char* s1, \ obj_t* x, \ @@ -381,7 +381,7 @@ GENFRONT( printm, fprintm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x \ BLIS_OAPI_EX_PARAMS \ @@ -421,7 +421,7 @@ GENFRONT( randnv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x \ BLIS_OAPI_EX_PARAMS \ @@ -468,7 +468,7 @@ GENFRONT( randnm ) #undef GENFRONT #define GENFRONT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,EX_SUF) \ +void PASTEMAC(opname,EX_SUF) \ ( \ obj_t* x, \ obj_t* scale, \ diff --git a/frame/util/bli_util_tapi.c b/frame/util/bli_util_tapi.c index b069b3b27..6bef27d43 100644 --- a/frame/util/bli_util_tapi.c +++ b/frame/util/bli_util_tapi.c @@ -43,7 +43,7 @@ #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -84,7 +84,7 @@ INSERT_GENTFUNCR_BASIC0( asumv ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ uplo_t uploa, \ dim_t m, \ @@ -122,7 +122,7 @@ INSERT_GENTFUNC_BASIC0( mktrim ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -165,7 +165,7 @@ INSERT_GENTFUNCR_BASIC0( normiv ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -216,7 +216,7 @@ INSERT_GENTFUNCR_BASIC0( normim ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ char* s1, \ dim_t n, \ @@ -244,7 +244,7 @@ INSERT_GENTFUNC_BASIC_I( printv, fprintv ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ char* s1, \ dim_t m, \ @@ -274,7 +274,7 @@ INSERT_GENTFUNC_BASIC_I( printm, fprintm ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx \ @@ -309,7 +309,7 @@ INSERT_GENTFUNC_BASIC0( randnv ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ doff_t diagoffx, \ uplo_t uplox, \ @@ -350,7 +350,7 @@ INSERT_GENTFUNC_BASIC0( randnm ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,EX_SUF) \ +void PASTEMAC2(ch,opname,EX_SUF) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ diff --git a/frame/util/bli_util_unb_var1.c b/frame/util/bli_util_unb_var1.c index fc2bfe2ed..32197819a 100644 --- a/frame/util/bli_util_unb_var1.c +++ b/frame/util/bli_util_unb_var1.c @@ -43,7 +43,7 @@ #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -87,7 +87,7 @@ INSERT_GENTFUNCR_BASIC0( asumv_unb_var1 ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ dim_t m, \ @@ -143,7 +143,7 @@ INSERT_GENTFUNCR_BASIC0( mkherm_unb_var1 ) #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ dim_t m, \ @@ -185,7 +185,7 @@ INSERT_GENTFUNC_BASIC0( mksymm_unb_var1 ) #undef GENTFUNC #define GENTFUNC( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ dim_t m, \ @@ -230,7 +230,7 @@ INSERT_GENTFUNC_BASIC0( mktrim_unb_var1 ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -268,7 +268,7 @@ INSERT_GENTFUNCR_BASIC0( norm1v_unb_var1 ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -314,7 +314,7 @@ GENTFUNCR( dcomplex, double, z, d, normfv_unb_var1, sumsqv_unb_var1 ) #ifdef FE_OVERFLOW #define GENTFUNCR( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -393,7 +393,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ #else #define GENTFUNCR( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -439,7 +439,7 @@ GENTFUNCR( double, double, d, d, normfv_unb_var1, sumsqv_unb_var1 ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -485,7 +485,7 @@ INSERT_GENTFUNCR_BASIC0( normiv_unb_var1 ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -649,7 +649,7 @@ INSERT_GENTFUNCR_BASIC( norm1m_unb_var1, norm1v_unb_var1 ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -816,7 +816,7 @@ INSERT_GENTFUNCR_BASIC( normfm_unb_var1, sumsqv_unb_var1 ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -858,7 +858,7 @@ INSERT_GENTFUNCR_BASIC( normim_unb_var1, norm1m_unb_var1 ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ FILE* file, \ char* s1, \ @@ -895,7 +895,7 @@ INSERT_GENTFUNC_BASIC0_I( fprintv ) #undef GENTFUNC #define GENTFUNC( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ FILE* file, \ char* s1, \ @@ -937,7 +937,7 @@ INSERT_GENTFUNC_BASIC0_I( fprintm ) #undef GENTFUNC #define GENTFUNC( ctype, ch, varname, randmac ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -965,7 +965,7 @@ INSERT_GENTFUNC_BASIC( randnv_unb_var1, randnp2s ) #undef GENTFUNC #define GENTFUNC( ctype, ch, varname, kername ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffx, \ uplo_t uplox, \ @@ -1118,7 +1118,7 @@ INSERT_GENTFUNC_BASIC( randnm_unb_var1, randnv ) #undef GENTFUNCR #define GENTFUNCR( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ From 0709ccd1875b4151310eda9f6fdfe4bf8964a923 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 12 Mar 2019 18:45:09 -0500 Subject: [PATCH 018/109] Removed export macros from all internal prototypes. Details: - After merging PR #303, at Isuru's request, I removed the use of BLIS_EXPORT_BLIS from all function prototypes *except* those that we potentially wish to be exported in shared/dynamic libraries. In other words, I removed the use of BLIS_EXPORT_BLIS from all prototypes of functions that can be considered private or for internal use only. This is likely the last big modification along the path towards implementing the functionality spelled out in issue #248. Thanks again to Isuru Fernando for his initial efforts of sprinkling the export macros throughout BLIS, which made removing them where necessary relatively painless. Also, I'd like to thank Tony Kelman, Nathaniel Smith, Ian Henriksen, Marat Dukhan, and Matthew Brett for participating in the initial discussion in issue #37 that was later summarized and restated in issue #248. - CREDITS file update. --- CREDITS | 7 +- frame/0/bli_l0_check.h | 20 +-- frame/0/bli_l0_fpa.h | 2 +- frame/1/bli_l1v_check.h | 34 ++--- frame/1/bli_l1v_fpa.h | 2 +- frame/1/bli_l1v_ker_prot.h | 28 ++--- frame/1/other/packv/bli_packv_check.h | 2 +- frame/1/other/packv/bli_packv_cntl.h | 2 +- frame/1/other/packv/bli_packv_init.h | 4 +- frame/1/other/packv/bli_packv_int.h | 2 +- frame/1/other/packv/bli_packv_unb_var1.h | 4 +- frame/1/other/scalv/bli_scalv_cntl.h | 8 +- frame/1/other/scalv/bli_scalv_int.h | 2 +- frame/1/other/unpackv/bli_unpackv_check.h | 2 +- frame/1/other/unpackv/bli_unpackv_cntl.h | 8 +- frame/1/other/unpackv/bli_unpackv_int.h | 4 +- frame/1/other/unpackv/bli_unpackv_unb_var1.h | 4 +- frame/1d/bli_l1d_check.h | 18 +-- frame/1d/bli_l1d_fpa.h | 2 +- frame/1f/bli_l1f_check.h | 10 +- frame/1f/bli_l1f_fpa.h | 2 +- frame/1f/bli_l1f_ker_prot.h | 10 +- frame/1m/bli_l1m_check.h | 14 +-- frame/1m/bli_l1m_fpa.h | 4 +- frame/1m/bli_l1m_ker_prot.h | 12 +- frame/1m/other/bli_scalm_cntl.h | 2 +- frame/1m/other/bli_scalm_int.h | 2 +- frame/1m/packm/bli_packm_blk_var1_md.h | 4 +- frame/1m/packm/bli_packm_check.h | 4 +- frame/1m/packm/bli_packm_cntl.h | 2 +- frame/1m/packm/bli_packm_cxk.h | 2 +- frame/1m/packm/bli_packm_cxk_1er.h | 2 +- frame/1m/packm/bli_packm_cxk_3mis.h | 2 +- frame/1m/packm/bli_packm_cxk_4mi.h | 2 +- frame/1m/packm/bli_packm_cxk_rih.h | 2 +- frame/1m/packm/bli_packm_init.h | 4 +- frame/1m/packm/bli_packm_int.h | 2 +- frame/1m/packm/bli_packm_part.h | 8 +- frame/1m/packm/bli_packm_struc_cxk.h | 6 +- frame/1m/packm/bli_packm_struc_cxk_1er.h | 6 +- frame/1m/packm/bli_packm_struc_cxk_3mis.h | 6 +- frame/1m/packm/bli_packm_struc_cxk_4mi.h | 6 +- frame/1m/packm/bli_packm_struc_cxk_md.h | 4 +- frame/1m/packm/bli_packm_struc_cxk_rih.h | 6 +- frame/1m/packm/bli_packm_thrinfo.h | 8 +- frame/1m/packm/bli_packm_unb_var1.h | 4 +- frame/1m/packm/bli_packm_var.h | 6 +- frame/1m/unpackm/bli_unpackm_blk_var1.h | 4 +- frame/1m/unpackm/bli_unpackm_check.h | 2 +- frame/1m/unpackm/bli_unpackm_cntl.h | 2 +- frame/1m/unpackm/bli_unpackm_cxk.h | 2 +- frame/1m/unpackm/bli_unpackm_int.h | 2 +- frame/1m/unpackm/bli_unpackm_unb_var1.h | 4 +- frame/2/bli_l2_check.h | 12 +- frame/2/bli_l2_fpa.h | 4 +- frame/2/gemv/bli_gemv_var.h | 4 +- frame/2/gemv/bli_gemv_var_oapi.c.prev | 2 +- frame/2/gemv/other/bli_gemv_cntl.h | 8 +- frame/2/gemv/other/bli_gemv_front.h | 4 +- frame/2/gemv/other/bli_gemv_int.h | 2 +- frame/2/ger/bli_ger_var.h | 4 +- frame/2/ger/other/bli_ger_cntl.h | 8 +- frame/2/ger/other/bli_ger_front.h | 4 +- frame/2/ger/other/bli_ger_int.h | 2 +- frame/2/hemv/bli_hemv_var.h | 4 +- frame/2/hemv/other/bli_hemv_cntl.h | 8 +- frame/2/hemv/other/bli_hemv_front.h | 4 +- frame/2/hemv/other/bli_hemv_int.h | 2 +- frame/2/her/bli_her_var.h | 4 +- frame/2/her/other/bli_her_cntl.h | 8 +- frame/2/her/other/bli_her_front.h | 4 +- frame/2/her/other/bli_her_int.h | 2 +- frame/2/her2/bli_her2_var.h | 4 +- frame/2/her2/other/bli_her2_cntl.h | 6 +- frame/2/her2/other/bli_her2_front.h | 4 +- frame/2/her2/other/bli_her2_int.h | 2 +- frame/2/symv/other/bli_symv_front.h | 4 +- frame/2/syr/other/bli_syr_front.h | 4 +- frame/2/syr2/other/bli_syr2_front.h | 4 +- frame/2/trmv/bli_trmv_var.h | 4 +- frame/2/trmv/other/bli_trmv_cntl.h | 8 +- frame/2/trmv/other/bli_trmv_front.h | 4 +- frame/2/trmv/other/bli_trmv_int.h | 2 +- frame/2/trsv/bli_trsv_var.h | 4 +- frame/2/trsv/other/bli_trsv_cntl.h | 8 +- frame/2/trsv/other/bli_trsv_front.h | 4 +- frame/2/trsv/other/bli_trsv_int.h | 2 +- frame/3/bli_l3_blocksize.h | 6 +- frame/3/bli_l3_check.h | 16 +-- frame/3/bli_l3_cntl.h | 4 +- frame/3/bli_l3_direct.h | 4 +- frame/3/bli_l3_packm.h | 2 +- frame/3/bli_l3_prune.h | 4 +- frame/3/bli_l3_thrinfo.h | 10 +- frame/3/bli_l3_ukr_fpa.h | 2 +- frame/3/bli_l3_ukr_prot.h | 6 +- frame/3/gemm/bli_gemm_cntl.h | 10 +- frame/3/gemm/bli_gemm_front.h | 4 +- frame/3/gemm/bli_gemm_int.h | 2 +- frame/3/gemm/bli_gemm_md.h | 26 ++-- frame/3/gemm/bli_gemm_var.h | 4 +- frame/3/gemm/other/bli_gemm_ker_var5.h | 4 +- frame/3/hemm/bli_hemm_front.h | 2 +- frame/3/her2k/bli_her2k_front.h | 2 +- frame/3/herk/bli_herk_front.h | 2 +- frame/3/herk/bli_herk_var.h | 4 +- frame/3/symm/bli_symm_front.h | 2 +- frame/3/syr2k/bli_syr2k_front.h | 2 +- frame/3/syrk/bli_syrk_front.h | 2 +- frame/3/trmm/bli_trmm_front.h | 2 +- frame/3/trmm/bli_trmm_var.h | 4 +- frame/3/trmm3/bli_trmm3_front.h | 2 +- frame/3/trsm/bli_trsm_cntl.h | 10 +- frame/3/trsm/bli_trsm_front.h | 2 +- frame/3/trsm/bli_trsm_int.h | 2 +- frame/3/trsm/bli_trsm_var.h | 4 +- frame/base/bli_apool.h | 16 +-- frame/base/bli_arch.h | 8 +- frame/base/bli_array.h | 10 +- frame/base/bli_blksz.h | 14 +-- frame/base/bli_check.h | 126 +++++++++---------- frame/base/bli_clock.h | 3 +- frame/base/bli_cntl.h | 2 +- frame/base/bli_const.h | 4 +- frame/base/bli_cpuid.h | 24 ++-- frame/base/bli_error.h | 8 +- frame/base/bli_func.h | 12 +- frame/base/bli_gks.h | 25 ++-- frame/base/bli_init.h | 16 +-- frame/base/bli_machval.h | 3 +- frame/base/bli_malloc.h | 18 +-- frame/base/bli_mbool.h | 6 +- frame/base/bli_membrk.h | 22 ++-- frame/base/bli_memsys.h | 4 +- frame/base/bli_obj.h | 2 +- frame/base/bli_part.h | 2 +- frame/base/bli_pool.h | 22 ++-- frame/base/bli_prune.h | 2 +- frame/base/bli_query.h | 6 +- frame/base/bli_rntm.h | 6 +- frame/base/bli_sba.h | 16 +-- frame/base/bli_string.h | 2 +- frame/base/bli_winsys.h | 2 +- frame/base/cast/bli_castm.h | 2 +- frame/base/cast/bli_castnzm.h | 2 +- frame/base/cast/bli_castv.h | 2 +- frame/base/cast/old/bli_cast_check.h | 4 +- frame/base/check/bli_obj_check.h | 24 ++-- frame/base/check/bli_part_check.h | 6 +- frame/base/noopt/bli_dlamch.h | 2 +- frame/base/noopt/bli_lsame.h | 2 +- frame/base/noopt/bli_slamch.h | 2 +- frame/base/proj/bli_projm.h | 2 +- frame/base/proj/bli_projv.h | 2 +- frame/base/proj/old/bli_proj_check.h | 4 +- frame/include/bli_arch_config_pre.h | 6 +- frame/ind/bli_ind.h | 14 +-- frame/ind/bli_l3_ind.h | 16 +-- frame/ind/cntx/bli_cntx_ind_stage.h | 16 +-- frame/ind/tapi/bli_l3_ind_tapi.h | 20 +-- frame/ind/ukernels/bli_l3_ind_ukr.h | 6 +- frame/thread/bli_pthread.h | 96 +++++++++++--- frame/thread/bli_thrcomm.h | 16 +-- frame/thread/bli_thrcomm_openmp.h | 8 +- frame/thread/bli_thread.h | 32 ++--- frame/thread/bli_thrinfo.h | 8 +- frame/util/bli_util_check.h | 30 ++--- frame/util/bli_util_fpa.h | 4 +- frame/util/bli_util_unb_var1.h | 14 +-- 169 files changed, 699 insertions(+), 635 deletions(-) diff --git a/CREDITS b/CREDITS index 6c2eaa990..52efd782f 100644 --- a/CREDITS +++ b/CREDITS @@ -14,12 +14,14 @@ but many others have contributed code and feedback, including Erling Andersen @erling-d-andersen Alex Arslan @ararslan Vernon Austel (IBM, T.J. Watson Research Center) + Matthew Brett @matthew-brett (University of Birmingham) Jed Brown @jedbrown (Argonne National Laboratory) Robin Christ @robinchrist Kay Dewhurst @jkd2016 (Max Planck Institute, Halle, Germany) Jeff Diamond (Oracle) Johannes Dieterich @iotamudelta Krzysztof Drewniak @krzysz00 + Marat Dukhan @Maratyszcza (Google) Victor Eijkhout @VictorEijkhout (Texas Advanced Computing Center) Isuru Fernando @isuruf Roman Gareev @gareevroman @@ -30,7 +32,7 @@ but many others have contributed code and feedback, including Jeff Hammond @jeffhammond (Intel) Jacob Gorm Hansen @jacobgorm Jean-Michel Hautbois @jhautbois - Ian Henriksen @insertinterestingnamehere + Ian Henriksen @insertinterestingnamehere (The University of Texas at Austin) Minh Quan Ho @hominhquan Matthew Honnibal @honnibal Stefan Husmann @stefanhusmann @@ -63,6 +65,7 @@ but many others have contributed code and feedback, including Rene Sitt Tony Skjellum @tonyskjellum (The University of Tennessee at Chattanooga) Mikhail Smelyanskiy (Intel, Parallel Computing Lab) + Nathaniel Smith @njsmith Shaden Smith @ShadenSmith Tyler Smith @tlrmchlsmth (The University of Texas at Austin) Paul Springer @springer13 (RWTH-Aachen) @@ -83,8 +86,10 @@ partners, including AMD Hewlett Packard Enterprise + Huawei Intel Microsoft + Oracle Texas Instruments as well as the National Science Foundation (NSF Awards CCF-0917167, diff --git a/frame/0/bli_l0_check.h b/frame/0/bli_l0_check.h index e1ae0951e..262679aeb 100644 --- a/frame/0/bli_l0_check.h +++ b/frame/0/bli_l0_check.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* chi, \ obj_t* psi \ @@ -57,7 +57,7 @@ GENTPROT( subsc ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* chi \ ); @@ -68,7 +68,7 @@ GENTPROT( invertsc ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* chi, \ obj_t* absq \ @@ -81,7 +81,7 @@ GENTPROT( normfsc ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* chi, \ double* zeta_r, \ @@ -94,7 +94,7 @@ GENTPROT( getsc ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ double zeta_r, \ double zeta_i, \ @@ -107,7 +107,7 @@ GENTPROT( setsc ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* chi, \ obj_t* zeta_r, \ @@ -120,7 +120,7 @@ GENTPROT( unzipsc ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* zeta_r, \ obj_t* zeta_i, \ @@ -132,18 +132,18 @@ GENTPROT( zipsc ) // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_l0_xsc_check +void bli_l0_xsc_check ( obj_t* chi ); -BLIS_EXPORT_BLIS void bli_l0_xxsc_check +void bli_l0_xxsc_check ( obj_t* chi, obj_t* psi ); -BLIS_EXPORT_BLIS void bli_l0_xx2sc_check +void bli_l0_xx2sc_check ( obj_t* chi, obj_t* norm diff --git a/frame/0/bli_l0_fpa.h b/frame/0/bli_l0_fpa.h index 1749c4af8..0d9b28361 100644 --- a/frame/0/bli_l0_fpa.h +++ b/frame/0/bli_l0_fpa.h @@ -40,7 +40,7 @@ #define GENPROT( opname ) \ \ PASTECH(opname,_vft) \ -BLIS_EXPORT_BLIS BLIS_EXPORT_BLIS PASTEMAC(opname,_qfp)( num_t dt ); +PASTEMAC(opname,_qfp)( num_t dt ); GENPROT( absqsc ) GENPROT( normfsc ) diff --git a/frame/1/bli_l1v_check.h b/frame/1/bli_l1v_check.h index 9fc902c04..98051d0cd 100644 --- a/frame/1/bli_l1v_check.h +++ b/frame/1/bli_l1v_check.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* y \ @@ -55,7 +55,7 @@ GENTPROT( swapv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* index \ @@ -67,7 +67,7 @@ GENTPROT( amaxv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -81,7 +81,7 @@ GENTPROT( axpbyv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -95,7 +95,7 @@ GENTPROT( scal2v ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* y, \ @@ -108,7 +108,7 @@ GENTPROT( dotv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -123,7 +123,7 @@ GENTPROT( dotxv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x \ ); @@ -134,7 +134,7 @@ GENTPROT( invertv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -147,7 +147,7 @@ GENTPROT( setv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* beta, \ @@ -160,27 +160,27 @@ GENTPROT( xpbyv ) // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_l1v_xy_check +void bli_l1v_xy_check ( obj_t* x, obj_t* y ); -BLIS_EXPORT_BLIS void bli_l1v_axy_check +void bli_l1v_axy_check ( obj_t* alpha, obj_t* x, obj_t* y ); -BLIS_EXPORT_BLIS void bli_l1v_xby_check +void bli_l1v_xby_check ( obj_t* x, obj_t* beta, obj_t* y ); -BLIS_EXPORT_BLIS void bli_l1v_axby_check +void bli_l1v_axby_check ( obj_t* alpha, obj_t* x, @@ -188,7 +188,7 @@ BLIS_EXPORT_BLIS void bli_l1v_axby_check obj_t* y ); -BLIS_EXPORT_BLIS void bli_l1v_dot_check +void bli_l1v_dot_check ( obj_t* alpha, obj_t* x, @@ -197,18 +197,18 @@ BLIS_EXPORT_BLIS void bli_l1v_dot_check obj_t* rho ); -BLIS_EXPORT_BLIS void bli_l1v_x_check +void bli_l1v_x_check ( obj_t* x ); -BLIS_EXPORT_BLIS void bli_l1v_ax_check +void bli_l1v_ax_check ( obj_t* alpha, obj_t* x ); -BLIS_EXPORT_BLIS void bli_l1v_xi_check +void bli_l1v_xi_check ( obj_t* x, obj_t* index diff --git a/frame/1/bli_l1v_fpa.h b/frame/1/bli_l1v_fpa.h index 05361bdde..c05a4ff7b 100644 --- a/frame/1/bli_l1v_fpa.h +++ b/frame/1/bli_l1v_fpa.h @@ -40,7 +40,7 @@ #define GENPROT( opname ) \ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) \ -BLIS_EXPORT_BLIS BLIS_EXPORT_BLIS PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); +PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); GENPROT( addv ) GENPROT( copyv ) diff --git a/frame/1/bli_l1v_ker_prot.h b/frame/1/bli_l1v_ker_prot.h index a06c8539e..1a1eec3f3 100644 --- a/frame/1/bli_l1v_ker_prot.h +++ b/frame/1/bli_l1v_ker_prot.h @@ -39,7 +39,7 @@ #define ADDV_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ dim_t n, \ @@ -51,7 +51,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define AMAXV_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ dim_t n, \ ctype* restrict x, inc_t incx, \ @@ -62,7 +62,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define AXPBYV_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ dim_t n, \ @@ -76,7 +76,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define AXPYV_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ dim_t n, \ @@ -89,7 +89,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define COPYV_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ dim_t n, \ @@ -101,7 +101,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define DOTV_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -115,7 +115,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define DOTXV_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -131,7 +131,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define INVERTV_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ dim_t n, \ ctype* restrict x, inc_t incx, \ @@ -141,7 +141,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define SCALV_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjalpha, \ dim_t n, \ @@ -153,7 +153,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define SCAL2V_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ dim_t n, \ @@ -166,7 +166,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define SETV_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjalpha, \ dim_t n, \ @@ -178,7 +178,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define SUBV_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ dim_t n, \ @@ -190,7 +190,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define SWAPV_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ dim_t n, \ ctype* restrict x, inc_t incx, \ @@ -201,7 +201,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define XPBYV_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ dim_t n, \ diff --git a/frame/1/other/packv/bli_packv_check.h b/frame/1/other/packv/bli_packv_check.h index 7e4c62808..08dcd476f 100644 --- a/frame/1/other/packv/bli_packv_check.h +++ b/frame/1/other/packv/bli_packv_check.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_packv_check +void bli_packv_check ( obj_t* c, obj_t* p, diff --git a/frame/1/other/packv/bli_packv_cntl.h b/frame/1/other/packv/bli_packv_cntl.h index 6ddd1dcc1..87f33524b 100644 --- a/frame/1/other/packv/bli_packv_cntl.h +++ b/frame/1/other/packv/bli_packv_cntl.h @@ -56,7 +56,7 @@ typedef struct packv_params_s packv_params_t; // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS cntl_t* bli_packv_cntl_obj_create +cntl_t* bli_packv_cntl_obj_create ( void* var_func, void* packv_var_func, diff --git a/frame/1/other/packv/bli_packv_init.h b/frame/1/other/packv/bli_packv_init.h index 38bbcd92b..8848b395f 100644 --- a/frame/1/other/packv/bli_packv_init.h +++ b/frame/1/other/packv/bli_packv_init.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_packv_init +void bli_packv_init ( obj_t* a, obj_t* p, @@ -40,7 +40,7 @@ BLIS_EXPORT_BLIS void bli_packv_init packv_t* cntl ); -BLIS_EXPORT_BLIS siz_t bli_packv_init_pack +siz_t bli_packv_init_pack ( pack_t pack_schema, bszid_t bmult_id, diff --git a/frame/1/other/packv/bli_packv_int.h b/frame/1/other/packv/bli_packv_int.h index 07fb60cf5..b922c67a3 100644 --- a/frame/1/other/packv/bli_packv_int.h +++ b/frame/1/other/packv/bli_packv_int.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_packv_int +void bli_packv_int ( obj_t* c, obj_t* p, diff --git a/frame/1/other/packv/bli_packv_unb_var1.h b/frame/1/other/packv/bli_packv_unb_var1.h index 0f8fbc804..f33632015 100644 --- a/frame/1/other/packv/bli_packv_unb_var1.h +++ b/frame/1/other/packv/bli_packv_unb_var1.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_packv_unb_var1( obj_t* c, +void bli_packv_unb_var1( obj_t* c, obj_t* p, cntx_t* cntx, packv_t* cntl ); @@ -40,7 +40,7 @@ BLIS_EXPORT_BLIS void bli_packv_unb_var1( obj_t* c, #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ dim_t m, \ void* c, inc_t incc, \ diff --git a/frame/1/other/scalv/bli_scalv_cntl.h b/frame/1/other/scalv/bli_scalv_cntl.h index 1c9a4dac0..057ed60e8 100644 --- a/frame/1/other/scalv/bli_scalv_cntl.h +++ b/frame/1/other/scalv/bli_scalv_cntl.h @@ -41,11 +41,11 @@ typedef struct scalv_s scalv_t; #define bli_cntl_sub_scalv( cntl ) cntl->sub_scalv -BLIS_EXPORT_BLIS void bli_scalv_cntl_init( void ); -BLIS_EXPORT_BLIS void bli_scalv_cntl_finalize( void ); -BLIS_EXPORT_BLIS scalv_t* bli_scalv_cntl_obj_create( impl_t impl_type, +void bli_scalv_cntl_init( void ); +void bli_scalv_cntl_finalize( void ); +scalv_t* bli_scalv_cntl_obj_create( impl_t impl_type, varnum_t var_num ); -BLIS_EXPORT_BLIS void bli_scalv_cntl_obj_init( scalv_t* cntl, +void bli_scalv_cntl_obj_init( scalv_t* cntl, impl_t impl_type, varnum_t var_num ); diff --git a/frame/1/other/scalv/bli_scalv_int.h b/frame/1/other/scalv/bli_scalv_int.h index 7a2a1eec1..fd7cff116 100644 --- a/frame/1/other/scalv/bli_scalv_int.h +++ b/frame/1/other/scalv/bli_scalv_int.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_scalv_int( obj_t* alpha, +void bli_scalv_int( obj_t* alpha, obj_t* x, cntx_t* cntx, scalv_t* cntl ); diff --git a/frame/1/other/unpackv/bli_unpackv_check.h b/frame/1/other/unpackv/bli_unpackv_check.h index b8f10aa3d..38d79fb3b 100644 --- a/frame/1/other/unpackv/bli_unpackv_check.h +++ b/frame/1/other/unpackv/bli_unpackv_check.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_unpackv_check +void bli_unpackv_check ( obj_t* p, obj_t* a, diff --git a/frame/1/other/unpackv/bli_unpackv_cntl.h b/frame/1/other/unpackv/bli_unpackv_cntl.h index 6a8adec82..3d62be8c5 100644 --- a/frame/1/other/unpackv/bli_unpackv_cntl.h +++ b/frame/1/other/unpackv/bli_unpackv_cntl.h @@ -45,11 +45,11 @@ typedef struct unpackv_s unpackv_t; #define bli_cntl_sub_unpackv_y( cntl ) cntl->sub_unpackv_y #define bli_cntl_sub_unpackv_y1( cntl ) cntl->sub_unpackv_y1 -BLIS_EXPORT_BLIS void bli_unpackv_cntl_init( void ); -BLIS_EXPORT_BLIS void bli_unpackv_cntl_finalize( void ); -BLIS_EXPORT_BLIS unpackv_t* bli_unpackv_cntl_obj_create( impl_t impl_type, +void bli_unpackv_cntl_init( void ); +void bli_unpackv_cntl_finalize( void ); +unpackv_t* bli_unpackv_cntl_obj_create( impl_t impl_type, varnum_t var_num ); -BLIS_EXPORT_BLIS void bli_unpackv_cntl_obj_init( unpackv_t* cntl, +void bli_unpackv_cntl_obj_init( unpackv_t* cntl, impl_t impl_type, varnum_t var_num ); diff --git a/frame/1/other/unpackv/bli_unpackv_int.h b/frame/1/other/unpackv/bli_unpackv_int.h index 043c58924..940b738eb 100644 --- a/frame/1/other/unpackv/bli_unpackv_int.h +++ b/frame/1/other/unpackv/bli_unpackv_int.h @@ -32,13 +32,13 @@ */ -BLIS_EXPORT_BLIS void bli_unpackv_int( obj_t* p, +void bli_unpackv_int( obj_t* p, obj_t* a, cntx_t* cntx, unpackv_t* cntl ); /* -BLIS_EXPORT_BLIS void bli_unpackv_init_cast( obj_t* p, +void bli_unpackv_init_cast( obj_t* p, obj_t* a, obj_t* c ); */ diff --git a/frame/1/other/unpackv/bli_unpackv_unb_var1.h b/frame/1/other/unpackv/bli_unpackv_unb_var1.h index f13fb8265..4449175b9 100644 --- a/frame/1/other/unpackv/bli_unpackv_unb_var1.h +++ b/frame/1/other/unpackv/bli_unpackv_unb_var1.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_unpackv_unb_var1( obj_t* p, +void bli_unpackv_unb_var1( obj_t* p, obj_t* c, cntx_t* cntx, unpackv_t* cntl ); @@ -40,7 +40,7 @@ BLIS_EXPORT_BLIS void bli_unpackv_unb_var1( obj_t* p, #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ dim_t m, \ void* p, inc_t incp, \ diff --git a/frame/1d/bli_l1d_check.h b/frame/1d/bli_l1d_check.h index efb6f7af5..6d000d314 100644 --- a/frame/1d/bli_l1d_check.h +++ b/frame/1d/bli_l1d_check.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* y \ @@ -54,7 +54,7 @@ GENTPROT( subd ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -68,7 +68,7 @@ GENTPROT( scal2d ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x \ ); @@ -79,7 +79,7 @@ GENTPROT( invertd ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -94,7 +94,7 @@ GENTPROT( shiftd ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* beta, \ @@ -106,25 +106,25 @@ GENTPROT( xpbyd ) // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_l1d_xy_check +void bli_l1d_xy_check ( obj_t* x, obj_t* y ); -BLIS_EXPORT_BLIS void bli_l1d_axy_check +void bli_l1d_axy_check ( obj_t* alpha, obj_t* x, obj_t* y ); -BLIS_EXPORT_BLIS void bli_l1d_x_check +void bli_l1d_x_check ( obj_t* x ); -BLIS_EXPORT_BLIS void bli_l1d_ax_check +void bli_l1d_ax_check ( obj_t* alpha, obj_t* x diff --git a/frame/1d/bli_l1d_fpa.h b/frame/1d/bli_l1d_fpa.h index 743055636..4516912de 100644 --- a/frame/1d/bli_l1d_fpa.h +++ b/frame/1d/bli_l1d_fpa.h @@ -40,7 +40,7 @@ #define GENPROT( opname ) \ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) \ -BLIS_EXPORT_BLIS BLIS_EXPORT_BLIS PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); +PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); GENPROT( addd ) GENPROT( copyd ) diff --git a/frame/1f/bli_l1f_check.h b/frame/1f/bli_l1f_check.h index 66ef9ad8c..d630f3205 100644 --- a/frame/1f/bli_l1f_check.h +++ b/frame/1f/bli_l1f_check.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alphax, \ obj_t* alphay, \ @@ -55,7 +55,7 @@ GENTPROT( axpy2v ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -69,7 +69,7 @@ GENTPROT( axpyf ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* xt, \ @@ -85,7 +85,7 @@ GENTPROT( dotaxpyv ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* at, \ @@ -103,7 +103,7 @@ GENTPROT( dotxaxpyf ) #undef GENTPROT #define GENTPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* a, \ diff --git a/frame/1f/bli_l1f_fpa.h b/frame/1f/bli_l1f_fpa.h index e7059bf0d..df11439a4 100644 --- a/frame/1f/bli_l1f_fpa.h +++ b/frame/1f/bli_l1f_fpa.h @@ -40,7 +40,7 @@ #define GENPROT( opname ) \ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) \ -BLIS_EXPORT_BLIS PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); +PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); GENPROT( axpy2v ) GENPROT( axpyf ) diff --git a/frame/1f/bli_l1f_ker_prot.h b/frame/1f/bli_l1f_ker_prot.h index 824470663..18eea4568 100644 --- a/frame/1f/bli_l1f_ker_prot.h +++ b/frame/1f/bli_l1f_ker_prot.h @@ -39,7 +39,7 @@ #define AXPY2V_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ conj_t conjy, \ @@ -55,7 +55,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define AXPYF_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conja, \ conj_t conjx, \ @@ -71,7 +71,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define DOTAXPYV_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjxt, \ conj_t conjx, \ @@ -88,7 +88,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define DOTXAXPYF_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjat, \ conj_t conja, \ @@ -109,7 +109,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define DOTXF_KER_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjat, \ conj_t conjx, \ diff --git a/frame/1m/bli_l1m_check.h b/frame/1m/bli_l1m_check.h index a01a7bdd7..030c0e219 100644 --- a/frame/1m/bli_l1m_check.h +++ b/frame/1m/bli_l1m_check.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* y \ @@ -54,7 +54,7 @@ GENPROT( subm ) #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -68,7 +68,7 @@ GENPROT( scal2m ) #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x \ @@ -81,7 +81,7 @@ GENPROT( setm ) #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* beta, \ @@ -93,20 +93,20 @@ GENPROT( xpbym ) // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_l1m_xy_check +void bli_l1m_xy_check ( obj_t* x, obj_t* y ); -BLIS_EXPORT_BLIS void bli_l1m_axy_check +void bli_l1m_axy_check ( obj_t* alpha, obj_t* x, obj_t* y ); -BLIS_EXPORT_BLIS void bli_l1m_ax_check +void bli_l1m_ax_check ( obj_t* alpha, obj_t* x diff --git a/frame/1m/bli_l1m_fpa.h b/frame/1m/bli_l1m_fpa.h index 2f4bb6468..84ef8b77f 100644 --- a/frame/1m/bli_l1m_fpa.h +++ b/frame/1m/bli_l1m_fpa.h @@ -40,7 +40,7 @@ #define GENPROT( opname ) \ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) \ -BLIS_EXPORT_BLIS PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); +PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); GENPROT( addm ) GENPROT( copym ) @@ -55,7 +55,7 @@ GENPROT( xpbym ) #define GENPROT( opname ) \ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) \ -BLIS_EXPORT_BLIS PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp2)( num_t dtx, num_t dty ); +PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp2)( num_t dtx, num_t dty ); GENPROT( xpbym_md ) diff --git a/frame/1m/bli_l1m_ker_prot.h b/frame/1m/bli_l1m_ker_prot.h index 725eb750b..ada520b56 100644 --- a/frame/1m/bli_l1m_ker_prot.h +++ b/frame/1m/bli_l1m_ker_prot.h @@ -41,7 +41,7 @@ #define PACKM_KER_PROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ dim_t cdim, \ @@ -58,7 +58,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ #define UNPACKM_KER_PROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ dim_t n, \ @@ -73,7 +73,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ #define PACKM_3MIS_KER_PROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ dim_t cdim, \ @@ -90,7 +90,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ #define PACKM_4MI_KER_PROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ dim_t cdim, \ @@ -107,7 +107,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ #define PACKM_RIH_KER_PROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ pack_t schema, \ @@ -125,7 +125,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ #define PACKM_1ER_KER_PROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ pack_t schema, \ diff --git a/frame/1m/other/bli_scalm_cntl.h b/frame/1m/other/bli_scalm_cntl.h index f87fe110b..0d589f207 100644 --- a/frame/1m/other/bli_scalm_cntl.h +++ b/frame/1m/other/bli_scalm_cntl.h @@ -33,7 +33,7 @@ */ -BLIS_EXPORT_BLIS cntl_t* bli_scalm_cntl_create_node +cntl_t* bli_scalm_cntl_create_node ( void* var_func, cntl_t* sub_node diff --git a/frame/1m/other/bli_scalm_int.h b/frame/1m/other/bli_scalm_int.h index 5b7f054b0..fb043e45f 100644 --- a/frame/1m/other/bli_scalm_int.h +++ b/frame/1m/other/bli_scalm_int.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_scalm_int( obj_t* alpha, +void bli_scalm_int( obj_t* alpha, obj_t* x, cntx_t* cntx, scalm_t* cntl ); diff --git a/frame/1m/packm/bli_packm_blk_var1_md.h b/frame/1m/packm/bli_packm_blk_var1_md.h index 99c697da6..e6bf151d0 100644 --- a/frame/1m/packm/bli_packm_blk_var1_md.h +++ b/frame/1m/packm/bli_packm_blk_var1_md.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_packm_blk_var1_md +void bli_packm_blk_var1_md ( obj_t* c, obj_t* p, @@ -45,7 +45,7 @@ BLIS_EXPORT_BLIS void bli_packm_blk_var1_md #undef GENTPROT2 #define GENTPROT2( ctype_c, ctype_p, chc, chp, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(chc,chp,varname) \ +void PASTEMAC2(chc,chp,varname) \ ( \ trans_t transc, \ pack_t schema, \ diff --git a/frame/1m/packm/bli_packm_check.h b/frame/1m/packm/bli_packm_check.h index 8b78feb99..be375fcf7 100644 --- a/frame/1m/packm/bli_packm_check.h +++ b/frame/1m/packm/bli_packm_check.h @@ -32,14 +32,14 @@ */ -BLIS_EXPORT_BLIS void bli_packm_init_check +void bli_packm_init_check ( obj_t* a, obj_t* p, cntx_t* cntx ); -BLIS_EXPORT_BLIS void bli_packm_int_check +void bli_packm_int_check ( obj_t* a, obj_t* p, diff --git a/frame/1m/packm/bli_packm_cntl.h b/frame/1m/packm/bli_packm_cntl.h index 418b7b991..bbf0ea332 100644 --- a/frame/1m/packm/bli_packm_cntl.h +++ b/frame/1m/packm/bli_packm_cntl.h @@ -89,7 +89,7 @@ static packbuf_t bli_cntl_packm_params_pack_buf_type( cntl_t* cntl ) // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS cntl_t* bli_packm_cntl_create_node +cntl_t* bli_packm_cntl_create_node ( rntm_t* rntm, void* var_func, diff --git a/frame/1m/packm/bli_packm_cxk.h b/frame/1m/packm/bli_packm_cxk.h index 26071af4d..be089f05c 100644 --- a/frame/1m/packm/bli_packm_cxk.h +++ b/frame/1m/packm/bli_packm_cxk.h @@ -36,7 +36,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ dim_t panel_dim, \ diff --git a/frame/1m/packm/bli_packm_cxk_1er.h b/frame/1m/packm/bli_packm_cxk_1er.h index 77151a2e5..2b0c977b9 100644 --- a/frame/1m/packm/bli_packm_cxk_1er.h +++ b/frame/1m/packm/bli_packm_cxk_1er.h @@ -36,7 +36,7 @@ #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ pack_t schema, \ diff --git a/frame/1m/packm/bli_packm_cxk_3mis.h b/frame/1m/packm/bli_packm_cxk_3mis.h index 472723986..358cdcee4 100644 --- a/frame/1m/packm/bli_packm_cxk_3mis.h +++ b/frame/1m/packm/bli_packm_cxk_3mis.h @@ -36,7 +36,7 @@ #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ dim_t panel_dim, \ diff --git a/frame/1m/packm/bli_packm_cxk_4mi.h b/frame/1m/packm/bli_packm_cxk_4mi.h index 1ad57079c..244f2d045 100644 --- a/frame/1m/packm/bli_packm_cxk_4mi.h +++ b/frame/1m/packm/bli_packm_cxk_4mi.h @@ -36,7 +36,7 @@ #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ dim_t panel_dim, \ diff --git a/frame/1m/packm/bli_packm_cxk_rih.h b/frame/1m/packm/bli_packm_cxk_rih.h index 7bf49aca7..c1d2ba9fe 100644 --- a/frame/1m/packm/bli_packm_cxk_rih.h +++ b/frame/1m/packm/bli_packm_cxk_rih.h @@ -36,7 +36,7 @@ #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ conj_t conja, \ pack_t schema, \ diff --git a/frame/1m/packm/bli_packm_init.h b/frame/1m/packm/bli_packm_init.h index c1b1a8f62..6896ab913 100644 --- a/frame/1m/packm/bli_packm_init.h +++ b/frame/1m/packm/bli_packm_init.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS siz_t bli_packm_init +siz_t bli_packm_init ( obj_t* a, obj_t* p, @@ -40,7 +40,7 @@ BLIS_EXPORT_BLIS siz_t bli_packm_init cntl_t* cntl ); -BLIS_EXPORT_BLIS siz_t bli_packm_init_pack +siz_t bli_packm_init_pack ( invdiag_t invert_diag, pack_t schema, diff --git a/frame/1m/packm/bli_packm_int.h b/frame/1m/packm/bli_packm_int.h index 883c72ae9..573a299d6 100644 --- a/frame/1m/packm/bli_packm_int.h +++ b/frame/1m/packm/bli_packm_int.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_packm_int +void bli_packm_int ( obj_t* a, obj_t* p, diff --git a/frame/1m/packm/bli_packm_part.h b/frame/1m/packm/bli_packm_part.h index e2ccbf18e..5930d312e 100644 --- a/frame/1m/packm/bli_packm_part.h +++ b/frame/1m/packm/bli_packm_part.h @@ -34,23 +34,23 @@ // -- Matrix partitioning ------------------------------------------------------ -BLIS_EXPORT_BLIS void bli_packm_acquire_mpart_t2b( subpart_t requested_part, +void bli_packm_acquire_mpart_t2b( subpart_t requested_part, dim_t i, dim_t b, obj_t* obj, obj_t* sub_obj ); -BLIS_EXPORT_BLIS void bli_packm_acquire_mpart_l2r( subpart_t requested_part, +void bli_packm_acquire_mpart_l2r( subpart_t requested_part, dim_t j, dim_t b, obj_t* obj, obj_t* sub_obj ); -BLIS_EXPORT_BLIS void bli_packm_acquire_mpart_tl2br( subpart_t requested_part, +void bli_packm_acquire_mpart_tl2br( subpart_t requested_part, dim_t ij, dim_t b, obj_t* obj, obj_t* sub_obj ); -BLIS_EXPORT_BLIS dim_t bli_packm_offset_to_panel_for( dim_t offmn, obj_t* p ); +dim_t bli_packm_offset_to_panel_for( dim_t offmn, obj_t* p ); diff --git a/frame/1m/packm/bli_packm_struc_cxk.h b/frame/1m/packm/bli_packm_struc_cxk.h index f192bd3cd..5b486d776 100644 --- a/frame/1m/packm/bli_packm_struc_cxk.h +++ b/frame/1m/packm/bli_packm_struc_cxk.h @@ -35,7 +35,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ @@ -62,7 +62,7 @@ INSERT_GENTPROT_BASIC0( packm_struc_cxk ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -92,7 +92,7 @@ INSERT_GENTPROT_BASIC0( packm_herm_cxk ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_1er.h b/frame/1m/packm/bli_packm_struc_cxk_1er.h index 348f5bd30..e63edf8f2 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_1er.h +++ b/frame/1m/packm/bli_packm_struc_cxk_1er.h @@ -35,7 +35,7 @@ #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ @@ -62,7 +62,7 @@ INSERT_GENTPROTCO_BASIC0( packm_struc_cxk_1er ) #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -92,7 +92,7 @@ INSERT_GENTPROTCO_BASIC0( packm_herm_cxk_1er ) #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_3mis.h b/frame/1m/packm/bli_packm_struc_cxk_3mis.h index f4568f722..24f2c0fcb 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_3mis.h +++ b/frame/1m/packm/bli_packm_struc_cxk_3mis.h @@ -35,7 +35,7 @@ #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ @@ -62,7 +62,7 @@ INSERT_GENTPROTCO_BASIC0( packm_struc_cxk_3mis ) #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -92,7 +92,7 @@ INSERT_GENTPROTCO_BASIC0( packm_herm_cxk_3mis ) #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_4mi.h b/frame/1m/packm/bli_packm_struc_cxk_4mi.h index 65cee615b..f2e6636bf 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_4mi.h +++ b/frame/1m/packm/bli_packm_struc_cxk_4mi.h @@ -35,7 +35,7 @@ #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ @@ -62,7 +62,7 @@ INSERT_GENTPROTCO_BASIC0( packm_struc_cxk_4mi ) #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -92,7 +92,7 @@ INSERT_GENTPROTCO_BASIC0( packm_herm_cxk_4mi ) #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_md.h b/frame/1m/packm/bli_packm_struc_cxk_md.h index f6b62160c..72ca67937 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_md.h +++ b/frame/1m/packm/bli_packm_struc_cxk_md.h @@ -35,7 +35,7 @@ #undef GENTPROT2 #define GENTPROT2( ctype_c, ctype_p, chc, chp, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(chc,chp,varname) \ +void PASTEMAC2(chc,chp,varname) \ ( \ conj_t conjc, \ pack_t schema, \ @@ -57,7 +57,7 @@ INSERT_GENTPROT2_MIXDP0( packm_struc_cxk_md ) #undef GENTPROT2 #define GENTPROT2( ctype_a, ctype_p, cha, chp, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(cha,chp,opname) \ +void PASTEMAC2(cha,chp,opname) \ ( \ conj_t conja, \ dim_t m, \ diff --git a/frame/1m/packm/bli_packm_struc_cxk_rih.h b/frame/1m/packm/bli_packm_struc_cxk_rih.h index 392124021..e87767e26 100644 --- a/frame/1m/packm/bli_packm_struc_cxk_rih.h +++ b/frame/1m/packm/bli_packm_struc_cxk_rih.h @@ -35,7 +35,7 @@ #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffp, \ @@ -62,7 +62,7 @@ INSERT_GENTPROTCO_BASIC0( packm_struc_cxk_rih ) #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -92,7 +92,7 @@ INSERT_GENTPROTCO_BASIC0( packm_herm_cxk_rih ) #undef GENTPROTCO #define GENTPROTCO( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/packm/bli_packm_thrinfo.h b/frame/1m/packm/bli_packm_thrinfo.h index 886af5f07..85b61931c 100644 --- a/frame/1m/packm/bli_packm_thrinfo.h +++ b/frame/1m/packm/bli_packm_thrinfo.h @@ -70,7 +70,7 @@ // #if 0 -BLIS_EXPORT_BLIS thrinfo_t* bli_packm_thrinfo_create +thrinfo_t* bli_packm_thrinfo_create ( thrcomm_t* ocomm, dim_t ocomm_id, @@ -80,7 +80,7 @@ BLIS_EXPORT_BLIS thrinfo_t* bli_packm_thrinfo_create ); #endif -BLIS_EXPORT_BLIS void bli_packm_thrinfo_init +void bli_packm_thrinfo_init ( thrinfo_t* thread, thrcomm_t* ocomm, @@ -91,13 +91,13 @@ BLIS_EXPORT_BLIS void bli_packm_thrinfo_init thrinfo_t* sub_node ); -BLIS_EXPORT_BLIS void bli_packm_thrinfo_init_single +void bli_packm_thrinfo_init_single ( thrinfo_t* thread ); #if 0 -BLIS_EXPORT_BLIS void bli_packm_thrinfo_free +void bli_packm_thrinfo_free ( thrinfo_t* thread ); diff --git a/frame/1m/packm/bli_packm_unb_var1.h b/frame/1m/packm/bli_packm_unb_var1.h index 9d7b20c52..8960c8661 100644 --- a/frame/1m/packm/bli_packm_unb_var1.h +++ b/frame/1m/packm/bli_packm_unb_var1.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_packm_unb_var1 +void bli_packm_unb_var1 ( obj_t* c, obj_t* p, @@ -45,7 +45,7 @@ BLIS_EXPORT_BLIS void bli_packm_unb_var1 #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/packm/bli_packm_var.h b/frame/1m/packm/bli_packm_var.h index a37c363bc..ce2065fd1 100644 --- a/frame/1m/packm/bli_packm_var.h +++ b/frame/1m/packm/bli_packm_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* c, \ obj_t* p, \ @@ -59,7 +59,7 @@ GENPROT( packm_blk_var1 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ @@ -81,7 +81,7 @@ INSERT_GENTPROT_BASIC0( packm_unb_var1 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/unpackm/bli_unpackm_blk_var1.h b/frame/1m/unpackm/bli_unpackm_blk_var1.h index 160cef90f..abd044549 100644 --- a/frame/1m/unpackm/bli_unpackm_blk_var1.h +++ b/frame/1m/unpackm/bli_unpackm_blk_var1.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_unpackm_blk_var1 +void bli_unpackm_blk_var1 ( obj_t* p, obj_t* c, @@ -45,7 +45,7 @@ BLIS_EXPORT_BLIS void bli_unpackm_blk_var1 #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ struc_t strucc, \ doff_t diagoffc, \ diff --git a/frame/1m/unpackm/bli_unpackm_check.h b/frame/1m/unpackm/bli_unpackm_check.h index 0edb6bc57..d2a976dd8 100644 --- a/frame/1m/unpackm/bli_unpackm_check.h +++ b/frame/1m/unpackm/bli_unpackm_check.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_unpackm_int_check +void bli_unpackm_int_check ( obj_t* p, obj_t* a, diff --git a/frame/1m/unpackm/bli_unpackm_cntl.h b/frame/1m/unpackm/bli_unpackm_cntl.h index e8409d657..49a8b19f6 100644 --- a/frame/1m/unpackm/bli_unpackm_cntl.h +++ b/frame/1m/unpackm/bli_unpackm_cntl.h @@ -46,7 +46,7 @@ typedef struct unpackm_params_s unpackm_params_t; // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS cntl_t* bli_unpackm_cntl_create_node +cntl_t* bli_unpackm_cntl_create_node ( rntm_t* rntm, void* var_func, diff --git a/frame/1m/unpackm/bli_unpackm_cxk.h b/frame/1m/unpackm/bli_unpackm_cxk.h index 730f15fa9..53c3c0c44 100644 --- a/frame/1m/unpackm/bli_unpackm_cxk.h +++ b/frame/1m/unpackm/bli_unpackm_cxk.h @@ -36,7 +36,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ conj_t conjp, \ dim_t panel_dim, \ diff --git a/frame/1m/unpackm/bli_unpackm_int.h b/frame/1m/unpackm/bli_unpackm_int.h index 690a5479c..cb66d0975 100644 --- a/frame/1m/unpackm/bli_unpackm_int.h +++ b/frame/1m/unpackm/bli_unpackm_int.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_unpackm_int +void bli_unpackm_int ( obj_t* p, obj_t* a, diff --git a/frame/1m/unpackm/bli_unpackm_unb_var1.h b/frame/1m/unpackm/bli_unpackm_unb_var1.h index 290b1a927..5119aaa7f 100644 --- a/frame/1m/unpackm/bli_unpackm_unb_var1.h +++ b/frame/1m/unpackm/bli_unpackm_unb_var1.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_unpackm_unb_var1 +void bli_unpackm_unb_var1 ( obj_t* p, obj_t* c, @@ -44,7 +44,7 @@ BLIS_EXPORT_BLIS void bli_unpackm_unb_var1 #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffp, \ uplo_t uplop, \ diff --git a/frame/2/bli_l2_check.h b/frame/2/bli_l2_check.h index 6d1e2b2da..af9388753 100644 --- a/frame/2/bli_l2_check.h +++ b/frame/2/bli_l2_check.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -57,7 +57,7 @@ GENPROT( symv ) #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -73,7 +73,7 @@ GENPROT( syr2 ) #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -87,7 +87,7 @@ GENPROT( syr ) #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -100,7 +100,7 @@ GENPROT( trsv ) // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_xxmv_check +void bli_xxmv_check ( obj_t* alpha, obj_t* a, @@ -109,7 +109,7 @@ BLIS_EXPORT_BLIS void bli_xxmv_check obj_t* y ); -BLIS_EXPORT_BLIS void bli_xxr_check +void bli_xxr_check ( obj_t* alpha, obj_t* x, diff --git a/frame/2/bli_l2_fpa.h b/frame/2/bli_l2_fpa.h index c22e040e9..414bd82c2 100644 --- a/frame/2/bli_l2_fpa.h +++ b/frame/2/bli_l2_fpa.h @@ -40,7 +40,7 @@ #define GENPROT( opname ) \ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) \ -BLIS_EXPORT_BLIS PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); +PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); GENPROT( gemv ) GENPROT( ger ) @@ -61,7 +61,7 @@ GENPROT( trsv ) #define GENPROT( opname, varname ) \ \ PASTECH2(opname,_unb,_vft) \ -BLIS_EXPORT_BLIS PASTEMAC(varname,_qfp)( num_t dt ); +PASTEMAC(varname,_qfp)( num_t dt ); GENPROT( gemv, gemv_unb_var1 ) GENPROT( gemv, gemv_unb_var2 ) diff --git a/frame/2/gemv/bli_gemv_var.h b/frame/2/gemv/bli_gemv_var.h index b19e3ddf2..2102c1d0b 100644 --- a/frame/2/gemv/bli_gemv_var.h +++ b/frame/2/gemv/bli_gemv_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -68,7 +68,7 @@ GENPROT( gemv_unf_var2 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ trans_t transa, \ conj_t conjx, \ diff --git a/frame/2/gemv/bli_gemv_var_oapi.c.prev b/frame/2/gemv/bli_gemv_var_oapi.c.prev index c62979732..595508d0f 100644 --- a/frame/2/gemv/bli_gemv_var_oapi.c.prev +++ b/frame/2/gemv/bli_gemv_var_oapi.c.prev @@ -40,7 +40,7 @@ /*static gemv_vft GENARRAY(ftypes,gemv_unb_var1);*/ \ static GENARRAY_VFP(ftname,opname); \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* alpha, \ obj_t* a, \ diff --git a/frame/2/gemv/other/bli_gemv_cntl.h b/frame/2/gemv/other/bli_gemv_cntl.h index 848c99442..e60fd8b5a 100644 --- a/frame/2/gemv/other/bli_gemv_cntl.h +++ b/frame/2/gemv/other/bli_gemv_cntl.h @@ -54,9 +54,9 @@ typedef struct gemv_s gemv_t; #define bli_cntl_sub_gemv_t_rp( cntl ) cntl->sub_gemv_t_rp #define bli_cntl_sub_gemv_t_cp( cntl ) cntl->sub_gemv_t_cp -BLIS_EXPORT_BLIS void bli_gemv_cntl_init( void ); -BLIS_EXPORT_BLIS void bli_gemv_cntl_finalize( void ); -BLIS_EXPORT_BLIS gemv_t* bli_gemv_cntl_obj_create( impl_t impl_type, +void bli_gemv_cntl_init( void ); +void bli_gemv_cntl_finalize( void ); +gemv_t* bli_gemv_cntl_obj_create( impl_t impl_type, varnum_t var_num, bszid_t bszid, scalv_t* sub_scalv, @@ -65,7 +65,7 @@ BLIS_EXPORT_BLIS gemv_t* bli_gemv_cntl_obj_create( impl_t impl_type, packv_t* sub_packv_y, gemv_t* sub_gemv, unpackv_t* sub_unpackv_y ); -BLIS_EXPORT_BLIS void bli_gemv_cntl_obj_init( gemv_t* cntl, +void bli_gemv_cntl_obj_init( gemv_t* cntl, impl_t impl_type, varnum_t var_num, bszid_t bszid, diff --git a/frame/2/gemv/other/bli_gemv_front.h b/frame/2/gemv/other/bli_gemv_front.h index 4c8677bdc..5ffb1aedf 100644 --- a/frame/2/gemv/other/bli_gemv_front.h +++ b/frame/2/gemv/other/bli_gemv_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_gemv_front +void bli_gemv_front ( obj_t* alpha, obj_t* a, @@ -45,7 +45,7 @@ BLIS_EXPORT_BLIS void bli_gemv_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ trans_t transa, \ conj_t conjx, \ diff --git a/frame/2/gemv/other/bli_gemv_int.h b/frame/2/gemv/other/bli_gemv_int.h index 33ab520a7..478fe5fb7 100644 --- a/frame/2/gemv/other/bli_gemv_int.h +++ b/frame/2/gemv/other/bli_gemv_int.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_gemv_int +void bli_gemv_int ( trans_t transa, conj_t conjx, diff --git a/frame/2/ger/bli_ger_var.h b/frame/2/ger/bli_ger_var.h index 0e0abff94..a19bac08c 100644 --- a/frame/2/ger/bli_ger_var.h +++ b/frame/2/ger/bli_ger_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* alpha, \ obj_t* x, \ @@ -64,7 +64,7 @@ GENPROT( ger_unb_var2 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ conj_t conjx, \ conj_t conjy, \ diff --git a/frame/2/ger/other/bli_ger_cntl.h b/frame/2/ger/other/bli_ger_cntl.h index f1425c680..c5e0ebd3a 100644 --- a/frame/2/ger/other/bli_ger_cntl.h +++ b/frame/2/ger/other/bli_ger_cntl.h @@ -49,9 +49,9 @@ typedef struct ger_s ger_t; #define bli_cntl_sub_ger_rp( cntl ) cntl->sub_ger_rp #define bli_cntl_sub_ger_cp( cntl ) cntl->sub_ger_cp -BLIS_EXPORT_BLIS void bli_ger_cntl_init( void ); -BLIS_EXPORT_BLIS void bli_ger_cntl_finalize( void ); -BLIS_EXPORT_BLIS ger_t* bli_ger_cntl_obj_create( impl_t impl_type, +void bli_ger_cntl_init( void ); +void bli_ger_cntl_finalize( void ); +ger_t* bli_ger_cntl_obj_create( impl_t impl_type, varnum_t var_num, bszid_t bszid, packv_t* sub_packv_x, @@ -59,7 +59,7 @@ BLIS_EXPORT_BLIS ger_t* bli_ger_cntl_obj_create( impl_t impl_type, packm_t* sub_packm_a, ger_t* sub_ger, unpackm_t* sub_unpackm_a ); -BLIS_EXPORT_BLIS void bli_ger_cntl_obj_init( ger_t* cntl, +void bli_ger_cntl_obj_init( ger_t* cntl, impl_t impl_type, varnum_t var_num, bszid_t bszid, diff --git a/frame/2/ger/other/bli_ger_front.h b/frame/2/ger/other/bli_ger_front.h index 0f45417c2..5547b13d1 100644 --- a/frame/2/ger/other/bli_ger_front.h +++ b/frame/2/ger/other/bli_ger_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_ger_front +void bli_ger_front ( obj_t* alpha, obj_t* x, @@ -44,7 +44,7 @@ BLIS_EXPORT_BLIS void bli_ger_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ conj_t conjx, \ conj_t conjy, \ diff --git a/frame/2/ger/other/bli_ger_int.h b/frame/2/ger/other/bli_ger_int.h index 42cd91f96..7cec64b6d 100644 --- a/frame/2/ger/other/bli_ger_int.h +++ b/frame/2/ger/other/bli_ger_int.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_ger_int( conj_t conjx, +void bli_ger_int( conj_t conjx, conj_t conjy, obj_t* alpha, obj_t* x, diff --git a/frame/2/hemv/bli_hemv_var.h b/frame/2/hemv/bli_hemv_var.h index 629af9620..a591f1afe 100644 --- a/frame/2/hemv/bli_hemv_var.h +++ b/frame/2/hemv/bli_hemv_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ conj_t conjh, \ obj_t* alpha, \ @@ -75,7 +75,7 @@ GENPROT( hemv_unf_var3a ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conja, \ diff --git a/frame/2/hemv/other/bli_hemv_cntl.h b/frame/2/hemv/other/bli_hemv_cntl.h index 3a8d17d26..12f927056 100644 --- a/frame/2/hemv/other/bli_hemv_cntl.h +++ b/frame/2/hemv/other/bli_hemv_cntl.h @@ -52,9 +52,9 @@ typedef struct hemv_s hemv_t; #define bli_cntl_sub_hemv( cntl ) cntl->sub_hemv -BLIS_EXPORT_BLIS void bli_hemv_cntl_init( void ); -BLIS_EXPORT_BLIS void bli_hemv_cntl_finalize( void ); -BLIS_EXPORT_BLIS hemv_t* bli_hemv_cntl_obj_create( impl_t impl_type, +void bli_hemv_cntl_init( void ); +void bli_hemv_cntl_finalize( void ); +hemv_t* bli_hemv_cntl_obj_create( impl_t impl_type, varnum_t var_num, bszid_t bszid, scalv_t* sub_scalv, @@ -67,7 +67,7 @@ BLIS_EXPORT_BLIS hemv_t* bli_hemv_cntl_obj_create( impl_t impl_type, gemv_t* sub_gemv_t_cp, hemv_t* sub_hemv, unpackv_t* sub_unpackv_y1 ); -BLIS_EXPORT_BLIS void bli_hemv_cntl_obj_init( hemv_t* cntl, +void bli_hemv_cntl_obj_init( hemv_t* cntl, impl_t impl_type, varnum_t var_num, bszid_t bszid, diff --git a/frame/2/hemv/other/bli_hemv_front.h b/frame/2/hemv/other/bli_hemv_front.h index 1f111e06e..5e467be2e 100644 --- a/frame/2/hemv/other/bli_hemv_front.h +++ b/frame/2/hemv/other/bli_hemv_front.h @@ -33,7 +33,7 @@ */ -BLIS_EXPORT_BLIS void bli_hemv_front +void bli_hemv_front ( obj_t* alpha, obj_t* a, @@ -50,7 +50,7 @@ BLIS_EXPORT_BLIS void bli_hemv_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploa, \ conj_t conja, \ diff --git a/frame/2/hemv/other/bli_hemv_int.h b/frame/2/hemv/other/bli_hemv_int.h index 8576fa406..33c1c2a3f 100644 --- a/frame/2/hemv/other/bli_hemv_int.h +++ b/frame/2/hemv/other/bli_hemv_int.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_hemv_int( conj_t conjh, +void bli_hemv_int( conj_t conjh, obj_t* alpha, obj_t* a, obj_t* x, diff --git a/frame/2/her/bli_her_var.h b/frame/2/her/bli_her_var.h index b6634578f..f7f02baac 100644 --- a/frame/2/her/bli_her_var.h +++ b/frame/2/her/bli_her_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ conj_t conjh, \ obj_t* alpha, \ @@ -64,7 +64,7 @@ GENPROT( her_unb_var2 ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her/other/bli_her_cntl.h b/frame/2/her/other/bli_her_cntl.h index 311f2fa49..45d24ba28 100644 --- a/frame/2/her/other/bli_her_cntl.h +++ b/frame/2/her/other/bli_her_cntl.h @@ -47,9 +47,9 @@ typedef struct her_s her_t; #define bli_cntl_sub_her( cntl ) cntl->sub_her -BLIS_EXPORT_BLIS void bli_her_cntl_init( void ); -BLIS_EXPORT_BLIS void bli_her_cntl_finalize( void ); -BLIS_EXPORT_BLIS her_t* bli_her_cntl_obj_create( impl_t impl_type, +void bli_her_cntl_init( void ); +void bli_her_cntl_finalize( void ); +her_t* bli_her_cntl_obj_create( impl_t impl_type, varnum_t var_num, bszid_t bszid, packv_t* sub_packv_x1, @@ -57,7 +57,7 @@ BLIS_EXPORT_BLIS her_t* bli_her_cntl_obj_create( impl_t impl_type, ger_t* sub_ger, her_t* sub_her, unpackm_t* sub_unpackm_c11 ); -BLIS_EXPORT_BLIS void bli_her_cntl_obj_init( her_t* cntl, +void bli_her_cntl_obj_init( her_t* cntl, impl_t impl_type, varnum_t var_num, bszid_t bszid, diff --git a/frame/2/her/other/bli_her_front.h b/frame/2/her/other/bli_her_front.h index 3ae9a9d50..99a0b43b8 100644 --- a/frame/2/her/other/bli_her_front.h +++ b/frame/2/her/other/bli_her_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_her_front +void bli_her_front ( obj_t* alpha, obj_t* x, @@ -43,7 +43,7 @@ BLIS_EXPORT_BLIS void bli_her_front #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ conj_t conjx, \ diff --git a/frame/2/her/other/bli_her_int.h b/frame/2/her/other/bli_her_int.h index bd2d6bd78..fc1b2c677 100644 --- a/frame/2/her/other/bli_her_int.h +++ b/frame/2/her/other/bli_her_int.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_her_int( conj_t conjh, +void bli_her_int( conj_t conjh, obj_t* alpha, obj_t* x, obj_t* c, diff --git a/frame/2/her2/bli_her2_var.h b/frame/2/her2/bli_her2_var.h index 3055a23c8..99672f68c 100644 --- a/frame/2/her2/bli_her2_var.h +++ b/frame/2/her2/bli_her2_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ conj_t conjh, \ obj_t* alpha, \ @@ -73,7 +73,7 @@ GENPROT( her2_unf_var4 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uplo, \ conj_t conjx, \ diff --git a/frame/2/her2/other/bli_her2_cntl.h b/frame/2/her2/other/bli_her2_cntl.h index ab8cfc8de..4034b7260 100644 --- a/frame/2/her2/other/bli_her2_cntl.h +++ b/frame/2/her2/other/bli_her2_cntl.h @@ -49,8 +49,8 @@ typedef struct her2_s her2_t; #define bli_cntl_sub_her2( cntl ) cntl->sub_her2 -BLIS_EXPORT_BLIS void bli_her2_cntl_init( void ); -BLIS_EXPORT_BLIS void bli_her2_cntl_finalize( void ); +void bli_her2_cntl_init( void ); +void bli_her2_cntl_finalize( void ); her2_t* bli_her2_cntl_obj_create( impl_t impl_type, varnum_t var_num, bszid_t bszid, @@ -61,7 +61,7 @@ her2_t* bli_her2_cntl_obj_create( impl_t impl_type, ger_t* sub_ger_cp, her2_t* sub_her2, unpackm_t* sub_unpackm_c11 ); -BLIS_EXPORT_BLIS void bli_her2_cntl_obj_init( her2_t* cntl, +void bli_her2_cntl_obj_init( her2_t* cntl, impl_t impl_type, varnum_t var_num, bszid_t bszid, diff --git a/frame/2/her2/other/bli_her2_front.h b/frame/2/her2/other/bli_her2_front.h index 15df4151d..d5a0e3950 100644 --- a/frame/2/her2/other/bli_her2_front.h +++ b/frame/2/her2/other/bli_her2_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_her2_front +void bli_her2_front ( obj_t* alpha, obj_t* x, @@ -44,7 +44,7 @@ BLIS_EXPORT_BLIS void bli_her2_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ conj_t conjx, \ diff --git a/frame/2/her2/other/bli_her2_int.h b/frame/2/her2/other/bli_her2_int.h index b3eb1566d..d15c6221c 100644 --- a/frame/2/her2/other/bli_her2_int.h +++ b/frame/2/her2/other/bli_her2_int.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_her2_int( conj_t conjh, +void bli_her2_int( conj_t conjh, obj_t* alpha, obj_t* alpha_conj, obj_t* x, diff --git a/frame/2/symv/other/bli_symv_front.h b/frame/2/symv/other/bli_symv_front.h index d8c5ff4be..40b5c0b2a 100644 --- a/frame/2/symv/other/bli_symv_front.h +++ b/frame/2/symv/other/bli_symv_front.h @@ -33,7 +33,7 @@ */ -BLIS_EXPORT_BLIS void bli_symv_front +void bli_symv_front ( obj_t* alpha, obj_t* a, @@ -46,7 +46,7 @@ BLIS_EXPORT_BLIS void bli_symv_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploa, \ conj_t conja, \ diff --git a/frame/2/syr/other/bli_syr_front.h b/frame/2/syr/other/bli_syr_front.h index 344e39181..a0ac22415 100644 --- a/frame/2/syr/other/bli_syr_front.h +++ b/frame/2/syr/other/bli_syr_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_syr_front +void bli_syr_front ( obj_t* alpha, obj_t* x, @@ -43,7 +43,7 @@ BLIS_EXPORT_BLIS void bli_syr_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ conj_t conjx, \ diff --git a/frame/2/syr2/other/bli_syr2_front.h b/frame/2/syr2/other/bli_syr2_front.h index 44846643f..bb164731e 100644 --- a/frame/2/syr2/other/bli_syr2_front.h +++ b/frame/2/syr2/other/bli_syr2_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_syr2_front +void bli_syr2_front ( obj_t* alpha, obj_t* x, @@ -44,7 +44,7 @@ BLIS_EXPORT_BLIS void bli_syr2_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ conj_t conjx, \ diff --git a/frame/2/trmv/bli_trmv_var.h b/frame/2/trmv/bli_trmv_var.h index fbe51af0b..5a36a656d 100644 --- a/frame/2/trmv/bli_trmv_var.h +++ b/frame/2/trmv/bli_trmv_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -68,7 +68,7 @@ GENPROT( trmv_unf_var2 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trmv/other/bli_trmv_cntl.h b/frame/2/trmv/other/bli_trmv_cntl.h index e268523b7..9693a5ad9 100644 --- a/frame/2/trmv/other/bli_trmv_cntl.h +++ b/frame/2/trmv/other/bli_trmv_cntl.h @@ -48,9 +48,9 @@ typedef struct trmv_s trmv_t; #define bli_cntl_sub_trmv( cntl ) cntl->sub_trmv -BLIS_EXPORT_BLIS void bli_trmv_cntl_init( void ); -BLIS_EXPORT_BLIS void bli_trmv_cntl_finalize( void ); -BLIS_EXPORT_BLIS trmv_t* bli_trmv_cntl_obj_create( impl_t impl_type, +void bli_trmv_cntl_init( void ); +void bli_trmv_cntl_finalize( void ); +trmv_t* bli_trmv_cntl_obj_create( impl_t impl_type, varnum_t var_num, bszid_t bszid, packm_t* sub_packm_a11, @@ -59,7 +59,7 @@ BLIS_EXPORT_BLIS trmv_t* bli_trmv_cntl_obj_create( impl_t impl_type, gemv_t* sub_gemv_cp, trmv_t* sub_trmv, unpackv_t* sub_unpackv_x1 ); -BLIS_EXPORT_BLIS void bli_trmv_cntl_obj_init( trmv_t* cntl, +void bli_trmv_cntl_obj_init( trmv_t* cntl, impl_t impl_type, varnum_t var_num, bszid_t bszid, diff --git a/frame/2/trmv/other/bli_trmv_front.h b/frame/2/trmv/other/bli_trmv_front.h index 170c6a2d9..daf54ca9b 100644 --- a/frame/2/trmv/other/bli_trmv_front.h +++ b/frame/2/trmv/other/bli_trmv_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_trmv_front +void bli_trmv_front ( obj_t* alpha, obj_t* a, @@ -43,7 +43,7 @@ BLIS_EXPORT_BLIS void bli_trmv_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trmv/other/bli_trmv_int.h b/frame/2/trmv/other/bli_trmv_int.h index a04310ed1..c956c72d1 100644 --- a/frame/2/trmv/other/bli_trmv_int.h +++ b/frame/2/trmv/other/bli_trmv_int.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_trmv_int( obj_t* alpha, +void bli_trmv_int( obj_t* alpha, obj_t* a, obj_t* x, cntx_t* cntx, diff --git a/frame/2/trsv/bli_trsv_var.h b/frame/2/trsv/bli_trsv_var.h index cc292b724..064394355 100644 --- a/frame/2/trsv/bli_trsv_var.h +++ b/frame/2/trsv/bli_trsv_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -68,7 +68,7 @@ GENPROT( trsv_unf_var2 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trsv/other/bli_trsv_cntl.h b/frame/2/trsv/other/bli_trsv_cntl.h index 8224cabcd..4cb90a17d 100644 --- a/frame/2/trsv/other/bli_trsv_cntl.h +++ b/frame/2/trsv/other/bli_trsv_cntl.h @@ -49,9 +49,9 @@ typedef struct trsv_s trsv_t; #define bli_cntl_sub_trsv( cntl ) cntl->sub_trsv -BLIS_EXPORT_BLIS void bli_trsv_cntl_init( void ); -BLIS_EXPORT_BLIS void bli_trsv_cntl_finalize( void ); -BLIS_EXPORT_BLIS trsv_t* bli_trsv_cntl_obj_create( impl_t impl_type, +void bli_trsv_cntl_init( void ); +void bli_trsv_cntl_finalize( void ); +trsv_t* bli_trsv_cntl_obj_create( impl_t impl_type, varnum_t var_num, bszid_t bszid, scalv_t* sub_scalv, @@ -61,7 +61,7 @@ BLIS_EXPORT_BLIS trsv_t* bli_trsv_cntl_obj_create( impl_t impl_type, gemv_t* sub_gemv_cp, trsv_t* sub_trsv, unpackv_t* sub_unpackv_x1 ); -BLIS_EXPORT_BLIS void bli_trsv_cntl_obj_init( trsv_t* cntl, +void bli_trsv_cntl_obj_init( trsv_t* cntl, impl_t impl_type, varnum_t var_num, bszid_t bszid, diff --git a/frame/2/trsv/other/bli_trsv_front.h b/frame/2/trsv/other/bli_trsv_front.h index 0506a60f7..21d2f6e3c 100644 --- a/frame/2/trsv/other/bli_trsv_front.h +++ b/frame/2/trsv/other/bli_trsv_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_trsv_front +void bli_trsv_front ( obj_t* alpha, obj_t* a, @@ -43,7 +43,7 @@ BLIS_EXPORT_BLIS void bli_trsv_front #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploa, \ trans_t transa, \ diff --git a/frame/2/trsv/other/bli_trsv_int.h b/frame/2/trsv/other/bli_trsv_int.h index b4fc83583..a7e6003e3 100644 --- a/frame/2/trsv/other/bli_trsv_int.h +++ b/frame/2/trsv/other/bli_trsv_int.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_trsv_int( obj_t* alpha, +void bli_trsv_int( obj_t* alpha, obj_t* a, obj_t* x, cntx_t* cntx, diff --git a/frame/3/bli_l3_blocksize.h b/frame/3/bli_l3_blocksize.h index 47a0e5891..c3301ee13 100644 --- a/frame/3/bli_l3_blocksize.h +++ b/frame/3/bli_l3_blocksize.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS dim_t bli_l3_determine_kc +dim_t bli_l3_determine_kc ( dir_t direct, dim_t i, @@ -48,7 +48,7 @@ BLIS_EXPORT_BLIS dim_t bli_l3_determine_kc #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS dim_t PASTEMAC0(opname) \ +dim_t PASTEMAC0(opname) \ ( \ dir_t direct, \ dim_t i, \ @@ -68,7 +68,7 @@ GENPROT( trsm_determine_kc ) #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS dim_t PASTEMAC0(opname) \ +dim_t PASTEMAC0(opname) \ ( \ dim_t i, \ dim_t dim, \ diff --git a/frame/3/bli_l3_check.h b/frame/3/bli_l3_check.h index c572d14a3..7d30bb184 100644 --- a/frame/3/bli_l3_check.h +++ b/frame/3/bli_l3_check.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -58,7 +58,7 @@ GENPROT( syr2k ) #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ side_t side, \ obj_t* alpha, \ @@ -78,7 +78,7 @@ GENPROT( trsm ) #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* alpha, \ obj_t* a, \ @@ -93,7 +93,7 @@ GENPROT( syrk ) // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_gemm_basic_check +void bli_gemm_basic_check ( obj_t* alpha, obj_t* a, @@ -103,7 +103,7 @@ BLIS_EXPORT_BLIS void bli_gemm_basic_check cntx_t* cntx ); -BLIS_EXPORT_BLIS void bli_hemm_basic_check +void bli_hemm_basic_check ( side_t side, obj_t* alpha, @@ -114,7 +114,7 @@ BLIS_EXPORT_BLIS void bli_hemm_basic_check cntx_t* cntx ); -BLIS_EXPORT_BLIS void bli_herk_basic_check +void bli_herk_basic_check ( obj_t* alpha, obj_t* a, @@ -124,7 +124,7 @@ BLIS_EXPORT_BLIS void bli_herk_basic_check cntx_t* cntx ); -BLIS_EXPORT_BLIS void bli_her2k_basic_check +void bli_her2k_basic_check ( obj_t* alpha, obj_t* a, @@ -136,7 +136,7 @@ BLIS_EXPORT_BLIS void bli_her2k_basic_check cntx_t* cntx ); -BLIS_EXPORT_BLIS void bli_l3_basic_check +void bli_l3_basic_check ( obj_t* alpha, obj_t* a, diff --git a/frame/3/bli_l3_cntl.h b/frame/3/bli_l3_cntl.h index e54c52afc..c308c8a96 100644 --- a/frame/3/bli_l3_cntl.h +++ b/frame/3/bli_l3_cntl.h @@ -38,7 +38,7 @@ // Prototype conditional control tree creation functions. // -BLIS_EXPORT_BLIS void bli_l3_cntl_create_if +void bli_l3_cntl_create_if ( opid_t family, pack_t schema_a, @@ -51,7 +51,7 @@ BLIS_EXPORT_BLIS void bli_l3_cntl_create_if cntl_t** cntl_use ); -BLIS_EXPORT_BLIS void bli_l3_cntl_free +void bli_l3_cntl_free ( rntm_t* rntm, cntl_t* cntl_use, diff --git a/frame/3/bli_l3_direct.h b/frame/3/bli_l3_direct.h index 5da1fe1b5..7383c4a9f 100644 --- a/frame/3/bli_l3_direct.h +++ b/frame/3/bli_l3_direct.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS dir_t bli_l3_direct +dir_t bli_l3_direct ( obj_t* a, obj_t* b, @@ -45,7 +45,7 @@ BLIS_EXPORT_BLIS dir_t bli_l3_direct #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS dir_t PASTEMAC0(opname) \ +dir_t PASTEMAC0(opname) \ ( \ obj_t* a, \ obj_t* b, \ diff --git a/frame/3/bli_l3_packm.h b/frame/3/bli_l3_packm.h index 24537e2dc..696dabf59 100644 --- a/frame/3/bli_l3_packm.h +++ b/frame/3/bli_l3_packm.h @@ -33,7 +33,7 @@ */ -BLIS_EXPORT_BLIS void bli_l3_packm +void bli_l3_packm ( obj_t* x, obj_t* x_pack, diff --git a/frame/3/bli_l3_prune.h b/frame/3/bli_l3_prune.h index dbdc6ee72..340ecd4db 100644 --- a/frame/3/bli_l3_prune.h +++ b/frame/3/bli_l3_prune.h @@ -36,7 +36,7 @@ #undef GENPROT #define GENPROT( dim ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(l3_prune_unref_mparts_,dim) \ +void PASTEMAC(l3_prune_unref_mparts_,dim) \ ( \ obj_t* a, \ obj_t* b, \ @@ -53,7 +53,7 @@ GENPROT( k ) #undef GENPROT #define GENPROT( opname, dim ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(opname,_prune_unref_mparts_,dim) \ +void PASTEMAC2(opname,_prune_unref_mparts_,dim) \ ( \ obj_t* a, \ obj_t* b, \ diff --git a/frame/3/bli_l3_thrinfo.h b/frame/3/bli_l3_thrinfo.h index 3b742da10..1dc785615 100644 --- a/frame/3/bli_l3_thrinfo.h +++ b/frame/3/bli_l3_thrinfo.h @@ -72,7 +72,7 @@ // thrinfo_t APIs specific to level-3 operations. // -BLIS_EXPORT_BLIS void bli_l3_thrinfo_init +void bli_l3_thrinfo_init ( thrinfo_t* thread, thrcomm_t* ocomm, @@ -82,12 +82,12 @@ BLIS_EXPORT_BLIS void bli_l3_thrinfo_init thrinfo_t* sub_node ); -BLIS_EXPORT_BLIS void bli_l3_thrinfo_init_single +void bli_l3_thrinfo_init_single ( thrinfo_t* thread ); -BLIS_EXPORT_BLIS void bli_l3_thrinfo_free +void bli_l3_thrinfo_free ( rntm_t* rntm, thrinfo_t* thread @@ -95,7 +95,7 @@ BLIS_EXPORT_BLIS void bli_l3_thrinfo_free // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_l3_thrinfo_create_root +void bli_l3_thrinfo_create_root ( dim_t id, thrcomm_t* gl_comm, @@ -116,7 +116,7 @@ void bli_l3_thrinfo_print_trsm_paths // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_l3_thrinfo_free_paths +void bli_l3_thrinfo_free_paths ( rntm_t* rntm, thrinfo_t** threads diff --git a/frame/3/bli_l3_ukr_fpa.h b/frame/3/bli_l3_ukr_fpa.h index 24947c6ff..65bdc6964 100644 --- a/frame/3/bli_l3_ukr_fpa.h +++ b/frame/3/bli_l3_ukr_fpa.h @@ -40,7 +40,7 @@ #define GENPROT( tname, opname ) \ \ PASTECH2(tname,_ukr,_vft) \ -BLIS_EXPORT_BLIS PASTEMAC(opname,_qfp)( num_t dt ); +PASTEMAC(opname,_qfp)( num_t dt ); GENPROT( gemm, gemm_ukernel ) GENPROT( gemmtrsm, gemmtrsm_l_ukernel ) diff --git a/frame/3/bli_l3_ukr_prot.h b/frame/3/bli_l3_ukr_prot.h index bc9aa3e40..80733897b 100644 --- a/frame/3/bli_l3_ukr_prot.h +++ b/frame/3/bli_l3_ukr_prot.h @@ -38,7 +38,7 @@ #define GEMM_UKR_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ dim_t k, \ ctype* restrict alpha, \ @@ -53,7 +53,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define GEMMTRSM_UKR_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ dim_t k, \ ctype* restrict alpha, \ @@ -69,7 +69,7 @@ BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ #define TRSM_UKR_PROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ ctype* restrict a, \ ctype* restrict b, \ diff --git a/frame/3/gemm/bli_gemm_cntl.h b/frame/3/gemm/bli_gemm_cntl.h index efbfa03a5..c6d20b170 100644 --- a/frame/3/gemm/bli_gemm_cntl.h +++ b/frame/3/gemm/bli_gemm_cntl.h @@ -33,7 +33,7 @@ */ -BLIS_EXPORT_BLIS cntl_t* bli_gemm_cntl_create +cntl_t* bli_gemm_cntl_create ( rntm_t* rntm, opid_t family, @@ -43,7 +43,7 @@ BLIS_EXPORT_BLIS cntl_t* bli_gemm_cntl_create // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS cntl_t* bli_gemmbp_cntl_create +cntl_t* bli_gemmbp_cntl_create ( rntm_t* rntm, opid_t family, @@ -52,7 +52,7 @@ BLIS_EXPORT_BLIS cntl_t* bli_gemmbp_cntl_create ); #if 0 -BLIS_EXPORT_BLIS cntl_t* bli_gemmpb_cntl_create +cntl_t* bli_gemmpb_cntl_create ( opid_t family, ); @@ -60,7 +60,7 @@ BLIS_EXPORT_BLIS cntl_t* bli_gemmpb_cntl_create // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_gemm_cntl_free +void bli_gemm_cntl_free ( rntm_t* rntm, cntl_t* cntl, @@ -69,7 +69,7 @@ BLIS_EXPORT_BLIS void bli_gemm_cntl_free // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS cntl_t* bli_gemm_cntl_create_node +cntl_t* bli_gemm_cntl_create_node ( rntm_t* rntm, opid_t family, diff --git a/frame/3/gemm/bli_gemm_front.h b/frame/3/gemm/bli_gemm_front.h index 0da4e0b9e..ba65bab8d 100644 --- a/frame/3/gemm/bli_gemm_front.h +++ b/frame/3/gemm/bli_gemm_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_gemm_front +void bli_gemm_front ( obj_t* alpha, obj_t* a, @@ -44,7 +44,7 @@ BLIS_EXPORT_BLIS void bli_gemm_front cntl_t* cntl ); -BLIS_EXPORT_BLIS err_t bli_gemm_small +err_t bli_gemm_small ( obj_t* alpha, obj_t* a, diff --git a/frame/3/gemm/bli_gemm_int.h b/frame/3/gemm/bli_gemm_int.h index 725cc64ba..2bbe5480a 100644 --- a/frame/3/gemm/bli_gemm_int.h +++ b/frame/3/gemm/bli_gemm_int.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_gemm_int +void bli_gemm_int ( obj_t* alpha, obj_t* a, diff --git a/frame/3/gemm/bli_gemm_md.h b/frame/3/gemm/bli_gemm_md.h index 4d8825f58..057eb0a1d 100644 --- a/frame/3/gemm/bli_gemm_md.h +++ b/frame/3/gemm/bli_gemm_md.h @@ -41,7 +41,7 @@ typedef struct mddm_s dom_t exec; } mddm_t; -BLIS_EXPORT_BLIS void bli_gemm_md +void bli_gemm_md ( obj_t* a, obj_t* b, @@ -50,18 +50,18 @@ BLIS_EXPORT_BLIS void bli_gemm_md cntx_t* cntx_local, cntx_t** cntx ); -BLIS_EXPORT_BLIS mddm_t bli_gemm_md_ccc( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); -BLIS_EXPORT_BLIS mddm_t bli_gemm_md_ccr( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); -BLIS_EXPORT_BLIS mddm_t bli_gemm_md_crc( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); -BLIS_EXPORT_BLIS mddm_t bli_gemm_md_rcc( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); -BLIS_EXPORT_BLIS mddm_t bli_gemm_md_rrc( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); -BLIS_EXPORT_BLIS mddm_t bli_gemm_md_rcr( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); -BLIS_EXPORT_BLIS mddm_t bli_gemm_md_crr( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); -BLIS_EXPORT_BLIS mddm_t bli_gemm_md_rrr( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); +mddm_t bli_gemm_md_ccc( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); +mddm_t bli_gemm_md_ccr( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); +mddm_t bli_gemm_md_crc( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); +mddm_t bli_gemm_md_rcc( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); +mddm_t bli_gemm_md_rrc( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); +mddm_t bli_gemm_md_rcr( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); +mddm_t bli_gemm_md_crr( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); +mddm_t bli_gemm_md_rrr( obj_t* a, obj_t* b, obj_t* beta, obj_t* c, cntx_t* cntx_l, cntx_t** cntx ); // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_gemm_md_front +void bli_gemm_md_front ( obj_t* alpha, obj_t* a, @@ -73,7 +73,7 @@ BLIS_EXPORT_BLIS void bli_gemm_md_front cntl_t* cntl ); -BLIS_EXPORT_BLIS void bli_gemm_md_zgemm +void bli_gemm_md_zgemm ( obj_t* alpha, obj_t* a, @@ -283,7 +283,7 @@ static void bli_gemm_md_ker_var2_recast #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* a, \ obj_t* b, \ @@ -303,7 +303,7 @@ GENPROT( gemm_ker_var2_md ) #undef GENTPROT2 #define GENTPROT2( ctype_c, ctype_e, chc, che, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(chc,che,varname) \ +void PASTEMAC2(chc,che,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/bli_gemm_var.h b/frame/3/gemm/bli_gemm_var.h index f3a74bfc0..b08271e9b 100644 --- a/frame/3/gemm/bli_gemm_var.h +++ b/frame/3/gemm/bli_gemm_var.h @@ -41,7 +41,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* a, \ obj_t* b, \ @@ -73,7 +73,7 @@ GENPROT( gemm4mb_ker_var2 ) // 4m1b #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ pack_t schema_a, \ pack_t schema_b, \ diff --git a/frame/3/gemm/other/bli_gemm_ker_var5.h b/frame/3/gemm/other/bli_gemm_ker_var5.h index ab39b6109..7e24bb5f9 100644 --- a/frame/3/gemm/other/bli_gemm_ker_var5.h +++ b/frame/3/gemm/other/bli_gemm_ker_var5.h @@ -36,7 +36,7 @@ // // Prototype object-based interface. // -BLIS_EXPORT_BLIS void bli_gemm_ker_var5( obj_t* a, +void bli_gemm_ker_var5( obj_t* a, obj_t* b, obj_t* c, cntx_t* cntx, @@ -50,7 +50,7 @@ BLIS_EXPORT_BLIS void bli_gemm_ker_var5( obj_t* a, #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname)( \ +void PASTEMAC(ch,varname)( \ dim_t m, \ dim_t n, \ dim_t k, \ diff --git a/frame/3/hemm/bli_hemm_front.h b/frame/3/hemm/bli_hemm_front.h index 01affcaa9..308b6378b 100644 --- a/frame/3/hemm/bli_hemm_front.h +++ b/frame/3/hemm/bli_hemm_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_hemm_front +void bli_hemm_front ( side_t side, obj_t* alpha, diff --git a/frame/3/her2k/bli_her2k_front.h b/frame/3/her2k/bli_her2k_front.h index 736d6beff..0efdb86c2 100644 --- a/frame/3/her2k/bli_her2k_front.h +++ b/frame/3/her2k/bli_her2k_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_her2k_front +void bli_her2k_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/herk/bli_herk_front.h b/frame/3/herk/bli_herk_front.h index ec05a2249..44778a450 100644 --- a/frame/3/herk/bli_herk_front.h +++ b/frame/3/herk/bli_herk_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_herk_front +void bli_herk_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/herk/bli_herk_var.h b/frame/3/herk/bli_herk_var.h index a3d0bd370..00b85fc5c 100644 --- a/frame/3/herk/bli_herk_var.h +++ b/frame/3/herk/bli_herk_var.h @@ -41,7 +41,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* a, \ obj_t* ah, \ @@ -71,7 +71,7 @@ GENPROT( herk_u_ker_var2 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffc, \ pack_t schema_a, \ diff --git a/frame/3/symm/bli_symm_front.h b/frame/3/symm/bli_symm_front.h index be1e1b060..909997f6c 100644 --- a/frame/3/symm/bli_symm_front.h +++ b/frame/3/symm/bli_symm_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_symm_front +void bli_symm_front ( side_t side, obj_t* alpha, diff --git a/frame/3/syr2k/bli_syr2k_front.h b/frame/3/syr2k/bli_syr2k_front.h index 5251fee38..767bb6ee1 100644 --- a/frame/3/syr2k/bli_syr2k_front.h +++ b/frame/3/syr2k/bli_syr2k_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_syr2k_front +void bli_syr2k_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/syrk/bli_syrk_front.h b/frame/3/syrk/bli_syrk_front.h index 623fbd8e1..98b1e1251 100644 --- a/frame/3/syrk/bli_syrk_front.h +++ b/frame/3/syrk/bli_syrk_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_syrk_front +void bli_syrk_front ( obj_t* alpha, obj_t* a, diff --git a/frame/3/trmm/bli_trmm_front.h b/frame/3/trmm/bli_trmm_front.h index f53dd8133..3e136f9dc 100644 --- a/frame/3/trmm/bli_trmm_front.h +++ b/frame/3/trmm/bli_trmm_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_trmm_front +void bli_trmm_front ( side_t side, obj_t* alpha, diff --git a/frame/3/trmm/bli_trmm_var.h b/frame/3/trmm/bli_trmm_var.h index 3fa5b081a..262b0490f 100644 --- a/frame/3/trmm/bli_trmm_var.h +++ b/frame/3/trmm/bli_trmm_var.h @@ -41,7 +41,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* a, \ obj_t* b, \ @@ -71,7 +71,7 @@ GENPROT( trmm_ru_ker_var2 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoff, \ pack_t schema_a, \ diff --git a/frame/3/trmm3/bli_trmm3_front.h b/frame/3/trmm3/bli_trmm3_front.h index 22c0ff509..296b9354b 100644 --- a/frame/3/trmm3/bli_trmm3_front.h +++ b/frame/3/trmm3/bli_trmm3_front.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_trmm3_front +void bli_trmm3_front ( side_t side, obj_t* alpha, diff --git a/frame/3/trsm/bli_trsm_cntl.h b/frame/3/trsm/bli_trsm_cntl.h index 0ea2d3812..f81f70d07 100644 --- a/frame/3/trsm/bli_trsm_cntl.h +++ b/frame/3/trsm/bli_trsm_cntl.h @@ -33,7 +33,7 @@ */ -BLIS_EXPORT_BLIS cntl_t* bli_trsm_cntl_create +cntl_t* bli_trsm_cntl_create ( rntm_t* rntm, side_t side, @@ -41,21 +41,21 @@ BLIS_EXPORT_BLIS cntl_t* bli_trsm_cntl_create pack_t schema_b ); -BLIS_EXPORT_BLIS cntl_t* bli_trsm_l_cntl_create +cntl_t* bli_trsm_l_cntl_create ( rntm_t* rntm, pack_t schema_a, pack_t schema_b ); -BLIS_EXPORT_BLIS cntl_t* bli_trsm_r_cntl_create +cntl_t* bli_trsm_r_cntl_create ( rntm_t* rntm, pack_t schema_a, pack_t schema_b ); -BLIS_EXPORT_BLIS void bli_trsm_cntl_free +void bli_trsm_cntl_free ( rntm_t* rntm, cntl_t* cntl, @@ -64,7 +64,7 @@ BLIS_EXPORT_BLIS void bli_trsm_cntl_free // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS cntl_t* bli_trsm_cntl_create_node +cntl_t* bli_trsm_cntl_create_node ( rntm_t* rntm, opid_t family, diff --git a/frame/3/trsm/bli_trsm_front.h b/frame/3/trsm/bli_trsm_front.h index d50750865..c8942730b 100644 --- a/frame/3/trsm/bli_trsm_front.h +++ b/frame/3/trsm/bli_trsm_front.h @@ -33,7 +33,7 @@ */ -BLIS_EXPORT_BLIS void bli_trsm_front +void bli_trsm_front ( side_t side, obj_t* alpha, diff --git a/frame/3/trsm/bli_trsm_int.h b/frame/3/trsm/bli_trsm_int.h index ce205765c..aabb2a8aa 100644 --- a/frame/3/trsm/bli_trsm_int.h +++ b/frame/3/trsm/bli_trsm_int.h @@ -32,7 +32,7 @@ */ -BLIS_EXPORT_BLIS void bli_trsm_int +void bli_trsm_int ( obj_t* alpha, obj_t* a, diff --git a/frame/3/trsm/bli_trsm_var.h b/frame/3/trsm/bli_trsm_var.h index aa5c3e4a5..de7c65936 100644 --- a/frame/3/trsm/bli_trsm_var.h +++ b/frame/3/trsm/bli_trsm_var.h @@ -41,7 +41,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ +void PASTEMAC0(opname) \ ( \ obj_t* a, \ obj_t* b, \ @@ -73,7 +73,7 @@ GENPROT( trsm_ru_ker_var2 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoff, \ pack_t schema_a, \ diff --git a/frame/base/bli_apool.h b/frame/base/bli_apool.h index 5d183e03a..f08d89c9d 100644 --- a/frame/base/bli_apool.h +++ b/frame/base/bli_apool.h @@ -94,44 +94,44 @@ static void bli_apool_set_def_array_len( siz_t def_array_len, apool_t* pool ) \ // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_apool_init +void bli_apool_init ( apool_t* restrict apool ); -BLIS_EXPORT_BLIS void bli_apool_finalize +void bli_apool_finalize ( apool_t* restrict apool ); -BLIS_EXPORT_BLIS array_t* bli_apool_checkout_array +array_t* bli_apool_checkout_array ( siz_t n_threads, apool_t* restrict apool ); -BLIS_EXPORT_BLIS void bli_apool_checkin_array +void bli_apool_checkin_array ( array_t* restrict array, apool_t* restrict apool ); -BLIS_EXPORT_BLIS pool_t* bli_apool_array_elem +pool_t* bli_apool_array_elem ( siz_t index, array_t* restrict array ); -BLIS_EXPORT_BLIS void bli_apool_grow +void bli_apool_grow ( siz_t num_blocks_add, apool_t* restrict apool ); -BLIS_EXPORT_BLIS void bli_apool_alloc_block +void bli_apool_alloc_block ( siz_t num_elem, array_t** restrict array_p ); -BLIS_EXPORT_BLIS void bli_apool_free_block +void bli_apool_free_block ( array_t* restrict array ); diff --git a/frame/base/bli_arch.h b/frame/base/bli_arch.h index 42a021806..13c9c8aa6 100644 --- a/frame/base/bli_arch.h +++ b/frame/base/bli_arch.h @@ -35,12 +35,12 @@ #ifndef BLIS_ARCH_H #define BLIS_ARCH_H -BLIS_EXPORT_BLIS arch_t bli_arch_query_id( void ); +arch_t bli_arch_query_id( void ); -BLIS_EXPORT_BLIS void bli_arch_set_id_once( void ); -BLIS_EXPORT_BLIS void bli_arch_set_id( void ); +void bli_arch_set_id_once( void ); +void bli_arch_set_id( void ); -BLIS_EXPORT_BLIS char* bli_arch_string( arch_t id ); +char* bli_arch_string( arch_t id ); #endif diff --git a/frame/base/bli_array.h b/frame/base/bli_array.h index e74b7eca4..cb6db0340 100644 --- a/frame/base/bli_array.h +++ b/frame/base/bli_array.h @@ -85,28 +85,28 @@ static void bli_array_set_elem_size( siz_t elem_size, array_t* array ) \ // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_array_init +void bli_array_init ( const siz_t num_elem, const siz_t elem_size, array_t* restrict array ); -BLIS_EXPORT_BLIS void bli_array_resize +void bli_array_resize ( const siz_t num_elem_new, array_t* restrict array ); -BLIS_EXPORT_BLIS void bli_array_finalize +void bli_array_finalize ( array_t* restrict array ); -BLIS_EXPORT_BLIS void* bli_array_elem +void* bli_array_elem ( const siz_t index, array_t* restrict array ); -BLIS_EXPORT_BLIS void bli_array_set_elem +void bli_array_set_elem ( void* restrict elem, const siz_t index, diff --git a/frame/base/bli_blksz.h b/frame/base/bli_blksz.h index 5ca441a29..a3400b2fa 100644 --- a/frame/base/bli_blksz.h +++ b/frame/base/bli_blksz.h @@ -237,20 +237,20 @@ BLIS_EXPORT_BLIS void bli_blksz_reduce_dt_to ); #endif -BLIS_EXPORT_BLIS void bli_blksz_reduce_def_to +void bli_blksz_reduce_def_to ( num_t dt_bm, blksz_t* bmult, num_t dt_bs, blksz_t* blksz ); -BLIS_EXPORT_BLIS void bli_blksz_reduce_max_to +void bli_blksz_reduce_max_to ( num_t dt_bm, blksz_t* bmult, num_t dt_bs, blksz_t* blksz ); // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS dim_t bli_determine_blocksize +dim_t bli_determine_blocksize ( dir_t direct, dim_t i, @@ -260,7 +260,7 @@ BLIS_EXPORT_BLIS dim_t bli_determine_blocksize cntx_t* cntx ); -BLIS_EXPORT_BLIS dim_t bli_determine_blocksize_f +dim_t bli_determine_blocksize_f ( dim_t i, dim_t dim, @@ -269,7 +269,7 @@ BLIS_EXPORT_BLIS dim_t bli_determine_blocksize_f cntx_t* cntx ); -BLIS_EXPORT_BLIS dim_t bli_determine_blocksize_b +dim_t bli_determine_blocksize_b ( dim_t i, dim_t dim, @@ -278,7 +278,7 @@ BLIS_EXPORT_BLIS dim_t bli_determine_blocksize_b cntx_t* cntx ); -BLIS_EXPORT_BLIS dim_t bli_determine_blocksize_f_sub +dim_t bli_determine_blocksize_f_sub ( dim_t i, dim_t dim, @@ -286,7 +286,7 @@ BLIS_EXPORT_BLIS dim_t bli_determine_blocksize_f_sub dim_t b_max ); -BLIS_EXPORT_BLIS dim_t bli_determine_blocksize_b_sub +dim_t bli_determine_blocksize_b_sub ( dim_t i, dim_t dim, diff --git a/frame/base/bli_check.h b/frame/base/bli_check.h index 2bbbcf31a..90de609ad 100644 --- a/frame/base/bli_check.h +++ b/frame/base/bli_check.h @@ -34,84 +34,84 @@ */ -BLIS_EXPORT_BLIS err_t bli_check_error_code_helper( gint_t code, char* file, guint_t line ); +err_t bli_check_error_code_helper( gint_t code, char* file, guint_t line ); -BLIS_EXPORT_BLIS err_t bli_check_valid_error_level( errlev_t level ); +err_t bli_check_valid_error_level( errlev_t level ); -BLIS_EXPORT_BLIS err_t bli_check_null_pointer( void* ptr ); +err_t bli_check_null_pointer( void* ptr ); -BLIS_EXPORT_BLIS err_t bli_check_valid_side( side_t side ); -BLIS_EXPORT_BLIS err_t bli_check_valid_uplo( uplo_t uplo ); -BLIS_EXPORT_BLIS err_t bli_check_valid_trans( trans_t trans ); -BLIS_EXPORT_BLIS err_t bli_check_valid_diag( diag_t diag ); -BLIS_EXPORT_BLIS err_t bli_check_nonunit_diag( obj_t* a ); +err_t bli_check_valid_side( side_t side ); +err_t bli_check_valid_uplo( uplo_t uplo ); +err_t bli_check_valid_trans( trans_t trans ); +err_t bli_check_valid_diag( diag_t diag ); +err_t bli_check_nonunit_diag( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_valid_datatype( num_t dt ); -BLIS_EXPORT_BLIS err_t bli_check_object_valid_datatype( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_noninteger_datatype( num_t dt ); -BLIS_EXPORT_BLIS err_t bli_check_noninteger_object( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_nonconstant_datatype( num_t dt ); -BLIS_EXPORT_BLIS err_t bli_check_nonconstant_object( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_floating_datatype( num_t dt ); -BLIS_EXPORT_BLIS err_t bli_check_floating_object( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_real_datatype( num_t dt ); -BLIS_EXPORT_BLIS err_t bli_check_real_object( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_integer_datatype( num_t dt ); -BLIS_EXPORT_BLIS err_t bli_check_integer_object( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_consistent_datatypes( num_t dt_a, num_t dt_b ); -BLIS_EXPORT_BLIS err_t bli_check_consistent_object_datatypes( obj_t* a, obj_t* b ); -BLIS_EXPORT_BLIS err_t bli_check_datatype_real_proj_of( num_t dt_c, num_t dt_r ); -BLIS_EXPORT_BLIS err_t bli_check_object_real_proj_of( obj_t* c, obj_t* r ); -BLIS_EXPORT_BLIS err_t bli_check_real_valued_object( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_consistent_precisions( num_t dt_a, num_t dt_b ); -BLIS_EXPORT_BLIS err_t bli_check_consistent_object_precisions( obj_t* a, obj_t* b ); +err_t bli_check_valid_datatype( num_t dt ); +err_t bli_check_object_valid_datatype( obj_t* a ); +err_t bli_check_noninteger_datatype( num_t dt ); +err_t bli_check_noninteger_object( obj_t* a ); +err_t bli_check_nonconstant_datatype( num_t dt ); +err_t bli_check_nonconstant_object( obj_t* a ); +err_t bli_check_floating_datatype( num_t dt ); +err_t bli_check_floating_object( obj_t* a ); +err_t bli_check_real_datatype( num_t dt ); +err_t bli_check_real_object( obj_t* a ); +err_t bli_check_integer_datatype( num_t dt ); +err_t bli_check_integer_object( obj_t* a ); +err_t bli_check_consistent_datatypes( num_t dt_a, num_t dt_b ); +err_t bli_check_consistent_object_datatypes( obj_t* a, obj_t* b ); +err_t bli_check_datatype_real_proj_of( num_t dt_c, num_t dt_r ); +err_t bli_check_object_real_proj_of( obj_t* c, obj_t* r ); +err_t bli_check_real_valued_object( obj_t* a ); +err_t bli_check_consistent_precisions( num_t dt_a, num_t dt_b ); +err_t bli_check_consistent_object_precisions( obj_t* a, obj_t* b ); -BLIS_EXPORT_BLIS err_t bli_check_conformal_dims( obj_t* a, obj_t* b ); -BLIS_EXPORT_BLIS err_t bli_check_level3_dims( obj_t* a, obj_t* b, obj_t* c ); -BLIS_EXPORT_BLIS err_t bli_check_scalar_object( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_vector_object( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_matrix_object( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_equal_vector_lengths( obj_t* x, obj_t* y ); -BLIS_EXPORT_BLIS err_t bli_check_square_object( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_object_length_equals( obj_t* a, dim_t m ); -BLIS_EXPORT_BLIS err_t bli_check_object_width_equals( obj_t* a, dim_t n ); -BLIS_EXPORT_BLIS err_t bli_check_vector_dim_equals( obj_t* a, dim_t n ); -BLIS_EXPORT_BLIS err_t bli_check_object_diag_offset_equals( obj_t* a, doff_t offset ); +err_t bli_check_conformal_dims( obj_t* a, obj_t* b ); +err_t bli_check_level3_dims( obj_t* a, obj_t* b, obj_t* c ); +err_t bli_check_scalar_object( obj_t* a ); +err_t bli_check_vector_object( obj_t* a ); +err_t bli_check_matrix_object( obj_t* a ); +err_t bli_check_equal_vector_lengths( obj_t* x, obj_t* y ); +err_t bli_check_square_object( obj_t* a ); +err_t bli_check_object_length_equals( obj_t* a, dim_t m ); +err_t bli_check_object_width_equals( obj_t* a, dim_t n ); +err_t bli_check_vector_dim_equals( obj_t* a, dim_t n ); +err_t bli_check_object_diag_offset_equals( obj_t* a, doff_t offset ); -BLIS_EXPORT_BLIS err_t bli_check_matrix_strides( dim_t m, dim_t n, inc_t rs, inc_t cs, inc_t is ); +err_t bli_check_matrix_strides( dim_t m, dim_t n, inc_t rs, inc_t cs, inc_t is ); -BLIS_EXPORT_BLIS err_t bli_check_general_object( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_hermitian_object( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_symmetric_object( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_triangular_object( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_object_struc( obj_t* a, struc_t struc ); +err_t bli_check_general_object( obj_t* a ); +err_t bli_check_hermitian_object( obj_t* a ); +err_t bli_check_symmetric_object( obj_t* a ); +err_t bli_check_triangular_object( obj_t* a ); +err_t bli_check_object_struc( obj_t* a, struc_t struc ); -BLIS_EXPORT_BLIS err_t bli_check_upper_or_lower_object( obj_t* a ); +err_t bli_check_upper_or_lower_object( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_valid_3x1_subpart( subpart_t part ); -BLIS_EXPORT_BLIS err_t bli_check_valid_1x3_subpart( subpart_t part ); -BLIS_EXPORT_BLIS err_t bli_check_valid_3x3_subpart( subpart_t part ); +err_t bli_check_valid_3x1_subpart( subpart_t part ); +err_t bli_check_valid_1x3_subpart( subpart_t part ); +err_t bli_check_valid_3x3_subpart( subpart_t part ); -BLIS_EXPORT_BLIS err_t bli_check_valid_cntl( void* cntl ); +err_t bli_check_valid_cntl( void* cntl ); -BLIS_EXPORT_BLIS err_t bli_check_packm_schema_on_unpack( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_packv_schema_on_unpack( obj_t* a ); +err_t bli_check_packm_schema_on_unpack( obj_t* a ); +err_t bli_check_packv_schema_on_unpack( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_object_buffer( obj_t* a ); +err_t bli_check_object_buffer( obj_t* a ); -BLIS_EXPORT_BLIS err_t bli_check_valid_malloc_buf( void* ptr ); +err_t bli_check_valid_malloc_buf( void* ptr ); -BLIS_EXPORT_BLIS err_t bli_check_valid_packbuf( packbuf_t buf_type ); -BLIS_EXPORT_BLIS err_t bli_check_if_exhausted_pool( pool_t* pool ); -BLIS_EXPORT_BLIS err_t bli_check_sufficient_stack_buf_size( num_t dt, cntx_t* cntx ); -BLIS_EXPORT_BLIS err_t bli_check_alignment_is_power_of_two( size_t align_size ); -BLIS_EXPORT_BLIS err_t bli_check_alignment_is_mult_of_ptr_size( size_t align_size ); +err_t bli_check_valid_packbuf( packbuf_t buf_type ); +err_t bli_check_if_exhausted_pool( pool_t* pool ); +err_t bli_check_sufficient_stack_buf_size( num_t dt, cntx_t* cntx ); +err_t bli_check_alignment_is_power_of_two( size_t align_size ); +err_t bli_check_alignment_is_mult_of_ptr_size( size_t align_size ); -BLIS_EXPORT_BLIS err_t bli_check_object_alias_of( obj_t* a, obj_t* b ); +err_t bli_check_object_alias_of( obj_t* a, obj_t* b ); -BLIS_EXPORT_BLIS err_t bli_check_valid_arch_id( arch_t id ); +err_t bli_check_valid_arch_id( arch_t id ); -BLIS_EXPORT_BLIS err_t bli_check_valid_mc_mod_mult( blksz_t* mc, blksz_t* mr ); -BLIS_EXPORT_BLIS err_t bli_check_valid_nc_mod_mult( blksz_t* nc, blksz_t* nr ); -BLIS_EXPORT_BLIS err_t bli_check_valid_kc_mod_mult( blksz_t* kc, blksz_t* kr ); +err_t bli_check_valid_mc_mod_mult( blksz_t* mc, blksz_t* mr ); +err_t bli_check_valid_nc_mod_mult( blksz_t* nc, blksz_t* nr ); +err_t bli_check_valid_kc_mod_mult( blksz_t* kc, blksz_t* kr ); diff --git a/frame/base/bli_clock.h b/frame/base/bli_clock.h index f4d952a08..d52e26ef6 100644 --- a/frame/base/bli_clock.h +++ b/frame/base/bli_clock.h @@ -34,5 +34,6 @@ BLIS_EXPORT_BLIS double bli_clock( void ); BLIS_EXPORT_BLIS double bli_clock_min_diff( double time_min, double time_start ); -BLIS_EXPORT_BLIS double bli_clock_helper( void ); + +double bli_clock_helper( void ); diff --git a/frame/base/bli_cntl.h b/frame/base/bli_cntl.h index 610baad15..8cba6fef5 100644 --- a/frame/base/bli_cntl.h +++ b/frame/base/bli_cntl.h @@ -117,7 +117,7 @@ BLIS_EXPORT_BLIS void bli_cntl_mark_family // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS dim_t bli_cntl_calc_num_threads_in +dim_t bli_cntl_calc_num_threads_in ( rntm_t* rntm, cntl_t* cntl diff --git a/frame/base/bli_const.h b/frame/base/bli_const.h index ad088addb..1b9799482 100644 --- a/frame/base/bli_const.h +++ b/frame/base/bli_const.h @@ -32,6 +32,6 @@ */ -BLIS_EXPORT_BLIS void bli_const_init( void ); -BLIS_EXPORT_BLIS void bli_const_finalize( void ); +void bli_const_init( void ); +void bli_const_finalize( void ); diff --git a/frame/base/bli_cpuid.h b/frame/base/bli_cpuid.h index 93d72289f..da53aeb57 100644 --- a/frame/base/bli_cpuid.h +++ b/frame/base/bli_cpuid.h @@ -51,14 +51,14 @@ #ifndef BLIS_CPUID_H #define BLIS_CPUID_H -BLIS_EXPORT_BLIS arch_t bli_cpuid_query_id( void ); +arch_t bli_cpuid_query_id( void ); // Intel -BLIS_EXPORT_BLIS bool_t bli_cpuid_is_skx( uint32_t family, uint32_t model, uint32_t features ); -BLIS_EXPORT_BLIS bool_t bli_cpuid_is_knl( uint32_t family, uint32_t model, uint32_t features ); -BLIS_EXPORT_BLIS bool_t bli_cpuid_is_haswell( uint32_t family, uint32_t model, uint32_t features ); -BLIS_EXPORT_BLIS bool_t bli_cpuid_is_sandybridge( uint32_t family, uint32_t model, uint32_t features ); -BLIS_EXPORT_BLIS bool_t bli_cpuid_is_penryn( uint32_t family, uint32_t model, uint32_t features ); +bool_t bli_cpuid_is_skx( uint32_t family, uint32_t model, uint32_t features ); +bool_t bli_cpuid_is_knl( uint32_t family, uint32_t model, uint32_t features ); +bool_t bli_cpuid_is_haswell( uint32_t family, uint32_t model, uint32_t features ); +bool_t bli_cpuid_is_sandybridge( uint32_t family, uint32_t model, uint32_t features ); +bool_t bli_cpuid_is_penryn( uint32_t family, uint32_t model, uint32_t features ); // AMD BLIS_EXPORT_BLIS bool_t bli_cpuid_is_zen2( uint32_t family, uint32_t model, uint32_t features ); @@ -69,13 +69,13 @@ BLIS_EXPORT_BLIS bool_t bli_cpuid_is_piledriver( uint32_t family, uint32_t mo BLIS_EXPORT_BLIS bool_t bli_cpuid_is_bulldozer( uint32_t family, uint32_t model, uint32_t features ); // ARM -BLIS_EXPORT_BLIS bool_t bli_cpuid_is_thunderx2( uint32_t model, uint32_t part, uint32_t features ); -BLIS_EXPORT_BLIS bool_t bli_cpuid_is_cortexa57( uint32_t model, uint32_t part, uint32_t features ); -BLIS_EXPORT_BLIS bool_t bli_cpuid_is_cortexa53( uint32_t model, uint32_t part, uint32_t features ); -BLIS_EXPORT_BLIS bool_t bli_cpuid_is_cortexa15( uint32_t model, uint32_t part, uint32_t features ); -BLIS_EXPORT_BLIS bool_t bli_cpuid_is_cortexa9( uint32_t model, uint32_t part, uint32_t features ); +bool_t bli_cpuid_is_thunderx2( uint32_t model, uint32_t part, uint32_t features ); +bool_t bli_cpuid_is_cortexa57( uint32_t model, uint32_t part, uint32_t features ); +bool_t bli_cpuid_is_cortexa53( uint32_t model, uint32_t part, uint32_t features ); +bool_t bli_cpuid_is_cortexa15( uint32_t model, uint32_t part, uint32_t features ); +bool_t bli_cpuid_is_cortexa9( uint32_t model, uint32_t part, uint32_t features ); -BLIS_EXPORT_BLIS uint32_t bli_cpuid_query( uint32_t* family, uint32_t* model, uint32_t* features ); +uint32_t bli_cpuid_query( uint32_t* family, uint32_t* model, uint32_t* features ); // ----------------------------------------------------------------------------- diff --git a/frame/base/bli_error.h b/frame/base/bli_error.h index d0b8101a6..e04c6784d 100644 --- a/frame/base/bli_error.h +++ b/frame/base/bli_error.h @@ -33,13 +33,13 @@ */ -BLIS_EXPORT_BLIS void bli_print_msg( char* str, char* file, guint_t line ); -BLIS_EXPORT_BLIS void bli_abort( void ); - BLIS_EXPORT_BLIS errlev_t bli_error_checking_level( void ); BLIS_EXPORT_BLIS void bli_error_checking_level_set( errlev_t new_level ); BLIS_EXPORT_BLIS bool_t bli_error_checking_is_enabled( void ); -BLIS_EXPORT_BLIS char* bli_error_string_for_code( gint_t code ); +void bli_print_msg( char* str, char* file, guint_t line ); +void bli_abort( void ); + +char* bli_error_string_for_code( gint_t code ); diff --git a/frame/base/bli_func.h b/frame/base/bli_func.h index aa9186279..0f927ad81 100644 --- a/frame/base/bli_func.h +++ b/frame/base/bli_func.h @@ -70,7 +70,7 @@ static void bli_func_copy_dt // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS func_t* bli_func_create +func_t* bli_func_create ( void* ptr_s, void* ptr_d, @@ -78,7 +78,7 @@ BLIS_EXPORT_BLIS func_t* bli_func_create void* ptr_z ); -BLIS_EXPORT_BLIS void bli_func_init +void bli_func_init ( func_t* f, void* ptr_s, @@ -87,16 +87,16 @@ BLIS_EXPORT_BLIS void bli_func_init void* ptr_z ); -BLIS_EXPORT_BLIS void bli_func_init_null +void bli_func_init_null ( func_t* f ); -BLIS_EXPORT_BLIS void bli_func_free( func_t* f ); +void bli_func_free( func_t* f ); // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS bool_t bli_func_is_null_dt( num_t dt, +bool_t bli_func_is_null_dt( num_t dt, func_t* f ); -BLIS_EXPORT_BLIS bool_t bli_func_is_null( func_t* f ); +bool_t bli_func_is_null( func_t* f ); diff --git a/frame/base/bli_gks.h b/frame/base/bli_gks.h index 350619f31..fde4e4ec0 100644 --- a/frame/base/bli_gks.h +++ b/frame/base/bli_gks.h @@ -35,33 +35,30 @@ #ifndef BLIS_GKS_H #define BLIS_GKS_H -BLIS_EXPORT_BLIS arch_t bli_arch_query_id( void ); +void bli_gks_init( void ); +void bli_gks_finalize( void ); -// ----------------------------------------------------------------------------- +void bli_gks_init_index( void ); -BLIS_EXPORT_BLIS void bli_gks_init( void ); -BLIS_EXPORT_BLIS void bli_gks_finalize( void ); - -BLIS_EXPORT_BLIS void bli_gks_init_index( void ); - -BLIS_EXPORT_BLIS cntx_t* bli_gks_lookup_nat_cntx( arch_t id ); -BLIS_EXPORT_BLIS cntx_t* bli_gks_lookup_ind_cntx( arch_t id, ind_t ind ); -BLIS_EXPORT_BLIS void bli_gks_register_cntx( arch_t id, void* nat_fp, void* ref_fp, void* ind_fp ); +cntx_t* bli_gks_lookup_nat_cntx( arch_t id ); +cntx_t* bli_gks_lookup_ind_cntx( arch_t id, ind_t ind ); +void bli_gks_register_cntx( arch_t id, void* nat_fp, void* ref_fp, void* ind_fp ); BLIS_EXPORT_BLIS cntx_t* bli_gks_query_cntx( void ); BLIS_EXPORT_BLIS cntx_t* bli_gks_query_nat_cntx( void ); -BLIS_EXPORT_BLIS cntx_t* bli_gks_query_cntx_noinit( void ); -BLIS_EXPORT_BLIS cntx_t* bli_gks_query_ind_cntx( ind_t ind, num_t dt ); + +cntx_t* bli_gks_query_cntx_noinit( void ); + +cntx_t* bli_gks_query_ind_cntx( ind_t ind, num_t dt ); BLIS_EXPORT_BLIS void bli_gks_init_ref_cntx( cntx_t* cntx ); -BLIS_EXPORT_BLIS bool_t bli_gks_cntx_l3_nat_ukr_is_ref( num_t dt, l3ukr_t ukr_id, cntx_t* cntx ); +bool_t bli_gks_cntx_l3_nat_ukr_is_ref( num_t dt, l3ukr_t ukr_id, cntx_t* cntx ); BLIS_EXPORT_BLIS char* bli_gks_l3_ukr_impl_string( l3ukr_t ukr, ind_t method, num_t dt ); BLIS_EXPORT_BLIS kimpl_t bli_gks_l3_ukr_impl_type( l3ukr_t ukr, ind_t method, num_t dt ); //char* bli_gks_l3_ukr_avail_impl_string( l3ukr_t ukr, num_t dt ); - #endif diff --git a/frame/base/bli_init.h b/frame/base/bli_init.h index 9f45e2b03..f174ac0f9 100644 --- a/frame/base/bli_init.h +++ b/frame/base/bli_init.h @@ -32,15 +32,15 @@ */ -BLIS_EXPORT_BLIS void bli_init( void ); -BLIS_EXPORT_BLIS void bli_finalize( void ); +BLIS_EXPORT_BLIS void bli_init( void ); +BLIS_EXPORT_BLIS void bli_finalize( void ); -BLIS_EXPORT_BLIS void bli_init_auto( void ); -BLIS_EXPORT_BLIS void bli_finalize_auto( void ); +void bli_init_auto( void ); +void bli_finalize_auto( void ); -BLIS_EXPORT_BLIS void bli_init_apis( void ); -BLIS_EXPORT_BLIS void bli_finalize_apis( void ); +void bli_init_apis( void ); +void bli_finalize_apis( void ); -BLIS_EXPORT_BLIS void bli_init_once( void ); -BLIS_EXPORT_BLIS void bli_finalize_once( void ); +void bli_init_once( void ); +void bli_finalize_once( void ); diff --git a/frame/base/bli_machval.h b/frame/base/bli_machval.h index 034af7505..25177a250 100644 --- a/frame/base/bli_machval.h +++ b/frame/base/bli_machval.h @@ -39,8 +39,7 @@ // // Prototype object-based interface. // -BLIS_EXPORT_BLIS void bli_machval( machval_t mval, - obj_t* v ); +BLIS_EXPORT_BLIS void bli_machval( machval_t mval, obj_t* v ); // diff --git a/frame/base/bli_malloc.h b/frame/base/bli_malloc.h index 545e4e2e7..2659a81fa 100644 --- a/frame/base/bli_malloc.h +++ b/frame/base/bli_malloc.h @@ -44,21 +44,21 @@ BLIS_EXPORT_BLIS void* bli_malloc_pool( size_t size ); BLIS_EXPORT_BLIS void bli_free_pool( void* p ); #endif -BLIS_EXPORT_BLIS void* bli_malloc_intl( size_t size ); -BLIS_EXPORT_BLIS void* bli_calloc_intl( size_t size ); -BLIS_EXPORT_BLIS void bli_free_intl( void* p ); +void* bli_malloc_intl( size_t size ); +void* bli_calloc_intl( size_t size ); +void bli_free_intl( void* p ); BLIS_EXPORT_BLIS void* bli_malloc_user( size_t size ); BLIS_EXPORT_BLIS void bli_free_user( void* p ); // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void* bli_fmalloc_align( malloc_ft f, size_t size, size_t align_size ); -BLIS_EXPORT_BLIS void bli_ffree_align( free_ft f, void* p ); +void* bli_fmalloc_align( malloc_ft f, size_t size, size_t align_size ); +void bli_ffree_align( free_ft f, void* p ); -BLIS_EXPORT_BLIS void* bli_fmalloc_noalign( malloc_ft f, size_t size ); -BLIS_EXPORT_BLIS void bli_ffree_noalign( free_ft f, void* p ); +void* bli_fmalloc_noalign( malloc_ft f, size_t size ); +void bli_ffree_noalign( free_ft f, void* p ); -BLIS_EXPORT_BLIS void bli_fmalloc_align_check( malloc_ft f, size_t size, size_t align_size ); -BLIS_EXPORT_BLIS void bli_fmalloc_post_check( void* p ); +void bli_fmalloc_align_check( malloc_ft f, size_t size, size_t align_size ); +void bli_fmalloc_post_check( void* p ); diff --git a/frame/base/bli_mbool.h b/frame/base/bli_mbool.h index 01d782549..4cd4a78fb 100644 --- a/frame/base/bli_mbool.h +++ b/frame/base/bli_mbool.h @@ -50,7 +50,7 @@ static void bli_mbool_set_dt( bool_t val, num_t dt, mbool_t* mb ) // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS mbool_t* bli_mbool_create +mbool_t* bli_mbool_create ( bool_t b_s, bool_t b_d, @@ -58,7 +58,7 @@ BLIS_EXPORT_BLIS mbool_t* bli_mbool_create bool_t b_z ); -BLIS_EXPORT_BLIS void bli_mbool_init +void bli_mbool_init ( mbool_t* b, bool_t b_s, @@ -67,5 +67,5 @@ BLIS_EXPORT_BLIS void bli_mbool_init bool_t b_z ); -BLIS_EXPORT_BLIS void bli_mbool_free( mbool_t* b ); +void bli_mbool_free( mbool_t* b ); diff --git a/frame/base/bli_membrk.h b/frame/base/bli_membrk.h index 79ca4f4ac..acc026081 100644 --- a/frame/base/bli_membrk.h +++ b/frame/base/bli_membrk.h @@ -102,18 +102,18 @@ static void bli_membrk_unlock( membrk_t* membrk ) // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS membrk_t* bli_membrk_query( void ); +membrk_t* bli_membrk_query( void ); -BLIS_EXPORT_BLIS void bli_membrk_init +void bli_membrk_init ( cntx_t* cntx ); -BLIS_EXPORT_BLIS void bli_membrk_finalize +void bli_membrk_finalize ( void ); -BLIS_EXPORT_BLIS void bli_membrk_acquire_m +void bli_membrk_acquire_m ( rntm_t* rntm, siz_t req_size, @@ -121,18 +121,18 @@ BLIS_EXPORT_BLIS void bli_membrk_acquire_m mem_t* mem ); -BLIS_EXPORT_BLIS void bli_membrk_release +void bli_membrk_release ( rntm_t* rntm, mem_t* mem ); -BLIS_EXPORT_BLIS void bli_membrk_rntm_set_membrk +void bli_membrk_rntm_set_membrk ( rntm_t* rntm ); -BLIS_EXPORT_BLIS siz_t bli_membrk_pool_size +siz_t bli_membrk_pool_size ( membrk_t* membrk, packbuf_t buf_type @@ -140,24 +140,24 @@ BLIS_EXPORT_BLIS siz_t bli_membrk_pool_size // ---------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_membrk_init_pools +void bli_membrk_init_pools ( cntx_t* cntx, membrk_t* membrk ); -BLIS_EXPORT_BLIS void bli_membrk_finalize_pools +void bli_membrk_finalize_pools ( membrk_t* membrk ); -BLIS_EXPORT_BLIS void bli_membrk_compute_pool_block_sizes +void bli_membrk_compute_pool_block_sizes ( siz_t* bs_a, siz_t* bs_b, siz_t* bs_c, cntx_t* cntx ); -BLIS_EXPORT_BLIS void bli_membrk_compute_pool_block_sizes_dt +void bli_membrk_compute_pool_block_sizes_dt ( num_t dt, siz_t* bs_a, diff --git a/frame/base/bli_memsys.h b/frame/base/bli_memsys.h index 784d16d62..be0d48e35 100644 --- a/frame/base/bli_memsys.h +++ b/frame/base/bli_memsys.h @@ -39,8 +39,8 @@ // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_memsys_init( void ); -BLIS_EXPORT_BLIS void bli_memsys_finalize( void ); +void bli_memsys_init( void ); +void bli_memsys_finalize( void ); #endif diff --git a/frame/base/bli_obj.h b/frame/base/bli_obj.h index 965f33f1a..4436d2cd8 100644 --- a/frame/base/bli_obj.h +++ b/frame/base/bli_obj.h @@ -104,7 +104,7 @@ BLIS_EXPORT_BLIS void bli_obj_free obj_t* obj ); -BLIS_EXPORT_BLIS void bli_adjust_strides +void bli_adjust_strides ( dim_t m, dim_t n, diff --git a/frame/base/bli_part.h b/frame/base/bli_part.h index e2ddccc34..5e56a9fec 100644 --- a/frame/base/bli_part.h +++ b/frame/base/bli_part.h @@ -89,7 +89,7 @@ GENPROT( acquire_mpart_mndim ) #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0( opname ) \ +BLIS_EXPORT_BLIS void PASTEMAC0( opname ) \ ( \ subpart_t req_part, \ dim_t i, \ diff --git a/frame/base/bli_pool.h b/frame/base/bli_pool.h index 8802a101b..69d990edd 100644 --- a/frame/base/bli_pool.h +++ b/frame/base/bli_pool.h @@ -191,7 +191,7 @@ static void bli_pool_set_top_index( siz_t top_index, pool_t* pool ) \ // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_pool_init +void bli_pool_init ( siz_t num_blocks, siz_t block_ptrs_len, @@ -201,11 +201,11 @@ BLIS_EXPORT_BLIS void bli_pool_init free_ft free_fp, pool_t* restrict pool ); -BLIS_EXPORT_BLIS void bli_pool_finalize +void bli_pool_finalize ( pool_t* restrict pool ); -BLIS_EXPORT_BLIS void bli_pool_reinit +void bli_pool_reinit ( siz_t num_blocks_new, siz_t block_ptrs_len_new, @@ -214,47 +214,47 @@ BLIS_EXPORT_BLIS void bli_pool_reinit pool_t* restrict pool ); -BLIS_EXPORT_BLIS void bli_pool_checkout_block +void bli_pool_checkout_block ( siz_t req_size, pblk_t* restrict block, pool_t* restrict pool ); -BLIS_EXPORT_BLIS void bli_pool_checkin_block +void bli_pool_checkin_block ( pblk_t* restrict block, pool_t* restrict pool ); -BLIS_EXPORT_BLIS void bli_pool_grow +void bli_pool_grow ( siz_t num_blocks_add, pool_t* restrict pool ); -BLIS_EXPORT_BLIS void bli_pool_shrink +void bli_pool_shrink ( siz_t num_blocks_sub, pool_t* restrict pool ); -BLIS_EXPORT_BLIS void bli_pool_alloc_block +void bli_pool_alloc_block ( siz_t block_size, siz_t align_size, malloc_ft malloc_fp, pblk_t* restrict block ); -BLIS_EXPORT_BLIS void bli_pool_free_block +void bli_pool_free_block ( free_ft free_fp, pblk_t* restrict block ); -BLIS_EXPORT_BLIS void bli_pool_print +void bli_pool_print ( pool_t* restrict pool ); -BLIS_EXPORT_BLIS void bli_pblk_print +void bli_pblk_print ( pblk_t* restrict pblk ); diff --git a/frame/base/bli_prune.h b/frame/base/bli_prune.h index 1fdb6b5ae..318096707 100644 --- a/frame/base/bli_prune.h +++ b/frame/base/bli_prune.h @@ -32,5 +32,5 @@ */ -BLIS_EXPORT_BLIS void bli_prune_unref_mparts( obj_t* p, mdim_t mdim_p, +void bli_prune_unref_mparts( obj_t* p, mdim_t mdim_p, obj_t* s, mdim_t mdim_s ); diff --git a/frame/base/bli_query.h b/frame/base/bli_query.h index fa4045b50..2bb5b3f6b 100644 --- a/frame/base/bli_query.h +++ b/frame/base/bli_query.h @@ -32,10 +32,8 @@ */ -BLIS_EXPORT_BLIS bool_t bli_obj_equals( obj_t* a, - obj_t* b ); +BLIS_EXPORT_BLIS bool_t bli_obj_equals( obj_t* a, obj_t* b ); -BLIS_EXPORT_BLIS bool_t bli_obj_imag_equals( obj_t* a, - obj_t* b ); +BLIS_EXPORT_BLIS bool_t bli_obj_imag_equals( obj_t* a, obj_t* b ); BLIS_EXPORT_BLIS bool_t bli_obj_imag_is_zero( obj_t* a ); diff --git a/frame/base/bli_rntm.h b/frame/base/bli_rntm.h index 8cf72aa5e..4e8e74af8 100644 --- a/frame/base/bli_rntm.h +++ b/frame/base/bli_rntm.h @@ -239,7 +239,7 @@ static void bli_rntm_init( rntm_t* rntm ) // Function prototypes -BLIS_EXPORT_BLIS void bli_rntm_set_ways_for_op +void bli_rntm_set_ways_for_op ( opid_t l3_op, side_t side, @@ -249,7 +249,7 @@ BLIS_EXPORT_BLIS void bli_rntm_set_ways_for_op rntm_t* rntm ); -BLIS_EXPORT_BLIS void bli_rntm_set_ways_from_rntm +void bli_rntm_set_ways_from_rntm ( dim_t m, dim_t n, @@ -257,7 +257,7 @@ BLIS_EXPORT_BLIS void bli_rntm_set_ways_from_rntm rntm_t* rntm ); -BLIS_EXPORT_BLIS void bli_rntm_print +void bli_rntm_print ( rntm_t* rntm ); diff --git a/frame/base/bli_sba.h b/frame/base/bli_sba.h index b3e6b921e..f5e36d759 100644 --- a/frame/base/bli_sba.h +++ b/frame/base/bli_sba.h @@ -35,36 +35,36 @@ #ifndef BLIS_SBA_H #define BLIS_SBA_H -BLIS_EXPORT_BLIS apool_t* bli_sba_query( void ); +apool_t* bli_sba_query( void ); // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_sba_init( void ); -BLIS_EXPORT_BLIS void bli_sba_finalize( void ); +void bli_sba_init( void ); +void bli_sba_finalize( void ); -BLIS_EXPORT_BLIS array_t* bli_sba_checkout_array +array_t* bli_sba_checkout_array ( const siz_t n_threads ); -BLIS_EXPORT_BLIS void bli_sba_checkin_array +void bli_sba_checkin_array ( array_t* restrict array ); -BLIS_EXPORT_BLIS void bli_sba_rntm_set_pool +void bli_sba_rntm_set_pool ( siz_t index, array_t* restrict array, rntm_t* restrict rntm ); -BLIS_EXPORT_BLIS void* bli_sba_acquire +void* bli_sba_acquire ( rntm_t* restrict rntm, siz_t req_size ); -BLIS_EXPORT_BLIS void bli_sba_release +void bli_sba_release ( rntm_t* restrict rntm, void* restrict block diff --git a/frame/base/bli_string.h b/frame/base/bli_string.h index 54cf3c7f6..426038051 100644 --- a/frame/base/bli_string.h +++ b/frame/base/bli_string.h @@ -32,4 +32,4 @@ */ -BLIS_EXPORT_BLIS void bli_string_mkupper( char* s ); +void bli_string_mkupper( char* s ); diff --git a/frame/base/bli_winsys.h b/frame/base/bli_winsys.h index 0c71114ad..0ad7c408c 100644 --- a/frame/base/bli_winsys.h +++ b/frame/base/bli_winsys.h @@ -33,5 +33,5 @@ */ //int bli_setenv( const char *name, const char *value, int overwrite ); -BLIS_EXPORT_BLIS void bli_sleep( unsigned int secs ); +void bli_sleep( unsigned int secs ); diff --git a/frame/base/cast/bli_castm.h b/frame/base/cast/bli_castm.h index ecc5d4655..e9e1dee21 100644 --- a/frame/base/cast/bli_castm.h +++ b/frame/base/cast/bli_castm.h @@ -65,7 +65,7 @@ INSERT_GENTPROT2_MIXDP0( castm ) // Prototype object-based _check() function. // -BLIS_EXPORT_BLIS void bli_castm_check +void bli_castm_check ( obj_t* a, obj_t* b diff --git a/frame/base/cast/bli_castnzm.h b/frame/base/cast/bli_castnzm.h index bfc062485..42cfef8c0 100644 --- a/frame/base/cast/bli_castnzm.h +++ b/frame/base/cast/bli_castnzm.h @@ -65,7 +65,7 @@ INSERT_GENTPROT2_MIXDP0( castnzm ) // Prototype object-based _check() function. // -BLIS_EXPORT_BLIS void bli_castnzm_check +void bli_castnzm_check ( obj_t* a, obj_t* b diff --git a/frame/base/cast/bli_castv.h b/frame/base/cast/bli_castv.h index 712b83ee9..9a8261514 100644 --- a/frame/base/cast/bli_castv.h +++ b/frame/base/cast/bli_castv.h @@ -64,7 +64,7 @@ INSERT_GENTPROT2_MIXDP0( castv ) // Prototype object-based _check() function. // -BLIS_EXPORT_BLIS void bli_castv_check +void bli_castv_check ( obj_t* x, obj_t* y diff --git a/frame/base/cast/old/bli_cast_check.h b/frame/base/cast/old/bli_cast_check.h index 7b805cfce..e963c4cfc 100644 --- a/frame/base/cast/old/bli_cast_check.h +++ b/frame/base/cast/old/bli_cast_check.h @@ -32,13 +32,13 @@ */ -BLIS_EXPORT_BLIS void bli_castm_check +void bli_castm_check ( obj_t* a, obj_t* b ); -BLIS_EXPORT_BLIS void bli_castv_check +void bli_castv_check ( obj_t* x, obj_t* y diff --git a/frame/base/check/bli_obj_check.h b/frame/base/check/bli_obj_check.h index 48baa4a0e..201842844 100644 --- a/frame/base/check/bli_obj_check.h +++ b/frame/base/check/bli_obj_check.h @@ -32,43 +32,43 @@ */ -BLIS_EXPORT_BLIS void bli_obj_create_check( num_t dt, +void bli_obj_create_check( num_t dt, dim_t m, dim_t n, inc_t rs, inc_t cs, obj_t* obj ); -BLIS_EXPORT_BLIS void bli_obj_create_without_buffer_check( num_t dt, +void bli_obj_create_without_buffer_check( num_t dt, dim_t m, dim_t n, obj_t* obj ); -BLIS_EXPORT_BLIS void bli_obj_alloc_buffer_check( inc_t rs, +void bli_obj_alloc_buffer_check( inc_t rs, inc_t cs, inc_t is, obj_t* obj ); -BLIS_EXPORT_BLIS void bli_obj_attach_buffer_check( void* p, +void bli_obj_attach_buffer_check( void* p, inc_t rs, inc_t cs, inc_t is, obj_t* obj ); -BLIS_EXPORT_BLIS void bli_obj_create_scalar_check( num_t dt, +void bli_obj_create_scalar_check( num_t dt, obj_t* obj ); -BLIS_EXPORT_BLIS void bli_obj_free_check( obj_t* obj ); +void bli_obj_free_check( obj_t* obj ); -BLIS_EXPORT_BLIS void bli_obj_create_const_check( double value, obj_t* obj ); +void bli_obj_create_const_check( double value, obj_t* obj ); -BLIS_EXPORT_BLIS void bli_obj_create_const_copy_of_check( obj_t* a, obj_t* b ); +void bli_obj_create_const_copy_of_check( obj_t* a, obj_t* b ); -BLIS_EXPORT_BLIS void bli_dt_size_check( num_t dt ); +void bli_dt_size_check( num_t dt ); -BLIS_EXPORT_BLIS void bli_dt_string_check( num_t dt ); +void bli_dt_string_check( num_t dt ); -BLIS_EXPORT_BLIS void bli_dt_union_check( num_t dt1, num_t dt2 ); +void bli_dt_union_check( num_t dt1, num_t dt2 ); -BLIS_EXPORT_BLIS void bli_obj_print_check( char* label, obj_t* obj ); +void bli_obj_print_check( char* label, obj_t* obj ); diff --git a/frame/base/check/bli_part_check.h b/frame/base/check/bli_part_check.h index b0e724db1..2905af0e4 100644 --- a/frame/base/check/bli_part_check.h +++ b/frame/base/check/bli_part_check.h @@ -32,19 +32,19 @@ */ -BLIS_EXPORT_BLIS void bli_acquire_mpart_t2b_check( subpart_t requested_part, +void bli_acquire_mpart_t2b_check( subpart_t requested_part, dim_t i, dim_t b, obj_t* obj, obj_t* sub_obj ); -BLIS_EXPORT_BLIS void bli_acquire_mpart_l2r_check( subpart_t requested_part, +void bli_acquire_mpart_l2r_check( subpart_t requested_part, dim_t j, dim_t b, obj_t* obj, obj_t* sub_obj ); -BLIS_EXPORT_BLIS void bli_acquire_mpart_tl2br_check( subpart_t requested_part, +void bli_acquire_mpart_tl2br_check( subpart_t requested_part, dim_t ij, dim_t b, obj_t* obj, diff --git a/frame/base/noopt/bli_dlamch.h b/frame/base/noopt/bli_dlamch.h index e23883c7e..a3fcdb1b3 100644 --- a/frame/base/noopt/bli_dlamch.h +++ b/frame/base/noopt/bli_dlamch.h @@ -32,4 +32,4 @@ */ -BLIS_EXPORT_BLIS bla_double bli_dlamch( bla_character* cmach, ftnlen cmach_len ); +bla_double bli_dlamch( bla_character* cmach, ftnlen cmach_len ); diff --git a/frame/base/noopt/bli_lsame.h b/frame/base/noopt/bli_lsame.h index 9f85f3c51..8968ab8b0 100644 --- a/frame/base/noopt/bli_lsame.h +++ b/frame/base/noopt/bli_lsame.h @@ -32,4 +32,4 @@ */ -BLIS_EXPORT_BLIS bla_logical bli_lsame( bla_character* ca, bla_character* cb, ftnlen ca_len, ftnlen cb_len ); +bla_logical bli_lsame( bla_character* ca, bla_character* cb, ftnlen ca_len, ftnlen cb_len ); diff --git a/frame/base/noopt/bli_slamch.h b/frame/base/noopt/bli_slamch.h index eee97d453..0e041c8d8 100644 --- a/frame/base/noopt/bli_slamch.h +++ b/frame/base/noopt/bli_slamch.h @@ -32,4 +32,4 @@ */ -BLIS_EXPORT_BLIS bla_real bli_slamch( bla_character* cmach, ftnlen cmach_len ); +bla_real bli_slamch( bla_character* cmach, ftnlen cmach_len ); diff --git a/frame/base/proj/bli_projm.h b/frame/base/proj/bli_projm.h index e93f0cab8..e95f7f2f5 100644 --- a/frame/base/proj/bli_projm.h +++ b/frame/base/proj/bli_projm.h @@ -38,7 +38,7 @@ BLIS_EXPORT_BLIS void bli_projm obj_t* b ); -BLIS_EXPORT_BLIS void bli_projm_check +void bli_projm_check ( obj_t* a, obj_t* b diff --git a/frame/base/proj/bli_projv.h b/frame/base/proj/bli_projv.h index 2c53076a5..b738b2f97 100644 --- a/frame/base/proj/bli_projv.h +++ b/frame/base/proj/bli_projv.h @@ -38,7 +38,7 @@ BLIS_EXPORT_BLIS void bli_projv obj_t* y ); -BLIS_EXPORT_BLIS void bli_projv_check +void bli_projv_check ( obj_t* x, obj_t* y diff --git a/frame/base/proj/old/bli_proj_check.h b/frame/base/proj/old/bli_proj_check.h index 6d6823bd0..b32fb6d62 100644 --- a/frame/base/proj/old/bli_proj_check.h +++ b/frame/base/proj/old/bli_proj_check.h @@ -32,13 +32,13 @@ */ -BLIS_EXPORT_BLIS void bli_projm_check +void bli_projm_check ( obj_t* a, obj_t* b ); -BLIS_EXPORT_BLIS void bli_projv_check +void bli_projv_check ( obj_t* x, obj_t* y diff --git a/frame/include/bli_arch_config_pre.h b/frame/include/bli_arch_config_pre.h index 2fa61b0d0..1ab0561d8 100644 --- a/frame/include/bli_arch_config_pre.h +++ b/frame/include/bli_arch_config_pre.h @@ -58,15 +58,15 @@ // Prototype-generating macro for bli_cntx_init_*() functions. #define CNTX_INIT_PROTS( archname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(cntx_init_,archname) \ +void PASTEMAC(cntx_init_,archname) \ ( \ cntx_t* cntx \ ); \ -BLIS_EXPORT_BLIS void PASTEMAC2(cntx_init_,archname,BLIS_REF_SUFFIX) \ +void PASTEMAC2(cntx_init_,archname,BLIS_REF_SUFFIX) \ ( \ cntx_t* cntx \ ); \ -BLIS_EXPORT_BLIS void PASTEMAC2(cntx_init_,archname,BLIS_IND_SUFFIX) \ +void PASTEMAC2(cntx_init_,archname,BLIS_IND_SUFFIX) \ ( \ ind_t method, \ num_t dt, \ diff --git a/frame/ind/bli_ind.h b/frame/ind/bli_ind.h index f3a8ea690..e0f1e9608 100644 --- a/frame/ind/bli_ind.h +++ b/frame/ind/bli_ind.h @@ -48,8 +48,8 @@ #include "bli_cntx_ind_stage.h" -BLIS_EXPORT_BLIS void bli_ind_init( void ); -BLIS_EXPORT_BLIS void bli_ind_finalize( void ); +void bli_ind_init( void ); +void bli_ind_finalize( void ); BLIS_EXPORT_BLIS void bli_ind_enable( ind_t method ); BLIS_EXPORT_BLIS void bli_ind_disable( ind_t method ); @@ -63,12 +63,12 @@ BLIS_EXPORT_BLIS void bli_ind_oper_enable_only( opid_t oper, ind_t method, num BLIS_EXPORT_BLIS bool_t bli_ind_oper_is_impl( opid_t oper, ind_t method ); //bool_t bli_ind_oper_has_avail( opid_t oper, num_t dt ); -BLIS_EXPORT_BLIS void* bli_ind_oper_get_avail( opid_t oper, num_t dt ); -BLIS_EXPORT_BLIS ind_t bli_ind_oper_find_avail( opid_t oper, num_t dt ); -BLIS_EXPORT_BLIS char* bli_ind_oper_get_avail_impl_string( opid_t oper, num_t dt ); +BLIS_EXPORT_BLIS void* bli_ind_oper_get_avail( opid_t oper, num_t dt ); +BLIS_EXPORT_BLIS ind_t bli_ind_oper_find_avail( opid_t oper, num_t dt ); +BLIS_EXPORT_BLIS char* bli_ind_oper_get_avail_impl_string( opid_t oper, num_t dt ); -BLIS_EXPORT_BLIS char* bli_ind_get_impl_string( ind_t method ); -BLIS_EXPORT_BLIS num_t bli_ind_map_cdt_to_index( num_t dt ); +char* bli_ind_get_impl_string( ind_t method ); +num_t bli_ind_map_cdt_to_index( num_t dt ); #endif diff --git a/frame/ind/bli_l3_ind.h b/frame/ind/bli_l3_ind.h index 454eb6240..693d3a4c2 100644 --- a/frame/ind/bli_l3_ind.h +++ b/frame/ind/bli_l3_ind.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void* PASTEMAC(opname,ind_get_avail)( num_t dt ); +void* PASTEMAC(opname,ind_get_avail)( num_t dt ); /*bool_t PASTEMAC(opname,ind_has_avail)( num_t dt ); */ GENPROT( gemm ) @@ -58,17 +58,17 @@ GENPROT( trsm ) //bool_t bli_l3_ind_oper_is_avail( opid_t oper, ind_t method, num_t dt ); -BLIS_EXPORT_BLIS ind_t bli_l3_ind_oper_find_avail( opid_t oper, num_t dt ); +ind_t bli_l3_ind_oper_find_avail( opid_t oper, num_t dt ); -BLIS_EXPORT_BLIS void bli_l3_ind_set_enable_dt( ind_t method, num_t dt, bool_t status ); +void bli_l3_ind_set_enable_dt( ind_t method, num_t dt, bool_t status ); -BLIS_EXPORT_BLIS void bli_l3_ind_oper_enable_only( opid_t oper, ind_t method, num_t dt ); -BLIS_EXPORT_BLIS void bli_l3_ind_oper_set_enable_all( opid_t oper, num_t dt, bool_t status ); +void bli_l3_ind_oper_enable_only( opid_t oper, ind_t method, num_t dt ); +void bli_l3_ind_oper_set_enable_all( opid_t oper, num_t dt, bool_t status ); -BLIS_EXPORT_BLIS void bli_l3_ind_oper_set_enable( opid_t oper, ind_t method, num_t dt, bool_t status ); -BLIS_EXPORT_BLIS bool_t bli_l3_ind_oper_get_enable( opid_t oper, ind_t method, num_t dt ); +void bli_l3_ind_oper_set_enable( opid_t oper, ind_t method, num_t dt, bool_t status ); +bool_t bli_l3_ind_oper_get_enable( opid_t oper, ind_t method, num_t dt ); -BLIS_EXPORT_BLIS void* bli_l3_ind_oper_get_func( opid_t oper, ind_t method ); +void* bli_l3_ind_oper_get_func( opid_t oper, ind_t method ); #endif diff --git a/frame/ind/cntx/bli_cntx_ind_stage.h b/frame/ind/cntx/bli_cntx_ind_stage.h index d469319c3..124421665 100644 --- a/frame/ind/cntx/bli_cntx_ind_stage.h +++ b/frame/ind/cntx/bli_cntx_ind_stage.h @@ -32,13 +32,13 @@ */ -BLIS_EXPORT_BLIS void bli_cntx_ind_stage( ind_t method, dim_t stage, cntx_t* cntx ); +void bli_cntx_ind_stage( ind_t method, dim_t stage, cntx_t* cntx ); -BLIS_EXPORT_BLIS void bli_cntx_3mh_stage( dim_t stage, cntx_t* cntx ); -BLIS_EXPORT_BLIS void bli_cntx_3m1_stage( dim_t stage, cntx_t* cntx ); -BLIS_EXPORT_BLIS void bli_cntx_4mh_stage( dim_t stage, cntx_t* cntx ); -BLIS_EXPORT_BLIS void bli_cntx_4mb_stage( dim_t stage, cntx_t* cntx ); -BLIS_EXPORT_BLIS void bli_cntx_4m1_stage( dim_t stage, cntx_t* cntx ); -BLIS_EXPORT_BLIS void bli_cntx_1m_stage( dim_t stage, cntx_t* cntx ); -BLIS_EXPORT_BLIS void bli_cntx_nat_stage( dim_t stage, cntx_t* cntx ); +void bli_cntx_3mh_stage( dim_t stage, cntx_t* cntx ); +void bli_cntx_3m1_stage( dim_t stage, cntx_t* cntx ); +void bli_cntx_4mh_stage( dim_t stage, cntx_t* cntx ); +void bli_cntx_4mb_stage( dim_t stage, cntx_t* cntx ); +void bli_cntx_4m1_stage( dim_t stage, cntx_t* cntx ); +void bli_cntx_1m_stage( dim_t stage, cntx_t* cntx ); +void bli_cntx_nat_stage( dim_t stage, cntx_t* cntx ); diff --git a/frame/ind/tapi/bli_l3_ind_tapi.h b/frame/ind/tapi/bli_l3_ind_tapi.h index 7c693cea0..49ff6a873 100644 --- a/frame/ind/tapi/bli_l3_ind_tapi.h +++ b/frame/ind/tapi/bli_l3_ind_tapi.h @@ -36,7 +36,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ trans_t transa, \ trans_t transb, \ @@ -63,7 +63,7 @@ INSERT_GENTPROT_BASIC0( gemm1m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ @@ -90,7 +90,7 @@ INSERT_GENTPROT_BASIC0( hemm1m ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -116,7 +116,7 @@ INSERT_GENTPROTR_BASIC0( her2k1m ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -140,7 +140,7 @@ INSERT_GENTPROTR_BASIC0( herk1m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ @@ -167,7 +167,7 @@ INSERT_GENTPROT_BASIC0( symm1m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -193,7 +193,7 @@ INSERT_GENTPROT_BASIC0( syr2k1m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ uplo_t uploc, \ trans_t transa, \ @@ -217,7 +217,7 @@ INSERT_GENTPROT_BASIC0( syrk1m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ @@ -245,7 +245,7 @@ INSERT_GENTPROT_BASIC0( trmm31m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ @@ -268,7 +268,7 @@ INSERT_GENTPROT_BASIC0( trmm1m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ side_t side, \ uplo_t uploa, \ diff --git a/frame/ind/ukernels/bli_l3_ind_ukr.h b/frame/ind/ukernels/bli_l3_ind_ukr.h index 1b9e7bebc..53cb0b6f8 100644 --- a/frame/ind/ukernels/bli_l3_ind_ukr.h +++ b/frame/ind/ukernels/bli_l3_ind_ukr.h @@ -41,7 +41,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ dim_t k, \ ctype* restrict alpha, \ @@ -64,7 +64,7 @@ INSERT_GENTPROT_BASIC0( gemm1m_ukr_name ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ dim_t k, \ ctype* restrict alpha, \ @@ -88,7 +88,7 @@ INSERT_GENTPROT_BASIC0( gemmtrsm1m_u_ukr_name ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,opname) \ +void PASTEMAC(ch,opname) \ ( \ ctype* restrict a, \ ctype* restrict b, \ diff --git a/frame/thread/bli_pthread.h b/frame/thread/bli_pthread.h index 7fb47ff8c..56ede89b5 100644 --- a/frame/thread/bli_pthread.h +++ b/frame/thread/bli_pthread.h @@ -41,39 +41,82 @@ // This branch defines a pthread-like API, bli_pthread_*(), and implements it // in terms of Windows API calls. +// -- pthread_mutex_*() -- + typedef SRWLOCK bli_pthread_mutex_t; typedef void bli_pthread_mutexattr_t; #define BLIS_PTHREAD_MUTEX_INITIALIZER SRWLOCK_INIT -BLIS_EXPORT_BLIS int bli_pthread_mutex_init( bli_pthread_mutex_t* mutex, const bli_pthread_mutexattr_t *attr ); +BLIS_EXPORT_BLIS int bli_pthread_mutex_init + ( + bli_pthread_mutex_t* mutex, + const bli_pthread_mutexattr_t* attr + ); -BLIS_EXPORT_BLIS int bli_pthread_mutex_destroy( bli_pthread_mutex_t* mutex ); +BLIS_EXPORT_BLIS int bli_pthread_mutex_destroy + ( + bli_pthread_mutex_t* mutex + ); -BLIS_EXPORT_BLIS int bli_pthread_mutex_lock( bli_pthread_mutex_t* mutex ); +BLIS_EXPORT_BLIS int bli_pthread_mutex_lock + ( + bli_pthread_mutex_t* mutex + ); -BLIS_EXPORT_BLIS int bli_pthread_mutex_trylock( bli_pthread_mutex_t* mutex ); +BLIS_EXPORT_BLIS int bli_pthread_mutex_trylock + ( + bli_pthread_mutex_t* mutex + ); -BLIS_EXPORT_BLIS int bli_pthread_mutex_unlock( bli_pthread_mutex_t* mutex ); +BLIS_EXPORT_BLIS int bli_pthread_mutex_unlock + ( + bli_pthread_mutex_t* mutex + ); + +// -- pthread_once_*() -- typedef INIT_ONCE bli_pthread_once_t; #define BLIS_PTHREAD_ONCE_INIT INIT_ONCE_STATIC_INIT -BLIS_EXPORT_BLIS void bli_pthread_once( bli_pthread_once_t* once, void (*init)( void ) ); +BLIS_EXPORT_BLIS void bli_pthread_once + ( + bli_pthread_once_t* once, + void (*init)(void) + ); + +// -- pthread_cond_*() -- typedef CONDITION_VARIABLE bli_pthread_cond_t; typedef void bli_pthread_condattr_t; #define BLIS_PTHREAD_COND_INITIALIZER CONDITION_VARIABLE_INIT -BLIS_EXPORT_BLIS int bli_pthread_cond_init( bli_pthread_cond_t* cond, const bli_pthread_condattr_t* attr ); +BLIS_EXPORT_BLIS int bli_pthread_cond_init + ( + bli_pthread_cond_t* cond, + const bli_pthread_condattr_t* attr + ); -BLIS_EXPORT_BLIS int bli_pthread_cond_destroy( bli_pthread_cond_t* cond ); +BLIS_EXPORT_BLIS int bli_pthread_cond_destroy + ( + bli_pthread_cond_t* cond + ); -BLIS_EXPORT_BLIS int bli_pthread_cond_wait( bli_pthread_cond_t* cond, bli_pthread_mutex_t* mutex ); +BLIS_EXPORT_BLIS int bli_pthread_cond_wait + ( + bli_pthread_cond_t* cond, + bli_pthread_mutex_t* mutex + ); + +BLIS_EXPORT_BLIS int bli_pthread_cond_broadcast + ( + bli_pthread_cond_t* cond + ); + +// -- pthread_create(), pthread_join() -- -BLIS_EXPORT_BLIS int bli_pthread_cond_broadcast( bli_pthread_cond_t* cond ); typedef struct { HANDLE handle; @@ -82,11 +125,21 @@ typedef struct typedef void bli_pthread_attr_t; -BLIS_EXPORT_BLIS int bli_pthread_create( bli_pthread_t *thread, const bli_pthread_attr_t *attr, void* (*start_routine)( void* ), void *arg ); +BLIS_EXPORT_BLIS int bli_pthread_create + ( + bli_pthread_t* thread, + const bli_pthread_attr_t* attr, + void* (*start_routine)(void*), + void* arg + ); -BLIS_EXPORT_BLIS int bli_pthread_join( bli_pthread_t thread, void **retval ); +BLIS_EXPORT_BLIS int bli_pthread_join + ( + bli_pthread_t thread, + void** retval + ); -// barrier-related definitions +// -- pthread_barrier_*() -- typedef void bli_pthread_barrierattr_t; @@ -98,11 +151,22 @@ typedef struct int tripCount; } bli_pthread_barrier_t; -BLIS_EXPORT_BLIS int bli_pthread_barrier_init( bli_pthread_barrier_t *barrier, const bli_pthread_barrierattr_t *attr, unsigned int count ); +BLIS_EXPORT_BLIS int bli_pthread_barrier_init + ( + bli_pthread_barrier_t* barrier, + const bli_pthread_barrierattr_t* attr, + unsigned int count + ); -BLIS_EXPORT_BLIS int bli_pthread_barrier_destroy( bli_pthread_barrier_t *barrier ); +BLIS_EXPORT_BLIS int bli_pthread_barrier_destroy + ( + bli_pthread_barrier_t* barrier + ); -BLIS_EXPORT_BLIS int bli_pthread_barrier_wait( bli_pthread_barrier_t *barrier ); +BLIS_EXPORT_BLIS int bli_pthread_barrier_wait + ( + bli_pthread_barrier_t* barrier + ); #else // !defined(_MSC_VER) diff --git a/frame/thread/bli_thrcomm.h b/frame/thread/bli_thrcomm.h index dbc75dc82..b4b7a88db 100644 --- a/frame/thread/bli_thrcomm.h +++ b/frame/thread/bli_thrcomm.h @@ -44,7 +44,7 @@ // thread entry point prototype. -BLIS_EXPORT_BLIS void* bli_l3_thread_entry( void* data_void ); +void* bli_l3_thread_entry( void* data_void ); // thrcomm_t query (field only) @@ -56,14 +56,14 @@ static dim_t bli_thrcomm_num_threads( thrcomm_t* comm ) // Thread communicator prototypes. -BLIS_EXPORT_BLIS thrcomm_t* bli_thrcomm_create( rntm_t* rntm, dim_t n_threads ); -BLIS_EXPORT_BLIS void bli_thrcomm_free( rntm_t* rntm, thrcomm_t* comm ); -BLIS_EXPORT_BLIS void bli_thrcomm_init( dim_t n_threads, thrcomm_t* comm ); -BLIS_EXPORT_BLIS void bli_thrcomm_cleanup( thrcomm_t* comm ); -BLIS_EXPORT_BLIS void bli_thrcomm_barrier( dim_t thread_id, thrcomm_t* comm ); -BLIS_EXPORT_BLIS void* bli_thrcomm_bcast( dim_t inside_id, void* to_send, thrcomm_t* comm ); +thrcomm_t* bli_thrcomm_create( rntm_t* rntm, dim_t n_threads ); +void bli_thrcomm_free( rntm_t* rntm, thrcomm_t* comm ); +void bli_thrcomm_init( dim_t n_threads, thrcomm_t* comm ); +void bli_thrcomm_cleanup( thrcomm_t* comm ); +void bli_thrcomm_barrier( dim_t thread_id, thrcomm_t* comm ); +void* bli_thrcomm_bcast( dim_t inside_id, void* to_send, thrcomm_t* comm ); -BLIS_EXPORT_BLIS void bli_thrcomm_barrier_atomic( dim_t thread_id, thrcomm_t* comm ); +void bli_thrcomm_barrier_atomic( dim_t thread_id, thrcomm_t* comm ); #endif diff --git a/frame/thread/bli_thrcomm_openmp.h b/frame/thread/bli_thrcomm_openmp.h index 5d3d282a2..945d9a4b5 100644 --- a/frame/thread/bli_thrcomm_openmp.h +++ b/frame/thread/bli_thrcomm_openmp.h @@ -74,12 +74,12 @@ typedef struct thrcomm_s thrcomm_t; // Prototypes specific to tree barriers. #ifdef BLIS_TREE_BARRIER -BLIS_EXPORT_BLIS barrier_t* bli_thrcomm_tree_barrier_create( int num_threads, int arity, barrier_t** leaves, int leaf_index ); -BLIS_EXPORT_BLIS void bli_thrcomm_tree_barrier_free( barrier_t* barrier ); -BLIS_EXPORT_BLIS void bli_thrcomm_tree_barrier( barrier_t* barack ); +barrier_t* bli_thrcomm_tree_barrier_create( int num_threads, int arity, barrier_t** leaves, int leaf_index ); +void bli_thrcomm_tree_barrier_free( barrier_t* barrier ); +void bli_thrcomm_tree_barrier( barrier_t* barack ); #endif -BLIS_EXPORT_BLIS void bli_l3_thread_decorator_thread_check +void bli_l3_thread_decorator_thread_check ( dim_t n_threads, dim_t tid, diff --git a/frame/thread/bli_thread.h b/frame/thread/bli_thread.h index 9e8d1d012..d3ae01e9c 100644 --- a/frame/thread/bli_thread.h +++ b/frame/thread/bli_thread.h @@ -49,8 +49,8 @@ #include "bli_l3_thrinfo.h" // Initialization-related prototypes. -BLIS_EXPORT_BLIS void bli_thread_init( void ); -BLIS_EXPORT_BLIS void bli_thread_finalize( void ); +void bli_thread_init( void ); +void bli_thread_finalize( void ); #ifdef _MSC_VER #define strerror_r(errno,buf,len) strerror_s(buf,len,errno) @@ -58,7 +58,7 @@ BLIS_EXPORT_BLIS void bli_thread_finalize( void ); // Thread range-related prototypes. -BLIS_EXPORT_BLIS void bli_thread_range_sub +void bli_thread_range_sub ( thrinfo_t* thread, dim_t n, @@ -71,7 +71,7 @@ BLIS_EXPORT_BLIS void bli_thread_range_sub #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS siz_t PASTEMAC0( opname ) \ +siz_t PASTEMAC0( opname ) \ ( \ dir_t direct, \ thrinfo_t* thr, \ @@ -90,7 +90,7 @@ GENPROT( thread_range_ndim ) #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS siz_t PASTEMAC0( opname ) \ +siz_t PASTEMAC0( opname ) \ ( \ thrinfo_t* thr, \ obj_t* a, \ @@ -110,7 +110,7 @@ GENPROT( thread_range_weighted_t2b ) GENPROT( thread_range_weighted_b2t ) -BLIS_EXPORT_BLIS dim_t bli_thread_range_width_l +dim_t bli_thread_range_width_l ( doff_t diagoff_j, dim_t m, @@ -122,13 +122,13 @@ BLIS_EXPORT_BLIS dim_t bli_thread_range_width_l double area_per_thr, bool_t handle_edge_low ); -BLIS_EXPORT_BLIS siz_t bli_find_area_trap_l +siz_t bli_find_area_trap_l ( dim_t m, dim_t n, doff_t diagoff ); -BLIS_EXPORT_BLIS siz_t bli_thread_range_weighted_sub +siz_t bli_thread_range_weighted_sub ( thrinfo_t* restrict thread, doff_t diagoff, @@ -158,7 +158,7 @@ typedef void (*l3int_t) ); // Level-3 thread decorator prototype -BLIS_EXPORT_BLIS void bli_l3_thread_decorator +void bli_l3_thread_decorator ( l3int_t func, opid_t family, @@ -182,17 +182,17 @@ typedef struct dim_t f; } bli_prime_factors_t; -BLIS_EXPORT_BLIS void bli_prime_factorization(dim_t n, bli_prime_factors_t* factors); +void bli_prime_factorization(dim_t n, bli_prime_factors_t* factors); -BLIS_EXPORT_BLIS dim_t bli_next_prime_factor(bli_prime_factors_t* factors); +dim_t bli_next_prime_factor(bli_prime_factors_t* factors); -BLIS_EXPORT_BLIS void bli_partition_2x2(dim_t nthread, dim_t work1, dim_t work2, dim_t* nt1, dim_t* nt2); +void bli_partition_2x2(dim_t nthread, dim_t work1, dim_t work2, dim_t* nt1, dim_t* nt2); // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS dim_t bli_gcd( dim_t x, dim_t y ); -BLIS_EXPORT_BLIS dim_t bli_lcm( dim_t x, dim_t y ); -BLIS_EXPORT_BLIS dim_t bli_ipow( dim_t base, dim_t power ); +dim_t bli_gcd( dim_t x, dim_t y ); +dim_t bli_lcm( dim_t x, dim_t y ); +dim_t bli_ipow( dim_t base, dim_t power ); // ----------------------------------------------------------------------------- @@ -211,7 +211,7 @@ BLIS_EXPORT_BLIS void bli_thread_set_num_threads( dim_t value ); BLIS_EXPORT_BLIS void bli_thread_init_rntm( rntm_t* rntm ); -BLIS_EXPORT_BLIS void bli_thread_init_rntm_from_env( rntm_t* rntm ); +void bli_thread_init_rntm_from_env( rntm_t* rntm ); // ----------------------------------------------------------------------------- diff --git a/frame/thread/bli_thrinfo.h b/frame/thread/bli_thrinfo.h index c689e1051..6b72c80d6 100644 --- a/frame/thread/bli_thrinfo.h +++ b/frame/thread/bli_thrinfo.h @@ -156,7 +156,7 @@ static void bli_thread_obarrier( thrinfo_t* t ) // Prototypes for level-3 thrinfo functions not specific to any operation. // -BLIS_EXPORT_BLIS thrinfo_t* bli_thrinfo_create +thrinfo_t* bli_thrinfo_create ( rntm_t* rntm, thrcomm_t* ocomm, @@ -168,7 +168,7 @@ BLIS_EXPORT_BLIS thrinfo_t* bli_thrinfo_create thrinfo_t* sub_node ); -BLIS_EXPORT_BLIS void bli_thrinfo_init +void bli_thrinfo_init ( thrinfo_t* thread, thrcomm_t* ocomm, @@ -180,12 +180,12 @@ BLIS_EXPORT_BLIS void bli_thrinfo_init thrinfo_t* sub_node ); -BLIS_EXPORT_BLIS void bli_thrinfo_init_single +void bli_thrinfo_init_single ( thrinfo_t* thread ); -BLIS_EXPORT_BLIS void bli_thrinfo_free +void bli_thrinfo_free ( rntm_t* rntm, thrinfo_t* thread diff --git a/frame/util/bli_util_check.h b/frame/util/bli_util_check.h index fa5d230a1..a789211c9 100644 --- a/frame/util/bli_util_check.h +++ b/frame/util/bli_util_check.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* asum \ @@ -52,7 +52,7 @@ GENPROT( asumv ) #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x \ ); @@ -65,7 +65,7 @@ GENPROT( mktrim ) #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* norm \ @@ -79,7 +79,7 @@ GENPROT( normiv ) #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* norm \ @@ -93,7 +93,7 @@ GENPROT( normim ) #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ FILE* file, \ char* s1, \ @@ -109,7 +109,7 @@ GENPROT( fprintm ) #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x \ ); @@ -123,7 +123,7 @@ GENPROT( randnm ) #undef GENPROT #define GENPROT( opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(opname,_check) \ +void PASTEMAC(opname,_check) \ ( \ obj_t* x, \ obj_t* scale, \ @@ -135,36 +135,36 @@ GENPROT( sumsqv ) // ----------------------------------------------------------------------------- -BLIS_EXPORT_BLIS void bli_utilv_xi_check +void bli_utilv_xi_check ( obj_t* x, obj_t* index ); -BLIS_EXPORT_BLIS void bli_utilv_xa_check +void bli_utilv_xa_check ( obj_t* x, obj_t* asum ); -BLIS_EXPORT_BLIS void bli_utilm_mkhst_check +void bli_utilm_mkhst_check ( obj_t* a ); -BLIS_EXPORT_BLIS void bli_utilv_norm_check +void bli_utilv_norm_check ( obj_t* x, obj_t* norm ); -BLIS_EXPORT_BLIS void bli_utilm_norm_check +void bli_utilm_norm_check ( obj_t* x, obj_t* norm ); -BLIS_EXPORT_BLIS void bli_utilm_fprint_check +void bli_utilm_fprint_check ( FILE* file, char* s1, @@ -173,12 +173,12 @@ BLIS_EXPORT_BLIS void bli_utilm_fprint_check char* s2 ); -BLIS_EXPORT_BLIS void bli_utilm_rand_check +void bli_utilm_rand_check ( obj_t* x ); -BLIS_EXPORT_BLIS void bli_utilv_sumsqv_check +void bli_utilv_sumsqv_check ( obj_t* x, obj_t* scale, diff --git a/frame/util/bli_util_fpa.h b/frame/util/bli_util_fpa.h index cdff4b07f..3eb2c4868 100644 --- a/frame/util/bli_util_fpa.h +++ b/frame/util/bli_util_fpa.h @@ -40,7 +40,7 @@ #define GENPROT( opname ) \ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) \ -BLIS_EXPORT_BLIS PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); +PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( num_t dt ); GENPROT( asumv ) GENPROT( mkherm ) @@ -67,7 +67,7 @@ GENPROT( sumsqv ) #define GENPROT( opname ) \ \ PASTECH(opname,_vft) \ -BLIS_EXPORT_BLIS PASTEMAC(opname,_qfp)( num_t dt ); +PASTEMAC(opname,_qfp)( num_t dt ); GENPROT( fprintv ) GENPROT( fprintm ) diff --git a/frame/util/bli_util_unb_var1.h b/frame/util/bli_util_unb_var1.h index 9f5838161..3fb517eec 100644 --- a/frame/util/bli_util_unb_var1.h +++ b/frame/util/bli_util_unb_var1.h @@ -40,7 +40,7 @@ #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -55,7 +55,7 @@ INSERT_GENTPROTR_BASIC0( asumv_unb_var1 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ uplo_t uploa, \ dim_t m, \ @@ -72,7 +72,7 @@ INSERT_GENTPROT_BASIC0( mktrim_unb_var1 ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -89,7 +89,7 @@ INSERT_GENTPROTR_BASIC0( normiv_unb_var1 ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -143,7 +143,7 @@ INSERT_GENTPROT_BASIC0_I( fprintm ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ @@ -158,7 +158,7 @@ INSERT_GENTPROT_BASIC0( randnv_unb_var1 ) #undef GENTPROT #define GENTPROT( ctype, ch, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ doff_t diagoffx, \ uplo_t uplox, \ @@ -176,7 +176,7 @@ INSERT_GENTPROT_BASIC0( randnm_unb_var1 ) #undef GENTPROTR #define GENTPROTR( ctype, ctype_r, ch, chr, varname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC(ch,varname) \ +void PASTEMAC(ch,varname) \ ( \ dim_t n, \ ctype* x, inc_t incx, \ From d8f6d17bcee3c38bfadc0b31b9f689618a0fc208 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Wed, 13 Mar 2019 17:35:18 -0500 Subject: [PATCH 019/109] Support shared lib export of only public symbols. Details: - Introduced a new configure option, --enable-export-all, which will cause all shared library symbols to be exported by default, or, alternatively, --disable-export-all, which will cause all symbols to be hidden by default, with only those symbols that are annotated for visibility, via BLIS_EXPORT_BLIS (and BLIS_EXPORT_BLAS for BLAS symbols), to be exported. The default for this configure option is --disable-export-all. Thanks to Isuru Fernando for consulting on this commit. - Removed BLIS_EXPORT_BLIS annotations from frame/1m/bli_l1m_unb_var1.h, which was intended for 5a5f494. - Relocated BLIS_EXPORT-related cpp logic from bli_config.h.in to frame/include/bli_config_macro_defs.h. - Provided appropriate logic within common.mk to implement variable symbol visibility for gcc, clang, and icc (to the extend that each of these compilers allow). - Relocated --help text associated with debug option (-d) to configure slightly further down in the list. --- build/bli_config.h.in | 18 -------- build/config.mk.in | 6 ++- common.mk | 64 ++++++++++++++++++++++++++- configure | 49 +++++++++++++++++--- frame/1m/bli_l1m_unb_var1.h | 10 ++--- frame/include/bli_config_macro_defs.h | 34 ++++++++++++++ 6 files changed, 149 insertions(+), 32 deletions(-) diff --git a/build/bli_config.h.in b/build/bli_config.h.in index 2dadbc8c4..d785211dc 100644 --- a/build/bli_config.h.in +++ b/build/bli_config.h.in @@ -159,23 +159,5 @@ #define BLIS_DISABLE_SHARED #endif -#if !defined(BLIS_ENABLE_SHARED) - #define BLIS_EXPORT -#else - #if defined(_WIN32) || defined(__CYGWIN__) - #ifdef BLIS_IS_BUILDING_LIBRARY - #define BLIS_EXPORT __declspec(dllexport) - #else - #define BLIS_EXPORT __declspec(dllimport) - #endif - #elif defined(__GNUC__) && __GNUC__ >= 4 - #define BLIS_EXPORT __attribute__ ((visibility ("default"))) - #else - #define BLIS_EXPORT - #endif -#endif - -#define BLIS_EXPORT_BLIS BLIS_EXPORT -#define BLIS_EXPORT_BLAS BLIS_EXPORT #endif diff --git a/build/config.mk.in b/build/config.mk.in index c68601c67..0deaeac92 100644 --- a/build/config.mk.in +++ b/build/config.mk.in @@ -135,11 +135,15 @@ BUILDING_OOT := @configured_oot@ ARG_MAX_HACK := @enable_arg_max_hack@ # Whether to build the static and shared libraries. -# Note the "MK_" prefix, which helps differentiate these variables from +# NOTE: The "MK_" prefix, which helps differentiate these variables from # their corresonding cpp macros that use the BLIS_ prefix. MK_ENABLE_STATIC := @enable_static@ MK_ENABLE_SHARED := @enable_shared@ +# Whether to export all symbols within the shared library, even those symbols +# that are considered to be for internal use only. +ENABLE_EXPORT_ALL := @enable_export_all@ + # Whether to enable either the BLAS or CBLAS compatibility layers. MK_ENABLE_BLAS := @enable_blas@ MK_ENABLE_CBLAS := @enable_cblas@ diff --git a/common.mk b/common.mk index 75e563878..3326d2acd 100644 --- a/common.mk +++ b/common.mk @@ -608,7 +608,7 @@ endif $(foreach c, $(CONFIG_LIST_FAM), $(eval $(call append-var-for,CWARNFLAGS,$(c)))) -# --- Shared library (position-independent code) flags --- +# --- Position-independent code flags (shared libraries only) --- # Emit position-independent code for dynamic linking. ifeq ($(IS_WIN),yes) @@ -620,6 +620,68 @@ CPICFLAGS := -fPIC endif $(foreach c, $(CONFIG_LIST_FAM), $(eval $(call append-var-for,CPICFLAGS,$(c)))) +# --- Symbol exporting flags (shared libraries only) --- + +# Determine default export behavior / visibility of symbols for gcc. +ifeq ($(CC_VENDOR),gcc) +ifeq ($(IS_WIN),yes) +ifeq ($(ENABLE_EXPORT_ALL),yes) +CMISCFLAGS := -Wl,--export-all-symbols, -Wl,--enable-auto-import +else +CMISCFLAGS := -Wl,--exclude-all-symbols +endif +else # ifeq ($(IS_WIN),no) +ifeq ($(ENABLE_EXPORT_ALL),yes) +# Export all symbols by default. +CMISCFLAGS := -fvisibility=default +else +# Hide all symbols by default and export only those that have been annotated +# as needing to be exported. +CMISCFLAGS := -fvisibility=hidden +endif +endif +endif + +# Determine default export behavior / visibility of symbols for icc. +ifeq ($(CC_VENDOR),icc) +ifeq ($(ENABLE_EXPORT_ALL),yes) +# Export all symbols by default. +CMISCFLAGS := -fvisibility=default +else +# Hide all symbols by default and export only those that have been annotated +# as needing to be exported. +CMISCFLAGS := -fvisibility=hidden +endif +endif + +# Determine default export behavior / visibility of symbols for clang. +ifeq ($(CC_VENDOR),clang) +ifeq ($(IS_WIN),yes) +ifeq ($(ENABLE_EXPORT_ALL),yes) +# NOTE: clang on Windows does not appear to support exporting all symbols +# by default, and therefore we ignore the value of ENABLE_EXPORT_ALL. +CMISCFLAGS := +else +# NOTE: The default behavior of clang on Windows is to hide all symbols +# and only export functions and other declarations that have beenannotated +# as needing to be exported. +CMISCFLAGS := +endif +else # ifeq ($(IS_WIN),no) +ifeq ($(ENABLE_EXPORT_ALL),yes) +# NOTE: Not sure if clang on Linux/BSD/OSX supports exporting all symbols by +# default. +CMISCFLAGS := +else +# NOTE: Not sure if clang on Linux/BSD/OSX supports hiding all symbols by +# default. +CMISCFLAGS := +endif +endif +endif + +$(foreach c, $(CONFIG_LIST_FAM), $(eval $(call append-var-for,CMISCFLAGS,$(c)))) + # --- Language flags --- # Enable C99. diff --git a/configure b/configure index e72831d8f..a3b75d61c 100755 --- a/configure +++ b/configure @@ -110,13 +110,6 @@ print_usage() echo " SHAREDIR refers to a directory that does not exist, it" echo " will be created." echo " " - echo " -d DEBUG, --enable-debug[=DEBUG]" - echo " " - echo " Enable debugging symbols in the library. If argument" - echo " DEBUG is given as 'opt', then optimization flags are" - echo " kept in the framework, otherwise optimization is" - echo " turned off." - echo " " echo " --enable-verbose-make, --disable-verbose-make" echo " " echo " Enable (disabled by default) verbose compilation output" @@ -129,6 +122,13 @@ print_usage() echo " even if the command plus command line arguments exceeds" echo " the operating system limit (ARG_MAX)." echo " " + echo " -d DEBUG, --enable-debug[=DEBUG]" + echo " " + echo " Enable debugging symbols in the library. If argument" + echo " DEBUG is given as 'opt', then optimization flags are" + echo " kept in the framework, otherwise optimization is" + echo " turned off." + echo " " echo " --disable-static, --enable-static" echo " " echo " Disable (enabled by default) building BLIS as a static" @@ -141,6 +141,20 @@ print_usage() echo " library. If the shared library build is disabled, the" echo " static library build must remain enabled." echo " " + echo " --enable-export-all, --disable-export-all" + echo " " + echo " Enable (disabled by default) the exporting of all shared" + echo " library symbols in BLIS, even those that were intended" + echo " for internal use only. By default, only functions and" + echo " variables that belong to public APIs are exported in" + echo " shared libraries. Note that the public APIs encompass all" + echo " functions that almost any user would ever want to call," + echo " including the BLAS/CBLAS compatibility APIs as well as" + echo " the basic and expert interfaces to the typed and object" + echo " APIs that are unique to BLIS. Also note that enabling" + echo " this option will have no effect in some environments," + echo " such as when compiling with clang on Windows." + echo " " echo " -t MODEL, --enable-threading[=MODEL], --disable-threading" echo " " echo " Enable threading in the library, using threading model" @@ -1772,6 +1786,7 @@ main() enable_arg_max_hack='no' enable_static='yes' enable_shared='yes' + enable_export_all='no' enable_pba_pools='yes' enable_sba_pools='yes' enable_mem_tracing='no' @@ -1882,6 +1897,12 @@ main() disable-shared) enable_shared='no' ;; + enable-export-all) + enable_export_all='yes' + ;; + disable-export-all) + enable_export_all='no' + ;; enable-threading=*) threading_model=${OPTARG#*=} ;; @@ -2573,6 +2594,19 @@ main() exit 1 fi + # Check if the "enable export all" flag was specified. + if [ "x${enable_export_all}" = "xyes" ]; then + if [ "x${enable_shared}" = "xyes" ]; then + echo "${script_name}: exporting all symbols within shared library." + else + echo "${script_name}: ignoring request to export all symbols within shared library." + fi + else + if [ "x${enable_shared}" = "xyes" ]; then + echo "${script_name}: exporting only public symbols within shared library." + fi + fi + # Check the threading model flag and standardize its value, if needed. # NOTE: 'omp' is deprecated but still supported; 'openmp' is preferred. enable_openmp='no' @@ -2879,6 +2913,7 @@ main() | sed -e "s/@enable_arg_max_hack@/${enable_arg_max_hack}/g" \ | sed -e "s/@enable_static@/${enable_static}/g" \ | sed -e "s/@enable_shared@/${enable_shared}/g" \ + | sed -e "s/@enable_export_all@/${enable_export_all}/g" \ | sed -e "s/@enable_blas@/${enable_blas}/g" \ | sed -e "s/@enable_cblas@/${enable_cblas}/g" \ | sed -e "s/@enable_memkind@/${enable_memkind}/g" \ diff --git a/frame/1m/bli_l1m_unb_var1.h b/frame/1m/bli_l1m_unb_var1.h index 81be9fe80..0364d4b7c 100644 --- a/frame/1m/bli_l1m_unb_var1.h +++ b/frame/1m/bli_l1m_unb_var1.h @@ -40,7 +40,7 @@ #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,_unb_var1) \ +void PASTEMAC2(ch,opname,_unb_var1) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -62,7 +62,7 @@ INSERT_GENTPROT_BASIC0( subm ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,_unb_var1) \ +void PASTEMAC2(ch,opname,_unb_var1) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -84,7 +84,7 @@ INSERT_GENTPROT_BASIC0( scal2m ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,_unb_var1) \ +void PASTEMAC2(ch,opname,_unb_var1) \ ( \ conj_t conjalpha, \ doff_t diagoffx, \ @@ -105,7 +105,7 @@ INSERT_GENTPROT_BASIC0( setm ) #undef GENTPROT #define GENTPROT( ctype, ch, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC2(ch,opname,_unb_var1) \ +void PASTEMAC2(ch,opname,_unb_var1) \ ( \ doff_t diagoffx, \ diag_t diagx, \ @@ -126,7 +126,7 @@ INSERT_GENTPROT_BASIC0( xpbym ) #undef GENTPROT2 #define GENTPROT2( ctype_x, ctype_y, chx, chy, opname ) \ \ -BLIS_EXPORT_BLIS void PASTEMAC3(chx,chy,opname,_unb_var1) \ +void PASTEMAC3(chx,chy,opname,_unb_var1) \ ( \ doff_t diagoffx, \ diag_t diagx, \ diff --git a/frame/include/bli_config_macro_defs.h b/frame/include/bli_config_macro_defs.h index 8734ff672..ed0056990 100644 --- a/frame/include/bli_config_macro_defs.h +++ b/frame/include/bli_config_macro_defs.h @@ -189,5 +189,39 @@ #endif +// -- SHARED LIBRARY SYMBOL EXPORT --------------------------------------------- + +// When building shared libraries, we can control which symbols are exported for +// linking by external applications. BLIS annotates all function prototypes that +// are meant to be "public" with BLIS_EXPORT_BLIS (with BLIS_EXPORT_BLAS playing +// a similar role for BLAS compatibility routines). Which symbols are exported +// is controlled by the default symbol visibility, as specifed by the gcc option +// -fvisibility=[default|hidden]. The default for this option is 'default', or, +// "public", which, if allowed to stand, causes all symbols in BLIS to be +// linkable from the outside. But when compiling with -fvisibility=hidden, all +// symbols start out hidden (that is, restricted only for internal use by BLIS), +// with that setting overridden only for function prototypes or variable +// declarations that are annotated with BLIS_EXPORT_BLIS. + +#if !defined(BLIS_ENABLE_SHARED) + #define BLIS_EXPORT +#else + #if defined(_WIN32) || defined(__CYGWIN__) + #ifdef BLIS_IS_BUILDING_LIBRARY + #define BLIS_EXPORT __declspec(dllexport) + #else + #define BLIS_EXPORT __declspec(dllimport) + #endif + #elif defined(__GNUC__) && __GNUC__ >= 4 + #define BLIS_EXPORT __attribute__ ((visibility ("default"))) + #else + #define BLIS_EXPORT + #endif +#endif + +#define BLIS_EXPORT_BLIS BLIS_EXPORT +#define BLIS_EXPORT_BLAS BLIS_EXPORT + + #endif From 40b392de3f7df0cb7fb10dcc9af934386c403420 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Wed, 13 Mar 2019 18:21:35 -0500 Subject: [PATCH 020/109] Annotated additional symbols for export. Details: - Added export annotations to additional function prototypes in order to accommodate the testsuite. - Disabled calling bli_amaxv_check() from within the testsuite's test_amaxv.c. --- frame/1m/packm/bli_packm_init.h | 2 +- frame/1m/packm/bli_packm_var.h | 2 +- frame/base/bli_arch.h | 4 ++-- frame/base/bli_check.h | 2 +- frame/base/bli_gks.h | 2 +- frame/base/bli_rntm.h | 2 +- frame/base/bli_winsys.h | 2 +- testsuite/src/test_amaxv.c | 7 +++++++ testsuite/src/test_libblis.c | 16 ++++++++-------- 9 files changed, 23 insertions(+), 16 deletions(-) diff --git a/frame/1m/packm/bli_packm_init.h b/frame/1m/packm/bli_packm_init.h index 6896ab913..9365a131e 100644 --- a/frame/1m/packm/bli_packm_init.h +++ b/frame/1m/packm/bli_packm_init.h @@ -40,7 +40,7 @@ siz_t bli_packm_init cntl_t* cntl ); -siz_t bli_packm_init_pack +BLIS_EXPORT_BLIS siz_t bli_packm_init_pack ( invdiag_t invert_diag, pack_t schema, diff --git a/frame/1m/packm/bli_packm_var.h b/frame/1m/packm/bli_packm_var.h index ce2065fd1..3dc5b607d 100644 --- a/frame/1m/packm/bli_packm_var.h +++ b/frame/1m/packm/bli_packm_var.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void PASTEMAC0(opname) \ +BLIS_EXPORT_BLIS void PASTEMAC0(opname) \ ( \ obj_t* c, \ obj_t* p, \ diff --git a/frame/base/bli_arch.h b/frame/base/bli_arch.h index 13c9c8aa6..6b8a38ebd 100644 --- a/frame/base/bli_arch.h +++ b/frame/base/bli_arch.h @@ -35,12 +35,12 @@ #ifndef BLIS_ARCH_H #define BLIS_ARCH_H -arch_t bli_arch_query_id( void ); +BLIS_EXPORT_BLIS arch_t bli_arch_query_id( void ); void bli_arch_set_id_once( void ); void bli_arch_set_id( void ); -char* bli_arch_string( arch_t id ); +BLIS_EXPORT_BLIS char* bli_arch_string( arch_t id ); #endif diff --git a/frame/base/bli_check.h b/frame/base/bli_check.h index 90de609ad..539458406 100644 --- a/frame/base/bli_check.h +++ b/frame/base/bli_check.h @@ -34,7 +34,7 @@ */ -err_t bli_check_error_code_helper( gint_t code, char* file, guint_t line ); +BLIS_EXPORT_BLIS err_t bli_check_error_code_helper( gint_t code, char* file, guint_t line ); err_t bli_check_valid_error_level( errlev_t level ); diff --git a/frame/base/bli_gks.h b/frame/base/bli_gks.h index fde4e4ec0..f680a573e 100644 --- a/frame/base/bli_gks.h +++ b/frame/base/bli_gks.h @@ -49,7 +49,7 @@ BLIS_EXPORT_BLIS cntx_t* bli_gks_query_nat_cntx( void ); cntx_t* bli_gks_query_cntx_noinit( void ); -cntx_t* bli_gks_query_ind_cntx( ind_t ind, num_t dt ); +BLIS_EXPORT_BLIS cntx_t* bli_gks_query_ind_cntx( ind_t ind, num_t dt ); BLIS_EXPORT_BLIS void bli_gks_init_ref_cntx( cntx_t* cntx ); diff --git a/frame/base/bli_rntm.h b/frame/base/bli_rntm.h index 4e8e74af8..8b922132d 100644 --- a/frame/base/bli_rntm.h +++ b/frame/base/bli_rntm.h @@ -239,7 +239,7 @@ static void bli_rntm_init( rntm_t* rntm ) // Function prototypes -void bli_rntm_set_ways_for_op +BLIS_EXPORT_BLIS void bli_rntm_set_ways_for_op ( opid_t l3_op, side_t side, diff --git a/frame/base/bli_winsys.h b/frame/base/bli_winsys.h index 0ad7c408c..0c71114ad 100644 --- a/frame/base/bli_winsys.h +++ b/frame/base/bli_winsys.h @@ -33,5 +33,5 @@ */ //int bli_setenv( const char *name, const char *value, int overwrite ); -void bli_sleep( unsigned int secs ); +BLIS_EXPORT_BLIS void bli_sleep( unsigned int secs ); diff --git a/testsuite/src/test_amaxv.c b/testsuite/src/test_amaxv.c index 3d58a34ed..82bd161ea 100644 --- a/testsuite/src/test_amaxv.c +++ b/testsuite/src/test_amaxv.c @@ -351,8 +351,15 @@ void PASTEMAC0(opname) \ \ void* buf_index = bli_obj_buffer_at_off( index ); \ \ +/* + FGVZ: Disabling this code since bli_amaxv_check() is supposed to be a + non-public API function, and therefore unavailable unless all symbols + are scheduled to be exported at configure-time (which is not currently + the default behavior). + if ( bli_error_checking_is_enabled() ) \ bli_amaxv_check( x, index ); \ +*/ \ \ /* Query a type-specific function pointer, except one that uses void* instead of typed pointers. */ \ diff --git a/testsuite/src/test_libblis.c b/testsuite/src/test_libblis.c index 780c4b9e6..5c2dd2ed9 100644 --- a/testsuite/src/test_libblis.c +++ b/testsuite/src/test_libblis.c @@ -130,22 +130,22 @@ void libblis_test_thread_decorator( test_params_t* params, test_ops_t* ops ) #ifdef BLIS_ENABLE_MEM_TRACING printf( "libblis_test_thread_decorator(): " ); #endif - bli_pthread_t* pthread = bli_malloc_intl( sizeof( bli_pthread_t ) * nt ); + bli_pthread_t* pthread = bli_malloc_user( sizeof( bli_pthread_t ) * nt ); #ifdef BLIS_ENABLE_MEM_TRACING printf( "libblis_test_thread_decorator(): " ); #endif - thread_data_t* tdata = bli_malloc_intl( sizeof( thread_data_t ) * nt ); + thread_data_t* tdata = bli_malloc_user( sizeof( thread_data_t ) * nt ); // Allocate a mutex for the threads to share. - //bli_pthread_mutex_t* mutex = bli_malloc_intl( sizeof( bli_pthread_mutex_t ) ); + //bli_pthread_mutex_t* mutex = bli_malloc_user( sizeof( bli_pthread_mutex_t ) ); // Allocate a barrier for the threads to share. #ifdef BLIS_ENABLE_MEM_TRACING printf( "libblis_test_thread_decorator(): " ); #endif - bli_pthread_barrier_t* barrier = bli_malloc_intl( sizeof( bli_pthread_barrier_t ) ); + bli_pthread_barrier_t* barrier = bli_malloc_user( sizeof( bli_pthread_barrier_t ) ); // Initialize the mutex. //bli_pthread_mutex_init( mutex, NULL ); @@ -191,18 +191,18 @@ void libblis_test_thread_decorator( test_params_t* params, test_ops_t* ops ) #ifdef BLIS_ENABLE_MEM_TRACING printf( "libblis_test_thread_decorator(): " ); #endif - bli_free_intl( pthread ); + bli_free_user( pthread ); #ifdef BLIS_ENABLE_MEM_TRACING printf( "libblis_test_thread_decorator(): " ); #endif - bli_free_intl( tdata ); + bli_free_user( tdata ); #ifdef BLIS_ENABLE_MEM_TRACING printf( "libblis_test_thread_decorator(): " ); #endif - //bli_free_intl( mutex ); - bli_free_intl( barrier ); + //bli_free_user( mutex ); + bli_free_user( barrier ); } From 9ea223df2dc4fb30821334d3265c484efcc0dd57 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Fri, 15 Mar 2019 13:57:49 -0500 Subject: [PATCH 021/109] Use -fvisibility=[...] with clang on Linux/BSD/OSX. Details: - Modified common.mk to use the -fvisibility=[hidden|default] option when compiling with clang on non-Windows platforms (Linux, BSD, OS X, etc.). Thanks to Isuru Fernando for pointing out this option works with clang on these OSes. --- common.mk | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/common.mk b/common.mk index 3326d2acd..9a63bd0aa 100644 --- a/common.mk +++ b/common.mk @@ -643,6 +643,8 @@ endif endif # Determine default export behavior / visibility of symbols for icc. +# NOTE: The Windows branches have been omitted since we currently make no +# effort to support Windows builds via icc (only gcc/clang via AppVeyor). ifeq ($(CC_VENDOR),icc) ifeq ($(ENABLE_EXPORT_ALL),yes) # Export all symbols by default. @@ -669,13 +671,12 @@ CMISCFLAGS := endif else # ifeq ($(IS_WIN),no) ifeq ($(ENABLE_EXPORT_ALL),yes) -# NOTE: Not sure if clang on Linux/BSD/OSX supports exporting all symbols by -# default. -CMISCFLAGS := +# Export all symbols by default. +CMISCFLAGS := -fvisibility=default else -# NOTE: Not sure if clang on Linux/BSD/OSX supports hiding all symbols by -# default. -CMISCFLAGS := +# Hide all symbols by default and export only those that have been annotated +# as needing to be exported. +CMISCFLAGS := -fvisibility=hidden endif endif endif From 3e16033ead341f8b664a0d3af862c1e3a1acc452 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Mon, 18 Mar 2019 13:22:55 -0500 Subject: [PATCH 022/109] Updates to docs/Multithreading.md. Details: - Made extra explicit the fact that: (a) multithreading in BLIS is disabled by default; and (b) even with multithreading enabled, the user must specify multithreading at runtime in order to observe parallelism. Thanks to M. Zhou for suggesting these clarifications in #292. - Also made explicit that only the environment variable and global runtime API methods are available when using the BLAS API. If the user wishes to use the local runtime API (specify multithreading on a per-call basis), one of the native BLIS APIs must be used. --- docs/Multithreading.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/Multithreading.md b/docs/Multithreading.md index 7fff7357f..61a337bc8 100644 --- a/docs/Multithreading.md +++ b/docs/Multithreading.md @@ -25,9 +25,15 @@ Our paper [Anatomy of High-Performance Many-Threaded Matrix Multiplication](https://github.com/flame/blis#citations), presented at IPDPS'14, identified 5 loops around the microkernel as opportunities for parallelization within level-3 operations such as `gemm`. Within BLIS, we have enabled parallelism for 4 of those loops and have extended it to the rest of the level-3 operations except for `trsm`. +**IMPORTANT**: Multithreading in BLIS is disabled by default. Furthermore, even when multithreading is enabled, BLIS will default to single-threaded execution at runtime. In order to both *allow* and *invoke* parallelism from within BLIS operations, you must both *enable* multithreading at configure-time and *specify* multithreading at runtime. + +To summarize: In order to observe multithreaded parallelism within a BLIS operation, you must do *both* of the following: +1. Enable multithreading at configure-time. This is discussed in the [next section](docs/Multithreading.md#enabling-multithreading). +2. Specify multithreading at runtime. This is also dicussed [later on](docs/Multithreading.md#specifying-multithreading). + # Enabling multithreading -Note that BLIS disables multithreading by default. In order to extract multithreaded parallelism from BLIS, you must first enable multithreading explicitly at configure-time. +BLIS disables multithreading by default. In order to allow multithreaded parallelism from BLIS, you must first enable multithreading explicitly at configure-time. As of this writing, BLIS optionally supports multithreading via either OpenMP or POSIX threads. @@ -101,7 +107,7 @@ This pattern--automatic or manual--holds regardless of which of the three method Regardless of which method is employed, and which specific way within each method, after setting the number of threads, the application may call the desired level-3 operation (via either the [typed API](docs/BLISTypedAPI.md) or the [object API](docs/BLISObjectAPI.md)) and the operation will execute in a multithreaded manner. (When calling BLIS via the BLAS API, only the first two (global) methods are available.) -NOTE: Please be aware of what happens if you try to specify both the automatic and manual ways, as it could otherwise confuse new users. Regardless of which broad method is used, **if multithreading is specified via both the automatic and manual ways, the manual way will always take precedence.** Also, specifying parallelism for even *one* loop counts as specifying the manual way (in which case the ways of parallelism for the remaining loops will be assumed to be 1). +**Note**: Please be aware of what happens if you try to specify both the automatic and manual ways, as it could otherwise confuse new users. Regardless of which broad method is used, **if multithreading is specified via both the automatic and manual ways, the manual way will always take precedence.** Also, specifying parallelism for even *one* loop counts as specifying the manual way (in which case the ways of parallelism for the remaining loops will be assumed to be 1). ## Globally via environment variables @@ -109,6 +115,8 @@ The most common method of specifying multithreading in BLIS is globally via envi Regardless of whether you end up using the automatic or manual way of expressing a request for multithreading, note that the environment variables are read (via `getenv()`) by BLIS **only once**, when the library is initialized. Subsequent to library initialization, the global settings for parallelization may only be changed via the [global runtime API](Multithreading.md#globally-at-runtime). If this constraint is not a problem, then environment variables may work fine for you. Otherwise, please consider [local settings](Multithreading.md#locally-at-runtime). (Local settings may used at any time, regardless of whether global settings were explicitly specified, and local settings always override global settings.) +**Note**: Regardless of which way ([automatic](Multithreading.md#environment-variables-the-automatic-way) or [manual](Multithreading.md#environment-variables-the-manual-way)) environment variables are used to specify multithreading, that specification will affect operation of BLIS through **both** the BLAS compatibility layer as well as the native [typed](docs/BLISTypedAPI.md) and [object](docs/BLISObjectAPI.md) APIs that are unique to BLIS. + ### Environment variables: the automatic way The automatic way of specifying parallelism entails simply setting the total number of threads you wish BLIS to employ in its parallelization. This total number of threads is captured by the `BLIS_NUM_THREADS` environment variable. You can set this variable prior to executing your BLIS-linked executable: @@ -119,7 +127,7 @@ $ ./my_blis_program ``` This causes BLIS to automatically determine a reasonable threading strategy based on what is known about the operation and problem size. If `BLIS_NUM_THREADS` is not set, BLIS will attempt to query the value of `OMP_NUM_THREADS`. If neither variable is set, the default number of threads is 1. -**Note:** We *highly* discourage use of the `OMP_NUM_THREADS` environment variable and may remove support for it in the future. If you wish to set parallelism globally via environment variables, please use `BLIS_NUM_THREADS`. +**Note**: We *highly* discourage use of the `OMP_NUM_THREADS` environment variable and may remove support for it in the future. If you wish to set parallelism globally via environment variables, please use `BLIS_NUM_THREADS`. ### Environment variables: the manual way @@ -127,7 +135,7 @@ The manual way of specifying parallelism involves communicating which loops with The below chart describes the five loops used in BLIS's matrix multiplication operations. -| Loop around microkernel | Environment variable | Direction | Notes | +| Loop around microkernel | Environment variable | Direction | Notes | |:-------------------------|:---------------------|:----------|:------------| | 5th loop | `BLIS_JC_NT` | `n` | | | 4th loop | _N/A_ | `k` | Not enabled | @@ -154,6 +162,8 @@ Next, which combinations of loops to parallelize depends on which caches are sha If you still wish to set the parallelization scheme globally, but you want to do so at runtime, BLIS provides a thread-safe API for specifying multithreading. Think of these functions as a way to modify the same internal data structure into which the environment variables are read. (Recall that the environment variables are only read once, when BLIS is initialized). +**Note**: Regardless of which way ([automatic](Multithreading.md#globally-at-runtime-the-automatic-way) or [manual](Multithreading.md#globally-at-runtime-the-manual-way)) the global runtime API is used to specify multithreading, that specification will affect operation of BLIS through **both** the BLAS compatibility layer as well as the native [typed](docs/BLISTypedAPI.md) and [object](docs/BLISObjectAPI.md) APIs that are unique to BLIS. + ### Globally at runtime: the automatic way If you simply want to specify an overall number of threads and let BLIS choose a thread factorization automatically, use the following function: @@ -193,6 +203,8 @@ In addition to the global methods based on environment variables and runtime fun As with environment variables and the global runtime API, there are two ways to specify parallelism: the automatic way and the manual way. Both ways involve allocating a BLIS-specific object, initializing the object and encoding the desired parallelization, and then passing a pointer to the object into one of the expert interfaces of either the [typed](docs/BLISTypedAPI.md) or [object](docs/BLISObjectAPI) APIs. We provide examples of utilizing this threading object below. +**Note**: Neither way ([automatic](Multithreading.md#locally-at-runtime-the-automatic-way) nor [manual](Multithreading.md#locally-at-runtime-the-manual-way)) of specifying multithreading via the local runtime API can be used via the BLAS interfaces. The local runtime API may *only* be used via the native [typed](docs/BLISTypedAPI.md) and [object](docs/BLISObjectAPI.md) APIs, which are unique to BLIS. (Furthermore, the expert interfaces of each API must be used. This is demonstrated later on in this section.) + ### Initializing a rntm_t Before specifying the parallelism (automatically or manually), you must first allocate a special BLIS object called a `rntm_t` (runtime). The object is quite small (about 64 bytes), and so we recommend allocating it statically on the function stack: From 2d1cd32c0f2642e72b17b109927bf17fc0a4222b Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Mon, 18 Mar 2019 18:18:25 -0500 Subject: [PATCH 023/109] Renamed --enable-export-all to --export-shared=[]. Details: - Replaced the existing --enable-export-all / --disable-export-all configure option with --export-shared=[public|all], with the 'public' instance of the latter corresponding to --disable-export-all and the 'all' instance corresponding to --enable-export-all. Nothing else semantically about the option, or its default, has changed. --- build/config.mk.in | 2 +- common.mk | 22 +++++++++---------- configure | 53 ++++++++++++++++++++++++++-------------------- 3 files changed, 42 insertions(+), 35 deletions(-) diff --git a/build/config.mk.in b/build/config.mk.in index 0deaeac92..15704422d 100644 --- a/build/config.mk.in +++ b/build/config.mk.in @@ -142,7 +142,7 @@ MK_ENABLE_SHARED := @enable_shared@ # Whether to export all symbols within the shared library, even those symbols # that are considered to be for internal use only. -ENABLE_EXPORT_ALL := @enable_export_all@ +EXPORT_SHARED := @export_shared@ # Whether to enable either the BLAS or CBLAS compatibility layers. MK_ENABLE_BLAS := @enable_blas@ diff --git a/common.mk b/common.mk index 9a63bd0aa..ef0acfb50 100644 --- a/common.mk +++ b/common.mk @@ -625,16 +625,16 @@ $(foreach c, $(CONFIG_LIST_FAM), $(eval $(call append-var-for,CPICFLAGS,$(c)))) # Determine default export behavior / visibility of symbols for gcc. ifeq ($(CC_VENDOR),gcc) ifeq ($(IS_WIN),yes) -ifeq ($(ENABLE_EXPORT_ALL),yes) +ifeq ($(EXPORT_SHARED),all) CMISCFLAGS := -Wl,--export-all-symbols, -Wl,--enable-auto-import -else +else # ifeq ($(EXPORT_SHARED),public) CMISCFLAGS := -Wl,--exclude-all-symbols endif else # ifeq ($(IS_WIN),no) -ifeq ($(ENABLE_EXPORT_ALL),yes) +ifeq ($(EXPORT_SHARED),all) # Export all symbols by default. CMISCFLAGS := -fvisibility=default -else +else # ifeq ($(EXPORT_SHARED),public) # Hide all symbols by default and export only those that have been annotated # as needing to be exported. CMISCFLAGS := -fvisibility=hidden @@ -646,10 +646,10 @@ endif # NOTE: The Windows branches have been omitted since we currently make no # effort to support Windows builds via icc (only gcc/clang via AppVeyor). ifeq ($(CC_VENDOR),icc) -ifeq ($(ENABLE_EXPORT_ALL),yes) +ifeq ($(EXPORT_SHARED),all) # Export all symbols by default. CMISCFLAGS := -fvisibility=default -else +else # ifeq ($(EXPORT_SHARED),public) # Hide all symbols by default and export only those that have been annotated # as needing to be exported. CMISCFLAGS := -fvisibility=hidden @@ -659,21 +659,21 @@ endif # Determine default export behavior / visibility of symbols for clang. ifeq ($(CC_VENDOR),clang) ifeq ($(IS_WIN),yes) -ifeq ($(ENABLE_EXPORT_ALL),yes) +ifeq ($(EXPORT_SHARED),all) # NOTE: clang on Windows does not appear to support exporting all symbols -# by default, and therefore we ignore the value of ENABLE_EXPORT_ALL. +# by default, and therefore we ignore the value of EXPORT_SHARED. CMISCFLAGS := -else +else # ifeq ($(EXPORT_SHARED),public) # NOTE: The default behavior of clang on Windows is to hide all symbols # and only export functions and other declarations that have beenannotated # as needing to be exported. CMISCFLAGS := endif else # ifeq ($(IS_WIN),no) -ifeq ($(ENABLE_EXPORT_ALL),yes) +ifeq ($(EXPORT_SHARED),all) # Export all symbols by default. CMISCFLAGS := -fvisibility=default -else +else # ifeq ($(EXPORT_SHARED),public) # Hide all symbols by default and export only those that have been annotated # as needing to be exported. CMISCFLAGS := -fvisibility=hidden diff --git a/configure b/configure index a3b75d61c..1cf93a82f 100755 --- a/configure +++ b/configure @@ -141,19 +141,22 @@ print_usage() echo " library. If the shared library build is disabled, the" echo " static library build must remain enabled." echo " " - echo " --enable-export-all, --disable-export-all" + echo " -e SYMBOLS, --export-shared[=SYMBOLS]" echo " " - echo " Enable (disabled by default) the exporting of all shared" - echo " library symbols in BLIS, even those that were intended" - echo " for internal use only. By default, only functions and" - echo " variables that belong to public APIs are exported in" - echo " shared libraries. Note that the public APIs encompass all" - echo " functions that almost any user would ever want to call," - echo " including the BLAS/CBLAS compatibility APIs as well as" - echo " the basic and expert interfaces to the typed and object" - echo " APIs that are unique to BLIS. Also note that enabling" - echo " this option will have no effect in some environments," - echo " such as when compiling with clang on Windows." + echo " Specify the subset of library symbols that are exported" + echo " within a shared library. Valid values for SYMBOLS are:" + echo " 'public' (the default) and 'all'. By default, only" + echo " functions and variables that belong to public APIs are" + echo " exported in shared libraries. However, the user may" + echo " instead export all symbols in BLIS, even those that were" + echo " intended for internal use only. Note Note that the public" + echo " APIs encompass all functions that almost any user would" + echo " ever want to call, including the BLAS/CBLAS compatibility" + echo " APIs as well as the basic and expert interfaces to the" + echo " typed and object APIs that are unique to BLIS. Also note" + echo " that changing this option to 'all' will have no effect in" + echo " some environments, such as when compiling with clang on" + echo " Windows." echo " " echo " -t MODEL, --enable-threading[=MODEL], --disable-threading" echo " " @@ -1786,7 +1789,7 @@ main() enable_arg_max_hack='no' enable_static='yes' enable_shared='yes' - enable_export_all='no' + export_shared='public' enable_pba_pools='yes' enable_sba_pools='yes' enable_mem_tracing='no' @@ -1836,7 +1839,7 @@ main() # Process our command line options. unset OPTIND - while getopts ":hp:d:s:t:r:qci:b:-:" opt; do + while getopts ":hp:d:e:s:t:r:qci:b:-:" opt; do case $opt in -) case "$OPTARG" in @@ -1897,11 +1900,8 @@ main() disable-shared) enable_shared='no' ;; - enable-export-all) - enable_export_all='yes' - ;; - disable-export-all) - enable_export_all='no' + export-shared=*) + export_shared=${OPTARG#*=} ;; enable-threading=*) threading_model=${OPTARG#*=} @@ -1994,6 +1994,9 @@ main() debug_flag=1 debug_type=$OPTARG ;; + e) + export_shared=$OPTARG + ;; s) sandbox_flag=1 sandbox=$OPTARG @@ -2594,17 +2597,21 @@ main() exit 1 fi - # Check if the "enable export all" flag was specified. - if [ "x${enable_export_all}" = "xyes" ]; then + # Check if the "export shared" flag was specified. + if [ "x${export_shared}" = "xall" ]; then if [ "x${enable_shared}" = "xyes" ]; then echo "${script_name}: exporting all symbols within shared library." else echo "${script_name}: ignoring request to export all symbols within shared library." fi - else + elif [ "x${export_shared}" = "xpublic" ]; then if [ "x${enable_shared}" = "xyes" ]; then echo "${script_name}: exporting only public symbols within shared library." fi + else + echo "${script_name}: *** Invalid argument '${export_shared}' to --export-shared option given." + echo "${script_name}: *** Please use 'public' or 'all'." + exit 1 fi # Check the threading model flag and standardize its value, if needed. @@ -2913,7 +2920,7 @@ main() | sed -e "s/@enable_arg_max_hack@/${enable_arg_max_hack}/g" \ | sed -e "s/@enable_static@/${enable_static}/g" \ | sed -e "s/@enable_shared@/${enable_shared}/g" \ - | sed -e "s/@enable_export_all@/${enable_export_all}/g" \ + | sed -e "s/@export_shared@/${export_shared}/g" \ | sed -e "s/@enable_blas@/${enable_blas}/g" \ | sed -e "s/@enable_cblas@/${enable_cblas}/g" \ | sed -e "s/@enable_memkind@/${enable_memkind}/g" \ From b503627a686b6cd911a2acb6307540ccca8deba9 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 19 Mar 2019 15:28:44 -0500 Subject: [PATCH 024/109] Adjusted cache blocksizes for zen subconfig. Details: - Adjusted the zen sub-configuration's cache blocksizes for float, scomplex, and dcomplex based on the existing values for double. (The previous values were taken directly from the haswell subconfig, which targets Intel Haswell/Broadwell/Skylake systems.) --- config/zen/bli_cntx_init_zen.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/config/zen/bli_cntx_init_zen.c b/config/zen/bli_cntx_init_zen.c index 258d4e92d..a96deadc1 100644 --- a/config/zen/bli_cntx_init_zen.c +++ b/config/zen/bli_cntx_init_zen.c @@ -150,9 +150,7 @@ void bli_cntx_init_zen( cntx_t* cntx ) bli_blksz_init_easy( &blkszs[ BLIS_NC ], 4080, 4080, 4080, 4080 ); #endif - - - + bli_blksz_init_easy( &blkszs[ BLIS_NC ], 8160, 4080, 4080, 3056 ); bli_blksz_init_easy( &blkszs[ BLIS_AF ], 8, 8, -1, -1 ); bli_blksz_init_easy( &blkszs[ BLIS_DF ], 8, 8, -1, -1 ); From c6793be46ef470c0767dd3fc783cfdbbaeccb4cc Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 19 Mar 2019 16:15:24 -0500 Subject: [PATCH 025/109] Added docs/Performance.md and docs/graphs subdir. Details: - Added a new markdown document, docs/Performance.md, which reports performance of a representative set of level-3 operations across a variety of hardware architectures, comparing BLIS to OpenBLAS and a vendor library (MKL on Intel/AMD, ARMPL on ARM). Performance graphs, in pdf and png formats, reside in docs/graphs. - Updated README.md to link to new Performance.md document. - Minor updates to CREDITS, docs/Multithreading.md. - Minor updates to matlab scripts in test/3/matlab. --- CREDITS | 1 + README.md | 14 +- docs/Multithreading.md | 2 +- docs/Performance.md | 325 ++++++++++++++++++++ docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.pdf | Bin 0 -> 33725 bytes docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.png | Bin 0 -> 104435 bytes docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.pdf | Bin 0 -> 34157 bytes docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.png | Bin 0 -> 107203 bytes docs/graphs/l3_perf_epyc_nt1.pdf | Bin 0 -> 27269 bytes docs/graphs/l3_perf_epyc_nt1.png | Bin 0 -> 67035 bytes docs/graphs/l3_perf_has_jc2ic3jr2_nt12.pdf | Bin 0 -> 32775 bytes docs/graphs/l3_perf_has_jc2ic3jr2_nt12.png | Bin 0 -> 92749 bytes docs/graphs/l3_perf_has_jc4ic3jr2_nt24.pdf | Bin 0 -> 33508 bytes docs/graphs/l3_perf_has_jc4ic3jr2_nt24.png | Bin 0 -> 91932 bytes docs/graphs/l3_perf_has_nt1.pdf | Bin 0 -> 28680 bytes docs/graphs/l3_perf_has_nt1.png | Bin 0 -> 70994 bytes docs/graphs/l3_perf_skx_jc2ic13_nt26.pdf | Bin 0 -> 33054 bytes docs/graphs/l3_perf_skx_jc2ic13_nt26.png | Bin 0 -> 100176 bytes docs/graphs/l3_perf_skx_jc4ic13_nt52.pdf | Bin 0 -> 33294 bytes docs/graphs/l3_perf_skx_jc4ic13_nt52.png | Bin 0 -> 96292 bytes docs/graphs/l3_perf_skx_nt1.pdf | Bin 0 -> 29136 bytes docs/graphs/l3_perf_skx_nt1.png | Bin 0 -> 76368 bytes docs/graphs/l3_perf_tx2_jc4ic7_nt28.pdf | Bin 0 -> 32273 bytes docs/graphs/l3_perf_tx2_jc4ic7_nt28.png | Bin 0 -> 94620 bytes docs/graphs/l3_perf_tx2_jc8ic7_nt56.pdf | Bin 0 -> 32995 bytes docs/graphs/l3_perf_tx2_jc8ic7_nt56.png | Bin 0 -> 102875 bytes docs/graphs/l3_perf_tx2_nt1.pdf | Bin 0 -> 26390 bytes docs/graphs/l3_perf_tx2_nt1.png | Bin 0 -> 71627 bytes test/3/matlab/plot_l3_perf.m | 4 +- test/3/matlab/plot_panel_4x5.m | 1 + test/3/matlab/runme.m | 6 +- 31 files changed, 346 insertions(+), 7 deletions(-) create mode 100644 docs/Performance.md create mode 100644 docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.pdf create mode 100644 docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.png create mode 100644 docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.pdf create mode 100644 docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.png create mode 100644 docs/graphs/l3_perf_epyc_nt1.pdf create mode 100644 docs/graphs/l3_perf_epyc_nt1.png create mode 100644 docs/graphs/l3_perf_has_jc2ic3jr2_nt12.pdf create mode 100644 docs/graphs/l3_perf_has_jc2ic3jr2_nt12.png create mode 100644 docs/graphs/l3_perf_has_jc4ic3jr2_nt24.pdf create mode 100644 docs/graphs/l3_perf_has_jc4ic3jr2_nt24.png create mode 100644 docs/graphs/l3_perf_has_nt1.pdf create mode 100644 docs/graphs/l3_perf_has_nt1.png create mode 100644 docs/graphs/l3_perf_skx_jc2ic13_nt26.pdf create mode 100644 docs/graphs/l3_perf_skx_jc2ic13_nt26.png create mode 100644 docs/graphs/l3_perf_skx_jc4ic13_nt52.pdf create mode 100644 docs/graphs/l3_perf_skx_jc4ic13_nt52.png create mode 100644 docs/graphs/l3_perf_skx_nt1.pdf create mode 100644 docs/graphs/l3_perf_skx_nt1.png create mode 100644 docs/graphs/l3_perf_tx2_jc4ic7_nt28.pdf create mode 100644 docs/graphs/l3_perf_tx2_jc4ic7_nt28.png create mode 100644 docs/graphs/l3_perf_tx2_jc8ic7_nt56.pdf create mode 100644 docs/graphs/l3_perf_tx2_jc8ic7_nt56.png create mode 100644 docs/graphs/l3_perf_tx2_nt1.pdf create mode 100644 docs/graphs/l3_perf_tx2_nt1.png diff --git a/CREDITS b/CREDITS index 52efd782f..73a90cc1b 100644 --- a/CREDITS +++ b/CREDITS @@ -71,6 +71,7 @@ but many others have contributed code and feedback, including Paul Springer @springer13 (RWTH-Aachen) Vladimir Sukarev Santanu Thangaraj (AMD) + Nicholai Tukanov @nicholaiTukanov (The University of Texas at Austin) Rhys Ulerich @RhysU (The University of Texas at Austin) Robert van de Geijn @rvdg (The University of Texas at Austin) Kiran Varaganti @kvaragan (AMD) diff --git a/README.md b/README.md index 13acd96ec..7653f3d24 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,13 @@ and [other educational projects](http://www.ulaff.net/) (such as MOOCs). What's New ---------- + * **Performance comparisons now available!** We recently measured the +performance of various level-3 operations on a variety of hardware architectures, +as implemented within BLIS and other BLAS libraries for all four of the standard +floating-point datatypes. The results speak for themselves! Check out our +extensive performance graphs and background info in our new +[Performance](docs/Performance.md) document. + * **BLIS is now in Debian Unstable!** Thanks to Debian developer-maintainers [M. Zhou](https://github.com/cdluminate) and [Nico Schlömer](https://github.com/nschloe) for sponsoring our package in Debian. @@ -87,7 +94,7 @@ the second-most popular Linux distribution (behind Ubuntu, which Debian packages feed into). The Debian tracker page may be found [here](https://tracker.debian.org/pkg/blis). - * **BLIS now supports mixed-datatype gemm.** The `gemm` operation may now be + * **BLIS now supports mixed-datatype gemm!** The `gemm` operation may now be executed on operands of mixed domains and/or mixed precisions. Any combination of storage datatype for A, B, and C is now supported, along with a separate computation precision that can differ from the storage precision of A and B. @@ -317,6 +324,11 @@ use the multithreading features of BLIS. overview of BLIS's mixed-datatype functionality and provides a brief example of how to take advantage of this new code. + * **[Performance](docs/Performance.md).** This document reports empirically +measured performance of a representative set of level-3 operations on a variety +of hardware architectures, as implemented within BLIS and other BLAS libraries +for all four of the standard floating-point datatypes. + * **[Release Notes](docs/ReleaseNotes.md).** This document tracks a summary of changes included with each new version of BLIS, along with contributor credits for key features. diff --git a/docs/Multithreading.md b/docs/Multithreading.md index 61a337bc8..a2630b18d 100644 --- a/docs/Multithreading.md +++ b/docs/Multithreading.md @@ -23,7 +23,7 @@ # Introduction -Our paper [Anatomy of High-Performance Many-Threaded Matrix Multiplication](https://github.com/flame/blis#citations), presented at IPDPS'14, identified 5 loops around the microkernel as opportunities for parallelization within level-3 operations such as `gemm`. Within BLIS, we have enabled parallelism for 4 of those loops and have extended it to the rest of the level-3 operations except for `trsm`. +Our paper [Anatomy of High-Performance Many-Threaded Matrix Multiplication](https://github.com/flame/blis#citations), presented at IPDPS'14, identified five loops around the microkernel as opportunities for parallelization within level-3 operations such as `gemm`. Within BLIS, we have enabled parallelism for four of those loops, with the fifth planned for future work. This software architecture extends naturally to all level-3 operations except for `trsm`, where its application is necessarily limited to three of the five loops due to inter-iteration dependencies. **IMPORTANT**: Multithreading in BLIS is disabled by default. Furthermore, even when multithreading is enabled, BLIS will default to single-threaded execution at runtime. In order to both *allow* and *invoke* parallelism from within BLIS operations, you must both *enable* multithreading at configure-time and *specify* multithreading at runtime. diff --git a/docs/Performance.md b/docs/Performance.md new file mode 100644 index 000000000..d23ed99ea --- /dev/null +++ b/docs/Performance.md @@ -0,0 +1,325 @@ +# Contents + +* **[Contents](Performance.md#contents)** +* **[Introduction](Performance.md#introduction)** +* **[General information](Performance.md#general-information)** +* **[Level-3 performance](Performance.md#level-3-performance)** + * **[ThunderX2](Performance.md#thunderx2)** + * **[Experiment Details](Performance.md#thunderx2-details)** + * **[Results](Performance.md#thunderx2-results)** + * **[SkylakeX](Performance.md#skylakex)** + * **[Experiment Details](Performance.md#skylakex-details)** + * **[Results](Performance.md#skylakex-results)** + * **[Haswell](Performance.md#haswell)** + * **[Experiment Details](Performance.md#haswell-details)** + * **[Desults](Performance.md#haswell-results)** + * **[Epyc](Performance.md#epyc)** + * **[Experiment Details](Performance.md#epyc-details)** + * **[Results](Performance.md#epyc-results)** +* **[Feedback](Performance.md#feedback)** + +# Introduction + +This document showcases performance results for a representative sample of +level-3 operations with BLIS and BLAS for several hardware architectures. + +# General information + +Generally speaking, we publish three "panels" for each type of hardware, +each of which reports one of: single-threaded performance, multithreaded +performance on a single socket, or multithreaded performance on two sockets. +Each panel will consist of a 4x5 grid of graphs, with each row representing +a different datatype (single real, double real, single complex, and double +complex) and each column representing a different operation (`gemm`, +`hemm`/`symm`, `herk`/`syrk`, `trmm`, and `trsm`). +Each of the 20 graphs within a panel will contain an x-axis that reports +problem size, with all matrix dimensions equal to the problem size (e.g. +_m_ = _n_ = _k_), resulting in square matrices. +The y-axis will report GFLOPS (in the case of single-threaded performance) +or GFLOPS/core (in the case of single- or dual-socket multithreaded +performance), which is simply the total GFLOPS divided by the number of +threads utilized. +This normalization is done intentionally in order to facilitate visual +comparison of multithreaded graphs and single-threaded graphs. + +It's also worth pointing out that the top of each graph (e.g. the maximum +y-axis value depicted) _always_ corresponds to the theoretical peak performance +under the conditions associated with that graph. +Theoretical peak performance, in units of GFLOPS/core, is calculated as the +product of: +1. the maximum sustainable clock rate in GHz; and +2. the maximum number of floating-point operations (flops) that can be +executed per cycle. + +Note that the maximum sustainable clock rate may change depending on the +conditions. +For example, on some systems the maximum clock rate is higher when only one +core is active (e.g. single-threaded performance) versus when all cores are +active (e.g. multithreaded performance). +The maximum number of flops executable per cycle is generally computed as the +product of: +1. the maximum number of fused multiply-add (FMA) vector instructions that +can be issued per cycle; +2. the maximum number of elements that can be stored within a single vector +register (for the datatype in question); and +3. 2.0, since an FMA instruction fuses two operations (a multiply and an add). + +The problem size range, represented on the x-axis, is usually sampled with 50 +equally-spaced problem size. +For example, for single-threaded execution, we might choose to execute with +problem sizes of 48 to 2400 in increments of 48, or 56 to 2800 in increments +of 56. +These values are almost never chosen for any particular (read: sneaky) reason; +rather, we start with a "good" maximum problem size, such as 2400 or 2800, and +then divide it by 50 to obtain the appropriate starting point and increment. + +Finally, each point along each curve represents the best of three trials. + +# Interpretation + +In general, the the curves associated with higher-performing implementations +will appear higher in the graphs than lower-performing implementations. +Ideally, an implementation will climb in performance (as a function of problem +size) as quickly as possible and asymptotically approach some high fraction of +peak performance. + +Occasionally, we may publish graphs with incomplete curves--for example, +only the first 25 data points in a typical 50-point series--usually because +the implementation being tested was slow enough that it was not practical to +allow it to finish. + +Where along the x-axis you focus your attention will depend on the segment of +the problem size range that you care about most. Some people's applications +depend heavily on smaller problems, where "small" can mean anything from 200 +to 1000 or even higher. Some people consider 1000 to be quite large, while +others insist that 5000 is merely "medium." What each of us considers to be +small, medium, or large (naturally) depends heavily on the kinds of dense +linear algebra problems we tend to encounter. No one is "right" or "wrong" +about their characterization of matrix smallness or bigness since each person's +relative frame of reference can vary greatly. That said, the +[Science of High-Performance Computing](http://shpc.ices.utexas.edu/) group at +[The University of Texas at Austin](https://www.utexas.edu/) tends to target +matrices that it classifies as "medium-to-large", and so most of the graphs +presented in this document will reflect that targeting in their x-axis range. + +When corresponding with us, via email or when opening an +[issue](https://github.com/flame/blis/issues) on github, we kindly ask that +you specify as closely as possible (though a range is fine) your problem +size of interest so that we can better assist you. + +# Level-3 performance results + +## ThunderX2 + +### ThunderX2 experiment details + +* Location: Unknown +* Processor model: Marvell ThunderX2 CN9975 +* Core topology: two sockets, 28 cores per socket, 56 cores total +* SMT status: disabled at boot-time +* Max clock rate: 2.2GHz (single-core and multicore) +* Max vector register length: 128 bits (NEON) +* Max FMA vector IPC: 2 +* Peak performance: + * single-core: 17.6 GFLOPS (double-precision), 35.2 GFLOPS (single-precision) + * multicore: 17.6 GFLOPS/core (double-precision), 35.2 GFLOPS/core (single-precision) +* Operating system: Ubuntu 16.04 (Linux kernel 4.15.0) +* Compiler: gcc 7.3.0 +* Results gathered: 14 February 2019 +* Implementations tested: + * BLIS 075143df (0.5.1-39) + * configured with `./configure -t openmp thunderx2` (single- and multithreaded) + * sub-configuration exercised: `thunderx2` + * OpenBLAS 52d3f7a + * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) + * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=56` (multithreaded) + * ARMPL 18.4 +* Affinity: + * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 55"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` was unset. +* Frequency throttling (via `cpupower`): + * No changes made. +* Comments: + * ARMPL performance is remarkably uneven across datatypes and operations, though it would appear their "base" consists of OpenBLAS, which they then optimize for select, targeted routines. Unfortunately, we were unable to test the absolute latest versions of OpenBLAS and ARMPL on this hardware before we lost access. We will rerun these experiments once we gain access to a similar system. + +### ThunderX2 results + +#### pdf + +* [ThunderX2 single-threaded](graphs/l3_perf_tx2_nt1.pdf) +* [ThunderX2 multithreaded (32 cores)](graphs/l3_perf_tx2_jc4ic7_nt28.pdf) +* [ThunderX2 multithreaded (64 cores)](graphs/l3_perf_tx2_jc8ic7_nt56.pdf) + +#### png (inline) + +* **ThunderX2 single-threaded** +![single-threaded](graphs/l3_perf_tx2_nt1.png) +* **ThunderX2 multithreaded (32 cores)** +![multithreaded (32 cores)](graphs/l3_perf_tx2_jc4ic7_nt28.png) +* **ThunderX2 multithreaded (64 cores)** +![multithreaded (64 cores)](graphs/l3_perf_tx2_jc8ic7_nt56.png) + +--- + +## SkylakeX + +### SkylakeX experiment details + +* Location: Oracle cloud +* Processor model: Intel Xeon Platinum 8167M (SkylakeX/AVX-512) +* Core topology: two sockets, 26 cores per socket, 52 cores total +* SMT status: enabled, but not utilized +* Max clock rate: 2.0GHz (single-core and multicore) +* Max vector register length: 512 bits (AVX-512) +* Max FMA vector IPC: 2 +* Peak performance: + * single-core: 64 GFLOPS (double-precision), 128 GFLOPS (single-precision) + * multicore: 64 GFLOPS/core (double-precision), 128 GFLOPS/core (single-precision) +* Operating system: Ubuntu 18.04 (Linux kernel 4.15.0) +* Compiler: gcc 7.3.0 +* Results gathered: 6 March 2019 +* Implementations tested: + * BLIS 9f1dbe5 (0.5.1-54) + * configured with `./configure -t openmp auto` (single- and multithreaded) + * sub-configuration exercised: `skx` + * OpenBLAS 0.3.5 + * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) + * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=52` (multithreaded) + * MKL 2019 update 1 +* Affinity: + * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 51"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` was unset. +* Frequency throttling (via `cpupower`): + * No changes made. +* Comments: + * MKL yields superb performance for most operations, though BLIS is not far behind except for trsm. (We understand the trsm underperformance and hope to address it in the future.) OpenBLAS lags far behind MKL and BLIS due to lack of full support for AVX-512, and possibly other reasons related to software architecture and register/cache blocksizes. + +### SkylakeX results + +#### pdf + +* [SkylakeX single-threaded](graphs/l3_perf_skx_nt1.pdf) +* [SkylakeX multithreaded (32 cores)](graphs/l3_perf_skx_jc2ic13_nt26.pdf) +* [SkylakeX multithreaded (64 cores)](graphs/l3_perf_skx_jc4ic13_nt52.pdf) + +#### png (inline) + +* **SkylakeX single-threaded** +![single-threaded](graphs/l3_perf_skx_nt1.png) +* **SkylakeX multithreaded (26 cores)** +![multithreaded (26 cores)](graphs/l3_perf_skx_jc2ic13_nt26.png) +* **SkylakeX multithreaded (52 cores)** +![multithreaded (52 cores)](graphs/l3_perf_skx_jc4ic13_nt52.png) + +--- + +## Haswell + +### Haswell experiment details + +* Location: TACC (Lonestar5) +* Processor model: Intel Xeon E5-2690 v3 (Haswell) +* Core topology: two sockets, 12 cores per socket, 24 cores total +* SMT status: enabled, but not utilized +* Max clock rate: 3.5GHz (single-core), 3.1GHz (multicore) +* Max vector register length: 256 bits (AVX2) +* Max FMA vector IPC: 2 +* Peak performance: + * single-core: 56 GFLOPS (double-precision), 112 GFLOPS (single-precision) + * multicore: 49.6 GFLOPS/core (double-precision), 99.2 GFLOPS/core (single-precision) +* Operating system: Cray Linux Environment 6 (Linux kernel 4.4.103) +* Compiler: gcc 6.3.0 +* Results gathered: 25-26 February 2019 +* Implementations tested: + * BLIS 075143df (0.5.1-39) + * configured with `./configure -t openmp auto` (single- and multithreaded) + * sub-configuration exercised: `haswell` + * OpenBLAS 0.3.5 + * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) + * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=24` (multithreaded) + * MKL 2018 update 2 +* Affinity: + * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 23"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` was unset. +* Frequency throttling (via `cpupower`): + * No changes made. +* Comments: + * We were pleasantly surprised by how competitive BLIS performs relative to MKL on this multicore Haswell system, which is a _very_ common microarchitecture, and _very_ similar to the more recent Broadwells, Skylakes (desktop), Kaby Lakes, and Coffee Lakes that succeeded it. + +### Haswell results + +#### pdf + +* [Haswell single-threaded](graphs/l3_perf_has_nt1.pdf) +* [Haswell multithreaded (32 cores)](graphs/l3_perf_has_jc2ic3jr2_nt12.pdf) +* [Haswell multithreaded (64 cores)](graphs/l3_perf_has_jc4ic3jr2_nt24.pdf) + +#### png (inline) + +* **Haswell single-threaded** +![single-threaded](graphs/l3_perf_has_nt1.png) +* **Haswell multithreaded (12 cores)** +![multithreaded (12 cores)](graphs/l3_perf_has_jc2ic3jr2_nt12.png) +* **Haswell multithreaded (24 cores)** +![multithreaded (24 cores)](graphs/l3_perf_has_jc4ic3jr2_nt24.png) + +--- + +## Epyc + +### Epyc experiment details + +* Location: Oracle cloud +* Processor model: AMD Epyc 7551 (Zen1) +* Core topology: two sockets, 4 dies per socket, 2 core complexes (CCX) per die, 4 cores per CCX, 64 cores total +* SMT status: enabled, but not utilized +* Max clock rate: 3.0GHz (single-core), 2.55GHz (multicore) +* Max vector register length: 256 bits (AVX2) +* Max FMA vector IPC: 1 + * Alternatively, FMA vector IPC is 2 when vectors are limited to 128 bits each. +* Peak performance: + * single-core: 24 GFLOPS (double-precision), 48 GFLOPS (single-precision) + * multicore: 20.4 GFLOPS/core (double-precision), 40.8 GFLOPS/core (single-precision) +* Operating system: Ubuntu 18.04 (Linux kernel 4.15.0) +* Compiler: gcc 7.3.0 +* Results gathered: 6 March 2019, 19 March 2019 +* Implementations tested: + * BLIS 9f1dbe5 (0.5.1-54) + * configured with `./configure -t openmp auto` (single- and multithreaded) + * sub-configuration exercised: `zen` + * OpenBLAS 0.3.5 + * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) + * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=64` (multithreaded) + * MKL 2019 update 1 +* Affinity: + * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 63"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` was unset. +* Frequency throttling (via `cpupower`): + * Driver: acpi-cpufreq + * Governor: performance + * Hardware limits: 1.2GHz - 2.0GHz + * Adjusted minimum: 2.0GHz +* Comments: + * MKL performance is dismal, despite being linked in the same manner as on the Xeon Platinum. It's not clear what is causing the slowdown. It could be that MKL's runtime kernel/blocksize selection logic is falling back to some older, more basic implementation because CPUID is not returning Intel as the hardware vendor. Alternatively, it's possible that MKL is trying to use kernels for the closest Intel architectures--say, Haswell/Broadwell--but its implementations use Haswell-specific optimizations that, due to microarchitectural differences, degrade performance on Zen. + +### Epyc results + +#### pdf + +* [Epyc single-threaded](graphs/l3_perf_epyc_nt1.pdf) +* [Epyc multithreaded (32 cores)](graphs/l3_perf_epyc_jc1ic8jr4_nt32.pdf) +* [Epyc multithreaded (64 cores)](graphs/l3_perf_epyc_jc2ic8jr4_nt64.pdf) + +#### png (inline) + +* **Epyc single-threaded** +![single-threaded](graphs/l3_perf_epyc_nt1.png) +* **Epyc multithreaded (32 cores)** +![multithreaded (32 cores)](graphs/l3_perf_epyc_jc1ic8jr4_nt32.png) +* **Epyc multithreaded (64 cores)** +![multithreaded (64 cores)](graphs/l3_perf_epyc_jc2ic8jr4_nt64.png) + +--- + +# Feedback + +Please let us know what you think of these performance results! Similarly, if you have any questions or concerns, or are interested in reproducing these performance experiments on your own hardware, we invite you to [open an issue](https://github.com/flame/blis/issues) and start a conversation with BLIS developers. + +Thanks for your interest in BLIS! + diff --git a/docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.pdf b/docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d60329805d0cb3ba422093a6814ee5918dccc7db GIT binary patch literal 33725 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

)JWjY6BaL}@rl%|k~m@CSdbw#4|ZSEcr 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%0A}1; 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 mU*#W{zp{lp`0qHv&bou6p}pfjMivMJa-!VCg= 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 literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.png b/docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.png new file mode 100644 index 0000000000000000000000000000000000000000..83eb4e92cc5f0e6772dd8dcc5128bb3821a547ab GIT binary patch literal 107203 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 JT4}S7{{vRdXzBm} literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_epyc_nt1.pdf b/docs/graphs/l3_perf_epyc_nt1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..12c2742daa65f6953015e97e3ce5cce1dc288e23 GIT binary patch literal 27269 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 z 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%0A( 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 literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_epyc_nt1.png b/docs/graphs/l3_perf_epyc_nt1.png new file mode 100644 index 0000000000000000000000000000000000000000..2ac4b238c60ecd644bbc164c5518965bbce35677 GIT binary patch literal 67035 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

wUU>^Vaiyunqc_YxxSfXM-?R%+dlEWqrk~sPW z&U>NmTqqG`DkTkxE%VktSNmNVaWpV~>S-WXs|@;zp>0{iewu)VY1v!uI8Oh(69mr) z3uEB#IEGmk#O)$lyPz_v*T~UCGUVf|UCs#(XF6QfY^+xar6JGtin8l6ehodovjZccJjhqt*@uzn zDiyhlk+WJSL9g4x=uMK?y3bx8ix5uWOO?&;+!4A2q81V)YWbhn%cDT#=udbdv4ec2 zs(^3^<`eizX+8>zVA;JD^sg}J|FsKRp1$aROjGlSwqlsjR}-hTupY-y&pTt5#53;G z~U~vA&IiXv!bPf z@>8BTk4UZxKfQ!_DlF}wR7zKaY!%J& zefH?vUScor)lR~0onss}ylXpR@YA9+j(q)jDjN?$Q}7|`h$QmsUTXx^AxNhG5G(T0 z)c&ZqYFUn+tmnhh?s0~Ukjosy0aOTi+9V)F_&G)=$1HQV*hh}FZWba0mb-WFLezxw zrP;yQIDP8i2*Gl^0TlkZx!M$GaA4mtFAQQ2*u|IXE;J;i;}ep~Ht>SFiKoi2a|erHMl$Gsb4;}b9m00_R?3gzuQrq?`C>yg zi5cR2Z*GvYmQxzXDwY_&adB>St1s3QODYogmBQ~I7#Ki_(Mr~M>=Zja;EE9?qw9oe zh3J^$D7W0#6wVHst>xuq=h_UM|Czs%u)MfPGaQl%fEAkd;v<|({xUyi}}jQQphX}kdFW;hO7hOZxnOVEiEqIuNO7a7;WW?Z?smaAqw8` zGOl(JGa3=yEIbKm)KA3(a*??s3sRosGQX;T>VXhh$RnBVbHogJQ{?gEh$PX0x#X2vJk^6a;++(EcYVN!QMnBeD#F()WBNQi8 zRp5O9OfoWpiv!Q{$ETN!khmGxNAN6-UEcxE@;)^AHo`hUOqhe0sRrL_vjj)lO?j#e zDK()Qsd(ffMci&Z>tcdE>6W67de*CN7K~nhQU*dcLATNj5<*(={)6CRN&5tLW{~I5 zVCNz5slCmwelmKsFYpjxIpH#vfh;H$PEwiA6{`~OA7@VRpa`|$)!ErvXRBtfmZA&H z;{?nfOX|ZhdK~p8|^ye5a?Uhht^Z-|2E0nVWys zx$J^$K-3wFe}_2mvf4nxYyMkZS-;Hg7F_DNMXY8x;jo`kpSS-vDAcTe+ zOjiqPV!X1}tP+==&J39_>r_Ptzg1;v>E_EHQ%vbdJRtYVdG#txGQ9WGE8m(^L9lyH zE|PMc-5cH>pY8j-5Mr>$uvD|&^_IwJPTzAwvj$#J^O|*K zxa30x?jKAGZAgoWi4x@>c*_1N;?C6OgunHjcK+>~w->I^xcjZZi##~>%a@ozp(K~d zGo#*z`^W|YKqaKCN&AVhxt z`5y$BaiBR7q{8r{neLHuCFq13u5o z9c$7Q;k*R65R(F%X8R+6K|r(}`W4~8Kw68^e`5Cy5IwH4(bJkzo^;eJr;UWx@G!0un=zPn@lSE>tyshv}I0)&_$d39|i)z3<6AC!K2+ck&2! z;;$pzMVs?v-%yk3`O}L;3`*`TvD9{<48I)RiR>Oj_D){9rG9c-L$j1Nb6$i!T7J+y zaEh#rrK`g=cXP^ny;G2N`wHX&=p6Ohj*vE}^M3dckCfbdlz7Bzn$Kn%;rLbSX1q{) zJ++u?Tv;P{YE=l(NGM7zJU11*v3w17LXR)>mAYM}&YF9Q(kU-% zi0>f1q_IHQRLDM`x^)WRA{v_HFdu16u;Hs>R&Kc$gwnImmsseK@3~&4y0t(^!SIVz z{MnAj`1-t1K;>~0G04Nh{G8%;cae~+D*u7p@`p%K_ik3=Fs0DQ^U;p0G&4Uhu}d!4 zIE(TTu@4%?t%gU5 z(X2?DU{_gzj9o$7YQZ4EI%u3J@TUe7K`P9&_MRM@T}iij9krNf)(h`n3%l*X8xs7E zvjgUzd_s!JB4oAyGV~xwCL#lBhx0paOT}N?G(>5ve7&xx9s!uAIQ#bv&?7||}_FGgzBVt7sE6$aOX54Jm#9A4)zx4E_{BfYiWZi*T z2kUg)ws5DtDGqTDSNY;#_^fV;^Sg`wy}dgVKNkW?H}2>SLRMsD@L<@0dahzd0`-j_ z@f7dUH}l-YQdE{ObH{YJ&OJN+kT6SA^BcQa+fL+@II~m>%BR;>m_F~V9-JaSHQ zlnf^cR-lDwkNMAi=a{kfrt2-qHDB^RRes{jee-+YmQK9Yr&}y}bD7~j4fE#YYK7(U zj5K@vrav*pbZ&2<*=USPouDZ+M=eWqqT|sh`oUnQkZgJtwC$|I@x?Z_j-_ti&@KlR z&2@2tv}>+T2m6bJ`qo8@PsY;KngnQ7nT9B?lyLhGavv-8zQc=pCkL8$B=WpYoSddW zbUD>Jb<}x=ri++oQ`O1Z((60LZM@+`axk2#Uu5P9Qq6IQEd)r40t+sbV(ROc^Z0Bi zZ=@fW>nn`z_z3=+nZcoZ8)VWdVw({M#3bdThAdI3&e9rj$F^u2qsdE-TXK&s9#W87 zV^)RT?MF%ORBPaWAE7=V(q^w@joGhA%pAlF9n!R1((1V_uO-mA&=S&iYO5dic0*04 z-xNJycdEagXL5kEs7=%FW21a}%#GdMvy35#yzQ6qyM_TRQCEfZnif~~Z--R#EncJg zQ&G{ipBz|Hx<;NYB`LGK{mJAu!a62u&FX(TnD!!Xt=vQ9E4|yz8|m5XWHLqh=H)d_ zN($KEuL45OXL4k=J4G#9m^LI&qUh|$TME^#)ez$$4XY~WWk*jZ>Jn@(0 zmE^d(&i~WlBrK%z>65j*w*gQh)3C79$N$i-SK$ZF)}wBH?e=1$XRFY-rzC{*?6lTW#nK>PxND&-ZR(jK7IzMc6%%F8J-JLPb)Q&$SP<|SwK~Sx z`_#}N5iM~Ekcc5ga&^UR%enmDgIZ~L*BUDCp6VI@*yL61c~ha=sVXoo$5(UE2?EpK zN?JC*Q*Wt$X|LM971-8EOVLoHJUHUe&fi&sjx`G(_L1XfQ0zmvgNccWOV2xbzI=bu zT4xqW9Hhf#dZ58R<5@ZSXhyzRP0FFUuD$e4foVOJ?%_KInOiD0=JF#Y^HpuCt0nQ{`nQ zo1F_v;_9VlJ|O3KS$xXkc(d*k93Fy%y;^ira_0nEQ1S=t0%eufYf6u9N3 zPDpi2?00loEuJr8!R?_f6>O6>N|u#xnVZ^tLqRAAr4d+&)vZ=aSUaA3(&@Xa5jG5q zqn6se-G#>vq@2WO>PiJXuts#$bLqH>h-LzZK2~9~M)E=k*uNEi?n~nxzfmoysoB|x zG7S*F!LRDo<_uY!d$NwTH0T|%srZb>WlB1K2lr5O&3;WynG_Wupp~%m^bKFIVtJqK z&iKYt(*=9DD5bv0D1HKa+@cIS9^A6BTV$jz8dlf>MjO~*@DLciAK%ts_XA3%K{zkp z!rA?x_Hrht2&H1dlOb&)92jffv7CTTNY!8q{jav-@wz?idH&w8?Re4o?Aec?4IsU% zPcBn*fsAy7_1GfKjb=MQz{qNjSo#OHFfNW>Ncv!a``jT#E=KQs-H!6%m85!NZ+$$d zVp9=<@E7F2I5!wx-bhy~;)(+=8Wb?~6pA^C5*{wd+`+q514UxYqp#9<_klt0D2k);v$$(9q#9twQBaEmuGkW3x%%0&;L49VTF&hNF! zdaj~0Uu_z-#GUiGaB6`!Zzk4_2A$j}k&6noD%$kdwu-T~ePDUQY+3%t09&MdWt(G4 zk5`T7spD9;(@HygEAxEc4X)9nLhas)%PTD8PH4jRKTD%{^Q8d*Bi)2#Nai>7qvg{v z`u&@gKcaTWR}>4z$QNq2t*beNocnF_4JJ3ssivs{+g4|+$_YJnAgc_y$zsl_FR|Ca zI0C6SFc`Y*t+pM*`D6Km?AIkI8Y?ABAlBN_($dc~Cj!>LzB)mUHnb*bH!iv3^qQlG z%p!%YNiXoSp+Cy;>UBmfM_4^+?(W3MGb`t_@pBP(5pD%CWYM^dsxy~asyz0c zJ$mzk(x!aS``qfzOj671zrS*PB$(P!zCmf^ZXKoh)PctXNXqHLP((W9d3bx257_MI!H({quP0@F-PmO+a=;9`(7z)$$r=LW%?{$QD^e{E^)0a!$9rko3GM- zS6W-<=3b6`&C$Acr^aQ-?w!`P0w1=-!&fKDFNwQ3S}gPaf(kt_NVOf5i-#V!d3GCA zJS96TR+Xa7Ir%mHuDT~teaDJEaABZ7v|0!!TXX>7oZI8FoBWu+Q_*Tx0SqDFeEis6 zolHYh0v8|YLm zSFA&RxL+LiaWg^%sSvF55v;cj88K;n-Kbi@BSZ|J)6>&guO_@=(AH2&6{DqdU5(A^ zcr^T=BCzFQqb=cWU$*+p=v@DlJuNakf0VCxMK$F``rD`8sqJGT@ONtNv*u{H3Ep52 zb{+dNKx~n`zk6td*L>~u>swAX z)mnmOsM&5yK2qcKIQGH)wX|`oRUo7LT~m2V!)mpxhi$^i*VwE>oH~bjjOWh#Q^Kq? zLAAu?rZBeIOY?2uLg9x;br}!rbFy>G2|sT6YHDi2A^-_b0WAqoV!o6GJ*IQ6Y(_Ra z-)3i1fVcV{iql__OI}L-g0u&9b}&?zX7Z!MpA*YoTuN2T0%*ieHQU!o!|Jt((ae`7 z`jmzbat*0I85$VA!0r zC&ZSCT%L4qWWUbvggT$)y0gI%66C{cG`I>}z~Fh?y@}eWi@TUlSz<-J?ikbIy7%q9 zl4Qc&esiT0#8XO}Eg~#R8pC6ogtZ>7Ys+_1i2c7`h;~J@$-5_&nuT8EAAM<}MQNz3 z`s(4PWNASaSB7oi&Oo1qi$eOBccm&k=(Z%Xb?hTHP$eVs;I@i?44(sj#sk=@D8?I~55QqPD%eh)KS)fAkTG8K;fSKAuj(gk=wtJ{GUx zA&E^sARS*%+Oiem@#|`Cx1|V9RmgYN9PGUOfSUSJl1!2UM;W=ys&`6yA-9{g2WzkMNhbr5#g zzDiBc$oc`~24;ocSW?N4u$WLAqQAXl-!Rk(+;^Lpy!oY2V|J0I2Iw0ul~ z?1fI=^`XVMX4)*n!})#BbJbymm9pBJnu(*6m!vN@ea~>^wO`K8h!t1tYA4}XBO|HG zk3eIY%2J0$=Ep^&*-o%jeUH?hh$)hwm|;NSHR!ViGx_9n^K zPW0*aIE`U#i$S@qF*G85?cuxeOr6fXp^>Q?aeQ&T!8`G3dTbv8D*JTT`1RC3htK_-FOnM#eYt-$p$DL?K0Z z#zZE`BrwB#Jm9Vt`)GKONqbLiPPWCsL~L$kXM-@}VS`e#yu!0heV5JS176;2qq5qS zKS*RE^QXe1SbZe$84M`>Kl}as_*2Iel8CAP*|6#SlV0nsN|q zFhzY{Va|FYsPjFbP9@Of*%3eDg>}97EaT<4s=BMcfmkw*S-(lg(%U1(UGazxUx8oB zU&mH%@R?c=}v0qwbA$bIYkW0*UaCCGs+oGF;-H2ZvqE0$kD-ff+*6DJYl&5 zkswO`Z>SJHT!|Rmhx%;rWaiB>)J$?jRhu_1k#I(8hNq@nOrICA7o6kpjF!Ji$KEUJ zujBpn{VC;~6E=?@-*|1jF!ue_=Q^A|2nX^seFYnf!=5tTzq;g)3N70rRekeIM5Ajy zO}N)Vl}ZK$k78KmEEjPnCE$&&B#{gNBo2zpKaf5GOD$w|^RUH3oV4D1c8{&C!}&7> z_;c_{6+iY*VsB5KuRqOZ_AGir@WP?dGP~m4w;QB-nA22oAOYQOAb(DXtF6OFLB=@O zq~18J%Ve0dT*-ux>aq!-Ha$+#yHDWnAuVIm3qI^?D*7vHwawu1Gm^R;=upg8*XLSD!Qu z-O{`4V%(x@XVTQ64p@h5)ib{Y!CvqpCC}C*H>g_g&wwqDaG=re~RV zzI1P!7!lxoT;{9EX;jZDjFeKJFnx^6RZaOmduSc>!B< zh|ry92URqqu^MV@iVSt&I(?(a(2DnZii{;Hcro8<%c3+~?_A(>zAVb+>`Y4kix>qh zb6IeL3{z-PnM(Ykhn9s_K-T8mEjcCCz%3 zf`LB1doZ2`lnvcVd%UCl7Z6hT%Ci3Pj^VA1M{zX;C1ihN=hCfs3cP&mZe0{-{joM% zIn|fwq18ho`IMso5oLAxSBzW?TCZ=d+0gZ|Z^DDra}tkt#5dVLM!lA0Lckg?$xM-1 zC$FxFWT_HEixfs^D1tN0AID~LK|3Q1gTwTJOo09$xxkP;#n9u|wK@HRGcznuH>tZZ z?jC6@^yBMU83!BCzQZ5zNUS^~+J;+Vuh+X0JXF%||EZF--KIWD^WoaG^F8q#jY-FF zVb&wiN6KAfIT-ALP#YJgX={PXpIBDyR)5F4$@mcgRc*y$f>W2slkA0O`_hE3|N6c} z-;q!)|191jlr-$)`imd>?gEM8?qySDb^-QacZKO5ChHt0b9eXZDd&QUTReW9OjGe` zr`SSSE>6)nCdPNDzh$8TLI{+uV(SZ!Mc#VqWQ(73~aMj)_<`wYMx6M~>flrus&qYR|-@?;U}H zc8klVIs9?{dK46!ky+rZaewXG?^RMa<4impWO@9a(HU20PN-^b-g;@1K{FzKb6ub{ z=JnJ4{kO`oCT}p8KLR@HUyO}RwTG-ELE+IscRu2a`;q_A+KzwZc~hvyrodk2q$fBP z2Osefi;mZz#b|a=>x?i;QRC{9E`KkNaEg z6jp{{oTi8A0Sqz##i)7`2H1(=Rc`NCV?o8{qZP2J@24fNH;BjaJe4k-i)CVn(;JYD z)d(hc4<-YKE`?Ik&ripKITibC+on50?cxHTiRVJS0vL)n=`cMNi>G9U#>e%00&eg- z>4rQ_eLPW(HkJZXmMGcRvez`Z z^*8C48>JlgDAD}9Nm^$l9A*eWKZYb&#>Vt=%1ehH!<aX?#y1i+mxxIyFo8F#YevwN+j$7p9|HYk+r!6xcv zGHq|a;oc&goDhD{uZ)K{VsI(+ERM8#xCY>}Al#qnH0g6n$v8>^`XbB(sAM8i+j{a| z6-1KT7rt7*(&c>olGg2GZ!8{LQYDE$AsFrVf6m`YsVug2i3GsAH3e_i^4MBl_+|uLBY3Vh!YfI2q)z?I>Zby@+8vnc6qX2ISoYS zki$*%LK9eLt*xt09s*bB*qfl@7YZ!GgApbt zp$WSpC@~VzWG5sIv9lZnKQ^kD&mp(8Lp%i#xR7Z<#r_80QqZ8`=|M(CRMq{`K3A~n z%x4n6Gf4YK9^HWg3;9S}lILqFmMgDVNT!NIxoa`vob~3Zx93pe?wg#!Et4AO-lOpl zq|tg^X0jKRve;^Ke|Si$5sUW0kV^4!G&|==I&(L_Nfx#L=YgT?nDw339THyMCmjr3JpX z%_i!!Qjl~i#uIe5L`(IDUR}8FoEvHcyyE?cakTI zZ!a21>rZvULbz080G0+USggLka`qmVLCvR$$o?p{dTh(c2k^a|OO<+R(gazKhAotn z4uGh7ggH}&9-rIeqmRQwOhIxj+nMMsiKUP7DSV&T;(^!`%0fN`lcn5Qy~a3MCO`y= z`ip~SRDp%`cM6=*g803%D7`V%Haw_w71Uo7!`O?54VRYGf#Y@*JA;~UrALYg&r@5P z^dne)s0CYL&kl#B;64(bRlhvP6SM{ixKE*0_*r&F2@fKB`CXK>7uQpo-#soDR%`lF zbQjjRsZp2)k1(N)t|E!&c9;2`;!c9MG2l7sgEvJQyW8VfytjIpef;Z{n`o!8y}>KV zf@mPF(A~f8?KqZjedd+?u}WQxRdn!<*AstKUF&$#jyn{(mOLae!XfJ~jMq2qhdk;% z>h`PSHL}H96!~$6(GSFK@6j})CzJQ0etBmc`KA!M+jfv3nqc?0S-4{Lo=Kzp&3G-q z3Y-i|Gcs!gODRwawe|ECt2~FJ7qmHNEM@eWq^rhbd1mZuNmK1BMK6-cO^qkTdVI5Z zn(D}E0M6;#0-byHvU3DY3Uf^6wvAK~&aCgd(CSy#?Yc0>X52s7i<*C^Ptr?ySQlPP zP|Vt28;B7?6U}fN;O|>3%1lq=orw#ZV2RI_ZJE-Cz(p3bvnhkO?^Vw-RzSJ@^OJ& zzdT(tKDBC_tIn?!O6NIEUgNPRG*13o?tJCx2Rn-V=2NXg7&D^oyKS!$KMCTjR~z&n zp86I$`hDIO_LkA=Sx*u_=jC(H@lVz!Br2tjC(4(KhAy-@Ot)7D>|$XlBn^^&q&5D{ zX+0v{eDQ>WhL{Y`@4Jl&XI{q0qa@G=woki$-esz`j@H0fx_cIQ)mIar3GU%Qjg45| zn`uG!cFb2Nj#LoZthzWKAD^$q*p1h-Rp6|bXpohx6jHEE0?OH&KX0s$i;8l=j$XfS z=*46x`O8Z*lsPs!ABR&_aCg<~ z`M&GsIyqkLcJ;zyrT6`zZg^3pF4loG!YTau8_ja@4YD}rF+V_=(!)}7CVM!aI>;?_ z7KeBvAUgU<1NUM>%T1B|88^#}pT#f0Ng%lcfa!TjftVib* z^iMhkiX_yg=je2w7?arMr_xgIl3mWPi~3w!VA>?e@C;1JQHf3p+q}cfIt{AHS5$lEQFjb6FysqRWhEfC0%;GIQqcMhNDcou7!bm-;Nd)brwJ0+N2 zK4+ym|7a-G;jJ@+;IBr;V0QBLyPZRCWe%#m4)=vt`y^=qsY~4Z!rn-WpCBzUK~4?p zJ|tn)cJ*7K@&jt-%O_a+T&InzM&EnK-1?a7(`}?Qbp;7-)78MjaU7{`c*3Rwf;Twf z0f@3iZM0{1JvbTeFAg5R*<{p6O6!ke$uZQ%4=d0x3=Q~buz%{1epc%33lfL%sLv04 zBwjTHwh-Q5Ql}&=`4LH}#4$M}kto+c*3!@XQJCSezRN|;3&yao-`D^tW@zxNWIgcL z0agn8F$m-)5V`l8W%gEuYxmRH9^5x4vdjGZMyrFZH~0Mdx0W6!-hL&{71Z+3`Sqe^ z_Jz$#<^3`%GI2V?x;K;(7+tbX2?CWbM5N2Bb2&E;)1Q}o=ucubVU2WM-PxE^E$((N zk8$3VnM_!)WIWyV?xv<`4#A>x&Hj>u{;4Jw<;{vE@D|tDD))FNW$_S{wDHpl&U0^0 zeCSGKd_N+_nulO6iTZ%qIJ#wr?8<08R&K(MnTaImhH|@AIJ@erR~_RNbquLP)4C}- zOpL28qCtfP7p@3l?1wT5aZK#Bvp#SHFqnVnepX(f!>!*ZaX6OL5NLG1Z4QV9*Cysl z+2Rsq-_36$yGuMKI_>BR>f#}-e>zaFX8 zjSjxZZI~j@OV@Ky7cIYa>85*H%cLQ8XVdS&qssk+bmsNi#gNfJN=KHEE`LJ1d~0-o zVYpF2BGqVM8|7{Ho7C>Op+a7mThAF#3EmD*q*N)Mm;-T_odP>O+1BM-DGpC+TAtbj8T1($SUnVtyGhP^+r0|*ogHRzvmb4 z?$lsw$~5pRp5(2U-As;_6|pRRlIv>z)V3~vWHL0hSH|`US7`Ak#jO6N-fm21ebD#u z9JCT)ZS&Mv*p;+|`k0fHy*y0q$Lu^>CNalGCASr&lsMfiC}+@)`cO*UhL!8j=0vaD z#@hO%=Yq6D$Y*v{m!PBznAaz7V9HE3zttpSb#WIx(-!L^_+mOF_EeaJ68K1!HvP}8 z4v9=PSnGt)D_Q>T;`b*Ap&eFe-5cpt!)<3O+da$C8(&-6!W7*KiNF6nQGkrxkSmii zpKWuj^HJ5-#uICr>7NRx_o&WcM$4W(XZ6<$xtx_S$1C>oLvZ3{Hf=+h2S_eVkkIW0 zU#v8ILy<4%o4uz3WIEx0MG|jAJ#;q#H21d+>5AEA4&lU|t~MZ^e9rcihQ{`{MXxwKtB&Q7sGKtPsWi!jxHHklaLWXwm;Y77iHzS^=krQUo>wAs?(B2 z;4jMYxmQBjIrDCA!=mw$j&_uK9HF&CP>@M9rQc-w0@GUi|C#xpt-tw}Ox%F}Hw^-G zv~fO<@`38NrIzAAlf*%PiB#18(dI86t6)FQ4nBl9)CUSF5(kAbEluXNyD1GPNf;Qo zfu{nT_W9~<@GYon2a2D2*5&sy@OksNCIiFrNl4uRupy-RI>pmiO4|)h{IfC>n~$WW z^%1K=s_gj(R{}M?wl=?~$xkqq6|-y@LPpeJ0C?ihC7jgm5{rNskOUY=jz|2ysR{7 z6GWZyw?jkrHI9LGpY!#^k?Sx@WfMUMAXyj$Puu#1mE;WgP2d9zV#NL{aVB&nVfWv1 zW+&GU(whG*XSU^eNfnS1>33s}yC0gro|xt%{pNZvPs?ti5$}?um)MIfI_A3jUQzds zut~BkQFZl_^FR0%Aw}l6<0-_LZ&2^$GS{Eg1SQ#uaqo#nzot91u1pAllDN#}A{iPH z@h9(mF?}wf5O*0B5+fHq0RVqb7P6BiTK)lxZtrZ*KBy@?rxe96U*l^pYYSCwDmPnO zTb!pkuX-1ZU|Xli*b3_a@u@m&|7Eg+EHW%O;NhGvTU@k)B>WBkJLeUV2Vwn{ zH{Tra)+~9_H;ur(2X0Ot{OL;r;1!0tH9|Ipt^JWP3yv80>&~l^1MYqtHg{>k)=3lp z)IW`kI5u%00|?M%OFcGSrTA1|WY-V`RnSh~=+Eqag#X-;q8X`HgKjh@B0{E=RzKP( z2(&_a`aUlvXKC@+s!NaQt^P3MBMV?7Q$OOQ>7;AIS#zb2IlC(hBc06*aj>vyFa_lt z0~hSeE3a}8H!Sk?|GO*auWv|g_Gn!|02!$BipYQfqcqZBy^Ifj{!`t&t|={1s`2V~|cd*mH%arjhgQEm4RW!+&$< zvb;KD2?=~i?9I)w?pBHx5hP1;)|=8zRoB1wT2exB)Jw${Zenpk z;P{q^+crBJvO0AYE~}}Uwzto~ivV>qiJV1B=g*z$cJ*58kpZ`v&*PwQFUd1>`RJN{ zd3)!kQ}6C`1wwYV*{~>or2b%|U<$oo?H%BKxO^y%phm;(M?-*TjG{Q z0c`ODr5@nXt${c@Lvz+y5ro+=)6!qIO9+RZWEBiItUR!Nz z?t6ot6Mhu_T*zl14!A7DOmb#$L~{R^@>E~)f#bjYuih)CywCqmA$4u!OGtf;_C~r{G$$m zIHzyl0b&f1kHl#~sHwne1(E8Jp_$J@cG$qKFe%GBzzqYthQU zAN@IjOCuO!gqU!c&=0!A0^xoX{Bk$i|kLQIAGH839dcE6S1YD5cE7y{DLcfVz4!l6; ze)f~i;ie6p#7YA$DYOCwm#)x}*%!{V)a$kZ2Vr<1+3eHFBipL~;h|_Ao()N7uF1qPYQjc~nUaTBiXYFZfsEA9&#Q!uX&; zp7}#XM&y~t*co|fbw!QJ2tyE}{%VRk&;&6+gZ3W?nkR7_bJqm2uuYE=9Ad%ot+c*Y z+1*#FV6_g$U5C7`udZq%HO*T!2{4i~yFFhcXW9Ol6UgKf{&h_D|EKoWzYFRA6TfU~ zLl$z}&XF`mk#Cc*3FL-w9xpJyq#+PUZ7}A$Xa;n3)cGCj$f5#sD!y2So=j_}txxME=10R$R2P2sRu`^tokIIz&BtC|07BX#}8-Fgg4eGNRJ`IJT;eYw;E zo6p8q4dAq)Bk=^ zORYll5CBaD5KrMKGdS0E+TInpzh3UvmVHC6Wbsz04b9&U^IUZ=*e=ju2W@oz)qQ^y zebi@d^2@1m7s5dB>8DQf%I|9d_#IDDaLQ4{o1%yu(L+h=y1i>c4x_BX?%SA^3x_T$vU+N^fD0yo8Es-1h}wV zYyxllTAWEsMG;rK(Zq16rB>~2aOW=41e^!}4$KSVN~1tHLy#7y#IMB_+P_5Sp@t^l z>1lGLg3$tsB{~C(-4TFcdEu+??HF%EdW^7TbU z#J_*3H@gIxvYLh#*JRx1vCa*_kmKWl*%E|&8y>A?&VUK9?s;;`@cT2$V)_bA!$1?l zsrZ?p_p979%J53vIsgmy(KEz}MlzvnY`Wvx!3GDOY0z*!m-rCd>?^>O5R?VI?A^SV zoF#iSavZQ(sokaovER)C%5rYn84xnCQ8I5n>z(qpv;^`$2$3x>pNHopkQ8LnDOAKY zw*sfufhDQ9jOK2-T8-9i0Q%pePwoc$o#m$(6y*TJCByB4eF^OIYnz&%PVlbAvvKaW zxJZWD#5tw4O7Q6K0Yk{LMc%shM${y8Qf>2f)$d`{^P6y1&4S(Z3v_Q$fWQeRxkljE z!RGtX{W2Zn=C#2ttTgjUvwQOG)5V%uy-uD#gxnbt z>4kpbW(K~yOun#ZXDmPcstRvukpapUBNS4P(2^j>FVlx<19sK#>||{}4Fxb!`lAT% zJS_g>>{o63FN#h+iNc?mF@-Gl^2gxRALzY!Zyx~Kp7dl>cZN{&h${nLP(2V^K%xcC z|Hd{OVBw^CA-CUbklgf@&++y{V2S2#h+(u*%j*scsurxTwuk#$Mn@je*eZ~# zA#_MExWd{Fv|OkQvmOk?Dnr4oPq0fCU=O9G%I(n>(^ zgTR5J&p9i};n!Tadi6TVGDXQIVdLW9^9*w^@eR~lM<}PO0ZL#vS62*BF_1fT5d(K8 zIE8_E0HAAY+%NOX2&QMZ8+l^<*TH9QpTiU)UpQj42zE=(4(N9SRt(SPH>iB{fn)Yg zEh}GIt?=G^EHSnvxcTc9aE|Bx>?mH?b(_>~Idsyy1H;Z;VaKCxe!oRnVxwREn!us? zg`ugQ@d|np-qoQ>0nQ^UJRTt3ekzS(9=|VSebO}|GZjdoKlPxnEqlGnPTvPC?91~b zK*&zn+_G&gcJTmci;IDsI}n>p4M5pAN8xbBe>oaMf6Zf9m^llOH= zlbLOWZdvNuhDa&)iA++@E|y1&mSX^ z?`1QOxTmQpS~rr=?Qor8=*~qUqw;$sXWtACS{Bq^Cq*0Ze}CJn<^xrPp%u)g&_@Z8 zmb;gP@AwUos$rcN>#7&p(%JCk(<3)@?ZO^EeyrV1+;){p(A26|EY;koQ3MZMq-WCU z@fmxKnDDbzr|m0?NCX*J-COz(j5)0x&cT@*;we$qd(cA^>H^(t!@G(Ms=I=#D8meG z6p96p3v)~`WRb~ba(0N{$(gMhUlnJSBLO6;d-&JbclRGKyU+$zd=T^qY*ro}&-rNh zW(y=OTAW){(UXr|?822|$xMBW;6b&w%in=Y%(udllD<_+hPj9{^C#GX4aw_L)j)Cr z6h{H{)rQnt0zuq(dZ#P|)(;~e9S8}#XAt0?H&Cffx|W$Bo`zH9c2frLp_bbuBo5yz zgb24!4wKei+YBz-4!6^fniTe7pR^`aPCMNfcruQQIJs;2bnn9yHu*ca!DjTtgmDZn zKeUCS(Hvbbb-akvteTxzsh;m7{x8m zz_K~rouQ21cW_PxU+2UQK>5~6vX9U=PcXQ+@F;SGMwWeak75C#`n8;SC3E_gGH+BmL!jO-Y${?Gj%a;p6;4iRYqkLAXIYmP$^ z4y1Ygz6VjST&sVbbvK5!VBAkoIFj*1B;(3w4PbI62CNJ{-IvXAei+kvKhHpzs~|5< z_xAXx3o>k%B}Ufwx-g?>F$XxDFKs?t9pmKhX1&QM!nH3hjxe^1yY@X#!*gcjtku*~ z3x{z)O#enb&%lybKxA+%5Mu#7o(5W9Yu{84S!0Tkqbki)&fs~nahlmuW58aB{M^ay z??w9eliDi?PPDVCoEDNQ3FFhMLUEzTHA+y4`i-113+n9>MpiLP9uA>q&eI-}Q;78T z@-LPxYjudkgQRgzHbv%^^UW8C zHK(7=o>2#T7g-E}_&7cyKOOEqXSd+vc`VoD*LWsD!V$G=8A$LTzv}Z~McVxV+3QwH z{&0gBR)~@8&*>)Y#1xFmJsQbTUqSmu)GiLp-^`fy%RpS~T@h8!TNN`dwDh2Ap57_O zBI&INe=a=7Auc!_OfpTO0_Lv?B3I58Y~vJjo?-^_`v~+u$4c4Lz)?PY)p^zDhn-O5 zhA_X6NmB5DTCQ8Cf1@5xB4`spaCLY<*hWqM#_mVzzFooAX`P2?U@CCQsfI@AAe7f$ zt$lSUwLhTz5X;~GJC<3YPsl!SJ$6UDEppPSe(O?X>vThx$g#|QbAl{Mbjc`_nUmWB zH6dH*i6~czk-R!?qki*b)XzGhd3WD~D{Xld5$LmQ9bP`3p7ldlRe_%a@&FSP8FRc# z(OjF|8E)^!NzQzUvM$xG0&V0U095at?(c{lr0W|y zynNECR2+UK_<3rovdYH1w9xC&z;wiJHft6OgUlQj@m(Fy!AH)*yhg>pR4^3UhBoe* zkmsdSSXnL|JH1<7bLE^*qvJthPh{*Ju7T*jrB`2(WkR*LA zf!8|_2iw>k8nzN4U zylQHA6o002du4`gA{9IMm^YU{3?l!JHmi@X*;a1%pYe_I;~Wr|v_Jjc%3sz{8MJsn z4rxKhKJ1$^>L#!6){EK|3W2SYH!{0G%#JASL*`P$pdzQJKLF4%dIJXyLGYjNKy~@xn^F*@cCk6y_Vn2ZPuYM?%e`c zW58S(^WNRRHZ?txZcr`Nz%w~>-n_G{J%;qR@ zT=sFOWbJUl+&tJT9Zl-OYQ(u@!b0GE$xOL` zxc8wlChlg`Gi}Jt>;1Ns?}Irg$o~v)3nRDDsEACv%96FUDE*Dkk4+1Y!bpE_e-Eitl3a(>X(KnPPS=Hy#K zU0@=hC!;=3Nfj4PVhBc-1L3WQX$JvcXU3@F{#H>^&ypO^U6jI>CKC`zf+xGlc*!t`kIjmuC;&K zdhUdTczApn6MOKJK5*M=rvtT@KRhxr$>=0B1dk3R(t(zi-_fDtzjABrV7WYWe8=?g zYZ&EDIS9af4A{0RoP!``)A9GD=gAXF1qvX09)eY)j@MlaY$&KtP-Ngy`TZO*+2;^o z0}*NPQe@@3WCVY^!Dl z^q))L5#nO}Ehsfb|N4cL3hSdi`oNcX?ij3Jm~+%$8TVGg;RV7qkLHO1(15eIDocQQ2b~O^ z(~D3gfJA&udwftxko+dqvz7->EL!||ZFGfwAK|t;P3mhH=p$P%>NJi5;+7||ZZ;Mg zi=b@>y~U#>P^|=>=A5Lb^xnj_@M86NtGEAedZ}sp+Q`{1k!fV+;lf{c!eV|&pnZd! zeKgt==zPJ$!eqyQGY?7oIQ6VvR{_V6t!2*6x<&c@PO-RI~2vNg9` zFBtT}s#NH|$nKAl_+hl<0Su&e?ShM!P0@IN6)M!ws&nQGO9? zlFb*3I5a+i-R?y+@JIdK)k6 ze+d5{x`QFjI}_R+U#XoVJcO~HUH{Ki>Og#eo()aNSjF%gFtsPTotBxI9KWYV^&6~y zgrSY|IA3(fFc|lkCvgo$*i@DNZr-UFjFz3Fx(&c;Ak}1eU1pSlTTst?+T6fEIa7`P zj+j34c=rwu9@$*R&B7QZonY~MWB2gf4%j9n9kndu?3nc-HCX;elRfy=UsVTqC*aTn za>h`(hT1wb7r=WLSWkGPciG&9g`YXOHh$Birs?^#tI$ubr~6UJgx9HQQe(b&kq6cc zO#P8h3FT|98ouB3`6 zvTE&5P!KIpn|=yK;MHTC_9L;0sI8mUDXo(Y@OftSi6G<0yT224%yYcu45_jV>|<(i z9>>gcOuO^V$`mOnf@zuHSe4FEUrYEjXgj-z0Q6zCAbXMmP)4CS4dk>vL+*G7CRxB2 z5IObZpz%|gHBH*kV6FIbZ(mlzsfK0GP=z zZ~q7A^&H`TO0a6+M(VPE)}v${Kl+m-zY1|kk@?5Wi+rWDSa{a^C~R$qfnV@9xxVlf zy+TXj68hkpQ=Q%Ct6Q#O0Ab3QkZS|AF=B8HJPWw#fL8$kNjN-4;`RL;- z|7du3>Rs!apc8_6@2k1YwvR6)6;ky3BC+gPr0W9+Ei#z#376GkQ zMN5w~2gV+LdBit2=seG?oQ#>lmHcy{3=V1yWt5V1MxWy1vW!XTC?ywcJgTbW8`fev zZOobyoEWeUEI;Zjp4it|DQ^s3R4(ZaZw2txsNYjH+@NV!dhJ@3|JCS5%=vLC~Yy&>{d(H?^V{JK4B}-J;DAum!4}f%;91vv#RD= zVWP2YBtn&n|MTavqWi8rd}JU|z6^LV;bydU*Q~ohbyhOCH&jMT_-1m%2n&-4fBV6( zyO)Rzsvh@s0>*%l^WeT_)@?1G#ORJ0v87w4v`_Pz&E31tRVosZ96GlO{=)3R9~^+) zq{ytK7QW62cAoBgYS$sBy+b6Jc2y$o)H`?s$Kh&5GU#2VKzyUD&? zKp_D@7rJvqdmDhQ4?2AQtVe$qv?c!`o{7wF@aL${N?d%F|3=Mxp|)G`d{+buX75rA zWH!VRs%e#_v?paZh0Z>zF=%aVmBk0&|GMlqim@tFB#~e%0LTKcFXy_`%N@}Z6IG7B zAlw1H%3yc`o4amLE>M9{EJNU~1uLT;A90Kvc88xGI4OH2ZVjUN{x3S$QDGhJbi*$mShf zf%}p)unWEvf?HCuQZSD~r6Ac$U=#_R_x|X;=2aes4V*lCkLhHujP4ed^06<9d|j8D z_}+!KsJV}i6-9j_4g!E`FplhA@PH=O(yX+5@Pwbr%f#f`yz9}1?-CEdn`G?F^Vt_g zOZLw`eCrh|OfM-5iJw&hksEBjA;)olQ7V^X)s+ftu>cK#M+t((&}jtBg4TnY0b8Q5 z9?=2?z;Ddar}olFlBgN9W^a5aYdW=eF*G;QS3^DSCgbhKT^}JpchP~@$TPhz1B0*` ziLFWCV}bq0w=(;amwuG~hm|Ux@PREW4;o<`4SEmaIZQ!<505%<*e?1xrbcz5j9dD3 z+jH>UJ-mAi5NjZ~(VcetWgAl<155>J;nd324$E?)h)Zcr&F#%Jt{f_-+_eVq!vn74ps5OM`k*eP)rhtihUQy=clm$Z=?&b&Ux3e{ zE4BTZ7-I`jlKQp%4X+-vs3WL#u6vonT}PzM=t)dLX``SZws=3%8O&dxxi*qlQFe5U z7NO7|^^tK9z;IAK2b2`i$w!A941pszg8^&-Em$~+|A|AZ9Vx-@jwnQqr;lj;fo*$` z$Z;y5MMV2+?mKWKYYel>n0%|S{t8p7{JWa3`AZhZtm(tgwh1c*9dAhi{0mnH=ox4b zg1s>K1R)UPmE#dK0PQH$>Y&pCk8(K43Qb6X=m{lz;Cc=ojMxvRNG(xwZBQLYO%csj zI09O}{6Quf3DEq$nj(NQOJ%Y6<`mHOgkRHq8 zGPG8JILhbGF2*bW@<{)0hVlGlU-K}poBzYuvHKzrGV+M`Z(!G`x8N&>1un>^(Hj*@Vkeq6@N!q(Y9s!oq)p1%fFV_t`fWORsM_}izZO=Cd>N*Qc=GElFy~J| z?!ug`|@3gKX~5*v|~b{A&5J_pRggvmMm zn+AI$AP5p?qq1`un6Thl79I7X;3e1V7a-g`p?cxsbO>gI-KoT|OKYpLqVDRcyDp zhnOsRjtBVu_^9N{_Du}jjdqMLU3vyKdQ!)_-T}KTV3xvHX&>t~28trwDpDbn}iF|esKNv$KW&a@H{V2e%Um?^~>8W}O(NCGa( z|8RyZJG#j|X|C-J(a-{$= zVc!c_R8Mc&zy2@>^v}S_j{%%;R<47^+|CCRl3l+aA@>Ep_el~x-{HIkju9k&;GwdY z2l=0lP6IfaLEQOLl8Koa(ykVw2_PsrSaTAICbR5PMD*eARIbz>%d?0mp_8hoiN+kD za0F!bAyeLM^w7|M{?@Qf#MtKs(ee3=qq6MA?<$`w&fSJN{IG2-ZHYm;21a?4$S8e7 zLqNJL>u{!mn;2_tq?P2(*S{YK#`CsVArYg1U5l~xUoYW2>?-+t`qGNtrhj(pU%D*x z;+BNY^)QNG+EfEx1}zwb5JX~+u-=%Let%i`uQ&uufKz*-VWHNM_1ngWXN^$!)xTyW z0XBhB;0M0`D%a*M_z5SSETTwLVguV=B9?Bu?DfBf^S|j0MFPp1_M<;+Z>y(RPR#Bb zO0dTt1$9ixwLr~Vf#xIoy+ZE{9Hm-SVn*K-#&^uxIXP4Y4hiARCeTZMovp#Uqm^{; zI97Wg*2Yn^#VRKE9DAmei^H_-8tLn&pR-S~lnk_LlQ4EB+pXWt_-s32NgFGb8@N@h zGF4QEyi+-RHEXTjW9m59Z7N-<-6kd?-xc`-D3ll*d)V$FW(WE+cytW~Re%NnXf33x z^o$J(1C!(q^LwhWjG>@!8S;xhRxfM`m=duZo4FgzbYBz@K}^Xawk`uaP|3DdzJcx&gB@z z>w+PDeA0h;=n?riuxB zCYoeBn5nnn*RqZ0p(A?+6jetyu=aOdBpLap+ebe2V-Z0L5n>lh$MWwz+&>4vn#=pu z7t`AMmYhszW(68z>A8-#B@aA4eh2?Mc1M;w`0+iaQ_&Y-5@lNK#)Yb-W+AUH%52w0 z|6)kCAt2OkhIZ3>D7WJDy8L*f*}V%{sLxnRvKX<)9s!*81t$D(b%>a@Dlw32{@*lb ztf4zwL`~YR^kK9`xz)hKD4qzg$~4!Yl3erhov%TZHe}e}c&&T2=2k*zFoSa@!bDD@ zN@H={b-wsD*Ih+%ZC6(Ndn>}>S}9ROm(6wj7+KEJY$p->?pDj%+RkhL; z@)Bi_SDPo?nG{kh3%7GL`y9snYq-2;iXQ9FD@nKc{G#&6mK;+HE^t#0ObfKPGvs^g zIC6JH<%GkclbNpxk(F!zEW&8q_r0PJuH{OXa}B+#7b7$ps>193<=xVXv})Ex{V`GY zMxK@-tPAD{ZmhuDQBGxeQI$FlYrdB^n)Ftrr9a`00xg z&A(TPoa>1-slzBF^5bWZ^YPT~@0D7W*oqAW18MBKNLD7)=W2N!SyE39n2gIx@yoW- zEa(z|Ph`y?rm6Tw(`4)Am@*HFvXF}QQm4+_addR$@V3uQ=AVp7)pgBVM_>|A}f@gRGKHr+z<(Y4D&%v~C za_;Uc1?CS;tRW^?L#j7hVIQD1*>fw=F0ksgsU&-*Q`_6mRZLtl_m%Bb4auFWN_%U@ z)8&_&->T>eXR>sxoVe9;QJH_V8=3RYRqm9g1Mis|F=}%^RLMKGhpEt~&p7t=ET1Jm zI(~LPY`ToSqGihI=rGwH3nLmj(JJ;gkK!4+;V#9cD(BD-5PU%s^FjA#nn`fvdK3#rTCX16I$_PDv zv{z7)JU~^C}R08g>sX~gwI)AoOL}pui#D^G z`bA3`*W4fJxl2b=25T0xSt}_O)cC8ko8?A=R|uGi@mA58aU6nBSQ(iUAHua-q@`C% zEp8xh#KyZU&T!#a6R+P1;itv1|0iV8VP( z#Q6x$fb8NEu~jdcrx!n+)#)gCX<_$W_-%e+)$jLHpKh~sh<_&27atte#rdoGeq&Bm z?F#v9x`sbOCuj~Gl!Cx383aIL(^m3hhN~R(>5o_}7NKvKFGzJHs`#d-TT&zklq2z5 zl0#^Uw$|LTo~J#^XcNDvBEiuqlPS)Eu3MDQjIUFckVNfFjOTwMVv%J&(U zG6#Jp#8v_zG`}MsKL9i>D1WcaOtW>}r8-WINi%$qG<#+GjTpmlS-s#fsKYmL78@=h zzxoI-T|ZG*H}Rtik3*uJJP<1Az7te(Q%Gd!(@ zentd~=E~9BjdA0i_zu>5QK#RRwOk1Ux_LuOP!$6W`IvecPk(To;+Q9PSTq7D^R#yLUawe!oAM!(`m($fXvIbD?2-TO#QK@eT-DD zWNdpy2oH(cB@I78Dq0iWRTt=SRd=-MKp)!G`Sk-|dul zy#73yT4`Jdr!p}~$w5#cvOFBwc%X3WzKqN|{dX9nq~E9P?CiX%vumC%E&|m-14-_F4~<^V&Ch=tKX!)9#m!A9 zu{9DSvGm7WAkXiVAj;lRQM<@3c&Dh)o#MDmTRnvq3+Gm~gYTNPiiY#$Z!UaWxcVvm zGw;q#SaWQxIB_j3bqV5r+^VK+bP;g)^QP64qq@?WL5?^LSt)8==eld&lfEQN)x*D{ zF?s|>vSQld<~}rY12z0nI|(0XjQyf_T6JK?`Ubaohd#XGxVmOV@iXF_&mqn8+w?+F zViJm5p4nf2U@XiRv0+Z^g7>e&XqH-v{T?hpn9AzSaza=H;bkfF-6gf+oMgG~3*IbP zk8Qm;Mg}k!jOo8cl!xeEX*gjSu_HTn(?rGLm z2Yq9dTi%@o^_(g9QxrW(8o#V`Zg!}bk7!6{N_iq|coH9T#seC8DJ8nIjJvR?DEPqe z2n#tTwC+LVTH#Gz1wJ4-JS+_*Wmi?cn4qY@pN< zR4T;WDzVIpP|y2dS~{E&0G1W=tr7Is0yP_~n?MBtX zQ|IG--r|-0J|qx}_1~#U({0&oRna;4>cI1TmF7?O>IkepS)(@a{oHJ&cdEF+O$fKV z8~1l?Va`JhR6k!Ku9!mTKLm?}rQ z3Rk+Nhh1mux1d|`iu{5%NS<6v3XA)>u!_$)ss=)0kDfFKSuF4x`zW-V$Ee**N`7Q{ z`XtGd!EGGEBz{cz$eZRWgh@mA@w?nYbbD_IyHYT*KGs@VkmmAl-ztclwsvw-g>LD0 zbAj*YKk0ToK$DOhZ#N*wHNJij(-l*|EW7UQzk7l3h_ID!9Ji#-WG39INPKiP24E7V z&KzwmWy~25W@P5N2@Gw$^iK8U9^ND*4_h~5f6ljMjbJ{;p5TvFS^6qx{Ie;9sV}73 z4gT9JAQkmq~jQg4s*iHc-cuEp`!e4 z?$3AA{B}Ef7AuD)F8B&wWP!uOl___~IM9E7$tdu^9jK__s~l{|Msl|^x%F@`!41b_ zrCpljI6k$^IrVX1FYORQI+@|r=d_oTOT;3xH8=;{Ej8C2?WUO+?GrN7(t?P88(vf7 zHuD-s@Wsh%l_td~IPO08^4a-=b(S*e?1x7H(`j>ab8G`3#PE%oI7yK_Y1iQV*&6KW zaYjd@Qg2wFq%*@pffun^St4?bUr@lL%Ul5V@6SU^(#BQ^_@3IMBz$)5AHJZNE~Pm5 zp7Xuxm=SnbD!G-1ISaQXXm-6ISxFW)oI-v2??k zIh^{8mQLK{7DZSPfU$?s=SXw}#*inSpP)ORo+F{*clmjpgrrd;Um-Qs#OVYd{Y+V$ zN(h3Qq(t<-s!qr_Pn$Ett<!PmE@_{59*1*AB90u5wyuKT!)x zAyRXx-?SimfFElJeu6~sXseeOH|rF=vj~>9+F@bz*21bG+oyXapHSqU&7zkSIEc*0 zI1All7hb^h%Td2EQdL+z;qx$ZdNVzpHk29ul13&RA4~i&j($w2xGBRMjyPgbry4sx z3ZcnoqhdQagJVS6AHRR}Ew-1dxIXJ)BF~9hqeUmsq{ZB8tCl&4*cBumTevgQoVn zqH+*%HEB;gTt#ltsT2Ld;m@~plUsQ;Wd5kc4S|`l@ja!am7mttUV=)6J4)w%U{&~pBJF4vC}z10zYr% z|9K^U(0GRU?@(3>E#m84*65O>#9x@hf~bkF7Zq3wh_BD&K^2$yiwp%=eZ$Yyn13%3 zE%X2Q60iLl7eymMjBhygNaqPyTr92RRxrZw9a#;DE88c@e%cFb@+8iPMzY?>>;Z$5 zAcSs%63kV&d1qNamhMm|8D;aH5=SQ|u6V`vDhI^YpuP)(9CX2!yN+7EfFOW;I#dvr z5xm)!IhnXb2bSF7$a@$AyTO@PFMyERG$HiF_MfjM4GvLww;EM@(AMwYGBI)O=A%78 zzH03a`~>84#OdeIx`D0J#HqED9Mc4`W6nZ*#8RnJ_ywAwgNZj{e!GtXc_pWOzkFH6 z8L8!?SiH|ImAuUQ`wY{359jCQ35OVh??D@3hiU6OS8}>SOj2CIavd zcks*Q5Fla!Ci{0q5oagt41ZjdDKIgcmBs$b#ygEPn`5p$3oSIpWPWuo*LT*;fX=*K zDd;R*Y_nIgsf_ImvHcZeIh>P;n>uveruico~Uz&%x{b{~v1bUZk? z!?1;OQ=;F`+VW(j9MsCc^>k!m!3Ohk1_Bj01tDHDaXK7>nKiIMt=(n$7@UFWk{XnO z@v*SEDHQk5!01tH^bbohUC2qDjKlJ#`&T3x+;=uF6`uci7@6rkgfVG3yM=q&kLgSO za2RRcD8_y91Qh(De2mkca?26QKkACO@2oR)^iNJB z*i}R$vk4=81*v$o;r4feFMYjW>3AnY-)lv1a=J zF(vzDgiYf6Z}k~~2ez;4vt(x2X`4lfla)AcV&vKXSr{|a?RGke?e9|8#Uceajdc2W zF2qcWN;{SEE9+)ysHBN3=k_^|U^l|CpW>; zYx$_#O>{3T%Wrg)Y49ZW+=QMugiffS~KtAqFAcgISGqIzx`Z_ph#(Srf z$>gQY3v(lLc9wD8t)BhgUq^bk;zT=M3Mq&4s^9J{Lv4oC?c33;76QrJuE|Qd zcO?BrXYN6iG?#l<1f3|)n#=hx?t9qA$(Cv%LozuVRF5FCO*isSCl|ahey}n1i~b(w z*l`ilkLj?xJcTY0aoiF)Z5Kp_9)b4u;>ba2Bk_logF#A5l=b&=Aqx?!0b%X6`bfGhP8lPz+NshBSQrtQ6KXQNg{=Q&%4_R_~<>7Lb>fl`-e}5?y%hNgFCUUIOL=Jw5Mx z%nzP^VH&M*+BUwPIIBW)zpUUC%=~)c+RZm$RJ~k|_&fi6TOZVKfCoG=_RB2ieh6J) zL0v}HjP%M#IruG4LlM$qkRr6pEw)J{&Cx5gb#f}k3Ot^$ z`A!k`Lcd)VO=1Kf0|tKY-50+fOd3jpZaof#As zQ)cY6I*O9tc9qt`N^L7^#+AiUjwjflc-0S-|8wFM{eM3b z|9?1E;Sv|cI?8_6I>Nbn+%cgPTU*54ai&flB5A7AT+e<$KKs3D1rmZ&W87w#DhFbI zYsku7s#ll`da~P=B(8D=q;LKn_>a*T%t!L5oVx|2OA93;B$ zX2OgwgbS#IKUB|Ak6x;sGY#Kq%}Np8&iT3qo}oGV)s7I;yIr9SUaE!C+g#-3C+ba8 zBW2t`EC-hE!1x%jF?-)L%+p}?z9R;BQ#&Tsn4upv9xHnIauDhG>Hao(rfBKAyP;v7N1+|9 zUXFS%VB?yLNo6lnPsdc$)QkiyNAXY5zp+ml7KtKl34}L5D-x3tFyvlYTRZA_>PR`C ziUfY^P4Aojul+-(Ix0$6Ym1<%IOAb8eRvo!be+C=`$YORbtHZqn*rZVxl4^7Y*QW{ zuwe))SmCf3Clp({O6JVQZqW>Gb=-~@Gd_OjAzSQ9TTC}7l%k`cdpSbHGC9{6I0jCz z7L)R1iL~}~*C%aAO~6~hy{}osbcVS!&_lR30PBwhzH;)1ZJ&MTbDer9ukN`GE70Xx zX+!YaX3$rk&qc~oDN!utN^S=R+YBWQQKF}($?Te;?a!I6vNTwzA5+hm>?eu2zGz*!Tg#OChhHB8;pyuI@!_||>ED}!yl z8~m>T$NrV`oh8Qv&4=f4$BqOQ8i!wy_G97Up~L_Dz2;Pu2~wi{2Y6f)kC>@-jMvFa zy&p<5R6Y`~hK%cRH*~PKw+2<1W#*f#6oa9#qQR6vOhRIL(FA}<(y@c~!syjXekH8< z(9LU#CtG&-Ao_a}Gn~j4MF4dKn5qW{2ir1N8w!-@dK$8l*#^6s6#%vano15B5AM`1 z59O5CYkaJtNA1yrv$MIY6A0fT@-h&+Ko0Ax`?m5oNu5nL;n_c#WvW9QxLL0<4BTxk zQ;7{NNc7I_{4TmCVQWrXaw<2%osg{AE?g4Ghlr`A5_CSa1$$p z5yA4bb$8d)E;3l4J8wyM9Y7bgE;EY0C)?{hvB8Gi?;QTy=WMQ_s;Y8f0g8F?31&~- zPFAwDv&+Y>+yz@Z>jf4F{sy+hB?aG--1Rp2JpHFlKJXAuB^+{+OSPb_z|#nM4q zZeT3C9b>(w+Gr9SeZ={mpII_FL5J#4_)Xyb%U2y+Bise=g9d@ijXo+EbWyMM{7j

qX29N?SiXB%foVSgtLKY5xG`Q}SBGjH8*+>Yt1wnhK5@ z>sy`ioBjh?05xy;O6D=D8%c_zO<&kws$yCNnu zuJ)*%H>gic_);b)Rm`sTX3P0(&Xc#TlS%r5e9$s;WQ3SRz^q}2ajlyIYV#qA%7ee{ z{yzb5b#*mFdW}4@I-gL}?6zB;_7sEA14H#*0H)RwpgByOzKtu&{8v z6JDsrwLE3`txf81EoT@D6;7X-c75**P>IG@o&26j@tjb4RXDYcL7A@HVUeQR_7=;&w-Zi{UY5P<&Tk^60p zqWp`sML_C> z$Px!e|23C+gV2Cub78y2FlQg*jV;u#27RuI%E|#rR}0Aw%#W4C58Zt*%mxdD)yLrL zvg;5HU!2Y zN}368iYV8FR6b@npy8ol7k`6QvVQ``Z8pgaL%4i+yw6P?&ODEgi|-tuxmBsBtd4X3 zjU5(1r3dHff1g>eY4(6TkC@R88;kIK+mGB_>SqWE)QDVY{?nEosPWK=y(Y|ouyG(J zz2BO*A$R@5bX*@3e!)!-3+~tqxT7Ur@;bcVG%9jU*R=g|k9J#@LmopTCN9waqb(vL zB06F$z)H0=Z7;p+?H-Obbw_y3EZ`}x&!7`sySaL`!&s*J~eA-R2@4Ni*kLeUf0wf z-n!XCX%^Epfx{=O6 z3(pG7(PQe%*P4nbPx7S@LdK;g69~A*KkTtDBk%M@n+GG->0k0CC2eQs2|2G|CHNyo z?hUQtnC~5*Eyk^%%fnZHFUH&&I*eo|7#yFakZuaUxXwgqV(Vwv_7!fI5O|nbvWms# zYvsFN|5z<7{6SV)kuB$q&{gjI4Wzj`U3FQNL;G<};U$EpLD5oSxu-aNME6Gd;`3?; zY`LYk@QASoOFCoydBG2DW!-_Om*4j$-5($J_-*g#NV$ETJoTo*-4J3^_zx=oz}Deh zsh#kwM`6OkbX!~a65Q9^lZUT(?BAkG_v*Anv>}}Poe*pR`|?q-{6Ia z2SY1G=_l>BZ$I|nWz0`+H)ITaWp*DQ{g^vk?h%U* zMv>d2CkWVyI|R$vq+_(S#p9o#WWOlf-G>r8 zdcV9(PYYLj{sP`9Q)*##ygMRdgL-pN>!b68sxa4<(Hm>J5le5Zhx~-^p62qwp%XcICdx2dT~<)v95%9o&%KtmG|T+NGLVTyg4 zjP1&lN!}SAzk>?Y(njEF9SJHS0rdM6IgigFzhjKW+y2YJTglr#stJ8U) z_`Z{n7*_C#3}R_1v1D($+_Pr)yst%hlX%eHtsr6HdTixKCBng>|D@@@D^*hRFsb2E z&0FsL$C+~*)9$QWjD(kBF?;UIJK~Np3cOmrL%Mls1cxPmV<+|)hoy4DDrP~|R4XLP z?uXy;!%4qGli5ST+{2L{${#H`l)h`XI?ePZA?# za;xng3UhWN6^-|vMKCd&7#dir*9Ca~d@B|km|XrY!NUDq{+6+awUJrmkb-#Z6yK;x z9;Mdfg+NC$>AkVJZjsT5fcWV{q;_&)p?CYT=#e-T-(rMy(??@7|2V&ZeZhKJVeye# zwq)9mn5ggdgOydY2fKdxMnls{%EOQb*HR8#n{nC@A@j`?Nf)uRn{HEov=*zPx{Xwr z5Nt0MTG&<|p+#b)yB|ZciUp6-FQ0ZVWdW17`iw%A7g#=aX>8V zX28c>*L)m)ex-9|mq${bb@L#~-##3{a3PnnMaU7K{&im2wClI@<8=NNWe)rbC1p>p z;0NQ6K2G&J;zvm%8W(T|l9)iZ?|iX?EwTF<%0G)1HhkCcEm?;>ZvrXqKXEzj8lDo= zN0zwa`SHAt=BUgyA0(sa!< zp~<87t57J&YQ9Se<}FxkXL>`{Dw>(L9eJNGuqikhe?2z6Jo!MDdQ;q0=sVoFF5z8I z+K1k8Cz)PRw1`4TN6?jw3ybaurgD|G0PYT3RVWCyI-oG8JJw@*0#1MI#TJ-8y7GM1 z|L)z+M`MaPKN(ZF+>5AhMRolcFBKP~X@947@gU#=X@nx*p5dTS?u??2GVia|qRq*? zZ5Qk#mM2FJ>VU|&MQ>#_F%tJ?Tk_c1?lf6N1p`|w9JCez7?MNobY}Rk#`*RnAlx_0uc^6Ioaxwo#%}12uRyl>eXP7s+cjG{P>({`C;KzTjrn$WQP)60lH#!}D3w zGGBZvoBbZ7t|~)vRX=EL9Cp54vL9UPG~c;)b;uoTcxx@YZVmaQzTcb+cs$z`$ktc3 zcOhG(Cfs`rFFxq>q3d0=Ta$|8aqp3dr2EP`SK9v8^PYE5h6SnT^}BHih!4|vtxPsF zq#dWgLgj7L9@Q{wN{)U+I{*bYrmX#@A zpbK5Ki9wQLQmOySXyu{vop0}gmx83RB@BSD=7VEFlamq}tI1(ooepW8X(t5{gKl>Df-G)WLyFE%855Xv1+h3D zm%2{cz2|&ddQi?Lc897ae3ov)V2bP%{>ghrJFc{;RqCbNTUgG@WFA~-vycmr5WA%Q zcJ1I0q$MPiJ6;)@b0^BLRVPMajrCMTAzPM;RWGs-}4^nBX7*ugnlQbNwk%^nOhB_e>2`iDv2_qv8DmPJ^ zS7WXyX>=7-l5*-|J71g%zv$*in0ZOMx5_R_{`Y$54!7WmhgKg%xzy7{a%DsV0mp)$hXlGy7z~M0nIK z5>)y>kxP1ogAEp{84|rONiRT`wk`v8AT9L)stCFXIiRnl0vU(UpG1T5k^Z%{QpP(z zLK{69+I|mz`eG3ueGn5{my4Eu?!Itc+^S^+G3dme^R?%3`5K(W`bo2dm3AWZGKf&9 zg@pwrDUta-bPsF6vpkesOFwI40gBhu&h8;EYTw0ICZgu}?>~PYLCr}_T)YpyS9Fsf zcDznRRKeZQi32;BAo3x=eE<)_8perAK24rBkGtak_JPkkB>d9K&jG-b-9J!}mC4gh z=R^DY`ihLMq1aV3<|ms%#KgoF#b~?Y1|UyUDm$)VkTJ35JXlkyi15cO`3z<3g>0tii#r><`d;ysm$O3m1#vaWv$_F$%vJir z$;-l(+h=*}-$9HmInU}oZhV?g$-q2;HOe9HpjB|EXV*Y(MmzA5jdt)D#%-d`uN_%FwTZnti*th5h;S1Ojj4rryzeXE>1q*7I_+{rEFv zlse(~;i~aFin&@#flG8x&X_cBLzK2UUT4MVWfelp7=HUSORJo-p*9pr`&L&SJ?FZ- zoK}(X;a~ZwxSks~+3F^wbmhX-242lj=I^avAch0QeK&-ayZct-lF!;uKtvGr^D_cS z3|IVStklKt>3Jp1FT$Ohs#aEe1u9cKPrfD>N_x*{T4(pE?sDrlKF>}CT7JpbHN_q^ z21uQ(G%fXVOm;xW)K6Xnsnj#BCPJ>2_6kNNTV)&1cItudzsS|ePg*%ofMF$9sL4W-AqsKreAv`w0KIEXg} zoY0-vNZo`Xn-Oa-)Ct@w|FY-l;~8LTniFj{_D?H4V*B~6-VPv#ktjPCXj@Wt(a6{hAHtG;GeZFtXz4`v#v+vKf^bDHVBVq%RB`Of+& zyZvv0!%DufWKip?ad!=hdDkFF_j`ApTuAP!^*5e6eLsMea+4B1VBRPLj?(?!b+Dm`la<;_h@Z)R(~2TJ@sX1&F6NbGXstJl3ELJlpN05V{9wiCv*EF} zw#!;^otNTE?EcesdSU}(Q>`HK8rPGiCOi`{p`3HFK$bmgsFTTe;L3*6F=1(Z zWp7m1114CdS#e~Qq@(mP%@s#$3uU1#A7{^PH)}Y!Zo?|IJ!vkM2}bNB25mSTRY0Gy z{~ndEx@=)=#uGO@ahdP^jaYGfhed1+gLv1PB%8AILKjSje#3aa+_ z(cQShb=zxgD4haax;7e}CO*%bD^MnTmY~ z+$VES_U%Z&eX0ox4wnj=5knWn4u1?rEc+hDN=7IOTm!I#BA%!>Z}hqcZ+_w5VeJ&? zUu~JycGe6nd##1tlkQm|P~Gmw`C|I&kVd}b`Qi`Xk}r$#Keb5s)32&e>tMGf?*(wV zfw?7B)9*tIILwOE@n4%%Ps!W{*K(CyoFqT#j@WhHyx>a3eA%M{oGBXS`WDAg0_)2j zk+Il^4pxbUJrmzH+_)X-GcJ^>y5+nxa`s!Nn~Lw(p<@`Gd$)n>f#Mg`GND1Zky*xZ z@Ijjq?F1@}|CsO$+uYE<%bsc0oq}q#VHK_uw2+Meot%>;(SSMBcJ{$d-s}N2C|*uh zo6iLrN%|_^VK*#m6sF`miYUaRJVDpGb^EYo!TyydCDrIl=xF3@BxveuLGg|qkWP4a z@$wE5a}mvu~1OQ}Vx;ahtr=1?fd{$lg`ios>;4-l9w+yHn`Je7^>Wh3wc zPCHHGzGfcWnE^}mf~|%0CUfacQaVNO@LTxhSN0=5m8QM5VliQM%m(rUhpVlPMH~(r ztRBy~_23aXC|kCjDh+Csm+ds)UWQH0ikRE^N9>MEzz!D=eNaBEn{f?8K_Pl`ltE8P zFFmOEOegdapm>+rn1J8Qfnfi-8(a~+T28M(sz+MBcNwkby1#*o*e17_3=*eeJt<5zzmuwCRmL;(E}l@gJkoutKMJWS(>n zbvds-+UmZETB5lT`1AJO3J1ap%Rj(5h{xl>KQig?1`NVr>+67JTWU=|1R12H3%cNg zhS9?Ju=>XnpG0ABmcah!W83+5wFLd{aN~Aj##Jav9o_CVI8d8ej)bp;mOQ+Kp zyoVZ}m31~5z*wD}nBdboaG}d8*8*IM)VRwAe+2ECx)M42zLYHf=ZOO6E7#pAzH~0< zjYO!ex$M*XROu3T{DCVMl*5)gIXX27%KF-8i&oDVD4Az;o(G%5*r!itN5<2&0y07R zZ(XcA46%G&T^$q`PMo7&YyBVHNBM|L@-xocfP!-(8q3CA<6^!Ez zm(GC?39i!6*5=2sJG!9CI!@4H*ho`jN0jJ(*_~_L#ju@-**mq3r{q{=B3MYr_h5-EVrv;dEDpGv7#jfAfi~Cd+e@0KS8jI^>!h z>Zi$~?D+Z5x#)tAhzqDzr%LpexeP4j?|p9wtyuxqq6`;Pd;iZXpllhj=St-qboOAD zrL)w7bwZ0&!6GL~T>u!W{C8K>Sggh^s&x}=T933 zy@JEx#O>Xi*IZk;T&aw=Jc!(!9lGz_{`oU9yUX(YXgb@^e$62h7N2v^$g?Zuf2;=| zq(R~SK-*(g^B&CM`x@GxbD7W6D<0NDgFfh+Ds#KuIDG#jv){4$25yKo+|}tjfm?qX z434do7X@q@bVKn~pU_7gXv~c1FVAC0G{nO$BPS^I5f(YhxG&_hxj8vc%$~k2nOv}k zayM8ofhcU&KE4cf5}X{Sy6pWfr#BqE#{HgN)yH#o3TmO;yN3@q8eS5Cb)*+OL^|n| z=H}Qr?Z3l4`1x7~(%eTCZH-5U3bg*X#XcPhDaBO7@4VjZ0;&p&z@!lqNgNgm*5 zg$WlsfcT$Z{{}}X29DL=hV>k!ume8VxnV*xJ^N0?(stt%gHfeCFFBK&-@t>ibZ!*n zL#=J{wPn9uC2=uqvl4pgP>RWvm2jkg5zLjy8^NC) zt^n3>hSu7z2IKR_AI4|sF#hQx4YCm!iZ*hp9oFDRPrQLK8ufwL2X&`aRggEhUo~Xc zMAIL}(aJ|>no?Ae?Uc>*MI0|JCEz!NFGgUT#*+YLj@9T(&39X|TMH_EIz^iWp*(r^!({ z8jrD^C>9O~-t^PMY2dbNYH0I-1ox{hg~kr&Doph6ICQ94aAL`I_ErEkYGJzopfU<9 zwfww4V~d`8mB~T~VDv4>?)DMPvnwj1eYxzCk_XOaGD*Z?_X3d9uir+n8`1?`tsR74yrrA9ur5;7%L-s~ztP?;k9tJIqK`S5JNBuD7Mo{dr zigP~-!R@ee$s}=4%B0p5L+7h#Lp&TqIIcpa#1ZhIR1*XQDk!}zy%l|d7nE_f*xsRn z&$MD9b-=z96EHX`yav7`Oc01Y;c*h=OsIWwRZbbl2s#HXci3LL;dHf1zegIHGvg%D zf$5mx!G5YNEf$fyc{n=wsF=4rg-9fl8h%JMkX(uvpV?;%mU7q&Kv~LkFIqB^bAshh znW*Mo)_IG&%El%!f~XI(`g)ZWDDX56^Pl|B9TZxn~_FL;#SJk`w|F zyXnj{&O))LM~XWg$#o9n`c-S;N?J;YjARN^wCw5MsLQ*5@DRXxB##~$rl-i^VBJ>XoZ zd0FJPn$hsaG`-DF$?c=LYOGU3dgjKf?QYC!#~!JPQr?(wJCd*Fq;;O5eVA*J?Flfv`c7#FrDxA6@TzXdTa7`MBKZcQ8vjwRs# z^s7kda4YHfw*RmSwO2&hHM~(W^`w|sD!YxpuJf$b$@-9eT>8mz=@+`xX+#@Kk`_xg#%6lX zOIayb`CQ)4vzZppIAHbEpZ|J=pXPze1f%C|X9Z7Dr@prWh1M*6B$cPcW{S@qO2sx% zn9c|yb!;CwHXkS0)?R|DJFjSCAM)QchuJqd31t+n5Du>0O_S#@O- zy<3I1w>FGHpwI!uJ1?gg`|2( z{Vx89p*-M|!_?fnDz_p@gs#$D{yn{yD$-Li6++%id@i!U+7t?a#IAG-w}||lyX)0X z$92XM;om6L#UkidmgQKQeBC{iLS1W?p>V}y+ra}@a5Pdb%w+F@J{N~>J?QrUx+YU@ z3Dnc_zaL1QinRec>~0#}Fa0+08SL zPsFTEc)}FhGlZ^dc7((di9V&r(@u%U_Kc=Byl%Po?Pjxp-#qyd<^JbbPDUm%Y4xJm zUTk&PQ>XLAUk^-Ex|kF_d(K??7=^$d08>dE4^z9joHI3OdZ=lD%{F=LgbNNCPh=3k zg_p;Q_O{`wyYDw^a=BGgcdVtB`QB2nSyt$RAK*5P@-$UkiXd4oOj--}9W)wJ> zgx(1RjZAm(lcW1gvTc>d-YO{^1j6Eh`C37X#|;e)nP2vJOJ;8w`7Z)lM7E0u8KGiT zcIh(5z$*Dl!oAR5R@A7txcIUC8~S7$GuH_yIw-p&1&V#a{-)ERIg$QHOZ4FxDs6hJ zCia&8v~mdN^CfneG3mP(_b%e${94jEfli-Q)Mcsm1Po=_d*&o0X}Y(9ZNA zX1LP=Cvjn&-~Nb15f2*c40r2#tTj7*9EURM8(t*Txl=Ff?I71Y?-k-i=TR5 z_aD4#%eKvZ#FQFCqQn20qtbXt8cP z=d+D9?#T_!&TY*{sy@4~-Y_dzQU|A}(=&uV{Y)zi8gL^0RdU z6=H%!mtiT9*klt^6+Jt0GsYW>PNA1j_}tl#x$~#k-Ep0;mpIQyVv+E;!_;rj!09}H zt|}!)RCv<=pw=BG-rTsUN_K1-{HODmR{E29H#{_PNhTaTgcBT*sC7RibU2kswMikC zbaC^$>#i-Jo@UDR}FPtk$dqO7yWv@uXc-j z{%F8fjB{M2jwt(4p;tjO;{u7&=Pt7UHz(1Ak~h1O^7C?X4$qm0q+G4yay_AJ6p7tT z14K$xa{CeN=79tS-Rhyh@e33U{;V^(-q`p1RRYC$2aNAvngi)`e(?)pf}N}^-E)#x z)h{TF^7UO^Oh^at_}&SL%U{SUI%`tBiz3}Su9N=E-6;0LYW<3$>$5RwN8S^jUQTXp zc#p%HDR5VBA}C4+#Np!z31^ePv`A)isy*W)_*uTMlUo{xiL~|JAMYBy3puXYK4X%}ko9{XlbX+T5ma*eh<6cA*q>ni30lvA z1c78Y27Rg?A6K&~en2=YHV?p9x!!2i5yGFY$8bzbR6pt(R=A=EnujGd7`r4EXg7-l zZ$DQQ>FIq`TcaDj_Mh2Qp#(?&qHk&Gu4+IC#;Eq4v%gvseRC;MlAG8<`*@EO9%AXDW8c-np5hO6L)Q+1EVdHgvgz}HwQ5K4sTI@)XUE(6LIsfUhtQ#ef*UZPR5GTw26 z3WrGBNwuUfsQiHr=L$Is>~f!uU1ssiqflqf-~?a3S0~DPSMe*NMuct~U0W{?2}L62 zsf`?fO1{1OUz*E6=JB>rRy{ULwao{E2DPg8V?Jq1!ggsH;(hN}Jph`vI| z0TL;1kt!u5^?6F!@v2S51pj=i5HBxK&rm4z@oe@ zb?J_mE%csYEiOalPaI17ukg_bb}&xJF3)xa>TDSZQ=roU$^fbX>A5R_rWV;C^B`<$ z5-%$Mlg#F@<;zi*(6|fUpgF=|K_c60`WbtF*VfQz2Wgb$i$WP!6+Un)@t!_~Lgl}L zqz43fh{v)(m^zi+>D>T98T74dIo8O7dTp>f!K`fS0StkhZ$|2~bOQ(s8fz~I1fq{@e)dS2YNjY+7rPS zQWpm~959jB{wmwKKB0QvTztf-eQC_@JzuQfyAIgJt3L?LFE>6xiUnt^_P+GY(#GoC zKJs*_C&GMi3-YcrpAWz$j1FCP0O(PqmjR8{$I!RpO3v;J;7^0r0}JDq^KamMNF^Z*|quxIVa2^Pm?x{Ug*<3kvJgwtH6J$L+a!!m@? zWDvLvx&Y^m?rIDhNX^GEb$|kee0T|di}6fmveLgN5CrR)PswQ0NBkjeOwITMSH|f~ zXk9S$9$j?Hp$+7cf8q;I022pu0{C2ntpw806o6>xA2-po{E_}IAC>_yX`n3twQLLc zFPy2?0jjAaa15dUj-5%z^JYu_E&CXJyuR^Y#)Vs@Oh8dQI%Qjb+=ceYX)*WdLA?g0cfnR6+Td=Y`OI zfnHuajSy*X7*0eO7}0$pOSD;PP9p88A0#lW77LkNWnc6k)pSd#+VH6HkZA*PQqU8! zu*9skjSU0;{3liTSFGNw&3#N@K4zxUzKH{u?WQ93=Z2xN273+w zYfs|yL6T(8n{r?1uzFg?09xj)SnW+eO`x9!H2QpZ3fd2znf$AnD|Y^$uO){d$I@me z*##PzYSYc72k%Ofc8@*|8GAgRrOV9n{$`T-rPq(v2|om#TQ;D z!UYV)by7_U%ns;2kO3_Mz8$YuHUgFnak)<;-_N)e#l)+PO^@DDSu_}*J}i~Paac`+ zK%O=%Z%@i;NRkgHj$Q`o7__RvdzG+e7(qW%vf#oar&^GJ93(W~f3CVlBnT1jLCf+4 z0KfdcucwK>r_F9G_BsR`6C^`My;XwH?7g*CD_{E8F$MGKCs|#7k@i1jJ^5ad1S}t|Q#?W0>Sz+I=!!5$+2k~WThj6IL@5kw+7R_I1PaUnl`Ne-Ak{(|p zr#%x_x!&Dk|G+Dgst7m9m^%};s6rKlbc!!S9sVGQXW1}mu|_^^35J9d2wlkE8^~H6 zgL;9(sea9N!Sv3Bl2^cdx*!f`<9fk|UYX>OS@*QKDg>c3%*|25ZG+%%Zu>C+4uLoo zX25!H=iwPQT~xH#NxSF3uea2804C~iqWizG)4te-s|X6)F!+HQ-!NES|KnDC#Dr*O zK?^Lc0nPImgF3B&fAFLumWjwam^28|%=pHqTg|w;7p%#2YZrTFd(sEu#<0=ZS;nRB zLpabBv!9bR65v*VlW38%CxIDvc7QaP@<{fC%${bkO#q~J)LguUybZkm>Xs$I@F%u9 zQo@HorLPiq02A78Meq(&=J~s&fo%))%s3nmSPHAmSgK>2gwEvLc3?lfPu@?NJSr)8 z@-|Sh)d5%gt?$Z(Wxb#civW0Q=>MPi+b%I+AVZb)!zL$yh^EhNhx1(XTw7r|g4PCr zm_l{L98*T%h5%6clU+2Nw5(n1e?fa3F?*u!JTQ&3HM0`TX7Rm4`cKAtUU?Y291$d7Yl2}s}H}~$T-B`-jiCc^vD~N9Ee@WZ3^irD|BHH?e z08^Za8VHFy$!7bYXu`E$bcuZsOdca@orA6^c)T^tb?CvQt{QZOupXdE=l+!#g{K9T2av8|q5aSTZi3Fv&SY7E zc#IW@-}S>^L8-7MbR;4lLrpd2CvJN#vLhsY2}<5#Z-WF2>}pqXT>&R#iAkEl3C2GF zsl>5Bnp#3_fsMkk0Q!hN1VtX)SIQj}pi<3pEs9G^DSpYnPw&S>98pJGk{1*E3uwdQ z$Ors#XafRR*S|oMqydWdjD?%7Rwq65U&3$U*ckwvC4HObl(Pp_R1%5e_-2|Qnq>T>YJ&?vu1aImH48r7V)@3AHJLDmWgE<-5>629AXGuR z9l;miD1+KDlUWYN)kcb~%xxdmf;$3G>ji)i4cSB4EeaR}q71+<4EbgmfxOz@620wE z(9!C}!i;r>_f8OYHN%!F=CX7IHy!#DAw>;v^&vs-{7?#R3|hRvSnwYITo%kK0sawj z(m@7v0Ez70ym@2OHK=UHyz!I~Q;Y)z{bCbPcG*dVm-QEkbIC{&=(aC}P&&Ixb?1 zJ=US7)XGFWHUL_r+-qBDZ*$L~rV(-%fH;gmq$=2=DlotE?~WArYLrRpRpn=4<~P=L zwFGLz(gQcf9g$$~g1p3%K692Nw1c$Uaccsv4C%40@NA6Hal)=Cp&hjYqQH8ut@Ydr zKX7Hhxn(}xGCCbiK#$h1PPUo7E1v~Jm_A6=(R zGO`plmbu*y74$Hz%cpXuTRnPM1N@z)qxhOVp+T z&nQ@QRwNvj{B892cC%LZP)Yiam8Z%x1Ypeef%7}Fx%nn(W}dAUciOuzbxk^z_PKrXxJjMX^oYKHOF$N73VyL!0jr^Q4(92fz4HG6vcCg0 literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_has_jc2ic3jr2_nt12.pdf b/docs/graphs/l3_perf_has_jc2ic3jr2_nt12.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a6978f34559415e4b53c5eb8fbe644a274bb29c2 GIT binary patch literal 32775 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 literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_has_jc2ic3jr2_nt12.png b/docs/graphs/l3_perf_has_jc2ic3jr2_nt12.png new file mode 100644 index 0000000000000000000000000000000000000000..7a4e252d1fdd7b4e0d5368ea447735fb626d928c GIT binary patch literal 92749 zcmcfoWmp_d)HMnZPH=)dK_@_PcL*LlXo5=!4#C}mySoPn?mk#>1_>c#a0%|t;GE9= zKHqb_Kfd$#Ko8XP^i+3O?b>_oy;eu6tIA_zkYj*AAZ$ei8BGufsR{%_yhcX__Q>i} zn1VnrUR%F?t8Q&>4gz^Dq$XOar-T!SO~L&ZG40b!`hR6>y~b3~_f9pEMM+!HPopz? zJAf`jh;JQ5D}{h0SE5iAVfG3PHj!#nz*9HljQU=%MAOdWe4P6*a&eI9u_ClHP6>)4 z1%X&l6Ovfg?%U@Y-%9t-onj|K#$9XTgmY)9Rp5(+A0Ri-t@22M&A<)s=Iu?{83p(sw)z{*agj0j| zm;&zzDIuOYF~qf5)|q9Y|r zrQo^AkZ{QfMqvN_>PhFX0Dc)X@Ty#aI4S;6PATEbH&koM4+;4Rm?M0f{M<33a!iRr zn`)apQH8uIkt_w|-x0>7+P|Zb2Rg`X{KVqLeIo-e*8WWIO@1U@Tj(*Zp%u|BN5a+n zofPx^&?P6%cA%HJsUF+VaEtk%9^;>gX7jE&&^3s_>|&0Y5@EQv-q~A_HHVcQZ@Axb ztz|>WnXm1A8@qwTF@nR(*1-FyvW=~?4$pTG3UOqb@ToqMb=I?q8`THw2e3c+bC4u$ z9eNhBOEBxJlmvx2B`_l;qbpv`%di*kzsk}jg5UmT{6NqZnJ9x$AEBorssfRwe5Fbt zk@TH`F^Ow5lTc2Hktl&hvHBbI8~!gW>r6H|9p;ZoU8B>RZ#KEV5VWWJ#*3;Ll}5bh zef=i|q(o;)QWEt`wOuN+08*@3&Z31`!NC{Qk^Dhc>}{89?l=D;#hAQt(?nR|GSsQCM0oNlOMtY$y1#~$MxX2} z!@>{i9X}v+@1|9`H0q_#8vf?Id^;-lTB=-nFX|U-3qv+k^^

{XFK_`B=@E{uuVy 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

aQ;fbAN)VxC{3C{IxlhS?1#?4J6 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

I5MUW?)5#dFX#_-zz(bUC}bdv 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 literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_skx_nt1.png b/docs/graphs/l3_perf_skx_nt1.png new file mode 100644 index 0000000000000000000000000000000000000000..772ca0180edfd86b8614072be0192f93c8951c18 GIT binary patch literal 76368 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℘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⁡k~G+kram{xuIQQt|)DbSixn3`^N*%2)`#L6lw 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

o^~+C)1ys6L z)u1Da^D^D&kU(9NG`a??G?m4wC3~BVE%ApRiTL-AaWg4**=eW0 zm)&u)>sbvt1`TPncgtWiOHO4{`H{@twA=S(j6{f%7W*plNNFzp!!6eEd%xZUK4NoF z3;$`E9&#-E=SK6{ESlZVb|$w0U)QZM-t2yJ0`Y0&pUl2LM6i;n;oKl|EG#r9EoS`? zui4V=S6?bwS!pvRs-sI1!i3vKE&tpH@%mOca&cRmuKr@tmvvNKv7jblN&6+$Vcjnx zYL?Nz2|qt>|K0cuGqPyu=S5zU`Fje(_rX2*8=3XH!fuHKRSMaF36uKv=YChgga-S* zsfpen1N-Tzl>q%zzj8ZxMT|E0couLPB%3tWxd^e6g?q7-^+_m=Vy zq(53PF$6r;vEMuggU89N!7VepyLA+BKzcAes6G-B?+u!^pFdfR2@K#$wNjkeFRv3Z zGLJpX+F{uFzG9i#y9juWPnKWZ{8mmiAp}=)fTwQAMV_#j$sIl;k$3BUN2PlkVyl~_ z*TUZ0(iE}@f3Alw8J&Z5;|+bIeC76T;I*#iqZ7_YQ%~#P;%ermM#j3Dbcrjn8$|rj1ToXCqCa)19ZmTrull~KW|2y*0@6#FYL-t zzn22Z@b}tC2)$>&Q6&z%rW!f?=~B;XJ!%+v-<#!4Ww-OoZglzc0N2-Me3W1!qI7l-F!tX>b>-kE`ck@1GoK>k#$ zOrU&&8;bf>g3th3{AXGvk5S^g(>vm+@s)DHynlqHyiEm(-@9GuE2O1)xZ}qR1}Pwp z0CEH8CEmQj=1{3BdvPfdwj`&-j6Zx=$vTA7zTIlf?S(R4uAPt}V=UAbDG8;ghQV=n z_ahGI+WuUngd}Qu!#r8q!0tJ2NWJ|JSD$0@k}z6wy$Lsvk>VlI(9Q=R2Kmzg`N{a+ z*JJ1xJ{yM=dcU|v>*vU=bqx|L9DP@3eE?EIF@EE)l@vruQ|=S%@MM~r{%k4tSB3{( zO=ix5j8`ze+(Usr>vWpx?ChNm(av9vkPT38_q+6T9T_ zXe)vFTVk%Aw9@j2pZPl6=Wx($s<#i4;*{IM3gl4j&fQG%a9e|CKX^vw#V&=Ml@@&A zZ`=zK@I9CO=h;Zeood1KWj4QmXWaEvTxpRD51 zgE!ReXus0Ss*}IOJWn^zOy*uOtNInw5Wd=s#e2jPKiFECOuc46PG3VW6!9qNXBAiT z*Xlw4>Qhq{CZt~qSQpJf4)jP@*gSqJtjj{IGb*76?RRqObd>ucuK>wZEN3XHKw6-x z3rcEL9j+9DqTF+k-b}>G5N8I>PjmE1^|UeD{!k|NVYVq!RT7i05c4LwtA_I1aIRa5 zGj9{(5HU3cUE(F&S)i2oSlWpjPjpcTv|RArdZolnsQJV*{UWH0Pea9ZU&yg9mp{*E zwFW1fgLAfni-}n4P;e40gz{Pi-)^l&CotE56Mf*r(!mdblk+mipKzxegU4SvhKx$# z7wB+vrjoD}OrY|+A0FD4Sc{rlvxQWCv5`-&{8D?)BxF&HXSgF-Pbk1mXQ&|84yp;D z(8Rk;Ow+nvJJp`iUVdXpSRC2&3Nj+k^^B9)?C96F+g49I0u|h0|8Y`+#TFYn@h57_ zlDtk3h`slcO5VI&JGY^<-%*CMi4t!eGarB>7W2rWu{1=fHP;RTAd=0Z``r{h^jM4w z{K9cPCE*LSTbOh@Q8;@4FFRzgC6;6kE>BE7JnTre9zw6z(-pWR`8p%6`52= z$J4_TPe|PH=un+P#gWv$XbiAG3RROAF7I(BW0nBHZ?Q#>sPrdACdK=zQLDjy*2S%ICh!gYd(K&sZi=-==W94tp^?8oaNe^EdKW3$p9S^?AEK=SLtj`-6-Ka7wAC37z8&awNbIk zz}$qs*ZbX(^f-aOGR(6HL(Ae5n_n9DI!&6~`52;N*djLPvGqEWrUYQ-$m>B#^Wd4` z>GYyOa2ay~vdC%tAd0>4b~$Eud)xW3!hqGjOSH%ynV7e1a-LUtM?4+SEE4UJnLcfn1df^!}dDrTGkyy8IFaZ0YQW_eyy9v zjjyRRTo$t{tFhK>5KP)5A&SvYNDKDl!Oq_jsPA?m^-!q76&klxq9{)IYW zKF%7u3Qk5;ya=vHE%A{3_8=mh#t=4E5#g7%v)HW@;oK+Geao75F=d1^o&cH@SguDC z`-UX;aR%uK*+9g$nqkkCJYGv*?SvbxT#-+)2Jthl`5F{aDZRA+aMs+I_h5f%~5k(dhoPgSS6xt#7nEr z?Tu3c5@pZ0@Gy#vVhPQ~_6v4;9;x)+gCR%RlMY$mqp$Z!(`5F(-piBS*OnETI8Iz` zSWcJp`}yvEyQLTWuAbqu(a?~pk~|oDgrY${_o0?S%XfSH7>xJkyVly%5RmjZbX!+K z<9Gc2!Q;c0*-9p4Ufv`RVzMJS@Lxa&f1=Mu)AJ=lP*Bb_@~3(+;FYiY8OvV`_FN<6?9GVtd}I4Y}v z)?rJY>^6lgS*`j%cH5z~fhRixn4Q(@(NaQ*@O>t2GNk=hK8C29`R$LjF5mh;%O)e8 z#uq%ghh4g!hK!i1{Qv$zQxe!qWxwXqwx4(Mz)p&EF#)!WG(XSs2aRre3e{7507nmn z)Gh5EKJz^&Mhj>|tD_!~RU`a$cTVG6Ch^b{9Ut9D^J?0V*58HI!Fv~Tx z@QojgZ3Ik8)rqMY>N0Yt(U1p`RG#~}oV01?>5wl*2pj{Y)?cBC2zSPEs9l36I%#kT z;%1R$rP$uS<<`#!>QgnUi~S?ZGAa?#je4W5>B6nW*p2<0LnXt9y59*{V?t}MTHR3N zU(g(G>R3fQDEKN`S|a-s1%`Y}GmfX1wLH>=(~JE!!ryFGoAwJEQOlz3EPTJ!BzNy- z4_8tn;S%8v&+tj;1GS4M!d7*7V;^hJPTDl91)~~|ekr&}=b>4@K`SG;-T(lv#e%$a z>()oC1&94gzenhWs%Y)VcZliG(F*FQUV8(scd zuZRl&6D;FH=ri;T_u%>_xF}8ipErUNG{R+{aa?_)^~ti*Vy_k~U2Z)b`F}0kzt^ZU zXe_rxp_T&$jOQ33XdS{9G?^H-6>ju@ES)Hv#-YZ}^PjVk28TFAzF71>7jAP3svsJP zXX@lQABJrofdvfmoH~&dHK>4^TUz2mk+{LQ)IO)oaMLUSy1Gzitl9K?-ddHaVl)_w z4;RU8QMg8W&|+xqN@_CX;xvM{s{5cYm193~39b<}!zib#DNDBiWcQ?Q%2qT5=W9*h zMDvD5tl^;b-+j@)+^P-`vf|NYnf{ta-t@k+pjWH}zM;ncF)^?LKtu4O{OPDuvgb>&hHed^2Z}-eE z^HDCQj*n$pWK2-44tl>?Sy+RNDk2N|zy`he!}uFRh#RMuo2g5AP>KVf#1GA?+We9=9@gr(|+sDKC_G zP&vIJ0NfUEG@fXX|3z$;3;F*zDAVBvu85#o)g~JL4gOq~d|^xd%EIs|Xq$1MLZcDU z=Lj52-Mw(Mv!&mI$xDK@99>M~ltAsfo1=B^GHW`}3QW-8YJ8syWv*f{a0b&5;JnYJ zJ&W8thF86`Hk3vmw~~Sjv8f4G1CpkWQHgsYXWw6-W{UZhyq#f4^i$8TG@9v-X`4(mZOF>VY4eb>y@ z-Y&xHj9j$oa4HqkP?Ogr4P&qTg z+f0%B=GHzZH*hR{DA|h%V!aAp9kj~sY+9#l?d2h9E@)~6cQq6iLZXBNY&(-_ATvUa zIe&@;Zhohos#b=#4}TK?Mg#uDrt}c(w@uw3bv0Ca`bU(Ov&dfY%tSBd;0E zUXq*}R3f_L^0yB7#Y-iQu4BQNng$z-{RheEE=D>fNDRd_u!kJW_(a;~L~t+CkYQ?! zO6-T}GQF-)^~)Iw**8aXPuU5n8c;mGg3r)H@bGI+ov=3o)i|H+Xy~jer_Vwmw4K7q z2M5o~%5HW6N@OJAnz~fba}ge>2+knO>CG4N*W51SRIayRt26z8eczW#yw+`E+cLc4 z_v6=vX|c=k@geME*skqhgdVzb0Pvu@9|PeRlrT$=bF{SnhSpT2mwjDbp0(l zInN<)d&b?{+dCNx*L8jL^(+pmyFlNRYFQhmR8!6h=j|0V&#b1UT*hhFyl}cv#Y+T6 zF?d8msGrCN23|txTI2Wo8yJ>9xeWt zU9&qVxqLQlb~KXs?0CIy(PYzG9}C|^9z-HPr65m!VdUd<5k^$x*8gr%AvFuCY1h35A zN7DKE5N35CdJejoOnV^xJg25+MbXRtt2v3!Ai$4THV9Zv^ta22@-Px;*&~|MYLInbXd;?MS9j z8~Qt8p`6~9mj7ZzDNI~J{!3b-15aaccd?S*h##N7doBM|KN);98j z-Fa2NGmh)^8i;{!9I}M|{U}1iW=t0CoKte5o*hy%^K=m`4fC^dhrUdS0%n(x@8Mnt zH!4%b#?lVqfovpCW`$rY7wXDloNk0;pG3DAI zJ>d|5z@E4{B=rgcBXGq1ukVn|q04gsiTyVG<%*{lFGJ$r^nm9ZK0jc%@@ zD^u7!#z zA>VZir}%FZbpgk9L;GHa{@Qek zhb?dTH1cjw9$NNE z_$mWtBS`N&k&w4cl+*qVHe>wD-Y8i7&y_cGCBRV~T}$p~p=j*_eGgcazS;`6E6qmB zo_UUJQVkpYSF*|7Es8zMdYab=>}4`~j**zNXFF(kxg44z2eQ!rejwb+tRQ2k*y-SZ zsrmo?*FwW12B4Z_|I2h1{J*khHT%4n=ETyFCbte);79rzJM{>1_m__ESU=RnQA^p_ zRI5U}Pv8;b0uq(5^+dg>Z5Ky(y>-C3kwV0T)L-G<72KCsKrec@B%)Ju+#urEY~alB zsq*D=bm7FS0Kk+S7mm$|0}xSHjmWghU`@J5Y?Szn|4d8`mD+^D@6js4TUG!HZk(>F zf&TktJgSEuVoxGtFC57{nrcJd*DY#80H>A%(e(6z7gL^vgJIfo!g8W=Eo*Emvret9 zh!`|Cm2>7Wi#jWQ2#gn@g2<6 zN>-Tg;%DS7x{}KyN&Ocpu0_&DjfP5wnylu0+gAs9ej2LHP4Wg(qu^U;-W{dgVNLWV zxYDjmX9AA04qSuZ7bj9Oae8_>%5Hg?irY-A8@t5h2b}G0svlWm;l9bV6yt1f{``rU zD&nMan!3c@mW&VX6@-dFM4`L4F`#)Lu5O3&#J}vJ?VeMv+rua5Auz2o-82i0`eUV} zB>}JEz%Qgrjdi>zt+T__@N~I3b8tB^t1P@rtVlb7_60k)-Rd~H4kMn)%=*HpHWsyf?|JL)a3ID|*P0l^` z^QH6*MWr6zo_QZRXIeBzV%dh4#qO{n^irO_hp%?(FG42(6jl9PNdrQk-RudiU^Bq$ zVqp6WaWf^x?OgBk~XEh%+ znr~|cw|(4%gQon}d*l`+k8-ehV4}jrah)xTQ7L#>x4k=OD3HRN zsrj3#8st%`J&+d2U!e|9OONwz!K5~?AZZBOLbzP`mtMs&W%>t5+T|P`)cZIm*zxoX zTk6Ek9oW~*9WHcSwPD*dr{r1cjbR$KwTvLH;Y;+Pw~C6E#7m=mB1GA2ys@sC7N7Yg z{Xw_Sl8qYc^1!Z?r;StLY+lflZ>QMxWr~sOMpObui$FO4m5PF1pJh(R?eT%P5~?4+ z9@5he=M>J2o`=;y=3Kv>Yt=O|fFt3?M?1!b=*icXpJ%m6nEM49AVU{6AZv%EHS{U~|(Sav&9gZ0!MTw;t$cQcW%Dx+SQyN>Iu+-g^s zxXYQ6ZK?cQJDuhy#R%Ee3Kn}u#dhxN3|aPO26~q@hKH?Bf7>p8n_OVj*p~1|JaKU~ z(oOwIAXLaN^COM`bzYvvg^T*WK$uX0o&Fb-S}(T35qj2m--7a{QhN6EVdW;)q~}dK zb4v}N*9c&aWBq&z+#XOb&WDI21OQxC;u6c6-$BgtjT%mfSQPHiZXcWtbS>&DeOl`lAV?iSh^T?yGq-T7{N z0>yI}Wq@_3^Y_^x3nOILJ;_qQ4vB=83sEBI*5*yQ?E6@`6s?h)52=h6%+rb#a`^ENYkRq8%3jT2%=W~=a);~-uDS(B@?_B zt7tMo62jJp>|M-kF~Dh`y{61;C~a69XV~2%oS&z)pcHcp2$|+J+aGHIkrYV-dIeP} z$Ejef&bWnRBZ4dzwui!evDXZUdTrK?*y-+)OPFjjc{8&~-x1GGTxRjXpUm|(ufi($U6awp=)(nDg|%f$b*;;OLS zJZWtLIp>Zn4x!SFVqfdZgQuZ&{?Z}g8;s0098tvC8&s&U3rI*@>7F`DI!83^Vd^&4rG$MQQn9GU8Kd ziR9+(TN0G9mG|_n#?PwQalVUsX)DB`P{We^IIm8qRr1x_)q8!!(w9q7?vb3~{+Q2x zIPI(ILh)P@c-%)v&jWxRk!$yiA%p-GqlB9-{F=Csp3Ow$vr*3^>-%yA#eSt^YRWKb z*BxzMYMA2jKA$`6CBTesGH7`x1zxoi9O@QWX^ir2nbm$oN*|Mtl7Rj%punKG04+9Z z3Aq^RdxSr|s2c^&HZ~V-K|8(zhOl_9{8DTFGk}bM&JO@_i@qP%IuRkhEJ~-399-K@ zrB>CmW8y6u6{9r!fk58%JB{gB`4H&k3z5WIvGZw6L)LF!ON~Uy+usgW*5gjwm$gDk zOx`!0@F^qxuzQ@}MVUpM<%8HCbUuJ`7F4T7BeKcN$iLWL=l*KQ9S_#_VNmb$K-7YRvcum|}vRR+7wU*g9C)xER@!A1P3UcL{o>>D3s? zR~W4ML{!uL`fYzOuBPMftgz{YOAYE)TBH@=X+k)<;Oyzj`R83!;2nF~&nv0*ckC&$3tqT0D&mHA z+Ew4V7yKP4=2N=uuSGJEriv7y8(vwcgHexGis%;1=>tDzs90V2O3S~K?t!4Ek=-FX zS+vRMqCsw7;soYi{c_n!d^YmsyYI)<$%H|NgPLv(7dO3ze74k(nA3w>h?D*_M_q-} zkHQ7ud(5GpWDesDvih8PqFDLcE6ovq;UU%MOa{A7mB_~|M8luo1m4*#TlDGee}Wo* zEzn4R+qEyIxCASF0Fa!z#&d>?fO@*#2@hz;DY*8qlD8+oj|M5}r&>o4&g)#P9#M}` zeZJi^b`AAaZdrV&2Kr8Zs961Z~SbdMofVZ89KM{COE6X26uhWh$=#A$Db%$0z8monDqys1xiC}3`-^jGsr;_G z0-vl}(!z0D^q1j846Z|VKOuWDnRI-FZ3)|mOBgUnrJ!M9(oQ3@O;8V0NzhNH11+xr zx!Hl1flH#IqxKb@7DD7lUJ0JOzUbS>n&bK7!6^0e#KK&>ZI9Z`*NbBH?uSBu9`gC_ zJVa1!NY0*98}+8XpPbCwR@XGu()cCY%8gzrm=-C_X2_^jOQJZMjBj|AXiV|?`@M2` z3Z2!U*!5!8-ca@M`EjfM>(Y8l&mUN!?H|TvkJhd~TlxbfM~EG~mCxuvJ&J570Hg5K;K(*>#?=L`4+a}*BVQX}8 zD)?5@w27I1at?Xi@+p$uk0z1!p>Jq6XA;H3qR0tj);0K*BP=Vkz=X;CY)u_sG#(Io%1LkPq5_BI3(M zQ`CT*4f%Ar^%pF|(;Dg}I5=423!F|%Y}v;pSs5uWoGG1Q^U(QyJYnD16N9T$wInpR z{f0#t>_mUetP8vRaJTVQ_dQVYO;tZ>z;7X_bZQsVZ)LqQJd3=eRL5J3>+1BoF8^`4 zdFW8`>apnOH!rGK^kRyG!(9$#HULg2^qof>|#kHN!}xr*MJ)(@p<3mMJ6zOjAhE1OTq zLr5{^CZyMH#GeRAs18TX{{0CMwI<3t8ze6 zV$8(Uh`cl1JtS4=qJPl(kXLSJ@aD01gk&{M5Glp=h@)2yhznSh$*+nbJYtn!tOGL-JkOWGkV~!(Detm12Li*$I*F5;$ z>e@BOqQhV-=Hw?eE`fm4k&#`x({CYyIOIXR40$@+S%+*4+Vozc@`bT4ckyPFRwOZN zLtBHg$2Zq7lNs}7Cx;n}s7w_Sm2)@kjqlSZW|GJWbt24g$p(UmUnJT;`g)skGQcEP zviIxLKW|4X#ntnk+(%hjVg0n&g52Jy22c*q;rw-dv;PmaY0=$@b2?}GbFFjzn$(_e zyUuaPE7zlKL5mBMylBoDJTd1}Qx5-7IMZT0vdFFEu;-@c(&+3m?6w?Iu|D|Z&h0z` z1Mi{*g6cPjTSCm*+s;QcRN44>;F_EC zo5hlntNaV`8@7B;8BY7og^oFM@3jJ*GUt4N@ANU`FGAFeaZ;lH0$b!VlA-^ zbOs1=D@xJoFC*BC3x9AGWxuG>xc6nE&PXZXIge5pjom|{*(db1e7!bXVv|ie7X7=; zrKb}Oq>_9o5wBIXb%PRYVDTM9p`Fago{Q7?r-pp^SRWGVABJU_tofBYsetXmbA$K* zgn5f%z*A4(j@MRI#s>s*w++$uYd&Q7NqfvhB)_jnqzLj655q?jDZ-eWqjJYI0c09y z-=iZDoCf67H+m%0^}f-@G4!YI%g4lDvwBlo+#;KQOP~CaCa*iSZpy@61KL|d>uE>t zPMJm2i1d~4UTzN9TC6tmx0cK(47+Vt9B*F4@m)GQ-Zq0|fBpA-9OB&+Lr)vR?|91j zETxse^VDrx>R2Y>c+7&VaCtr?TOXl^3ZwPnf6u-}ikbgO61^z=2~yI2@{U%doiIv& ziouom9-SES2t3Or=-H-vQX$LCUCk`!NR$zF7R2nsqOm!#OMr;;5P7qqtsHk@wL@{; z_KH#cI|6(D#CuIM8;vEC4lp6B%r}Ovrimyu|Bi-yj?Ql;rpcaZJtY&Wu_t+nTB8a2 z;=dkb9lrfpY}AE;5I``(RsVLv&nWTdwyJG zBjfBUvWnXtuANqHX_2Z1yN6QXS$v-jekHM}(VO};!?rj$P~U#LC$82di1XdFerW0k zTXxo$k$$DncVwPvn%Ql?P%0@NE!;oVga)>Qi-%N7y3>c*xG1TsZbJ+NomLN?o2w%u z)o0Rgw!>Y>thQTL{z;nqK+|-p-N112IW9tkc{PU8?$*jJjfdk)p!FoQ9EWvMBl%ck zF?Hu1*S#^SoSVCW=1P`q#h@|4R;LFCFM<8`$GZFXzNx2m&R8cC$kE^*=L_44a*h6+ z)5ps6<9+BJDCBboVh)(kord7xK=HtUH@C?{glp-!&G&0Q)Iwdmzv_wrt7+nLOex>y zw7xdS$9$+LsB>{8-C;~XGnW6gwJMip+y{FL`=Xm`&B($Z;h*G0$jJR)>1jr?7o~

_p2gs;MKO!M9M1>a zgRdAA=Hl%qjO=Dx_Dp|gW%hyZRwmu#pPA`!lfBb}}D``%kF zz6>XlD@L*6Kl&ZS3MZQCC@eE$lxi8P)jms@sOoV=GUUZ(pHI`of&AocMQu$luz!6I zpCgaKlM3>ao7zK##J4s)eE1U|dX_onoX>B4Il5@6lT~z+eBe&zHXo4{%ZiD~szQ$S zm1<66l6Y5InK!(bW%lz?ReaU{n`nR1fmgVcP6$TXeU5;UG+Xsp0*+zZPCG_zC3^?b zOwO5(fWOi{LjBOFvOg+uauNN)K1vU0qlEhm2vCAm_&Y!Y!0H4^Njs*%r~5C$Bk<9? z&=scg@U1QkipzJmX|_uq-?lU+YIA`3R3`N#AGgODWV_28!_#bxi?2YT^Rifb zA5ChU0?k~A;k_+6Y-JGhV7D?BH4aQw=(7wkG(%@8UOC666@27(q1gt8H=GL{?>yYy zsT&JdnK9dZQk9r1t*Z}Pt+9v1MzX!`h4aJFcPBREg5WRrD{_{~_ab^4o|Zq=s}MW< zlZn&59hXqJ;B=N100ToH-)c~tOjfdVAgyZRksQK9Q9{iOM7@5xp$mF^-J#ud8ZrbP=Xmadoa)>hc7Ef(hz-&43K;L_dz!eFH01kuV_9hxM2aEH z83Fz*LuszGv(bwe;*UZ-nZSBg6YWn4b8Wz|v+tc2DakW8H;1DkbI5AyIUm#@<3!iz z)K3^(lk(UmJ;U*0QU0YqS?Qryj#CU=31nLS8dF@tsz!ZIwK>HC1+O%W{D+#Aw}dYy z1NO&@8bD+)Z0QqRoN%K!;xFL~E>S%BgiAUHjpmIh3z(QR;wYc6auha_P#+ba7 z8X~%X4uQ4E{5>r(wy8buL*sL1|!lI{u6v`ak%XVOz047az+mhmtd=G&ze z6yyFS`&d=pUrsIk*vop5=B=-4=X=7%LW0_&QHzy{Bs*l_DcP)yXia}f(nw=yab zajTs9QQEy=uyh(Hfqp4q`7}GywG+k$Y|VqwkBWjV%@9Wl{O4G=s>KfecJ< z##|MtR3K(=9T_F-y_?bz(o{2E`7;*P+=LO~Ta@EOF$QUKaVA?pT)r42;r zM2xYsn+*`U%wo>aArymIC3j+XPUjo)0bhX9z{IH}4BzFIXbq`we6%d!n_84Ma+i&E z@%EM4>*f6Fb$e%&Nc80LnzBUA&M{jWxTs5?G3t?^wDFWxRbfGteKRqoO-J)Q2M!+*4oo|Qx|a?m|a-Wk#Hk%4$?;-6{690272*+rT&Ldl!~zXK3rUsv>5=7y9cF832zu^v`cd4c_$& z_Ie~7xOYt+6K~2XziQTdYhWX3Uiskft*C|K_w42Ll^r;^pfUKEQ9-u)ew^!mN^d+3Dr^K6~TG= zhRyv6aFHct+ucU(|7$b(O(%anoLVkM_pgb8=P>R`3^NIM(}dL)^OFocO);UH@ydB! zkETtBU`*$`bb~+&;hs;KV(sWx3Z!NvLn#o{>3i$E z5ae<*sVka(n?B+%onUV_BmzEdA~ z*x`6?YLYVWn74pb8pg`Oqzd$E<0Y8V1=T@-S@_Q3GAkaXHWHgWQ__5P@CjG!Ck>8u z1nT?-b9xW*EZ50GK24~^MsdrKM<`aekDR~u^&ofSFyGCi5Ys5KvFj-z%J5@br zCu>lY)_F9*7oY7CGfWN;rWzY?rGP=P6a}{~u-}Yk2`I1^gRuha6^Jb&gy5btSS;GH z%k#J@sqkal@a(?7%o)wu-H{MQVUJRxe00ktUvBXI8)a4r*bnW#FCI~*t+^a&myDWh z`YqO`;aZx%XM5z2A;gU9z5T$%=-l5P_bzHfm7{og%*}e`sgyY*jA=6Tnt(L3D=HJ6 zk($ctSF3VU$lMVG_20i=X|OA2Em(J#Ty^=aRq(7?s)T0JwCHj57KZ>L!pS-)O^Daw znR{ya`3KzbdQYBS8qN>0W#}jTomKq|UF@jLNu5#sOm}2oz(ds1%zc=5}!#kyLY(qIE^Vt;vHXfk?tE&?v zdU*ng9AWyj1V2;xVzN02!I=tEzwcon@MWo;!lf9Ofv_J67)B-IUrm9leeSB_v(ap) z@EqQAC7el2n`)@8%9medWMu5$xCahRJKrA(k*^kPWu^ttiRXITMewzZmvMyY&6XQ~ zt6g{aVzS?S^-jFBudDP9qpA+h9l<|Zh_c9?Ie3UioTRhrm;_9ACa(Bx0~AD92eoPbysuq7ZoC&99xVMq~> z9qOLWw1bK&RwjdANCV;2kzLsSFf^AblWSF?^K_^IJI22k>=9oLc- zt)@De;A!}Noa#wt(SDfuRMWGcxGYPKRLP=sa%0#r2;7ru)<4WoL6=ETwCpu$`ziUW z!Cz4h2>&7af40;YpMDI`BY5a#^v#a7R?IivZXk9d=?T;pjaR-SPG2@*^< z98SD4-k5pO_~o4M9|{$pgq+1Iw-oL5wcmVxx0#76*Fe>)olw;+5Z1qv7c{+Nv0x09 zO7wmYL+f~nK6wwC;dQGTyigzc@uUW3ns%()!~Osh#n-2GAZUm6NZS*SbQcYvdK8pi z*|u9RidP~4(Q)AuG2<}Xc-tR@rKx=a49RzYFHF1HBwzbp#!+LyJJ@njCo+O?U&@IO zf$CN_2y$?y2&jV03e-k(jZa6Gh3R5-`ri9rFR3RKwKmB)-@M3Z*6Gx`EbWOo1`GE5 zWi{*X2@wVP+Tw#-A6w-tD~sdS+UQJj8cj1e1>QWB#=WqsvOE?m5%I+m?*2>9Wb5{w zeMT;pD{dE1K~q{^dt3gtaMm5|3e3*X$rqzRmk;~%UY|e{78uY_@xlj0JK3Zmw%k!S z>lrkBS2C>e`0n}f=*Y!ZtiLw>zWdT(b_P%M)~k=GLb@;dj8*ABu>;G_LlwFd1(7$D znG|Y_Oq7=agNirq;=0l)U0l@Zb}XFSnZWt5=c!xYr6Hm|q(ACQ^J=)6>e1F4>OS;~ zlv~lyhB7c-ggwb*k@qD87g^Rg(pZy!=}142d&Mfm=mX=5cxe^N^?$#Pye+gg;miQ0 z=gu8`lL?p@lQb*;otk%)fafa*|MBArxuV`({OE7qr`X4uRA!FnT#?z*TX`eH(-_^W zE5nArIcX;Yv>JWg(t5cEbgwn&)kwI#%C$BG*b4Z>x2aZiv8v_X=tf1wT#E5lqHpru zel8E`jofgj%%n)m5NAg}s2!@AtUi5V%s5mX3Arm=WA4bOLVsj4)%Mk_;~#3Bg*SLc zI1_4*n8yh$4866jbIfRuQW92mE6YbE=#sEidGOvu_-48{rR_CbE@4D6KbYK>s@`bv z;9C~|dh~#DE(eM6!xqfo4s-FIaL%3hgPcnQ=qG0ed0`ydO2Pc!=385m-4PXDs??>88$TmL`Iy>(QSYy0<& zq96jI(rwUP(x7YsX$0v;x=Tt@k&;pxB$SlyE)fA~>CORZh6c&^825cY&+mEGdjEc3 zmTNE8?3rQay3X^uj{1JSrL|jA_4FSr*^_x@V9C=iiV(bna7(q!?m0 zQtNS+^6>OCk!u_a-Lg#<3iK(?a-uYsccbz?F0gB*E`5}wHugCs+aCwZWm=&%g#p|1 zanP!z^G4{{o-iaA4DU;$MN}+Y9tK|HBMVEp&j?q^Fv*9jMyW~VOeynkdCJ!;E3UXQ z+!RgeqV;kU$41opW~%M{wmTom!1Fh!^IPjoS?;Myxht=xdHF?k*}eJpTtR`spLtFX zDNtO(QGkPKxtyz9l=J&97Zegj*^{wnYYD{PRo__XMt2=ouzTKLO}_`;aF{6`TVWY^ ze&(hvYh6xxaKg+nr6PZs1??E>A{?lY7uf-7lWZ~p+ealUef>KN8@PZie zybP7M2iW>82kWV_CsIMCX}L~1`BnN6`JpU`_utCjvtY+NepI2$8;@M28Yv8L?RvSH zQi`-z;tXt1h&D;VeCCdA+jJgsjJ)(v6KC+CBfGW1-%N2w7r9xuq(&Ki*Z;dX_8%8X zObTkn`l?)%>^7vsG9Wa$Sdv&1WI7^M!9!c)mWjHjQ`LoCSfk|wGMS=z*VLKBlKMQH zrPFwnRF6eJTlid+FceV8>vDLT>W29hd5Vac&l(?p5#vlIQ&W;h+b{8*PD%}K_)sud zc83dA5?AE?hxj8X!umj_tVoreogKZ`1_EHj_abnwn0}YZ>vZEl>9sm4xOM^5SLNCN}|Cg&0rFPCM&^B zw6_ha3Hhd@V@?{M{tq-B&U*)o1F!&W7prD zL5D5SEXCb4pLiNdaEFJy|C#&V+_Z^)7_$k*E(1{H);Gbd+1#8#8vb5=bAdpmO&MVT zktykp*GLCJ&_UrzV;@Pjzm{Yu-m8(jr1`uZB-wwoT&(ddog8#s?bD5Fgxy#;`)_oG z?*#L$k~}P{uo0Rn4d_^VP4eFip&e6n`wFyF-&HN|xkK4)ZhQMSsEL1o!uZi{&A%0H zes*3saXwAVoHydf<+Yf` zBaSb_RC&7N5&MQdak|tYK ze%<~-{%3q!Y7cmoc%8Bd#RCsmgxYL8-pUI~{_q5a7aCjvIW={k!e)l$0b}+DQ{HZF zW5ZXub6^q(RD!}ME9nqDx1k3ACoxxDDHaA(FL+R*3`0;Dq8W(%!I&DQ+OQk}$iY{6 zp7l?qD=43c-41%Bcjjba^1 z15xVsVwBkG<@SieOYEjI)xGr9viwe(9)~(9^6Ue^-07J*jD}_9^UH3jXkx zTiG}t{?6dTDFjKx-}_j4o+@1-v~ZrN7p>oeN*~A^!~g&a7LwE4`vxBjpN3KYXDUBg z#3;h;#h1^ojwP5+3v#QZ45 zaA^fbk8;kBl;P0$%3GqPfsa!AKnsC@{btY=Qa%Ji)ClJ{F<=`?;dQnHP8Ddrg@#xK zYF3MJViAwe2MgZ~m$Hx;MabSuoKapNUy)mT`uuZUVHZhuriNB%>PL4FkiOkGz#*Rc z?5^!%ebgl;(zhPIsm%EGkJAm|p61e*Q%800*XQwGCB4DQv(|0d^==5OklBWl3p9o8 zF{6li=nt6lkj?i&Y4l=d_S6G*pqF+V0vwX_hTlTo*Y{AQ9I8*KnGiBw1iwNx=k}QB zA5b(McmY4G_$Zjj)?x?uT1T!8`i05?#)-1Ex^zth~Ad^qm%{LAvh zH6F~aP=`T^`Uc~;D-C&#NK}t5F{|W4AwBRKx)}R9oUbq_#ve|HSb*UkB=Tf=*CpE) zkH`z@T3n8fj!LSkhzp-5buDclBO)Sv)KV~y4v}wEW=%ffrAcVZcw)C>F(WH&oVWWdnOw?nVs%> z&3!`RvJ(I_!qc;U^=^2|6xgP*P1k5h54d}GXI`r;{F zUBERbl`B2{Tt=Sx!h_C!jv_<|=x*6=yi@%V_d_o_LGRh%XAv@%+c3ETCZXasGBGte z&&&u(^OOz0DCBS#A#b*0Rgy_IV?4l(n9+zz5BhDVS2AtqBLm6tq>Gsc7hPVoultW` zWJJkjE@EH!Cy)Fs^eifT`ux0q)Ea;P!xJrSYvxAt?Dq5697|(<`;3<@l2TgE=Z;DV z-!m9wM$7TiR2TT0KgWMeANOjqS`0;=LZIPHw)S!SovK?(d#gEvhYs;`6d_f9P{TdD z8Z{Jh#~c z!<6Wfdrs%3R6Du)u*v3xx~^fu=wcQB=NQ+@pB_?`vqmP#YRSuCHFJ@<0a$rJeAKPt zrbuCUP==KkeU#t*f-adB?tUC?jAbnA*4pnZAF&KULjb{_KlH0pNIUwGaU$LFrV`yx zEtx3L)_(2u6itiozJ(#G>?VzT zWGVl_=*c5x>H!plU0&u#(b8uAwcUoaooSX89#qjN)SEx{YJX?QQK4Y?;3O1~q^arp ze^8ip&wn#>5;gupdssNYk+5l4pn~QbQS{)T)I?9xlSPUL*h-Jl~S>Qba&L zVYD!g5ND>NnnX`-b#1Mz`E@rex`Rq>7O(U5VX^Xv!!e0T3<52N`tqMeSIopL&fkpq zo=tl`q_?K_(AoqG?zODwp4YOEw)&h8#8tzKX@T3ajI1xtTqf?!g#+# z&)4V2xY`{wO1^aeI_NF#XvAXn&|q9wA%si&8Wl{^VljW4kBqj_x&EoN`+Pg~X z!%Yu$MknL`%r}7f1*4&HXWqA;?Tm1hP)w-De>xOPxfBynXo_90Ck>}%hW^PhWSxly zhClC@^xOeCa7rNGR<)lq37NJj{s`ZUo8R6k!(eqLu1O5cZs_(o@pG7{z2di5v_}1w zygXl1)eweyHXXj2F6PX|q5hKplLXW^$b)a7_ecK8r~pMgSB}#c`3teU z(H6D0>>s*!Ru?+o&@lUwzw2e-%6EK(GdlNK8U+b5NhuB0o_L;>W64huk2)S@lp=!b zx50upj#+8sSoAr=wXhE#l?*`;aqB65hw=B$PT>M{ki}8L>QvP~ooM%Ki&ti>{-Py+ z@&T?1u6*$kl%Jw{EIfE}fYpS?-xR?W)?#5!3Aup`u1WavmDE4oX4{vZOEGf+T7VUP zkob7=*2QL-FUhmMUm3l$UT7g;1Hdd0Z80?vFmeR|Jt3ad$F+x#>i7OEztO)uKovnQ zJgGV4=T^QhvuPRyIFlrb!;T3q-9RZ^pWf4AU}KTg%(VD6QglwH=d%!8=_ZEzFrIUD*!!8Q&Sc&90IFAY0X}W!-Vh|-Y>x&FY15M zkvitVS#9r7@8plorWEU*(%wd*MV@5=$z+>w&%38@gM%1U$LeG>vvQdbpGIJY2qw9o zzOgWsgRcYs2VFw5O~TBa^5^q8uzcVD@*E>W6jdz#x#S4-ViYs$cQ{a0_~b*0Lx6|- z$()6yg|Q1HkApnWv=eCX`~9E->wlAs&{k@14e~_&mq7#yN))NZq^zw9b$N_y$m8M5 z(S5ZFno)Rn-}PFz-w9?=lmnx05cK|wKSHSm+m5qXKG8P*&G5tu)MQV17@jI86j%OR zwX6j}AZT%8_KZ6}H)!)xW)MKwWjQ*JN%|DqB7r8AYQfDMM$KwvQeR2QOB z1rQ$me@b;QH5+0{5iKS_95Nzp^w#h$YSct%!{|cSQih_DVd+UtJ4)?p@?CHP7gAVh zYP|&tI7_!P+;E== zo6V9d6R|Ftix>*q1MG|C!wB#F^y6XubJeqxqDw(4&+X<6MZ+)uiBRDZjD6I}Tr>x! zoxt50no2z?OFd`Vs#&H2Z7}Z}eg#V=(m^}D3TC1rMPH?r6ys#Ge4=aA z^d8JL0A*@)=ly0>*!W9?<;$?8Ln`T|A+7GUy#FPTO7Jg2$7e0u+p_S8ebA{-#P#Io!-#k7yYSy6(W5CR zCjk^-98G5p_uKE(1NmBc(0oq(tZG7$4{PjmBU;E9OrEm$GxuC{oij?W%xh8kdu{8LM%H5a^zE4@7 zsK;LxQsc>5o>!mU|2k}5uLZSnvR6@uF2dFSm>_P z-iS6_G(dRc*#XUa{&*XJF83aivOa=&rOxlGNQ+fe?aA+<~0bjqI#6DSVqp1MH84n+rt*dFo; z?&L0D3tIL@(M84dd41eTuCz*Mi_7fuiY1|TF34IHw(!&p1}4;yVyx&9OYE$i#tY*y zOfOLXCmc8|a7%${SRU2gV%VwHbpxl5mbecU~^fVKQD^H@w9bs>LV-0&G9C%RK#{Yt} zG)=>HR0R~**t<}Kq*4mN2>pdP4MD%hn)k|QtC%A9=~TM1q^`f~BCgLXxzJ=yBOA`G zl{0XI1V?BaN0)?iCI!8=@>F1@pv1_a16Nu2uO$5ccW5ByJG8whqxMu3`)69%2=F!h z;ZggHckbNjA;edEAcG=Puh*g|qXRwMhq|K@U!F^yM4N|c#sbs%FHy)SpPd+<2|tMm zHk0{32DJ?G*+*+K@O%Z+3Lb&)C?JBTvU8cBR0zX4L?QF%py_+s4D%pa7V}=vp<8k! z1-qvsFY`nUV8}145Wpk`A_GhE7;b{ED1pS4Z(}J09vUyw zRG6B1-jy(d=poN`Vk~YJv$e@05vGs4v`--X0Kzo$KjM2_OeyIL zoSnOgY8@;k5ETNyw53fFG&xz;Kqz`86D$P%jYfx9}BwSHnzqa%u<`P3->B>@2j zOR?oNA|j&Y)T&}4CyikqiKbu$V3WEmi)?6Doi#wMtB+ZNzRP-Ym zaZcWmXSSOddn`h!+t_|tsaKSGmA}D#&s0$dzo+G^+lcddxn5D=QL9n((xZa+nnt>v zMh<(wdy4fQMwnSgL_B@_0t8Pe{|@ndy&`n5@K`t^4Y*VJ4Q38iRqNCOqh~?GsXdbJ z1Hc-78p99L)QUXa#U#Xl<-Ck*=WMhXmM1^`wgUK*0>J!ORwVAPzGw@@?{nB8F>#mA zGZ@i`Yhs3ZI~?@d!lN@0BM(ow5ZVs8U~+9d31A8Gjv+}?Z8^?z=CwKNI?Dm=MO0K& zhN54P`R3Q$_kb-@SlaWVhQ$Tf-qokt((vL3De;2g_zJaDvE`PD7!pdgS~d#}isBX= z3~lKlfvo@u#Lf!#GB`Od8n%R@2w-cm-`wu$D&LVSw=@lQ&S@F7d;|_L_LH3QgKhsnawPnJBw?O{9=wS4iZrI12`#pnwlxUX*ky=HpTk;z*hnV?{*< zGPwbkzbVtW5QM~>Uzd!l2?vZ0d` zKI9WHzX%NL=L`@mlpRF=4STr4V5zVP(lmoX0sqw~Rn&FhL8l-p=|KG`F*(E-{C(_! zOlCI@R;3O3<<{)E(3H>RISR@na(T9ga*_gorN0OGdx4jsJ(xyypVt5@P!(lm`5i`V zqkyR+0%4BTo!O$s6DF7*)k<1_P_zWImQ+o9LQQbN3J)`JJ7lTFQ75>Lf?1~STZH>B zxxyo7-hCc3ex9QLeI%pctXJ;)$$v&9+b%A=2Lem&Jv=-BZ1NWb3Zt2*Dn7L1r&8-+ z&KN><>C^>r)R<(&@zhe;e1-6-Q_X?x^CzDCg?u zX!#P&&l(_LB36Eq)nBXAHDseJ>iRdX=QEkE_1uEz3ZN1>)Q@s7*8leyxn$WBGzJff z>^&bJM11>7;!YUGe($#NkQpMg{XbfKy_xT*?bN(kBRd! zmuBzf(B!zkevn=GU7Ni4 zT*_aUsd8sgf$8T?XUX!FCC6>8U5b91ZpwY#6t;Z?vfP#?8~}ou#6fl*` z3)v6yznTXQd(1dJRyi=jZvecufc>-rttQiF-b7%Q6=Ftw zJi5Ko$l$B+odZjC(`!=_(F8dtF}+XeBl@rh4^A|t2M854u>BRL-1U|P`^y#VjL)26 zjGa_k#P<)Dz=+MD&FKEbu^~zFq)5@Ja5^q~ztg98Y1c-j0QEv8k?J~B!6&s}J6Jwf zHa6)&?Hicw@egc!Es`9(gNGf-p;uoFZ=JlM@mIdYc)b^Tj64@C@l}|%d5)=;l#6jd ztGc=Agz_$Oi+2~bB=_vdxZD0l%GWj ziD!|3!ZyDJe@tgRMIh3(QTxRCrPOq>%2n^vDj$~Bs&Kk{lmh2cB8*foxLW1KJ(x1X zZ&NF+)QUZeE_9`Tvy&s&vKub8;9TV(SbVa?k61*X-4iK-qtC9mPsMFW`Q)ZR0yz;b z@1JRoS`U+~JDbkIv%Ktnk*W{w7dQ`8D;2mbaGYEhvC-*8Xx&eHMKZ$8k;^HW^+Eg@ zjRZ4txzAPot#R!W&#e<#_UQ=ZpOkg!CPE(i^O5YJ2#qL76?yE&kOizSp&B2rfecv= zos^d{C)GRV$W2#fr1e8}G$L|zRXqVoe-W>RJ2rVLffgw3!(!FtEL4L2YBbFEvyLOh z++xPwv3a_b%B$(%uWrkVk9Xdw4hk04*v1#PNga83rjT>Y>WQb({PE_fSHEc_zrJ}+ zp>ljzNl=6Kkh@UuV=^JN83-^v0gqM6^aNxBx;Qk*Nj(sNtbwA#_@jg&E4r?yK7_R z4|Uq4*^ZMFY?YTuEAOrRHqCzXl#2M$I;3?gM~(uw+D%TQPwM(ir5{l#0+A6BWPXw6 zM3V6+o|zt>RlP|j%Ep!G^y*vWL()S+TGn%L;q+~NdBo8sMrfL2-A>FO_3`QZ0a5{i zqWJc}0C^!5>oGyhmLH>BXufqwZ^F^>=Gs@vaN|?RKO`R@(~VbJU?fxDTd{dR+x}6Q zfKm;FnyXS=6hgIQY0(WkRL2glImS6kJhA09z;F}p3?8<2|1FoToVuoO>0g`0d+VlK zH(}xEw?Hms7K+@$xTK9J6^bGFj8xoAIrZ|lMeGaHNky$F$+RimD3ICMfTHkbrNdc*J_u4^^|T? zF1PmJA?hC1+Evh`a|v^i+2zw0#PW=N?${kfA>2 z6*M4r0HqBIgk(S_em3(M&+AqQ(T}6^l#z9QaP&(Ja|#iy)Hl&nA^?m_-`@9QaCB%y z9(mO-yU)+=@2%w(Ens@jVbY1BibNR?+x$(g6RtZ72!&h`pLHE|hJnJ-W#-`YAA0+< z=8nW+ac)x`5nyd*Q%CPjAh9Y<71-+DWIW=Kl;RXj^@2w%#%U!k=}^|#A9?C_IBrJo z9idL!7$-qA7uAo&#qKm#k97FGpu{yI(1^)ePOLi?)bdbWKXHAoEb`CM&h-d$k!}&g zX`s9PE7OBG==&r9?yjKygc6Dkw5Fkpn}53eCMKvuJgV2N=)$bg)~GfG!?t)>#vW;yxW=E1!YhWLPoU>5`x($f-md$s4%a;o-mqm zp60k8LLUJRd#QC(MCaD&5l7IRTZyD8iyX2@9N{bB!Fd?^VzLrM34o;iJ85XtI*_rC z^_ak@v!e|d_T4{x%9wT<7)oX8^J7^K5j(4)P1PhivJTkP zKTn_Ovfv4Cqru4C{H2e_5jjHY^(^K^-KUbJpPEdxHv16|+kex9uPm}vn^@i8?@XR& zKJkyzCFdEt(Ti=@BKFg%r9tX;l2nF1iS(~Py16ok2ZhOne)Ckuj^TCr;jZj=9JgeM zupGnr*J_XbS;Lp)q=|7|o!SbqyLN0@=v`(*67@?oSW5pCU5K1{`!;X!c#Ns`P*aOG zE%zZix(EE-jcWp4b;}PXX-v>_KP@xG_v@l85Li#jETc|oxGBnORmt@p!4CtRU>&%s znZ^S46i{bi?kVoYcMbIc7{1n;-@O8*{q6i5oa$?s4`DP%!7P7ud}ywnS4co0AyG^# z&eEoOJ-qL&HBU7$lOk%)_-Jc7ta4t{s!9F6gn7nY;iJ^wQRTCrWYpeRSIw5{OjkC< z7!KURRImCVsJ7`xA6wk(fdD28IrZ#2o+DF8lfiK$k?xi5QIt6N`qVG_O9zUsW|V*x zS8}FBU1-NYp&=Pjs-)c?nu$s60b0*}q^aC!%-E<-sPka8R?jTRyP2unk;d+_#EF?Cs;@OFofCEa|YJpZUu6vC^Z?uqgBL@-z-x zl}<`;BmN1ueedUa4>Rsi=Iv{5@7`;wN}BJHs>7BDlaHBq>OW`Jh@`AWU9>ge$L zws!2J5(%1k`+$&P>97#U)NQMa67S>nQlTXHERx8-R3@|=I<8@~`u2Zj04 zlF0&kwkC4jgtHMrp+SEDfBWi8W7PS%*Z!%O5B?EzQGMw)V*Nv#*Psmy(}GvYf!XtM z_gPzuw(4S*BBQckJoKDKD@`J^=ZyF}4J?y~7uzfg8(4I#&9{7p1X|{4mQPN|QlZnq z_gX|V#BTK9B3cG<*;&MhcY3NbdSE7PA`z})gV~0)N>>?fo)|zEC)XVlb6ja-N6HcL zJk8`7%c^Pi8Hn_^k#H+pHMnAi+69YX07FzD9l`zxqlL zdV9;u%Pa(CCLrIF;%oC8>0zW*ig}>zK)LhJc=W-sUNiyBIJ^`l60p<077-B{L)N^u z-)xlgc9xw-eh>Q&*xj*v?}WG^8;;a!xANPoEMAvrGr4nTbB#p~+e+Gh3Zjsp)0Qx9 zC0!?_VYc$x{(Qai4!(TNBN7}KednaObv{?gg1zZ7sbA;q;(`+Fghjt(C%EY}dkq#= zuCfKU)go)xZro+*Lq(;5_YPmy^YD8A_2AJYf;P;N&R}#o!sAXM_QuxkREJ5ARu@TzFzYnu8mj zKl93iQKfY^M3z>QY|cvNC{~sKP-!C5_vcGOwR~{ z2MZpmUKY-LI4$u(FUI-0n{g)yx;jnC<;PvDc*x{E4LL}l(8C;;QCQkhH*EQbcAzFA zV)wfP(J99V;~0q+1|+=em;;56B0t(?k`(Eg4&4sUg^;rLz;X^o$VSJXOr14ZhnI1Q zvCdW;B*)Tg<~#sdf8n8edM@g_1DLf%{;n{MPVZsaVTFaP0{g+hD^aS-{sbDG-xIt` zS=8^UqCpFaVn3sM&7}?sg<+C@5{E$yWwxq$s?gm@*DE?TWAFHi1fr`SCZ0VYye%u% z)Nyy?P|)RN;K-vF77kFB#1%YD%=+UY<8I1XkUJQB87kAl z@oUp1;j8k3TRv{V!U(u2LV1ymogLhW?A_dg9BXjUs$G#(y}iB93)CFyY3a{8cUg&2 zztktj`N2*C203`(a%*PlSXI<(*zpd^s$~uqtqbC-OvGQ0sMJmDKEv!AHSJa&Aeyce zCwL_rImGbS)luY#JMY^|yKsXyv=0cK1u1s$6B0;xL`u z|O_TuN4I-R)tkkXwE zosRIGIzIT)X%&F90wx6uzLm1Ps?#-3Y!i=pNto}}P&oHQSpCX#HG2V$f`xGyVg(`ze)CWvA!Tzvi62t%BH^yi zzgrdD1LnI4GEIlaVvQ@ttsOr^a)msiwjit;X!I=y(k4uavBpH--B|fa>ap=E%5q^P z#8r?oJ}Y=|@I`Ny@|H%dKY*=W>UxZ0xWeY8^Tyu4dz2d_mOVJ%jnCN5)6g%gxz(Hd zL45CeNMy<9yO}mI=XuIHt7m6P%T_4gtD``~N_oCET5(g;Sgg?cX{yuiwNt3LfqdN9! z@;GA49k!epl@iCkkuuwEg3KsYF#99&Tv;avuElEaxw?3k>GM&3yEr`04 z>{_j?-?XU?{`C1!wanWuG{cG{2$6t4mU&nqm=`_&u=9%MYVW%k63MmPv&rV+V$iLl zqmS=pG9A8micDnWn&f@GszI{R4?tA~JFljk43N5MT{Ge?vPt=BrI}oI%ZC%&I zEJ$D{gMb)i1eNX8z#RPA$^KQO$_u8QC$?!EYFD%B<6R{)lL~q=zeSsEr2ooIp}ZC7 z25`4!??LEp2DIGA@DrN==$-=oCiA`baVBAXWR)x-=v*23CN8f?0RGY;(Hdi*J z$tnpZ-vYG$cqM+n+UrUU79gkep3{vt36g~kG|t4lI}#eN?2$~3-hFkqqn)-ngQ;E9 zTDsUG5zGK$R2cb8W2hj=fOF?Ch@qYqnm0VqcvU83y%t7jQ8Y@(KR`cY$9jOY6LH_A z+4Km~9g^YLGNg^6pnk^w@S$?QJR;1|vuA0E7L%Tl&swOK66sQBUNvczbMS*O#t!Yl{txY|aT4*Q=f3P6AP9{n>68lv)4?2-LMJ@A0_(<)+~r?&r_IlqbR4Y>*vV1 zc9Vy#rVg)$Hrc7MUf6%b6dEtPg%~(kS;uyn@yjrxjw!~7Li=->J*sp3gWeYi9AU)V zs_UD{NYXSs+4o!c)^j;h+SeoYN)N9FrUVRywBOW;$y8?6y3IE{yoAdnhH~5!FRyC&mFioW}o7%bM8oM<`N^icak-5-!C{en((;6sL zHm^|ofkth#9m{gN9{*2*;qDuT4hI!w^2*NJnwg~&7y+sm@P{aF>~`mBD@+4=|hf#0rTX2CY;2p&qBhc{SaGWoVL8)=39$sAfrDp95=#Nnbf0i$18 zUIy8y37=CGPRn+bO2VT86(+c*$f&h9Rb0F<*57uHx)T`VEQrW-4GV~4-KLacbVyqD zv@b||nH(PXwR56e!gMnDu5n_NY6&Gu1n~XOpPESOfpQTS7vDVQ-om^6J+;$py?uRE zzvFugq%_pItn{<8+)sCo#r`2Jb|mS%d$`T@0b!&j{<*u<#_rUK!&-h&yli|b5zj_B zE}zPtf_{YdwRkj4wj6sXf;6*iJZWs}0ikErsuOa&oc*5d{A)UF!VCx9qF)gN{#ce( z3Hi#V;!Cl7;howe#$Q;|l7h69D|bXDqj3w#b&oezM<4G4HxeD$lzOOY8(qGfL(u#1 z{kU4PdGXa2j$*JWf~e>7uqC7haDRo^N72TtoW*Kg^e8&j5ZA6Qs$zzFoVU1coi06YvpvZvVYDERVw$6eP39 z^6C8yo9j9W8#~yxHi-$vGNqlp5J^y2lx_Ql(&WX(b*V4YcKWVPwJnJ@@plUzO_a6` zZ>RTS#J0CvX*WDBr58P`sqH-U%OPI4UC72q}5s3ID_3!6nj5kuMSliJ8^aItb z&MFN2XpkXa(}!sc!vx>jg_QF14(n0(@W{iq1p6Pzpv-w}DPF-cx!^J|5W=)1PBa9q zTaEAl#`eiFHer`Zsf@tG>~1-`vXQi=gbt=99XIK1UbYae_Xq%YCUks!5VK+|FOg#hiAHXXIR%li)1aQuUHZFrc0NZ9+@Ryr#cfASQcU6&l@&p8PQ*~ z6hZ6v+n9WES4EoNS+{*B($CpZ5AHIKLgG=1T@2-xU*ou66tikq*-7z24t?!RqRIlj%Q=Y>fMu$REi3s@3gzxAAnw?6>WU!7pAQbb9BGfrpJ zBcjt$OJGn)_$oVhX5?3lz6)F4bmqiv^5KQ$X)RvT$?2^{_X#--PO9f0-QsB1niD)r z)&?9Ctp+!%*0L9C3fGa3Vs18}#t8U+jl{~(`g~_4Mz5G(I%pogSs0?&@Q1GPVkd(A zAiBy}x11zQk^~2%gzd@}+(?9kJ{@ZT54-#DR^U@u>X2-Mo@jl=rH=W$(RcOAVh$d9 zuW&yGE#Yjls+?Gi{09ER#D_T~c-TH*85z~r+dx3>m;_@Pg9$UWq8`)~pIsC=#H8C@ z+*}^%=twX+mT{54_7o=V3P%)RT&?GiJ8DalwX?WyQ8Am__zq>!B=7T&9E#8$0Clpk z3yO}>#rRL+(gUP&;!EpKUQwAOM(Iao$c=KoKE91?JepCC<9O8a8aX49l$_i;VJ_-@ zMso1l>*Wwsc#bc9AX9x=f+`&tfj(&|PG1tD`sU_l<;U5Rly)@<%n_7So%u8ilMeNw zNFoBF3>=wUTs-Vs0~)avA3v^Zbg(ELKm9tbcj074&gYYPZ*`0}v}1hur>cQF4Kt>3 z0FN;LLoAEuIY00!u4N2+2ddv)OdwF?k{_InB0D-&J1h|lFPotnF&F@kn#IdhqKZ!j zBnaG}-xkgK^P6ep$s@i?xE<9jZ}-rK{LU<;Iqry}2dvh|vg(%k+vncYN61;sxrSg6 z9I~;o#d?>;)7_?;d;WSqlIwo(aqRa`gZgGAx8Cb3+qh}uJ+d9N6Ha4cELGu?5?oR8 zSVp@QX{s?$((vo^YbxoF?7I3kz5y?zBu`oK*WDF0plD?F33_9Ng@t#um(te-Eh{E^ zf=jvsBykP$6Jk|7pE>CAot7y?dw_5<+F&pF_(C;-@n))*Iz$^ctKV@} z0j+5j|G6W_SGF>)(zo9#-#m+;YofQz3gEgQb|{1_%WD<~-=ge+zQ`*RGMQW{v=uDK z<~b$|%?3}JOTE2$$P58|ModhM#&IOii4-2Y+@`)j_dWn#sAFNi z#mw^;|KxV|kJMCGe?wW!Y6xL`3b#W$ZsTj5e>@sSFGr;(dg)+XIr8nZu~bzccmPSrSJ!eARXGVShiT^wbb zxRZKkBfPezY7mcy%z5flk+q1U&xIb;;Sp5svTN+@4b5qx7vD4S8m&*0k8#%R`B6kP zJ@+L-pB~Q=4e_GUrww|krvYxeiyc1%Pd_7%!;#4|8~hS*m>=RXVL$ zPm*t7HP*-tu1DLA-`~`9vA6fFb4A+L<0|H!6HONqt0ic$lB@QxSJ(O?{l=tEDU+6_ zqIo8e^}~}u^@R#VmIYne#%O7MA7#!3o6m#TLB*um#6b$vVbNn&G<-^OtdXz1y>z|S ztVAI%uILtx_OBoOLLMzQiV?FGu=*3U>@4y3x-p4hd!$MUNdMrQ^S9q0sm>O&oBX5a z^E4qwB@}bKa?3qAaL}O$44u$^xB&m8(=#~XmQZ7|H|f=>f-YQEBgyhdUf6)J4G&&VUrt2P zE26o5sx#R)<)=8Y3!l4Wx3tyw8gaiTZY9IiXy%Xn!C;UTuqjO_-RkziP>zknzGa<3 z-B5GT|JI_;iwPOH{;52s?Wb)HM}%F|j6K2-dffNSRE$|xux*daWoGr&nMsos<+F#u zIo1ME=?2DmQbVU9$Qu7Cttv}I=}rH)O+#Xmj!+k)yU;68qi2fLjP;+$KYw~h<2-dB zQrr{0KS~ro*-Z^QD;~g!V$DuWZyqsUtJ|uM>gBFxyw@?7QgN5%PL_bEW7ha0*DPz~ ztJCDbUzQ>TM8G+Q6z3GfAcQ{x7Ba0iu4oEwp zMU%eDxdh}MDDT=*Qc{YI9t1C;`SN{N zE>Kf~tpODixY5xx%s%2}$rrl`74K{=$KFi6jG(V?DY1(V=XY5;?@fl=rm=Quogd?9 z7BXDdPn5qk@;tYcOX1}t(3U_6nkt$mX{w+*>d|MsgK-1R9tzO&!|M9Ur}C(QKXBBh zz1&Eu-;MiN!maq;fx>LpTE<0L>W&h#54~io32z5S^;Ddr;Y?vhW=L?ycyr|SJvW>O zsVbLX3Vl#{t#jGmCSo=y=H}j83O8O$%_qRw*PvpF=z4u59I{mGo)+D4WfWDjTwRK) zw2653Qx_Z{>o4_mIiaj;pM-lDvGg-EkJ(N#sDsJG*9JXVArWR(pg)c_x3+du5N%`Y zs*n(3Z454teo5`^avDx^u}Mt?uTVugXPYGJLOSJ-7KtIMH4i)Q2>3i2i`!PeD^)sS zEveXY*CcxA@}{6bcw3x++cXUJUMSkwwnxBq`3)CcLk$vZM?!x@*iF~E~iBgZa zZnq4hXC!`&(Ym-8PNsxFQFiYi7t=c=?K>Fe8rM@C4bt;&5M3nPvaBGxKp4#Rz?h{ zc}G3N`QZ4Vk2v=2%fA(3zDPll0r+407ouAiCq;;=%aw?2mTzlg?`u^7%XWF;1rZh$ zZsfh-meW2nqgR-RP9E?EVc>3w!NmyEvC%S_JB{?=Opy=d2C zZcl+T$9r(Ju$bkdom1Op2URv0`)pcGe9d_&TiA6=gt4VGzvGTO8z!B^Sf%<9r}ZjR zuDHNFeSSE4xz@~pWSh{E+*Iauxk2&eQ6I|X%U%6mHf71q8dUZ>Ih1mnErF(0jwW9k z$L22WJxk8e^;$U%X-#kKLW`Mhrb)*%Ea*hVn#`}Qy-&Ta{rhi18jg^2S^0D2$;}cQ zkJs-$aw-Tc^YLZg~Qdd7v@Y*Bh7C`bR5hoTLA4*Oxkt z4C3u{Na_fftgLw#>S(9de{0lv$E@+f`SYaw>D^%7_kNt>R|2j;9HBaERn`Cc^~Lt; zDr3|zYv!x(f(KVV>^DCb=VbPOHZM!t#?N>^w=mLX^0?@7&qv{OAc(hj-i7voouso_ z`+AYS-qq}E^8`9HcFoMq%zY}gu2Q;ZFJC1O(@K+8+9*cwl#0<`=OHVjK3%Eu#Kts{ z5`a4?40fo$bs!3^l+Q-c=C`+d>o*KrUNI<@c~74Yep+U4W!@)h?J8vOPgd@fT<)jF z7e^{Xs{z43^S)T2U7Hc#HAgj##l3csSY7=hE@S4k1k0uiox|x zYFB`7DL?*h7}-5)IdkU*bmPZApguC4S#$>%m&#>yO;O9O6+663VZK7RnaOnuDkXHvLZ?|?jP>fafyhmnGOjgokFOTz{vSf%tj-W0-Xk03Tt;B8U ztUEO8Jt^cFFD2G@dDe&E1H$~0x2ST8A&I$@K>)#GY6DZEJY7D#?CL8@*!zR4bI@Ap zV49Zdcz1Al0lL}qreosq1bP#%160nVt|xuU74*_flgP!Y;{Rdoz2m9=|Nnnl(vF6$ zVTF)nkA{(z$liNp%U+e0opH!6GueBDV}uYw92^{+Bu>V$x8MEf_5Qp+@AvQf{pkLUAwAGh1}UdHKbj?IcaR?5X-eH49y^)j%QrZzX-)9av~=3DH%Q{cXz(?`UnM>)D^SmS9mn$q0a3@d-h!4 z_t!D(HOe{4L-EX+0^!Y!JQ>39fIxb7RuUmjLF?q!ey@i(`b){uXUv)ooXEreoh6G@ zOp*bk5-qj+$O*ljs|QDf^meFl7vDOtcT)8fX~w#6Fh$#AkW#l#e-ug&t{d>sIpm6OyW0Ip{%7&D6X!X*`uGB3E{;o8U~Y;6GOb z>o_bj$_m|ju(?*~aW_|ZB%tC!_R%3;z`-;!YLc1}9LHKOXb+~q^E+KHs`Nea;1^~> zDB#h=j5o);?DgQ(OP7U21H5L=_0VS_2xB+Xu4vq>y+Y@e}woRsiJFU_tp|(oHGI$+U z;!H9)Ezn4SvShUjVi1N8IPud!s%FGRK?E92sY-a#mb~G8jhFvq6dK(@fypRw!X~z} zT5Fod9iykEg<*N{7Ocg$QbRcfit-kES9&G6>ZPGOrv!sdl`Eb=(Y4ta!OIa%3W*${ zApyA@5n-2f3$e=<7FKD(MxN1g6xa;zR=ymovCTmqcz9WBGm#IrMbIB5>X*p-~^n!w_-7*Q+aiY;MV z^0US&11J&p=kqR18=#?j7AkoY2B_y0in%TkAvZ&iZ+w;&_DMzeW)-r%P8YjxE={V| z8r0*%Y+;VcHW>lmW4-F;Gvne-LU4lkp7&nzCA746>s5mwpYFo!%6lGc_=o}4@H{r1 ze$RXgl^g?;m#?Pxe#Ho-msE{+o~IZ6;;~p4H{w-%HZ{U}bGv6};q&5@5&e$3&4^tE zW-jRS-u~288s-0dZO3vb@i7K z+b4V*zkH4R1YJ9V=ro>mR1jh==<`H%c;%B}h?dUpH;N4fqjYqs>*G*93uQ%rKYDpE zpma}FVRYU_6W_G%AzFdKX=NUM3g-pWI?7Z25807F*hd2RPQ6s8uIIs;AU5k~F*$yV z(|^P^1jQ1qH`i<9h66a)ZIzog?AKF0l2g0ZJv_!cLCAKuI&f`$9!PuZ_PuYBAUdlpX4s(W3S zNJ<7&alo>8p!sQF?u$sFBc}%JG7o1xv6JowKUV1ZhK!MY>&A@;W{YHso_?>sp^7hj z=*9W6+xW9AL*Ci3+qT7=o|C6hVt8_~$%rQ>DeE(J0gLZS#~8kATCUWK;EJ?CHWJLw}hIw?=H zwK_SzXLu()##USRLQ}lxtm&r~KD6yACA^bb&R#vDVKL;&r6k?+Y*#{_i=~u7l{`Hi z9!1ATkv=|_TMeH!Am4>dx9;00^X(^@D3OBA?kSIW!q)38LoutmT_aw7hRVTkyqB^@ za0Qw>U6g}oszE;RvfYHVdGh=Dm$0HWKaZ`WdIOJo!Uck#pHg-o!v-%(&}CaG%{%Gc zYh7_pEu%n8CC>Bt=d9P{4uXle>n#+Ep^F+4a{A!;p&sdMPo}M1_ej<3L;Xw}*v8~YSNM4FFATEi3Pw6%H z1Jb?X?DMg<=)Oal(3P!sql<9=A$Br`L2dXH>l7h$xR5SO5f+ltU>Lr3lv(1LK>e_H zbO-+I$6>-AzlRMq>Jt%>tJL$ZxyI%>avt8Kw+nZ8>*6e|65)!D=fbzB(6O82u{#;k z=+&B;oIRi|61-pH;_*O@{rk5VaCZI$EU-iq-p7ZYLZ&=X#SJ>vY!1go(1DnNTYCuMXuIR5n zllH}$dmZ|LfFs$7H4mXANHzN4+e3E-qg(#&_MmA3lMue_G6k-^2C;tp0!%LgS>Cog zgbF#zN4V(PZ-KtRiT1EOxQ%(P5sSP8w2AjhIhzq69fOt##P%pB08m5EYj@@c&)Ior zkLg9`n)Vxa&JjVuvjF#`g#w$nY&kYWV%p}D-QNg0H_$PB@puSY9Ggm^wUq0c1GTQ8 z>x4Ex!5dwGdv=FaPpj;#sfWD9uz23*0$f``mIWyCK&wGyozS*Ts8o}R~@tGhe1 zv$N#|ICyP!a2NY{c{%RT?N>qugd*BaB@ca`CLa=Prh_Wv*Dsb|Ea0isLAcDJ*LWvH+(hZ&g$uL3i5*N3RvJqUkA4~f+%HZM}@q?I( zj})na@U~XxU4J!z)mv8pGqte$D$BeU^YMJL9&xua%e*)lMr~c)ZLKYBltk(97ed3h zGDa4jyiHtZV3b2=XJ^pGEAsunnDP-aE%fCVxwpH$WMddh4L#`~T+~Mlk*G!-fD{gR zYW+NW53h+QmRJgtPj?9xbNEMtI>z4JeU4s8HAk5#IIGXFih=*=q3RBL^IOWy8NKG4 ziFL%Am)pdPPQ||s!-#9#;cT5T@O(C&PqowFj)!xlR~#k9`8|uBtcNfE%*_s8CnFL5 z(o?Q?3uq=ZXyJYHHW*p1c@`WZp$FOhv+tEzLGN`5z61XO(++uOW5%<-*%tr}!K%F# z786t0sd(eLa=7=?W1ou8=g}Vkh99J-M}^Do@U@g?S%6w8vhCG{>Gqmp4yhqR?*umG zvM>rlJVWbOmqi@Cyu6avCB9pg?1GeiYo@4!QoiwtY|+U;c92FL$0k-#VpErI44IK$ ziMg)Sl~&Bb#&Ay_tD1F>%b<(D&E9UNn-*kkA7I{?J2V&$hfAhbdoEhKF;E>yD2d7{#Dl&8tCgVQYQ8KK&E#>aHmaEqy zCAxgk^XEM z)av$6`b;V8l8)AS@XgBxjm6ckX69G*@L@d3A+yE!6AU-hJ_~{8>8GCS?P!ivR>d$Y zq*%4!_Ln9fd9Ea4MuR=VR_b;kyty@x);fi@Tl+E=a6YiP%+}t(3OPXTva>hp*pulM za@uGoKP9gm)4`BOzdJ#KZ&&apBb3+RLnC&-Mp(6Y9ch?HR~k_p(1b}^V8)dWjS_6S z8|X?~EPy~)RY#vEElv|=0TKRnC?Ge;x+-wK(tXMXdD{OW>={=D#e}l?E9UKx<$|Cs6}rVGt!?9s>~tJ)gDr`G)36 zNYvUWm{smn5c0N;bY)X@k2-=PkPv1LRfHK9^DEMb^Cm!12Y_-%p-)k#%Q=s^-1`vn zLBUr3oZw!ltLtY?Ijpf)lY)R$mSBD(+K>3yiAf^%X7 z$(Ba_Pl9mSh_D0MwKAU4MeKJ#VGqe9bm$3EdwzZ*B4O{{As=nn`GWLpZT-L5B5Nye z4gk5_5Ux$zKikQP8us_=4_cumNc!Z-6B|#+^U~v0`p10^ylS_8CH~&n(JGxxRlQ4d z4iA@}uBwF)lT60lMOg0C4v)i0P+jbnW zK-vc9s1)sGl}Xck4zCO085Pgzk5*FNMQ5|iS`bAgds*yn*FF02XWO(4{C8xNISspbQ z>xEfRz@wq5%b-hin8&{Vj&QK6#q?Q&Uq-KBIq= zIUhA~KEwaMK)sAaAf*7+)&}N6$)py6WdyzJJ#P%==N`1wKz;dtSb}7Ouw+rX9*|+v zj`!R5W5t2Jc38Yn3AH9 z*AgQ6qpXO5)aDA}HhfCD@^VUlNp0JUv7JX{76rJyTZr0&k#+u9ovXi{nUP2(%C_I~ zR_G7|)S4mM=~bufV)2tU5AA&$^thv?<_Pj4JUY`{xeUe}qDF~zXNK%+4>%DoP5XBa zp0wet_^3j}3YG7lcPUFxO7);!utDwEre7Q*cA;tDBI;jFsZ?IBH$`JJ;D4i(QET;u z1IsB2sJg{oo<+=Vv(Kiq@WF0i-~QT66xJ0fCBNdmku}>QW7qJ$SKa1XQ$-!>48?(v zn~txTS^R^OK?tnTqFas5qQVcSdsJB0R2R%xfs0RO-zKK2VB=mjhkRnKq_p|8S!#;A z-ud%GKP<70aWW>mG>teB(Ue-I&gBKgaZW@BfBRmkkMl~Q2t521``#55+!y@VcuY?4 zcb{}@cb>IJI~CV(4&s=dYWBEO-OMSbm}SQV`NC%-mTm{Sg2hn`mLpYo9w{iOMarhJHqp+rEIVqWcD6o$#xgLu9;m5danE^}$Y+%- zghK|*<@V`Jm^$oV_Wq8T+?wGdKmUn46n}Pg4}2jGYfSl0?ue6@!&3U#`u?|@zBFxZ*bR;ByD5s+ylte} zEQlXb%cffKzb%I5Xu-`&6lVy6&4q zg+7dK{fV~Tr!xCMp?o*Kh@-KjwcX6F^&G`P<#19`PL6U`G+!Gfb8Vk=oJOuv`_A^l zLX{)UK+r&$ec!d8GhZE=^!u(Qk0d9zGuXmtr6J*Y-I` zXXHy08(*EQuITKa3PY2ycy4aQZSQdzgk8JqIeE2Od0Ds0Nhr2)x?*{yX3QP}A#8?0teb}zqn&YpqUqO{ ziK#9ZLl~-KbV{@}ryd%j?U_hu2j^L0Ww4YD`bIU6U)P+JX5zzZuXvvze=y?QCmqRq zeRMdII8y?{#?8W(DmD2eyiA_^Hx-R|)cRbf-u{Jgw?MQY3+?29#Dfx*Tb9%@tEqy? zcr*1Pw+xYRP;&nXM762248P}M-xVpB_t4)cS3BX$y&i~I^YlS)xKC5+=xW3 zo)j@r;L>&Sa)16v*+59&;k&q{-Z3NXsDO!MuNY1$W*p@N6&5{3ic0VZ)lDtUpSa}i z%@MP@MXIoNkAbrG%T7Bx$RiUZeco;r54ogcC?ZkL*#D{*=< zr_J7PtCcaYw|dv`a^hS#mw`WD@Nt*wVUoPEa*^g32 zLa#uK4)PwzE^FXg3Qojlq9D5Xk zOPJ5)KJp$+dxR91gQg9SRZY<&DBzrpgr6q_V6jFAZf6O8Ghl2(heB_EIj(=->0%an z!L`|wlmV!Vk>^4}6MAsskEJvPWg01|G)6A(3UE_#%37P4HgMH0Mtbdc{W9jJyhlY} z-eovg*S>gP)JQ8Izy4C$r1htt zCuDtq*{3Kci0O1@%tFI94`^1?fFhM&X3>}a{pJ{HGp3Xd=8^&N1c2KDvO7;Sl zs%GPg5{()ZZnNoRW%?KECsw{Hl`KVZ>yP5&GW|;Dn8hOveH!D5s{{1$CGsZ&%dtc* z3oygcWPR%4xTCTQEXgt_tkEg)EGLl6@3aNOvCJt^RY#VD z79U3WnwEl13f$0;{)2;`;E5iSfAJdzqe2doEx2-s>YZrxE%R9`wx=n)8`(CjEPcYH z;pozdYYc-7qA%MiV)%>MJLwrBhYplF{O^Umcmkk=s;_&yKt zvVFlN5yo^{Lygrst3j3Q_1zV4mEL{Z$XNa|Zqp*+7qj`K#xrRp*~~tf_QY@M9Ymc2 z0|S!e4g6CI1<|TE{S`CPoR);gKTaDoo_k^^$;h8eKGPYwac=O+y~b+CnedHmzn&+B z%KS$qhHqw5J$`UqBV2xNq{dIB`{y^u64tvijTwDhXTaRlBR5yG!0C%vgvt_m@~-pe zI=jHp3Tr6Fh($uBDGrxn6#Ww1+$+M!A=#*lcm_5B>VU}}?YSB-s}hDcUes!wE^pjR z;SS+ESa5xHI&N4dUSKQ+#-{0@G|J3nN2~8@C}XpZP_7i+RdBmd;A)A+9=j*p(B4nP zt5AXXMpZjHJp2k*10SY$u#M`kAC-%`O%{@r^}uqt#&4h^T8D`eA;%j#^ygZO*3XD< zmPd5ct_7K=_uhx>DDIK7AT41InXaylv1zta4nc@BW`kNBdba*&fvGZ1a!Sq+?n$wI z7>l~A&L>YEYqHh(JdTnjp0Qwf`D0yPM)-vH)9|nT6-9aW#gxN4><0>+(U&bJo7|SG zul!k*wmt_sD=4OUClwH;TCE?*gKZZHWjgO)X5LKm=x<45I<`;um!o|B(B?R@!Hg)C zHv3(Z(k@d+)_7s~1#*QpdvKQS{p1-nfSS~PN>8HT91sd}{9HBW%lLA>%PHNz7XIXM zm0hd>1=Q5Qq)3iuE!_cuH1yaB9OgB|h7Xx_FirN2AlB%CpY3zO`X(Ft_`1ZepRUXI zF9j)h8s=8GvCFOtbyA|;@=+JV<0nv=R~qFrYCMW60<0*b{QA!!me1KlMp?@$kvtHc z;gL_ItXxitHIeW>;rv;LFtlWIbLe2Wr0FA&&IqL69ko=_5_a09ZCDH(@XZZX8aAn-anF@^B<1jwe)T3M|AgIM{F@2)(x5VBHfvZP3q zSNElFf-9ExrZ-(61eeJY`e)YTi~nZXbsX<+2ZoScpL|v9nOoCQ7U62N$Id%tuYK(x z6<8o`5O>)()}jTWSdx^{!(D?kSr}oWikhtW{ONEqQY2kdM9m zO{DeSwnC()mppdv)W|14r?E&UbcJH>0F&hIYx<^6j+QXTS&rV4CYZUS))>$7Bww{Y z?m^arsBaU?2SpQP2l{0C=n64ksIBe#J&ZNvcqV&YJtnKy9OQ!Uvf7Ojf4w#ID8M-_ zV|VYh-S65n6B|we5^M24&DvLF_QK`W z+_GK4wq+A1lP4qJTfu6eBUyDS=a8V#0p$|@@fA+j}S&dO?dejDfl3F9_!*2 zg~|s@RoN3W2#W+Lr0t`O#U^T5vr6Y!jz#}?KjAi#n^2h-Rf{<0pldgJSE=z`WYdEZ zsk@d>Z_Je^s#N=odw-X(LI)9jx`n7B3;2aj@Vi%*x-aQKm(DI9St^`)7ddxoR}S6Qyv7zSliDMHzIe}-MzTY6fL zGD*Yik9MqnkL3YK(IYrcGi4phh#V(URLMB}+7?KN7B`?p%Diu*aRugsEsWO* z;nfGL7N%@ZXeix4JUQE}Zmr@!&#H&`^{J=_`8!=+LUG0_8j+==z3^WuesH)T5D-l zll$ZLG{}dXFLS)I#1r*3bhWw)?%g)};0H4JbZ837J|yCNaQnZ23ozC|Le|hlFu6MY zhqy-h*Akb09@IFScno8?W(h4l!7+D^Dy&sJ?5F_Kqpx&gP=}B2oA8KOe4rU%;41r) zPvtFBQr?kq(Wl+D&yqB6FCwk>%{BO#^8RX{!G8d7RU#q~3P6YTKcNeyhLOHgCbO3# zmfj0%zHmmEtV%OxXX6*WqWqNCUs)yuBq!7QsLJ&7z^miR$+RJ>5_e1G5}8Yt+1bkY zDk{zPFj5>i^vX5Y$e$6BliUfJz-s*D*L@^bSPTx<;-qqk7{A1A+7iCR&d-mJhm+fW zI46KnTwj{45mn6i4a%S$#e8|D^}bQnil+#eJ#Mt>E&^}*G~lDaj4jZy650Lr))4%<4y#YXY2lVz z{#KE$c7Z?K7lJI)()MAM4iVH^tej2B`Ekqg3I6Uc`^sqWI((Vk|^i^`CM zsxJs#pLgYTIAA{(UOnX>_HAU)GTQb^XUVRSJG3^26+a9yT*Nf|bfAWB)ydWrtgssd zt0>*!kTB=%)rN+e&t{2{LMg*#G%o7qmhl>O4?0s~nz7ZwONr;|JN6`MIex~R7_l(P zX8P|UqM`wZLn;FdHV^8duW~MEpURwVs3i=r$ zpcv^K{7!H>T8+X1&ST=|&o2ifhxO%FeXb>+oW{HQY95hH2XKbqlyuyXy_B0VB_u~h z(#qFzyPaau`4tYgR;Uq6L?U)Ss3|Jcx_K$Ky0GMjPWOpl_0Kg`mF_^5jXpftHiaP} z>cxr5<6p7xjAKA3X+QmH#LXsH$bwF5tGq{b_Fx3E7iOjtsU8ago=d*;+H;~;We7!V zun+7aQfUgezVeB2204PoXP{OG}S} z0T}p6#t2iHn-vieS5tKm@fRT|v@E}pg1<&4-L_eCyhWKo))d&zUs4GK3-Fm~_^B#H(7n)sA0#i>djt@^E~16(c3){_0m@p`VwsGYIE{u`&0ByD=$O zPilq)11;LHmr1Mphbgr}t_)jirJ^0?%hij#~-S#%e5$f$5wJwldoV&|y*Pz>D%5M}XI%qY~HC8>4xMEK5}ZN6WLhG2p*T15gL^k9R! zppYUAjjQZl@1qU_V!|GQad zLMQBcK>$Y`O5%dhJ%0-edKlNurR&~{8{W3q9$Gceqq>1or&9exk~Ly0e@c#Uad=>C zpnvctzcgBvS~rJXY{{H}Z-#`OQE2m2q@PoNpC$6uY}4D)uM?+pWJeYg4J|K&$*}WJ zZ@2HnMUJRYAXh^cv6mH&wenO^NFi6b?zLnBHGN%eZII+`axUp}5iamw$;?gJ=OJ#F zgHpj&t;~w}dNF-z%M`{Ou9UQ7+(C3VGqwEFZg^qZ>uYD0a#tEX5A)d!<55hRy#YtZ z-($JEc%xOE+7;asZJPUG&stQ^gN{H4h4@|8XVvH3W}hUdIbV5dMI0jgR5qoF$E>&$ zacd(LXHiawafO<2m7R&x%y|H3e5Qw6a|cS!_!rdc%;I!t_qi-!D{V0+Cc=)iC*IsV zNNhSM(sDh2^H)1fOiY=fw(0vTvqz!IVN==Z*f8rms`P9COj26wEbLfx3X4(!2? zXo~9|HwxbZ$WLX}$fEGu8(t+pE0tOAD0aQc+yJxUUXW88oFbhqb84cYZ;~lSO(YK|BFIX#4 zdBw1oSW|@&jJ!m^RI{nf?N~ta+Ky&*8PYW$Z z+yea~6usWHqo$QV_|R^=td>j>}R6UXir*L0u!<)Yi2hEDn&_nL_kx?U7E62J@7sUPNQ3XsR%G@1GGD4ZG;Ckx{^0CBuL(!gQ$YN(=b!-_$Ys~CYaMerdC$y zc)RiZ5oTOw$D3I238*zODTT2op20bPW-k-3zJe$ksR)B;jweyR;8eOc8zM^Y9Bh+N zHml))$KdEYXzrOn=QL-o!Qd|$#Y@2v|Cm~dcB3dN_=XJ2X4?=?|2U0AS%6)%^S{FbAW5`=^8}f`h*x90NNd!IVe135N&a z8h}oXfH|Q!7Z^!$Av<5WV|`0O9G6h89QBxSGKeW>^(!TdQkYQg5pu- z6GU>Vm&?8v^Zo}u#Jv{UmlG4$97}Uwy3}jf&DNM`Xm{4jGbHx&n6Q!CA6TBKDyU3K zSBkf?dmVAKABZ;_>YEtw88EZjOc%5Cu|3TTbA*0dQU6WEt03j(eA$cyesWcGMXy_p z92i6#{o~Uhn0;m6$0~(_w~SBqlKf@Aeulk9{avR02iIujswp(Sb0!bT95=7b#`FeE zddUkmFKaI^j?B;cq6L$;aPQNzlFk}wJC2rQ3H21&?Ub-DdZcUCOB!vPwJ)YA#cwBjZjZU(*A{o`*Ywb5N}`e+ z&K|IDeg0zc17}FlORBbXFF5#>jSG#?a$V!bG9LfJf%y*W;`JZ{H%{Kf{za0YM0%4< zE+Qhj_tN4Il=c7krSf@t72xUue^RB(@Ja1)$T{xslqnIB`^<)mQ1Xz1i z($?NqJ;9_RevcUVh&3?40~m-cVA3I1X}O(LbV^`~iH71(?m$FPQ+OokCs5N3Ly>mI z7>#{mk;%Pq;WLMwH{G5skM*d*x&8g0#n)z6W!gmFiO+5Sp^Po0I z2^3D<^`P`K=P~VhEgRoxvN*r%xi#FX5>==s36P|$+WRova~x#Wavh&q1Hy2 zx5(EtwXTS+A@^)IzY8s9c$HIM)c)8644bYj8CJ-a2+3o^z`$j2Wu>p4$+d7#b>V9* z!@1MCH7{iub8<%KG|FG{4Z3`+0LS<-v(J?x6)!JfgpLl;(nguQ3S*EC3($~QB(fdT zTPl*sX}(Zq{-Httdc8iHk>_msXBYeqDC^g4O|iy4ye8U36igR%dUa0di1T;rxVT@& z^v??%G$-0-c?HIUJdQuNrX@x}y_wB5+w}dJX03g+mHSzejatR-Z=aCI8*)2FZ3w9c*Km3{fardH?@#$!PjR4xqH>~*{deE zsQzOPCjGz6RpcZ1hMAi^i!(0sX zo?ySxW)5>N8!*$mPCi-b?%rIvJ=Azbk#=5%wGE?85$3OW!~apd?CZE|1Ao%P_m0-S zOLDUGeIqC&^hvBrruCk!MAH=wzP1-SSK$pGH=0#Bz{^W`fp9xzgc-1Jy5$bJ`ImXU zPHl@d36q*(LkzIu$V`&@WM7+wRS1T=6xbDYB)sT$@^Y4NO;Jg-nDp)#t zp={{A9XBn)k$dcQ?(wwn)5oqPPG^K^Rwj;FmO~e%a>Xn1UZV=BVk*?PR*}&+c~R%6V&q5lR21Gs>64#oE?Y zK;0zqQGXepo2>i3Vzfx8rDUWLy(fXL zSW#3rRb{#%Yje-K_RL%I<7F8D1B9-Mkqw&qw5nm;uB_?r*K4FrseHj_PTbO9bRATs zOSS6jX%0NnOEXztgc&B~;A2SZdgHFA5zCj$kb0|&3FA>#G!bhY8BZKPQSzXZieBX> zfA8`7m+jrCu;e>w7QhO18k>Kt+U(!_b1}1TSLTl*BJXlGI8{Pu=_0RnRR5koj_CRk z$=pFSJbtTloLp=8X8LgBsSL&ATB~F)!`BsdgOn+wh{oKaYw>DXj;w zFm*Bj4~`8zlV7v2>Zg`_uR5+w2|uo&-CnKuH%Hk&0N+7QVbCbetLFP@Nu~3%H*6|G z|9~v%V&k^NIEIhw=yVNsTD?(mLB@Y3Rw<3_`6qeu-!E$4p_~dYoCYLLz+rM!>XZ<8 zX6fsA%tuFYfvWg7utXs`1~!5198N=|&y)^=3utQw@&q}sSh6{r20LA_ep+-eWjn9# zZxJ4Mzl5L66h1VvHO^h#c<+n9G?ylXtA$jl4M(qxigw<*m%s>vssXq(D7o!8Jb3$b9qwyg@7|0(k_8k5TT=nb-q%s)&CL?- zahhc8Gil3S4`gL-R5b6Ds=@zn12m3sM`$dWOK7KXuRL(M61q%1_pS=0$*B(WP|^J8 z`QT3mNzY#r0-#!V3+exhg>ZWBJ9s!CcLAS7gO>9swBq=>{?S&-9cn8JJfll~yxiGg zA(j5JF>CRHzLvqvEwe5!ASTwBx?Z)kYlHaqt@a@sUew1&5GY*Clxd;%Gt29L9TjXZ zP~k#%Sjm2ZRlf}Xm^Q~ho)~siuzLN^4a|!dFOKP;@Bn&L2rUCyBv4Y5l9C8)XF`tr zQ0xWB>p&U^F*UT@2rvSEhRwrzSFevJ*a1CdTkEOyOTXr&^Bm1S}brx;f{=8y+2?abx=YTK`fHetyKjI ziv#Nd=bq-eNwfCEWSo7>U6EdMBXXxy2uj0&$8TEPj0(noY;3(I&}y1L5K%E-CkElu zx_xxt-)cNK^SIa6fCL#&U2f}MKS5alX8#oLEoa(@ z@9fswWsu?0iF&?q8Fw@LTNG*lGah9v+v4ZTZ-Z~wce37TN+`{5$m4I9 zo2asu8Efe7VCLNyLjXtdJ<8$1_C#j|1}-d|HJG2sdhtwjn{PVr3N%NcW?sA6Cku%k z5ExdGqMfyg9tV3H_(3h($wpria=lbm{RYax{Eb8Pt7`G==84*KJwR>9QoVCnwqLkS z5_?f<#F9|a$}A9B9bsYP9+yvH$$K2c(KK3!6 z{14@|fC$4v@KI9cbO^T?e@JYtaRt^J@KQ8QwE@5KKW5E{AHW%g`qyfgM(n-hB8LEk zVT>`O3ar#s_|xO8v#!E&Mf%I8{84V+ z%3r;wAR8vOz11)|Ir&4WRHM_+EYjyQ0X_Wg*gv?Py=639m%`fR4jDfF-uM{@>0pgM zJgtCId-%B)mK+MCMNEo$e^l^17CUP%;p4;G(2xy%5GZDzPa#O*|`^@=YP)ZswJqb9B7hbO2Ro`KkD6~$@xOSjSnEb%nfBUI0h z&KI06)6`A(acc1vl&Hbe4Av$HeD2^oa;phglzmHbs?x-Y^5wW1U8z8+k+;B<^UJc( z7Pzlv1T^}JSIM-tl549m)k(XCB|6>-M)WyV`ygUW(Y!JRoqmYeEaP5A zAH6pg?qOnproIE6`dxfP#Q9;y0J3MT*Rf{=s#ZK|PR z=^Z7OKww3%C7h_;X0q>%ai8%5GQ+F`)$dLlv)H?kx@rFge%ny0> z>bwBuLGui+KLh_I%RB-x-rEb^RD{0qTB@NFb91_?0C$^Y!MU#gjC%CTOQ_iw-}RIFsSYZ@a9B0lEQ03v+i3Mugr99V> zQvixSSj~)kuc0~;_fX()=so=KcE1nR!Fr%K%Y5gx;Fe0@Po^BK>CI@2WYj_nS#7^b z@BY>r$}Q<^zQ62i08l)8p)(UnpOKfkHPrSJrkDd!gT)!SEsOMHBifwS`xQ*7d75B2 z?YN{G#efhwKvHW*vDW~!9fA;Tm)z4UM_Mwm*C$5&_*0`*92tUsiVJF>cN$? zIgi=5CX7Poe>|B~qylYAIuUn2ut|ANk*5xAE;7iDd#=dWf|W=MKS_b|7_PAPoPVw- zJ6}H((9_22DMElU9tK>^^!s+K8|4J|`d_+(^>y^(){u9h)L{S@FQ+b*-utZ$!cej; zQ<(d*`NvEwM8RwB+2(4tSn~SqFLUSjC(aXw62ZYb!~2&I45j$&Z-t32qHU333b046 zzv9i5stXCbS-;_dyo%XM#!z+=cG7#tx^{0J-GPjFwK?7izwI-pu$S{=A;fyq)2bP@ zf{*Z_A@n;%mm?!G9Q1MlKVS<+J8z#|EWN_?e*-V5w87_;Teg0hv-Twr6|T?ADu|bB z!sEj=^|?A@J@G`g_gr>g{fm*JDnsG{+|M78OLCyfNhKwm?Ho)iIIRa6Vd|Ky16f{UY#XR2`GA=wDNzv zLzlkfbxe|u{e@$YwE`)V6#i5McAk;a1YWXS}Hwt{81v^o82RIeP#Spz*>kddlEV` zD{7H2M}S{^&Y{DgP;=#&Bm?UU41Bb+5znsuY_0XL; zL^)XKdLEto%UxJNv`&QrmO!CT@J>qhPDZgc;kuzMv;YB6wD;up8pcp>v*~Jq&lIzF z6Mgap?kRE_;w^u@O<-*3dD`EMV4ej!OWztS5xYHrsYs4v{(*RuPVH>F*HLu$5l$QD zGJhuX{{`fsrqw;07cf@HN)+#x%3bY&5nHA_O76uL zx-dy#K4cK!2PeFMuLF|+bPEA%QsBf1?4^!xUVRSAZe!Tc#XR5_*dM|bHsu!w*v9|` zfdGbvydr=cRIHHkMW$bCuWo~i05&%$vi84IFzp>(jQ7s`H~1aNa+FB;X7`*&yiL{= zu3qL4A2H?C*QFdnz(-_E;R=*?yx3l0uHI(hucK3iN{Y9z1*GLLP6D1`RXzv%KbBvq zEM`J?Y`o4RzFI*uNv6<48=u^=!A;n@*8l}_wl1N3C!^)#B{<$&a^)zU^7TY;p*z5M z3!>;wvVi6f^hB_t%fRwpn0}sQ6D|6?Qc?2urGrM&(~zkVH5^s6*<= zf1a__LzK)epES`+XyF1V1*GXdVC^J05aCmxSmFQBAgvEo6TzH`!VyZb%Xg|VaR0Gw zNS8{${nv`4b2(f{Y~chVOhz6x)~#A0ILiSZwM+;s_0v+q9zXco!y;n(>5V3r8aDqw2F|1aW&{9Cz!^MQ{*@&o$agJO8| zm6nzcNlN}Si;%o|IEa8ugO`iu96~qkeso_jzHEwGKh&1IVlsof0z>%kmNVP@=^-Y< zosS|2#vt1QK_y&9IL+`Ecq>4?MRk@B!O7IJ^cA=~=LE(Le*)a7&|+uVZo&tlbJ7DP@Mj?VBeku;^fG z{+!Txh#=-&yzK+-8Gzp&_Lfj+BqjpIas;N{%VQx?B9{A`QX$GLe2_4d$m|M`Tk5@p zVpH!@oFS+ML6f2u&v)v!4KQ{dc^(bLTgR$;{y#hYIOnjYU(SBd)Hlt~#nU4)9|I4O z0Up?7X;bmRp|kX}OCt1`EYQhEE2V&C>)DyWgVR55{W|-fC9q%uu2}oAQ2v)9aI9si zTZKkkWk-I4q2Fpxt$o-30&n1pV!fRo6f2h$bM*%>4FWGb0q)DrfA$!t>))j2Ep>hC zUITM8aC8Q^-#aYru=!Da{*Sx{$1+VlkAB}}-woWmlJMJi)oJIR)l$H-Zi<1s${ztY z8_)b*5mwi?#}j&$jQao6i|(8Z2KuNl$}i~S-j(x@{#cf};jh}&r<%t?yMYCqWw3^b zkfi3#E9Wh3Y>s&A?`?@&KmA6K#i{jsj+!3;u8RX6n?Cyw$hjgQ=iW<-S^A?6TB9m} z&mByz`&qd;u=wsl30>zm0Xkxq!^403@vpHjCBny zLkvx=OiZmzjdcx7tqcs3k8Sot(U6;;l9^VCTZ7PS?oU7sx*!`elasBI^9w4AGSf3k z7@T1&1;?V2%(T=Bh2Z?OlJdl&R0W{*h8(+&ZUJgEglSAkElw`VEGWs$&tt&QP#om$ zq~Pi7tPoI?pO%@ED$K*!2Gnc>)0~@_SDKcXTvA$;T0~fPOr7m~pl)rr?);S09KzZR zHJTOzwJCzM6{MtDd1MBq7CYsa=A~rjr90(UFc=zG7*v>B8fhD78^qtO&;}|Nfhi74 gEh+|iEx^T1*HF(yLB`#x0w~Ym>FVdQ&MBb@0CvhFLjV8( literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_tx2_jc4ic7_nt28.pdf b/docs/graphs/l3_perf_tx2_jc4ic7_nt28.pdf new file mode 100644 index 0000000000000000000000000000000000000000..352d0556cab90d535f3be63e73df272778e6b85a GIT binary patch literal 32273 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 SKRnCH&If_0sl^o~5dRNPn6Bgi literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_tx2_jc4ic7_nt28.png b/docs/graphs/l3_perf_tx2_jc4ic7_nt28.png new file mode 100644 index 0000000000000000000000000000000000000000..ec691cd3e97a419ff6e28f04dc15f2fc42d6cb1f GIT binary patch literal 94620 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

ikiy{y~i;+r{gmS06+*9OKZ*d`9U#2?C?n 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


fR0? z-mb`eW(B_%-G}?h0K`x=1!n4OT_HQ28>)5zM(_d!T&=~TMcr?UroX-qS$x;B9o#qe9 zc#iwwc?Q!?s~;(0<~8$BRG$AqRK^~T40Bm`6cK!aXI;3BXKZ|qu&)0@JpAj1t@T%z z8ynppvBBs@iv=Dmh}VJ<9(E#u0rem5MPkObgdK+AyU;&-9En@6&&}O0Z)84q#lCM> zp(b*kOWxoEGxhtBFmz%&s^zZ6PnuL|I0CngF8^%mklMr|S z7KsXx1yyE(Z0fw!n@)#JC{N&1&AIUjDqa4d5y(vE!MN_1obVF;*V3kjqG!u<2fI)XEvbJL=PJC;Uw3T zHwY&s=O;YEWHf387dj5n5M*f@Xg&fT%j0Cg0RZA5@^odwCki9j?ra2Rt-+bwlujZsF&l zJK?0!@GV)Olv+raOwFZr*U%G^9*txC=$)JXSdX)&TW=0yqm;Qz_Lt`aR(xvf(E?e$ zis;!=A%$yrY0g((OY3URW~+q4fdj4Io7WZmK_jM`){&eJzl2U&hLgc&-jiF%gj(bW zRX78=Tn(_|NffY2J<@nAQ)fhhGTYp)3(k2Fa-l97NM#r>h;U}67Lm#{_B+PSacUar z>6*G#(Z>YD&KI6>oc3SV(>sPO=1B^5+U>tVbmUNo(?BmTIKTQEuMqjXw~>TJ<^wHB zdBUe9`VEVjXzWB385oBnQA%q_eD^83{_;c2MJ1N$0;p?&2&6J17cegyHq1hFa($yR ziW=ZxCGy1Cy2KWRTT9j=r)^ek7^C$gyOOBO?tyJf?t1VgQrXJaSHg%8tIg2I-^7sX zlfI=KPr7S~IjGG9RSgglp3FUwO{8{%+t)J-Q^t`XH#)psUnB0at95a*z+-$vf`o>D zJ}7_*x{3KffTt9=l=!H1GZiB_XTL!%4Ci8I-Eu(MOWR2$fuajAH&DYU1*Zd}TLgQi zdU(Ex`zrRkP=Pbw0vzF%Oz^HW@_kbMPlimxPf#pc4kQ=`*zG6JsdvFHOV%CcAeA{3 zeJ3NV)7Uopy>j1-O0Wt{N;m>eLO;2y8XP}#hd~7>&Yv+@pF|qoMs1u zG$PWGgh#Yw$<>vR=rocbwPhzG z5sO%>&F|!Q8+R9KFXzG*O~d9#0eL*qF3mwARN7ohD2|tKHd1xx!OY-JQ;_M#ElsEN zBJ+mObVyP~8njb5H^?;eE|1`eFdgvWEN{*3DZOXhIRAH#HD>FMihhMR5H?D@%bf95 zyPxQqr$~A9wB1`?vB8=!+FkEgSE3!1Gj{ba%VXQv^#SX!=VK}EokomA%d!CNj-t!v z#0B||5dGanNvl2URa^&|YkRKxYo7K5V~n%J>hd_*C~x^fn7{x=TyzdlVbupxO@5*c zj)i*~7cG8}XtJ$wa8fnLQ?2y^)N<|gWUpIh_`YrC|zaO>U54epUzR&M|#8Cv* zZ=LibID2)2Q`aCd6RmDM2d(A%0ZJf$s6~GaIORJnE3P5vjw9!%k_#i{?zGh?QZd7O zXP5IcyM$HUFE#9kanY&)Vi^bwYIh$c`w;f0yzq8h17sgwF<~`CO5_ED(8*h#MS&3a zfOn0hZmEnn59?#~{lIzNIM=| zWsmoYgKoFdnYwtaXC~t)xt7jD9X_Ok0&jmYI{riQ&QE-4=q4RZh0U3e0<0a9pBa5a zB%E{N_*b?J_~)?%iA9-AaFZl>KsW{EB!A3cj>(?-0b`!X*j#uGb2n}hW-;1MtF#7X znKCpKmrX*uNVFSu=3{p2LSY(llCQu4*%hTw6|!Ak@gkcN@nQGEwJ)(2k_H`ee(_QS ziYVTtC7kS>GCW3-kiIEh)4pSsFUSRB0wXMB7x4L@Z!XsvUCTm53o^$yJb`8XeWJfr zXcgdRqk^dnS!jLJ(rfK62Y&+N6(%+Lpy^(lz7^Us6HBXhm0BZzHqlFveqUgVKk(Rg z5Ez+|$?Gul8b@oLnaSbcZni!?g%S1}x8KyMt{Ik+_YxRAvZ=|J`aqA0>~jy9iH=N< zEs2M^lah6^MYZUQ61s475@S6_zW8f>}6~Ay7tD zi@fvk@WU@jHexPDg<05h6U&Zo@wak7XzQY^$UQlTn5Aba&`EDH5B%9TQMLO`sjYRS zrsCxbQKGpo=?CF^%MIo90i%#3R{{c587J%cr2W+#?x(^!n>YBvV2cQ@=m>vH3bf+e zd}ZyHICi~w6q%TnOyl5QOM+2HbPm4Bi~Z~#%Px;!zYkncly1B@+MFHQKaJ(rWPK`$4P#yugLmECaeVL!Mu1`@cEo zyYu|FMR#WUc+&a`uYu6KF-n=k^F2J+S6lwdg8JCeuh4XXOVT)Xpwk*ZlJa}e)pvqh z!)wMaCYtG|+c4!<-v{pqDu&wBX>PPCiW27c_<0+KfC)Ptyv*7}kO1{d%;7EGi72|r z*`3rP3RA zizx0A+8g_L^dkDiK2qs&`MLsS=|6ze4ZbuRelt7C(!@2UXp5_S`HAhelKv}WuFbg8 zW|Eusgto5EWiF#3sZy&nW}7GDYo(1m-iExsZ9-*vyd&>Qo0YJ2N~Koka|kk%js|Uh zw|b&{+Z23Og|qyKj-6ql_2QXr^UE5o{u#I!WOa4N?5=edyEP8i z#YURnP7-dxI-Md$Ivrbo|2}+vE=~W~A@coQOsIzTE%*)$)7H85&xjA-{}J)w7tv8a z?1N+4^Txf>MGd+U`U<$|8seSxZy#ld*Yc10 zzh2AT@Lu>@3%QcYEm_9sKr-~&PzYgpS$u9B`_xE=hci5BoH^{V{uKOYYdwu-#fn<= zw)=zXQ0!g}3QK|Se5bFf=R3@E(KP8h>Z)Igh2FYFd!O2dYtD{IfB#0dgTyN&{Tc@E zMupCu$%|%NVKp&bz>z&tj>Xm1>De4EjG+>K%&ny;4lkWs6&zr&DF;vxAHzV6-kq^N6MeSD;~IQ>XRMI1t5 zw!6Ab)^yy=)}@HW;-eOiV9KsNVl>_;tCLyhA-tQo0oC>}BB!DX+u23dDWh+NRrjR0 zxf6ro%qao``~zo<4-q7jeVxBhBtrSs&zFw`6b_ZHu?f`zy{e3bNvqZ}Fqv(0x)xao zxx?Tef*NyYgjdr!(MO4F$}Na)RQXud1Fh^8HJ$1!OQS4>f#a)ENBpQ|y*x(Ku+rVR zKx|-sUHmdR;bTyy35$1KQ)G+3j#2a*FOgRmk?o-2ljsh7y3M_gvV|mMaage$Hc;-s zx7|j)U+-`YYf?Uhjjk^r6}Gv%chiCG$a>B zW7J`8$o-T`T3M1eM}cEtWwcShL;AQA39 z6KG5n5qDTd-x#NX3H2faOe9D8u2a%^K|EVEzv<>^2D^%Xd^LjDaHu@-ax(4riRf3T z6W(S-;wPdAemlCEEH+cmkFcwk9G1t34dAcZqL*Anfw{o@LoLfUC}2y`e3U{?G{+d_ z2a7dL>UG2h2YTVMRip+7W~XT1(Af74?RR=Ne!l*^`U^MBZ-ZP@xBW7R?0q)NP&9HF z{!Ln4vj?9_fCSN3Jk0aweXPU~T*`Pz3fT8i3AJEaSFcCofazNSV z$aVYNCJ%m0QmXl(f&2{CUS6MigYYJTHFE*B-y00eQ^h^YO|pxK52sXB^x@kSXb)oc zYreU?V=><)Xxxg^V`A9OIkPRZF%UPBSR!r*gs7zwaz~_~j}9yYBTo5e1>TCti99wf?!I>x zvzeN()IXb)Oi0~1_=?k+1FW~*I~B0&1w%1t%>fFziW9aOA{nV0k9V1=!XlCy=!aty zwB5`c?e^(T#;&zRzaGpmEnsROyJrncBj>U+o1=L?>>y}P?0NuHA-k9DaB}nq2dwCKOQnC_`Y)@udaXWMj{`=UsI;flSrav(01OI5GpzxqUSgR21J0u=}sa9`@{-km3 zTO5qf{QkIO&iImY@`X8vOW>msrE%z}OuVpfkIb=#I!RspEyiYZyv=h-5_RY$6n5Of z@~5ry2R(^3leUMt6GgSfMw1y(_3)+t&$jz7CmSgyk91K3Pu(-2`BXW!9sATpnH{Dy zMV%e{G{?4^?AYk0r;{HTpDSLaQRgaa(;ok9ZOKXo&B(5D8_Td^I&mWUPjuN6BM&EM zQ}%b-+azgNcXChJtnhy>$&WLjCrs^KT|5|mDd}}!tQAY?o(j`}Tz%SQZxi_? z9D`-d(PcX5K*EReXTwmYyq_SJ&(0X!>off+UEb=C6zmgw(T!};(ejxm1j3!5?67Ci zs^#cl?TMb%0_LB!N}&XTo%ARCvBOloKfzSJ-E<<#*8&Jw=u>U-HxAuuv;NN^V7jTp zU-p8wIS2~)5#N7bpLs=9*5-yG+ed1d7%VHE+7L$ZBMvIA?@XaMcO#0_O5ShLN4ACU zAxEi<$P0BHaCw~wz?|9j$ul#PMwu7^FxNbIzz}Ct>{*2QjZXhf0GReGt36;QG!Yx~ zGrdbbo+~zyh-yBsE4E!^$SK z2yjYQ6?ehw`4VqBfK@bw4^hh{+;@Q-<}@65<6|y(b3zsu9)lq}&ML>#xSDcV4X}(xm(O)FJKjjwN*<*Jx(tbUN#RD3n0VFv{1Ch>EbIG5APlYNY zmuf>t@xuaQRSE!aexfb~Kq2Os0;%;(DeqlQ?2B6e#xS-cs7-d+#1RBbLK+#nCZizr zoEuBDHktXvLg{E?A@K{Eq8V|hWZKIUR?HSV-GmppHQ|Y3uPGos?wVzW@hO%O|*=o=KR^Ae`U_A>6*wKBBVpVHFy8 zh&o{}qOAiNJBfy|X*{b>Q5idxXW1tN3IXZUp&So6fTR({+pOhq$2fFP)jH=qH%XY! ze>|sdt9n1?HV+0qGRcEGZysv+dpWKzfZmVr}FK2Ais0zrM>2#FUitL1$m=H=tfY0XH(k-=V0bd~ zbu;$WfD43*? zObLe}Q!i?fXYyG?!gpx4bH`&zNA;4bWi`(SBn17e@G`jO&i&dnEAST2nM= z;E5f-vR?{(a*_**jZWg@(=s@OwiVv>vSyw+G^}Nm7wpSo{w@4E!9Sw?-t+zBz98BF zykI!RqW^Hpy_3!FV-ikV1!FbCjKF9oLP1%Y6HYvNtAd$Re$5KQxu+RQB2Jm6iC%MD zkU|mqFWbhd$j8`VCeqwUOrkgoyCV|9L&Hc3jPgg%mY;xbmz4arLm}Z<(u4gcFio(m)U`5WA@bJ)>)gza2YnVyAOEN1ZgJk!QHfV1Uk{IZkVcd zPT*A+;eq4|&wMoN53W#R8A0s(PO!Vh(46UzeWgGaknYqYbCRQLuSDmnMB1H0e^EDBVg)00@!EGMU*o zFP)kAiB9dAMI6rWvxk;V8ZI*eZIle)ld76kQ&-1WI1x-3;_ z`*zW;mZ~wjc5>IC=fxiLRSTQt9$7n`k}lov#}0^)wvn~BJ-XTVy;ihpRl6=^VYlhp zF4~E|eW>&T_w^#VX(p-d$b!+#(&^HBNa9_?R|}BbUYWm-Gpw^9D>YHK=;V*EAHtn4 zJ~MMh;+{XMml2oSizEmOJxhUY(J*+J@mfq|Ik^+hX}v=S3!Oz06nBt69r>77nzm)b zSqkfm|FU(#78h0T0JSc45LWDLywZFO700nx!ytBB&Dhzf`yjaSc}Nh=V&ezG%2i}^ z5o-R1+IeP)qAB3YrNMo+f!cq`JqPxbwqNS*Gh90fYGXGZ#6^6h`jD0Jv5!JD;$Cg& z>#S`wb3Zd?!`hX^B)p`ck4tzDmt;GM;xcoDt88V&I+bL5+DA;eLJNSN;Jlle-~n!M zCBvHHhozU=IPe+Z&*bl@@GG4?ePM#`LGG6yS1*Lw?1@xB>G-^wM+?aPrMI~G?H%PU9!H!oKDqTbyIX|$c*G%tbe>f^o*bw&Dm;=w}*cl znhd}`a&t}PI&ym(!k(d858lj1dX`_EqnTM7AKazP&iTO3bVL(C9@uq~ZsL}3BRHU8 zTa|&i)lKoTEdx@lBkQnGuG3l3>+6c`^p1Y7GUmRuA9?QYrq4vbgGs1ZAIz&bDu5pPWE0v;cv$BeT{kOpVFHq-iW^)z2f5SZgf+3mK$;sJN%$)3898Jue$a(*^ z`U|Of*qf2FDH(k;`&*JXGqp4lvvVicVTUx}VCQ2e2k>+1{jCyrw6p)eYs75K%uN69 zDm6z-;Qw8tWaJ1*;!Y0uw;bYjw$2d1iTv+GRQ@YdJ0GO{cY^<%!9T^7f;9dsld6lc z^FQSO3v>KM#EhKG{??MSeKE6fHFLH!G5QNj+CuWUTiSjjXVb8>6}5G;{5SAl1N{}{ zp9B53R-7Qow~46XW7!2S8Nx|7i!o_#v|W4~&D8<9}g1JpUWx=7cP=|M4u>|B{7^lN<0~ zV>mk+S=yL6{%bj?*x5Og|5g7#*0Qv%xg9xVoPU)h$aRGHxWvTxBsh5Z0bD!)ZeDgt z9)4cPS&~PRM~sh8oZ}<;|9_KzEPqu?PqV*zguHbpXCp`Fe`uDAlb4GViH1f}Q3~n* E0R#-aCIA2c literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_tx2_jc8ic7_nt56.png b/docs/graphs/l3_perf_tx2_jc8ic7_nt56.png new file mode 100644 index 0000000000000000000000000000000000000000..861d80782e4d9914426b4616685e7a632c1fdadf GIT binary patch literal 102875 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

&CD-YHxrg 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 literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_tx2_nt1.pdf b/docs/graphs/l3_perf_tx2_nt1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..66c808c9c916287debc7863866d64ff8e72fb316 GIT binary patch literal 26390 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 NAp{_hoGOgqzW_rlg#!Qp literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_tx2_nt1.png b/docs/graphs/l3_perf_tx2_nt1.png new file mode 100644 index 0000000000000000000000000000000000000000..a6e5dc4139672c5e340f0e3c9a5b8a542387472d GIT binary patch literal 71627 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

sdz#PSY>3q6Uf1?@ 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%0Dk2ZW8r7p7 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 ZAR;Kr$*Lmd2|q`vDQPL@T)KYm{{WdmJk9_B literal 0 HcmV?d00001 diff --git a/test/3/matlab/plot_l3_perf.m b/test/3/matlab/plot_l3_perf.m index 8717fb5eb..3942d2e59 100644 --- a/test/3/matlab/plot_l3_perf.m +++ b/test/3/matlab/plot_l3_perf.m @@ -152,8 +152,8 @@ if rows == 4 && cols == 5 set( leg,'FontSize',fontsize-3 ); set( leg,'Units','inches' ); %set( leg,'Position',[7.70 12.75 0.7 0.3 ] ); % (0,1br) - %set( leg,'Position',[10.47 14.28 0.7 0.3 ] ); % (0,2tl) - set( leg,'Position',[11.20 12.75 0.7 0.3 ] ); % (0,2br) + set( leg,'Position',[10.47 14.28 0.7 0.3 ] ); % (0,2tl) + %set( leg,'Position',[11.20 12.75 0.7 0.3 ] ); % (0,2br) %set( leg,'Position',[13.95 14.28 0.7 0.3 ] ); % (0,3tl) %set( leg,'Position',[14.70 12.75 0.7 0.3 ] ); % (0,3br) %set( leg,'Position',[17.45 14.28 0.7 0.3 ] ); % (0,4tl) diff --git a/test/3/matlab/plot_panel_4x5.m b/test/3/matlab/plot_panel_4x5.m index 40e212a68..c7e97434c 100644 --- a/test/3/matlab/plot_panel_4x5.m +++ b/test/3/matlab/plot_panel_4x5.m @@ -100,3 +100,4 @@ outfile = sprintf( 'l3_perf_%s_nt%d.pdf', arch_str, nth ); %print(gcf, 'gemm_md','-fillpage','-dpdf'); print(gcf, outfile,'-bestfit','-dpdf'); +end diff --git a/test/3/matlab/runme.m b/test/3/matlab/runme.m index 2da7d7442..747989b76 100644 --- a/test/3/matlab/runme.m +++ b/test/3/matlab/runme.m @@ -14,6 +14,6 @@ plot_panel_4x5(3.00,16,12,'1s','../results/has/20190206/jc2ic3jr2','has_jc2ic3jr plot_panel_4x5(3.00,16,24,'2s','../results/has/20190206/jc4ic3jr2','has_jc4ic3jr2','MKL'); close; clear all; % epyc -plot_panel_4x5(3.00,8,1, 'st','../results/epyc/20190306/st', 'epyc', 'MKL'); close; clear all; -plot_panel_4x5(2.55,8,32,'1s','../results/epyc/20190306/jc1ic8jr4','epyc_jc1ic8jr4','MKL'); close; clear all; -plot_panel_4x5(2.55,8,64,'2s','../results/epyc/20190306/jc2ic8jr4','epyc_jc2ic8jr4','MKL'); close; clear all; +plot_panel_4x5(3.00,8,1, 'st','../results/epyc/merged201903_0619/st','epyc', 'MKL'); close; clear all; +plot_panel_4x5(2.55,8,32,'1s','../results/epyc/merged201903_0619/jc1ic8jr4','epyc_jc1ic8jr4','MKL'); close; clear all; +plot_panel_4x5(2.55,8,64,'2s','../results/epyc/merged201903_0619/jc2ic8jr4','epyc_jc2ic8jr4','MKL'); close; clear all; From 25db9033d9fef4dcc6333968c4be6fe5ec22f8f0 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 19 Mar 2019 16:30:23 -0500 Subject: [PATCH 026/109] Fixed broken section links in docs/Performance.md. Details: - Fixed a few broken section links in the Contents section. --- docs/Performance.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/Performance.md b/docs/Performance.md index d23ed99ea..3e78fdddd 100644 --- a/docs/Performance.md +++ b/docs/Performance.md @@ -5,16 +5,16 @@ * **[General information](Performance.md#general-information)** * **[Level-3 performance](Performance.md#level-3-performance)** * **[ThunderX2](Performance.md#thunderx2)** - * **[Experiment Details](Performance.md#thunderx2-details)** + * **[Experiment Details](Performance.md#thunderx2-experiment-details)** * **[Results](Performance.md#thunderx2-results)** * **[SkylakeX](Performance.md#skylakex)** - * **[Experiment Details](Performance.md#skylakex-details)** + * **[Experiment Details](Performance.md#skylakex-experiment-details)** * **[Results](Performance.md#skylakex-results)** * **[Haswell](Performance.md#haswell)** - * **[Experiment Details](Performance.md#haswell-details)** - * **[Desults](Performance.md#haswell-results)** + * **[Experiment Details](Performance.md#haswell-experiment-details)** + * **[Results](Performance.md#haswell-results)** * **[Epyc](Performance.md#epyc)** - * **[Experiment Details](Performance.md#epyc-details)** + * **[Experiment Details](Performance.md#epyc-experiment-details)** * **[Results](Performance.md#epyc-results)** * **[Feedback](Performance.md#feedback)** @@ -107,7 +107,7 @@ When corresponding with us, via email or when opening an you specify as closely as possible (though a range is fine) your problem size of interest so that we can better assist you. -# Level-3 performance results +# Level-3 performance ## ThunderX2 From 6385a3ed51ad4b9a447044273cf5e247679b5cd1 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 19 Mar 2019 16:47:15 -0500 Subject: [PATCH 027/109] Minor fixes to docs/Performance.md. Details: - Fixed some incorrect labels associated with the pdf/png graphs, apparently the result of copy-pasting. --- docs/Performance.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/Performance.md b/docs/Performance.md index 3e78fdddd..6b04a0656 100644 --- a/docs/Performance.md +++ b/docs/Performance.md @@ -146,17 +146,17 @@ size of interest so that we can better assist you. #### pdf * [ThunderX2 single-threaded](graphs/l3_perf_tx2_nt1.pdf) -* [ThunderX2 multithreaded (32 cores)](graphs/l3_perf_tx2_jc4ic7_nt28.pdf) -* [ThunderX2 multithreaded (64 cores)](graphs/l3_perf_tx2_jc8ic7_nt56.pdf) +* [ThunderX2 multithreaded (28 cores)](graphs/l3_perf_tx2_jc4ic7_nt28.pdf) +* [ThunderX2 multithreaded (56 cores)](graphs/l3_perf_tx2_jc8ic7_nt56.pdf) #### png (inline) * **ThunderX2 single-threaded** ![single-threaded](graphs/l3_perf_tx2_nt1.png) -* **ThunderX2 multithreaded (32 cores)** -![multithreaded (32 cores)](graphs/l3_perf_tx2_jc4ic7_nt28.png) -* **ThunderX2 multithreaded (64 cores)** -![multithreaded (64 cores)](graphs/l3_perf_tx2_jc8ic7_nt56.png) +* **ThunderX2 multithreaded (28 cores)** +![multithreaded (28 cores)](graphs/l3_perf_tx2_jc4ic7_nt28.png) +* **ThunderX2 multithreaded (56 cores)** +![multithreaded (56 cores)](graphs/l3_perf_tx2_jc8ic7_nt56.png) --- @@ -197,8 +197,8 @@ size of interest so that we can better assist you. #### pdf * [SkylakeX single-threaded](graphs/l3_perf_skx_nt1.pdf) -* [SkylakeX multithreaded (32 cores)](graphs/l3_perf_skx_jc2ic13_nt26.pdf) -* [SkylakeX multithreaded (64 cores)](graphs/l3_perf_skx_jc4ic13_nt52.pdf) +* [SkylakeX multithreaded (26 cores)](graphs/l3_perf_skx_jc2ic13_nt26.pdf) +* [SkylakeX multithreaded (52 cores)](graphs/l3_perf_skx_jc4ic13_nt52.pdf) #### png (inline) @@ -248,8 +248,8 @@ size of interest so that we can better assist you. #### pdf * [Haswell single-threaded](graphs/l3_perf_has_nt1.pdf) -* [Haswell multithreaded (32 cores)](graphs/l3_perf_has_jc2ic3jr2_nt12.pdf) -* [Haswell multithreaded (64 cores)](graphs/l3_perf_has_jc4ic3jr2_nt24.pdf) +* [Haswell multithreaded (12 cores)](graphs/l3_perf_has_jc2ic3jr2_nt12.pdf) +* [Haswell multithreaded (24 cores)](graphs/l3_perf_has_jc4ic3jr2_nt24.pdf) #### png (inline) From cd81a6a50a22140d26f6990ee0ea88f7e193c077 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 19 Mar 2019 16:50:41 -0500 Subject: [PATCH 028/109] Very minor tweaks to Performance.md. --- docs/Performance.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/Performance.md b/docs/Performance.md index 6b04a0656..b38a38659 100644 --- a/docs/Performance.md +++ b/docs/Performance.md @@ -5,16 +5,16 @@ * **[General information](Performance.md#general-information)** * **[Level-3 performance](Performance.md#level-3-performance)** * **[ThunderX2](Performance.md#thunderx2)** - * **[Experiment Details](Performance.md#thunderx2-experiment-details)** + * **[Experiment details](Performance.md#thunderx2-experiment-details)** * **[Results](Performance.md#thunderx2-results)** * **[SkylakeX](Performance.md#skylakex)** - * **[Experiment Details](Performance.md#skylakex-experiment-details)** + * **[Experiment details](Performance.md#skylakex-experiment-details)** * **[Results](Performance.md#skylakex-results)** * **[Haswell](Performance.md#haswell)** - * **[Experiment Details](Performance.md#haswell-experiment-details)** + * **[Experiment details](Performance.md#haswell-experiment-details)** * **[Results](Performance.md#haswell-results)** * **[Epyc](Performance.md#epyc)** - * **[Experiment Details](Performance.md#epyc-experiment-details)** + * **[Experiment details](Performance.md#epyc-experiment-details)** * **[Results](Performance.md#epyc-results)** * **[Feedback](Performance.md#feedback)** From 14bc42f3f72269ed11840dc06acaf0df12d73fd4 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 19 Mar 2019 17:04:20 -0500 Subject: [PATCH 029/109] ReleaseNotes.md update in advance of next version. Details: - Updated ReleaseNotes.md in preparation for next version. --- docs/ReleaseNotes.md | 57 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/docs/ReleaseNotes.md b/docs/ReleaseNotes.md index 193de9342..6266d634e 100644 --- a/docs/ReleaseNotes.md +++ b/docs/ReleaseNotes.md @@ -4,6 +4,7 @@ ## Contents +* [Changes in 0.5.2](ReleaseNotes.md#changes-in-052) * [Changes in 0.5.1](ReleaseNotes.md#changes-in-051) * [Changes in 0.5.0](ReleaseNotes.md#changes-in-050) * [Changes in 0.4.1](ReleaseNotes.md#changes-in-041) @@ -33,6 +34,42 @@ * [Changes in 0.0.2](ReleaseNotes.md#changes-in-002) * [Changes in 0.0.1](ReleaseNotes.md#changes-in-001) +## Changes in 0.5.2 +March 19, 2019 + +Improvements present in 0.5.2: + +Framework: +- Added support for IC loop parallelism to the `trsm` operation. +- Implemented a pool-based small block allocator and a corresponding `configure` option (enabled by default), which minimizes the number of calls to `malloc()` and `free()` for the purposes of allocating small blocks (on the order of 100 bytes). These small blocks are used by internal data structures, and the repeated allocation and freeing of these structures could, perhaps, cause memory fragmentation issues in certain application circumstances. This was never reproduced and observed, however, and remains entirely theoretical. Still, the sba should be no slower, and perhaps a little faster, than repeatedly calling `malloc()` and `free()` for these internal data structures. Also, the sba was designed to be thread-safe. (AMD) +- Refined and extended the output enabled by `--enable-mem-tracing`, which allows a developer to follow memory allocation and release performed by BLIS. +- Initialize error messages at compile-time rather than at runtime. (Minh Quan Ho) +- Fixed a potential situation whereby the multithreading parameters in a `rntm_t` object that is passed into an expert interface is ignored. +- Prevent a redefinition of `ftnlen` in the `f2c_types.h` in blastest. (Jeff Diamond) + +Kernels: +- Adjusted the cache blocksizes in the `zen` sub-configuration for `float`, `scomplex`, and `dcomplex` datatypes. The previous values, taken directly from the `haswell` subconfig, were merely meant to be reasonable placeholders until more suitable values were determined, as had already taken place for the `double` datatype. (AMD) +- Rewrote reference kernels in terms of simplified indexing annotated by the `#pragma omp simd` directive, which a compiler can use to vectorize certain constant-bounded loops. The `#pragma` is disabled via a preprocessor macro layer if the compiler is found by `configure` to not support `-fopenmp-simd`. (Devin Matthews, Jeff Hammond) + +Build system: +- Added symbol-export annotation macros to all of the function prototypes and global variable declarations for public symbols, and created a new `configure` option, `--export-shared=[public|all]`, that controls which symbols--only those that are meant to be public, or all symbols--are exported to the shared library. (Isuru Fernando) +- Standardized to using `-O3` in various subconfigs, and also `-funsafe-math-optimizations` for reference kernels. (Dave Love, Jeff Hammond) +- Disabled TBM, XOP, LWP instructions in all AMD subconfigs. (Devin Matthews) +- Fixed issues that prevented using BLIS on GNU Hurd. (M. Zhou) +- Relaxed python3 requirements to allow python 3.4 or later. Previously, python 3.5 or later was required if python3 was being used. (Dave Love) +- Added `thunderx2` sub-configuration. (Devangi Parikh) +- Added `power9` sub-configuration. For now, this subconfig only uses reference kernels. (Nicholai Tukanov) +- Fixed an issue with `configure` failing on OSes--including certain flavors of BSD--that contain a slash '/' character in the output of `uname -s`. (Isuru Fernando, M. Zhou) + +Testing: +- Renamed `test/3m4m` directory to `test/3`. +- Lots of updates and improvements to Makefiles, shell scripts, and matlab scripts in `test/3`. + +Documentation: +- Added a new `docs/Performance.md` document that showcases single-threaded, single-socket, and dual-socket performance results of `single`, `double`, `scomplex`, and `dcomplex` level-3 operations in BLIS, OpenBLAS, and MKL/ARMPL for Haswell, SkylakeX, ThunderX2, and Epyc hardware architectures. (Note: Other implementations such as Eigen and ATLAS may be added to these graphs in the future.) +- Updated `README.md` to include new language on external packages. (Dave Love) +- Updated `docs/Multithreading.md` to be more explicit about the fact that multithreading is disabled by default at configure-time, and the fact that BLIS will run executed single-threaded at runtime by default if no multithreaded specification is given. (M. Zhou) + ## Changes in 0.5.1 December 18, 2018 @@ -88,7 +125,7 @@ Kernels: Build system: - Added support for building Windows DLLs via AppVeyor [2], complete with a built-in implementation of pthreads for Windows, as well as an implementation of the `pthread_barrier_*()` APIs for use on OS X. (Isuru Fernando, Devin Matthews, Mathieu Poumeyrol, Matthew Honnibal) - Defined a `cortexa53` sub-configuration, which is similar to `cortexa57` except that it uses slightly different compiler flags. (Mathieu Poumeyrol) -- Added python version checking to configure script. +- Added python version checking to `configure` script. - Added a script to automate the regeneration of the symbols list file (now located in `build/libblis-symbols.def`). - Various tweaks in preparation for BLIS's inclusion within Debian. (M. Zhou) - Various fixes and cleanups. @@ -246,16 +283,16 @@ May 2, 2017 - Implemented the 1m method for inducing complex matrix multiplication. (Please see ACM TOMS publication ["Implementing high-performance complex matrix multiplication via the 1m method"](https://github.com/flame/blis#citations) for more details.) - Switched to simpler `trsm_r` implementation. - Relaxed constraints that `MC % NR = 0` and `NC % MR = 0`, as this was only needed for the more sophisticated `trsm_r` implementation. -- Automatic loop thread assignment. (Devin Matthews) -- Updates to `.travis.yml` configuration file. (Devin Matthews) +- Automatic loop thread assignment. (Devin Matthews) +- Updates to `.travis.yml` configuration file. (Devin Matthews) - Updates to non-default haswell microkernels. - Match storage format of the temporary micro-tiles in macrokernels to that of the microkernel storage preference for edge cases. -- Added support for Intel's Knight's Landing. (Devin Matthews) -- Added more flexible options to specify multithreading via the configure script. (Devin Matthews) -- OS X compatibility fixes. (Devin Matthews) -- Other small changes and fixes. +- Added support for Intel's Knight's Landing. (Devin Matthews) +- Added more flexible options to specify multithreading via the configure script. (Devin Matthews) +- OS X compatibility fixes. (Devin Matthews) +- Other small changes and fixes. -Also, thanks to Elmar Peise, Krzysztof Drewniak, and Francisco Igual for their contributions in reporting/fixing certain bugs that were addressed in this version. +Also, thanks to Elmar Peise, Krzysztof Drewniak, and Francisco Igual for their contributions in reporting/fixing certain bugs that were addressed in this version. ## Changes in 0.2.1 October 5, 2016 @@ -439,7 +476,7 @@ While neither `bli_config.h` nor `bli_kernel.h` has changed formats since 0.0.7, ## Changes in 0.0.7 April 30, 2013 -This version incorporates many small fixes and feature enhancements made during our SC13 collaboration. +This version incorporates many small fixes and feature enhancements made during our SC13 collaboration. ## Changes in 0.0.6 April 13, 2013 @@ -478,7 +515,7 @@ The compatibility layer is enabled via a configuration option in `bl2_config.h`. ## Changes in 0.0.2 February 11, 2013 -Most notably, this version contains the new test suite I've been working on for the last month. +Most notably, this version contains the new test suite I've been working on for the last month. What is the test suite? It is a highly configurable test driver that allows one to test an arbitrary set of BLIS operations, with an arbitrary set of parameter combinations, and matrix/vector storage formats, as well as whichever datatypes you are interested in. (For now, only homogeneous datatyping is supported, which is what most people want.) You can also specify an arbitrary problem size range with arbitrary increments, and arbitrary ratios between dimensions (or anchor a dimension to a single value), and you can output directly to files which store the output in matlab syntax, which makes it easy to generate performance graphs. From 38e2180bd84429d5813f158229da0adc54bbb165 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 19 Mar 2019 17:07:20 -0500 Subject: [PATCH 030/109] CHANGELOG update (0.5.2) --- CHANGELOG | 1045 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1041 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 784c9f5fd..3ddf23302 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,10 +1,965 @@ -commit e0408c3ca3d53bc8e6fedac46ea42c86e06c922d (HEAD -> master, tag: 0.5.1) +commit 9204cd0cb0cc27790b8b5a2deb0233acd9edeb9b (HEAD -> master, tag: 0.5.2) +Author: Field G. Van Zee +Date: Tue Mar 19 17:07:18 2019 -0500 + + Version file update (0.5.2) + +commit 64560cd9248ebf4c02c4a1eeef958e1ca434e510 (origin/master, origin/HEAD) +Author: Field G. Van Zee +Date: Tue Mar 19 17:04:20 2019 -0500 + + ReleaseNotes.md update in advance of next version. + + Details: + - Updated ReleaseNotes.md in preparation for next version. + +commit ab5ad557ea69479d487c9a3cb516f43fa1089863 (origin/dev, dev) +Author: Field G. Van Zee +Date: Tue Mar 19 16:50:41 2019 -0500 + + Very minor tweaks to Performance.md. + +commit 03c4a25e1aa8a6c21abbb789baa599ac419c3641 +Author: Field G. Van Zee +Date: Tue Mar 19 16:47:15 2019 -0500 + + Minor fixes to docs/Performance.md. + + Details: + - Fixed some incorrect labels associated with the pdf/png graphs, + apparently the result of copy-pasting. + +commit fe6dd8b132f39ecb8893d54cd8e75d4bbf6dab83 +Author: Field G. Van Zee +Date: Tue Mar 19 16:30:23 2019 -0500 + + Fixed broken section links in docs/Performance.md. + + Details: + - Fixed a few broken section links in the Contents section. + +commit 913cf97653f5f9a40aa89a5b79e2b0a8882dd509 +Author: Field G. Van Zee +Date: Tue Mar 19 16:15:24 2019 -0500 + + Added docs/Performance.md and docs/graphs subdir. + + Details: + - Added a new markdown document, docs/Performance.md, which reports + performance of a representative set of level-3 operations across a + variety of hardware architectures, comparing BLIS to OpenBLAS and a + vendor library (MKL on Intel/AMD, ARMPL on ARM). Performance graphs, + in pdf and png formats, reside in docs/graphs. + - Updated README.md to link to new Performance.md document. + - Minor updates to CREDITS, docs/Multithreading.md. + - Minor updates to matlab scripts in test/3/matlab. + +commit 9945ef24fd758396b698b19bb4e23e53b9d95725 (origin/amd) +Author: Field G. Van Zee +Date: Tue Mar 19 15:28:44 2019 -0500 + + Adjusted cache blocksizes for zen subconfig. + + Details: + - Adjusted the zen sub-configuration's cache blocksizes for float, + scomplex, and dcomplex based on the existing values for double. + (The previous values were taken directly from the haswell subconfig, + which targets Intel Haswell/Broadwell/Skylake systems.) + +commit d202d008d51251609d08d3c278bb6f4ca9caf8e4 +Author: Field G. Van Zee +Date: Mon Mar 18 18:18:25 2019 -0500 + + Renamed --enable-export-all to --export-shared=[]. + + Details: + - Replaced the existing --enable-export-all / --disable-export-all + configure option with --export-shared=[public|all], with the 'public' + instance of the latter corresponding to --disable-export-all and the + 'all' instance corresponding to --enable-export-all. Nothing else + semantically about the option, or its default, has changed. + +commit ff78089870f714663026a7136e696603b5259560 +Author: Field G. Van Zee +Date: Mon Mar 18 13:22:55 2019 -0500 + + Updates to docs/Multithreading.md. + + Details: + - Made extra explicit the fact that: (a) multithreading in BLIS is + disabled by default; and (b) even with multithreading enabled, the + user must specify multithreading at runtime in order to observe + parallelism. Thanks to M. Zhou for suggesting these clarifications + in #292. + - Also made explicit that only the environment variable and global + runtime API methods are available when using the BLAS API. If the + user wishes to use the local runtime API (specify multithreading on + a per-call basis), one of the native BLIS APIs must be used. + +commit 6bfe3812e29b86c95b828822e4e5473b48891167 +Author: Field G. Van Zee +Date: Fri Mar 15 13:57:49 2019 -0500 + + Use -fvisibility=[...] with clang on Linux/BSD/OSX. + + Details: + - Modified common.mk to use the -fvisibility=[hidden|default] option + when compiling with clang on non-Windows platforms (Linux, BSD, OS X, + etc.). Thanks to Isuru Fernando for pointing out this option works + with clang on these OSes. + +commit 809395649c5bbf48778ede4c03c1df705dd49566 +Author: Field G. Van Zee +Date: Wed Mar 13 18:21:35 2019 -0500 + + Annotated additional symbols for export. + + Details: + - Added export annotations to additional function prototypes in order to + accommodate the testsuite. + - Disabled calling bli_amaxv_check() from within the testsuite's + test_amaxv.c. + +commit e095926c643fd9c9c2220ebecd749caae0f71d42 +Author: Field G. Van Zee +Date: Wed Mar 13 17:35:18 2019 -0500 + + Support shared lib export of only public symbols. + + Details: + - Introduced a new configure option, --enable-export-all, which will + cause all shared library symbols to be exported by default, or, + alternatively, --disable-export-all, which will cause all symbols to + be hidden by default, with only those symbols that are annotated for + visibility, via BLIS_EXPORT_BLIS (and BLIS_EXPORT_BLAS for BLAS + symbols), to be exported. The default for this configure option is + --disable-export-all. Thanks to Isuru Fernando for consulting on + this commit. + - Removed BLIS_EXPORT_BLIS annotations from frame/1m/bli_l1m_unb_var1.h, + which was intended for 5a5f494. + - Relocated BLIS_EXPORT-related cpp logic from bli_config.h.in to + frame/include/bli_config_macro_defs.h. + - Provided appropriate logic within common.mk to implement variable + symbol visibility for gcc, clang, and icc (to the extend that each of + these compilers allow). + - Relocated --help text associated with debug option (-d) to configure + slightly further down in the list. + +commit 5a5f494e428372c7c27ed1f14802e15a83221e87 +Author: Field G. Van Zee +Date: Tue Mar 12 18:45:09 2019 -0500 + + Removed export macros from all internal prototypes. + + Details: + - After merging PR #303, at Isuru's request, I removed the use of + BLIS_EXPORT_BLIS from all function prototypes *except* those that we + potentially wish to be exported in shared/dynamic libraries. In other + words, I removed the use of BLIS_EXPORT_BLIS from all prototypes of + functions that can be considered private or for internal use only. + This is likely the last big modification along the path towards + implementing the functionality spelled out in issue #248. Thanks + again to Isuru Fernando for his initial efforts of sprinkling the + export macros throughout BLIS, which made removing them where + necessary relatively painless. Also, I'd like to thank Tony Kelman, + Nathaniel Smith, Ian Henriksen, Marat Dukhan, and Matthew Brett for + participating in the initial discussion in issue #37 that was later + summarized and restated in issue #248. + - CREDITS file update. + +commit 3dc18920b6226026406f1d2a8b2c2b405a2649d5 +Merge: b938c16b 766769ee +Author: Field G. Van Zee +Date: Tue Mar 12 11:20:25 2019 -0500 + + Merge branch 'master' into dev + +commit 766769eeb944bd28641a6f72c49a734da20da755 +Author: Isuru Fernando +Date: Mon Mar 11 19:05:32 2019 -0500 + + Export functions without def file (#303) + + * Revert "restore bli_extern_defs exporting for now" + + This reverts commit 09fb07c350b2acee17645e8e9e1b8d829c73dca8. + + * Remove symbols not intended to be public + + * No need of def file anymore + + * Fix whitespace + + * No need of configure option + + * Remove export macro from definitions + + * Remove blas export macro from definitions + +commit b938c16b0c9e839335ac2c14944b82890143d02f +Author: Field G. Van Zee +Date: Thu Mar 7 16:40:39 2019 -0600 + + Renamed test/3m4m to test/3. + + Details: + - Renamed '3m4m' directory to '3', which captures the directory nicely + since it builds test drivers to test level-3 operations. + - These test drivers ceased to be used to test the 3m and 4m (or even + 1m) induced methods long ago, hence the name change. + +commit ab89a40582ec7acf802e59b0763bed099a02edd8 +Author: Field G. Van Zee +Date: Thu Mar 7 16:26:12 2019 -0600 + + More minor updates and edits to test/3m4m. + + Details: + - Further updates to matlab scripts, mostly for compatibility with + GNU Octave. + - More tweaks to runme.sh. + - Updates to runme.m that allow copy-paste into matlab interactive + session to generate graphs. + +commit f0e70dfbf3fee4c4e382c2c4e87c25454cbc79a1 +Author: Field G. Van Zee +Date: Thu Mar 7 01:04:05 2019 +0000 + + Very minor updates to test/3m4m for ul252. + + Details: + - Very minor updates to the newly revamped test/3m4m drivers when used + on a Xeon Platinum (SkylakeX). + +commit 9f1dbe572b1fd5e7dd30d5649bdf59259ad770d5 +Author: Field G. Van Zee +Date: Tue Mar 5 17:47:55 2019 -0600 + + Overhauled test/3m4m Makefile and scripts. + + Details: + - Rewrote much of Makefile to generate executables for single- and dual- + socket multithreading as well as single-threaded. Each of the three + can also use a different problem size range/increment, as is often + appropriate when doubling/halving the number of threads. + - Rewrote runme.sh script to flexibly execute as many threading + parameter scenarios as is given in the input parameter string + (currently set within the script itself). The string also encodes + the maximum problem size for each threading scenario, which is used + to identify the executable to run. Also improved the "progress" output + of the script to reduce redundant info and improve readability in + terminals that are not especially wide. + - Minor updates to test_*.c source files. + - Updated matlab scripts according to changes made to the Makefile, + test drivers, and runme.sh script, and renamed 'plot_all.m' to + 'runme.m'. + +commit 3bdab823fa93342895bf45d812439324a37db77c +Merge: 70f12f20 e2a02ebd +Author: Field G. Van Zee +Date: Thu Feb 28 14:07:24 2019 -0600 + + Merge branch 'master' into dev + +commit e2a02ebd005503c63138d48a2b7d18978ee29205 +Author: Field G. Van Zee +Date: Thu Feb 28 13:58:59 2019 -0600 + + Updates (from ls5) to test/3m4m/runme.sh. + + Details: + - Lonestar5-specific updates to runme.sh. + +commit f0dcc8944fa379d53770f5cae5d670140918f00c +Author: Isuru Fernando +Date: Wed Feb 27 17:27:23 2019 -0600 + + Add symbol export macro for all functions (#302) + + * initial export of blis functions + + * Regenerate def file for master + + * restore bli_extern_defs exporting for now + +commit 8e023bc914e9b4ac1f13614feb360b105fbe44d2 +Author: Field G. Van Zee +Date: Fri Feb 22 16:55:30 2019 -0600 + + Updates to 3m4m/matlab scripts. + + Details: + - Minor updates to matlab graph-generating scripts. + - Added a plot_all.m script that is more of a scratchpad for copying and + pasting function invocations into matlab to generate plots that are + presently of interest to us. + +commit 70f12f209bc1901b5205902503707134cf2991a0 +Author: Field G. Van Zee +Date: Wed Feb 20 16:10:10 2019 -0600 + + Changed unsafe-loop to unsafe-math optimizations. + + Details: + - Changed -funsafe-loop-optimizations (re-)introduced in 7690855 for + make_defs.mk files' CRVECFLAGS to -funsafe-math-optimizations (to + account for a miscommunication in issue #300). Thanks to Dave Love + for this suggestion and Jeff Hammond for his feedback on the topic. + +commit 7690855c5106a56e5b341a350f8db1c78caacd89 +Author: Field G. Van Zee +Date: Mon Feb 18 19:16:01 2019 -0600 + + Restored -funsafe-loop-optimizations to subconfigs. + + Details: + - Restored use of -funsafe-loop-optimizations in the definitions of + CRVECFLAGS (when using gcc), but only for sub-configurations (and + not configuration families such as amd64, intel64, and x86_64). + This more or less reverts 5190d05 and 6cf1550. + +commit 44994d1490897b08cde52a615a2e37ddae8b2061 +Author: Field G. Van Zee +Date: Mon Feb 18 18:35:30 2019 -0600 + + Disable TBM, XOP, LWP instructions in AMD configs. + + Details: + - Added -mno-tbm -mno-xop -mno-lwp to CKVECFLAGS in bulldozer, + piledriver, steamroller, and excavator configurations to explicitly + disable AMD's bulldozer-era TBM, XOP, and LWP instruction sets in an + attempt to fix the invalid instruction error that has plagued Travis + CI builds since 6a014a3. Thanks to Devin Matthews for pointing out + that the offending instruction was part of TBM (issue #300). + - Restored -O3 to piledriver configuration's COPTFLAGS. + +commit 1e5b530744c1906140d47f43c5cad235eaa619cf +Author: Field G. Van Zee +Date: Mon Feb 18 18:04:38 2019 -0600 + + Reverted piledriver COPTFLAGS from -O3 to -O2. + + Details: + - Debugging continues; changing COPTFLAGS for piledriver subconfig from + -O3 to -O2, its original value prior to 6a014a3. + +commit 6cf155049168652c512aefdd16d74e7ff39b98df +Author: Field G. Van Zee +Date: Mon Feb 18 17:29:51 2019 -0600 + + Removed -funsafe-loop-optimizations from all configs. + + Details: + - Error persists. Removed -funsafe-loop-optimizations from all remaining + sub-configurations. + +commit 5190d05a27c5fa4c7942e20094f76eb9a9785c3e +Author: Field G. Van Zee +Date: Mon Feb 18 17:07:35 2019 -0600 + + Removed -funsafe-loop-optimizations from piledriver. + + Details: + - Error persists; continuing debugging from bf0fb78c by removing + -funsafe-loop-optimizations from piledriver configuration. + +commit bf0fb78c5e575372060d22f5ceeb5b332e8978ec +Author: Field G. Van Zee +Date: Mon Feb 18 16:51:38 2019 -0600 + + Removed -funsafe-loop-optimizations from families. + + Details: + - Removed -funsafe-loop-optimizations from the configuration families + affected by 6a014a3, specifically: intel64, amd64, and x86_64. + This is part of an attempt to debug why the sde, as executed by + Travis CI, is crashing via the following error: + + TID 0 SDE-ERROR: Executed instruction not valid for specified chip + (ICELAKE): 0x9172a5: bextr_xop rax, rcx, 0x103 + +commit 6a014a3377a2e829dbc294b814ca257a2bfcb763 +Author: Field G. Van Zee +Date: Mon Feb 18 14:52:29 2019 -0600 + + Standardized optimization flags in make_defs.mk. + + Details: + - Per Dave Love's recommendation in issue #300, this commit defines + COPTFLAGS := -03 + and + CRVECFLAGS := $(CKVECFLAGS) -funsafe-loop-optimizations + in the make_defs.mk for all Intel- and AMD-based configurations. + +commit 565fa3853b381051ac92cff764625909d105644d +Author: Field G. Van Zee +Date: Mon Feb 18 11:43:58 2019 -0600 + + Redirect trsm pc, ir parallelism to ic, jr loops. + + Details: + - trsm parallelization was temporarily simplifed in 075143d to entirely + ignore any parallelism specified via the pc or ir loops. Now, any + parallelism specified to the pc loop will be redirected to the ic + loop, and any parallelism specified to the ir loop will be redirected + to the jr loop. (Note that because of inter-iteration dependencies, + trsm cannot parallelize the ir loop. Parallelism via the pc loop is + at least somewhat feasible in theory, but it would require tracking + dependencies between blocks--something for which BLIS currently lacks + the necessary supporting infrastructure.) + +commit a023c643f25222593f4c98c2166212561d030621 +Author: Field G. Van Zee +Date: Thu Feb 14 20:18:55 2019 -0600 + + Regenerated symbols in build/libblis-symbols.def. + + Details: + - Reran ./build/regen-symbols.sh after running + 'configure --enable-cblas auto' + +commit 075143dfd92194647da9022c1a58511b20fc11f3 +Author: Field G. Van Zee +Date: Thu Feb 14 18:52:45 2019 -0600 + + Added support for IC loop parallelism to trsm. + + Details: + - Parallelism within the IC loop (3rd loop around the microkernel) is + now supported within the trsm operation. This is done via a new branch + on each of the control and thread trees, which guide execution of a + new trsm-only subproblem from within bli_trsm_blk_var1(). This trsm + subproblem corresponds to the macrokernel computation on only the + block of A that contains the diagonal (labeled as A11 in algorithms + with FLAME-like partitioning), and the corresponding row panel of C. + During the trsm subproblem, all threads within the JC communicator + participate and parallelize along the JR loop, including any + parallelism that was specified for the IC loop. (IR loop parallelism + is not supported for trsm due to inter-iteration dependencies.) After + this trsm subproblem is complete, a barrier synchronizes all + participating threads and then they proceed to apply the prescribed + BLIS_IC_NT (or equivalent) ways of parallelism (and any BLIS_JR_NT + parallelism specified within) to the remaining gemm subproblem (the + rank-k update that is performed using the newly updated row-panel of + B). Thus, trsm now supports JC, IC, and JR loop parallelism. + - Modified bli_trsm_l_cntl_create() to create the new "prenode" branch + of the trsm_l cntl_t tree. The trsm_r tree was left unchanged, for + now, since it is not currently used. (All trsm problems are cast in + terms of left-side trsm.) + - Updated bli_cntl_free_w_thrinfo() to be able to free the newly shaped + trsm cntl_t trees. Fixed a potentially latent bug whereby a cntl_t + subnode is only recursed upon if there existed a corresponding + thrinfo_t node, which may not always exist (for problems too small + to employ full parallelization due to the minimum granularity imposed + by micropanels). + - Updated other functions in frame/base/bli_cntl.c, such as + bli_cntl_copy() and bli_cntl_mark_family(), to recurse on sub-prenodes + if they exist. + - Updated bli_thrinfo_free() to recurse into sub-nodes and prenodes + when they exist, and added support for growing a prenode branch to + bli_thrinfo_grow() via a corresponding set of help functions named + with the _prenode() suffix. + - Added a bszid_t field thrinfo_t nodes. This field comes in handy when + debugging the allocation/release of thrinfo_t nodes, as it helps trace + the "identity" of each nodes as it is created/destroyed. + - Renamed + bli_l3_thrinfo_print_paths() -> bli_l3_thrinfo_print_gemm_paths() + and created a separate bli_l3_thrinfo_print_trsm_paths() function to + print out the newly reconfigured thrinfo_t trees for the trsm + operation. + - Trival changes to bli_gemm_blk_var?.c and bli_trsm_blk_var?.c + regarding variable declarations. + - Removed subpart_t enum values BLIS_SUBPART1T, BLIS_SUBPART1B, + BLIS_SUBPART1L, BLIS_SUBPART1R. Then added support for two new labels + (semantically speaking): BLIS_SUBPART1A and BLIS_SUBPART1B, which + represent the subpartition ahead of and behind, respectively, + BLIS_SUBPART1. Updated check functions in bli_check.c accordingly. + - Shuffled layering/APIs for bli_acquire_mpart_[mn]dim() and + bli_acquire_mpart_t2b/b2t(), _l2r/r2l(). + - Deprecated old functions in frame/3/bli_l3_thrinfo.c. + +commit 78bc0bc8b6b528c79b11f81ea19250a1db7450ed +Author: Nicholai Tukanov +Date: Thu Feb 14 13:29:02 2019 -0600 + + Power9 sub-configuration (#298) + + Formally registered power9 sub-configuration. + + Details: + - Added and registered power9 sub-configuration into the build system. + Thanks to Nicholai Tukanov and Devangi Parikh for these contributions. + - Note: The sub-configuration does not yet have a corresponding + architecture-specific kernel set registered, and so for now the + sub-config is using the generic kernel set. + +commit 6b832731261f9e7ad003a9ea4682e9ca973ef844 +Author: Field G. Van Zee +Date: Tue Feb 12 16:01:28 2019 -0600 + + Generalized ref kernels' pragma omp simd usage. + + Details: + - Replaced direct usage of _Pragma( "omp simd" ) in reference kernels + with PRAGMA_SIMD, which is defined as a function of the compiler being + used in a new bli_pragma_macro_defs.h file. That definition is cleared + when BLIS detects that the -fopenmp-simd command line option is + unsupported. Thanks to Devin Matthews and Jeff Hammond for suggestions + that guided this commit. + - Updated configure and bli_config.h.in so that the appropriate anchor + is substituted in (when the corresponding pragma omp simd support is + present). + +commit b1f5ce8622b682b79f956fed83f04a60daa8e0fc +Author: Field G. Van Zee +Date: Tue Feb 5 17:38:50 2019 -0600 + + Minor updates to scripts in test/mixeddt/matlab. + +commit 38203ecd15b1fa50897d733daeac6850d254e581 +Author: Devangi N. Parikh +Date: Mon Feb 4 15:28:28 2019 -0500 + + Added thunderx2 system in the mixeddt test scripts + + Details: + - Added thunderx2 (tx2) as a system in the runme.sh in test/mixeddt + +commit dfc91843ea52297bf636147793029a0c1345be04 +Author: Devangi N. Parikh +Date: Mon Feb 4 15:23:40 2019 -0500 + + Fixed gcc flags for thunderx2 subconfiguration + + Details: + - Fixed -march flag. Thunderx2 is an armv8.1a architecture not armv8a. + +commit c665eb9b888ec7e41bd0a28c4c8ac4094d0a01b5 +Author: Field G. Van Zee +Date: Mon Jan 28 16:22:23 2019 -0600 + + Minor updates to docs, Makefiles. + + Details: + - Changed all occurrances of + micro-kernel -> microkernel + macro-kernel -> macrokernel + micro-panel -> micropanel + in all markdown documents in 'docs' directory. This change is being + made since we've reached the point in adoption and acceptance of + BLIS's insights where words such as "microkernel" are no longer new, + and therefore now merit being unhyphenated. + - Updated "Implementation Notes" sections of KernelsHowTo.md, which + still contained references to nonexistent cpp macros such as + BLIS_DEFAULT_MR_? and BLIS_PACKDIM_MR_?. + - Added 'run-fast' and 'check-fast' targets to testsuite/Makefile. + - Minor updates to Testsuite.md, including suggesting use of + 'make check' and 'make check-fast' when running from the local + testsuite directory. + - Added a comment to top-level Makefile explaining the purpose behind + the TESTSUITE_WRAPPER variable, which at first glance appears to serve + no purpose. + +commit 1aa280d0520ed5eaea3b119b4e92b789ecad78a4 +Author: M. Zhou <5723047+cdluminate@users.noreply.github.com> +Date: Sun Jan 27 21:40:48 2019 +0000 + + Amend OS detection for kFreeBSD. (#295) + +commit fffc23bb35d117a433886eb52ee684ff5cf6997f +Author: Field G. Van Zee +Date: Fri Jan 25 13:35:31 2019 -0600 + + CREDITS file update. + +commit 26c5cf495ce22521af5a36a1012491213d5a4551 +Author: Field G. Van Zee +Date: Thu Jan 24 18:49:31 2019 -0600 + + Fixed bug in skx subconfig related to bdd46f9. + + Details: + - Fixed code in the skx subconfiguration that became a bug after + committing bdd46f9. Specifically, the bli_cntx_init_skx() function + was overwriting default blocksizes for the scomplex and dcomplex + microkernels despite the fact that only single and double real + microkernels were being registered. This was not a problem prior to + bdd46f9 since all microkernels used dynamically-queried (at runtime) + register blocksizes for loop bounds. However, post-bdd46f9, this + became a bug because the reference ukernels for scomplex and dcomplex + were written with their register blocksizes hard-coded as constant + loop bounds, which conflicted the the erroneous scomplex and dcomplex + values that bli_cntx_init_skx() was setting in the context. The + lesson here is that going forward, all subconfigurations must not set + any blocksizes for datatypes corresponding to default/reference + microkernels. (Note that a blocksize is left unchanged by the + bli_cntx_set_blkszs() function if it was set to -1.) + +commit 180f8e42e167b83a757340ad4bd4a5c7a1d6437b +Author: Field G. Van Zee +Date: Thu Jan 24 18:01:15 2019 -0600 + + Fixed undefined behavior trsm ukr bug in bdd46f9. + + Details: + - Fixed a bug that mainfested anytime a configuration was used in which + optimized microkernels were registered and the trsm operation (or + kernel) was invoked. The bug resulted from the optimized microkernels' + register blocksizes conflicting with the hard-coded values--expressed + in the form of constant loop bounds--used in the new reference trsm + ukernels that were introduced in bdd46f9. The fix was easy: reverting + back to the implementation that uses variable-bound loops, which + amounted to changing an #if 0 to #if 1 (since I preserved the older + implementation in the file alongside the new code based on constant- + bound loops). It should be noted that this fix must be permanent, + since the trsm kernel code with constant-bound loops can never work + with gemm ukernels that use different register blocksizes. + +commit bdd46f9ee88057d52610161966a11c224e5a026c +Author: Field G. Van Zee +Date: Thu Jan 24 17:23:18 2019 -0600 + + Rewrote reference kernels to use #pragma omp simd. + + Details: + - Rewrote level-1v, -1f, and -3 reference kernels in terms of simplified + indexing annotated by the #pragma omp simd directive, which a compiler + can use to vectorize certain constant-bounded loops. (The new kernels + actually use _Pragma("omp simd") since the kernels are defined via + templatizing macros.) Modest speedup was observed in most cases using + gcc 5.4.0, which may improve with newer versions. Thanks to Devin + Matthews for suggesting this via issue #286 and #259. + - Updated default blocksizes defined in ref_kernels/bli_cntx_ref.c to + be 4x16, 4x8, 4x8, and 4x4 for single, double, scomplex and dcomplex, + respectively, with a default row preference for the gemm ukernel. Also + updated axpyf, dotxf, and dotxaxpyf fusing factors to 8, 6, and 4, + respectively, for all datatypes. + - Modified configure to verify that -fopenmp-simd is a valid compiler + option (via a new detect/omp_simd/omp_simd_detect.c file). + - Added a new header in which prefetch macros are defined according to + which compiler is detected (via macros such as __GNUC__). These + prefetch macros are not yet employed anywhere, though. + - Updated the year in copyrights of template license headers in + build/templates and removed AMD as a default copyright holder. + +commit 63de2b0090829677755eb5cdb27e73bc738da32d +Author: Field G. Van Zee +Date: Wed Jan 23 12:16:27 2019 -0600 + + Prevent redef of ftnlen in blastest f2c_types.h. + + Details: + - Guard typedef of ftnlen in f2c_types.h with a #ifndef HAVE_BLIS_H + directive to prevent the redefinition of that type. Thanks to Jeff + Diamond for reporting this compiler warning (and apologies for the + delay in committing a fix). + +commit eec2e183a7b7d67702dbd1f39c153f38148b2446 +Author: Field G. Van Zee +Date: Mon Jan 21 12:12:18 2019 -0600 + + Added escaping to '/' in os_name in configure. + + Details: + - Add os_name to the list of variables into which the '/' character is + escaped. This is meant to address (or at least make progress toward + addressing) #293. Thanks to Isuru Fernando for spotting this as the + potential fix, and also thanks to M. Zhou for the original report. + +commit adf5c17f0839fdbc1f4a1780f637928b1e78e389 +Author: Field G. Van Zee +Date: Fri Jan 18 15:14:45 2019 -0600 + + Formally registered thunderx2 subconfiguration. + + Details: + - Added a separate subconfiguration for thunderx2, which now uses + different optimization flags than cortexa57/cortexa53. + +commit 094cfdf7df6c2764c25fcbfce686ba29b933942c +Author: M. Zhou <5723047+cdluminate@users.noreply.github.com> +Date: Fri Jan 18 18:46:13 2019 +0000 + + Port BLIS to GNU Hurd OS. (#294) + + Prevent blis.h from misidentifying Hurd as OSX. + +commit 5d7d616e8e591c2f3c7c2d73220eb27ea484f9c9 +Author: Field G. Van Zee +Date: Tue Jan 15 20:52:51 2019 -0600 + + README.md update re: mixeddt TOMS paper. + +commit 58c7fb4788177487f73a3964b7a910fe4dc75941 +Author: Field G. Van Zee +Date: Tue Jan 8 17:00:27 2019 -0600 + + Added more matlab scripts for mixeddt paper. + + Details: + - Added a variant set of matlab scripts geared to producing plots that + reflect performance data gathered with and without extra memory + optimizations enabled. These scripts reside (for now) in + test/mixeddt/matlab/wawoxmem. + +commit 34286eb914b48b56cdda4dfce192608b9f86d053 +Author: Field G. Van Zee +Date: Tue Jan 8 11:41:20 2019 -0600 + + Minor update to docs/HardwareSupport.md. + +commit 108b04dc5b1b1288db95f24088d1e40407d7bc88 +Author: Field G. Van Zee +Date: Mon Jan 7 20:16:31 2019 -0600 + + Regenerated symbols in build/libblis-symbols.def. + + Details: + - Reran ./build/regen-symbols.sh after running + 'configure --enable-cblas auto' to reflect removal of + bli_malloc_pool() and bli_free_pool(). + +commit 706cbd9d5622f4690e6332a89cf41ab5c8771899 +Author: Field G. Van Zee +Date: Mon Jan 7 18:28:19 2019 -0600 + + Minor tweaks/cleanups to bli_malloc.c, _apool.c. + + Details: + - Removed malloc_ft and free_ft function pointer arguments from the + interface to bli_apool_init() after deciding that there is no need to + specify the malloc()/free() for blocks within the apool. (The apool + blocks are actually just array_t structs.) Instead, we simply call + bli_malloc_intl()/_free_intl() directly. This has the added benefit + of allowing additional output when memory tracing is enabled via + --enable-mem-tracing. Also made corresponding changes elsewhere in + the apool API. + - Changed the inner pools (elements of the array_t within the apool_t) + to use BLIS_MALLOC_POOL and BLIS_FREE_POOL instead of BLIS_MALLOC_INTL + and BLIS_FREE_INTL. + - Disabled definitions of bli_malloc_pool() and bli_free_pool() since + there are no longer any consumers of these functions. + - Very minor comment / printf() updates. + +commit 579145039d945adbcad1177b1d53fb2d3f2e6573 +Author: Minh Quan Ho <1337056+hominhquan@users.noreply.github.com> +Date: Mon Jan 7 23:00:15 2019 +0100 + + Initialize error messages at compile time (#289) + + * Initialize error messages at compile time + + - Assigning strings directly to the bli_error_string array, instead of + snprintf() at execution-time. + + * Retired bli_error_init(), _finalize(). + + Details: + - Removed functions obviated by changes in 80e8dc6: bli_error_init(), + bli_error_finalize(), and bli_error_init_msgs(), as well as calls to + the former two in bli_init.c. + + * Regenerated symbols in build/libblis-symbols.def. + + Details: + - Reran ./build/regen-symbols.sh after running + 'configure --enable-cblas auto'. + +commit aafbca086e36b6727d7be67e21fef5bd9ff7bfd9 +Author: Field G. Van Zee +Date: Mon Jan 7 12:38:21 2019 -0600 + + Updated external package language in README.md. + + Details: + - Updated/added comments about Fedora, OpenSUSE, and GNU Guix under the + newly-renamed "External GNU/Linux packages" section. Thanks to Dave + Love for providing these revisions. + +commit daacfe68404c9cc8078e5e7ba49a8c7d93e8cda3 +Author: Field G. Van Zee +Date: Mon Jan 7 12:12:47 2019 -0600 + + Allow running configure with python 3.4. + + Details: + - Relax version blacklisting of python3 to allow 3.4 or later instead + of 3.5 or later. Thanks to Dave Love for pointing out that 3.4 was + sufficient for the purpose of BLIS's build system. (It should be + noted that we're not sure which, if any, python3 versions prior to + 3.4 are insufficient, and that the only thing stopping us from + determining this is the fact that these earlier versions of python3 + are not readily available for us to test with.) + - Updated docs/BuildSystem.md to be explicit about current python2 vs + python3 version requirements. + +commit ad8d9adb09a7dd267bbdeb2bd1fbbf9daf64ee76 +Author: Field G. Van Zee +Date: Thu Jan 3 16:08:24 2019 -0600 + + README.md, CREDITS update. + + Details: + - Added "What's New" and "What People Are Saying About BLIS" sections to + README.md. + - Added missing github handles to various individuals' entries in the + CREDITS file. + +commit 7052fca5aef430241278b67d24cef6fe33106904 +Author: Field G. Van Zee +Date: Wed Jan 2 13:48:40 2019 -0600 + + Apply f272c289 to bli_fmalloc_noalign(). + + Details: + - Perform the same check for NULL return values and error message output + in bli_fmalloc_noalign() as is performed by bli_fmalloc_align(). (This + change was intended for f272c289.) + +commit 528e3ad16a42311a852a8376101959b4ccd801a5 +Merge: 3126c52e f272c289 +Author: Field G. Van Zee +Date: Wed Jan 2 13:39:19 2019 -0600 + + Merge branch 'amd' + +commit 3126c52ea795ffb7d30b16b7f7ccc2a288a6158d +Merge: 61441b24 8091998b +Author: Field G. Van Zee +Date: Wed Jan 2 13:37:37 2019 -0600 + + Merge branch 'amd' + +commit f272c2899a6764eedbe05cea874ee3bd258dbff3 +Author: Field G. Van Zee +Date: Wed Jan 2 12:34:15 2019 -0600 + + Add error message to malloc() check for NULL. + + Details: + - Output an error message if and when the malloc()-equivalent called by + bli_fmalloc_align() ever returns NULL. Everything was already in place + for this to happen, including the error return code, the error string + sprintf(), the error checking function bli_check_valid_malloc_buf() + definition, and its prototype. Thanks to Minh Quan Ho for pointing out + the missing error message. + - Increased the default block_ptrs_len for each inner pool stored in the + small block allocator from 10 to 25. Under normal execution, each + thread uses only 21 blocks, so this change will prevent the sba from + needing to resize the block_ptrs array of any given inner pool as + threads initially populate the pool with small blocks upon first + execution of a level-3 operation. + - Nix stray newline echo in configure. + +commit eb97f778a1e13ee8d3b3aade05e479c4dfcfa7c0 +Author: Field G. Van Zee +Date: Tue Dec 25 20:17:09 2018 -0600 + + Added missing AMD copyrights to previous commit. + + Details: + - Forgot to add AMD copyrights to several touched files that did not + already have them in 2f31743. + +commit 2f3174330fb29164097d664b7c84e05c7ced7d95 +Author: Field G. Van Zee +Date: Tue Dec 25 19:35:01 2018 -0600 + + Implemented a pool-based small block allocator. + + Details: + - Implemented a sophisticated data structure and set of APIs that track + the small blocks of memory (around 80-100 bytes each) used when + creating nodes for control and thread trees (cntl_t and thrinfo_t) as + well as thread communicators (thrcomm_t). The purpose of the small + block allocator, or sba, is to allow the library to transition into a + runtime state in which it does not perform any calls to malloc() or + free() during normal execution of level-3 operations, regardless of + the threading environment (potentially multiple application threads + as well as multiple BLIS threads). The functionality relies on a new + data structure, apool_t, which is (roughly speaking) a pool of + arrays, where each array element is a pool of small blocks. The outer + pool, which is protected by a mutex, provides separate arrays for each + application thread while the arrays each handle multiple BLIS threads + for any given application thread. The design minimizes the potential + for lock contention, as only concurrent application threads would + need to fight for the apool_t lock, and only if they happen to begin + their level-3 operations at precisely the same time. Thanks to Kiran + Varaganti and AMD for requesting this feature. + - Added a configure option to disable the sba pools, which are enabled + by default; renamed the --[dis|en]able-packbuf-pools option to + --[dis|en]able-pba-pools; and rewrote the --help text associated with + this new option and consolidated it with the --help text for the + option associated with the sba (--[dis|en]able-sba-pools). + - Moved the membrk field from the cntx_t to the rntm_t. We now pass in + a rntm_t* to the bli_membrk_acquire() and _release() APIs, just as we + do for bli_sba_acquire() and _release(). + - Replaced all calls to bli_malloc_intl() and bli_free_intl() that are + used for small blocks with calls to bli_sba_acquire(), which takes a + rntm (in addition to the bytes requested), and bli_sba_release(). + These latter two functions reduce to the former two when the sba pools + are disabled at configure-time. + - Added rntm_t* arguments to various cntl_t and thrinfo_t functions, as + required by the new usage of bli_sba_acquire() and _release(). + - Moved the freeing of "old" blocks (those allocated prior to a change + in the block_size) from bli_membrk_acquire_m() to the implementation + of the pool_t checkout function. + - Miscellaneous improvements to the pool_t API. + - Added a block_size field to the pblk_t. + - Harmonized the way that the trsm_ukr testsuite module performs packing + relative to that of gemmtrsm_ukr, in part to avoid the need to create + a packm control tree node, which now requires a rntm_t that has been + initialized with an sba and membrk. + - Re-enable explicit call bli_finalize() in testsuite so that users who + run the testsuite with memory tracing enabled can check for memory + leaks. + - Manually imported the compact/minor changes from 61441b24 that cause + the rntm to be copied locally when it is passed in via one of the + expert APIs. + - Reordered parameters to various bli_thrcomm_*() functions so that the + thrcomm_t* to the comm being modified is last, not first. + - Added more descriptive tracing for allocating/freeing small blocks and + formalized via a new configure option: --[dis|en]able-mem-tracing. + - Moved some unused scalm code and headers into frame/1m/other. + - Whitespace changes to bli_pthread.c. + - Regenerated build/libblis-symbols.def. + +commit 61441b24f3244a4b202c29611a4899dd5c51d3a1 +Author: Field G. Van Zee +Date: Thu Dec 20 19:38:11 2018 -0600 + + Make local copy of user's rntm_t in level-3 ops. + + Details: + - In the case that the caller passes in a non-NULL rntm_t pointer into + one of the expert APIs for a level-3 operation (e.g. bli_gemm_ex()), + make a local copy of the rntm_t and use the address of that local copy + in all subsequent execution (which may change the contents of the + rntm_t). This prevents a potentially confusing situation whereby a + user-initialized rntm_t is used once (in, say, gemm), and then found + by the user to be in a different state before it is used a second + time. + +commit e809b5d2f1023b4249969e2f516291c9a3a00b80 +Merge: 76016691 0476f706 +Author: Field G. Van Zee +Date: Thu Dec 20 16:27:26 2018 -0600 + + Merge branch 'master' into amd + +commit 0476f706b93e83f6b74a3d7b7e6e9cc9a1a52c3b +Author: Field G. Van Zee +Date: Tue Dec 18 14:56:20 2018 -0600 + + CHANGELOG update (0.5.1) + +commit e0408c3ca3d53bc8e6fedac46ea42c86e06c922d (tag: 0.5.1) Author: Field G. Van Zee Date: Tue Dec 18 14:56:16 2018 -0600 Version file update (0.5.1) -commit 3ab231afc9f69d14493908c53c85a84c5fba58aa (origin/master, origin/HEAD) +commit 3ab231afc9f69d14493908c53c85a84c5fba58aa Author: Field G. Van Zee Date: Tue Dec 18 14:53:37 2018 -0600 @@ -53,6 +1008,55 @@ Date: Mon Dec 17 19:17:30 2018 -0600 OpenMP. - CREDITS file update. +commit 76016691e2c514fcb59f940c092475eda968daa2 +Author: Field G. Van Zee +Date: Thu Dec 13 17:23:09 2018 -0600 + + Improvements to bli_pool; malloc()/free() tracing. + + Details: + - Added malloc_ft and free_ft fields to pool_t, which are provided when + the pool is initialized, to allow bli_pool_alloc_block() and + bli_pool_free_block() to call bli_fmalloc_align()/bli_ffree_align() + with arbitrary align_size values (according to how the pool_t was + initialized). + - Added a block_ptrs_len argument to bli_pool_init(), which allows the + caller to specify an initial length for the block_ptrs array, which + previously suffered the cost of being reallocated, copied, and freed + each time a new block was added to the pool. + - Consolidated the "buf_sys" and "buf_align" pointer fields in pblk_t + into a single "buf" field. Consolidated the bli_pblk API accordingly + and also updated the bli_mem API implementation. This was done + because I'd previously already implemented opaque alignment via + bli_malloc_align(), which allocates extra space and stores the + original pointer returned by malloc() one element before the element + whose address is aligned. + - Tweaked bli_membrk_acquire_m() and bli_membrk_release() to call + bli_fmalloc_align() and bli_ffree_align(), which required adding an + align_size field to the membrk_t struct. + - Pass the pack schemas directly into bli_l3_cntl_create_if() rather + than transmit them via objects for A and B. + - Simplified bli_l3_cntl_free_if() and renamed to bli_l3_cntl_free(). + The function had not been conditionally freeing control trees for + quite some time. Also, removed obj_t* parameters since they aren't + needed anymore (or never were). + - Spun-off OpenMP nesting code in bli_l3_thread_decorator() to a + separate function, bli_l3_thread_decorator_thread_check(). + - Renamed: + bli_malloc_align() -> bli_fmalloc_align() + bli_free_align() -> bli_ffree_align() + bli_malloc_noalign() -> bli_fmalloc_noalign() + bli_free_noalign() -> bli_ffree_noalign() + The 'f' is for "function" since they each take a malloc_ft or free_ft + function pointer argument. + - Inserted various printf() calls for the purposes of tracing memory + allocation and freeing, guarded by cpp macro ENABLE_MEM_DEBUG, which, + for now, is intended to be a "hidden" feature rather than one hooked + up to a configure-time option. + - Defined bli_rntm_equals(), which compares two rntm_t for equality. + (There are no use cases for this function yet, but there may be soon.) + - Whitespace changes to function parameter lists in bli_pool.c, .h. + commit f808d829c58dc4194cc3ebc3825fbdde12cd3f93 Author: Field G. Van Zee Date: Wed Dec 12 15:22:59 2018 -0600 @@ -105,6 +1109,13 @@ Date: Wed Dec 12 15:22:59 2018 -0600 - Fixed a minor bug in the testsuite that prevented non-1m-based induced method implementations of trsm from executing. +commit 02ec0be3ba0b0d6b4186386ae140906a96de919b +Merge: e275def3 c534da62 +Author: Field G. Van Zee +Date: Wed Dec 5 19:33:53 2018 -0600 + + Merge branch 'master' into amd + commit c534da62c0015f91391983da5376c9e091378010 Author: Field G. Van Zee Date: Wed Dec 5 15:51:05 2018 -0600 @@ -149,7 +1160,7 @@ Date: Wed Dec 5 20:06:32 2018 +0000 (That is, when native complex microkernels are missing, we usually want to test performance of 1m.) -commit 0645f239fbdf37ee9d2096ee3bb0e76b3302cfff (origin/dev, dev) +commit 0645f239fbdf37ee9d2096ee3bb0e76b3302cfff Author: Field G. Van Zee Date: Tue Dec 4 14:31:06 2018 -0600 @@ -238,6 +1249,13 @@ Date: Mon Dec 3 17:49:52 2018 -0600 frame/3/gemm/ind/bli_gemm_ind_opt.h. - Various whitespace/comment updates. +commit e275def30ac41cadce296560fa67282704f20a02 +Merge: 8091998b dc184095 +Author: Field G. Van Zee +Date: Fri Nov 30 15:39:50 2018 -0600 + + Merge branch 'master' into amd + commit dc18409551f341125169fe8d4d43ac45e81bdf28 Author: Field G. Van Zee Date: Wed Nov 28 11:58:40 2018 -0600 @@ -489,6 +1507,13 @@ Date: Wed Nov 14 13:47:45 2018 -0600 Isuru Fernando for suggesting this fix, and also to Costas Yamin for originally reporting the issue (#277). +commit 8091998b6500e343c2024561c2b1aa73c3bafb0b +Merge: 333d8562 7b5ba731 +Author: Field G. Van Zee +Date: Wed Nov 14 12:36:35 2018 -0600 + + Merge branch 'master' into amd + commit 7b5ba7319b3901ad0e6c6b4fa3c1d96b579efbe9 Merge: ce719f81 52392932 Author: Field G. Van Zee @@ -548,6 +1573,18 @@ Date: Tue Nov 13 13:03:15 2018 -0600 datatype contains a different value. Thanks to Devangi Parikh for helping in isolating this bug. +commit 333d8562f04eea0676139a10cb80a97f107b45b0 +Author: Field G. Van Zee +Date: Sun Nov 11 14:28:53 2018 -0600 + + Added debug output to bli_malloc.c. + + Details: + - Added debug output to bli_malloc.c in order to debug certain kinds of + memory behavior in BLIS. The printf() statements are disabled and must + be enabled manually. + - Whitespace/comment updates in bli_membrk.c. + commit ce719f816d1237f5277527d7f61123e77180be54 Author: Field G. Van Zee Date: Sat Nov 10 14:48:43 2018 -0600 @@ -1279,7 +2316,7 @@ Date: Tue Oct 9 15:29:48 2018 -0500 case, and thus the change effectively applies to both left and right cases. -commit f1dba506c970f14e612580d3c171e7c5ffd0a5fb +commit f1dba506c970f14e612580d3c171e7c5ffd0a5fb (amd) Author: Field G. Van Zee Date: Mon Oct 8 17:59:41 2018 -0500 From 366c4b14c0088820332e9d0fb2534eaa56eda353 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 19 Mar 2019 17:53:18 -0500 Subject: [PATCH 031/109] More minor tweaks to docs/Performance.md. Details: - Defined GFLOPS as billions of floating-point operations per second, and reworded the sentence after about normalization. --- docs/Performance.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/Performance.md b/docs/Performance.md index b38a38659..891e7e2f2 100644 --- a/docs/Performance.md +++ b/docs/Performance.md @@ -35,12 +35,13 @@ complex) and each column representing a different operation (`gemm`, Each of the 20 graphs within a panel will contain an x-axis that reports problem size, with all matrix dimensions equal to the problem size (e.g. _m_ = _n_ = _k_), resulting in square matrices. -The y-axis will report GFLOPS (in the case of single-threaded performance) -or GFLOPS/core (in the case of single- or dual-socket multithreaded -performance), which is simply the total GFLOPS divided by the number of -threads utilized. -This normalization is done intentionally in order to facilitate visual -comparison of multithreaded graphs and single-threaded graphs. +The y-axis will report in units GFLOPS (billions of floating-point operations +per second) in the case of single-threaded performance, or GFLOPS/core in the +case of single- or dual-socket multithreaded performance, where GFLOPS/core +is simply the total GFLOPS observed divided by the number of threads utilized. +This normalization is done intentionally in order to facilitate a visual +assessment of the drop in efficiency of multithreaded performance relative +to their single-threaded baselines. It's also worth pointing out that the top of each graph (e.g. the maximum y-axis value depicted) _always_ corresponds to the theoretical peak performance From a1c8b11b3f24505ebd1df388b7303510cb1a26ba Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Wed, 20 Mar 2019 17:52:23 -0500 Subject: [PATCH 032/109] Added Eigen support to test/3 Makefile, runme.sh. Details: - Added targets to test/3/Makefile that link against a BLAS library build by Eigen. It appears, however, that Eigen's BLAS library does not support multithreading. (It may be that multithreading is only available when using the native C++ APIs.) - Updated runme.sh with a few Eigen-related tweaks. - Minor tweaks to docs/Performance.md. --- docs/Performance.md | 50 +++++++++++++++++++------- test/3/Makefile | 85 ++++++++++++++++++++++++++++++--------------- test/3/runme.sh | 30 ++++++++++++---- 3 files changed, 117 insertions(+), 48 deletions(-) diff --git a/docs/Performance.md b/docs/Performance.md index 891e7e2f2..28d3c2244 100644 --- a/docs/Performance.md +++ b/docs/Performance.md @@ -50,17 +50,17 @@ Theoretical peak performance, in units of GFLOPS/core, is calculated as the product of: 1. the maximum sustainable clock rate in GHz; and 2. the maximum number of floating-point operations (flops) that can be -executed per cycle. +executed per cycle (per core). Note that the maximum sustainable clock rate may change depending on the conditions. For example, on some systems the maximum clock rate is higher when only one core is active (e.g. single-threaded performance) versus when all cores are active (e.g. multithreaded performance). -The maximum number of flops executable per cycle is generally computed as the -product of: +The maximum number of flops executable per cycle (per core) is generally +computed as the product of: 1. the maximum number of fused multiply-add (FMA) vector instructions that -can be issued per cycle; +can be issued per cycle (per core); 2. the maximum number of elements that can be stored within a single vector register (for the datatype in question); and 3. 2.0, since an FMA instruction fuses two operations (a multiply and an add). @@ -91,7 +91,7 @@ allow it to finish. Where along the x-axis you focus your attention will depend on the segment of the problem size range that you care about most. Some people's applications -depend heavily on smaller problems, where "small" can mean anything from 200 +depend heavily on smaller problems, where "small" can mean anything from 10 to 1000 or even higher. Some people consider 1000 to be quite large, while others insist that 5000 is merely "medium." What each of us considers to be small, medium, or large (naturally) depends heavily on the kinds of dense @@ -133,10 +133,16 @@ size of interest so that we can better assist you. * sub-configuration exercised: `thunderx2` * OpenBLAS 52d3f7a * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) - * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=56` (multithreaded) + * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=56` (multithreaded, 56 cores) + * Requested threading via `export OPENBLAS_NUM_THREADS=1` (single-threaded) + * Requested threading via `export OPENBLAS_NUM_THREADS=28` (multithreaded, 28 cores) + * Requested threading via `export OPENBLAS_NUM_THREADS=56` (multithreaded, 56 cores) * ARMPL 18.4 + * Requested threading via `export OMP_NUM_THREADS=1` (single-threaded) + * Requested threading via `export OMP_NUM_THREADS=28` (multithreaded, 28 cores) + * Requested threading via `export OMP_NUM_THREADS=56` (multithreaded, 56 cores) * Affinity: - * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 55"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` was unset. + * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 55"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` environment variable was unset. * Frequency throttling (via `cpupower`): * No changes made. * Comments: @@ -184,10 +190,16 @@ size of interest so that we can better assist you. * sub-configuration exercised: `skx` * OpenBLAS 0.3.5 * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) - * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=52` (multithreaded) + * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=52` (multithreaded, 52 cores) + * Requested threading via `export OPENBLAS_NUM_THREADS=1` (single-threaded) + * Requested threading via `export OPENBLAS_NUM_THREADS=26` (multithreaded, 26 cores) + * Requested threading via `export OPENBLAS_NUM_THREADS=52` (multithreaded, 52 cores) * MKL 2019 update 1 + * Requested threading via `export MKL_NUM_THREADS=1` (single-threaded) + * Requested threading via `export MKL_NUM_THREADS=26` (multithreaded, 26 cores) + * Requested threading via `export MKL_NUM_THREADS=52` (multithreaded, 52 cores) * Affinity: - * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 51"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` was unset. + * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 51"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` environment variable was unset. * Frequency throttling (via `cpupower`): * No changes made. * Comments: @@ -235,10 +247,16 @@ size of interest so that we can better assist you. * sub-configuration exercised: `haswell` * OpenBLAS 0.3.5 * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) - * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=24` (multithreaded) + * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=24` (multithreaded, 24 cores) + * Requested threading via `export OPENBLAS_NUM_THREADS=1` (single-threaded) + * Requested threading via `export OPENBLAS_NUM_THREADS=12` (multithreaded, 12 cores) + * Requested threading via `export OPENBLAS_NUM_THREADS=24` (multithreaded, 24 cores) * MKL 2018 update 2 + * Requested threading via `export MKL_NUM_THREADS=1` (single-threaded) + * Requested threading via `export MKL_NUM_THREADS=12` (multithreaded, 12 cores) + * Requested threading via `export MKL_NUM_THREADS=24` (multithreaded, 24 cores) * Affinity: - * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 23"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` was unset. + * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 23"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` environment variable was unset. * Frequency throttling (via `cpupower`): * No changes made. * Comments: @@ -287,10 +305,16 @@ size of interest so that we can better assist you. * sub-configuration exercised: `zen` * OpenBLAS 0.3.5 * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) - * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=64` (multithreaded) + * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=64` (multithreaded, 64 cores) + * Requested threading via `export OPENBLAS_NUM_THREADS=1` (single-threaded) + * Requested threading via `export OPENBLAS_NUM_THREADS=32` (multithreaded, 32 cores) + * Requested threading via `export OPENBLAS_NUM_THREADS=64` (multithreaded, 64 cores) * MKL 2019 update 1 + * Requested threading via `export MKL_NUM_THREADS=1` (single-threaded) + * Requested threading via `export MKL_NUM_THREADS=32` (multithreaded, 32 cores) + * Requested threading via `export MKL_NUM_THREADS=64` (multithreaded, 64 cores) * Affinity: - * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 63"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` was unset. + * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 63"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` environment variable was unset. * Frequency throttling (via `cpupower`): * Driver: acpi-cpufreq * Governor: performance diff --git a/test/3/Makefile b/test/3/Makefile index 48dc9433b..b7d975203 100644 --- a/test/3/Makefile +++ b/test/3/Makefile @@ -106,6 +106,10 @@ OPENBLASP_LIB := $(HOME_LIB_PATH)/libopenblasp.a #ATLAS_LIB := $(HOME_LIB_PATH)/libf77blas.a \ # $(HOME_LIB_PATH)/libatlas.a +# Eigen +EIGEN_LIB := $(HOME_LIB_PATH)/libeigen.a +EIGENP_LIB := $(HOME_LIB_PATH)/libeigen.a + # MKL MKL_LIB := -L$(MKL_LIB_PATH) \ -lmkl_intel_lp64 \ @@ -199,6 +203,7 @@ DNAT := -DIND=BLIS_NAT #STR_1M := -DSTR=\"1m\" STR_NAT := -DSTR=\"asm_blis\" STR_OBL := -DSTR=\"openblas\" +STR_EIG := -DSTR=\"eigen\" STR_VEN := -DSTR=\"vendor\" # Single or multithreaded string @@ -220,6 +225,7 @@ PDEF_2S := -DP_BEGIN=$(P2_BEGIN) -DP_INC=$(P2_INC) -DP_MAX=$(P2_MAX) all: all-st all-1s all-2s blis: blis-st blis-1s blis-2s openblas: openblas-st openblas-1s openblas-2s +eigen: eigen-st eigen-1s eigen-2s vendor: vendor-st vendor-1s vendor-2s mkl: vendor armpl: vendor @@ -238,7 +244,7 @@ blis-nat: blis-nat-st blis-nat-1s blis-nat-2s # Define the datatypes, operations, and implementations. DTS := s d c z OPS := gemm hemm herk trmm trsm -IMPLS := asm_blis openblas vendor +IMPLS := asm_blis openblas eigen vendor # Define functions to construct object filenames from the datatypes and # operations given an implementation. We define one function for single- @@ -263,6 +269,13 @@ OPENBLAS_1S_BINS := $(patsubst %.o,%.x,$(OPENBLAS_1S_OBJS)) OPENBLAS_2S_OBJS := $(call get-2s-objs,openblas) OPENBLAS_2S_BINS := $(patsubst %.o,%.x,$(OPENBLAS_2S_OBJS)) +EIGEN_ST_OBJS := $(call get-st-objs,eigen) +EIGEN_ST_BINS := $(patsubst %.o,%.x,$(EIGEN_ST_OBJS)) +EIGEN_1S_OBJS := $(call get-1s-objs,eigen) +EIGEN_1S_BINS := $(patsubst %.o,%.x,$(EIGEN_1S_OBJS)) +EIGEN_2S_OBJS := $(call get-2s-objs,eigen) +EIGEN_2S_BINS := $(patsubst %.o,%.x,$(EIGEN_2S_OBJS)) + VENDOR_ST_OBJS := $(call get-st-objs,vendor) VENDOR_ST_BINS := $(patsubst %.o,%.x,$(VENDOR_ST_OBJS)) VENDOR_1S_OBJS := $(call get-1s-objs,vendor) @@ -279,6 +292,10 @@ openblas-st: $(OPENBLAS_ST_BINS) openblas-1s: $(OPENBLAS_1S_BINS) openblas-2s: $(OPENBLAS_2S_BINS) +eigen-st: $(EIGEN_ST_BINS) +eigen-1s: $(EIGEN_1S_BINS) +eigen-2s: $(EIGEN_2S_BINS) + vendor-st: $(VENDOR_ST_BINS) vendor-1s: $(VENDOR_1S_BINS) vendor-2s: $(VENDOR_2S_BINS) @@ -293,9 +310,10 @@ armpl-2s: vendor-2s # Mark the object files as intermediate so that make will remove them # automatically after building the binaries on which they depend. -.INTERMEDIATE: $(BLIS_NAT_ST_OBJS) $(OPENBLAS_ST_OBJS) $(VENDOR_ST_OBJS) -.INTERMEDIATE: $(BLIS_NAT_1S_OBJS) $(OPENBLAS_1S_OBJS) $(VENDOR_1S_OBJS) -.INTERMEDIATE: $(BLIS_NAT_2S_OBJS) $(OPENBLAS_2S_OBJS) $(VENDOR_2S_OBJS) +.INTERMEDIATE: $(BLIS_NAT_ST_OBJS) $(BLIS_NAT_1S_OBJS) $(BLIS_NAT_2S_OBJS) +.INTERMEDIATE: $(OPENBLAS_ST_OBJS) $(OPENBLAS_1S_OBJS) $(OPENBLAS_2S_OBJS) +.INTERMEDIATE: $(EIGEN_ST_OBJS) $(EIGEN_1S_OBJS) $(EIGEN_2S_OBJS) +.INTERMEDIATE: $(VENDOR_ST_OBJS) $(VENDOR_1S_OBJS) $(VENDOR_2S_OBJS) # --Object file rules -- @@ -312,7 +330,8 @@ get-dt-cpp = -DDT=bli_$(1)type get-bl-cpp = $(strip \ $(if $(findstring blis,$(1)),$(STR_NAT) $(BLI_DEF),\ $(if $(findstring openblas,$(1)),$(STR_OBL) $(BLA_DEF),\ - $(STR_VEN) $(BLA_DEF)))) + $(if $(findstring eigen,$(1)),$(STR_EIG) $(BLA_DEF),\ + $(STR_VEN) $(BLA_DEF))))) define make-st-rule test_$(1)$(2)_$(PS_MAX)_$(3)_st.o: test_$(op).c Makefile @@ -349,34 +368,44 @@ $(foreach im,$(IMPLS),$(eval $(call make-2s-rule,$(dt),$(op),$(im)))))) # compatibility layer. This prevents BLIS from inadvertently getting called # for the BLAS routines we are trying to test with. -test_%_$(PS_MAX)_openblas_st.x: test_%_$(PS_MAX)_openblas_st.o $(LIBBLIS_LINK) - $(LINKER) $(strip $< $(OPENBLAS_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) - -test_%_$(P1_MAX)_openblas_1s.x: test_%_$(P1_MAX)_openblas_1s.o $(LIBBLIS_LINK) - $(LINKER) $(strip $< $(OPENBLASP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) - -test_%_$(P2_MAX)_openblas_2s.x: test_%_$(P2_MAX)_openblas_2s.o $(LIBBLIS_LINK) - $(LINKER) $(strip $< $(OPENBLASP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) - - -test_%_$(PS_MAX)_vendor_st.x: test_%_$(PS_MAX)_vendor_st.o $(LIBBLIS_LINK) - $(LINKER) $(strip $< $(VENDOR_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) - -test_%_$(P1_MAX)_vendor_1s.x: test_%_$(P1_MAX)_vendor_1s.o $(LIBBLIS_LINK) - $(LINKER) $(strip $< $(VENDORP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) - -test_%_$(P2_MAX)_vendor_2s.x: test_%_$(P2_MAX)_vendor_2s.o $(LIBBLIS_LINK) - $(LINKER) $(strip $< $(VENDORP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) - - test_%_$(PS_MAX)_asm_blis_st.x: test_%_$(PS_MAX)_asm_blis_st.o $(LIBBLIS_LINK) - $(LINKER) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) test_%_$(P1_MAX)_asm_blis_1s.x: test_%_$(P1_MAX)_asm_blis_1s.o $(LIBBLIS_LINK) - $(LINKER) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) test_%_$(P2_MAX)_asm_blis_2s.x: test_%_$(P2_MAX)_asm_blis_2s.o $(LIBBLIS_LINK) - $(LINKER) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + + +test_%_$(PS_MAX)_openblas_st.x: test_%_$(PS_MAX)_openblas_st.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(OPENBLAS_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P1_MAX)_openblas_1s.x: test_%_$(P1_MAX)_openblas_1s.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(OPENBLASP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P2_MAX)_openblas_2s.x: test_%_$(P2_MAX)_openblas_2s.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(OPENBLASP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + + +test_%_$(PS_MAX)_eigen_st.x: test_%_$(PS_MAX)_eigen_st.o $(LIBBLIS_LINK) + $(CXX) $(strip $< $(EIGEN_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P1_MAX)_eigen_1s.x: test_%_$(P1_MAX)_eigen_1s.o $(LIBBLIS_LINK) + $(CXX) $(strip $< $(EIGENP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P2_MAX)_eigen_2s.x: test_%_$(P2_MAX)_eigen_2s.o $(LIBBLIS_LINK) + $(CXX) $(strip $< $(EIGENP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + + +test_%_$(PS_MAX)_vendor_st.x: test_%_$(PS_MAX)_vendor_st.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(VENDOR_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P1_MAX)_vendor_1s.x: test_%_$(P1_MAX)_vendor_1s.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(VENDORP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P2_MAX)_vendor_2s.x: test_%_$(P2_MAX)_vendor_2s.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(VENDORP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) # -- Clean rules -- diff --git a/test/3/runme.sh b/test/3/runme.sh index aeed7d98b..a92bf9c0d 100755 --- a/test/3/runme.sh +++ b/test/3/runme.sh @@ -78,6 +78,10 @@ if [ "${impls}" = "blis" ]; then test_impls="asm_blis" +elif [ "${impls}" = "eigen" ]; then + + test_impls="eigen" + elif [ "${impls}" = "other" ]; then test_impls="openblas vendor" @@ -148,13 +152,24 @@ for th in ${threads}; do # Set the number of threads according to th. if [ "${suf}" = "1s" ] || [ "${suf}" = "2s" ]; then - export BLIS_JC_NT=${jc_nt} - export BLIS_PC_NT=${pc_nt} - export BLIS_IC_NT=${ic_nt} - export BLIS_JR_NT=${jr_nt} - export BLIS_IR_NT=${ir_nt} - export OPENBLAS_NUM_THREADS=${nt} - export MKL_NUM_THREADS=${nt} + # Set the threading parameters based on the implementation + # that we are preparing to run. + if [ "${im}" = "asm_blis" ] + unset OMP_NUM_THREADS + export BLIS_JC_NT=${jc_nt} + export BLIS_PC_NT=${pc_nt} + export BLIS_IC_NT=${ic_nt} + export BLIS_JR_NT=${jr_nt} + export BLIS_IR_NT=${ir_nt} + elif [ "${im}" = "openblas" ] + unset OMP_NUM_THREADS + export OPENBLAS_NUM_THREADS=${nt} + elif [ "${im}" = "eigen" ] + export OMP_NUM_THREADS=${nt} + elif [ "${im}" = "vendor" ] + unset OMP_NUM_THREADS + export MKL_NUM_THREADS=${nt} + fi export nt_use=${nt} # Multithreaded OpenBLAS seems to have a problem running @@ -173,6 +188,7 @@ for th in ${threads}; do export BLIS_IC_NT=1 export BLIS_JR_NT=1 export BLIS_IR_NT=1 + export OMP_NUM_THREADS=1 export OPENBLAS_NUM_THREADS=1 export MKL_NUM_THREADS=1 export nt_use=1 From a9270bef26bc637be432f64d0db9f9516056c4a8 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Thu, 21 Mar 2019 18:11:20 -0500 Subject: [PATCH 033/109] Allow disabling of BLAS prototypes at compile-time. Details: - Modified bli_blas.h so that: - By default, if the BLAS layer is enabled at configure-time, BLAS prototypes are also enabled within blis.h; - But if the user #defines BLIS_DISABLE_BLAS_DEFS prior to including blis.h, BLAS prototypes are skipped over entirely so that, for example, the application or some other header pulled in by the application may prototype the BLAS functions without causing any duplication. - Updated docs/BuildSystem.md to document the feature above, and related text. --- docs/BuildSystem.md | 48 +++++++++++++++++++++++++++++++++++++++-- frame/compat/bli_blas.h | 26 +++++++++++++++++++--- 2 files changed, 69 insertions(+), 5 deletions(-) diff --git a/docs/BuildSystem.md b/docs/BuildSystem.md index 84004f886..9d1730bf4 100644 --- a/docs/BuildSystem.md +++ b/docs/BuildSystem.md @@ -9,6 +9,9 @@ * **[Step 3b: Testing (optional)](BuildSystem.md#step-3b-testing-optional)** * **[Step 4: Installation](BuildSystem.md#step-4-installation)** * **[Cleaning out build products](BuildSystem.md#cleaning-out-build-products)** +* **[Compiling with BLIS](BuildSystem.md#compiling-with-blis)** + * [Disabling BLAS prototypes](BuildSystem.md#disabling-blas-prototypes) + * [CBLAS](BuildSystem.md#cblas) * **[Linking against BLIS](BuildSystem.md#linking-against-blis)** * **[Uninstalling](BuildSystem.md#uninstalling)** * **[make targets](BuildSystem.md#make-targets)** @@ -83,7 +86,7 @@ Alternatively, `configure` can automatically select a configuration based on you ``` $ ./configure auto ``` -However, as of this writing, only a limited number of architectures are detected. If the `configure` script is not able to detect your architecture, the `generic` configuration will be used. +However, as of this writing, only a limited number of architectures are detected. If the `configure` script is not able to detect your architecture, the `generic` configuration will be used. Upon running configure, you will get output similar to the following. The exact output will depend on whether you cloned BLIS from a `git` repository or whether you obtained BLIS via a downloadable tarball from the [releases](https://github.com/flame/blis/releases) page. ``` @@ -338,6 +341,47 @@ Removing include. Running the `distclean` target is like saying, "Remove anything ever created by the build system." +## Compiling with BLIS + +All BLIS definitions and prototypes may be included in your C source file by including a single header file, `blis.h`: +```c +#include "stdio.h" +#include "stdlib.h" +#include "otherstuff.h" +#include "blis.h" +``` +If the BLAS compatibility layer was enabled at configure-time (as it is by default), then `blis.h` will also provide BLAS prototypes to your source code. + + +### Disabling BLAS prototypes + +Some applications already `#include` a header that contains BLAS prototypes. This can cause problems if those applications also try to `#include` the BLIS header file, as shown above. Suppose for a moment that `otherstuff.h` in the example above already provides BLAS prototypes. +``` +$ gcc -I/path/to/blis -I/path/to/otherstuff -c main.c -o main.o +In file included from main.c:41:0: +/path/to/blis/blis.h:36900:111: error: conflicting declaration of C function ‘int xerbla_(const bla_character*, const bla_integer*, ftnlen)’ + TEF770(xerbla)(const bla_character *srname, const bla_integer *info, ftnlen srname_len); +``` +If your application is already declaring (prototyping) BLAS functions, then you may disable those prototypes from being defined included within `blis.h`. This prevents `blis.h` from re-declaring those prototypes, or, allows your other header to declare those functions for the first time, depending on the order that you `#include` the headers. +```c +#include "stdio.h" +#include "stdlib.h" +#include "otherstuff.h" +#define BLIS_DISABLE_BLAS_DEFS // disable BLAS prototypes within BLIS. +#include "blis.h" +``` +By `#defining` the `BLIS_DISABLE_BLAS_DEFS` macro, we signal to `blis.h` that it should skip over the BLAS prototypes, but otherwise `#include` everything else as it normally would. Note that `BLIS_DISABLE_BLAS_DEFS` must be `#defined` *prior* to the `#include "blis.h"` directive in order for it to have any effect. + + +### CBLAS + +If you build BLIS with CBLAS enabled and you wish to access CBLAS function prototypes from within your application, you will have to `#include` the `cblas.h` header separately from `blis.h`. +``` +#include "blis.h" +#include "cblas.h" +``` + + ## Linking against BLIS Once you have instantiated (configured and compiled, and perhaps installed) a BLIS library, you can link to it in your application's makefile as you would any other library. The following is an abbreviated makefile for a small hypothetical application that has just two external dependencies: BLIS and the standard C math library. We also link against libpthread since that library has been a runtime dependency of BLIS since 70640a3 (December 2017). @@ -357,7 +401,7 @@ OBJS = main.o util.o other.o %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ -all: $(OBJS) +all: $(OBJS) $(LINKER) $(OBJS) $(BLIS_LIB) $(OTHER_LIBS) -o my_program.x ``` The above example assumes you will want to include BLIS definitions and function prototypes into your application via `#include blis.h`. (If you are only using the BLIS via the BLAS compatibility layer, including `blis.h` is not necessary.) Since BLIS headers are installed into a `blis` subdirectory of `PREFIX/include`, you must make sure that the compiler knows where to find the `blis.h` header file. This is typically accomplished by inserting `#include "blis.h"` into your application's source code files and compiling the code with `-I PREFIX/include/blis`. diff --git a/frame/compat/bli_blas.h b/frame/compat/bli_blas.h index f2c3f9495..e1a7321a4 100644 --- a/frame/compat/bli_blas.h +++ b/frame/compat/bli_blas.h @@ -40,10 +40,31 @@ #endif #endif // BLIS_ENABLE_CBLAS +// By default, if the BLAS compatibility layer is enabled, we define +// (include) all of the BLAS prototypes. However, if the user is +// #including "blis.h" and also #including another header that also +// declares the BLAS functions, then we provide an opportunity to +// #undefine the BLIS_ENABLE_BLAS_DEFS macro (see below). +#ifdef BLIS_ENABLE_BLAS +#define BLIS_ENABLE_BLAS_DEFS +#else +#undef BLIS_ENABLE_BLAS_DEFS +#endif + // Skip prototyping all of the BLAS if the BLAS test drivers are being // compiled. -#ifndef BLIS_VIA_BLASTEST -#ifdef BLIS_ENABLE_BLAS +#ifdef BLIS_VIA_BLASTEST +#undef BLIS_ENABLE_BLAS_DEFS +#endif + +// Skip prototyping all of the BLAS if the environment has defined the +// macro BLIS_DISABLE_BLAS_DEFS. +#ifdef BLIS_DISABLE_BLAS_DEFS +#undef BLIS_ENABLE_BLAS_DEFS +#endif + +// Begin including all BLAS prototypes. +#ifdef BLIS_ENABLE_BLAS_DEFS // -- System headers needed by BLAS compatibility layer -- @@ -180,4 +201,3 @@ #endif // BLIS_ENABLE_BLAS -#endif // BLIS_VIA_BLASTEST From 686aa860f21f75c51c5889bdadf5864b6d522933 Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Mon, 25 Mar 2019 13:03:44 -0500 Subject: [PATCH 034/109] Fix clang version detection (#305) clang -dumpversion gives 4.2.1 for all clang versions as clang was originally compatible with gcc 4.2.1 Apple clang version and clang version are two different things and the real clang version cannot be deduced from apple clang version programatically. Rely on wikipedia to map apple clang to clang version Also fixes assembly detection with clang clang 3.8 can't build knl as it doesn't recognize zmm0 --- configure | 56 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/configure b/configure index 1cf93a82f..1a69f89df 100755 --- a/configure +++ b/configure @@ -1311,8 +1311,7 @@ get_compiler_version() # to OS X's egrep only returning the first match. cc_vendor=$(echo "${vendor_string}" | egrep -o 'icc|gcc|clang|emcc|pnacl|IBM' | { read first rest ; echo $first ; }) if [ "${cc_vendor}" = "icc" -o \ - "${cc_vendor}" = "gcc" -o \ - "${cc_vendor}" = "clang" ]; then + "${cc_vendor}" = "gcc" ]; then cc_version=$(${cc} -dumpversion) else cc_version=$(echo "${vendor_string}" | egrep -o '[0-9]+\.[0-9]+\.?[0-9]*' | { read first rest ; echo ${first} ; }) @@ -1360,7 +1359,7 @@ check_compiler() # Specific: # # skx: icc 15.0.1+, gcc 6.0+, clang 3.9+ - # knl: icc 14.0.1+, gcc 5.0+, clang 3.5+ + # knl: icc 14.0.1+, gcc 5.0+, clang 3.9+ # haswell: any # sandybridge: any # penryn: any @@ -1435,27 +1434,42 @@ check_compiler() # clang if [ "x${cc_vendor}" = "xclang" ]; then - - if [ ${cc_major} -lt 3 ]; then - echoerr_unsupportedcc - fi - if [ ${cc_major} -eq 3 ]; then - if [ ${cc_minor} -lt 3 ]; then + if [ "$(echo ${vendor_string} | grep -o Apple)" = "Apple" ]; then + if [ ${cc_major} -lt 5 ]; then echoerr_unsupportedcc fi - if [ ${cc_minor} -lt 5 ]; then + # See https://en.wikipedia.org/wiki/Xcode#Toolchain_versions + if [ ${cc_major} -eq 5 ]; then + # Apple clang 5.0 is clang 3.4svn blacklistcc_add "excavator" blacklistcc_add "zen" - blacklistcc_add "knl" fi - if [ ${cc_minor} -lt 9 ]; then + if [ ${cc_major} -lt 7 ]; then + blacklistcc_add "knl" blacklistcc_add "skx" fi - fi - if [ ${cc_major} -lt 4 ]; then - # See comment above regarding zen support. - #blacklistcc_add "zen" - : # explicit no-op since bash can't handle empty loop bodies. + else + if [ ${cc_major} -lt 3 ]; then + echoerr_unsupportedcc + fi + if [ ${cc_major} -eq 3 ]; then + if [ ${cc_minor} -lt 3 ]; then + echoerr_unsupportedcc + fi + if [ ${cc_minor} -lt 5 ]; then + blacklistcc_add "excavator" + blacklistcc_add "zen" + fi + if [ ${cc_minor} -lt 9 ]; then + blacklistcc_add "knl" + blacklistcc_add "skx" + fi + fi + if [ ${cc_major} -lt 4 ]; then + # See comment above regarding zen support. + #blacklistcc_add "zen" + : # explicit no-op since bash can't handle empty loop bodies. + fi fi fi } @@ -1513,8 +1527,8 @@ check_assembler() # # The assembler on OS X won't recognize AVX-512 without help. - if [ "$(uname -s)" == "Darwin" ]; then - cflags="-Wa,-march=knl" + if [ "${cc_vendor}" == "clang" ]; then + cflags="-march=knl" fi asm_fp=$(find ${asm_dir} -name "avx512f.s") @@ -1530,8 +1544,8 @@ check_assembler() # # The assembler on OS X won't recognize AVX-512 without help. - if [ "$(uname -s)" == "Darwin" ]; then - cflags="-Wa,-march=skylake-avx512" + if [ "${cc_vendor}" == "clang" ]; then + cflags="-march=skylake-avx512" fi asm_fp=$(find ${asm_dir} -name "avx512dq.s") From 728e9666e196b61b6c79459476866d98daec4688 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 26 Mar 2019 15:43:23 -0500 Subject: [PATCH 035/109] Add more support for Eigen to drivers in test/3. Details: - Use compile-time implementations of Eigen in test_gemm.c via new EIGEN cpp macro, defined on command line. (Linking to Eigen's BLAS library is not necessary.) However, as of Eigen 3.3.7, Eigen only parallelizes the gemm operation and not hemm, herk, trmm, trsm, or any other level-3 operation. - Fixed a bug in trmm and trsm drivers whereby the wrong function (bli_does_trans()) was being called to determine whether the object for matrix A should be created for a left- or right-side case. This was corrected by changing the function to bli_is_left(), as is done in the hemm driver. - Added support for running Eigen test drivers from runme.sh. --- test/3/Makefile | 108 ++++++++++++++++++++++------------ test/3/runme.sh | 29 ++++++--- test/3/test_gemm.c | 142 ++++++++++++++++++++++++++++++--------------- test/3/test_hemm.c | 66 ++++++++++++++------- test/3/test_herk.c | 89 +++++++++++++++++----------- test/3/test_trmm.c | 57 ++++++++++++------ test/3/test_trsm.c | 57 ++++++++++++------ 7 files changed, 363 insertions(+), 185 deletions(-) diff --git a/test/3/Makefile b/test/3/Makefile index b7d975203..0ef24437c 100644 --- a/test/3/Makefile +++ b/test/3/Makefile @@ -81,22 +81,11 @@ endif # -# --- BLAS and LAPACK implementations ------------------------------------------ +# --- BLAS implementations ----------------------------------------------------- # -# BLIS library and header path. This is simply wherever it was installed. -#BLIS_LIB_PATH := $(INSTALL_PREFIX)/lib -#BLIS_INC_PATH := $(INSTALL_PREFIX)/include/blis - -# BLIS library. -#BLIS_LIB := $(BLIS_LIB_PATH)/libblis.a - # BLAS library path(s). This is where the BLAS libraries reside. -HOME_LIB_PATH := $(HOME)/flame/lib -#VENDOR_LIB_PATH := /opt/apps/intel/13/composer_xe_2013.2.146/mkl/lib/intel64 -MKL_LIB_PATH := $(HOME)/intel/mkl/lib/intel64 -#VENDOR_LIB_PATH := ${MKLROOT}/lib/intel64 -#ICC_LIB_PATH := /opt/apps/intel/13/composer_xe_2013.2.146/compiler/lib/intel64 +HOME_LIB_PATH := $(HOME)/flame/lib # OpenBLAS OPENBLAS_LIB := $(HOME_LIB_PATH)/libopenblas.a @@ -107,10 +96,10 @@ OPENBLASP_LIB := $(HOME_LIB_PATH)/libopenblasp.a # $(HOME_LIB_PATH)/libatlas.a # Eigen -EIGEN_LIB := $(HOME_LIB_PATH)/libeigen.a -EIGENP_LIB := $(HOME_LIB_PATH)/libeigen.a +EIGEN_INC := $(HOME)/flame/eigen/include/eigen3 # MKL +MKL_LIB_PATH := $(HOME)/intel/mkl/lib/intel64 MKL_LIB := -L$(MKL_LIB_PATH) \ -lmkl_intel_lp64 \ -lmkl_core \ @@ -180,10 +169,19 @@ CFLAGS += -I$(TEST_SRC_PATH) # Locate the libblis library to which we will link. LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) +# Define a set of CFLAGS for use with C++ and Eigen. +CXXFLAGS := $(subst -std=c99,-std=c++11,$(CFLAGS)) +CXXFLAGS += -I$(EIGEN_INC) + +# Create a copy of CXXFLAGS without -fopenmp in order to disable multithreading. +CXXFLAGS_ST := -march=native $(subst -fopenmp,,$(CXXFLAGS)) +CXXFLAGS_MT := -march=native $(CXXFLAGS) + # Which library? BLI_DEF := -DBLIS BLA_DEF := -DBLAS +EIG_DEF := -DEIGEN # Complex implementation type D3MHW := -DIND=BLIS_3MH @@ -242,9 +240,10 @@ blis-2s: blis-nat-2s blis-nat: blis-nat-st blis-nat-1s blis-nat-2s # Define the datatypes, operations, and implementations. -DTS := s d c z -OPS := gemm hemm herk trmm trsm -IMPLS := asm_blis openblas eigen vendor +DTS := s d c z +OPS := gemm hemm herk trmm trsm +BIMPLS := asm_blis openblas vendor +EIMPLS := eigen # Define functions to construct object filenames from the datatypes and # operations given an implementation. We define one function for single- @@ -323,16 +322,21 @@ armpl-2s: vendor-2s # A function to return the datatype cpp macro def from the datatype # character. -get-dt-cpp = -DDT=bli_$(1)type +get-dt-cpp = $(strip \ + $(if $(findstring s,$(1)),-DDT=BLIS_FLOAT -DIS_FLOAT,\ + $(if $(findstring d,$(1)),-DDT=BLIS_DOUBLE -DIS_DOUBLE,\ + $(if $(findstring c,$(1)),-DDT=BLIS_SCOMPLEX -DIS_SCOMPLEX,\ + -DDT=BLIS_DCOMPLEX -DIS_DCOMPLEX)))) # A function to return other cpp macros that help the test driver # identify the implementation. get-bl-cpp = $(strip \ $(if $(findstring blis,$(1)),$(STR_NAT) $(BLI_DEF),\ $(if $(findstring openblas,$(1)),$(STR_OBL) $(BLA_DEF),\ - $(if $(findstring eigen,$(1)),$(STR_EIG) $(BLA_DEF),\ + $(if $(findstring eigen,$(1)),$(STR_EIG) $(EIG_DEF),\ $(STR_VEN) $(BLA_DEF))))) +# Rules for BLIS and BLAS libraries. define make-st-rule test_$(1)$(2)_$(PS_MAX)_$(3)_st.o: test_$(op).c Makefile $(CC) $(CFLAGS) $(PDEF_ST) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3)) $(DNAT) $(STR_ST) -c $$< -o $$@ @@ -350,15 +354,43 @@ endef $(foreach dt,$(DTS), \ $(foreach op,$(OPS), \ -$(foreach im,$(IMPLS),$(eval $(call make-st-rule,$(dt),$(op),$(im)))))) +$(foreach im,$(BIMPLS),$(eval $(call make-st-rule,$(dt),$(op),$(im)))))) $(foreach dt,$(DTS), \ $(foreach op,$(OPS), \ -$(foreach im,$(IMPLS),$(eval $(call make-1s-rule,$(dt),$(op),$(im)))))) +$(foreach im,$(BIMPLS),$(eval $(call make-1s-rule,$(dt),$(op),$(im)))))) $(foreach dt,$(DTS), \ $(foreach op,$(OPS), \ -$(foreach im,$(IMPLS),$(eval $(call make-2s-rule,$(dt),$(op),$(im)))))) +$(foreach im,$(BIMPLS),$(eval $(call make-2s-rule,$(dt),$(op),$(im)))))) + +# Rules for Eigen. +define make-eigst-rule +test_$(1)$(2)_$(PS_MAX)_$(3)_st.o: test_$(op).c Makefile + $(CXX) $(CXXFLAGS_ST) $(PDEF_ST) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3)) $(DNAT) $(STR_ST) -c $$< -o $$@ +endef + +define make-eig1s-rule +test_$(1)$(2)_$(P1_MAX)_$(3)_1s.o: test_$(op).c Makefile + $(CXX) $(CXXFLAGS_MT) $(PDEF_1S) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3)) $(DNAT) $(STR_1S) -c $$< -o $$@ +endef + +define make-eig2s-rule +test_$(1)$(2)_$(P2_MAX)_$(3)_2s.o: test_$(op).c Makefile + $(CXX) $(CXXFLAGS_MT) $(PDEF_2S) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3)) $(DNAT) $(STR_2S) -c $$< -o $$@ +endef + +$(foreach dt,$(DTS), \ +$(foreach op,$(OPS), \ +$(foreach im,$(EIMPLS),$(eval $(call make-eigst-rule,$(dt),$(op),$(im)))))) + +$(foreach dt,$(DTS), \ +$(foreach op,$(OPS), \ +$(foreach im,$(EIMPLS),$(eval $(call make-eig1s-rule,$(dt),$(op),$(im)))))) + +$(foreach dt,$(DTS), \ +$(foreach op,$(OPS), \ +$(foreach im,$(EIMPLS),$(eval $(call make-eig2s-rule,$(dt),$(op),$(im)))))) # -- Executable file rules -- @@ -369,43 +401,43 @@ $(foreach im,$(IMPLS),$(eval $(call make-2s-rule,$(dt),$(op),$(im)))))) # for the BLAS routines we are trying to test with. test_%_$(PS_MAX)_asm_blis_st.x: test_%_$(PS_MAX)_asm_blis_st.o $(LIBBLIS_LINK) - $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) test_%_$(P1_MAX)_asm_blis_1s.x: test_%_$(P1_MAX)_asm_blis_1s.o $(LIBBLIS_LINK) - $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) test_%_$(P2_MAX)_asm_blis_2s.x: test_%_$(P2_MAX)_asm_blis_2s.o $(LIBBLIS_LINK) - $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) test_%_$(PS_MAX)_openblas_st.x: test_%_$(PS_MAX)_openblas_st.o $(LIBBLIS_LINK) - $(CC) $(strip $< $(OPENBLAS_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + $(CC) $(strip $< $(OPENBLAS_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) test_%_$(P1_MAX)_openblas_1s.x: test_%_$(P1_MAX)_openblas_1s.o $(LIBBLIS_LINK) - $(CC) $(strip $< $(OPENBLASP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + $(CC) $(strip $< $(OPENBLASP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) test_%_$(P2_MAX)_openblas_2s.x: test_%_$(P2_MAX)_openblas_2s.o $(LIBBLIS_LINK) - $(CC) $(strip $< $(OPENBLASP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + $(CC) $(strip $< $(OPENBLASP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) test_%_$(PS_MAX)_eigen_st.x: test_%_$(PS_MAX)_eigen_st.o $(LIBBLIS_LINK) - $(CXX) $(strip $< $(EIGEN_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + $(CXX) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) test_%_$(P1_MAX)_eigen_1s.x: test_%_$(P1_MAX)_eigen_1s.o $(LIBBLIS_LINK) - $(CXX) $(strip $< $(EIGENP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + $(CXX) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) test_%_$(P2_MAX)_eigen_2s.x: test_%_$(P2_MAX)_eigen_2s.o $(LIBBLIS_LINK) - $(CXX) $(strip $< $(EIGENP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + $(CXX) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) -test_%_$(PS_MAX)_vendor_st.x: test_%_$(PS_MAX)_vendor_st.o $(LIBBLIS_LINK) - $(CC) $(strip $< $(VENDOR_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) +test_%_$(PS_MAX)_vendor_st.x: test_%_$(PS_MAX)_vendor_st.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(VENDOR_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) -test_%_$(P1_MAX)_vendor_1s.x: test_%_$(P1_MAX)_vendor_1s.o $(LIBBLIS_LINK) - $(CC) $(strip $< $(VENDORP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) +test_%_$(P1_MAX)_vendor_1s.x: test_%_$(P1_MAX)_vendor_1s.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(VENDORP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) -test_%_$(P2_MAX)_vendor_2s.x: test_%_$(P2_MAX)_vendor_2s.o $(LIBBLIS_LINK) - $(CC) $(strip $< $(VENDORP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) +test_%_$(P2_MAX)_vendor_2s.x: test_%_$(P2_MAX)_vendor_2s.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(VENDORP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) # -- Clean rules -- diff --git a/test/3/runme.sh b/test/3/runme.sh index a92bf9c0d..9933dd1e5 100755 --- a/test/3/runme.sh +++ b/test/3/runme.sh @@ -21,7 +21,8 @@ if [ ${sys} = "blis" ]; then export GOMP_CPU_AFFINITY="0 1 2 3" threads="jc1ic1jr1_2400 - jc2ic2jr1_4000" + jc2ic3jr2_6000 + jc4ic3jr2_8000" elif [ ${sys} = "stampede2" ]; then @@ -70,9 +71,10 @@ test_dts="d s z c" test_ops="gemm hemm herk trmm trsm" # Implementations to test. -impls="all" -#impls="other" #impls="blis" +#impls="other" +impls="eigen" +#impls="all" if [ "${impls}" = "blis" ]; then @@ -86,6 +88,10 @@ elif [ "${impls}" = "other" ]; then test_impls="openblas vendor" +elif [ "${impls}" = "eigen" ]; then + + test_impls="eigen" + else test_impls="openblas asm_blis vendor" @@ -142,6 +148,15 @@ for th in ${threads}; do for op in ${test_ops}; do + # Eigen does not support multithreading for hemm, herk, trmm, + # or trsm. So if we're getting ready to execute an Eigen driver + # for one of these operations and nt > 1, we skip this test. + if [ "${im}" = "eigen" ] && \ + [ "${op}" != "gemm" ] && \ + [ "${nt}" != "1" ]; then + continue; + fi + # Find the threading suffix by probing the executable. binname=$(ls ${exec_root}_${dt}${op}_${psize}_${im}_*.x) suf_ext=${binname##*_} @@ -154,19 +169,19 @@ for th in ${threads}; do # Set the threading parameters based on the implementation # that we are preparing to run. - if [ "${im}" = "asm_blis" ] + if [ "${im}" = "asm_blis" ]; then unset OMP_NUM_THREADS export BLIS_JC_NT=${jc_nt} export BLIS_PC_NT=${pc_nt} export BLIS_IC_NT=${ic_nt} export BLIS_JR_NT=${jr_nt} export BLIS_IR_NT=${ir_nt} - elif [ "${im}" = "openblas" ] + elif [ "${im}" = "openblas" ]; then unset OMP_NUM_THREADS export OPENBLAS_NUM_THREADS=${nt} - elif [ "${im}" = "eigen" ] + elif [ "${im}" = "eigen" ]; then export OMP_NUM_THREADS=${nt} - elif [ "${im}" = "vendor" ] + elif [ "${im}" = "vendor" ]; then unset OMP_NUM_THREADS export MKL_NUM_THREADS=${nt} fi diff --git a/test/3/test_gemm.c b/test/3/test_gemm.c index 67c0a845d..6289ee8b1 100644 --- a/test/3/test_gemm.c +++ b/test/3/test_gemm.c @@ -33,7 +33,15 @@ */ #include -#include "blis.h" +#ifdef EIGEN + #define BLIS_DISABLE_BLAS_DEFS + #include "blis.h" + #include + #include + using namespace Eigen; +#else + #include "blis.h" +#endif //#define PRINT @@ -161,6 +169,42 @@ int main( int argc, char** argv ) bli_ind_enable_dt( ind, dt ); #endif +#ifdef EIGEN + double alpha_r, alpha_i; + + bli_getsc( &alpha, &alpha_r, &alpha_i ); + + void* ap = bli_obj_buffer_at_off( &a ); + void* bp = bli_obj_buffer_at_off( &b ); + void* cp = bli_obj_buffer_at_off( &c ); + + const int os_a = bli_obj_col_stride( &a ); + const int os_b = bli_obj_col_stride( &b ); + const int os_c = bli_obj_col_stride( &c ); + + Stride stride_a( os_a, 1 ); + Stride stride_b( os_b, 1 ); + Stride stride_c( os_c, 1 ); + + #if defined(IS_FLOAT) + Map > A( ( float* )ap, m, k, stride_a ); + Map > B( ( float* )bp, k, n, stride_b ); + Map > C( ( float* )cp, m, n, stride_c ); + #elif defined (IS_DOUBLE) + Map > A( ( double* )ap, m, k, stride_a ); + Map > B( ( double* )bp, k, n, stride_b ); + Map > C( ( double* )cp, m, n, stride_c ); + #elif defined (IS_SCOMPLEX) + Map > A( ( std::complex* )ap, m, k, stride_a ); + Map > B( ( std::complex* )bp, k, n, stride_b ); + Map > C( ( std::complex* )cp, m, n, stride_c ); + #elif defined (IS_DCOMPLEX) + Map > A( ( std::complex* )ap, m, k, stride_a ); + Map > B( ( std::complex* )bp, k, n, stride_b ); + Map > C( ( std::complex* )cp, m, n, stride_c ); + #endif +#endif + dtime_save = DBL_MAX; for ( r = 0; r < n_repeats; ++r ) @@ -175,7 +219,7 @@ int main( int argc, char** argv ) bli_printm( "c", &c, "%4.1f", "" ); #endif -#ifdef BLIS +#if defined(BLIS) bli_gemm( &alpha, &a, @@ -183,21 +227,25 @@ int main( int argc, char** argv ) &beta, &c ); -#else +#elif defined(EIGEN) + + C.noalias() += alpha_r * A * B; + +#else // if defined(BLAS) if ( bli_is_float( dt ) ) { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width_after_trans( &a ); - f77_int nn = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldb = bli_obj_col_stride( &b ); - f77_int ldc = bli_obj_col_stride( &c ); - float* alphap = bli_obj_buffer( &alpha ); - float* ap = bli_obj_buffer( &a ); - float* bp = bli_obj_buffer( &b ); - float* betap = bli_obj_buffer( &beta ); - float* cp = bli_obj_buffer( &c ); + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + float* alphap = ( float* )bli_obj_buffer( &alpha ); + float* ap = ( float* )bli_obj_buffer( &a ); + float* bp = ( float* )bli_obj_buffer( &b ); + float* betap = ( float* )bli_obj_buffer( &beta ); + float* cp = ( float* )bli_obj_buffer( &c ); sgemm_( &f77_transa, &f77_transb, @@ -212,17 +260,17 @@ int main( int argc, char** argv ) } else if ( bli_is_double( dt ) ) { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width_after_trans( &a ); - f77_int nn = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldb = bli_obj_col_stride( &b ); - f77_int ldc = bli_obj_col_stride( &c ); - double* alphap = bli_obj_buffer( &alpha ); - double* ap = bli_obj_buffer( &a ); - double* bp = bli_obj_buffer( &b ); - double* betap = bli_obj_buffer( &beta ); - double* cp = bli_obj_buffer( &c ); + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + double* alphap = ( double* )bli_obj_buffer( &alpha ); + double* ap = ( double* )bli_obj_buffer( &a ); + double* bp = ( double* )bli_obj_buffer( &b ); + double* betap = ( double* )bli_obj_buffer( &beta ); + double* cp = ( double* )bli_obj_buffer( &c ); dgemm_( &f77_transa, &f77_transb, @@ -237,17 +285,17 @@ int main( int argc, char** argv ) } else if ( bli_is_scomplex( dt ) ) { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width_after_trans( &a ); - f77_int nn = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldb = bli_obj_col_stride( &b ); - f77_int ldc = bli_obj_col_stride( &c ); - scomplex* alphap = bli_obj_buffer( &alpha ); - scomplex* ap = bli_obj_buffer( &a ); - scomplex* bp = bli_obj_buffer( &b ); - scomplex* betap = bli_obj_buffer( &beta ); - scomplex* cp = bli_obj_buffer( &c ); + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + scomplex* alphap = ( scomplex* )bli_obj_buffer( &alpha ); + scomplex* ap = ( scomplex* )bli_obj_buffer( &a ); + scomplex* bp = ( scomplex* )bli_obj_buffer( &b ); + scomplex* betap = ( scomplex* )bli_obj_buffer( &beta ); + scomplex* cp = ( scomplex* )bli_obj_buffer( &c ); cgemm_( &f77_transa, &f77_transb, @@ -262,17 +310,17 @@ int main( int argc, char** argv ) } else if ( bli_is_dcomplex( dt ) ) { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width_after_trans( &a ); - f77_int nn = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldb = bli_obj_col_stride( &b ); - f77_int ldc = bli_obj_col_stride( &c ); - dcomplex* alphap = bli_obj_buffer( &alpha ); - dcomplex* ap = bli_obj_buffer( &a ); - dcomplex* bp = bli_obj_buffer( &b ); - dcomplex* betap = bli_obj_buffer( &beta ); - dcomplex* cp = bli_obj_buffer( &c ); + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + dcomplex* alphap = ( dcomplex* )bli_obj_buffer( &alpha ); + dcomplex* ap = ( dcomplex* )bli_obj_buffer( &a ); + dcomplex* bp = ( dcomplex* )bli_obj_buffer( &b ); + dcomplex* betap = ( dcomplex* )bli_obj_buffer( &beta ); + dcomplex* cp = ( dcomplex* )bli_obj_buffer( &c ); zgemm_( &f77_transa, &f77_transb, diff --git a/test/3/test_hemm.c b/test/3/test_hemm.c index 46cd3708a..9cebe1bf9 100644 --- a/test/3/test_hemm.c +++ b/test/3/test_hemm.c @@ -33,7 +33,15 @@ */ #include -#include "blis.h" +#ifdef EIGEN + #define BLIS_DISABLE_BLAS_DEFS + #include "blis.h" + #include + #include + using namespace Eigen; +#else + #include "blis.h" +#endif //#define PRINT @@ -197,11 +205,11 @@ int main( int argc, char** argv ) f77_int lda = bli_obj_col_stride( &a ); f77_int ldb = bli_obj_col_stride( &b ); f77_int ldc = bli_obj_col_stride( &c ); - float* alphap = bli_obj_buffer( &alpha ); - float* ap = bli_obj_buffer( &a ); - float* bp = bli_obj_buffer( &b ); - float* betap = bli_obj_buffer( &beta ); - float* cp = bli_obj_buffer( &c ); + float* alphap = ( float* )bli_obj_buffer( &alpha ); + float* ap = ( float* )bli_obj_buffer( &a ); + float* bp = ( float* )bli_obj_buffer( &b ); + float* betap = ( float* )bli_obj_buffer( &beta ); + float* cp = ( float* )bli_obj_buffer( &c ); ssymm_( &f77_side, &f77_uploa, @@ -220,11 +228,11 @@ int main( int argc, char** argv ) f77_int lda = bli_obj_col_stride( &a ); f77_int ldb = bli_obj_col_stride( &b ); f77_int ldc = bli_obj_col_stride( &c ); - double* alphap = bli_obj_buffer( &alpha ); - double* ap = bli_obj_buffer( &a ); - double* bp = bli_obj_buffer( &b ); - double* betap = bli_obj_buffer( &beta ); - double* cp = bli_obj_buffer( &c ); + double* alphap = ( double* )bli_obj_buffer( &alpha ); + double* ap = ( double* )bli_obj_buffer( &a ); + double* bp = ( double* )bli_obj_buffer( &b ); + double* betap = ( double* )bli_obj_buffer( &beta ); + double* cp = ( double* )bli_obj_buffer( &c ); dsymm_( &f77_side, &f77_uploa, @@ -243,11 +251,19 @@ int main( int argc, char** argv ) f77_int lda = bli_obj_col_stride( &a ); f77_int ldb = bli_obj_col_stride( &b ); f77_int ldc = bli_obj_col_stride( &c ); - scomplex* alphap = bli_obj_buffer( &alpha ); - scomplex* ap = bli_obj_buffer( &a ); - scomplex* bp = bli_obj_buffer( &b ); - scomplex* betap = bli_obj_buffer( &beta ); - scomplex* cp = bli_obj_buffer( &c ); +#ifdef EIGEN + float* alphap = ( float* )bli_obj_buffer( &alpha ); + float* ap = ( float* )bli_obj_buffer( &a ); + float* bp = ( float* )bli_obj_buffer( &b ); + float* betap = ( float* )bli_obj_buffer( &beta ); + float* cp = ( float* )bli_obj_buffer( &c ); +#else + scomplex* alphap = ( scomplex* )bli_obj_buffer( &alpha ); + scomplex* ap = ( scomplex* )bli_obj_buffer( &a ); + scomplex* bp = ( scomplex* )bli_obj_buffer( &b ); + scomplex* betap = ( scomplex* )bli_obj_buffer( &beta ); + scomplex* cp = ( scomplex* )bli_obj_buffer( &c ); +#endif chemm_( &f77_side, &f77_uploa, @@ -266,11 +282,19 @@ int main( int argc, char** argv ) f77_int lda = bli_obj_col_stride( &a ); f77_int ldb = bli_obj_col_stride( &b ); f77_int ldc = bli_obj_col_stride( &c ); - dcomplex* alphap = bli_obj_buffer( &alpha ); - dcomplex* ap = bli_obj_buffer( &a ); - dcomplex* bp = bli_obj_buffer( &b ); - dcomplex* betap = bli_obj_buffer( &beta ); - dcomplex* cp = bli_obj_buffer( &c ); +#ifdef EIGEN + double* alphap = ( double* )bli_obj_buffer( &alpha ); + double* ap = ( double* )bli_obj_buffer( &a ); + double* bp = ( double* )bli_obj_buffer( &b ); + double* betap = ( double* )bli_obj_buffer( &beta ); + double* cp = ( double* )bli_obj_buffer( &c ); +#else + dcomplex* alphap = ( dcomplex* )bli_obj_buffer( &alpha ); + dcomplex* ap = ( dcomplex* )bli_obj_buffer( &a ); + dcomplex* bp = ( dcomplex* )bli_obj_buffer( &b ); + dcomplex* betap = ( dcomplex* )bli_obj_buffer( &beta ); + dcomplex* cp = ( dcomplex* )bli_obj_buffer( &c ); +#endif zhemm_( &f77_side, &f77_uploa, diff --git a/test/3/test_herk.c b/test/3/test_herk.c index 686a15b6c..286454859 100644 --- a/test/3/test_herk.c +++ b/test/3/test_herk.c @@ -34,8 +34,15 @@ */ #include -#include "blis.h" - +#ifdef EIGEN + #define BLIS_DISABLE_BLAS_DEFS + #include "blis.h" + #include + #include + using namespace Eigen; +#else + #include "blis.h" +#endif //#define PRINT @@ -190,14 +197,14 @@ int main( int argc, char** argv ) if ( bli_is_float( dt ) ) { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width_after_trans( &a ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - float* alphap = bli_obj_buffer( &alpha ); - float* ap = bli_obj_buffer( &a ); - float* betap = bli_obj_buffer( &beta ); - float* cp = bli_obj_buffer( &c ); + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); + float* alphap = ( float* )bli_obj_buffer( &alpha ); + float* ap = ( float* )bli_obj_buffer( &a ); + float* betap = ( float* )bli_obj_buffer( &beta ); + float* cp = ( float* )bli_obj_buffer( &c ); ssyrk_( &f77_uploc, &f77_transa, @@ -210,14 +217,14 @@ int main( int argc, char** argv ) } else if ( bli_is_double( dt ) ) { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width_after_trans( &a ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - double* alphap = bli_obj_buffer( &alpha ); - double* ap = bli_obj_buffer( &a ); - double* betap = bli_obj_buffer( &beta ); - double* cp = bli_obj_buffer( &c ); + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); + double* alphap = ( double* )bli_obj_buffer( &alpha ); + double* ap = ( double* )bli_obj_buffer( &a ); + double* betap = ( double* )bli_obj_buffer( &beta ); + double* cp = ( double* )bli_obj_buffer( &c ); dsyrk_( &f77_uploc, &f77_transa, @@ -230,14 +237,21 @@ int main( int argc, char** argv ) } else if ( bli_is_scomplex( dt ) ) { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width_after_trans( &a ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - float* alphap = bli_obj_buffer( &alpha ); - scomplex* ap = bli_obj_buffer( &a ); - float* betap = bli_obj_buffer( &beta ); - scomplex* cp = bli_obj_buffer( &c ); + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); +#ifdef EIGEN + float* alphap = ( float* )bli_obj_buffer( &alpha ); + float* ap = ( float* )bli_obj_buffer( &a ); + float* betap = ( float* )bli_obj_buffer( &beta ); + float* cp = ( float* )bli_obj_buffer( &c ); +#else + float* alphap = ( float* )bli_obj_buffer( &alpha ); + scomplex* ap = ( scomplex* )bli_obj_buffer( &a ); + float* betap = ( float* )bli_obj_buffer( &beta ); + scomplex* cp = ( scomplex* )bli_obj_buffer( &c ); +#endif cherk_( &f77_uploc, &f77_transa, @@ -250,14 +264,21 @@ int main( int argc, char** argv ) } else if ( bli_is_dcomplex( dt ) ) { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width_after_trans( &a ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - double* alphap = bli_obj_buffer( &alpha ); - dcomplex* ap = bli_obj_buffer( &a ); - double* betap = bli_obj_buffer( &beta ); - dcomplex* cp = bli_obj_buffer( &c ); + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); +#ifdef EIGEN + double* alphap = ( double* )bli_obj_buffer( &alpha ); + double* ap = ( double* )bli_obj_buffer( &a ); + double* betap = ( double* )bli_obj_buffer( &beta ); + double* cp = ( double* )bli_obj_buffer( &c ); +#else + double* alphap = ( double* )bli_obj_buffer( &alpha ); + dcomplex* ap = ( dcomplex* )bli_obj_buffer( &a ); + double* betap = ( double* )bli_obj_buffer( &beta ); + dcomplex* cp = ( dcomplex* )bli_obj_buffer( &c ); +#endif zherk_( &f77_uploc, &f77_transa, diff --git a/test/3/test_trmm.c b/test/3/test_trmm.c index fdef053ed..938bbf582 100644 --- a/test/3/test_trmm.c +++ b/test/3/test_trmm.c @@ -34,8 +34,15 @@ */ #include -#include "blis.h" - +#ifdef EIGEN + #define BLIS_DISABLE_BLAS_DEFS + #include "blis.h" + #include + #include + using namespace Eigen; +#else + #include "blis.h" +#endif //#define PRINT @@ -152,7 +159,7 @@ int main( int argc, char** argv ) bli_obj_create( dt, 1, 1, 0, 0, &alpha ); - if ( bli_does_trans( side ) ) + if ( bli_is_left( side ) ) bli_obj_create( dt, m, m, 0, 0, &a ); else bli_obj_create( dt, n, n, 0, 0, &a ); @@ -207,9 +214,9 @@ int main( int argc, char** argv ) f77_int kk = bli_obj_width( &c ); f77_int lda = bli_obj_col_stride( &a ); f77_int ldc = bli_obj_col_stride( &c ); - float* alphap = bli_obj_buffer( &alpha ); - float* ap = bli_obj_buffer( &a ); - float* cp = bli_obj_buffer( &c ); + float* alphap = ( float* )bli_obj_buffer( &alpha ); + float* ap = ( float* )bli_obj_buffer( &a ); + float* cp = ( float* )bli_obj_buffer( &c ); strmm_( &f77_side, &f77_uploa, @@ -227,9 +234,9 @@ int main( int argc, char** argv ) f77_int kk = bli_obj_width( &c ); f77_int lda = bli_obj_col_stride( &a ); f77_int ldc = bli_obj_col_stride( &c ); - double* alphap = bli_obj_buffer( &alpha ); - double* ap = bli_obj_buffer( &a ); - double* cp = bli_obj_buffer( &c ); + double* alphap = ( double* )bli_obj_buffer( &alpha ); + double* ap = ( double* )bli_obj_buffer( &a ); + double* cp = ( double* )bli_obj_buffer( &c ); dtrmm_( &f77_side, &f77_uploa, @@ -247,9 +254,15 @@ int main( int argc, char** argv ) f77_int kk = bli_obj_width( &c ); f77_int lda = bli_obj_col_stride( &a ); f77_int ldc = bli_obj_col_stride( &c ); - scomplex* alphap = bli_obj_buffer( &alpha ); - scomplex* ap = bli_obj_buffer( &a ); - scomplex* cp = bli_obj_buffer( &c ); +#ifdef EIGEN + float* alphap = ( float* )bli_obj_buffer( &alpha ); + float* ap = ( float* )bli_obj_buffer( &a ); + float* cp = ( float* )bli_obj_buffer( &c ); +#else + scomplex* alphap = ( scomplex* )bli_obj_buffer( &alpha ); + scomplex* ap = ( scomplex* )bli_obj_buffer( &a ); + scomplex* cp = ( scomplex* )bli_obj_buffer( &c ); +#endif ctrmm_( &f77_side, &f77_uploa, @@ -263,13 +276,19 @@ int main( int argc, char** argv ) } else if ( bli_is_dcomplex( dt ) ) { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - dcomplex* alphap = bli_obj_buffer( &alpha ); - dcomplex* ap = bli_obj_buffer( &a ); - dcomplex* cp = bli_obj_buffer( &c ); + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); +#ifdef EIGEN + double* alphap = ( double* )bli_obj_buffer( &alpha ); + double* ap = ( double* )bli_obj_buffer( &a ); + double* cp = ( double* )bli_obj_buffer( &c ); +#else + dcomplex* alphap = ( dcomplex* )bli_obj_buffer( &alpha ); + dcomplex* ap = ( dcomplex* )bli_obj_buffer( &a ); + dcomplex* cp = ( dcomplex* )bli_obj_buffer( &c ); +#endif ztrmm_( &f77_side, &f77_uploa, diff --git a/test/3/test_trsm.c b/test/3/test_trsm.c index 6d834f0a9..976160e2f 100644 --- a/test/3/test_trsm.c +++ b/test/3/test_trsm.c @@ -34,8 +34,15 @@ */ #include -#include "blis.h" - +#ifdef EIGEN + #define BLIS_DISABLE_BLAS_DEFS + #include "blis.h" + #include + #include + using namespace Eigen; +#else + #include "blis.h" +#endif //#define PRINT @@ -152,7 +159,7 @@ int main( int argc, char** argv ) bli_obj_create( dt, 1, 1, 0, 0, &alpha ); - if ( bli_does_trans( side ) ) + if ( bli_is_left( side ) ) bli_obj_create( dt, m, m, 0, 0, &a ); else bli_obj_create( dt, n, n, 0, 0, &a ); @@ -211,9 +218,9 @@ int main( int argc, char** argv ) f77_int kk = bli_obj_width( &c ); f77_int lda = bli_obj_col_stride( &a ); f77_int ldc = bli_obj_col_stride( &c ); - float* alphap = bli_obj_buffer( &alpha ); - float* ap = bli_obj_buffer( &a ); - float* cp = bli_obj_buffer( &c ); + float* alphap = ( float* )bli_obj_buffer( &alpha ); + float* ap = ( float* )bli_obj_buffer( &a ); + float* cp = ( float* )bli_obj_buffer( &c ); strsm_( &f77_side, &f77_uploa, @@ -231,9 +238,9 @@ int main( int argc, char** argv ) f77_int kk = bli_obj_width( &c ); f77_int lda = bli_obj_col_stride( &a ); f77_int ldc = bli_obj_col_stride( &c ); - double* alphap = bli_obj_buffer( &alpha ); - double* ap = bli_obj_buffer( &a ); - double* cp = bli_obj_buffer( &c ); + double* alphap = ( double* )bli_obj_buffer( &alpha ); + double* ap = ( double* )bli_obj_buffer( &a ); + double* cp = ( double* )bli_obj_buffer( &c ); dtrsm_( &f77_side, &f77_uploa, @@ -251,9 +258,15 @@ int main( int argc, char** argv ) f77_int kk = bli_obj_width( &c ); f77_int lda = bli_obj_col_stride( &a ); f77_int ldc = bli_obj_col_stride( &c ); - scomplex* alphap = bli_obj_buffer( &alpha ); - scomplex* ap = bli_obj_buffer( &a ); - scomplex* cp = bli_obj_buffer( &c ); +#ifdef EIGEN + float* alphap = ( float* )bli_obj_buffer( &alpha ); + float* ap = ( float* )bli_obj_buffer( &a ); + float* cp = ( float* )bli_obj_buffer( &c ); +#else + scomplex* alphap = ( scomplex* )bli_obj_buffer( &alpha ); + scomplex* ap = ( scomplex* )bli_obj_buffer( &a ); + scomplex* cp = ( scomplex* )bli_obj_buffer( &c ); +#endif ctrsm_( &f77_side, &f77_uploa, @@ -267,13 +280,19 @@ int main( int argc, char** argv ) } else if ( bli_is_dcomplex( dt ) ) { - f77_int mm = bli_obj_length( &c ); - f77_int kk = bli_obj_width( &c ); - f77_int lda = bli_obj_col_stride( &a ); - f77_int ldc = bli_obj_col_stride( &c ); - dcomplex* alphap = bli_obj_buffer( &alpha ); - dcomplex* ap = bli_obj_buffer( &a ); - dcomplex* cp = bli_obj_buffer( &c ); + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldc = bli_obj_col_stride( &c ); +#ifdef EIGEN + double* alphap = ( double* )bli_obj_buffer( &alpha ); + double* ap = ( double* )bli_obj_buffer( &a ); + double* cp = ( double* )bli_obj_buffer( &c ); +#else + dcomplex* alphap = ( dcomplex* )bli_obj_buffer( &alpha ); + dcomplex* ap = ( dcomplex* )bli_obj_buffer( &a ); + dcomplex* cp = ( dcomplex* )bli_obj_buffer( &c ); +#endif ztrsm_( &f77_side, &f77_uploa, From b495ca9b768b3917e244f561440def71ebfd2eee Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 26 Mar 2019 19:10:59 -0500 Subject: [PATCH 036/109] Link to Eigen BLAS for non-gemm drivers in test/3. Details: - Adjusted test/3/Makefile so that the test drivers are linked against Eigen's BLAS library for hemm, herk, trmm, and trsm. We have to do this since Eigen's headers don't define implementations to the standard BLAS APIs. - Simplified #included headers in hemm, herk, trmm, and trsm source driver files, since nothing specific to Eigen is needed at compile-time for those operations. --- test/3/Makefile | 31 +++++++++++++++++++++---------- test/3/test_hemm.c | 10 +--------- test/3/test_herk.c | 10 +--------- test/3/test_trmm.c | 10 +--------- test/3/test_trsm.c | 10 +--------- 5 files changed, 25 insertions(+), 46 deletions(-) diff --git a/test/3/Makefile b/test/3/Makefile index 0ef24437c..a90f90147 100644 --- a/test/3/Makefile +++ b/test/3/Makefile @@ -97,6 +97,8 @@ OPENBLASP_LIB := $(HOME_LIB_PATH)/libopenblasp.a # Eigen EIGEN_INC := $(HOME)/flame/eigen/include/eigen3 +EIGEN_LIB := $(HOME_LIB_PATH)/libeigen_blas_static.a +EIGENP_LIB := $(EIGEN_LIB) # MKL MKL_LIB_PATH := $(HOME)/intel/mkl/lib/intel64 @@ -330,26 +332,35 @@ get-dt-cpp = $(strip \ # A function to return other cpp macros that help the test driver # identify the implementation. +#get-bl-cpp = $(strip \ +# $(if $(findstring blis,$(1)),$(STR_NAT) $(BLI_DEF),\ +# $(if $(findstring openblas,$(1)),$(STR_OBL) $(BLA_DEF),\ +# $(if $(findstring eigen,$(1)),$(STR_EIG) $(EIG_DEF),\ +# $(STR_VEN) $(BLA_DEF))))) + get-bl-cpp = $(strip \ $(if $(findstring blis,$(1)),$(STR_NAT) $(BLI_DEF),\ $(if $(findstring openblas,$(1)),$(STR_OBL) $(BLA_DEF),\ - $(if $(findstring eigen,$(1)),$(STR_EIG) $(EIG_DEF),\ + $(if $(and $(findstring eigen,$(1)),\ + $(findstring gemm,$(2))),\ + $(STR_EIG) $(EIG_DEF),\ $(STR_VEN) $(BLA_DEF))))) + # Rules for BLIS and BLAS libraries. define make-st-rule test_$(1)$(2)_$(PS_MAX)_$(3)_st.o: test_$(op).c Makefile - $(CC) $(CFLAGS) $(PDEF_ST) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3)) $(DNAT) $(STR_ST) -c $$< -o $$@ + $(CC) $(CFLAGS) $(PDEF_ST) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3),$(2)) $(DNAT) $(STR_ST) -c $$< -o $$@ endef define make-1s-rule test_$(1)$(2)_$(P1_MAX)_$(3)_1s.o: test_$(op).c Makefile - $(CC) $(CFLAGS) $(PDEF_1S) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3)) $(DNAT) $(STR_1S) -c $$< -o $$@ + $(CC) $(CFLAGS) $(PDEF_1S) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3),$(2)) $(DNAT) $(STR_1S) -c $$< -o $$@ endef define make-2s-rule test_$(1)$(2)_$(P2_MAX)_$(3)_2s.o: test_$(op).c Makefile - $(CC) $(CFLAGS) $(PDEF_2S) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3)) $(DNAT) $(STR_2S) -c $$< -o $$@ + $(CC) $(CFLAGS) $(PDEF_2S) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3),$(2)) $(DNAT) $(STR_2S) -c $$< -o $$@ endef $(foreach dt,$(DTS), \ @@ -367,17 +378,17 @@ $(foreach im,$(BIMPLS),$(eval $(call make-2s-rule,$(dt),$(op),$(im)))))) # Rules for Eigen. define make-eigst-rule test_$(1)$(2)_$(PS_MAX)_$(3)_st.o: test_$(op).c Makefile - $(CXX) $(CXXFLAGS_ST) $(PDEF_ST) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3)) $(DNAT) $(STR_ST) -c $$< -o $$@ + $(CXX) $(CXXFLAGS_ST) $(PDEF_ST) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3),$(2)) $(DNAT) $(STR_ST) -c $$< -o $$@ endef define make-eig1s-rule test_$(1)$(2)_$(P1_MAX)_$(3)_1s.o: test_$(op).c Makefile - $(CXX) $(CXXFLAGS_MT) $(PDEF_1S) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3)) $(DNAT) $(STR_1S) -c $$< -o $$@ + $(CXX) $(CXXFLAGS_MT) $(PDEF_1S) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3),$(2)) $(DNAT) $(STR_1S) -c $$< -o $$@ endef define make-eig2s-rule test_$(1)$(2)_$(P2_MAX)_$(3)_2s.o: test_$(op).c Makefile - $(CXX) $(CXXFLAGS_MT) $(PDEF_2S) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3)) $(DNAT) $(STR_2S) -c $$< -o $$@ + $(CXX) $(CXXFLAGS_MT) $(PDEF_2S) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3),$(2)) $(DNAT) $(STR_2S) -c $$< -o $$@ endef $(foreach dt,$(DTS), \ @@ -421,13 +432,13 @@ test_%_$(P2_MAX)_openblas_2s.x: test_%_$(P2_MAX)_openblas_2s.o $(LIBBLIS_LINK) test_%_$(PS_MAX)_eigen_st.x: test_%_$(PS_MAX)_eigen_st.o $(LIBBLIS_LINK) - $(CXX) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + $(CXX) $(strip $< $(EIGEN_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) test_%_$(P1_MAX)_eigen_1s.x: test_%_$(P1_MAX)_eigen_1s.o $(LIBBLIS_LINK) - $(CXX) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + $(CXX) $(strip $< $(EIGENP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) test_%_$(P2_MAX)_eigen_2s.x: test_%_$(P2_MAX)_eigen_2s.o $(LIBBLIS_LINK) - $(CXX) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + $(CXX) $(strip $< $(EIGENP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) test_%_$(PS_MAX)_vendor_st.x: test_%_$(PS_MAX)_vendor_st.o $(LIBBLIS_LINK) diff --git a/test/3/test_hemm.c b/test/3/test_hemm.c index 9cebe1bf9..73746ae4b 100644 --- a/test/3/test_hemm.c +++ b/test/3/test_hemm.c @@ -33,15 +33,7 @@ */ #include -#ifdef EIGEN - #define BLIS_DISABLE_BLAS_DEFS - #include "blis.h" - #include - #include - using namespace Eigen; -#else - #include "blis.h" -#endif +#include "blis.h" //#define PRINT diff --git a/test/3/test_herk.c b/test/3/test_herk.c index 286454859..623bec30e 100644 --- a/test/3/test_herk.c +++ b/test/3/test_herk.c @@ -34,15 +34,7 @@ */ #include -#ifdef EIGEN - #define BLIS_DISABLE_BLAS_DEFS - #include "blis.h" - #include - #include - using namespace Eigen; -#else - #include "blis.h" -#endif +#include "blis.h" //#define PRINT diff --git a/test/3/test_trmm.c b/test/3/test_trmm.c index 938bbf582..5fa7f8e32 100644 --- a/test/3/test_trmm.c +++ b/test/3/test_trmm.c @@ -34,15 +34,7 @@ */ #include -#ifdef EIGEN - #define BLIS_DISABLE_BLAS_DEFS - #include "blis.h" - #include - #include - using namespace Eigen; -#else - #include "blis.h" -#endif +#include "blis.h" //#define PRINT diff --git a/test/3/test_trsm.c b/test/3/test_trsm.c index 976160e2f..fe1481ddf 100644 --- a/test/3/test_trsm.c +++ b/test/3/test_trsm.c @@ -34,15 +34,7 @@ */ #include -#ifdef EIGEN - #define BLIS_DISABLE_BLAS_DEFS - #include "blis.h" - #include - #include - using namespace Eigen; -#else - #include "blis.h" -#endif +#include "blis.h" //#define PRINT From aa9d8e4a810c55bd34f284fa6e230f3889cca26a Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Wed, 27 Mar 2019 12:39:31 -0500 Subject: [PATCH 037/109] Test with shared on windows (#306) Export macros can't support both shared and static at the same time. When blis is built with both shared and static, headers assume that shared is used at link time and dllimports the symbols with __imp_ prefix. To use the headers with static libraries a user can give -DBLIS_EXPORT= to import the symbol without the __imp_ prefix --- common.mk | 5 +++++ frame/include/bli_config_macro_defs.h | 20 +++++++++++--------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/common.mk b/common.mk index ef0acfb50..5513098a5 100644 --- a/common.mk +++ b/common.mk @@ -530,6 +530,11 @@ ifeq ($(IS_WIN),no) LDFLAGS += -Wl,-rpath,$(BASE_LIB_PATH) endif endif +# On windows, use the shared library even if static is created. +ifeq ($(IS_WIN),yes) +LIBBLIS_L := $(LIBBLIS_SO) +LIBBLIS_LINK := $(LIBBLIS_SO_PATH) +endif endif diff --git a/frame/include/bli_config_macro_defs.h b/frame/include/bli_config_macro_defs.h index ed0056990..cef0b8432 100644 --- a/frame/include/bli_config_macro_defs.h +++ b/frame/include/bli_config_macro_defs.h @@ -203,20 +203,22 @@ // with that setting overridden only for function prototypes or variable // declarations that are annotated with BLIS_EXPORT_BLIS. -#if !defined(BLIS_ENABLE_SHARED) +#ifndef BLIS_EXPORT + #if !defined(BLIS_ENABLE_SHARED) #define BLIS_EXPORT -#else + #else #if defined(_WIN32) || defined(__CYGWIN__) - #ifdef BLIS_IS_BUILDING_LIBRARY - #define BLIS_EXPORT __declspec(dllexport) - #else - #define BLIS_EXPORT __declspec(dllimport) - #endif + #ifdef BLIS_IS_BUILDING_LIBRARY + #define BLIS_EXPORT __declspec(dllexport) + #else + #define BLIS_EXPORT __declspec(dllimport) + #endif #elif defined(__GNUC__) && __GNUC__ >= 4 - #define BLIS_EXPORT __attribute__ ((visibility ("default"))) + #define BLIS_EXPORT __attribute__ ((visibility ("default"))) #else - #define BLIS_EXPORT + #define BLIS_EXPORT #endif + #endif #endif #define BLIS_EXPORT_BLIS BLIS_EXPORT From bd6cdd884bf8efbbb6715e6d0afb0092b90c2700 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Wed, 27 Mar 2019 13:32:18 -0500 Subject: [PATCH 038/109] Fixed mislabeled eigen output from test/3 drivers. Details: - Fixed the Makefile in test/3 so that it no longer incorrectly labels the matlab output variables from Eigen-linked hemm, herk, trmm, and trsm driver output as "vendor". (The gemm drivers were already correctly outputing matlab variables containing the "eigen" label.) --- test/3/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/3/Makefile b/test/3/Makefile index a90f90147..a781d0053 100644 --- a/test/3/Makefile +++ b/test/3/Makefile @@ -344,7 +344,9 @@ get-bl-cpp = $(strip \ $(if $(and $(findstring eigen,$(1)),\ $(findstring gemm,$(2))),\ $(STR_EIG) $(EIG_DEF),\ - $(STR_VEN) $(BLA_DEF))))) + $(if $(findstring eigen,$(1)),\ + $(STR_EIG) $(BLA_DEF),\ + $(STR_VEN) $(BLA_DEF)))))) # Rules for BLIS and BLAS libraries. From ee44719d435e41f5c68cf6724e4fd29475c5a18b Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Wed, 27 Mar 2019 16:04:48 -0500 Subject: [PATCH 039/109] Added ability to plot with Eigen in test/3/matlab. Details: - Updated matlab scripts in test/3/matlab to optionally plot/display Eigen performance curves. Whether Eigen is plotted is determined by a new boolean function parameter, with_eigen. - Updated runme.m scratchpad to reflect the latest invocations of the plot_panel_4x5() function (with Eigen plotting enabled). --- test/3/matlab/plot_l3_perf.m | 75 +++++++++++++++++++--------------- test/3/matlab/plot_panel_4x5.m | 28 +++++++++++-- test/3/matlab/runme.m | 34 +++++++++++---- 3 files changed, 91 insertions(+), 46 deletions(-) diff --git a/test/3/matlab/plot_l3_perf.m b/test/3/matlab/plot_l3_perf.m index 3942d2e59..bdc372814 100644 --- a/test/3/matlab/plot_l3_perf.m +++ b/test/3/matlab/plot_l3_perf.m @@ -1,9 +1,11 @@ function r_val = plot_l3_perf( opname, ... data_blis, ... data_open, ... + data_eige, ... data_vend, vend_str, ... nth, ... rows, cols, ... + with_eigen, ... cfreq, ... dfps, ... theid ) @@ -16,6 +18,7 @@ end % Set line properties. color_blis = 'k'; lines_blis = '-'; markr_blis = ''; color_open = 'r'; lines_open = '--'; markr_open = 'o'; +color_eige = 'm'; lines_eige = '-.'; markr_eige = 'x'; color_vend = 'b'; lines_vend = '-.'; markr_vend = '.'; % Compute the peak performance in terms of the number of double flops @@ -48,6 +51,7 @@ titlename = sprintf( titlename, title_opname ); % Set the legend strings. blis_legend = sprintf( 'BLIS' ); open_legend = sprintf( 'OpenBLAS' ); +eige_legend = sprintf( 'Eigen' ); %vend_legend = sprintf( 'MKL' ); %vend_legend = sprintf( 'ARMPL' ); vend_legend = vend_str; @@ -96,6 +100,15 @@ blis_ln = line( x_axis( :, 1 ), data_blis( :, flopscol ) / nth, ... open_ln = line( x_axis( :, 1 ), data_open( :, flopscol ) / nth, ... 'Color',color_open, 'LineStyle',lines_open, ... 'LineWidth',linesize ); +if data_eige(1,1) ~= -1 +eige_ln = line( x_axis( :, 1 ), data_eige( :, flopscol ) / nth, ... + 'Color',color_eige, 'LineStyle',lines_eige, ... + 'LineWidth',linesize ); +else +eige_ln = line( nan, nan, ... + 'Color',color_eige, 'LineStyle',lines_eige, ... + 'LineWidth',linesize ); +end vend_ln = line( x_axis( :, 1 ), data_vend( :, flopscol ) / nth, ... 'Color',color_vend, 'LineStyle',lines_vend, ... 'LineWidth',linesize ); @@ -121,45 +134,41 @@ end if rows == 4 && cols == 5 if nth == 1 && theid == 3 - leg = legend( ... - [ ... - blis_ln ... - open_ln ... - vend_ln ... - ], ... - blis_legend, ... - open_legend, ... - vend_legend, ... - 'Location', legend_loc ); - set( leg,'Box','off' ); - set( leg,'Color','none' ); - set( leg,'FontSize',fontsize-3 ); - set( leg,'Units','inches' ); - set( leg,'Position',[11.20 12.75 0.7 0.3 ] ); % (0,2br) + if with_eigen == 1 + leg = legend( [ blis_ln open_ln eige_ln vend_ln ], ... + blis_legend, open_legend, eige_legend, vend_legend, ... + 'Location', legend_loc ); + else + leg = legend( [ blis_ln open_ln vend_ln ], ... + blis_legend, open_legend, vend_legend, ... + 'Location', legend_loc ); + end + set( leg,'Box','off','Color','none','Units','inches','FontSize',fontsize-3 ); + %set( leg,'Position',[11.20 12.81 0.7 0.3 ] ); % (0,2br) + set( leg,'Position',[ 4.20 12.81 0.7 0.3 ] ); % (0,0br) elseif nth > 1 && theid == 4 - leg = legend( ... - [ ... - blis_ln ... - open_ln ... - vend_ln ... - ], ... - blis_legend, ... - open_legend, ... - vend_legend, ... - 'Location', legend_loc ); - set( leg,'Box','off' ); - set( leg,'Color','none' ); - set( leg,'FontSize',fontsize-3 ); - set( leg,'Units','inches' ); - %set( leg,'Position',[7.70 12.75 0.7 0.3 ] ); % (0,1br) - set( leg,'Position',[10.47 14.28 0.7 0.3 ] ); % (0,2tl) + if with_eigen == 1 + leg = legend( [ blis_ln open_ln eige_ln vend_ln ], ... + blis_legend, open_legend, eige_legend, vend_legend, ... + 'Location', legend_loc ); + else + leg = legend( [ blis_ln open_ln vend_ln ], ... + blis_legend, open_legend, vend_legend, ... + 'Location', legend_loc ); + end + set( leg,'Box','off','Color','none','Units','inches','FontSize',fontsize-3 ); + %set( leg,'Position',[7.70 12.81 0.7 0.3 ] ); % (0,1br) + set( leg,'Position',[10.47 14.17 0.7 0.3 ] ); % (0,2tl) + end +end + %set( leg,'Position',[ 4.20 12.75 0.7 0.3 ] ); % (0,0br) + %set( leg,'Position',[ 7.70 12.75 0.7 0.3 ] ); % (0,1br) + %set( leg,'Position',[10.47 14.28 0.7 0.3 ] ); % (0,2tl) %set( leg,'Position',[11.20 12.75 0.7 0.3 ] ); % (0,2br) %set( leg,'Position',[13.95 14.28 0.7 0.3 ] ); % (0,3tl) %set( leg,'Position',[14.70 12.75 0.7 0.3 ] ); % (0,3br) %set( leg,'Position',[17.45 14.28 0.7 0.3 ] ); % (0,4tl) %set( leg,'Position',[18.22 12.75 0.7 0.3 ] ); % (0,4br) - end -end set( ax1,'FontSize',fontsize ); set( ax1,'TitleFontSizeMultiplier',1.0 ); % default is 1.1. diff --git a/test/3/matlab/plot_panel_4x5.m b/test/3/matlab/plot_panel_4x5.m index c7e97434c..a5fc0b1c8 100644 --- a/test/3/matlab/plot_panel_4x5.m +++ b/test/3/matlab/plot_panel_4x5.m @@ -4,7 +4,8 @@ function r_val = plot_panel_4x5( cfreq, ... thr_str, ... dirpath, ... arch_str, ... - vend_str ) + vend_str, ... + with_eigen ) %cfreq = 1.8; %dflopspercycle = 32; @@ -13,6 +14,7 @@ function r_val = plot_panel_4x5( cfreq, ... % results. filetemp_blis = '%s/output_%s_%s_asm_blis.m'; filetemp_open = '%s/output_%s_%s_openblas.m'; +filetemp_eige = '%s/output_%s_%s_eigen.m'; filetemp_vend = '%s/output_%s_%s_vendor.m'; % Create a variable name "template" for the variables contained in the @@ -40,8 +42,8 @@ if 1 == 1 % matlab set(gcf,'PaperPosition', [0 0 11 15.0]); set(gcf,'PaperPositionMode','manual'); else % octave 4.x - set(gcf,'PaperSize', [15 19.0]); - set(gcf,'PaperPositionMode','auto'); + set(gcf,'PaperSize', [15 19.0]); + set(gcf,'PaperPositionMode','auto'); end set(gcf,'PaperOrientation','landscape'); @@ -58,7 +60,7 @@ for opi = 1:n_opnames % Construct filenames for the data files from templates. file_blis = sprintf( filetemp_blis, dirpath, thr_str, opname ); file_open = sprintf( filetemp_open, dirpath, thr_str, opname ); - file_vend = sprintf( filetemp_vend, dirpath, thr_str, opname ); + file_vend = sprintf( filetemp_vend, dirpath, thr_str, opname ); % Load the data files. %str = sprintf( ' Loading %s', file_blis ); disp(str); @@ -79,20 +81,38 @@ for opi = 1:n_opnames data_open = eval( var_open ); % e.g. data_st_sgemm_openblas( :, : ); data_vend = eval( var_vend ); % e.g. data_st_sgemm_vendor( :, : ); + % Only read Eigen data in select cases. + if with_eigen == 1 + opname_u = opname; opname_u(1) = '_'; + if nth == 1 || strcmp( opname_u, '_gemm' ) + file_eige = sprintf( filetemp_eige, dirpath, thr_str, opname ); + run( file_eige ) + var_eige = sprintf( vartemp, thr_str, opname, 'eigen' ); + data_eige = eval( var_eige ); % e.g. data_st_sgemm_eigen( :, : ); + else + data_eige(1,1) = -1; + end + else + data_eige(1,1) = -1; + end + % Plot one result in an m x n grid of plots, via the subplot() % function. plot_l3_perf( opname, ... data_blis, ... data_open, ... + data_eige, ... data_vend, vend_str, ... nth, ... 4, 5, ... + with_eigen, ... cfreq, ... dflopspercycle, ... opi ); end + % Construct the name of the file to which we will output the graph. outfile = sprintf( 'l3_perf_%s_nt%d.pdf', arch_str, nth ); diff --git a/test/3/matlab/runme.m b/test/3/matlab/runme.m index 747989b76..973e3c4bc 100644 --- a/test/3/matlab/runme.m +++ b/test/3/matlab/runme.m @@ -4,16 +4,32 @@ plot_panel_4x5(2.20,8,28,'1s','../results/tx2/20190205/jc4ic7','tx2_jc4ic7','ARM plot_panel_4x5(2.20,8,56,'2s','../results/tx2/20190205/jc8ic7','tx2_jc8ic7','ARMPL'); close; clear all; % skx -plot_panel_4x5(2.00,32,1, 'st','../results/skx/20190306/st', 'skx', 'MKL'); close; clear all; -plot_panel_4x5(2.00,32,26,'1s','../results/skx/20190306/jc2ic13','skx_jc2ic13','MKL'); close; clear all; -plot_panel_4x5(2.00,32,52,'2s','../results/skx/20190306/jc4ic13','skx_jc4ic13','MKL'); close; clear all; +% pre-eigen: +%plot_panel_4x5(2.00,32,1, 'st','../results/skx/20190306/st', 'skx', 'MKL'); close; clear all; +%plot_panel_4x5(2.00,32,26,'1s','../results/skx/20190306/jc2ic13','skx_jc2ic13','MKL'); close; clear all; +%plot_panel_4x5(2.00,32,52,'2s','../results/skx/20190306/jc4ic13','skx_jc4ic13','MKL'); close; clear all; +% with eigen: +plot_panel_4x5(2.00,32,1, 'st','../results/skx/merged20190306_0326/st', 'skx', 'MKL',1); close; clear all; +plot_panel_4x5(2.00,32,26,'1s','../results/skx/merged20190306_0326/jc2ic13','skx_jc2ic13','MKL',1); close; clear all; +plot_panel_4x5(2.00,32,52,'2s','../results/skx/merged20190306_0326/jc4ic13','skx_jc4ic13','MKL',1); close; clear all; % has -plot_panel_4x5(3.25,16,1, 'st','../results/has/20190206/st', 'has', 'MKL'); close; clear all; -plot_panel_4x5(3.00,16,12,'1s','../results/has/20190206/jc2ic3jr2','has_jc2ic3jr2','MKL'); close; clear all; -plot_panel_4x5(3.00,16,24,'2s','../results/has/20190206/jc4ic3jr2','has_jc4ic3jr2','MKL'); close; clear all; +% pre-eigen: +%plot_panel_4x5(3.25,16,1, 'st','../results/has/20190206/st', 'has', 'MKL',1); close; clear all; +%plot_panel_4x5(3.00,16,12,'1s','../results/has/20190206/jc2ic3jr2','has_jc2ic3jr2','MKL',1); close; clear all; +%plot_panel_4x5(3.00,16,24,'2s','../results/has/20190206/jc4ic3jr2','has_jc4ic3jr2','MKL',1); close; clear all; +% with eigen: +plot_panel_4x5(3.25,16,1, 'st','../results/has/merged20190206_0326/st', 'has', 'MKL',1); close; clear all; +plot_panel_4x5(3.00,16,12,'1s','../results/has/merged20190206_0326/jc2ic3jr2','has_jc2ic3jr2','MKL',1); close; clear all; +plot_panel_4x5(3.00,16,24,'2s','../results/has/merged20190206_0326/jc4ic3jr2','has_jc4ic3jr2','MKL',1); close; clear all; % epyc -plot_panel_4x5(3.00,8,1, 'st','../results/epyc/merged201903_0619/st','epyc', 'MKL'); close; clear all; -plot_panel_4x5(2.55,8,32,'1s','../results/epyc/merged201903_0619/jc1ic8jr4','epyc_jc1ic8jr4','MKL'); close; clear all; -plot_panel_4x5(2.55,8,64,'2s','../results/epyc/merged201903_0619/jc2ic8jr4','epyc_jc2ic8jr4','MKL'); close; clear all; +% pre-eigen: +%plot_panel_4x5(3.00,8,1, 'st','../results/epyc/merged201903_0619/st','epyc', 'MKL'); close; clear all; +%plot_panel_4x5(2.55,8,32,'1s','../results/epyc/merged201903_0619/jc1ic8jr4','epyc_jc1ic8jr4','MKL'); close; clear all; +%plot_panel_4x5(2.55,8,64,'2s','../results/epyc/merged201903_0619/jc2ic8jr4','epyc_jc2ic8jr4','MKL'); close; clear all; +% with eigen: +plot_panel_4x5(3.00,8,1, 'st','../results/epyc/merged20190306_0319_0326/st', 'epyc', 'MKL',1); close; clear all; +plot_panel_4x5(2.55,8,32,'1s','../results/epyc/merged20190306_0319_0326/jc1ic8jr4','epyc_jc1ic8jr4','MKL',1); close; clear all; +plot_panel_4x5(2.55,8,64,'2s','../results/epyc/merged20190306_0319_0326/jc2ic8jr4','epyc_jc2ic8jr4','MKL',1); close; clear all; + From 3e94a0ffd2a84373de4bbb3d3fe25c94f40bbeca Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Wed, 27 Mar 2019 16:29:51 -0500 Subject: [PATCH 040/109] Added Eigen results to performance graphs. Details: - Updated the Haswell, SkylakeX, and Epyc performance graphs in docs/graphs to report on Eigen implementations, where applicable. Specifically, Eigen implements all level-3 operations sequentially, however, of those operations it only provides multithreaded gemm. Thus, mt results for symm/hemm, syrk/herk, trmm, and trsm are omitted. Thanks to Sameer Agarwal for his help configuring and using Eigen. - Updated docs/Performance.md to note the new implementation tested. - CREDITS file update. --- CREDITS | 1 + docs/Performance.md | 21 ++++++++++++++++++++ docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.pdf | Bin 33725 -> 35304 bytes docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.png | Bin 104435 -> 109980 bytes docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.pdf | Bin 34157 -> 35818 bytes docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.png | Bin 107203 -> 117134 bytes docs/graphs/l3_perf_epyc_nt1.pdf | Bin 27269 -> 32633 bytes docs/graphs/l3_perf_epyc_nt1.png | Bin 67035 -> 77571 bytes docs/graphs/l3_perf_has_jc2ic3jr2_nt12.pdf | Bin 32775 -> 34401 bytes docs/graphs/l3_perf_has_jc2ic3jr2_nt12.png | Bin 92749 -> 97432 bytes docs/graphs/l3_perf_has_jc4ic3jr2_nt24.pdf | Bin 33508 -> 35171 bytes docs/graphs/l3_perf_has_jc4ic3jr2_nt24.png | Bin 91932 -> 99251 bytes docs/graphs/l3_perf_has_nt1.pdf | Bin 28680 -> 36296 bytes docs/graphs/l3_perf_has_nt1.png | Bin 70994 -> 82684 bytes docs/graphs/l3_perf_skx_jc2ic13_nt26.pdf | Bin 33054 -> 35104 bytes docs/graphs/l3_perf_skx_jc2ic13_nt26.png | Bin 100176 -> 104341 bytes docs/graphs/l3_perf_skx_jc4ic13_nt52.pdf | Bin 33294 -> 35414 bytes docs/graphs/l3_perf_skx_jc4ic13_nt52.png | Bin 96292 -> 101900 bytes docs/graphs/l3_perf_skx_nt1.pdf | Bin 29136 -> 36581 bytes docs/graphs/l3_perf_skx_nt1.png | Bin 76368 -> 84908 bytes docs/graphs/l3_perf_tx2_jc4ic7_nt28.png | Bin 94620 -> 94620 bytes docs/graphs/l3_perf_tx2_jc8ic7_nt56.png | Bin 102875 -> 102875 bytes docs/graphs/l3_perf_tx2_nt1.png | Bin 71627 -> 71627 bytes 23 files changed, 22 insertions(+) diff --git a/CREDITS b/CREDITS index 73a90cc1b..634aced15 100644 --- a/CREDITS +++ b/CREDITS @@ -9,6 +9,7 @@ The BLIS framework was primarily authored by but many others have contributed code and feedback, including + Sameer Agarwal @sandwichmaker (Google) Murtaza Ali (Texas Instruments) Sajid Ali @s-sajid-ali (Northwestern University) Erling Andersen @erling-d-andersen diff --git a/docs/Performance.md b/docs/Performance.md index 28d3c2244..37d6c0267 100644 --- a/docs/Performance.md +++ b/docs/Performance.md @@ -194,6 +194,13 @@ size of interest so that we can better assist you. * Requested threading via `export OPENBLAS_NUM_THREADS=1` (single-threaded) * Requested threading via `export OPENBLAS_NUM_THREADS=26` (multithreaded, 26 cores) * Requested threading via `export OPENBLAS_NUM_THREADS=52` (multithreaded, 52 cores) + * Eigen 3.3.7 + * Prior to compilation, modified top-level `CMakeLists.txt` to ensure that `-march=native` was added to `CXX_FLAGS` variable (h/t Sameer Agarwal). + * configured and built BLAS library via `mkdir build; cd build; cmake ..; make blas` + * Requested threading via `export OMP_NUM_THREADS=1` (single-threaded) + * Requested threading via `export OMP_NUM_THREADS=26` (multithreaded, 26 cores) + * Requested threading via `export OMP_NUM_THREADS=52` (multithreaded, 52 cores) + * **NOTE**: This version of Eigen does not provide multithreaded implementations of `symm`/`hemm`, `syrk`/`herk`, `trmm`, or `trsm`, and therefore those curves are omitted from the multithreaded graphs. * MKL 2019 update 1 * Requested threading via `export MKL_NUM_THREADS=1` (single-threaded) * Requested threading via `export MKL_NUM_THREADS=26` (multithreaded, 26 cores) @@ -251,6 +258,13 @@ size of interest so that we can better assist you. * Requested threading via `export OPENBLAS_NUM_THREADS=1` (single-threaded) * Requested threading via `export OPENBLAS_NUM_THREADS=12` (multithreaded, 12 cores) * Requested threading via `export OPENBLAS_NUM_THREADS=24` (multithreaded, 24 cores) + * Eigen 3.3.7 + * Prior to compilation, modified top-level `CMakeLists.txt` to ensure that `-march=native` was added to `CXX_FLAGS` variable (h/t Sameer Agarwal). + * configured and built BLAS library via `mkdir build; cd build; cmake ..; make blas` + * Requested threading via `export OMP_NUM_THREADS=1` (single-threaded) + * Requested threading via `export OMP_NUM_THREADS=12` (multithreaded, 12 cores) + * Requested threading via `export OMP_NUM_THREADS=24` (multithreaded, 24 cores) + * **NOTE**: This version of Eigen does not provide multithreaded implementations of `symm`/`hemm`, `syrk`/`herk`, `trmm`, or `trsm`, and therefore those curves are omitted from the multithreaded graphs. * MKL 2018 update 2 * Requested threading via `export MKL_NUM_THREADS=1` (single-threaded) * Requested threading via `export MKL_NUM_THREADS=12` (multithreaded, 12 cores) @@ -309,6 +323,13 @@ size of interest so that we can better assist you. * Requested threading via `export OPENBLAS_NUM_THREADS=1` (single-threaded) * Requested threading via `export OPENBLAS_NUM_THREADS=32` (multithreaded, 32 cores) * Requested threading via `export OPENBLAS_NUM_THREADS=64` (multithreaded, 64 cores) + * Eigen 3.3.7 + * Prior to compilation, modified top-level `CMakeLists.txt` to ensure that `-march=native` was added to `CXX_FLAGS` variable (h/t Sameer Agarwal). + * configured and built BLAS library via `mkdir build; cd build; cmake ..; make blas` + * Requested threading via `export OMP_NUM_THREADS=1` (single-threaded) + * Requested threading via `export OMP_NUM_THREADS=32` (multithreaded, 32 cores) + * Requested threading via `export OMP_NUM_THREADS=64` (multithreaded, 64 cores) + * **NOTE**: This version of Eigen does not provide multithreaded implementations of `symm`/`hemm`, `syrk`/`herk`, `trmm`, or `trsm`, and therefore those curves are omitted from the multithreaded graphs. * MKL 2019 update 1 * Requested threading via `export MKL_NUM_THREADS=1` (single-threaded) * Requested threading via `export MKL_NUM_THREADS=32` (multithreaded, 32 cores) diff --git a/docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.pdf b/docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.pdf index d60329805d0cb3ba422093a6814ee5918dccc7db..6a8c3a5ef24c132b299dbec87359f98712ff9b97 100644 GIT binary patch delta 34728 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 delta 33091 zcmagFWl&tt6E+$`fZz$i36Ma5Ad9m&1PBn^-Q5>=StPjI;_mLgxVzip?(Pz}{QmE) zy6?C9rR%AguBkIq=R7@6cc1;(_pO2Nqnti6aWb(o0vXw(y=1^r<5o@4X`JIawt*); z5%>R?_I*%Ikxw9Uvk-3*e3C&LoMxI5SkZgJQ=K&nggZ*|0rsoI)*{a+vqp!r4PKMj z5dRYWd}vs1$+ntj{O5Jsp(5xo8pz4j*Hah?Z)e>?WoygYxI9b$t* z$MXV0Dt0Hd0dot2STWBlq`2B%IM1|O^X<XrYN?;| zyUuJkv_Gt@y>_30|Mi2PHe^KOuiFl&+%t_CQYsh3A7i*~v)bn5FBcJ_mlAdIE{@xu zA7s|RuMeJKY2K%zi)*q}4no0Vw|)EMXJ2+vlznz}^0MjTZYlnDc-lMrh;ptmzficb zW=Z&2EM&wVRsv#~pAGfE&Un|-{UCIIVwNZ)V*bU4#<5<0n|L^*t)Jc2)ijAOE|Ulh z`Riw9aU1MJ8S{igT_sz2@#1s{dphw-og?>M{=;=MEi%GG=dlF*YWAIUy)w!P5+M1% zI)+kYBmq`AC7cGw64Ct(c2|k6#b^)yo*;~(0S32c{gwz!-Dy-X?eDAg_&7a>$0ksM ziW5RB!H&DjZzCxz;Cf;7hXJ@c5TEX9Orr)Z*Z|lBarCmK4j>oqbzhp&= z8ETl8H6y*E&CIZ;%|UA)NH&b*3tlMBVF-=Q2)h?+OX~{fZtlU0%pgSn^U_n5^`CRbH|iwXgK@ajELI~hA@bu)%DiRo0S|<`QZ3x1;YSwc zA0$&cq&sP-03G;)auLXIHI(!2Y@!q;488qB0iryaIboM@4F?eliH@uaHdjJQsVLIYe-ahPTOme9*c&?8WcTtfzG<3*uK`{3 z5s56s)`(l;ZGRsKh!CT(jgGm?Z9~YQ6414;c^})s&XEewBp9s-g{TQhA4fask#i`) zhdlhIuR8SN@O?(nT$Z_f0#fhwck>sdW&IlQ!wWrm{-Epn7@*IFa~Ju$-Alb|JI%#N zO;yFNyei}_f=Bu|0YUr#D4L8`J);qk=a3Ee>Lwtm{5rr~Xxw`)c6p)8b{NmtaO9mS z;P~Y$*u*mG(C09$HTH<&26c;Yma~luH|My|nox1?FS7%m6(&*fMPmmX?-(^?7X7@( zF1gw=4NyW$7@>XgYq9eXx9Vw#!@b9Eb{VbZt0rkAOKIP{V6O!Rd}+We{?}hZzxh*3 zBR+g+bFp2n~8*Y>~851j#{CiQTxu zpABe%kF_6k@lELH=aQa-(NCl@CINN2jurf00dvdm^dl8ug`rt&xUH-5_N{ekbJgEA zDR6vp^Bm)>0!bD6I|$=H;4>kp^XY~o@KTQSr)~*YKm`>UF^8Lc*tm!tdjia7CZ`B> zB*4`0J5xFVb46`j(m(Ss>kdfCG^ zQGN`ol#D+WpJp~7cHKQrPgw1L87{tT_kqWdSNsS@?Z{2#PFo-H{KVZM#iYY1XB?qHT77=7D>D{%yjJ2oCcNX?6+Ut{73oWTw`kyW1z+!?it1e_fg{u-3(7$L6QN6W=C(V#b1 zZR^|Uy+m#pEoco8h21bi;L)u;(6=}sRYvvatI44CaC&KuKMiD~HP^;>IXWL_{8oQ< zA2%i#2w5xU*`=sy@$G9Ndj?L6@!Y~(Y%Pg*Z2?HFlhX)+vVnkU0qd{1U%<{1P5yqX zdF?cPq9dH7*X7?FIzJW`eZ3apt>W#F$+eki(MNdSUb(*GxB8W9{nN`8d+WvLh))ap zJ2C`$)`JPSqk6W8>-0h_udG}}{4@_<*TC!;_u9}x@=psT;xnVpQ)5cig;@IPe(;87YMD&Scm+`9Uee}N$5fOK$CC%YJwW8%ZtYZnpfNHOT` zcbPXs{bqLmXTGofxbPAd$or0N0!}RzdSd;VQA=&78alsi2@pdQcsyvsxDoEj)3W|heKWt8%&bcC;i2^PG_K55PzImGe0 z3I0V$F9&ob&&<}|dX_rR%?#(3L*pnDW}^KMCN^>`xWbrnB?+AMT@Z#KN|tBA%CWAB z7^!CzyEI&Qz+49Q$RQVn@`v9VWpQ;X$)ZN;*QVYm+4s4B*HT4|2n}r8WVGqXsj0Ux z$~fWtT80)GDRQ#7;x@Jqdp|{8=4XNP!^DA~ndRsD(k669-RD#BcbVRsGPFhvWeqD0 zkU*jSzW*(RQko4H>YZfDqZTk0WB`!f&eqBI%}Av(s^!TVmow4lRI*w^hRb2w#r~}( zF&k8PF?)eDqm``E+qgwdLHSD=t*VINbG*sRHoYSQ8+rCEp7do?|73Z7IGCHHqD&dh zgHtvaq^MX*-RhR=o$I?&SctEMAD0#Wawa02SBLOg8w3a7&dK(rgTpK((=;jw=f<#~ ziuZ1gIJ07=5uQorK8k6D$hrP1Ip%&4Yac8mKq^e``QtZvIdr1UEGIRx^C^^-VcNV4 zguF6*#|T?w5*Px0kGEe&2VYT*bL2ppLV=;h+o?Ufi8*rey+G%qWwkgjDwNL}{itlc zR1CtfM!(zNP%borA{1eGMFfuW>^g-tI;L=Dt7QQKW0_GUo7h<3=>$qx({z7S?>Bgi zbKYX#=X48Xq$assD{jj)a=2|o!M<$)gARd=ZHw@h$_p&R7BbXPa2YpmUIAzs<13|$ z4t?q}$R!xA=69(KWNCkU#-gcIIbf;Q+7E`2ILzGu&w$1emNhek0ZN`Wu++8ugVgBm z8GL=vg$yc1s6+6uw(0cNh?5IU4$2$%PFY6&Ed@Yoe8|`AeL6sDsB)H4MX3abBQ>zx z86@(Q#rZ82>4$oQZ)XL7qgKy|Kb2 z;7+HQOyEu#ozM`M@12mLr{pLB2+kBSzrt*%2Ypk-RZ9@S=)*{jlQ9wh-V?@P*ccr2 z^Meww^g6@Sg(xIQCRmpHWPefV8ly)Mg0`r5J6G~v0S&Id&leUHn;P^Q(_F(txl=ss zxa})uG;LQ%m-`w!fH}H9`}~$PLui!(OC;@y4A3hAEWkXCX=Hg8VK%NSkfj;LiA@E9XyYCG zP~~460Su(Z!A~LH%mN>l7m)P&)skPa8~7OtLHqe!3;k(j@GA)1bhSUw{}4DBD5y^s zd0F}Znl5$;-CAc2`iY^(Mn1qv;bRC9_l<9YT)z@nKnQfK==wCfGQqeF^59L}?SL55 z`>Aee@S!P)ed?-d#aL}msq6bGf#uchhp`U}VrffO9+;><8_>-9f!2>WUs++l@;ZSs zo8Hz#r#---ZJHEos``tReZ=dOWyQJ$W6>Oz)~{ed9k=zT*qa=cOUgXlQXYyyB`dJR z$=K01U6GN7ZR)gWTdY5)v3GcZaq7+$%cSJ|`Tql7vXin*%+ICtX`C{U zY5%6aC;g&uB9xA$aH8;LM*nAo(myG~F2&ADW4jz98`o5df(CVRBzxd9 zUumL*7}Qb9txsI^0tO^4WRJfFVYLeTWPi13H<4v88)^7I#tnt;Uh(jlOOUAS^mirx z{8%90&$}ldrbJ>eI{Q~HDi^Jt6LXkTe)V^B;(PJQxwK^+Ko+uoDh&=lr&Q{ub0C}C zc7c4IZD5;fq5O!xd-tFUXehFV8PEt$tXw#f7)}A64&dA!lqn_yPjer;#kfubp zSbHzWzQN!*9OwZ(@IgFhkXKs`a&9abBOu@U79zeE8O&(6AG|%w?&5?7A=pLN8`wSD2oJh{#*YeG)rE|lo zkhwxDZXTW;J!->f;K>JR8x)HvDzlma=dg3e(i=9jX^ggjrVR<49Azn3ttMh9-j+d|k*UlKLP(q6*Mqh%={mo4qo3`T@FB6=!WIe~d7k4FA{R+du~K}ONhE%8#E2P!XR;1|D6 zAYMWg?dz(O<#0Ck_K?DI)oAq)dwO8isBVfA3S)ae>RsQ@Na}-kIb5)Urj<&pOk`an z?nbG=+SQK!s!Mz@Xc|7AZ$+%<st#zl;3?hu-fL$^glgEQ*fww5ZN-B* zTx?;W#kP>o@`b~`NmF~l*xCD1wXe&^ifdmFz2nFXseu;e4{O54u*?a%;>KoD*RV`@ z$7TGD_ZEI>v*+*FSG+%T^-U>~bxhd3K2|HwVy_yO4hgb3!HRfG!EP139Qcx{=mx8zKk~)E4+vQZ8?#GV$d(1!^Zbw4Ptsen< zxnQrsF~lVwINi$id)tHoo0OaG5Q6SHhUw+qtBH^4pn?(nJ zh(z%rWK*wWlzH5pz?RO3a9MzC_xvT;rZY-odA>ib&u`i1?$<*l7sOl$BvPRt=gXyC zLfN2-rJj0|D}~GN|2<^>lu!6nL)^+PLs;+^m$L-2muk{E6)ykJe6Ra!s<1>AZg885 zl>0Ul^htMT=1rT`jig`F7l254wGpNb4;-Hcx9p0|Diu4tE&+BlTUB~Hx(n7!|M;m3 znC0>3dXlT$Jj9zl)upwr9DO&U_bWlt8G(Bx=5N|86Sge~k*gbtUCT5V!znE`DmjN1 zQz%syL*6u4F(gbU$2^IUhoKN$%!Gm6DkK+A1@ar`c_f~!$ir~DUgUy)f3BP9#NgKm zWbbLmEls*GDL$7frs3N}*n+TZ;qXzEfMi_7RaQu@;wsHaui~oBGcNzuhIIC-%5u=& zR(yCwSE4O>ed)IMDh~Hb6Hzl7DdI3qSuQW7OojDCXEGfgb8#8a_Iv|Jw?$N&$18b! zy{LE5wOUj&nl-4sCoAZI#40NjZ}H|aFVhnx8pJ7O5S#?>%_^sUR_3Pq0-sd%(@Za3 zyXw^GqdC5)gzBgRoq(rrq6%SP*Ck2TU?r7_DEY|O!K$_fBBGpZXfdg1c@m(2v*2)@W=?(Q6%jC6(;%*Ix&89xv7*%V8t zmsRYFm-9we7fW6jZS7p70%nhSO6g0egeI9K%b?KH7>M#TEer0Ri|dLKpzIRE)s`(3 zEK_iyN0QFD$u+k8LL;HBE;Thb(}OkXiDMQ|5~JvBw0*N)TMHhVnE9^dlg1t2ZI**a zjJ-CdA9k3kIQ=KGT{o_u>uWFo<98^sz$upZ zT9}-o(RN(M#_j)Jg4|F;_7*#@SZ^{ zKP8658S2G$<3EGpiQkUnU^1`Vz$@~XM_T!keaB@pAxTuLi>!kj<|*8;d5osr0W_hw z^g5m7n6)tyPBE=|YMNw#!_W4bVs~sxxyYY21o;x>cVcrtt#V8cDpq$Of}gnB0n@~L z5u2aYr%ru4DO`E|6`))Z_ zaWy4lH$<6;nWAk#m=r9I@Ky(j6kMqEv!e|8Fo8TE-k)2nj|+bUa#pa9gdOa)}l@UZDFfg)zLcw)F13B?Hm12 z=+RGk!I>52Dm`AvHwg9?Fb?WmqJ2;#OV8ch+6mizb* z&Wg}mzmd3~uJ&LO+q@@n45^lgQY-rz|DUf@>^E?|YC!K_qb#X;>b?kKH-CR1-oZXW z_c-Z9zJ&OmR+yV$O6O}69x44TE^ML5WMuU;_YP32hUWw*4R|hrrNU@Z}MphXN-wQ(sS<&36r265Cg}gM@#Gr5>Scv9_#meiK6nF1PvHztscKNq zhR_(U{T7d*>s$t(NJn;WewzOi`(Qb2>G1wG!es;NsGGUvT>SmN?#JIw8$NS2>?F5x zybVi9ceUo+MZ^xO))H1Q!lWo&OG~Ifmzj6gKmRq9bvddKUO!V6t*;l5PNXR*=RdBR>pcEaUC4#xF9w7Km z4qwpVmxejZ7x+~z!mED$lnX`|3lqybv<3od{C3wBRam1G(qveEpMA~fw~sCrSz2o) z2?^$1(zCNn3U6vSMB4!x)nrB}QsW;ZK-wE! zoa6=eEmDdG{OQv!t^v!M16A>V=8=apiP*9{M(;6^n&l{C`NN`3Cc^W|^}$m59lP)= zXz}0AY@rT*r<9vK*HStw_<+$ zcM>bKH3yt`8oot+!`XbN@6RL20ZhXgBNERWR~c1pdrw>)mMi4r(JsdK4ClqKv$ZER z{j)B82v{dA`WmdXdi?G}6b>b#^GlH=?by0Y9!i}a*H`w~D*Y{1KH$&CJC6sk2_MWy zM(pv-fDG-q67SteWDI#OMXben_#&l3t3NPFI~yJ$kv0|30LQ&T)l(u{-fK{-exKjn zs_#$^cHXaZZD-IuIuAgFcdLD(C$O-$jl}5sd_IdIcy;WICRo%1{Afk7%J{M1R}NxU zSq~9n)~_)PL4`o;W;U>_&9*T;)z`-<`@ztL0v<;TUH1`%2E=27^kz2QjLV)fAMqAh zaSqyo&2~GhZwC_aU{`wX${e4l3uw*X)ITGzzFG&rCx3#pv@gVQhhK_`mL?A6Owp1? z40g<~^fb-rpL%^xJ&2t2&hSq~(QsevC^Lf#2H9K)b$+aqoD6`w3(8$28zkaOX8Xj^ zg=4ZJtbva1-swHTi+jK41qsOAn?8dj<6?aiCQcd5i9-mNr==)U`h==|xgmrBzc95V`f^rprtzt0L< zfO61xnud>tz-ZT>LU_F^61l3#v=QBC;psWUra)*v6MQ>(&LZop|20-?U)8W1vWOKy;WYs2d_Bx%ddU+n?ab|ZnfsLRIMc?q1^{73g6{lU=bKL<$p_n zb>hY~7J9v4lzv*`rf_TEq}6Fz#z(0#M>WS*!zqnBlx1-`h}`RJaMW>2 zym#Mlt?>d@LUSmz7P$^&d&UR|Qh2FaQGBGv(>;uuub`$gd*3Kk@E1L5{qW*8zjixZ zoH%U8a|@#Fms#We*nw>M%N#ig3{4pj6=1Fxt2*486^Ni;VA?{vuheqOp zxG~|udlT@pwc|-qd`9_81mkF^BLcw(*Ppitte-==Jebo%zPTNd_nA;;^dY-W7#lzf z2K^!&Zs7Z-qN zTE}t$cW#SOZB@ZjEij$%=|W5Q_van5CK=PYTmOXf|BbzXB8uuPf8VtZI~z$&_&K-@ ze~DGayf$A79Jm|#8^648|K*Z-&{#7J{W7fVAp2-uwmu3E?j1a3pp#vCmb|!w<8sLY z$J&4+^wlJOK&6 z#5O`{7&1uI7*RRpM2WBQ(oYBN>S-S=F^)4u!dnt@GSlr+xKrfixqD6|RtVdP)LS4k zCYoqVt&WR1XYG0%3X1N+^K*`$Z!YXJX+I1;92S|lhDA8pwV`~{2$_F0;}{RxjeuJO zyK`}l(;|J7Adyo8>`iVL2j*;egl{%2H!qtk{^G~3<2D%-d6YjNNM+=>5_5ahi#2}u z;AzI}wuu0T`Y0$mXD5sT*Hh#29-m$3y4&Xv&@b8|%>f~q#1lxYoYiaBkW%zs~0E8md#CkkgW>cISTmg=@Y4#3Fn9r%PX8{Gwli%|&O=SewT` zX>V(Fr1>O5(9qn+=0eghoj>$*0!O0rL?{uc=cwd6X(nF7%vW-m5>oHBt4+#B@K28q zZjT%i(gEji`v)T{Ny_Y=?;dYAdxJbiKcPO-<7Esx7U;u!j>jP5dKL++?J%2`yr>VN z9X#OBq3t{d!0~4EUXzu9D>L@eptf6Ae*d6`147^)0St-9zUM}V+fk~0rm)Hsz&|%U z$W_>vNk-(u!H2OH=XJf-fPf7i@VsU|fH0T{IN_WR>EI4KfS*v{K$2vFJt4a-erO!g zprhJ%70qQdm-_eaI&93ht|2T@hG?I_f_RCR@dWd?Ra|+QNOZKdiJ<#ry-+3i1@#G#(s|EOxhH4(`MEKOO__{EljZ> zu>*DXGwbrsB$b$R)IGIv5P@o!tv>`v27T`fN`z#&Uaq4kpF5{XnaZ?J?zQXQ#L!=k zP4W5J%99+rUCqJdb6K2Z@hNwuPOobZ9EVuZ25Zu~_@CG4tv3G+3E;GuSM8kWiH%V9 zQxYO4$|FvnLs>3sZooPon%kiCE#|9W6W;RIv8>kp^FO|ep&w<&)mGB0%RlmeXIYiRzSMMP; zX=r+Z&IjR7)@x+Eyw0momeyI6T)Nla(xsjMrAz-00GFIku0K5%e@9Lrlq%L`u^uzA z6eAk51q)Tp^X2|oof(SL?r&AOiF&Rf!AdFc$)unReIh~`x~1+GhHM0a#rJRcOQ@mZ z0&Ciq$d8LU{FLg$N^CU3tJ+FW@mt|0B(TE-9cnXICE-`pGqRJ9Xqc39gp_$*0Y7it zhV~F%!Lg!BUQa1&|Nikmzs!T58%SRqX2f(do(B1JzcPT@$^NO@&Y_QFFC3`5@tn5An8(}p?FXHv3e ze--~$%^j^Qsn#Exo5<8^PG)a9w4v>#aLlbj20(**4C3T3$5r4hS{7mEGaecFgnt?T zC$t(h&3v1g8tK!QAgwl-146dKs4CAv-E@rwc|H|9wX!mW-W@SZ0D2BL1}!r=`fAb| z893+X)aUBi3pSim*`ipX)h6;<{@xllilWg~(pO*IU> zLrz3?k&R|Xq}j%MkMV+U|CKwdFxNU-N(Q{qhJqb}qKGeKypn zY7ZH@5&}&a)G4BkB+Ere$rgni-q6ltuS9akBetS9!uI>^-h^Um7e3>Ljj1j9Uo%sh zJ)&W#j!<3EFMm1<)}SCbrtA32aCA|mF@a^JRKZ&^%9&^7FDWysl72scP$bP1EHhS# zBou{#1Qva=AY4KMx9c(4fwS-^_)QqD-`n`-gD*PXiSb5^E0Dqg?+^Il^9X!SI_(PB zmvAV!_;|zd0oIw!j>ik0zs2r2MZvVj3>eqngES&74NXn=!VY#68n*ao=`=KvK(qZ} zYqn`*lQ!&2n_N=^yhx=xb=&VHYevqK9fXXgK7y@W!Z-e0u3R%gjRnUW=iYT6^~u;cO;%&xf9Ns^?+%$c(e;i zgk6XPw;Sy#J)&bdW?MRzhY;rO6sUP zJTuc*fS11DvryH?vwmk8B*kD-r;nkJXRNFxk@p?g?YuXu7O>#&tn^HbIEU53NQbbh zjYH9el@h4ry{|2TUVR{bx(EI~M3z$hGcN}2OQ8%vKq(7+qX8zPK9zN?arHqjm(LM59mLC5=`@^B zOPZ1zLc*dhXror;2~syXyFkp^h@%DBBJ_sE4`0VTknPO+Y*N+~0 zvmR-zu8x&>#vWsW`oTMO^Pti2Ky?Q6Do$uCy~5k%rdiqhR3S?*%yF$0 zQ(;RdI}8i3@Klen+WIE%^Hi@PEvb~3hx%^bE#L9T-(E(BD;Xi>Xj)3lAt)*Dzt1V= z?Kge1^;GGxm$EEIpYhR`_}nxNMo*($8zM<6e9bQRZ{ISgM%vTcN24tnfGflRECGVK zi`&W}BIL)ur)}u_+u_fy^I=++F53u@%z^XF#8MboVJ^xASGZ-&IQhE#f#A)zYI0&10#IZ zrtp^QxN@73i;R+b674mSi?lLk6o>_Bg!-fwIoQZ^5n&*Zkd-+YM#o?dYRik935!ZT z2Ys!1KU{b$@(19+)iQoqL_`s9Hk9uKdCbo(#!E<(lZQXyauziNuG+WC0W8TXPg|9m zW68gB@|gQB+%&mPQ;}uR?SDi7&@nn>OQJT%4PYJ7JX*C^YaNYk>7Kq_nSL zXUr~zoH+JM-j=Sx%ugH9v)k%LND643JCl3Ti@2_9b28 zL1I&1I)XETQ9}5bFHxiZrMEjL%XOys6gRN}(3N_>D*Rj!IFfU|rA+^wd!ws!V1~4#ENQyF z>Az8+<((tWTV^*@KDhx4y?#*`D#CU*vr8x`Tp_7!W?q9J;Q3a`GMe|`tsKojJ2Lm_ z1Zotx=MgHgC7#VnDJk7?AhmGPJvWb-E&xJ~nz79n-n#sNRMC3u!%)I_!qsB~=w(xn zV@|QMXUa@R%3-SfFLdYw?=Ds=p%r+2^p+ZDz9WU<*O?s-bkRX?4_^Rrwfgd@D3#D9 zbYa9|5HFt|(xyI~;qVfzNs$0IOFwsGd{~HS^7Hc=xN!-zdz+v2}YIW)8k+sP70H z?JlNmN--*}z815($tmF18-gxfw3;uGj~9V8<)JE!uQq#` zy4G+W>^e-`VaYg0LLyt>r;Y5|tDG|{vO-7SiGSc%4~sJmyH?V07ayTLAhN=vmqe)h zZFOR+mU53W`cs92CfQLURTRXkytr@XpgJUxMbN9&S!imhf}0i--W(!Slu^GEb0z*r zIj(U^M9~m`4NwMc7QC8Ji)aDVVb9tf(**mj`brzsboiiJAY@a1)luj|O zO6X*I!WKNL-eOqnMR9G}0bck6uZch0d8yA#g*0&sR<3cec-gzwJ zMZibVe`Xc@Q;Y6~`jEc-ZI9&2%aU_6ifQ#TREJd4+lpqwO`>%F9OL`NZ(xe!S@qzN z@3R&Pp2skivZ*k;$OU{_Pt?;a6+hst=$4v-naG=xbH* z-{caV@IJ*eCJp7QY~ZX!*P+>b>0shvlBN@3o&|HhTL4^a@qjg@RdHnM_l;Z5Jn|Rj zSy5|PRD2O1bL&Cs78{X5>-^Ys9oSTX*DV>nwWnS^ti*g4H&;EZh|h;efw5?I;m~hY za;Dho=0hx@kqRl$lZ@ zlS;oHuv|M`!f7@Dn7c4~WZA~mDc-RK4FFz>B@pMf^Jf)Y1MnScN*i1?1~N6~I`iD{ z9YVRME-8Tfkj78ut#kXk*5ww6kYzL&bYvZ}3`Nb;Uj61QqyAF2Es~@@K-Waj#U!l( zrEq5Pn~G`CYU6<{-Uq0I!{}->rWr<Uo7J7N~6CfGaZWdtH1DHI6{OKjFb^s**Q^)ZovIkbkV{JK0ghM1cJBr~&7 zf@&Z>WG?ThEF#a5+6~FnOpD;$5w-v*E15nl%3~vK^H}^lcN`Apaa==+pM_tz8XJQ< z&Q(H2J+|ByMm_!;-3FBdR91x!HIKYYNm(djSJUmkG;p^9J#|+Ls_Gh`e>{4hivT2F zDV1QrU4R1SO@6|oTGryEoikO|I4w7HUV$Ux?=IcQ=Z+&X)@$RL4 zPF;PLWmW;OuRliPF^kfE_)q8;RybPyMMMAWQSds>KZR|9t_YdMhCV_N&MbP%w2

^%(nu|sKVcODoesohS`Ume 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 F|1S;0eXRfh diff --git a/docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.png b/docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.png index fa795976236b1fa7d1b4deed2772c3ffc867143b..9f9b63f0cbb66a8293919f28872f90dcc31d0721 100644 GIT binary patch literal 109980 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 al9`=_>o&QRfCu~@Nk&3Jyy&69i~j|d9+cDo literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_has_jc4ic3jr2_nt24.pdf b/docs/graphs/l3_perf_has_jc4ic3jr2_nt24.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0717574cb002cc460e0967e5fce9e88df346d273 GIT binary patch literal 33508 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 LCl{3yL;U{$aBtUh literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_has_jc4ic3jr2_nt24.png b/docs/graphs/l3_perf_has_jc4ic3jr2_nt24.png new file mode 100644 index 0000000000000000000000000000000000000000..0804e11c244472d039fbfe241f755c8619d9ebbd GIT binary patch literal 91932 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%0A&BF7(MDSwe`!Z6ePsV7qFMQf-LgbmIj9 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 lNjO6g-l#GPKJ`9e)@kU=WIM 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 Znb}#m?%t9>{07sdp2~~mKhb;j-vBW5nwJ0o literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_skx_jc2ic13_nt26.pdf b/docs/graphs/l3_perf_skx_jc2ic13_nt26.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5d2f075f707b7e4e6184dfa40af3d66cf6d3586c GIT binary patch literal 33054 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�%%9>SVagh#q`2YFg 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 E0XCm(R{#J2 literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_skx_jc2ic13_nt26.png b/docs/graphs/l3_perf_skx_jc2ic13_nt26.png new file mode 100644 index 0000000000000000000000000000000000000000..166764fc778303907134796946fb7231213b91ff GIT binary patch literal 100176 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 literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_skx_jc4ic13_nt52.pdf b/docs/graphs/l3_perf_skx_jc4ic13_nt52.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8a8edbce436fd0981d3360087592f7f2d268d0fa GIT binary patch literal 33294 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 SmV=##gAJLQT3kT_`TqmTBH_aT literal 0 HcmV?d00001 diff --git a/docs/graphs/l3_perf_skx_jc4ic13_nt52.png b/docs/graphs/l3_perf_skx_jc4ic13_nt52.png new file mode 100644 index 0000000000000000000000000000000000000000..fed5b22e2c1775bbcb7dc5fa850eba724520d27d GIT binary patch literal 96292 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%0A7EXVYYUL%ZnBJ6GSWCo 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

~KIiKCM$MfeEnI+$?th8B)T>_gLYggL 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 ON01Pe5h)eY_5MG?9_Cg6 literal 104435 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 diff --git a/docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.png b/docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.png index 83eb4e92cc5f0e6772dd8dcc5128bb3821a547ab..b021e6a916311a975ef76e136bcc6243012896cd 100644 GIT binary patch literal 117134 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∈do+!7;rmN#CHa)rS=K5L<|2Zk8uZ%q|`67TtE;Eq(=J#1M-`9 z@$q=Ti1cn0B$Kc3rC|>sv&NThoO8tSQ^D_jcY!2+_yBd}Gt$@wo@-tB?}5x z$8DqhVe?qvgHKzg4^(;pQogp}VRVrbMv-=N#fGbnk7s49tqr``-~}I4r#-57fXW}GGib?$hoq8LUNQ?cKQE-8DH$TUmjx0ykRxj?sj8?*K$W3* zjjD$&Ko@eiLA-M?yuP;9Lm)lw#6tqI;y3BTg$8WNz~Q7h_f0(&__ix^8DM!fR57mK zY{MNS=6odB4~yGp&1DP^qdnVpj4U9K{~`f9K81JL0|4;- zm(1ZXcTl^Z;Hhzrnr;h4RYH=)0{}E5YKy~P_L`uj9jUZbvO4>|F68v_6Uy>7@jX3j zs!QwAvYX^7QsGbGO=p940~<&HQ+6&x&MAJR0-z>~4JTWM%;O_lC9Q$_o98laNg#8- z=j|KdD-fUPI2p1{A!J#F0C{Bx)vNjP1lL$q2kH3s5PM9lGSBM4YDe~`3RwkmFQ%!f zh)H!~L+lZItRk>|DUi6$2G?sl@*^$9d|H8dW|kq`z+PINb3XaJXfvhIPEs?P@QYP9 zSEe#kVx$Rv+$SqyfTcCUjH~@o>_syj`7AvgBMDc%g?ac&4J8V!C4j>=im|;TjqHh2 zM)3*&>Q6}!5&!`xf8Ys!Y+Jqs5Kh4YMko}Z$s_KR(hi-0=b_~n1<~UkV5b2FC_Ig) zq)onb|9XBsbqab9yuICHGF118ncRvEjI zx#2Q-?=(vA4a!1dq@C!)au^1Gd|fs*dbjL3ZfQl9%Rm?N0#K*j+z>j;0(sahs?6HF zj;P^iF?>j120Yu%v>}kjfIPU|sn;y>6AE*1Oz=~A&HGCM1@Kjc596_ak7V;R7iUj6 zeCMNJWw(4?2G43L0iRKO{NDwV8-?TmmpI-u_1Ma891XVQI|gQArn1OfhWn_yQsO%> zenMva`O}rbk{Epqy!{C;%gOs~QYjks_{~+1cUHdlQsmRNYdrhjDrW-0c!^ykC|xWy zu5>kw2-?6&f#A7TjjLrr<7Ett>{Wnkp#yJfnUoBM@I0~>&+GB(DE6#PBDn7kqGA7% zs^3w^jIS1cX2b~Y-MR*+rIfjDH;t+X=z(}VOmP8SALjf98V3Mj#&HxA5(;L4fMJ6Q z2g`DuP;jJm`aJ++07RS_49H6OyQ$2BsTXc>4P>q|{-+`u_itiO_;iDzV#AK26=DN%-Dw{@ z5)TB5AGWF~zOB8VaJ=FGcgY`oC}ju(2SSF53CeLt(#rxd9ryIMy0Qzt@Q0JVTH4Bv z{5C`~e>65Iw5*0KkBWZiDE@2-%HcV0qAjtABrkQ!`Hm%+Bc39sAI3p@JXJB^I_pOe(z;Xxfs8exNa@F?y5+UY3i?OE1f^0#{g+0j8E6JEtvau87vCL|oWMgge4q!3;%!6-lJZ!^$D# zM4G%$=z`9QHIjJp8XSY`xMEg^M81=>qD~g}mTM%K{#sAZKJC@xX)*THkq?-xX5Y4(e(7_MuuSXHl?_znfc}mknYKW_UTANhT3sB*pBDQzg&=+W4Z6shz)eu+)hnY|C$-<<<>DwgO5R0!(^|V1BvVMn=LdQ*vaRfp zl~98>S12-+%Rs-*qYR5MzbSw*Y8Rl{r$}Kb%w~2SfLlD=CEy*95T;e4h0sCsCw#+S zom(+Uz5)GMA84JQbn`d}fshr9jUGM)Ugh+NXDYoDwN0*Hqqsz|ldQfaF2HXziU

jEjNmod=rSe`a$Z%$)%q^ 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 literal 107203 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 JT4}S7{{vRdXzBm} diff --git a/docs/graphs/l3_perf_epyc_nt1.pdf b/docs/graphs/l3_perf_epyc_nt1.pdf index 12c2742daa65f6953015e97e3ce5cce1dc288e23..8e6c7ad382c50b8847a559d3d44e311b9dcc837c 100644 GIT binary patch delta 31996 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 BQ}F-* delta 26610 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%0As=1uhyrcFLT`Udni;1&j5sk(;X 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%0D$- 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

xZ}}{Su@s`Vw=T1AD>`yBxu)pPInl1 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/LQGKq4%P%iey>baAS zpFNB~?s#CTSRs;2*D0m4EZTDcinyo<@8|^!yqC&l66sp;^eHbCBbYZHoGHx8kqAY~ z9JyHj`_ZfN-`b66<}cB*RPoy1592ZlKS!7k8MZD}B3LAi6DuNQIa#UFth5N3ipJ&e zIjZ0g9+Si5B;Qam@#h)ie~uT+6=c(vE_|EK4G8j{9VJlVcUp90?83T;l)`@lqSWG@ literal 67035 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

wUU>^Vaiyunqc_YxxSfXM-?R%+dlEWqrk~sPW z&U>NmTqqG`DkTkxE%VktSNmNVaWpV~>S-WXs|@;zp>0{iewu)VY1v!uI8Oh(69mr) z3uEB#IEGmk#O)$lyPz_v*T~UCGUVf|UCs#(XF6QfY^+xar6JGtin8l6ehodovjZccJjhqt*@uzn zDiyhlk+WJSL9g4x=uMK?y3bx8ix5uWOO?&;+!4A2q81V)YWbhn%cDT#=udbdv4ec2 zs(^3^<`eizX+8>zVA;JD^sg}J|FsKRp1$aROjGlSwqlsjR}-hTupY-y&pTt5#53;G z~U~vA&IiXv!bPf z@>8BTk4UZxKfQ!_DlF}wR7zKaY!%J& zefH?vUScor)lR~0onss}ylXpR@YA9+j(q)jDjN?$Q}7|`h$QmsUTXx^AxNhG5G(T0 z)c&ZqYFUn+tmnhh?s0~Ukjosy0aOTi+9V)F_&G)=$1HQV*hh}FZWba0mb-WFLezxw zrP;yQIDP8i2*Gl^0TlkZx!M$GaA4mtFAQQ2*u|IXE;J;i;}ep~Ht>SFiKoi2a|erHMl$Gsb4;}b9m00_R?3gzuQrq?`C>yg zi5cR2Z*GvYmQxzXDwY_&adB>St1s3QODYogmBQ~I7#Ki_(Mr~M>=Zja;EE9?qw9oe zh3J^$D7W0#6wVHst>xuq=h_UM|Czs%u)MfPGaQl%fEAkd;v<|({xUyi}}jQQphX}kdFW;hO7hOZxnOVEiEqIuNO7a7;WW?Z?smaAqw8` zGOl(JGa3=yEIbKm)KA3(a*??s3sRosGQX;T>VXhh$RnBVbHogJQ{?gEh$PX0x#X2vJk^6a;++(EcYVN!QMnBeD#F()WBNQi8 zRp5O9OfoWpiv!Q{$ETN!khmGxNAN6-UEcxE@;)^AHo`hUOqhe0sRrL_vjj)lO?j#e zDK()Qsd(ffMci&Z>tcdE>6W67de*CN7K~nhQU*dcLATNj5<*(={)6CRN&5tLW{~I5 zVCNz5slCmwelmKsFYpjxIpH#vfh;H$PEwiA6{`~OA7@VRpa`|$)!ErvXRBtfmZA&H z;{?nfOX|ZhdK~p8|^ye5a?Uhht^Z-|2E0nVWys zx$J^$K-3wFe}_2mvf4nxYyMkZS-;Hg7F_DNMXY8x;jo`kpSS-vDAcTe+ zOjiqPV!X1}tP+==&J39_>r_Ptzg1;v>E_EHQ%vbdJRtYVdG#txGQ9WGE8m(^L9lyH zE|PMc-5cH>pY8j-5Mr>$uvD|&^_IwJPTzAwvj$#J^O|*K zxa30x?jKAGZAgoWi4x@>c*_1N;?C6OgunHjcK+>~w->I^xcjZZi##~>%a@ozp(K~d zGo#*z`^W|YKqaKCN&AVhxt z`5y$BaiBR7q{8r{neLHuCFq13u5o z9c$7Q;k*R65R(F%X8R+6K|r(}`W4~8Kw68^e`5Cy5IwH4(bJkzo^;eJr;UWx@G!0un=zPn@lSE>tyshv}I0)&_$d39|i)z3<6AC!K2+ck&2! z;;$pzMVs?v-%yk3`O}L;3`*`TvD9{<48I)RiR>Oj_D){9rG9c-L$j1Nb6$i!T7J+y zaEh#rrK`g=cXP^ny;G2N`wHX&=p6Ohj*vE}^M3dckCfbdlz7Bzn$Kn%;rLbSX1q{) zJ++u?Tv;P{YE=l(NGM7zJU11*v3w17LXR)>mAYM}&YF9Q(kU-% zi0>f1q_IHQRLDM`x^)WRA{v_HFdu16u;Hs>R&Kc$gwnImmsseK@3~&4y0t(^!SIVz z{MnAj`1-t1K;>~0G04Nh{G8%;cae~+D*u7p@`p%K_ik3=Fs0DQ^U;p0G&4Uhu}d!4 zIE(TTu@4%?t%gU5 z(X2?DU{_gzj9o$7YQZ4EI%u3J@TUe7K`P9&_MRM@T}iij9krNf)(h`n3%l*X8xs7E zvjgUzd_s!JB4oAyGV~xwCL#lBhx0paOT}N?G(>5ve7&xx9s!uAIQ#bv&?7||}_FGgzBVt7sE6$aOX54Jm#9A4)zx4E_{BfYiWZi*T z2kUg)ws5DtDGqTDSNY;#_^fV;^Sg`wy}dgVKNkW?H}2>SLRMsD@L<@0dahzd0`-j_ z@f7dUH}l-YQdE{ObH{YJ&OJN+kT6SA^BcQa+fL+@II~m>%BR;>m_F~V9-JaSHQ zlnf^cR-lDwkNMAi=a{kfrt2-qHDB^RRes{jee-+YmQK9Yr&}y}bD7~j4fE#YYK7(U zj5K@vrav*pbZ&2<*=USPouDZ+M=eWqqT|sh`oUnQkZgJtwC$|I@x?Z_j-_ti&@KlR z&2@2tv}>+T2m6bJ`qo8@PsY;KngnQ7nT9B?lyLhGavv-8zQc=pCkL8$B=WpYoSddW zbUD>Jb<}x=ri++oQ`O1Z((60LZM@+`axk2#Uu5P9Qq6IQEd)r40t+sbV(ROc^Z0Bi zZ=@fW>nn`z_z3=+nZcoZ8)VWdVw({M#3bdThAdI3&e9rj$F^u2qsdE-TXK&s9#W87 zV^)RT?MF%ORBPaWAE7=V(q^w@joGhA%pAlF9n!R1((1V_uO-mA&=S&iYO5dic0*04 z-xNJycdEagXL5kEs7=%FW21a}%#GdMvy35#yzQ6qyM_TRQCEfZnif~~Z--R#EncJg zQ&G{ipBz|Hx<;NYB`LGK{mJAu!a62u&FX(TnD!!Xt=vQ9E4|yz8|m5XWHLqh=H)d_ zN($KEuL45OXL4k=J4G#9m^LI&qUh|$TME^#)ez$$4XY~WWk*jZ>Jn@(0 zmE^d(&i~WlBrK%z>65j*w*gQh)3C79$N$i-SK$ZF)}wBH?e=1$XRFY-rzC{*?6lTW#nK>PxND&-ZR(jK7IzMc6%%F8J-JLPb)Q&$SP<|SwK~Sx z`_#}N5iM~Ekcc5ga&^UR%enmDgIZ~L*BUDCp6VI@*yL61c~ha=sVXoo$5(UE2?EpK zN?JC*Q*Wt$X|LM971-8EOVLoHJUHUe&fi&sjx`G(_L1XfQ0zmvgNccWOV2xbzI=bu zT4xqW9Hhf#dZ58R<5@ZSXhyzRP0FFUuD$e4foVOJ?%_KInOiD0=JF#Y^HpuCt0nQ{`nQ zo1F_v;_9VlJ|O3KS$xXkc(d*k93Fy%y;^ira_0nEQ1S=t0%eufYf6u9N3 zPDpi2?00loEuJr8!R?_f6>O6>N|u#xnVZ^tLqRAAr4d+&)vZ=aSUaA3(&@Xa5jG5q zqn6se-G#>vq@2WO>PiJXuts#$bLqH>h-LzZK2~9~M)E=k*uNEi?n~nxzfmoysoB|x zG7S*F!LRDo<_uY!d$NwTH0T|%srZb>WlB1K2lr5O&3;WynG_Wupp~%m^bKFIVtJqK z&iKYt(*=9DD5bv0D1HKa+@cIS9^A6BTV$jz8dlf>MjO~*@DLciAK%ts_XA3%K{zkp z!rA?x_Hrht2&H1dlOb&)92jffv7CTTNY!8q{jav-@wz?idH&w8?Re4o?Aec?4IsU% zPcBn*fsAy7_1GfKjb=MQz{qNjSo#OHFfNW>Ncv!a``jT#E=KQs-H!6%m85!NZ+$$d zVp9=<@E7F2I5!wx-bhy~;)(+=8Wb?~6pA^C5*{wd+`+q514UxYqp#9<_klt0D2k);v$$(9q#9twQBaEmuGkW3x%%0&;L49VTF&hNF! zdaj~0Uu_z-#GUiGaB6`!Zzk4_2A$j}k&6noD%$kdwu-T~ePDUQY+3%t09&MdWt(G4 zk5`T7spD9;(@HygEAxEc4X)9nLhas)%PTD8PH4jRKTD%{^Q8d*Bi)2#Nai>7qvg{v z`u&@gKcaTWR}>4z$QNq2t*beNocnF_4JJ3ssivs{+g4|+$_YJnAgc_y$zsl_FR|Ca zI0C6SFc`Y*t+pM*`D6Km?AIkI8Y?ABAlBN_($dc~Cj!>LzB)mUHnb*bH!iv3^qQlG z%p!%YNiXoSp+Cy;>UBmfM_4^+?(W3MGb`t_@pBP(5pD%CWYM^dsxy~asyz0c zJ$mzk(x!aS``qfzOj671zrS*PB$(P!zCmf^ZXKoh)PctXNXqHLP((W9d3bx257_MI!H({quP0@F-PmO+a=;9`(7z)$$r=LW%?{$QD^e{E^)0a!$9rko3GM- zS6W-<=3b6`&C$Acr^aQ-?w!`P0w1=-!&fKDFNwQ3S}gPaf(kt_NVOf5i-#V!d3GCA zJS96TR+Xa7Ir%mHuDT~teaDJEaABZ7v|0!!TXX>7oZI8FoBWu+Q_*Tx0SqDFeEis6 zolHYh0v8|YLm zSFA&RxL+LiaWg^%sSvF55v;cj88K;n-Kbi@BSZ|J)6>&guO_@=(AH2&6{DqdU5(A^ zcr^T=BCzFQqb=cWU$*+p=v@DlJuNakf0VCxMK$F``rD`8sqJGT@ONtNv*u{H3Ep52 zb{+dNKx~n`zk6td*L>~u>swAX z)mnmOsM&5yK2qcKIQGH)wX|`oRUo7LT~m2V!)mpxhi$^i*VwE>oH~bjjOWh#Q^Kq? zLAAu?rZBeIOY?2uLg9x;br}!rbFy>G2|sT6YHDi2A^-_b0WAqoV!o6GJ*IQ6Y(_Ra z-)3i1fVcV{iql__OI}L-g0u&9b}&?zX7Z!MpA*YoTuN2T0%*ieHQU!o!|Jt((ae`7 z`jmzbat*0I85$VA!0r zC&ZSCT%L4qWWUbvggT$)y0gI%66C{cG`I>}z~Fh?y@}eWi@TUlSz<-J?ikbIy7%q9 zl4Qc&esiT0#8XO}Eg~#R8pC6ogtZ>7Ys+_1i2c7`h;~J@$-5_&nuT8EAAM<}MQNz3 z`s(4PWNASaSB7oi&Oo1qi$eOBccm&k=(Z%Xb?hTHP$eVs;I@i?44(sj#sk=@D8?I~55QqPD%eh)KS)fAkTG8K;fSKAuj(gk=wtJ{GUx zA&E^sARS*%+Oiem@#|`Cx1|V9RmgYN9PGUOfSUSJl1!2UM;W=ys&`6yA-9{g2WzkMNhbr5#g zzDiBc$oc`~24;ocSW?N4u$WLAqQAXl-!Rk(+;^Lpy!oY2V|J0I2Iw0ul~ z?1fI=^`XVMX4)*n!})#BbJbymm9pBJnu(*6m!vN@ea~>^wO`K8h!t1tYA4}XBO|HG zk3eIY%2J0$=Ep^&*-o%jeUH?hh$)hwm|;NSHR!ViGx_9n^K zPW0*aIE`U#i$S@qF*G85?cuxeOr6fXp^>Q?aeQ&T!8`G3dTbv8D*JTT`1RC3htK_-FOnM#eYt-$p$DL?K0Z z#zZE`BrwB#Jm9Vt`)GKONqbLiPPWCsL~L$kXM-@}VS`e#yu!0heV5JS176;2qq5qS zKS*RE^QXe1SbZe$84M`>Kl}as_*2Iel8CAP*|6#SlV0nsN|q zFhzY{Va|FYsPjFbP9@Of*%3eDg>}97EaT<4s=BMcfmkw*S-(lg(%U1(UGazxUx8oB zU&mH%@R?c=}v0qwbA$bIYkW0*UaCCGs+oGF;-H2ZvqE0$kD-ff+*6DJYl&5 zkswO`Z>SJHT!|Rmhx%;rWaiB>)J$?jRhu_1k#I(8hNq@nOrICA7o6kpjF!Ji$KEUJ zujBpn{VC;~6E=?@-*|1jF!ue_=Q^A|2nX^seFYnf!=5tTzq;g)3N70rRekeIM5Ajy zO}N)Vl}ZK$k78KmEEjPnCE$&&B#{gNBo2zpKaf5GOD$w|^RUH3oV4D1c8{&C!}&7> z_;c_{6+iY*VsB5KuRqOZ_AGir@WP?dGP~m4w;QB-nA22oAOYQOAb(DXtF6OFLB=@O zq~18J%Ve0dT*-ux>aq!-Ha$+#yHDWnAuVIm3qI^?D*7vHwawu1Gm^R;=upg8*XLSD!Qu z-O{`4V%(x@XVTQ64p@h5)ib{Y!CvqpCC}C*H>g_g&wwqDaG=re~RV zzI1P!7!lxoT;{9EX;jZDjFeKJFnx^6RZaOmduSc>!B< zh|ry92URqqu^MV@iVSt&I(?(a(2DnZii{;Hcro8<%c3+~?_A(>zAVb+>`Y4kix>qh zb6IeL3{z-PnM(Ykhn9s_K-T8mEjcCCz%3 zf`LB1doZ2`lnvcVd%UCl7Z6hT%Ci3Pj^VA1M{zX;C1ihN=hCfs3cP&mZe0{-{joM% zIn|fwq18ho`IMso5oLAxSBzW?TCZ=d+0gZ|Z^DDra}tkt#5dVLM!lA0Lckg?$xM-1 zC$FxFWT_HEixfs^D1tN0AID~LK|3Q1gTwTJOo09$xxkP;#n9u|wK@HRGcznuH>tZZ z?jC6@^yBMU83!BCzQZ5zNUS^~+J;+Vuh+X0JXF%||EZF--KIWD^WoaG^F8q#jY-FF zVb&wiN6KAfIT-ALP#YJgX={PXpIBDyR)5F4$@mcgRc*y$f>W2slkA0O`_hE3|N6c} z-;q!)|191jlr-$)`imd>?gEM8?qySDb^-QacZKO5ChHt0b9eXZDd&QUTReW9OjGe` zr`SSSE>6)nCdPNDzh$8TLI{+uV(SZ!Mc#VqWQ(73~aMj)_<`wYMx6M~>flrus&qYR|-@?;U}H zc8klVIs9?{dK46!ky+rZaewXG?^RMa<4impWO@9a(HU20PN-^b-g;@1K{FzKb6ub{ z=JnJ4{kO`oCT}p8KLR@HUyO}RwTG-ELE+IscRu2a`;q_A+KzwZc~hvyrodk2q$fBP z2Osefi;mZz#b|a=>x?i;QRC{9E`KkNaEg z6jp{{oTi8A0Sqz##i)7`2H1(=Rc`NCV?o8{qZP2J@24fNH;BjaJe4k-i)CVn(;JYD z)d(hc4<-YKE`?Ik&ripKITibC+on50?cxHTiRVJS0vL)n=`cMNi>G9U#>e%00&eg- z>4rQ_eLPW(HkJZXmMGcRvez`Z z^*8C48>JlgDAD}9Nm^$l9A*eWKZYb&#>Vt=%1ehH!<aX?#y1i+mxxIyFo8F#YevwN+j$7p9|HYk+r!6xcv zGHq|a;oc&goDhD{uZ)K{VsI(+ERM8#xCY>}Al#qnH0g6n$v8>^`XbB(sAM8i+j{a| z6-1KT7rt7*(&c>olGg2GZ!8{LQYDE$AsFrVf6m`YsVug2i3GsAH3e_i^4MBl_+|uLBY3Vh!YfI2q)z?I>Zby@+8vnc6qX2ISoYS zki$*%LK9eLt*xt09s*bB*qfl@7YZ!GgApbt zp$WSpC@~VzWG5sIv9lZnKQ^kD&mp(8Lp%i#xR7Z<#r_80QqZ8`=|M(CRMq{`K3A~n z%x4n6Gf4YK9^HWg3;9S}lILqFmMgDVNT!NIxoa`vob~3Zx93pe?wg#!Et4AO-lOpl zq|tg^X0jKRve;^Ke|Si$5sUW0kV^4!G&|==I&(L_Nfx#L=YgT?nDw339THyMCmjr3JpX z%_i!!Qjl~i#uIe5L`(IDUR}8FoEvHcyyE?cakTI zZ!a21>rZvULbz080G0+USggLka`qmVLCvR$$o?p{dTh(c2k^a|OO<+R(gazKhAotn z4uGh7ggH}&9-rIeqmRQwOhIxj+nMMsiKUP7DSV&T;(^!`%0fN`lcn5Qy~a3MCO`y= z`ip~SRDp%`cM6=*g803%D7`V%Haw_w71Uo7!`O?54VRYGf#Y@*JA;~UrALYg&r@5P z^dne)s0CYL&kl#B;64(bRlhvP6SM{ixKE*0_*r&F2@fKB`CXK>7uQpo-#soDR%`lF zbQjjRsZp2)k1(N)t|E!&c9;2`;!c9MG2l7sgEvJQyW8VfytjIpef;Z{n`o!8y}>KV zf@mPF(A~f8?KqZjedd+?u}WQxRdn!<*AstKUF&$#jyn{(mOLae!XfJ~jMq2qhdk;% z>h`PSHL}H96!~$6(GSFK@6j})CzJQ0etBmc`KA!M+jfv3nqc?0S-4{Lo=Kzp&3G-q z3Y-i|Gcs!gODRwawe|ECt2~FJ7qmHNEM@eWq^rhbd1mZuNmK1BMK6-cO^qkTdVI5Z zn(D}E0M6;#0-byHvU3DY3Uf^6wvAK~&aCgd(CSy#?Yc0>X52s7i<*C^Ptr?ySQlPP zP|Vt28;B7?6U}fN;O|>3%1lq=orw#ZV2RI_ZJE-Cz(p3bvnhkO?^Vw-RzSJ@^OJ& zzdT(tKDBC_tIn?!O6NIEUgNPRG*13o?tJCx2Rn-V=2NXg7&D^oyKS!$KMCTjR~z&n zp86I$`hDIO_LkA=Sx*u_=jC(H@lVz!Br2tjC(4(KhAy-@Ot)7D>|$XlBn^^&q&5D{ zX+0v{eDQ>WhL{Y`@4Jl&XI{q0qa@G=woki$-esz`j@H0fx_cIQ)mIar3GU%Qjg45| zn`uG!cFb2Nj#LoZthzWKAD^$q*p1h-Rp6|bXpohx6jHEE0?OH&KX0s$i;8l=j$XfS z=*46x`O8Z*lsPs!ABR&_aCg<~ z`M&GsIyqkLcJ;zyrT6`zZg^3pF4loG!YTau8_ja@4YD}rF+V_=(!)}7CVM!aI>;?_ z7KeBvAUgU<1NUM>%T1B|88^#}pT#f0Ng%lcfa!TjftVib* z^iMhkiX_yg=je2w7?arMr_xgIl3mWPi~3w!VA>?e@C;1JQHf3p+q}cfIt{AHS5$lEQFjb6FysqRWhEfC0%;GIQqcMhNDcou7!bm-;Nd)brwJ0+N2 zK4+ym|7a-G;jJ@+;IBr;V0QBLyPZRCWe%#m4)=vt`y^=qsY~4Z!rn-WpCBzUK~4?p zJ|tn)cJ*7K@&jt-%O_a+T&InzM&EnK-1?a7(`}?Qbp;7-)78MjaU7{`c*3Rwf;Twf z0f@3iZM0{1JvbTeFAg5R*<{p6O6!ke$uZQ%4=d0x3=Q~buz%{1epc%33lfL%sLv04 zBwjTHwh-Q5Ql}&=`4LH}#4$M}kto+c*3!@XQJCSezRN|;3&yao-`D^tW@zxNWIgcL z0agn8F$m-)5V`l8W%gEuYxmRH9^5x4vdjGZMyrFZH~0Mdx0W6!-hL&{71Z+3`Sqe^ z_Jz$#<^3`%GI2V?x;K;(7+tbX2?CWbM5N2Bb2&E;)1Q}o=ucubVU2WM-PxE^E$((N zk8$3VnM_!)WIWyV?xv<`4#A>x&Hj>u{;4Jw<;{vE@D|tDD))FNW$_S{wDHpl&U0^0 zeCSGKd_N+_nulO6iTZ%qIJ#wr?8<08R&K(MnTaImhH|@AIJ@erR~_RNbquLP)4C}- zOpL28qCtfP7p@3l?1wT5aZK#Bvp#SHFqnVnepX(f!>!*ZaX6OL5NLG1Z4QV9*Cysl z+2Rsq-_36$yGuMKI_>BR>f#}-e>zaFX8 zjSjxZZI~j@OV@Ky7cIYa>85*H%cLQ8XVdS&qssk+bmsNi#gNfJN=KHEE`LJ1d~0-o zVYpF2BGqVM8|7{Ho7C>Op+a7mThAF#3EmD*q*N)Mm;-T_odP>O+1BM-DGpC+TAtbj8T1($SUnVtyGhP^+r0|*ogHRzvmb4 z?$lsw$~5pRp5(2U-As;_6|pRRlIv>z)V3~vWHL0hSH|`US7`Ak#jO6N-fm21ebD#u z9JCT)ZS&Mv*p;+|`k0fHy*y0q$Lu^>CNalGCASr&lsMfiC}+@)`cO*UhL!8j=0vaD z#@hO%=Yq6D$Y*v{m!PBznAaz7V9HE3zttpSb#WIx(-!L^_+mOF_EeaJ68K1!HvP}8 z4v9=PSnGt)D_Q>T;`b*Ap&eFe-5cpt!)<3O+da$C8(&-6!W7*KiNF6nQGkrxkSmii zpKWuj^HJ5-#uICr>7NRx_o&WcM$4W(XZ6<$xtx_S$1C>oLvZ3{Hf=+h2S_eVkkIW0 zU#v8ILy<4%o4uz3WIEx0MG|jAJ#;q#H21d+>5AEA4&lU|t~MZ^e9rcihQ{`{MXxwKtB&Q7sGKtPsWi!jxHHklaLWXwm;Y77iHzS^=krQUo>wAs?(B2 z;4jMYxmQBjIrDCA!=mw$j&_uK9HF&CP>@M9rQc-w0@GUi|C#xpt-tw}Ox%F}Hw^-G zv~fO<@`38NrIzAAlf*%PiB#18(dI86t6)FQ4nBl9)CUSF5(kAbEluXNyD1GPNf;Qo zfu{nT_W9~<@GYon2a2D2*5&sy@OksNCIiFrNl4uRupy-RI>pmiO4|)h{IfC>n~$WW z^%1K=s_gj(R{}M?wl=?~$xkqq6|-y@LPpeJ0C?ihC7jgm5{rNskOUY=jz|2ysR{7 z6GWZyw?jkrHI9LGpY!#^k?Sx@WfMUMAXyj$Puu#1mE;WgP2d9zV#NL{aVB&nVfWv1 zW+&GU(whG*XSU^eNfnS1>33s}yC0gro|xt%{pNZvPs?ti5$}?um)MIfI_A3jUQzds zut~BkQFZl_^FR0%Aw}l6<0-_LZ&2^$GS{Eg1SQ#uaqo#nzot91u1pAllDN#}A{iPH z@h9(mF?}wf5O*0B5+fHq0RVqb7P6BiTK)lxZtrZ*KBy@?rxe96U*l^pYYSCwDmPnO zTb!pkuX-1ZU|Xli*b3_a@u@m&|7Eg+EHW%O;NhGvTU@k)B>WBkJLeUV2Vwn{ zH{Tra)+~9_H;ur(2X0Ot{OL;r;1!0tH9|Ipt^JWP3yv80>&~l^1MYqtHg{>k)=3lp z)IW`kI5u%00|?M%OFcGSrTA1|WY-V`RnSh~=+Eqag#X-;q8X`HgKjh@B0{E=RzKP( z2(&_a`aUlvXKC@+s!NaQt^P3MBMV?7Q$OOQ>7;AIS#zb2IlC(hBc06*aj>vyFa_lt z0~hSeE3a}8H!Sk?|GO*auWv|g_Gn!|02!$BipYQfqcqZBy^Ifj{!`t&t|={1s`2V~|cd*mH%arjhgQEm4RW!+&$< zvb;KD2?=~i?9I)w?pBHx5hP1;)|=8zRoB1wT2exB)Jw${Zenpk z;P{q^+crBJvO0AYE~}}Uwzto~ivV>qiJV1B=g*z$cJ*58kpZ`v&*PwQFUd1>`RJN{ zd3)!kQ}6C`1wwYV*{~>or2b%|U<$oo?H%BKxO^y%phm;(M?-*TjG{Q z0c`ODr5@nXt${c@Lvz+y5ro+=)6!qIO9+RZWEBiItUR!Nz z?t6ot6Mhu_T*zl14!A7DOmb#$L~{R^@>E~)f#bjYuih)CywCqmA$4u!OGtf;_C~r{G$$m zIHzyl0b&f1kHl#~sHwne1(E8Jp_$J@cG$qKFe%GBzzqYthQU zAN@IjOCuO!gqU!c&=0!A0^xoX{Bk$i|kLQIAGH839dcE6S1YD5cE7y{DLcfVz4!l6; ze)f~i;ie6p#7YA$DYOCwm#)x}*%!{V)a$kZ2Vr<1+3eHFBipL~;h|_Ao()N7uF1qPYQjc~nUaTBiXYFZfsEA9&#Q!uX&; zp7}#XM&y~t*co|fbw!QJ2tyE}{%VRk&;&6+gZ3W?nkR7_bJqm2uuYE=9Ad%ot+c*Y z+1*#FV6_g$U5C7`udZq%HO*T!2{4i~yFFhcXW9Ol6UgKf{&h_D|EKoWzYFRA6TfU~ zLl$z}&XF`mk#Cc*3FL-w9xpJyq#+PUZ7}A$Xa;n3)cGCj$f5#sD!y2So=j_}txxME=10R$R2P2sRu`^tokIIz&BtC|07BX#}8-Fgg4eGNRJ`IJT;eYw;E zo6p8q4dAq)Bk=^ zORYll5CBaD5KrMKGdS0E+TInpzh3UvmVHC6Wbsz04b9&U^IUZ=*e=ju2W@oz)qQ^y zebi@d^2@1m7s5dB>8DQf%I|9d_#IDDaLQ4{o1%yu(L+h=y1i>c4x_BX?%SA^3x_T$vU+N^fD0yo8Es-1h}wV zYyxllTAWEsMG;rK(Zq16rB>~2aOW=41e^!}4$KSVN~1tHLy#7y#IMB_+P_5Sp@t^l z>1lGLg3$tsB{~C(-4TFcdEu+??HF%EdW^7TbU z#J_*3H@gIxvYLh#*JRx1vCa*_kmKWl*%E|&8y>A?&VUK9?s;;`@cT2$V)_bA!$1?l zsrZ?p_p979%J53vIsgmy(KEz}MlzvnY`Wvx!3GDOY0z*!m-rCd>?^>O5R?VI?A^SV zoF#iSavZQ(sokaovER)C%5rYn84xnCQ8I5n>z(qpv;^`$2$3x>pNHopkQ8LnDOAKY zw*sfufhDQ9jOK2-T8-9i0Q%pePwoc$o#m$(6y*TJCByB4eF^OIYnz&%PVlbAvvKaW zxJZWD#5tw4O7Q6K0Yk{LMc%shM${y8Qf>2f)$d`{^P6y1&4S(Z3v_Q$fWQeRxkljE z!RGtX{W2Zn=C#2ttTgjUvwQOG)5V%uy-uD#gxnbt z>4kpbW(K~yOun#ZXDmPcstRvukpapUBNS4P(2^j>FVlx<19sK#>||{}4Fxb!`lAT% zJS_g>>{o63FN#h+iNc?mF@-Gl^2gxRALzY!Zyx~Kp7dl>cZN{&h${nLP(2V^K%xcC z|Hd{OVBw^CA-CUbklgf@&++y{V2S2#h+(u*%j*scsurxTwuk#$Mn@je*eZ~# zA#_MExWd{Fv|OkQvmOk?Dnr4oPq0fCU=O9G%I(n>(^ zgTR5J&p9i};n!Tadi6TVGDXQIVdLW9^9*w^@eR~lM<}PO0ZL#vS62*BF_1fT5d(K8 zIE8_E0HAAY+%NOX2&QMZ8+l^<*TH9QpTiU)UpQj42zE=(4(N9SRt(SPH>iB{fn)Yg zEh}GIt?=G^EHSnvxcTc9aE|Bx>?mH?b(_>~Idsyy1H;Z;VaKCxe!oRnVxwREn!us? zg`ugQ@d|np-qoQ>0nQ^UJRTt3ekzS(9=|VSebO}|GZjdoKlPxnEqlGnPTvPC?91~b zK*&zn+_G&gcJTmci;IDsI}n>p4M5pAN8xbBe>oaMf6Zf9m^llOH= zlbLOWZdvNuhDa&)iA++@E|y1&mSX^ z?`1QOxTmQpS~rr=?Qor8=*~qUqw;$sXWtACS{Bq^Cq*0Ze}CJn<^xrPp%u)g&_@Z8 zmb;gP@AwUos$rcN>#7&p(%JCk(<3)@?ZO^EeyrV1+;){p(A26|EY;koQ3MZMq-WCU z@fmxKnDDbzr|m0?NCX*J-COz(j5)0x&cT@*;we$qd(cA^>H^(t!@G(Ms=I=#D8meG z6p96p3v)~`WRb~ba(0N{$(gMhUlnJSBLO6;d-&JbclRGKyU+$zd=T^qY*ro}&-rNh zW(y=OTAW){(UXr|?822|$xMBW;6b&w%in=Y%(udllD<_+hPj9{^C#GX4aw_L)j)Cr z6h{H{)rQnt0zuq(dZ#P|)(;~e9S8}#XAt0?H&Cffx|W$Bo`zH9c2frLp_bbuBo5yz zgb24!4wKei+YBz-4!6^fniTe7pR^`aPCMNfcruQQIJs;2bnn9yHu*ca!DjTtgmDZn zKeUCS(Hvbbb-akvteTxzsh;m7{x8m zz_K~rouQ21cW_PxU+2UQK>5~6vX9U=PcXQ+@F;SGMwWeak75C#`n8;SC3E_gGH+BmL!jO-Y${?Gj%a;p6;4iRYqkLAXIYmP$^ z4y1Ygz6VjST&sVbbvK5!VBAkoIFj*1B;(3w4PbI62CNJ{-IvXAei+kvKhHpzs~|5< z_xAXx3o>k%B}Ufwx-g?>F$XxDFKs?t9pmKhX1&QM!nH3hjxe^1yY@X#!*gcjtku*~ z3x{z)O#enb&%lybKxA+%5Mu#7o(5W9Yu{84S!0Tkqbki)&fs~nahlmuW58aB{M^ay z??w9eliDi?PPDVCoEDNQ3FFhMLUEzTHA+y4`i-113+n9>MpiLP9uA>q&eI-}Q;78T z@-LPxYjudkgQRgzHbv%^^UW8C zHK(7=o>2#T7g-E}_&7cyKOOEqXSd+vc`VoD*LWsD!V$G=8A$LTzv}Z~McVxV+3QwH z{&0gBR)~@8&*>)Y#1xFmJsQbTUqSmu)GiLp-^`fy%RpS~T@h8!TNN`dwDh2Ap57_O zBI&INe=a=7Auc!_OfpTO0_Lv?B3I58Y~vJjo?-^_`v~+u$4c4Lz)?PY)p^zDhn-O5 zhA_X6NmB5DTCQ8Cf1@5xB4`spaCLY<*hWqM#_mVzzFooAX`P2?U@CCQsfI@AAe7f$ zt$lSUwLhTz5X;~GJC<3YPsl!SJ$6UDEppPSe(O?X>vThx$g#|QbAl{Mbjc`_nUmWB zH6dH*i6~czk-R!?qki*b)XzGhd3WD~D{Xld5$LmQ9bP`3p7ldlRe_%a@&FSP8FRc# z(OjF|8E)^!NzQzUvM$xG0&V0U095at?(c{lr0W|y zynNECR2+UK_<3rovdYH1w9xC&z;wiJHft6OgUlQj@m(Fy!AH)*yhg>pR4^3UhBoe* zkmsdSSXnL|JH1<7bLE^*qvJthPh{*Ju7T*jrB`2(WkR*LA zf!8|_2iw>k8nzN4U zylQHA6o002du4`gA{9IMm^YU{3?l!JHmi@X*;a1%pYe_I;~Wr|v_Jjc%3sz{8MJsn z4rxKhKJ1$^>L#!6){EK|3W2SYH!{0G%#JASL*`P$pdzQJKLF4%dIJXyLGYjNKy~@xn^F*@cCk6y_Vn2ZPuYM?%e`c zW58S(^WNRRHZ?txZcr`Nz%w~>-n_G{J%;qR@ zT=sFOWbJUl+&tJT9Zl-OYQ(u@!b0GE$xOL` zxc8wlChlg`Gi}Jt>;1Ns?}Irg$o~v)3nRDDsEACv%96FUDE*Dkk4+1Y!bpE_e-Eitl3a(>X(KnPPS=Hy#K zU0@=hC!;=3Nfj4PVhBc-1L3WQX$JvcXU3@F{#H>^&ypO^U6jI>CKC`zf+xGlc*!t`kIjmuC;&K zdhUdTczApn6MOKJK5*M=rvtT@KRhxr$>=0B1dk3R(t(zi-_fDtzjABrV7WYWe8=?g zYZ&EDIS9af4A{0RoP!``)A9GD=gAXF1qvX09)eY)j@MlaY$&KtP-Ngy`TZO*+2;^o z0}*NPQe@@3WCVY^!Dl z^q))L5#nO}Ehsfb|N4cL3hSdi`oNcX?ij3Jm~+%$8TVGg;RV7qkLHO1(15eIDocQQ2b~O^ z(~D3gfJA&udwftxko+dqvz7->EL!||ZFGfwAK|t;P3mhH=p$P%>NJi5;+7||ZZ;Mg zi=b@>y~U#>P^|=>=A5Lb^xnj_@M86NtGEAedZ}sp+Q`{1k!fV+;lf{c!eV|&pnZd! zeKgt==zPJ$!eqyQGY?7oIQ6VvR{_V6t!2*6x<&c@PO-RI~2vNg9` zFBtT}s#NH|$nKAl_+hl<0Su&e?ShM!P0@IN6)M!ws&nQGO9? zlFb*3I5a+i-R?y+@JIdK)k6 ze+d5{x`QFjI}_R+U#XoVJcO~HUH{Ki>Og#eo()aNSjF%gFtsPTotBxI9KWYV^&6~y zgrSY|IA3(fFc|lkCvgo$*i@DNZr-UFjFz3Fx(&c;Ak}1eU1pSlTTst?+T6fEIa7`P zj+j34c=rwu9@$*R&B7QZonY~MWB2gf4%j9n9kndu?3nc-HCX;elRfy=UsVTqC*aTn za>h`(hT1wb7r=WLSWkGPciG&9g`YXOHh$Birs?^#tI$ubr~6UJgx9HQQe(b&kq6cc zO#P8h3FT|98ouB3`6 zvTE&5P!KIpn|=yK;MHTC_9L;0sI8mUDXo(Y@OftSi6G<0yT224%yYcu45_jV>|<(i z9>>gcOuO^V$`mOnf@zuHSe4FEUrYEjXgj-z0Q6zCAbXMmP)4CS4dk>vL+*G7CRxB2 z5IObZpz%|gHBH*kV6FIbZ(mlzsfK0GP=z zZ~q7A^&H`TO0a6+M(VPE)}v${Kl+m-zY1|kk@?5Wi+rWDSa{a^C~R$qfnV@9xxVlf zy+TXj68hkpQ=Q%Ct6Q#O0Ab3QkZS|AF=B8HJPWw#fL8$kNjN-4;`RL;- z|7du3>Rs!apc8_6@2k1YwvR6)6;ky3BC+gPr0W9+Ei#z#376GkQ zMN5w~2gV+LdBit2=seG?oQ#>lmHcy{3=V1yWt5V1MxWy1vW!XTC?ywcJgTbW8`fev zZOobyoEWeUEI;Zjp4it|DQ^s3R4(ZaZw2txsNYjH+@NV!dhJ@3|JCS5%=vLC~Yy&>{d(H?^V{JK4B}-J;DAum!4}f%;91vv#RD= zVWP2YBtn&n|MTavqWi8rd}JU|z6^LV;bydU*Q~ohbyhOCH&jMT_-1m%2n&-4fBV6( zyO)Rzsvh@s0>*%l^WeT_)@?1G#ORJ0v87w4v`_Pz&E31tRVosZ96GlO{=)3R9~^+) zq{ytK7QW62cAoBgYS$sBy+b6Jc2y$o)H`?s$Kh&5GU#2VKzyUD&? zKp_D@7rJvqdmDhQ4?2AQtVe$qv?c!`o{7wF@aL${N?d%F|3=Mxp|)G`d{+buX75rA zWH!VRs%e#_v?paZh0Z>zF=%aVmBk0&|GMlqim@tFB#~e%0LTKcFXy_`%N@}Z6IG7B zAlw1H%3yc`o4amLE>M9{EJNU~1uLT;A90Kvc88xGI4OH2ZVjUN{x3S$QDGhJbi*$mShf zf%}p)unWEvf?HCuQZSD~r6Ac$U=#_R_x|X;=2aes4V*lCkLhHujP4ed^06<9d|j8D z_}+!KsJV}i6-9j_4g!E`FplhA@PH=O(yX+5@Pwbr%f#f`yz9}1?-CEdn`G?F^Vt_g zOZLw`eCrh|OfM-5iJw&hksEBjA;)olQ7V^X)s+ftu>cK#M+t((&}jtBg4TnY0b8Q5 z9?=2?z;Ddar}olFlBgN9W^a5aYdW=eF*G;QS3^DSCgbhKT^}JpchP~@$TPhz1B0*` ziLFWCV}bq0w=(;amwuG~hm|Ux@PREW4;o<`4SEmaIZQ!<505%<*e?1xrbcz5j9dD3 z+jH>UJ-mAi5NjZ~(VcetWgAl<155>J;nd324$E?)h)Zcr&F#%Jt{f_-+_eVq!vn74ps5OM`k*eP)rhtihUQy=clm$Z=?&b&Ux3e{ zE4BTZ7-I`jlKQp%4X+-vs3WL#u6vonT}PzM=t)dLX``SZws=3%8O&dxxi*qlQFe5U z7NO7|^^tK9z;IAK2b2`i$w!A941pszg8^&-Em$~+|A|AZ9Vx-@jwnQqr;lj;fo*$` z$Z;y5MMV2+?mKWKYYel>n0%|S{t8p7{JWa3`AZhZtm(tgwh1c*9dAhi{0mnH=ox4b zg1s>K1R)UPmE#dK0PQH$>Y&pCk8(K43Qb6X=m{lz;Cc=ojMxvRNG(xwZBQLYO%csj zI09O}{6Quf3DEq$nj(NQOJ%Y6<`mHOgkRHq8 zGPG8JILhbGF2*bW@<{)0hVlGlU-K}poBzYuvHKzrGV+M`Z(!G`x8N&>1un>^(Hj*@Vkeq6@N!q(Y9s!oq)p1%fFV_t`fWORsM_}izZO=Cd>N*Qc=GElFy~J| z?!ug`|@3gKX~5*v|~b{A&5J_pRggvmMm zn+AI$AP5p?qq1`un6Thl79I7X;3e1V7a-g`p?cxsbO>gI-KoT|OKYpLqVDRcyDp zhnOsRjtBVu_^9N{_Du}jjdqMLU3vyKdQ!)_-T}KTV3xvHX&>t~28trwDpDbn}iF|esKNv$KW&a@H{V2e%Um?^~>8W}O(NCGa( z|8RyZJG#j|X|C-J(a-{$= zVc!c_R8Mc&zy2@>^v}S_j{%%;R<47^+|CCRl3l+aA@>Ep_el~x-{HIkju9k&;GwdY z2l=0lP6IfaLEQOLl8Koa(ykVw2_PsrSaTAICbR5PMD*eARIbz>%d?0mp_8hoiN+kD za0F!bAyeLM^w7|M{?@Qf#MtKs(ee3=qq6MA?<$`w&fSJN{IG2-ZHYm;21a?4$S8e7 zLqNJL>u{!mn;2_tq?P2(*S{YK#`CsVArYg1U5l~xUoYW2>?-+t`qGNtrhj(pU%D*x z;+BNY^)QNG+EfEx1}zwb5JX~+u-=%Let%i`uQ&uufKz*-VWHNM_1ngWXN^$!)xTyW z0XBhB;0M0`D%a*M_z5SSETTwLVguV=B9?Bu?DfBf^S|j0MFPp1_M<;+Z>y(RPR#Bb zO0dTt1$9ixwLr~Vf#xIoy+ZE{9Hm-SVn*K-#&^uxIXP4Y4hiARCeTZMovp#Uqm^{; zI97Wg*2Yn^#VRKE9DAmei^H_-8tLn&pR-S~lnk_LlQ4EB+pXWt_-s32NgFGb8@N@h zGF4QEyi+-RHEXTjW9m59Z7N-<-6kd?-xc`-D3ll*d)V$FW(WE+cytW~Re%NnXf33x z^o$J(1C!(q^LwhWjG>@!8S;xhRxfM`m=duZo4FgzbYBz@K}^Xawk`uaP|3DdzJcx&gB@z z>w+PDeA0h;=n?riuxB zCYoeBn5nnn*RqZ0p(A?+6jetyu=aOdBpLap+ebe2V-Z0L5n>lh$MWwz+&>4vn#=pu z7t`AMmYhszW(68z>A8-#B@aA4eh2?Mc1M;w`0+iaQ_&Y-5@lNK#)Yb-W+AUH%52w0 z|6)kCAt2OkhIZ3>D7WJDy8L*f*}V%{sLxnRvKX<)9s!*81t$D(b%>a@Dlw32{@*lb ztf4zwL`~YR^kK9`xz)hKD4qzg$~4!Yl3erhov%TZHe}e}c&&T2=2k*zFoSa@!bDD@ zN@H={b-wsD*Ih+%ZC6(Ndn>}>S}9ROm(6wj7+KEJY$p->?pDj%+RkhL; z@)Bi_SDPo?nG{kh3%7GL`y9snYq-2;iXQ9FD@nKc{G#&6mK;+HE^t#0ObfKPGvs^g zIC6JH<%GkclbNpxk(F!zEW&8q_r0PJuH{OXa}B+#7b7$ps>193<=xVXv})Ex{V`GY zMxK@-tPAD{ZmhuDQBGxeQI$FlYrdB^n)Ftrr9a`00xg z&A(TPoa>1-slzBF^5bWZ^YPT~@0D7W*oqAW18MBKNLD7)=W2N!SyE39n2gIx@yoW- zEa(z|Ph`y?rm6Tw(`4)Am@*HFvXF}QQm4+_addR$@V3uQ=AVp7)pgBVM_>|A}f@gRGKHr+z<(Y4D&%v~C za_;Uc1?CS;tRW^?L#j7hVIQD1*>fw=F0ksgsU&-*Q`_6mRZLtl_m%Bb4auFWN_%U@ z)8&_&->T>eXR>sxoVe9;QJH_V8=3RYRqm9g1Mis|F=}%^RLMKGhpEt~&p7t=ET1Jm zI(~LPY`ToSqGihI=rGwH3nLmj(JJ;gkK!4+;V#9cD(BD-5PU%s^FjA#nn`fvdK3#rTCX16I$_PDv zv{z7)JU~^C}R08g>sX~gwI)AoOL}pui#D^G z`bA3`*W4fJxl2b=25T0xSt}_O)cC8ko8?A=R|uGi@mA58aU6nBSQ(iUAHua-q@`C% zEp8xh#KyZU&T!#a6R+P1;itv1|0iV8VP( z#Q6x$fb8NEu~jdcrx!n+)#)gCX<_$W_-%e+)$jLHpKh~sh<_&27atte#rdoGeq&Bm z?F#v9x`sbOCuj~Gl!Cx383aIL(^m3hhN~R(>5o_}7NKvKFGzJHs`#d-TT&zklq2z5 zl0#^Uw$|LTo~J#^XcNDvBEiuqlPS)Eu3MDQjIUFckVNfFjOTwMVv%J&(U zG6#Jp#8v_zG`}MsKL9i>D1WcaOtW>}r8-WINi%$qG<#+GjTpmlS-s#fsKYmL78@=h zzxoI-T|ZG*H}Rtik3*uJJP<1Az7te(Q%Gd!(@ zentd~=E~9BjdA0i_zu>5QK#RRwOk1Ux_LuOP!$6W`IvecPk(To;+Q9PSTq7D^R#yLUawe!oAM!(`m($fXvIbD?2-TO#QK@eT-DD zWNdpy2oH(cB@I78Dq0iWRTt=SRd=-MKp)!G`Sk-|dul zy#73yT4`Jdr!p}~$w5#cvOFBwc%X3WzKqN|{dX9nq~E9P?CiX%vumC%E&|m-14-_F4~<^V&Ch=tKX!)9#m!A9 zu{9DSvGm7WAkXiVAj;lRQM<@3c&Dh)o#MDmTRnvq3+Gm~gYTNPiiY#$Z!UaWxcVvm zGw;q#SaWQxIB_j3bqV5r+^VK+bP;g)^QP64qq@?WL5?^LSt)8==eld&lfEQN)x*D{ zF?s|>vSQld<~}rY12z0nI|(0XjQyf_T6JK?`Ubaohd#XGxVmOV@iXF_&mqn8+w?+F zViJm5p4nf2U@XiRv0+Z^g7>e&XqH-v{T?hpn9AzSaza=H;bkfF-6gf+oMgG~3*IbP zk8Qm;Mg}k!jOo8cl!xeEX*gjSu_HTn(?rGLm z2Yq9dTi%@o^_(g9QxrW(8o#V`Zg!}bk7!6{N_iq|coH9T#seC8DJ8nIjJvR?DEPqe z2n#tTwC+LVTH#Gz1wJ4-JS+_*Wmi?cn4qY@pN< zR4T;WDzVIpP|y2dS~{E&0G1W=tr7Is0yP_~n?MBtX zQ|IG--r|-0J|qx}_1~#U({0&oRna;4>cI1TmF7?O>IkepS)(@a{oHJ&cdEF+O$fKV z8~1l?Va`JhR6k!Ku9!mTKLm?}rQ z3Rk+Nhh1mux1d|`iu{5%NS<6v3XA)>u!_$)ss=)0kDfFKSuF4x`zW-V$Ee**N`7Q{ z`XtGd!EGGEBz{cz$eZRWgh@mA@w?nYbbD_IyHYT*KGs@VkmmAl-ztclwsvw-g>LD0 zbAj*YKk0ToK$DOhZ#N*wHNJij(-l*|EW7UQzk7l3h_ID!9Ji#-WG39INPKiP24E7V z&KzwmWy~25W@P5N2@Gw$^iK8U9^ND*4_h~5f6ljMjbJ{;p5TvFS^6qx{Ie;9sV}73 z4gT9JAQkmq~jQg4s*iHc-cuEp`!e4 z?$3AA{B}Ef7AuD)F8B&wWP!uOl___~IM9E7$tdu^9jK__s~l{|Msl|^x%F@`!41b_ zrCpljI6k$^IrVX1FYORQI+@|r=d_oTOT;3xH8=;{Ej8C2?WUO+?GrN7(t?P88(vf7 zHuD-s@Wsh%l_td~IPO08^4a-=b(S*e?1x7H(`j>ab8G`3#PE%oI7yK_Y1iQV*&6KW zaYjd@Qg2wFq%*@pffun^St4?bUr@lL%Ul5V@6SU^(#BQ^_@3IMBz$)5AHJZNE~Pm5 zp7Xuxm=SnbD!G-1ISaQXXm-6ISxFW)oI-v2??k zIh^{8mQLK{7DZSPfU$?s=SXw}#*inSpP)ORo+F{*clmjpgrrd;Um-Qs#OVYd{Y+V$ zN(h3Qq(t<-s!qr_Pn$Ett<!PmE@_{59*1*AB90u5wyuKT!)x zAyRXx-?SimfFElJeu6~sXseeOH|rF=vj~>9+F@bz*21bG+oyXapHSqU&7zkSIEc*0 zI1All7hb^h%Td2EQdL+z;qx$ZdNVzpHk29ul13&RA4~i&j($w2xGBRMjyPgbry4sx z3ZcnoqhdQagJVS6AHRR}Ew-1dxIXJ)BF~9hqeUmsq{ZB8tCl&4*cBumTevgQoVn zqH+*%HEB;gTt#ltsT2Ld;m@~plUsQ;Wd5kc4S|`l@ja!am7mttUV=)6J4)w%U{&~pBJF4vC}z10zYr% z|9K^U(0GRU?@(3>E#m84*65O>#9x@hf~bkF7Zq3wh_BD&K^2$yiwp%=eZ$Yyn13%3 zE%X2Q60iLl7eymMjBhygNaqPyTr92RRxrZw9a#;DE88c@e%cFb@+8iPMzY?>>;Z$5 zAcSs%63kV&d1qNamhMm|8D;aH5=SQ|u6V`vDhI^YpuP)(9CX2!yN+7EfFOW;I#dvr z5xm)!IhnXb2bSF7$a@$AyTO@PFMyERG$HiF_MfjM4GvLww;EM@(AMwYGBI)O=A%78 zzH03a`~>84#OdeIx`D0J#HqED9Mc4`W6nZ*#8RnJ_ywAwgNZj{e!GtXc_pWOzkFH6 z8L8!?SiH|ImAuUQ`wY{359jCQ35OVh??D@3hiU6OS8}>SOj2CIavd zcks*Q5Fla!Ci{0q5oagt41ZjdDKIgcmBs$b#ygEPn`5p$3oSIpWPWuo*LT*;fX=*K zDd;R*Y_nIgsf_ImvHcZeIh>P;n>uveruico~Uz&%x{b{~v1bUZk? z!?1;OQ=;F`+VW(j9MsCc^>k!m!3Ohk1_Bj01tDHDaXK7>nKiIMt=(n$7@UFWk{XnO z@v*SEDHQk5!01tH^bbohUC2qDjKlJ#`&T3x+;=uF6`uci7@6rkgfVG3yM=q&kLgSO za2RRcD8_y91Qh(De2mkca?26QKkACO@2oR)^iNJB z*i}R$vk4=81*v$o;r4feFMYjW>3AnY-)lv1a=J zF(vzDgiYf6Z}k~~2ez;4vt(x2X`4lfla)AcV&vKXSr{|a?RGke?e9|8#Uceajdc2W zF2qcWN;{SEE9+)ysHBN3=k_^|U^l|CpW>; zYx$_#O>{3T%Wrg)Y49ZW+=QMugiffS~KtAqFAcgISGqIzx`Z_ph#(Srf z$>gQY3v(lLc9wD8t)BhgUq^bk;zT=M3Mq&4s^9J{Lv4oC?c33;76QrJuE|Qd zcO?BrXYN6iG?#l<1f3|)n#=hx?t9qA$(Cv%LozuVRF5FCO*isSCl|ahey}n1i~b(w z*l`ilkLj?xJcTY0aoiF)Z5Kp_9)b4u;>ba2Bk_logF#A5l=b&=Aqx?!0b%X6`bfGhP8lPz+NshBSQrtQ6KXQNg{=Q&%4_R_~<>7Lb>fl`-e}5?y%hNgFCUUIOL=Jw5Mx z%nzP^VH&M*+BUwPIIBW)zpUUC%=~)c+RZm$RJ~k|_&fi6TOZVKfCoG=_RB2ieh6J) zL0v}HjP%M#IruG4LlM$qkRr6pEw)J{&Cx5gb#f}k3Ot^$ z`A!k`Lcd)VO=1Kf0|tKY-50+fOd3jpZaof#As zQ)cY6I*O9tc9qt`N^L7^#+AiUjwjflc-0S-|8wFM{eM3b z|9?1E;Sv|cI?8_6I>Nbn+%cgPTU*54ai&flB5A7AT+e<$KKs3D1rmZ&W87w#DhFbI zYsku7s#ll`da~P=B(8D=q;LKn_>a*T%t!L5oVx|2OA93;B$ zX2OgwgbS#IKUB|Ak6x;sGY#Kq%}Np8&iT3qo}oGV)s7I;yIr9SUaE!C+g#-3C+ba8 zBW2t`EC-hE!1x%jF?-)L%+p}?z9R;BQ#&Tsn4upv9xHnIauDhG>Hao(rfBKAyP;v7N1+|9 zUXFS%VB?yLNo6lnPsdc$)QkiyNAXY5zp+ml7KtKl34}L5D-x3tFyvlYTRZA_>PR`C ziUfY^P4Aojul+-(Ix0$6Ym1<%IOAb8eRvo!be+C=`$YORbtHZqn*rZVxl4^7Y*QW{ zuwe))SmCf3Clp({O6JVQZqW>Gb=-~@Gd_OjAzSQ9TTC}7l%k`cdpSbHGC9{6I0jCz z7L)R1iL~}~*C%aAO~6~hy{}osbcVS!&_lR30PBwhzH;)1ZJ&MTbDer9ukN`GE70Xx zX+!YaX3$rk&qc~oDN!utN^S=R+YBWQQKF}($?Te;?a!I6vNTwzA5+hm>?eu2zGz*!Tg#OChhHB8;pyuI@!_||>ED}!yl z8~m>T$NrV`oh8Qv&4=f4$BqOQ8i!wy_G97Up~L_Dz2;Pu2~wi{2Y6f)kC>@-jMvFa zy&p<5R6Y`~hK%cRH*~PKw+2<1W#*f#6oa9#qQR6vOhRIL(FA}<(y@c~!syjXekH8< z(9LU#CtG&-Ao_a}Gn~j4MF4dKn5qW{2ir1N8w!-@dK$8l*#^6s6#%vano15B5AM`1 z59O5CYkaJtNA1yrv$MIY6A0fT@-h&+Ko0Ax`?m5oNu5nL;n_c#WvW9QxLL0<4BTxk zQ;7{NNc7I_{4TmCVQWrXaw<2%osg{AE?g4Ghlr`A5_CSa1$$p z5yA4bb$8d)E;3l4J8wyM9Y7bgE;EY0C)?{hvB8Gi?;QTy=WMQ_s;Y8f0g8F?31&~- zPFAwDv&+Y>+yz@Z>jf4F{sy+hB?aG--1Rp2JpHFlKJXAuB^+{+OSPb_z|#nM4q zZeT3C9b>(w+Gr9SeZ={mpII_FL5J#4_)Xyb%U2y+Bise=g9d@ijXo+EbWyMM{7j

FIL)FJzU>w4@TM1YgCbN%qZqHhlKj7!M*Fao>Wb_Y3xebAjsq>2w&xso<) zBavJl-Uu^pY+igu(Qocxu?7M-A=Wndy(CCd8A=|5DvYsQiaHsGCNLB`s{Vp^!i2t& zRd%$8a<|k?vp)SL5J7~=!jO`5JnHTjBE;HIb^`Ns?nGpQW*P4U;+FF)XavVwV9Q?R zoMb^io6-~4H}`e`=YJ&RsZOV&LO*MJV?Lm7j_4o3EU|D3eBv#bx%=Lin6IS(FA}F5 zDxmwv7k~EFEdBROj#|NpV+~@2w~7R!h?Ge~qh3NYoJiI5atP)JwVX2g5MS4|z&&A0 zzajg+GQ5+_l|F@DNV!lbxqKk^CDAQIhv9`9t%J#Sd1G-`{a(AiK%j(9e2o9M9I+l1y_Y z&c3W`Re<^Hx+i#Z${P1K2L|kN)NWja*F)s?1C#Y?NHsSoAb{hPfT+YsI(NV^9yRcM zK*gDV#=S$`OOug)G6jrW`kdb9HQ*P;8{40r&p%UKX%d!m-s`s;oe!wsLr--mKE9r( zZcr`u!RQY6USmcfS+vAyK(_E1omW?rCA^tNLb%sHL$B!2*mKc3D_Y$3CH3Sj$@7yr znO8rHx>t^cOuTD|mxtlX8bmkOCkok`Y=wyr8a{j_j7Iv zvRvdT${XoUg#I-)QHd~pU*2(uncqw#Z=yP4|2G_U=Y*km2kHux@~8WZWglH6=?}yb zyvcQe$g{ca_=qapoeOUFAY;bwl_a=>&FpFz#${7@?C z@^q1Z@ROp?6`$M5HD1O<*Wvcr$lfN_Pv`UOyxDLHOuZ~eS6br<`Lr~n;8S9*XDN}h; z`fp*Gxc2kr(F!k<90yT!@CkqB3gvfT^#D@;?|J}`|0xIns|R3dP;z@Nh*5$4T37rV zIiuo8G5hCJN5y)>+jc(Na(s&)&_c(K&J%hxPN|-b4-Q{3ay-3e%b1?mgl2}&vP^f^ zLr83=dAm67la-NIMsplaPSrRZIFfWsoI<(SZ1~T41UZnS49Y`3vt>>X_*&YDzO}Lf zHzBLM!sl;?LbmBtASc7&y~*SOmZpPn^oyU54wX18}=-#sg|{- z1lo#SEqx>yv#&uHe>DdbW&1td<1T%I6(GCAyiJqSZTMi6M{?q*D9b|QdJ8-*=8(Z- zT*4+^wBET6PTfgGb#bD1L_T!i%+9;BdjC%6!PDmGx zTMAuQ4Xs@kF~(^x+ldOaa6MrUG+%+!C} z?B3pCtR&nhkA7LxgGd4m>0qRSNi%OKfehRRT_kLPq6>!P=lHi$$< zPEUrd6Gbb>hAp@)YZ&$SWW*!BQA!QvPsB!?>!(=##6tWxC(Ic^LoICJf5S8@ZDDq88Aq2FBWHNbfE4f|#eko&yQJdgE@73x)K!d)1Jw#aWG-?$u zgm-Y-)1tAZL}TTvafp4%T~{2SUJ0ZQMc^HpP_xqviQ_{U`SfkCs|Y^Zm5(t8>^qgy zg*V4-5^&`2GpF=w5x$Z*ei(;Vi%w?0>8rTQgVIPYi&kfkXK++=o%PDMT5*wvR{NfA zqKm+2|6G^LOr_AvoC6gv0Mb=1>lh60IKs))%<5S=8QX6%w_fevkFpXkDu+F62elct zDXiE?B`_j-dBcEe*-c?IJek^sRsd?Bzj;^&qSeKe|1uutG2#jf)W^bH33YnWGsj%< zuE?$0U1!Zy;Dhp3`4{hI5rgNJF>U}gr}OIh{uqF2;xW<5C$t(5h?)H@ygs0YY#EWH zjy7P{ZtCx*b&fNjCMH)wn@7*GoyqkI9)!I7S9uLH*0do@rXnOR3SHAEEpiv zT-5wz7wbhO@4@NuoeyXizCZ)aw>!ox6DXF6)aKtJE+fc8CN(H--?-Mt0ttmx@&(d8 zH`(oF%Nm0UbO1b%635XNPFDyyu-$@8xqVvoXII%LC#N%FE~(|S|4#r3mX#o2 z#dG+2I5l&WNY=zvFhv-_x?P+oqR}J%*=;ZA8Dfvo*cO3oN%h%!oGnEn?;FS5Y4khV zHnRnpQhyl0tgbCUd=<8vVIS={?zEkS>0sb}JkTl5h%SAU zjw1tqFZF*#(nz7S(^!y#vN>>m@mRZx%7R;lo#)c`sS{+N-UW8y80|Bm#3>(-1u*FQfR@P+TE1A_KIi4) zaHDss3r%2YVx%A1tKaM5!ITEnf; zbitPR5SGhBJ0v{VOFcByp&%(wd_oV&nKXNLuka&g7A0we>cve@;*km>cMo_(SM@3H zdtk)4=?-v#M?U-M?kFP=iAMkx;eMdlrrQDtXEC!E&dduN+P^LBltCIYiwEyc)K``1 zVV^H z+XBz%;R|}L{3V8nJcy0wzf)($RlLEtnt<}>Il^8Y@wj7 zd~5^@VULQes?flK`;XjKL6*anC!Cf%OUKGxq?UR&$B97-Yqa8KuVD3Ei|lza!Lofb zYt_JD#PaDSUDLfQ*k^f@#Od3^Q`hOwGi?S)I{1gn2C0%|;rz4GyDB5^$myt4RjdwDK1 zQ(nb(1eqN!u~t$twr2%vy6R*dek=e))wI_g+ocsvL@( z!x}csna^Ev!wLX1XTn@!aEliJ+2clui+ERrBtj6G4O+lboAi;eHyTJMGj12l-%y~otjDt9IJ7xs1m z(O<7vr|;oMz-;Xs$wWA-+~^;bRa0W^{I}x-N3N9v2;Vjx?jj%fsdti1YhIU|(pNkd zltiZmO>wh%T%gc+H7QLF$b_??LSe}zi6 z`xNXnzf~6c7OHKcG2|^EDm2wow`Bk>x?M?=sRDMzaeJ6A<>bB`WtLq!#=Wzu`#wWn zJ%7gt($6j*AuB$82bmXMSiILqQPr*P(A zXF37^2X&{hlkjaoN{;LcJw?x;=dTI@``0!5hDCxEPcfTb@z^?H>c%eXpQTJ7kX z6!l0l$VRQ4=n{%snowr~7qbS>9dvt;Q)p9;tje-)0PE7J6Y^cME$Q@2pLPLp2fCMe zd+W71Nc2NI%m+#nJ_h?4@p3OR;h@l<0^4KSa4QoRt#5Q)tx-Q%9-H>o^FH`DBCYnM zMcom?w?gW^9V~D@ZBclvhD(nfk@|ZrE=ly6=09hyhH&! zPkI<@>>k#wtwbGn(i^Z0D4%T=D^e~eSvS7?t_hRO!(Sb>Y_MHizQ2Zd%CVTl zMuzY@?ce$Z=$dRKUR*hJW|1@17pk$j0_!;NMfDDO0)J>M>>{+*NFMsOMnm*UWe_hr zf7t>Pcz53XPjNp&w95aTUT=Rj5+%A}>*>(N;CH?#t&KvDtV9(YkeV zrG9s>ny_?_|6>ZXy_K3v2hJr(dSKyAXGU$)MiPM6|lVrP#Smcb*n?<)v*)rSZUsKApb-8kOek_Q~ z+g-9vHr7qLT{hNjx;41Isn<{ij2_+?wV%MvjeKE2*Nx3Xk`|*LRTNd z(>6Xk=Ub}Z*5MzL+i4RT^!90#aiB-Rr%^r5ddfqGM1y61qoBph1`^E05tMv8(IE8K zv(&Lj9}X?~ys&F~%Df4RZksVk2BUkNd1LZ`5YbY+mS6WrUst1Qt(fY+Fx*2lW9YJy z!)qR_XkEaIm*^53Req;lIo)=lmfsMs1Y$eHs5X)X%)V3W4@xi@qS`W5ZniR1^BPhM z6u2_}l@{VicNrTJO6YeNw_dU!SBW7_!Lj;ItFOE=ezqqZ18{5$8WXy8V%(m`)oy zqLvUfDR;M`%dWvDx-Fg>7kZoa$LDqKoi}XbTb4tR24?m(HJpt$c6AY0!>rJ1H3nt0&;vFLcM?vWy2CkEnYP$fuel% zFrmvK4-Lo%E1wR8J?$r7Eo(50_MNFpNX}TyOeKvRw^|JZhP8H&u=Nr?7>JpX)xIH} zk1H4`I$A}2iTYd01I16s>NS}7#Z=QR3^7x%yLiTPyijbGRr^i546GTEP~{5ep~){} zb&=#r##rtjDkc}cCx9$I%}Hfxs8`+Gy+5no+EJb=#T3#5d8Wdu}exNxj7pjL6EPsrNMGfb1 zXh)?aST4^IKSvo@k6=KQFpp#YEDx`(7w{*vMT7uk$$)V>?jWptoi^@ZwaEIcrtd6e zwV(^Cst;@e@Ioea-bv|WCJCk^N$?oeOFz|yu_)9jI`DI6@YfZ1?+52V69t1x>erb# ze>M2f=?%0|un{9T%8xYn5$P2P22v*S)r9p6b!y@tb(t4QhH@2M!7L3W?9eRoh7(!G8whk$^RQGLWvzT)t_$j=C zQWqH9x^M|tm8*na5+27|s6{N0Y}RX*Uy3^o4)-9wExMO#GdsD^!v>@cXs>R(mEFzb z-9>%=VGsZFFLeJ3mh=p6`<3>Zl%1I#cih0G$0@b^Zq|)69WnaC{C~u|%MbXY7!tN# zp3lKrP{>6q=W2HHh0a+p?C1jKW0lNcZuPyz_p{*9*xipy`@`LfN*rWi!D>n6xsS4u zbGFT-SwdtqghcN)JaM-Z7vtsnR7QgRoL`ov-XgwEEOe^6RQcx|E-4&yGpgP>I7dPIJv7H01#=fKQtq0Hut)1}U2j>$UwAK&!7wgeP z-naGvnZ+l6ama#>>dvQeiW~Z9E|UM0EEkp2W(cOQf6D6E#9JN8I^?ZyxLn!_MChdF z8c$f?Ac!n1Fo;~6K*{dt2BnFSNDiLm^@2n7Ikbe3lYFpinVmjUktm;j)x|-D1eChE zYc56WW_{}qx0K^$z-1$1Y-y+^+#vn!y1UhD;4v& z)p6|dUZ6i>_Lu+E&;IXF%;?$9rj-RyK$5>trdzg%YQW^SWCSkB`Okp!yq+|r%Aa%h zgao3d=hoSJ@dzIKCr7b<638E8j~jadR#55o?uGkaoWf3If-oy#kpO5~9883O{(Yq@91vDRiQ#A849* zM_7+7u!i)|cTdE*ih8BTwW`LuVAD)dt!34`p$c3)iS<4`%bEjc$aw68LjDZXdU0*? z#S7R%`B+Dv-uvW@yuaKqMx=DxLMI~?GxskX{QTvPl7*k(^y^0)%+%9z!yhzhgLfRB zLzfC@KdEY1Ikswsl}_Z9Dd>N6S(g@7osJVKsZ(eUa$0sb8dMua%9|`>NmiIZ78&|( zqP)gGJ|PKh2_C+zuBBu{;~}62^FdXkkypm#4cyi4^IH!xHJ}9}&2O7GL+d~9tM>nC z1=f>Ea$Mk~UFhVLMqRAV)M5Z+I(?qLCSOHAOgpN`c9wB}F`>76G+c*7d#f3K4SM_# z2Nj(uSKm^iyiNLc_VY|g^LXB7D_)s=uUTI%$<+UNcI!nParK+3q8H?Aewxo#H7-$O z6yUsMaz|R5X z)1P|6!3^et2KaI&b`~9&CjIXH?Z@tejm5%pB-`?Gs=_0*vzq0?D@y7)8x-pk!&U@H$#cWZO!|5`2<4rpATQl`RCkvMp{_?uS491tKJ z{5*W0*#G-{0)ImLp9U8PKOg`9(I>#p@&D}OGQrC4-sZ7NO5G8Q2 ztRpE!p!!flUk_unG;bTs0Dg0!@^5`#^!xpFtuBAY6n`1%tjjDjWCy zchI0x$A_Tri|P7J{<;;E^obPxQ`gS5R_*+JHNN-OwMe7v8>G+GV{ZYJbXp+LW_)T_ zNFF8utMS{0vY9wF_5BmUxepW+=sWj)_Zw7zgO_y-C|eSA(zBtX&i(0*9CS$UZ}oK; zN&*F{?d+oNe#zg04+IiY{)C%O2@{!*tecN8WQ?w9jG(xQzK#j{QG?`xiNV+tMmiE^ zpbSgv2tpS}`y-Ci@JTQ`#J&X)yh*nj^2CO$B#Jl(A;#Z?VWvhDllY4WlOURm=_*0M zF2xs)w*B3M%1?#?J86HDH zEJqQXzcSPR7y8l93*|-Nh5w}xQCz}kK!HZrJWQriCT%2qghZvTw2eW_CFx7+l<>q+m+kRgI2WR*u>b1*fZE6*z`12 zpXJ%vLYevld(BQPx!CR5iZft~>E>cGMwm@rM@UUsWaMNrW#DD^wNk1wY#G)r)-CZ?<@8CQG`38!L$Pw|qk%eDo>%m)^bA7$OdQ2s zW8lMOwVFPW<_d+z^&YE#%>>W=F!rt`+p!d;DBtS`~emoMjR;D-`^w?%0sVIs-IT*i??MM1Vf z*IV6e*n)%}I?h1~Ahj`>B+k6+>oo0*o^wT$1zFU*c~L#mu+j}u6%t<3JW?!Dt&;PS zA0VV2(jL`?rv>i|4ooY|#>^~DE6v8utad7P&<7_6SBA8Prs?@;{?K$NxF}R8>C0Uz z3S=~7l4h?ah{;9Bw8k?fWF{}?6{n|W@nlzJ878w#)J*VY*Y@0P@>)@4kZ^j#%8Rxc zvwePVqqJb&q~KaEu8&YziZ@cyH|`bk+m3=W30ZOx|7<_^6hRDaeGtF&{?X5`3_TtFoeEL zE~LR?n5!l1I&!S61=n8Cvi-6(8RnpsslGt*gLG7Ys^YTZs7&*huyUs=juEG>jnRq< zy-{|m71#guu#X-@Zp!;nalm*lZe3U;#?JY{deyX13!#a-BiaT<911H zJ-OA>l+#pWo|cFac=RvxnOIws%LkWXcNA|i?@-njqrb0 z8Q)qVmq#fb@1wNls;7*i+Ii-iTh9+~;*T+&e4oPXJyu&>=N|TNpw4~)|)zf zx6lt1?+ohO4T6hNZCD|SIW_TxcJozAU@=B!41AqU0*g)aSZvZd@AvwzE{M(@TpU==3 zYZ1^uaFJDzMA(5L!9)CjqP0%*Z$CFjQ7aG#HW2`Gx}d9fwDZ8VL9!B}>K@A{FW%|Y zR-OkK{=>0mw!w~Q=*C>aKZ%3jEX|6ORr=mF$&S)sV%S=J-ijH{SVChQ>|8Off=lar z<_o1$mBHsQ6)deo`q(QQj?BAAid{hkLsxSaF@}kn`tGc6@xxAyTUurB;=cMhMOgXq<-b=TMC@miiJ*6bqdDF=xOVTl$~n)zrg9UE-Pv5MHM{>)A`CZP2k9f| z!nDe9O?B4?yPj`j!a{|bd`hG_Z?Vq&?MhZ`Ertmzbih9i1v2L#l1bdnS#cumfP}DK zPg&{U8{XEXc^(|zJ;2Vq&oS>bYA@u5qoTu+%1!gpO4v5F?rBs!SV5vH7s*G22I zgwf}EK!YF&aXzrmZfAVx>o-;I+^ZOfri3nuOG>^+Y98AW^o|QUR-(9r`26#(Ik&c^ zmV^=uk}4-HcS*K)7?Rrb(K~$F+S-t#IMn_xGN)ta93y+*)@#+7;QHA*c3Sn(%hbmN zwS>sSs*cfyfsWhZlPOY_p-ZY^9v93VHP@Y*KfXdLAP^Y!Xf~U?mQ zED`T~j@_ZmkneNKh99OAMU~_AEy}RuFZ!63jt8G|V_!|bv<}6>t|C{INb+p8xW4XY zq2tEO%eyu?sX!3W-r9OdMj$zpVzK0E02VZ4N$cDR5$nZ+?FClhHt~_+&eLgRtIEsQ zH!_Po50*#&cN-#?Ml5LtptIZCrsFo6je%=Uxg{`H<(_X-bF14YitbvYT9sf4|f15f;VlFG!kb zD%4T5o~E-56t(C~0|SGAKvaPvg)5mXM+^GIl+u^`(K}wT1ga+ayCS3^Sf2$9!6_cW z9QgT{W+x{WYC;r8eOb0CLdSHqj#U<$OTmT@Llia2p5rs-RbPIcB6tk)F4(mXA|)3h z2DP%X!jLx3h6>YGC64($R_YgxY%VzT4L3^iOQuxg=Yc=JWrqaGVA5ypb@0Enl9CSp z7{Ov!i`KhE34!KPfB}{JQ-vz>X3&Ovnkeg(*jU`h_X?PJP}AC{M;81of^!TBA+QsS zoufRdV{R52Lg_{_)&0+1UUcJ0in62ymzO8KGQiFdB*puRV#ZHeCXDZWIe}(ZZyRO) z{gE@8@_&7R^CAj={C&$+76kNF!tHOXAFHe^sPlpvZOfuWoVwyN=ju|)H ziQYSC>NHCcMJWUrU5Od#S^AH^OzbxDa<_Prfdve^9W7_avBxPMQimil07j8{0Kjh6{d@KO; z2oEnW{RFih z*zV3Mp+b{E?}kV71PkoAC64tUXZ0V)W6Jac@%_J}|Ff{CJWu>2U}F}(%9!4)etWFG zn6MIdp8b57b?$ra&3BOP>^Q}LAn(QK>-_d|w-bcIl77wcxL-R=E>43jDx8;ht?IQu zl0eP(bW%^>8BNAM{_S$nEN*hQ>)XHmlk%Q-f2PfFHiRjK>U8n2c0k0QXDD7~ex}Xh zH2BBm>1=er?JB*()@s`V*F;+GrtfDq%6d85a5k$E-XWUq*-JBu-P_xfWi4{Jd=Nq> zMbaZtyudyG4ZXu&= z$Kd^nPfvIE88HXoH#Np1EfA zXVZ?~Zb-2He*H+IJV*O~LI$EK)BpAT{{n~H|L@@Pzw!G2?_n9Gy}D)U%9Wb# zKG~GTL_maCe@8^WkC$lopN3^bUdBL{CKKM5%zXpI2npyVTl@qWSP*c)4{Ktk6lBn+ zREynjt+M`FuroM-%j^*6P@H&Av+~~t6;4FW*UV6J4y5rq$L#?m&?n)%yV&ZA3QFP_ zui^J8a{W$0>6S8G5uRb@+38v`P5*63(wWw1{?hn2P$0|*3CyTLAtj|o-NB(D_*hc@ zZ89T$eTg#l%xiZ^%#Wg%3KN1fI|ChJb^mQJ*HH&^=S}bY{vi&`ss|tP? z@U*WWke;4ixK!c#IS4pu$4+ll1Z6SV|JOq&bfIb5=hI;$DfLh%ATEHxwG9n_=J@ND zm}4nKVuKMdw#VLAOBAX0US4v5Tsj!OHtMdJVSK#CWF9YQfGc=ULPBysKrbBV;Crk` z&Hu)*O9JY;>pXv#H*E&|d@~|v$JxE|T=jo@p%xT5-5Q|LF)|va7rsCeg7m@$m2vckr0} z`N|EP^k1Jz$B_@t6iQ=7NC>?UuiDo=}6sj*u9y)n*RWW?q;dZ|Ula)vXLAap;)wW+sl= z21bPM+pdf_u^6XN0m;ykRbI>ifMj2!{%ci&GDyZiD5gPslz%-wcK@*?)c%Z^5ajU@DP zs6-JlmjK-4tVE%TL}A)?FGAkQv8%77_QN2KTTtG-K;BFTa}r!GY$v{uq3Y(>X0zFQC<@r zd=~=;j|nHz^kSrT9S96zC{#b&CZD3wd5T<7{P-RagiJE&TnvW$`k>F+j;j)UgcF@i z4c{%%?UMlwVm?ofpr> z`Dzhl$~lMVAKen1HyUOF#6>>lD$7}#+_3t)`kdAwXvO-&7Gjtl6B?F&BD zGF$)%@-^G7jF@xes*K0Xo7RQ{KuBRO|5$)|T&zsJ4{-3piPJLwFCP&NGj96m&$-HT z-)OWlbd|SZlo!*b8U$tR>WT*pKo~k1bWfxecwqsUuwKN>q)~&8*MC)*KYZ}C{#c@z z(|2@KewV$sX8~+6F*Ac{)I|gQQy2yX`GLE_b%Zr^-2|*UE|jckoFIC<98^#bD%idA zS5US83!g2?Z&$1)JK&K3R3q~&X{-R%62uxw#XKHFBa11C6+{UFC63Z?DFib_0>Je* z7g~9_*O(7a)=e%7s7MtFKt^*73EW+j59u)9h!3YI5y*9FYI;x&RAALp7&nD- z2#g8B%Ih{1aFjJj0P{(;FtI!3@p%|eTgapSglTThapF^sOb8!8iijzRR*aPG{|bjW z=n%W>{q7;xzyo)qj(K`F-B6=E!hsch8KjJ z*8a7?l}Y^L_(7idf3v1IkUsCEx~rN(X2_kjiOfE^SoK7^^@Jo{w51D!ty2n|p=ihi z6(@9wID2S!vU2BN>;Kkz|5utKkl_`I+>0UfYFZ>*`vi^e<(k;=VXV18S^K*Q;r%YX z$dY@En-Tmm5MfeNQ-M$w(S`blO?$@fDcd7A_Y*3-(z{)iJU=H=gjW5kqPZ%&6~I6e zX|`;P+DTcxmvqp^TFc7~|BN)*EjGn8cfZV|CC~&I&bDYf)w*YW$u$SfTHf1ke>`xo;NK;0xXqYN%;G;->sa`O_|bQiHI*c2T?K3XY9G^ zX`%W^t&VM{j@w41eu6Ftvy#IBy3b0}#bugNoc~j^Q4eqTgMrW<<3`V1o*#^Anbn`0 zr{yrFf2rCLj`76N?f{0!mfgh9j*o{WcQ^cx9NMh}fQw>g zVTrxSi(N$0hXQk7Z)zr?NTPY8Pq~cI)VPV!0+sSUhnUph!o0d)dG^KAYz~X~;nFL`P6f-##~Np{ z^ibu6ns}5Q0FEz3&XX6qpN&!$+g#^XK(<-@E4?}Zjt8oOta{ArmzvP!4eJRy8q?_@ z%ivc`k+&;p$dT6YCLj9jA(we;fP>GD6RF7SQ_E5LFS?hDaHK@JqD{V70>ZCDP67I{ za9{h>o!4E|F=79Oo&Bth&~er`X`$Oi;@h)ENXJ1Z`fzL~8mmX|yvN@kk{y>R8-bLF zi>pG>Z`XM)LdQDIoq z|H&H6jU8d^=}Gk9({<`-BJ7i%&aAK9nlQ#YV9SHj&jxs0bDhuvhIk7i;L&%CJh10iZz6wmL;w~>Ci8~5o*#W6Lka`ZP^cEf`1qqtU&!Mi3z=?j* zrl|HuFFsBkw{YOxu)ghWFkYE(Dr7hj*yXKjKl57pnI?rvU8wsJN94XY1K>s2tp;{% zG3*p$eAbT72G5_Ti1<9>C23n@i^`b*XR59dQfv)cJXT0L9SwnY9K;jpvoX>euxtL{ zea9^OsNu5-;~z`VeQyftad=tqzIX(Sd@uQUdS2V$0@KuFpLMMzDjzOS7yOy^V{{m~ z?mz#}5ZkSFJ*mE?`ot;R==?`7omH`y^n&dwCBp#TA6Y>?ShM?M2v zvWWnWOggqd_GNW?jrY(3TSAZd*9?}m&WYbP--){-&v>pCq5M#**?!*J0}0Mqo;Iw+V6wcR6 z8IS>s#>dBp6jB%jgpogb1Kl~hV(&#RRw=I1UI&(I<40- zr)DneQ&?vT*tef*z?Ih-KJ(?*QV-BD@!7nN|V{u{dWiiEjV zo-^msgigJ}3ME3{_n6%xnr!)gEw350s-cdJa4&3}brqFRnOdV&I$KttX)-o0AT& z^cB^d86%d3GIUC&0LVMYeKGz9bdxNcI(750h`P-7hPM5*LcLb{|7|I}b&Fs=8Aqlx}`-;769^pI#yL{K>e; z5W?$?R2*Geek7^aiWBhu$%hMNzonTM1T)Xf#N+pkY-ftR(!3p`_T_ zuoCL-D=RZ|zA}S{f0`UE>++a|k_s+>DFO6J7&?Q!=OBeUm>MbuFs*sqQu{e0-ek&>#jq|7dd>m5b)Ykg^Nv+i%mx#hdy(l29MS< zKTW0P!)U4Wjc3*Ah&TtNiv$r_JUg7NVvG|5aPP2Tu?C#d2iu9BS6*AwQx#@;;Oba0 zQBhAF?CR?aaJpXg%s3IS<~q5*q~uq%Ki~(dAAygtC^q-A{NaE>=#Ihg4VV1El;S$D zL-0e{7)xDJ1pvTpX}4M9dtwLC(9Fckl`w=GCqZxvpbnA;Hi2-oKEgT|!0gm~R`^-e zHPF_yv!v@~62Aj@YW~V)*<7&KD*a4K9tUmhiSJZ*5@+Bi;=&;k^iz&>hk6Q8?I?|4 z)$z%C5rdx^mm&1;ljJ(PmGOO$_7xV$APXLQF2>@77;Po==i3_eT#lntL;+4{Dp5LI(#WN%_A4Y{swon!36mxuT##={UtlPBhf4rBNQr z6&}j*ZQH#yhLBR-l!R{S}uo`$KgaOC+K<=ZgwK|@QAmGuBHidU8_51TA zr&5cS5-vSX+X3>JkO5|Uj4^Jv7Ct_)G&)=Y4bsYFWnM&X!k#9rb=vaT0PYT-yovwA z`1_huz5H?}+`;bF3-3g``X|zMD;;fZ8P6g>-4PAX`Jn|SM$oKvhc`!&_oo5&oNNhQ zbldv6@kgiaUoB5(6#twul=0HnCEEpORbV0k*`LFzG!TK9yV1Z#Z?IkWgA|+X8y``s z{ao=Vo;UGn4yo5YANtFTHGj0?^!IoB#X@r~ z0%(0VIwS@|Zrk{BpzuW0!}k?Hx`^aH5L zzXPeUJKskD?ERW&T3A@<$ZVvnV>Yw4Mv{&tJ>*-l#*eoUxlsfwJg-}HACRG}gr9eC z?t4mt=xT!E0k?c>f08)xYQ%8QEvP_SX15h;r|dMjmtOOWsU36M>1}l1;5X4Q;DrFpXrKeN z>Hl{AwsyDaX?pEgl;eJXP&4(0?y~j?Fhqt(HU*LZWLXYMM2@r8gBy?AdWzw_v^VP8 z^EcMtu5cNs?JVXxJuB=C3ASpUtfh@XwtajKg z>Dqm%ATVr-w1UFiz}wy13(@*jZrYA(^%aa{#dTQ#K&fy}3*i)aSmu+~um_mw_+_?G zNQ!{<#Ouw%RQuZJ(t6t(8{t4dc$+1t0s%6nva&LRTiesQXlN<~AK4PhgEnCE;~&^~ zC}pL26tBN6n@(ma-Zw3(W5>dtUy+o`wwa$vDfI_X1KgzS*t!i;ms-^rMXbn-6KXa$ zQuo}Ace|av*o8bLnzgTaeK?dYNpjoBf9lw0Ar-S->@$jnO|WG-a)X@}iPr}Lsv`sw zIEcDazn6Tvor`BqKT|p(Z!rt!jaNxtu!#i+pV7=twVz#jtJ3Xk__vr^>ZF3r0^@3D zUAygdRY;!?^KyHPUgoa=x1!XmReh@mdXhxNeMg)I2^-^C*yr5gTu)S0<|JBZ_ zehPUqveu-=#dsIA_=QXRK??lrK^g%6$s|%n`4GeH3RS8EwckJ11ayfJD7NIVvk^r_ z5{>Mf`L=&r>3J2YDD{bDIG0uSjF9@+x^)7sW|m2(u2$dJTh#m^4AS_k^s7C!ai zcS~$dxF%DGm#)ZDR>_rfn40rg>`u)M9NDK3=qK_l8znWyrYYmyK<@`x&rFAw+5Wr9 ze6v!WTBOt{$T8L5KaQjb0H-2rYpWmF*vKia_B#lS9%i)DWG4=GWz9JSf~`zR;9d9I zDZl`dj?|&ba+na}f8#G+J@hIN4!-mR8O}ree5Tl|m$o4f>p5R{y+goFS3~v$h8`vx z!3Pn&TXU$O%@EcOVxz~|w3<$XTd6eJ#P1<+B&=RD)!QT+_s%1i3VbdMLAJN^pmbaR zzv8w=Cx05)2@x@2*V$cX^K#QAgK~DoU65+ZInE`dGhEu)8Q(8zz{>j z4pTCMx1mb-#6>Jgm(&YTsGTwZwL4gAHr#PA!8F-uR%~thFn`lpN9RMGQV3$}K~)bR zs@8mwKCGMy^lbCplkkF$H{7Ejpsljt2nXmY{;w}0$0mt_bbXb4dG8NNSr*8+9m79UzoL9V~0`kGPY@O1p)1&VFJ zj40;adxr?ki~<}`0Mw>IDn89%8HvQ7zpq!_5QBct;#x1pKm{M{C{RRP^s2R2ciy7i zpIEVq|G?~jI53LVJ&oaW`72-jo=Y0MWJt2g>nW`!nx9BzdJSRsT|3$c&ae#ay`9=$ zwp=GH4jW83rL)e( zd({ol35eET^fbJy2{dp&Ie9e4ud_DTrmjt(_IDQtnG))&ja#7|e_1H|ouaoT9LtQ6vJIxMzv5p*=nkxeh(SWty+QZ#><(A$iZta=6-TRe?ZCq(Z%P)jCW_V z_wx@1=A64g1YBE(yeR+Y;gaoK@3Y=O7$ZrRJKvvkZv7pn9ztg^vU+;ncuh^u92j(2 z?aku6P}M)M;tHgw2(~(|6z?oetT>1|jt%nq1lO^G%i*bCUl(wGuAOF*l>fQTAmjm9 zM=phGGgjw6cr`V@z5gUxslv&Y=*{^-ZOkY{=XRkj0C7Ukz7-BAT^I^X1;QX$3e+L9 z#cdSBTY@ZM4tqeH*jX_=_SphA6i@-^ma9Bw3wd+4j>SvtvbU$~wXh@b0W`X33oauM zYQ~|?knQdB`3l%8*CrGCCS&QN8EUTg7A7-a*QGwBk1utwtynI=`$vbZ+!uIyHJN~n zx^VAHC}1|qpsaG>HqkdPhL^4k{V^OTX~m!O>xUDlmA0E!azjj=uGbOQw=$*uyogLY z%^WP!`c%&5&yV5zy{CAMNP*C#zGL^Ax!!(V=U#i)XoMWDa6Ic;3R3b z$>VX(Kk|KbN4_695 z=ZhW|(za3`c2Z_ap^T&gD2kyKE}O_dPu@vE zO3~1{Q27jzCEeq7CpS==t`FI6dwff_zoIW^*e8z|Pjhz6q`84;f(MY?w_m2I?_Zs^vXp267w&ky*^T0dGh&$8A6RSU+2{4~6_-?RhQoO61xg!ibuu|iU- zLFZMVxHb5{-b?R^ z@EjKBT@y@Nc_-<24PyCPvnl%QaD-2FRFIn>D+dP7nV9Pr@ZEYk0;eLw zO(Y0V@JON2o{9#};Vd%FPFkIt$J&*lMAM!bI`T;`bB&)pcXzPl=f0Ph=YAVRn|J%i zZ`yfQ73 zuTpal565;~gnvNkTLcw(H^P_!c|N!;_w-#qtYOy)6sFPIA9goMGK99r)%<2b>kkJ# z>zyZ6#RyXlggrm90^eSJErn8#hG%bfn6#5UOfaGp2X}h3Yj|dppzk-B%ibF3`1ECRD6Ir_vc>I$y)4wD{;&w1r$Q`oebl#TUb)- zSjFPyjm1#QB;;YXKS?kkQ>LOGRt0VcoC+IMn~=abAtU-6bbmXh!CA&2$%;wHl$uZ- zG0&i2(gk(7PzR?NCjFh2GW4s1t_WkEX}vpY^w_7pv{MS4_@`2>Cmla zt@Vw70$FOhv?~%4Oy2~cNY(M|w)>6h8~>YAZs~vp-@ONf{S1b_I1MPO0%+PtIF4F6 zmg~>2s;VkefKq+`{=Kg&a@G9TQgtS~I4!1>S{L$Lo_$o%aP=Hq52`A;@7`l2+(tff zaCd0Gn#S<~LQk{=)O%v07_)kHwAE@JaFyKc8 z3r2@0aA4F;QkMbL=x0`-{Ku);YEo|9RR{-hrRsva8igJ}+ybQQjohaDqC>&xJqQ#+ zs2Vr)2%s1ZF`*@-FSc&TY>k0UyNtu9!7C2kYir&9{wq6LM!t>SPp8f9AEyiBgpbx8 z`_ax`U!K-pp6=Sg`pz-lU;}s0;pV2MRhz2TAwj=>G~VlmCbQw#n=2EZAHv)aNM`m}w-c5TRoDDXgKb^R}}m3bSqk zogC!Im(!$#di9&uuu{E^3Pzc!HH>Lg}dKhuKoj;l9p>tn@wU1>*Mo12$5R#vLo zm#)oQUkxJ#-Q1X1JK2yQ+<;I5RD9ue!CU=GEdWMsfATkJJ!uR2{n%36YF``7hL0?7 z$W?je44lD9#r$#^$*;8z4;fA?)dE=DvqUlo!&OGd8_qUfR2gvfWfKL)vdVev zy?vhW1{YSi*-ddn)*QGdUF&t0yW5okxtoTDfo$TcYT2&617|Cm8utshrrOgvY3(** zv=+znP>{9-2dJ|i9eM&%3Lx;%D`p2+=l~iDZ9ToK|4BLe>X@_noS*?#^&On2HX-~~ zsCRBZHYDOnB(S;btnxJ}2#V0aiWN{44tc4gRptb$1#WmM%Z3=GS@V*CXENQM>*xcF z9-tw&E6>9olNBLDZL=;f+5UIbo7^H5-FaiHpY#0coO~@`4wT5Dru3?nQW2iyc>-8P z5VQG~TT+exeo9?>P<>~!U&`cdC^XfFF=}ojZ1Cfi$m?W5;Jtj553lnuS=^>ZwO7SW zKvlhei5p`}j;>^LRM1hI$VfC;+l{y-ZIWZ@E4Ym}ney z!cBnOF3fAMYvEI3&cWO^(0Mu8>$%RKVimaJX0ycBGqC2g==k`p^+ZxdLqoDm{gO&= z;2M||YuUHswG~6CfyUEf0d{siKM{(gV~K=O6y`t%6xL~XI;lg7hEDeuUvDfGo+H|@r1b;6 zT-9+YM=Icg2uKwAQnU<_=D2{Q<;VbZy7_QftBsl>_YX{aEYIccyOORiFJHzwo7OHW zU;QN;uKsv=>x|R#mzCu!={Ng8B8@{XNRt-SOj>=;vlS~8ZtI0ysrO(f4b{veU2=Ak_rYPvj7>&(3W%(7N;@>c-tc~Eyt3!+YHJMpi8Jf4n*hFt@~|Efa1f};vFe>M8XJ)N~< zG_QNTXG)P17cT`Atu^4l6A?J_hCuK0P6BJj$yxo@5~+X<&ujk$igspb1}08rPnyIM zg5tRon>WP!7tWWv5z9cUXQWMg7?B6}e9V@w9{ulfIj zJAJ~;hOqoxb*7d*rH<)s&Ch0pv|t1Er4L(Y?dRm9ttBQH6!3=)AvZT~Jt8k^Gn{Nd zx4QU31yKU^aUQ~4eH}o04Llei+fAhLl(GScUlT%xJB}~uh+*z;`>kNRGeN+4H*fd} z-kz-q{%OuzcxfkD)z;8xG~;BA%#O{_pK?%HLHH~kw|(Z|PXhRHn+4PEiS5_PoUl{# ztT^MZubHC`d^wI}9UCw0CHxgOHa4Z2zhr2zf%0;#_JmFU2CL{fI>8Zuq>74Yfml%R zZoVZ$twgc0Q=0`)f$F=?YviVt;>5x*7&-WyBnXoC-m%=1bHaP3>Epy;Nw7n-7eo4~ zGeF7}(~fps#=;QQ&1sQ^E=?s3?{TeonvHmLVJR02Cnv0#FF;{Gm-Mk!nik0Td*KL9 z{z@6^^o$$5Qu;xHc@)F)+iP>oOk+v$+XLt4HGocx*55AJA#oAgXmlPkM0u^M)!asghC@Iu9NHD8wDY($Ma zXR!=@otu`AIEE^1d~1lrL4p~-|6hhcCh$Ea1<%3ITI4@6N8;~~kga~euoo8>|9S*U z70&$d(aD6DVHNF9Px)u4-SPKux6;2;ZF#iG8hEsk`$#6fb8A5d*cc%v&rcmDW=h?- zaE@_}xN|1LcI?tN|BjY6Wson7z60Ff(9w}a%jKBn-si-hT``IPobK#YDEt~4NK@<0 zFnzFNfn4@y^WdzHd92BV5E#<(^19l;@9Kk&=LW+?Yfrt9Qn%th;=pz@8ao@77qf@4 z<#kV5IbJQT3L-wDj#Z4dSm>a&eO?6Xr`HeVNbr4>)aLIkEw|1Do~37bnb@>8oxt~0 ziXOw92Kypb>zBs)HsY%=LlfHOallB-Xq(plb#-p+0T7t{9hG8$;ICTMe_eiO<13Vw zjzafgV-lik2PhVg>)plLS^5U5Oqb0&NGkkRz-YicFudp%!LiMF`Ctr+FmJU{KNo^K-QR&`i-?&v>Pnfzu-c!FXL?iU5Wpz^;;j@7*p z`jh3&Os-5^vTA57nT5{i@#Z0g!dNK`Wua;2U)b1dAxX<4#rBiN`h1hg>CAf~&3zc5 z_RaY^Y-VS!GX%t8r=1vHQ@}t0w+{q_Bfjs1#@2|F9~!P6gbHR#-I)_)jD3CA1no2F z5`8$H0(QRzXuxv{!(jbOK*p;&Dqcfx%*Hi(&|7F9?lTN;+`cuP3;gHVFGy`^hC%DA zHMLy9Za8$7iPlLMis^K}HukA)Y*#`}2wP6-czL;8>5u*jWVzS5vqsUNdBu=O72XU8 zCXRDN3ESDbvGQWV7N11FJN}Ytp4ETnW}nQnauYk(PR4!pQ?>HPuDoxMI1?Vrw2y6; zNliCi$Y_am-EqEWVLXjx1N?bdFP6316fn$oE4gQVHX5x=JA7uc9hC6BY>V7U*`*zAR0m@b%2Ql zXu1LEY6sPMe;5YFUVA-I6o!Wo*AT1KpuM%0eB_1DuobGe)H)q#^`L5wEzkT2p=pJ@>WqS+ZA&`nq5!kDS3`ga!T;v!N-khr-aLOHTWLfCM z*$83I7!wfK;k)op( z!<0C$ZSCjsElk9qNBw+oVDw333#lJ6>;h>R<+oV2$m+MU$)cOXYn2y_b!a%_3bgzQ z(b-trcXigWZ)$l!^`5(?7Cx1#gHuVqh56!6R8I+1EWB@iO|DhbBIT~)!1N7=moeR) zJffZVRsBNpL~dKCvA4C&*R9J2}l9bMRFD5!|l-TLx1- zbUn%{f;59_Yy7;iAL*drH40lx?NQ#{0<|5tljoV%(|&_!(C+;6)g+ zCw2lyagDijc4d|)G6jSWx2m{qT|9++;TI+=J-HuyM4tPj-pQ(dK2VpuAem9j5t}|Z zDQDv35uCBdkE5)4iYw;`@$zoJ!ys-ri6{#dGzT>`!oApJ@)S*_%VKHf<&4%C!gdHt zftP$KD^mD+s-jd!s~=eKOXQ}Hzt#XU|9_Kq%G4)Yp(f&U$&}d~bew%Z)aO&z0KwN? zbkbOIdomH{i;q3MugF12ro>+~M}o8bU|yQQ$Hn@X1Id`S^5g8NFaU{Nop)B1I2kEX zPg`)zERZ5k)nJp%t6BL9rSm1j+ACR*mscDA>EQYGt{Ywjx3kA2zAVMbP^8@2@2d&n z>T$#PoV)w`HuR2{)3hF^876O)L#q;kmakgNN6v<%*gw)nQA+V4Atk}xScFrnRI8z8MhIfmzI??V>69U zu%Sum0IbW#W)a29Doim$Iq}b5y~I(2%4O<8)Qy_IdbuW3bv1I4I~+E;Wc`bqJiI_} zyeR?ILXUW)$rw$-4+pQPd>&Un)8sK>dc($=e+!jX69gG{iXIsunGSG833a0v3uxnL z#ut^J=qk`3ZDGBKY z0Ribor4a;?c0jruQo2EEU*r3|-+q7l+x6ex$1#V3!aZ}xTI*Wpbw-}V_t8H5xZX<7 zT(e>_S6kYngO5_eqqge?3b|hWd2^MtQ6~kfr~79X^Up!r#GY{ZsZ*D!L0hhVFzRTx zJk`O1PSvz#LTmjsJ+D5Y4#qc&DkxlX>o|Ev{a22*Q3luM)+ioH@Ah@es36c2 zRC;@|+yj#QQUVdJyx#ZNZD$!}R4^M{f^$~ABs&GvDkGx?P zIhagZFFg{t#1=y2DN=r*hjP2}ti!9Usp;6+p#o*8~!|Uuc%TxgG!< z?c?K*yFaB`f91c#y6S>KskO+CrnXk?ve;tqfkvy9`z|ev1%6 z6F@XVm0P81Tk;;xjX~A`qhG^iz6Vw|m8nZ1TMuRRaVaTB)vteTcwaE|zM0G<(n$4r z)qsWTdkx+td6l*x)?MCl@o^<;8wupF(E{ojT9hPF+t5JZ-)owFnMNtl3_~e+qriXj zj46bgWwa`HU4*tzElp4+Fg}jL0+ILpBLJC$+p!#Q;oc*h%JOV>rT!ROYi_aJtri&i>HV{D-o&?1-M*OVkmAriSg%YdXtEy|VPe&JN|GYDmdcOxu!s z${s1N<$IV2)u@kDzm7{LGc5w!O*@gntF6L!z;#h#Gl4R%&~}=E@gG?d{ZG4nom)+Uva+C%I=Hx6_ONbHkP1vPvsI z+`Q)JZBpzGR#fkEF+STHjDHmJefh(;@U*Ead$NlgNO1*RRqocd0eKh{Pj4I-;<4h) zwz){v6>+(olvE2Ld&GzuQl5KKL*xdQEx zJT)LQU9){Kh#QG~pDM;w50?-E?Mp~@6mWfw6@EOoeUnkaqlJRUiAyc56vqZZvtM_KI2HB- z#U&-o(FzFhCSclGA;LfvMhapb*el(Y%$yk%eH@qU)s}m={;lux-{LX^Eh6(`;iZG@ z$jRi&yR^3l+vm;F&ZK&D7l=|{cK9N0@T~I_T)1nSm#uUrv*PjmlI>_465t-Q@06GN zL;lq9E7HpkQ=Jbrf|+j5wH}Y=y$0^=CEnJyJe?xu z*skg!YV9IzTU%QXjVT2-bV(N%R55tqB!jqyMb=J4_0h*t@O)Du_g+jmIhJ6wM1vZq z_m9+yDI&>>Qu3fd4~^{(L~nmIn*}z3<~3f$_av&+v2p8eKC4ffLsrW+S#Jr&o9q`p zwVzn%C$C5E;hImo#kQ_CKc6{j@^?wOvw8WYIsJR&nwN2)5%=?3ulJ^0!1oFZz>d9h z$>+1uZ`|{)0s31GaMwG>jMbk%Dg8U*P|&r1R#TTloTP%27Dl=CV4gYTZm?>q=xwrl zMo)JLtKA-LrjUt;+(1^|6-_3sk9Pd-A=Im?N*kq@-pL}O=H6*`yE`uNX{1D^p;@cd z2jioa=GHVHlf~rsw!t9kI@oL`%=WNeZ7t_*p3KRyCMVD*MfOy89a&25-UI6abpl_O z4TZJ59NmPn&F)Gmiy$$v0t?sQ%Xhv!OW{CwK>-ee8}BKltgI~Jv1Jt4;%*AG*WqWk z5RLDUvKmFhf6o00BONf0`aEY=ihH!^Nd=ftaSkmrHZK`gA8ETTIq@pmvT|;sN-ZV@ zrwRCSiE?aSX(uFO(%=9eF3Isba_N{r$)NLV1a_Ta4}EOHIzO!UHU_(GTY+`cNrV{u zx#@>AOw{ZtNpjT9OBwm7_%d;aEpl@~p2y?(8JFnpYkUyyj6=q@)>Twssv^-SI*?j{ zO@9V|txbF+M#H-u9daYi@OZ$f%>7;E#q>!4W_;$o)^xJbR`PLr{70{cv(Q#BHdTPY z=Z)z0hoIAogjQ7RGqr8nOaB4;z1rX3PcWU7tFf!E_lZ62mw*cc6wZ2irwzx=xn7qm zRQqv6Wn3jIjpz72f$<}!j!WS@Ck&qYnUC`$%=JLyPAHXJCu6FYaOf@6C0$r;Ocm0J z8U;x>aQWZueh$=v;nWF?rL7W&7d9W3(udBc2-`@;qpW|`6t;RjL%zowBxpO_^t~k0 zD7bP~Palc()O%eS_vCqNPx9>k0D(Ru`RmnLs2(M9u|cR?y-vo_EeKMQJZoJ&z1Eu_ zCx5tR0r?=$`U^t!;q`xP?d;I9R!7GQ)5AHnk{Yz;8;$nqzxh(1_lDHDAC~IuL92Vu zPRgm`eXv?CUwcX-di#3pwh)8DmkaV${yhmFvJ-bX+vJufrGYPbElZv=83ofnOk9?d&IvteS{7k_d1v8fipb(tfol*!;{|C zrWYp|h`$0-`remjfl2gp)@(Qx#+p4_en@NF<`TB0w(n!A``k8J5n~&MT zBKv0-*ck`iCszl06tc09Tqr2;;>%9^W;uVE(-;efn#DwrDCg41kCF)88^N>5)s#Wd ztY0slyn(#gDFKu3Qy##9F=!eDLCFos^fVCKZoj{=e`T{|j`@;$<7~m4daYf;p_<)H zC?-|D4_3)pl$TN{-7DJ!&zIlCKHE@#3>QZB-2o5_d@WoRg6`;=jXCrUo=)ERa9m|q z&%O^WNWL%_S6+3X3zgMq;3=GHc@Nug<$~npb5f3w^=|h9)<^?h|(oGU_j71*A{#tNzAuCo0J`z z`Sc)mi*uLbGPZz85c`aDQMmimo@(qF!H?lMcX{@Z+XPx2sfxKNUgSfAt`ZHCZM9Db zwe*M_dMeu1Ub?wvp|Y>#R9-WU*WyitiH@L6nj`k5-2_*>l2$C4xS|~Q1f9NRpMor= zAT_ycM&C5Pb}rFI`va<)@QK@3JqoW^@k#AO7a3Ez6ZrlzC?z+sfREi_A~5u>vLBcaWRfz@-u@!gH7MHc2yl#rM3}SNo_F;i`D}BYZ!0YudQ-NV2Fu_leD~PIB~E;-sebbe;d;uI5xsw%8xbm(v4sc> z_B}G8lJlrySK|{DlbNL2aG%x~aH%z#Yb?UMsY-Begrp?3gk`eK*>>D1ZCbPWs`6t8Z`Y{k*0op;4})#C}QfUBE=oR(&bV=gDV#1!mTeu~x^^lG=5yN(({igY0sNamNq7-q!|V zTdy3+-C)$$DtOr7G6z)?;7t(`5z%>FdvEebmoXknBR=@XC-DWG2rMbh6TPP7@WDI7X?v6=a`+Y%xK&c3Uqs(lWX?+3 zO{_Vnf+D4FWz1+{i&VIm)*9Rme*Dm!$eJf_!!*LM$WpzRV&q^KkR;$TrA|ck#%Zjt zO%e8q{jVHeOs-85e9)4&MVhfQzds_^0!$h#P3CZ|tEmJy_tMCC6cH&FiO7$wqBnGP zB#_rID0F77r95U;oR4R=pp-Q3s4SjN$$p^3Cy?{1*KnP?=pFfb#{^0Ht8Zrh%6ui# z2@6{i`Xgh++?(wLWNF2gR2@UY#jJV387aKIEDhUy_c5N~@DN8c+A;wR=R=CK=K1bsBT?m#;fm46J(=iarX{5KMl>(+x&SI4vyH zu*QP%fEDYrv_GHTX*MRr(7uDg6T>DFi5yh;=}I4oLiEto*rCk6?8ypYNVw63}MkvCg z_%nc{y@4!&$d*dZot2|_>sGiy$MqgO@V+9!Hp4o+rI!%>*8qsAyV6nxG=SRL5`o}S zz?a>{_>t!-P+M#5__EUpKU?kyh^R$5I}o->7d*Tx&Tz;Qc6xE@d-HEAxqm6mRfQZ- zCdRRUI_^}Q%%U_gEy~^KEXiwE$m>%|ac*Qbi`sZ#4)fIW-zC)P&b}Iur1vQtJc>?c z?VS2ZgcJm+lZx~^D|tTn0L3eM_7X#vC9ltoG=p?JOtq~_ymA!S2h<5sLx1| zW`Zl!?|_j2-9-Sy8KQ*m-%myQdUpY0-z%%}Dw_+MwqQV2rmw3D%EhnQEqc5*!XP^IbqMbZfeKpFK!+g4R%^14^1p8>}rn> z#XG~Z%iF`rYE=)1s8fmK8E;LA>M3a!RVj=lYyJ$it-W=Z?!X}I7qOXrAQPU!drfU^ zhknqfSv2;+nqB522Y+0x;tHGIt(VpCR@_GoIwBFwcmbB>mq3~yWUdDv6%fB#JK|gM zo+%YPvzC4bGfax|r?^gc-c5jVNIKsxiT zUls{L4Y^Wa`ClF_Z{s5>-6n4jXTf_hWEl(NmaErGS$$s}qnc9J$2g8d6Ty4i)lV1}*R4qIwVhdUzS7n{kyyh6yd=F@2{DN9?xdhrmvc zI4ugtP$0{<%WZW_+#{aM`WO{Yr|M4MB?eM?PE1<5~nO-+x}cW(cFwnW{1>8X3_9TS4U^|81sDm|nPcXL+HZ{p2= zV1AtR*Aob%yhCk0Ql5qMe$HT1-|9Z+H_Qj)E)VD**^yV+P{;c?dyu?eqAngX3a1jx zNpNHmR~XkiyIyW{=<%1Xx#D^$fvtd9iMw0yp|)M9%hn$aU!wELS?7R`oYgwJ5s=n( zqGUiu6Fz!3Yc?16Y5;%5_^{(QHxdnO-{VB7*7NiazEMxWiBT)P>6Jc4kRfjfZx6 zSBh4}WOYNC1$n7)ADcHUahSH0KKdi}LcMicps~r~Y4wu{5vqJ!TvF`WX!#9k!Ga^K zT6`016{QZ@=x}Y5rL_-1t`7kHeyhL+0wA?Ck(c1F!5?J}((ys7Au)r$v+ju>tJu5A zd8Y_f%lpxq0in_SyvJ(!XWM9(A~k|g$1ai0>tjc{hoXwaF~^i1&-h9EM)zVdBHQvJ z^%81|I*v$UjmZQJ$`H$I&#Q~|$K3swBmSaK?3l6$_n_RhSHbhwm^)r3rNL&Ue?Lr&{6DnzfpmGVg3?2D5F z&j4Dpd{#S?3M#PT0&}5;&f3~qjPk327YscGQD03Ae&01T!xS?`l^C82me(m=5fgCg z;GP-ddABOz#p*7DBr_3*w^bFIG@2r0RSVe`(m7-E=fN^O8NW6w5=SZ>o}l>c6VuUl zb|hgU&zm|day#^1AV;I0T!?@rS|PCFNr_H0C^x~}#0v3S)&WhIAiSo>*RU*<*?Mq( z7V=g;1O31_Ow{IQFNTjwgg@yB#3@3F#GW6u(+Sy+ErzfdQGL{!Po=sO8{=4-=TdB( zYw_VeF2_&yPdY_&&^AD~W}{i<#dF~MnistVTKVG!Jcm>6jP{NDIE-k&pfk7Uk zUG(XQJTqyilP&M<{=Vy^3sO}C6)q%qz|fZPpA;WZ8S;1~3)P#;F%OFUd#nG4fpw;B za9pUM%w^Ur=JURL7Ac6@pD<`qT#jMemn5?a>ss3VbapUN;l4Q?o#r=ma`@|4_MwP6 zZY@tyR^;2!#;vn@&4TLnSurluX!D&F#6*}FO;Mg=!~=JHFk^DR*cdY^d3Zg;sMDmP zR)fAM_;eSZ5TKjfXCa;RKt2lW(l`n#RoIZ4#kq zhE3P8JoCR8HXgzODnXt+uIX`f+3~}}!x>&z*5WGG=9rV9b1WxgXji>-6^Xbf|6L?f z=o(Qec<}(E#fZ)ONaSFXDX6uQ$!;QuE$sa#^67Jl>!z-0Cm-#qXms8M2PxOPG*8>D zJ;dECSc$Pt0m;x?;n>ishK6vE;ld4Pf}ToyD7i#q0SLz#UhICYKvNv8z9p9F6rJ_I z{DEQia^1O~{-?VNiG%>iI9u_ zmuFLYH==idBH!L;za8Ia?zq46JkTNonDCqH@=_`rBxSNYzb7CP%+!(X6YH0 zM;dX3U*A2{{s(la-tf`E02HJr3FgdT5}05PxQ7Y{%Js4;M=Ti8fUiknca|;>xCcTV z#@Fj%K$Y+N#h|-=sGAONRZx!Pp4p@z!&;8n#O*k@$ot*d0%rH+0ZDGSd_X(B6%^U; z-9|g@57H~ItZBC`nRerqXOs2y4Gn7%{d2O@V5YRO8EftzJfAr$<-7l=^E{WVKGCrY zZewF3=faeuTO-VFQI1`o*f77Epgw!wj#Q~~3?KWj^1gc;XNtO9GoA+n-=C<(YM17+ z|6@PjymKFe{?xUtQ%P8p3Jby2^jqcHi;s1s-a$7oKpP15EZu@&t(egnG3sez`$v&} z+7uiv^1iK#n&XhLnv)4m-}+Mbrdv2<8YT$nTEhxO$r_iB>3p;eTGvRN)tw!u5iVO` zTJ;Lgtm*5D(PWuoCK&a~HWCSlg{wAU>L!e(`e-dln1sND6u9@aSrlLW1)o+<3XOt{ ztUIgLl{@ZHJ^hE?FTk+I&MzX_WFdbRCmeU%0*I`v&ema zf3O)zB(FhN78sqR2-g+xF*G{pDPHW^!f$QgI3-LutI${ad62B?>${y^BzwJ_u4>ib zS49$2lLyrO3rT{EdwqvPMm-3{X>TZc!A(pr0fg??^yi|r?6>-CN`5mD6lV@W*(L0Y z@~s6gE7|0b0%I!lO&uDZQ>avT$+AJ_!oC&crjEDCF*c9XED?nCp`NkaUzB=SCnh9Z z=4*MHGsR_ksPe{=s0N&s%B?jYv-?YUA0SR&4Oge+g#wWF@cP2k4Q=h$05s+!;gzAG zOptjO^Jr1{BD%}9T#Qhr2Qy|qilfRd^?=lbsZLJUw1Nr-0iXyb6}lf}9v2P6<^vvi zxt~Gxe6|=;e@F#^D|LYT<{h3%Bor?r(A2pE;;CHCoJy2P@z-Y+3Q8mbvDn=yUiP)v zXznG8A~y@Y$shMK(cZ_Ky3Z*x?} zw9mUGiaicFW{EX^7J_nlE+R^l+eR)i7>jP`KSxu*?Cc1^l4s!va8FpA1qXO4vvy|# zN2}a7-#?NeVMXng`Tpa5xIxJHNQ+l1huy@&dV~C@K)T9Ea%IlJ7>9czYgqO*YIizz}wbyxxgWg)ejyz!dp$ z9S&$4m+Kh3!l@+dh|1>vk?El=maJE96Gy(!z`EbxlMhX0<+qTR+%!yrt61zSePw4l#LXfr>6jiElhBNra@lqke+ z!m+%Czong zHB{;A9ZIm7$FRz*lqaB{z~P0`|I@*Cr=l@jqKuV^Tlazv9J1x%Q2)sK92Qq`!JxdE zXB~4dD9PL7?0Rn8eiYcy#0~R@KgbnGS8L-ZF!OY$FyR@!{d_Rlu=CzEeZ)#GoX>2; zt_l*K0L`=OgSan*^;7WglWzKM$vl->aV2TTV-6+|*sK<+#!wkvYszyP#5vlz`R1lx zjBZ_(-3hB%Dyi%NmYjzjZJ>Cu6sx~r+9rsa>W9w4JitI!Iq;a;4Z}LHeXsZ(U{IX^9 zX0w_XH@1L_hYk2Aj<5cTLEIveH@Tgp92ozDJ=C+)G3_8jIUtFAd|2O0CG-nYSTz*B>(vf z+t)l^U%eIZ7t+EOi+1pTRvkKKoG)mvr}OEH>4fwPimNgzDe2!1JEHu;g$#FM6#3Gb z>MD_EVncJwBGQ6g=jtRc1ZzmaG8Fp4u>Hp1cX-a5n7UVqXTtT?hkUn>367Pp=`x>g zHx`akC$(M|u=Bv|d&kE5m6HolS#yAIIS+>DYs-D(3aftVwR zJb|3V9(#`WVjFF$EaLi`;#ti&xE>3mIrr#J)Qb7u*L%bguYlKZ!{cZ!m~-bGZfny9 zsxu1Ju-n(>xs)y(U9%ad7e|hPZU;KTo`aPp0!GD)vXhs%3`wIWNCrum(l)rsXY?s#+O z)sfbdspkA2M(b<{s7|gl>Z*yYBWxWUP*7tFal3$wm}8_7ei0nzz{-C44K9NR#>{b_ z`_>+~1F~#3lON;wSM`Zr1qE2k@ls|K+Pjrp??f$G_73J~Gp>K~lX`Q#qZM^O(Tc-- z2_LtluQt0+X8uqz_#PQI%wFb8`gXE;zsdT7L8_|BPwHqkkX%3)ceqB1V#oI8XV0N7;i{lL%W1n<|y?YJ5J>~jGiDu^z-vJoP3u6zUYVN9{KGdO)*FaLhom1=}x29m@Y-W z2qv7M`P3wLg^o~9^cR-kM{I2dVF4TOuaSZSE8yT{K;eEg-&j{SUfUGKWP$&0$6&Ny zat8A;M_xq1EnQ5VquwW~oMfSje8EgXSN_L)w?CvU{x2VHFdW=4ziy*z2~vw6jz`aP zHCIGt3X$9PW%P@dREu?;pWRHV!!?_{??@K+^RLxJ`}7kBemiRTe)#F9S~%r+vtrW{ zJ=kY|JgAr@!*T{8q79SJD{7S!(b8ProT0a2@qj8piD zyC;VmZymzQiC#iOA53<26JC>Zsxd_?0JnMb===98XpVb>W&u-X|KZ=aKzlWV?GFtD zt=Sa%K#%3PXBz1kag28)md6#EmV#x>d<+)6pW1NBU0t7Ho7p8=pQ*p!#AzqcFA9UE z9(^i@gYt~~3=`wyPKTQ_o9Oc)Y<8ABog=P?lXdNOPK|Q+UN8698c)bI0PVl79>JG+?}7iT%jX{D1C3c}s9cqcHsL~HNP|AX7iJ8?vbp2=^hos4 z(M@mId<*l`P1FTBrX>;nzc~;2rY<9TK#G10Y}7w4Vfou12jxn2&U5GwMs`9@fmo9p z6-+)kF!6bMexBQw`8n0?XmXn>*C*9&-Aj*o3Qp@}W%CNhM95B z%hbj9-f0#Xfol^0Z^F|arhy;Xs3ILWXd>Lir>!42BWOS?2s10php?4{-ZK0cIBb7g z+Vxlz%KVISJ#>8n`Uk+?O#Td7Szn83)YoR_76*!>Slry;e&@i?Ai0XdFl6I4PqnnBN zz`5#<#OAIVFV@(f$sU;|Kh}sp#RB`>vw`2!0B{ zEk`ft;5y_kI=x?r^s8fDwkr!Og>6iN_u`XN*4r2YQf~RJwZGZGgu?)lQq6c>1(yKStW?+j~GuJ zyib%Rxfg8qV&}iF00DRfzi%h6zZA2-y(<)JfHCL&3|q#ZP0=puO*V)S!K?S7_I_k) z-b(IuuCQO}Xh(A-V!4i}(-AB{z)I3X3P^gpdnY~t%kgS}u|{$_2QW!%YlBs{{)j~K z64-}#I)V`#EFD7OO6TC@0YMT6Yhy^KJ_z%8F2xjLJfN0vj0%EiL?B?i)liHvO5s=^ zYwzI?DekVEbaTK}sCB;t$t)`34DuYYm@NeT53dhD7YDp6u^ZFqyVCXe9bPgFbWDp4 zU8l_dc{EGkj5lXLXNUphaYUkwjE!5JKT!qEW`WS?rvKlVtdiEj^((3}t>+&dg z=oC0H0O2e*x+~#0V=Nb7IB%LujrL0wnnYF#N$ zw>=25&xyWsU8F*Y%{X-s1aM3o?<&@w1hN#9x7XSM<^(E)&VYiZAmeJfNB>G|3CUh| z<-2;`+lXi#0egvD*6N%Y_#m8hT_S$sut!6vLi^=!%nMkif(N1C6?6(t0e%w$l*4&Z z8r^>U`c(c)S;W(v=un;51vf-D7u>6AAp*V4>W{)wxJ+Xkmj!h>@ye9#f>9#+hW$42 z0aCrfkQPBPW%l&{80*rA3d=@ttwFQ`kAVGgA{%~6-mSDirXU$%Jq}1&p{ks=bKv|F zOz;z*1rP-M1?-52G9;ojB_Ihkpgq^(p#+R_n3q&bMwoi3_wtq3mmt(e1IRB_L63q< zxURrx04FO5T#p z(%_F-P(?Ll+f6%$lds+Fn0q~gEkNiJ>o~0tK0|O{!&dPa40FLTJ3o#tAc=#6`2wtN zr>U{$_%q@bVC!ex7!N z1NvCo9+RsiPkAUg&j#@>NxM@o-SYh3lV9Roh}?S~xWp&j;$XjkhP4KTlL6VioKzkx z70xa*K?+$GixlH;UVLyGjNaf7!Pyux6=^q-Rh8j^&U0x@^ODTrwu-|^<=I9U!{;6E z5(%~>eMLXwN)Jt3XraZPQ-Ov@;XKqcE0zb>m9o&C-69>1nBSPbOf0CIPc>0nQC{v3 zbTk;46Sx1G$LH)Rm~6}yAhtc|3JZUb*qJ<%*-=N&s02#*872YTt?2GQ48&|M*t*nT z>aHw@5S^pd%hEGhe{W z^+OolvjFAo7e&4t2N1?G&Q>GU+R*O%@WYV#vP&%vc`Fd^;?~a7-9-#Pkv#bb)W%K8 z&$gt!kIa%5Y=p={dsOtPpdhgPc?bayJMpl}#~LW9!-`F9aSY^%iwxSp{h9Oi86&EW zp2>y)Cj zd-KT@yfHLaekKd*S`%jyRQcFlN}~46I`cm5`E!02lh|NpL7?+rNiouXCx??%#r+-~ zXiuet#6(Vb8_3R(2Z;&~W$K}isP08PchEsJ*ZO@Hg&-kjvFF$Ljrc3D=mJy^ zze8X0BH^8ck5kVtcS##>k^eeHD}*R)(+JjQVofQVchlFq7dmr6{dZQ(>rk3vxcE?S z+Iaf>ZH!VRn9srP61eg=uTjXTi2aX%7&3ApU0|VsjSsA69u5Bk2LP}}b?*&Jh%Xvq zp#RV8jGswKt#v>p2ckBxbj#+@I~@#Z9?D&YH(yQScx@k_HK%y8rP2s;|6$EV7 zz8Uo{?Lx1K1b72Lm4zbEa0QJH0AU7bUiNo>{@vlno;QUk=B%Dc%phKx#hi)s=_V-r zkEEF&A6vf@4uQ$072=A2E&&wuU~pQny8186Q?ThB96+V>hM;xu5^m^y`_Cs1>(+$r zaWQIGwNuA;Y6;s>Q<# z((X$HITs@fPAUfON*rx;qLG2k^}nt(oFX$Bx;k?t(vlERgLg*Kw|#8dFZr*a7WD5= zxz9}1dT%npBdbDF8h8l1D-|jA#egOVjkwP;hwh#O+JFvdfm=mbfNgv=;%`L{Xc?6M zHa1t`u;6b=Z`e&Z&;M^he-;C)$#;c(Oc{*Iv5rpjWZAoKWTj)i7^e0LnlhyyFjm<~ zQ;gYwVRj#P;@Aay=-GQs-G>xU_Y5y?G>HeKwtj$E8~{o$K~I(FMQ{6C#oQzxF{0Q` zpukBZN1ZVa8r(*(J8Q?H%qyI)TsnC&ayDW`Q}63^=QJ{#>BLz|I3`LShN3mh1CF43 zLc?A_vPd7?<;bU& zsE_@hGs2BMJ0KjB!cz#(y2pNDw1V04*STngSG+Nb#(F(Rh~6zZxmFrYS>xzovr1=# zb$;~wJFn-xG3bK3mYMnpcxNzT9qo&QWO;A(mgRGJ1^s7|)on09{udMK72qY|@4cx7 z*lZ`FeB89EZ+34!c&4{@5i@i&Zq$}zf&Ef8%`05=PGqK{3W->NrIU-0u3c)E( z;9)sjt&y8=Bn+-co4!WJiHSUVv2Y{S;F1ghBLm(9=8KW?9k)>!p|R(q_r-o#Q*uMQ zG_B~Fsc8~Z%ur)rsXATonITD%9W$OSeqL7shoY^uSln3C$d?mjNVY>1xlkCYd~fny zPY0^UnCvuIH9z_7Evdd#=3ABo=vt-y!*jaZJ3Og&4V>nJDtE3-7yYnKJDZP$#^f>HYPe7wOrXysfa61{471)U5t2Y85T%tQHC<*=@^PJNCI@Kgg1Q zCBN-`$%V8XUTCWnI7Uz_nmByz#_(Kx&Wp>#b0m=@XU)Ik7~f!BZe4jxObx}=4RHrc zb1}+IVsn06+4+5gG9K$L4|J>aq;jOSlQo&T*Xac)WYO`R9hWncn7Y>tw67l@@~fIg zYLJGCeq&I&r}{A=PJ>UcsXRiv2pcke|xf}WMkRK%?YC#50Qu@ z@!E(z2OZ{%o~10GbvukvgAc2|?-Y@j>bzT=P;Pg1Sq&J9f4P;S5IE&Z?9Kf#DE=o| zTFEw4lakic6NEWcttnkc9lYv%iyb%k8rO5L^|L362R)9^wC5mdw$4XRMdJF~|&Rb1g`zpkPf&1N<) zXd~yK{zsX~?WTCxKV%Z$KTKfw+`5sB{jO?;T@jNTig&hdtWLJ)N>BimH z0WqU$$zw3p}ecN>pm3v5t6p^cbQ$HuJ^$r z`f@qS68{xm7T0Z#vTfyn#49@l^7@BS+buf$R}EtPFV1H+JG){J5BI6v%*sp4%3$jW zIyDRG#BAcrcySWhf+7PgS{m&L_p)?8+#Z>s+Ok|m9 zzW=Ha9&Yk=G77H@MUuVmTNK9U4Q7?YEkq{-?F3p}<$lYvQsT2CC4JH~QvIM)Y-bOo@2Ld>0L&C!^9c(o@+mr-qDcO}tH? zoJ>$PN2ooNyi}rV`{4JnYYtaa>-TxFD=SRieP1q#Q4$zz+c2f>dpnTar}DYD?3Eb* zt~pam%2eU4-=PCj=0!w8uW&3T5BUI_w7saGSUQK54T5~K3U{H}*AOt$ihs!t!RT@J zTQn=$zfMnY`}Y&ee=>#z{@KF2ZaDF?%Kxh@TM5sD>#c*8<>_*=iTN?YIja$UaZh>0 zCtfG2g?HC?rZTU1viezb$cIowZPlEo+n?vo z+hQ+$!|TI!R!tb!+#kq%C1q}w?cC3K&EwtWe>COx1P2V`nRGP=$HYb67z zOD19XeS*(|>dP<<@n;RfEcmedg)^BNR_I5f>?RJ=imq>c^gE$`ScDc>TAnl0Wi%XWp=- zmfdGJH4zwmeg67oSFM|f0uqyrsYWMxS{=hYx|DsTaaMW1@}EArGV|!Tge}o#ExT`_ zK+9Tobh=y1El^LOHKdTOrm58KzCT}~z8#}F<1A|Yw}X>KO_-41R-mHaR69kB7HJ^i z{O5ZOvWp(2pYt%oE-n4jd|9J{>3U3}Z(ly<6;~T1V$9pDYOOA;Gg*ssIc=pzT#3S( zNMcaT$6*8ULNK;~7&AJ_JehkV81u5G4{`Mct8{d~jfbyu*)>VuO6rWYyj3LW@n*Nt z)cAOz-{{X&B``AwJR2G@Dm2AUxu+)gfJOeSd?(c|30$+*dOdiV`>F92@ci^{cOQ%! zeb?c8zL2Hw5)YBlarAw;E_Aqn^8IBSQ`Av0#I#E)KdAU?Rg&|7YgX8A7Yp3nZ6`e~ zi&4$5ArdXMl%vxTva;@Lyh4dU%CimC&o=@RWz|K53`s8Id=IUH>Qhu>J!_P6J6MA8 zzcj`-)ZQC8>lXN6biy5dd-~$s9AZk$egr&h=HG0n!hjpLT6PbF33=8KdlQM0E~}TR z8na!V)`NK8?gf&lB}l84-x|2L`E~Ogm>YN;8_iM?FHRsFAmegPAni1eqy?$ty3N6} z7f>Yd4ORcM%6_R@`<;7;F+%R9P_kUJWfHPxs%FOFAdIV4?m?>7tJIkZ{_$|}Mdx@i zyB+ahk$9791*qAj%xwanb?q{mzC^_ygt)B4VIFRDiNV#A1}ue(39>XsDZ-HZG~?|1HEHchv`DDHK#r80X(wm#Q)k2la~Jc!<^lwGl@ z;WDRj^^LBp*-i7S12Y=0ProtVJ!+GZu6>v7SVTPY#B;XDv--vJsnd(IQCgW#`m;lU za8E$XgiZ_fn7e8?I`Y}=VH<``wlWW_}l^m0k^FmY?E?OO1k zpt@X(l{z9o$>R*b@rzCz*nt$Xrs!6C#I`b`YHi5unlEPAw>0hTt2S0pkgq zfoiG4-;V(=2UiGVDoBC$=jk4R;O;*v`ABdE0ZGPRue@LXlzDvBZ8FRj_NdC%w7H%2 z=%S03#PM>f{LQvn(+#tQt>pm`E1mH+g6&1NE7N;93yQtY@e{3YbXR3-&=umKF#~iwp_*-Y@(-0zvYUHpJHpr{2uJH#G?LMWO@12mmzKO zoVs5w zV%rG6CQQp47hq$wEBDJCyvWDep|=|`r3%Ww=lm)B<3zyK%R2573LV`2N%JpRs(hKj zgDbNI6(u!2(={pi`Ooj7Dd_U{!ECVew~gxXX%6Qw>_+MGq02qg!Gwc*6unq2YD8Ic z)wJ+;UG5JO%KXC8Cp>iUh9jZ#0_mr*OwSIpo?&>bqk3zB7md$^2 z%CZ0HGx2tzPPC?RD%Sq%J_XuSH}mivT#ywyI>l$hMG*9ve@IcsW#4+%@PG@ke6xy! zugXp0KvdT{8?C$ZoKJQ`H`BsFs#%Zk0;~C*V2)2Jj@{01T z?xB;u%yMa|o&6s#w+H!r?iwZ#m>Ed)j~V9<;89-x!38)E$}B2t8gGPW;E%-A0M*y8 zn!G~HbW|F)r}gT_T5-%Y*X(9H-a(6mO)*R97#b@@TuR*>J;GCJVW;Rei(<^-V_A(! z+uN&k_Ndq8pYJWa&df=Cqku#lj@y)_f9`cn66Ux6Hhh7PW9p2YdHL~Ua?8O=9R8Pu z;%jZ?^f7G1^!)7V$s#^SN#0}Tv>R^>_BI}vzovaJbF85~T+bUYq9A36eCPLJR7%o;_O|oDEsT@m&H6w3a%^U^qVQaB7YD) zx7>$Q%ja`J3RmiFOq%y6vUMS!9Q{bK)3hfDo>CV%^(ic@ZS3z&X;9hS|J2x9OM8wi zlI)c&dteo(sBMQZsv4Waj&Jz-Eaha`bLsPi%b59EI~EN_B~SfVlfiiN&kphttAd;= zRXonr_MFYRngu!f{FH&iu6p-tbb0CkopXj^w+OyDx9&gXY#lP-=}q}gWL4`P+D*5$fJ>LNP(>cYa`-&M!GvmPvuQCW2^E?TJLY{KWKjgX_Y7q4nz5-#uU z)zOc;(ObFZFfX=ujo=?yji<62ZalU{oum)H4Z!MXxwiIgInjU$<{9kJsFIzezA1wbC%U0CX98~T1yNmNpO`C}F<``dhxu1ojDsg)^<`WfLT0UEj8^S-Kjk7}--PxBpw zkM=%Sy020evUfg<*Lr6Z7Ty$fxt(fvqwMJgvDhPFYQ{IMUPx8p&nJhQ z4xf@r>o-LIGGKXmw1{hxO*k2%WBsBYd$#$}L&o6aJPAB{H5bA&!Ec1cTG(Zfk>tb+ z`m0z0gR8FtK7QU{vwP$4Em8l#)ZH1WuBf41BU52@fC$R1b{@|~x)>@inT5UkGIQAU z1MB^k3UOO?QRNtOT2ydN-TOqx*OKA0C92y08*^_N7G>1N`wkrv3W{`>fOMyHgNPs? zDJ|07B_$2gEhUX~cS?%_QUg-L00Sa9#98C}?!C|6=X^LH&vkjJFfjAPde*w{b^q_* zA9lCi>XfwER=5Av_o*i$7VdVp)OxqpbzD|sAL$a-t18(BDtjxSNv3P-sUz9yW3e|S zr#_pL;{gnE<$Ggvp2E?eeh1v1oC{cRz0IUa{MCiXM@xY{+6oN#j*&Un8~gH1uDh#H z9W$L#Iaga8JDyX3n1tu8Ze9P^qOV(ZU_dN`E9~!ZduR1?ds0JvR)#_6AYIqnc9{PF z+JRoMG{5Wsqlo@u5MR^=<|c6`k?kvGZi+8=%?l2rj5e$0p;vyOzDR#(nA`r7TzskG zIcv+((o*h&CG}yN*50e%h4F2#44vhFXZZn}Zx5jUfxap_1q&AZ;=28?tzzfo^kn_@ z3k~6{)4c5nAw>$DU34Ml1-Sf_>_jIucnT{lwI2?Gb?M}Kv~C|1Z|&CxpHY(u$z6(M zt}F0BZC;~$WZ7>T#r~KO>?Vv(g0+cVoRbc3i>h6Etn@mV-h8z$8*mFX)+QADp?I!R z&r6{uvQAM@Vw*c2c)gM532r1}NT_R8z0|e3#1n|Z0vO(| zuJw*sTGJ@^F>7Lj)h_W%%+BNyf3ED^hHgM*LrPbZ5{uj%x zD=E>OF2Ht`eO{>ZwCd1k#>R`BOo;dER$CqMZNN3TFk-)bIrayL+g7HHF_vcr;6^#w zI({ag=0Z`{p*DLfq2eXVpjp3lrB!+mhb1ZU;ggp?>(yus@K@~O>LXJ1?;49TF^=N6CyS0l6TV_f_Z?W4`*)_j~xC+I%#`Dt#bdwDx*AH2QFbL}_L_<3Uf z9k|hW)2osOKY=xz{^72>SYldN8~Q7@NB?PKYo-))*~FfkpZ6uVs|U~&fDksQ!VHQX z7`3W5-dX>j0@hj{(N;PD7~u#UaYggPcAVYlJ&dT^pIXKZJCCBSMJu;o0xhaESJQ*S z2MsjyWk6XpP}7_w`>!+j=`%O@O)v%Gg40LIZ0+ZMOj4 z?J|R#fR=kbk{n50dFM+Gc?b~<;?Kv)ggzC+3G%Fbcl+DVN4ey7vG#1i>gL+zMj|AB zEco0;p|TtPaKbjH!4DvFZeptw%-(1VLc$uq%)0k@d1B1TK9&}~d-6O0(GWiA>_^aE za+%}deLi3-p$slyCkMLIgjL}LDsV&{2bX32107UL6kzu zF`wMR0&m0_mBUL8hWGZA;Uc|L1{@@vc6|uHy8TXTV4?jx`|*%Qo7G9{s9%ZQNkG5Y z=aSjNtY~qz60MK&fPbIWU-WU^(mMcr<8i8IS8}Yyucw?S z`7iq#=K~#45dh@VnDuUG%bUw`Aed5BfrP5^-wQN<6NWm@%1K4*Q{ z@kJ9fH05Z>CKZKC00tAdYru;A`eImWX!L;_&MJQ01lD7lOsTlAc$cW*8!|Y!-<0?c ziM_`*9b;AhOxl4UU{=D#{qhBvM`?o1);1NTaBsw*z1!Q&F)wj}9PP{1Z@G5PnrlzV zPn<29uY;S)LD;>rgyKO1NR_FUplj-^BTyCTj)`5kTJoc=67$k7f)<-#iACh-=nL<`Gw^#F> z&YnPi#ErMmv_i`Q5|5W`0wZElQr!v{?~ytanB3dKBb<_ZkH0PLAC-XK_1gS_Zk2*T@+W>3M<3J?|LyodiM;oL+A5e< z;~T4Ot6zKBEuhT1_tR6U=XA--9Fa1l8nBa+UCM)MQE-5tZY zT|2~X3(79#Sz!CrB`Yvq~ zyX{2IRV{b&wJn%9>U^BmkI(U6Wu@?aFN)Uig+(8zl{&`B9iZp#{%TW;%d`yi^=&`B zdP>qcDCsgxRn7Xro+38v2dyPAP=gt>w#=<|9u`jd=9<|2u4A1We0@xX? z+D+fCNSSrgD@=g+E$w)uu&~#bM3-}C)&1rae_pQX3BH#QZz}m5GGzCk@?G7K1nc0c zdA#J+=YMy-6POp0Q#&>TXW#RMFXpR*t&NRahtTfsf{i0^;mpqWDr%?~BVOsuKMni2 zf{{k1i~z}$K}TSOfD z)|D#7ul;b+(KH8-xhwe3cNX>8ryjT(+>M=voQQer zn>XvYFT^ro?fpYSDJo3oZD?5Jw^o>p?RncLd1r6YvsBd=Eu7CzsouNyQ-^h^ZQM#c zMWIoC_rWh8b^Q-fPo|$#k8ysbOKgXR2ZvBixEZ1$=XmrK+E(|L#f0Bf-1<< z;nug&fXd+I&n6TRj?R}Ds;{dygaP52@oRjF^S=7<(e|ruGO*L56||T)cXTV%MH3H; zH$Se=8=TEOM(SG%wbHF8ZIJs|s?qLy@zyAt z5cC~g_TZf?2!HKI0}T?6r=saM^!z#IdXeC?NP;9^==h4(kX*E*bA|mx7<;52&fJ@& zg-TOK6bFV`zU3zr;z}C>Izz7uS(?7iDSro9pIkFiKrjH5);f+2)mJ95P@iG3+RGCu zcriQZKJ*eN018Td5|AbXUuf(qJ653INgV{-29@QL|-lNYI~wbgTuX1X6!f``@^&I z+9(L0m8hZ^v2)%@80h?mu}iy);8oWpM$6wZ69qQp-9OcdOW!c0^{;kct6twqoP(BGz{TPJ zj(xm11;lqnvymbM^z(+H-=l~xq?wVP@nc)hIXpOzc251n&5+Ni*2m}l1vxWg_9-$2 zzyWQ1sy;C^(aBg!k2PGg$A*i(56g5dpBUT)aV-H zQ=)SATV6=1mYTm#bsnl9T=$*wVjDPlD2`adjR_4ZL;E%xEal5U3&-NSE#l`Bow$Pb z-YlZ?6k^8u3@1|oD#*AEZuvRxg`qK%BG~>N9fcEDA|Oqv zVJ8io-PAVzvC^m;r>{Ue9sG}?vj!!H4*KQS|H`SK{sc-^+K<>mHSj_5P|_<(u>aCkN06iJ(7 zUhN7rg%_N_S;3+E#sd(PJTF*k_(pGhA8xv=Jn{jizM~f8nXD+WcTI+pt#s_lFU;9c zBRuJrmMv0U*aijvc%QD~Kj;bs&Tb?tzUkxrxA@#V8w3YO8%`m0r@XDR1zb0l`y+5_#$e5g{@0*ezk-S~twZh29krlw{YcZWSbQr?#Xq+Q%kkH zn@1oz6nOj0Ylq$)QA7L)K(@Fi%Fs~IzQTz44UVetqMtlgq0?gy*y93^i<2urk?$(3 z1Z~iRX#K7`D5lUZe~6w%TKq5$u>D9vS3)(=)?zxVud?5mxjSKP@ZHOmq3VHlJn-7H z3;rRmL?1*+JJ|CnYYL-|jT|OvdBNa9d9mAUb;ELxYjIvkT!p>R-A|2lbDWYrIn^<) zJX}#w@&?2XZaX;~M)S_(D@nwENL7+(Ht}B&awN(Id`%}Iqd}jwK*@iTh!M1>AIIQD zqbs|ZkkRAHM}@_jvWATc3W9Q4a%BTA{Ja)#F6WK!`E5`<6DLqkJ+><*nrzu3@mmY0 z@cEE^)?Yg%6g?jLE+TR462Yp;v}2nfp2?>CLX)9Oh9_poH-fb;n%#@DTr&sP%4mox z!alEqE1Xf}`A14#GBkj9tQ+5IG0T3z^;;CN{z2J4FL$&pTx6pmAeUo|H;!839~KvM zq98S_K%xkMuN{}NE5c4|5TsSc)vF-;{OdQMcnz#~KvTP;aIPA&uV^5g29u+>DGJu@ zCJ}JieOJe|hO|!m@^r0EKGonJw`?LsK?lhkt~hf~U^V$4L(^IVEwu54oG*VzR(cvn zJkt+tNilEtWBAhFojk0T#*`y?APE(YWPR~-mY?@2?<)SRg?^-2Ge8t+HHBA23!jGj z{zE|l-}H?{$G|LGgHc9m-yaqE?6}`rDFK8Nv^so#priAn=GBB%#viV+$fsNz(T;&) z0jDc)YM5v1>-0xI4kccWk4P%lNQdg5kh#V`_M{t z$7S}%LE2FUCK((f_qyL5zyBy_`;)LA)qBEFfHea<0xK>kBs~6u?8d=hSEz3Z9pz#T zi*C#%x?nN&DkRXor|W^7wUvBRuu~vIjS=RWdr0T`DipK!150j8d4Ve;4%%Rh^*gN9 zE$7L_fEu?d@1%0^i;J(Xs{875-6F>tkwt4^N@6P!2+T4UbVmNmhI zf%ZKRvGzktZ0P}or6(8-Xk!m|#gVK5z{lx0wCHt3tt381@-@7JGUEwD`o-X=v6vP3 zelwT!4V81kZ?{Ip^KF2!DS@B4HY(pU41V%_dOgOMSg@n$o)bP&jy{zS*Dv{$FSmnd zYezPzJePxEf#;q-X)=c%#y&ZwWc!dul0EvI{HTFXnGB9ORv_ku+4Gfh28_Kk~4kbAAtTU=uyGp-wAchfJN1=<=8q+-RUv%O0rBHM{3qa!46IY75*He$CWnOr@ zxLsLE6y!GI`%osA-Aue*G0F%Bx|zkJP7HQA^8Wt8epBQmUup#BR^FQk22fd`%mB5l zd6AN*!US3I{aJu%kbv`H^Ca(1DnV%;NkWqZ z#eqUZO<${pK^}`w!*Y#6^D-C9QPa)HD|ImZWSf58x34x~ip06U4Z&I~<^~%q ztuOPW#|2U!tyYdXQv#ATY52@Hd>sJ&gYP`)_K%l=EMSmwurWqHxF3&b^WdB>m2uRs z{4&06wXxAO@sWY^WP&Q^T{{n92CV|Rr)c<3G6}P#SYuy@{1;#0Q}LDW9`6K?`gW^hd5yzv9P%8~>ojL{ z-VCHOBWCzZn*UN6HQFZgCJsqFeF9G}B6T5e}v=NZ{|IhV|kK ztl2pX2>nr4O$XuBHOyL2@-~bM;wd@jMMM@`Xovmg11m|tyCpK>!*%ar*v|AI!vy5X zB*wt%UDmaFRsi`_h-AFkr7Z%s8YPhGk*caQr`ZWcTE2Dw6mMFrVAoECNOMU`&gY2FB>p=AZ!1z zMM-4GK%34+>G$4rjb97ZyrES^*~W(C{^5G&120Nbzb}zECLlT?l4?1_ivMPQ+R)?e zk|5fcOHXZInu zBaV{$*Z*J+M9ILVBYSa#ZMbevox=MZdSx8A_x(x7MegI~k}HSyD!!LEZ&bb{b~UYo)AzoOPN)_2f(}7?Ae{7MkF0LU@IUmSVLbnhliqo>kkq*ZHN^U$+hW(0izp~CJAVC zh}$uGR9QM-ge>s*Wyh8-?62H==cwtU55OlO_!=U>dOUUOc6j#wz{5TS?P=w7MS0D5 zbF_E{vwU%6S&;R8z0@B@UEYcwL7lAon9s(kB!1K)-B*C=901zXae&YUlwqqZmnRyM zMr-|B$!7VFH`oJ~^}2Cu*{$JJ4~>|tQ2USUq{wL;U%dOAnv$;F=k}cxrk1_}2*wgFN%hs@)!R9y*Tbs8433@5-gcT9yU*Rf>P_IphP{ z%kU2*anLtLQTOt5mThUldeVUun8=OK+PUmvt1+YHvEO{P6$-3l(PWYy7e4lanWqkR zBrw=ES?J#`tAvmeHyv2xyD?>*;?KMj?BLW%U7An2KalQBNlSEje&{R6<;LVeB{5%% zX{Q4K)kX6wkMYU42p~T-)BLWY^9VXxb}@Q0EYNwj(ycB&e+eJLFguaNelx@q;{^Rw z4a@2L8=5f6EuWX2Igsu|$?Q;KdnV{Bz={ZYruFj89>8fODoRoxCg|%Oxw~i;wZV*3 zrZ8b0GhYbgl9b5ktU^3IY{rDMJk0a}5ZJBrhd$Vz;}|2K*f%p`35y~X3xPbuCHUn` zuB|Z6@&T1p0Y_+gy20@^iJ0)9IbYQAv^GABBiWb5GzVM!d78IM8sm1b$4Qv%PI_Wm zPCCP$e)rQqP}fC^ZeapdMTWtsbcm510{cz4mX4rMdoiMsaVA$4@|&Tr4fL}7(F5b_ zcw?A?`n8eK!R3TEKERvV`2u)19>3_YI038Fy|u4bXu$-%497jhz}aI&Xu4}1FSede zVWP!C9M6a_kGKZrb65E8!Yf`wBgZhVlTIYS0|R(eSbeiC8Mm&t$J1RpvqP|=s{S2m z7-`vnm|Xvwf8rbTTj^D(JILVh@zaD4&^sQ31r%t+8VxXd_RL)YfphX-iLN7BIn{F0 zrIo5PtsXxTiX)znmMRCPY_}NgE_<b_)H4(vuz#*O0N6-_o#XE0Cs9c7#BJcfEZe|IGr zupy)r5OwCJjuQujydW~YEPecc!a1jvO#e4Hr|0dHOC<`dpqYNk`dTtN^ce;K=hv~H zNVUxpRrrd>!#LCxA!N36KoNVuYR{W>u$-=@Gpe`3q-N06e~|;dbZRkt4Hon<%e`!s zzvKL0TVScI336^laB`&EA%KO$BjP)EcTO7(Ciol}{-0=0u5yYfIbh!r`Hdj_^^zbh zB_yl#Z75l#3ZcqGWM}cfHLu2{gQ88uOC9{FJjO^#kQk&DIXM$ltsG)#{f&MTWi-Y= z;z3#<8f}l*NMTh6<~g<>o%J!Bn&!y0L+r);0=U1}?Y4#k0wJZC$G9rp8gQ#dG){v zmOWJ%rT>n!SaxK1Y?Tz?i)A`fdd#q@n3tMpy;IK;Qa>Y=ulB%4niFVbe+FHCI|X|0 zzP*0&B$e!02A>=aupWiFs5UmfkMgu&i4+B%pr8*X-KVKezJ5hvh@zwm2lblP1mKr zdohPM!vf3`y3c(z&3&8AYBMT!`Nf|7QAhs`?4|VegE__kAKzXpJTx9SVEnxv0zNgM z0S@#&$^mKwNF_Ummz?*$mo*K8j#R-5Y0lb_{lKqM4g~Qm z*X#rYTFiQ!m=bv|TF!iJRGd1E73+TvAb=TD@QzW76Uxq1o?_t)X(suy4S#K8W7u=n z_Xv1*H_K^0O{j`p_r)OB5X|_zZM9D`$-@!VB+3s1dRYL+yX{FGe3`*@I$ryhsnISW+D@@UQ2H>Ein39B0d1Xn;oTZyG|MrP`@JoaW zv{iR3o1tAhXr{lG&QZFa_K?C2LmSv&X2~2;(`Syo>!tCdmQ4v0qcLI66;$loS3{cX{yVH(&AiVkUsL-2nPiIhnCbXlS z?HL*1cmXZ>xf_vL@)K&dwU#v=DgSmk*7gkQZDs0iYD8l%s4}}4%2a}ur*!?zLn>g$ zvy0HtcZoP4@Tov8LNM$^D2 zr)f1nFK}q}oWt3)xA?95wZzMIvBx40E{g5BzAx>14U4VrozKhYMp}OJYQ$Z3>StMO zTC#Jsmx&`AMTX_zc1RT0V(53|C^3d_FFQIo5KK4&rDimcCC`Xr#V5Ud~v^u)q4~2=E_?FSkGw%0hir3EG(>xQ|EX8ocXH~8vT4_-|{(1x8 zXmmP`W4Zn!3X_7klls}B>s5=BcIE`Yej^aTxK`K*;BcCMOG@#_NO;nyB&BNDYq3 zTCC${OLokV5&`?Phe6f^AO?lk`>TT{{nw|pw%mBMu8TK;g@Ip5=}@fK@YtJoXi==6 z;}->Eq%nIl1l@#zZK|$6k2>~rpnpO4-gg!p@f6&n$AM;Vtao1hAa1L^-5Ma;?Vo1r zT>-o}o6K;ajs;a&;fgBVu_ql3czU{GRHV=Op08_tO3IFVC1}z8DoQj%9(srw z8~*J!tsA)_l!0N&@tu=^=FEh|5sO7I2tJysoAdAx+4Pyg$w2P@>!7kcbOVdllIxj_ z-vD>atv*_KZw{W)n)g|KV9waz5xwzoGb3ia4X-Fg%4c39rmOhprc5X@s7a}ou_cZ& zsK~caJj*fC!3qu-zIqT}L4jR(Gr;meevLR!iJ)n>;heGOWd(IpR@tEiHv4X^sOlNp z-kq$q-Uj| z1J09IQOM%DMMpolRN5VvpilYPG4B+pk8Rziq+h+V&D@;8)`z5G0HmA=RYz0&6(h=`fmFg-C>hs3%y8W&&hd#NPq{Pnmyvfla*t2;}2#4y3YEA@wf zm01Y`S#SYg<*84nb$H#6w*|&Eh?TS6bjYXWKcSVJGv@xDe>I(TEpKwQgJTj*e{BU4 zWSgx(&)Y}es|~OlAGdp5j>*oNL?$pX=3qLs?P>}$vk>!WsT}#AuS9^@wR=f2d*jp} zO*>?GMK3pj=~-P+)#1-sFTX!;_}+8Stq{?8o7l^szPBtJ4=y;xZc*gMVLcW;0+yNK zPv92xx-PG?956iy94uu~BQ49KW^+HTsSUwP9`N$1)qC0|SHmh*pXtWEdC=mvi%^8} zbNi@N>Y0)${G<6}9f{8kV>{MRAIUdrXY_gkN5*Xk984J}+ zQevV*DSV+779?@6fOj@ACJ0Ud%WtfWRY04ta;>|U1^Fe5dBQO%y*})s zi`OyMGk!{9zGhFf-g0C-qq%7XOn-#?7~+tF4huhl z4}Kz_zF!9+DLy__`vM@7QaLdM>=`K04bULomA2}J9O}&kUA9WCXI6dm0uK5In~$gR z@xU@1iRZ4TnIjs8Ty99BMdHCO)Je9u0vJl>j*e3&di6i$I*o_H%MeJxbL_I0xB?k3 z$kFUR>a&z+Cy~{&`lD5cyb13`5z{A){&sQYvvUV7tZqfNH$9(u;u*#BKQ~c%7r)lF zRNJb{3dj8Zn$JLgaEU^?{3^344U0q#E95Ypl6I6%P9tJIn~fs6beE}zy$_WcQ*KhMYO^qD!q8F$}$k$Y<9`&f z&U4jgeATm}D4}z`fN0k>Y<&Ie@rHYiuaV}}pPsBBF+WWWJa99C3<((--@Y;DEdz;2 z>T8EyAVNC{EUn34E`%3_9vmDbMz2j|>i;}aDXs@sk+f4@hO|;75wwQ=+W%R9uX(-x z-w2cXD~o@~t|odPA@SBIU7vT1r^U9Z-XCH0phc6OB}936jbWm8uPyFmXR2_CC56j zC`(Tn!Y_1vGwMphM!j>TQ^##(+l}%l=CbDQw9DA&wXSs|xeUnwhrntM!M;dvLp$tT zkr~B|F~S|NN-|5`ABu%Xx^F{1%QV`T-gq-EoGv~eMkM=e{dCF>u=>q%Tr}nzuu+d3!v)gBt;C}u4QlpV0MZnc*?Oc(G z<)gl>IOSnXG2zn?6%b5|R)RS%QK@JcCxzcsI*x{#I&Qy~nFwb}payJ$6G~p>*RP2u zD#e_axvh;zl8XaBsLvw=Ske|6F0iO+%R$WQ1{1#=>i4MZOVhMn;mZF z)@%rxQRyUktGa@B?`1#W)hwCuYWAi!kWWd#;Jt^yhX_Hh=K-y$ZRiP*0=*3glym9J z2pg*S(bWHy$;ZMVyc)Su+B6z~+yreZdE-$3mDD8&{dgD5ET7mDISB``RDAHY>*|`^ zTg-$`Fj~Cf#|LjGIVW<$m|>!p!^j@=UHgw=Dfpn}HBVyYAX3qO0AdHVDlmb9zs0G( z=~jfjD0>eeH>zX~TwNzQa6Ibi*CdX(jJ36>g8G(4&#^!ZZy~^gXE`i}3QNJQC`n3@ z9&Z9(5qy;mFbh0|#fVcde1QpJ&*jNZqDrx7_P4P#F0mg2oW>o$&v&$JdIHODS&C+? zsUpkW);!s9GDyM3EAdodfNvr;9Xsy12~)+$mFRtftOL`S>Izy>ZI)5oeAuMPYJEkU zMpg0`(tn9b%iS&FOMQLli?Z*o;wdWYePQ>sUt#4kfjY3_*3)}R%=-E%=;WXI2X z0uF6}h==m8TjpEiR|r>Rs98^v(E;E#-aF&Y@^jIU zM&`AKE_S~SoG<&B+%bz;Ky&DgMTAbej(dmqM(a?G0hlgy!zsFs@h5o`Q%W4&R=I;* ze!{mO@IDAf5x?1mZZ5v7t5YgI?}EJ=EM&5f1EF+ih&7hk4lR2hao#O|m;1?tS1J^r z&LYl9jH2#?9tlW+6pz2Y;$2hHO?L7Ms>gM*Q|1+vZEnP&U(QRa6fNyO!dOmFyIR4M z+5S-4|20IFag7x7=wqoLiqx`AOU3N{IwGa0;9%IR-O3~$edUNBbsP#?qbkHr9MyNU z?D5v`B`LSBbck$zIj_M?x?>iGC5M8=^hK6;dvYIzJdF<199^g^>Q@;lcSX47_Ukj( zeZyOBkMAWXGR4JMJDv(OzKI}U*XQ}9^++Uy5^6<@hIDceE#1FAau z<*U@@T1Ihw+pCh~2SiRBV|{nGmDbMF8oES0OJE!Na87#UeRd4l+}o5;-#P=QZppe| zf7MwSz^Q}>(=^(bG$p6V&$}-=@@i{@_m{&uc<#$61(}AK)|FqM=G~AvT<*PUtqiT? z2sd-%+^yxve{tNd&)8F0(*HIS1n*z91k?rEzmn<7VB_HB?plCxU7pnAx=|__=2-hx zOy3M(rSsgI^<$MQv|?CP`RX;#c>eK0?9d8*B~#q zpl`ki--eOS(5a4$|5YDJ;*A}0Z8cm{PI1@FEaA1r)<-RwIX|GeYk^L%SkTV?UMiDH zm_Xg)ZFZpNGqbhUYi??~A0=l>ipgoz_Wobqu<2Qkoq_XRNZ-BWTT7)kuliQeA-v)v zF9;r(f(5fHd1v91flM&r85Rw<{c0(@hN)wtInh%75`c`%f4n7UzEf z6`h`<^B=@|;zu7a zOx_zqXnt~BgbxzCA#Q*SD8dV5-?c~Qr8fiw()(Gwm^AYNT*du+8nVBciK4tD?~-T)9(J5Tsw%;F-TKr=w>MYRY$0YpdJY6E2Q!=UHq>Qqo-G# zPC6LeGy(w)U9!EbN?tGw6u>P4HEa--P(??%8v%#XzwNf~)$mW%b*bKh;Q)Tb^0Q-I zjQC)a{SsWk3uOPbAc6zV;9x-k+maw+>VhG#afpyZ>a%m**XK}+l!C6&x-Sg`?D-@C zV{b0On&at;o$=)V_zB)G-wD|1-rtu2Pgz3p*o$g2rvH3#U*>o1WCDo!oVsg}f6H!5 z4@Y!*q~@8W9vE9JjrwJjb}5QTR!nijnzW!5{ru!6I{sYc2Nqq^0ou?Cf`jHjdlPKI zj7&vp?*U2A!)*WUaWces2H#n$>&`y%n<4>TUN+qa_KvP`P}eC5su~(MzXdz%QJ@>L z19-X>KHKw8OB&n5;-?Z{kM(D&;I>N&{xt-%Hhwy%og+=jm(qxXKyV-hHCAc%rrx(U8lVPEB^rOkS@HcF?P=t6Bloo$`&z~`ZK~n6?hLGc!xM} z-I+YiUh+qt$Ka2OR|jH;E&W|PxxU%hQ~U?iTf#V)C*RLmhpmItx=QUSPCG@_3XgSu zoPS!>*uHllblSN$9gs)q?;7r|0yyAPt1lxWA|OG}SvRk#q6bBd87?#%OjgVgP(@yN1zq8GLsme=DkzL9p;BM2Dgy!#M3Hk}--<;JPSnx~- zAZ9(J^7};@461-^p6IaSL<3O34LiJMyt`=TtBokUu3;v3S3UC@s$iFWax!jq?r@6F z_TMKAivN{x%)$G1-e8~S31y77CW4`?%?E7(p zQFvSxdNMak>o1fwQGA$X@kOot*i00=yvw%#6&9ERnsYcvz&}kZT;Kr+GUVLZobim7 z`}1vO_GH3p_Q81mM!&JxQ|qbRgC#SQqmajH%ZFNV$!pwP$U#Jo`QJe_ScH5YrrHlI zod5egoWEH*eC(!IDmU*At}oan^yyqZhP-5CNK`U)bgbDB7`1TueQX9!03aN}4&u%O z;Nb(L3E)o9Q^#xm`xH~|e?t{~3h3bAa0ge)oIJLsylZF0qmI<3y9}-qafaCZjd%j4 zi2xz`5pd#DH^~st{RKI23;Q3_#dobA@1~KTbZTu25;w34w5=3UvW!i2{Cm;@NSgmM zILXy2kb{#RJcMWm=PnI7EY0IAsyUE!D2;gu|95q01E#MwX2&iBRHVueiipnt0SRDY)gYSuboBl9J|L4+gs!;)XXrx7sBAj-YSGGjIe>5Y61vF9< zz3rrcW2nN_QzQf34O8a*c!-&g$40T{q8$-q$qX>^5ca=nAa<(Mt)NmB{Ct2@8&$Ip zhc7|)LqpMaL_kfzkkgumlJYNQv_fGMFqN`jnmoR_@!#=kHEil%ueD!l!tdcs8=L&% zCGG$ajyrd)hLf#xj61}-f7M(7*h0sd9G^(YI9ii#3# z%pf(~)t}{W*R2p4ZaaN4HDjDi%U!iPNPQ2y4nA-4^z*^7nM&={Kl{(QL}sA;f_%nS zJ^upSP~}WP$qN8KKNCE;OLJYW0oPSSR7MJUo22o+HRs!Ao-`vm%&t;1fWt8dL-ceP z;xt5V7j$()O;Ggd6lPq7jIWA10d&uxa}4$$VidnR%v+*Sg4#_lE#2%jwbEj65eK%h z5ROa;=Bc^{+pLYroF-^Dq@<+0xY5F<+Z=chs{ly-*~NZfyd;n2gMPG?h8~#+cbwlI zYVJm!Bu0cT1{=r1ed|t&-%G?$H6x*5x^H(%fBantM>N2u+mN%rjsu)s>3wXvdeavY z#6)u7zQnALZGmp^y7~h>acb+pjQb=;e=^jV(fYZw8@R^mvSlcfZefz!oNepXGRz}= zjxwpi(pS{r5JO_}774+17*uiSd}h_l>O(ER^d3Ff_Vh4UALDxryLLcnC|{){F*s_@ zH1IqX*k%%^B>tIS8MdHBYrtXxLyv4By+nk6DmOu%M+w@W-=&;z{2BpTsKB3}?^6B4 z)h4(lBKpmM5`yJ4F@ct^YLzboulxs_MxJD>m-wN@Fle*tmNGE){s2Y?G?w-)H+`a$ zektP|Zo`cx6HYloo)!%m+^$cP$b?i-%k3fs%AuEF1h?!U_c_0DGj@K@D_y^4~59&~5% z@HVX9-rwvZBZ&CtXA>Y~$!OF4SabT|-0^zI5$wrcu6#@cD|-a(`GoVq`B&jeu7Km{ z^F*Z(JY@ul^KbG zJE9T?WsvbSG9Af^K|S!~UL*g{#0jpCD$ai=(f=R*KbJJz=OV0zz^-uSS^dxK3t_r3 zy#I#tY~KZuQ93VM2~K4V+8}*xQwjBGkF1H)`zGN z5HJAMEC_s%^E8;c1Nc+MNykw8)-Mg0_=9a;$_M@NrlrQh#c=1yczHLpvDX1^mteL8 zV!?1x+CNz*f}EuSxA9*x5u?hF3ua15N74hH&T6!umE@kKv#aww>RW$754XD4O!Sal zC>LKPSYAMv6Yx~{R;&sM0?o*jP!M!75;?~Sk;le?^<=~?&!BJ=m(A zjg3!TB{Z&qlAHj;a z?#l@iDg@ufuUf$@^=t`W63BhrFtEdxt)%%sO9$B-V5=F(pMYdskL}UvZw2&u_14Ny zT=d`F3`C-~>WIErmIZDBE$XauV`US=Vvez?{z23G{=K`lYGaz%@^evPh)Zj4-V^Fq z_R|fQ0iOTOoXVdsArC!t@T$$_N+a)3ZBU)rmr9eXPT$>_bDp|ztcWN-ZnV(?@36~5 z5OzT51=Jm)wT+oq=WEYyaz@q8B-B0<8M38-dILz~oYwm=K+*U=5qI3*E0D~Am{pD* z1tKgiE(b36EoP7&$96XSP|ZR(wb+V+yC3^x4%TjA3!3h&xFCglBqKXudFmZ z!w``o*NJyv;h}z&V;X4E2?fU}&QzB?Q9hY6`nh}SYTapPe3w_|e;X3wdi#e2Qr7-P zu{liD&&xhLyGqs!L02}mWeOxjHd78?SCt>%+;+Jbj#+khhv87pfw&sP*uakt>;*tn zu0fLw*aZfUzif>bK;Z$nWpi@`C{C=mPWf{lcHad+NEblyBQ@C^IswYPOh}3fbt`^F zh%Fn-WGCm#l4UG9zRZ#`(a>=Zg~GklEf-%wS9^7l!LdTV2ZVD^P_*~>lvJ&U1mXffNKFS%h(rnS3dCL?rry}jlF zV_(SBwSHz@coG+EfN;l^wB;;1>BTrRGIKkM8tut*}bv0 z#sXIZnatm-141%nDiEL}GbHDb&K8dY1L))* zP;n)#@m+x_lZfwQ-YFVu8ihvSWEMUoAfj|g zbO>EzIzgBSTpeaU|Br0dLG3!!%mJ|BCSBd_udCGaetz2D+ zLEe+oieCz@6L{t+_H%#yk;xT`IeYO$=m*=;ar_Ayw9to%l$>`Dpgz4e>=q4TMZg`TZ{cL5ZNeXMs0H;k7jsH+AUmT`eu_fmU z5uQ8*1wc&E_M|!|A|5;@N&SaZ1QpVizNs%tZsdznizk0V9mV|ft~YhASK&82lIN{Z zX<;5h3}1)Q2G2^e<%^nn;vFiYaL(rjSk zIL>2=d{2y2DYM-S;uz>l485AmTMy&%qe~j4IEueJhI-Oxxoji|%+gnB`u(Et+Dw${ zVUfCoICNcFEe9YDgk86pup`c$uG}7h%s6lel$d!tem$C}>CXGMUKoG-unV#B`Z?!o zqZ`Fj9sP|JD#oNcSQ|mrloBg>0YO4V=};1w^Ez1ZmlTG$^G=iGWChfHX)+cehAMx5Q>6NOx|Ub8nybdB-{9ob!F(zuy>) zfdYH2z4n@G&Uwf6yPnP=PTnxD(itU>Aa zdz8mUxRhRAzF2qQMc8=tFMaBu3NP=J>Ac`efqST>rqzNNlcTdyOX1h)8n|w=&+B#BpvcKh~)$;u;s+z0j-qB_43cIx9%O-;tc@ju*qU zmhr{j>8U;w&7_j4_PCTp_Y9r0WOF)4Sy+35dde<})uBFlhc4*GWkFwB>-}?*$vus{ ze8)X!+vOYEVu@aV?WLPvT>5QG1@3rIx}a)LEh>S3LM#=p=tLYw(j;D}3HC=p57`t~ zPESR@>#BYQYc4yMS!Zb2R3zZ1l{!9uqn_U2bu4qo`%5Lw zyb7(J_la>~m8-6<23ijY^t~mq;iS;N&Pfb@jIiF;tU2Vz9;{2b_7L>N9Q&l3IWEvC zzl}h>aX)*re?0GgS;=LL?}KEbmlfmGZKVT|nw>N-(>@KJ8SOc3{WbCKJT#S@O)=Im z0P0bDV^K-W6LofSZw5%QmyTCadX1>FBX@uE-Pc$iJ?^Khn>nT;_yd-7%bH-9)R=g> zNDz0eBSUoe68LCCyfZ`TzIkt>tUO`^oNMo4L0owQM*8JS!m^X`w)r#St~uJm%7b8A zG}5%N&iXng>l24&hc4X33kHYD;`x0d@}66pk?k{;VZOeS^BidqN+!0kVeA%o&Ci9Cj&yI zs<~Mx{r4}CR5C7=w7o}1Z_R$Vp4d7&U+)`r(*U7iw}WJB7vtF`;|wiozeO{jy2CI+ zYY?XNe^N=KmeZ3i>(bzj7w77bVnzd9YOs>Vzg~ytS4jKJpF#hai;Ih*xhJ$$$q8m( zm8KKADRoLtDtI(mpT z_~yifs~Xi5c;BRrHC_>26C5)Xm;#Q1FbTvfrmQUW!Ttz_sD*_EM92^)ciUlto@sfO z0iGw?nQCz(t7~hH@9@nYK_9~-vBSRTv!Frr%a5w*PTtALpl@a|-JJqh^G;WgRqoF! zLB+fstJDhIl&1YZtch>m#q;z!Bq{F;VzK?&K0%$`KJH`GN+>>V8Y8~tDp&or?`3O_ zDAw^(e%+-AIdT}lU~H0jQq1w^m5qq#p*2>+(WDc#*fvl3l>TYQ(MA8-i%!U^5<*CZ z-?8a_pyt}$b$}5C#4D+kr=SD_$d%>&3kn0!4{cuhTq)_LW?4t7@=Rj`=U7mZz}FM} zXX%;v&rWU}T39TVzWCZ?$QSZjxMb<{MY6K8%{AJeWZHV%#ES&*iB#%TZ|Wb7t<>|F zyA*0hW_gDyqDdEwV@aa@wj}M5x@t0x%(hJGPkE?k&$q4NhWRY6QK~4bL^{HXG@`^3 zkzhRX{;|K#T^blIsdqmh?!>Uz+NTCR<{&IAEb8!nz`AQl@#iei`&qii{a9~9D$pL^ zis}%VxzT=kfHxvyRAkati3MiufCwysy1;ZZ%)K!wF0i7_f74~rVvbg|94~8qBauA> zUMp~C)}2Ku{C`6|m5JjbYJ42X#F62W@1W-qz!}2%R*)Nmj56%OOkS6lmlNcXWkLn! z-NCD*t@-VPcda?e$5Y(0O2BkQa4S9^zZr_JkPPx0iJ9@Rt(h&G&!em~Nk@ zs9~@8|B-hT?Aji@V70%m#`d#49GfS}?Z|9|ny`r8GnGc}c}gnl&!n+CqD-v>X%e5d zK{qYBS9tbGW$~`5hTMp!`)Q9@Fiao2ijkcidV8w-fhcEEbH1U3j0dx{ZHWHvO~WUm z@&oqV79e%B*Ihr~2`CKc341R+07V-h*UfMF*@dX-`DsUX#9JI@4VATj=HQ=LXCi&+ zLjBnrR?be3mbTq{y5_$#+z&gPS1sHz9!KSI4HXMd==$8aBXZ9WlppM?ToY*>$!PJ$ z)<-$zrkecU)x8cVWUt`6zqSdzg$OnC7@zNjjnKaXb}t~~1DgggYXBe$Bx%}9bih!F zCEV`t3&OemL-diz&6&b+jVI|kFhTl*CZuqeyR3|?HSx*N@T1r4sGllujqb`YB;twcp=NpbY5Pi962xd z^M0@5NF=X%G&cH`JgbCCErLb%{fFh{Rifb&qEhx4^HPzE{!QX7ZH{+`x8HiEO4!dc zzPWxR*8a7@ywvE@Q4K*`$BQPf?}t@Izb|{76H2>APPL}hCYQE)anOAAC>+t$A)n!L zGRe6pD?#PtffP}ll`+Sat@@H0pcUy24Ui(vL)m(;3hl3=+=$PX^iM9lI~)*JOp+ss zGrtuTA)k15eCDBTbMjz%vm#uOIddH=?tINJDm$6x;WqBj=ea&F3O~a39NNIU_IJVA zD*8-Aq6jr$KxM@dB-~<~UwVgPe6g%ZQ7fdR-LOqBG;&t=V_%U+U?9d9SI~L!N#fF# zAWO<*-Z;xEARN7Q<`ApmUK)@E>ICSDxG}s-Vduv^+tHSzn zZNO~7@UjCG05E~+!xTS%lm70op7L@ZyGLor_Y9Pm40iVwuYC<=94%u1+%X%fY5^%o z{$r6sSyCkyp3Cssado;5oDBu)QN z=yXSkY;!B>EQsfu9odAsusotz3(M9de&W*Wjw0K+&fsaSo{JUtxe3o{NSBW9p-nUuu3% z?d(Uls=`*ctGa3sffcRFD!klL7B*2CY>D&nH~eQ`QKwU{7W}^a%a+pUoCiF|)y|_G zr>K2sA&JyLaUTai4H`P!!V>d1;q;l3X`^pg}kRa)lviOeCz0=b= zS7uiF;`(}<5p%wysi}rH)=o|%-SAhuG^J42Z!I+Y(q|kQ`@E~HW43Xgjy{u7%8d$5 zsd_hiUIuZwcE1b!t3-yDElOkPNqwy#`TRWBWF4~6kT;w}p~@khNJdJE$w;@(Y?9Ve z65$Cm1dl@^;>{YItQ)}%@8+pcu#A=Vz}!|P8f_&UuW>nA_|YRP4rA^myW^99oiXQ{ znPa5xcwT(vqZ6*X)zwQbyKk*{g-Ub>mW=z(6)JUyTURG`WVZG_br+22FczjG9j|6! zg#}$Wy!{vKFrCKp-wr*BKY9lFZ`Di=?Ezk4n!quj6M{f3VPv6h677nLJRv*#ol-W} zhYk)3qC4uh5;KwL-6@hkDMWplo=URX^Qjf3p+7nKk;6cr>CzfIIapv*vpN4a)lN@8 z3KtaAI^zh5sx=8XFy^}MMio0bIk~hL!0#~Gc8jWDrH7R|j%!}tl8uTP10wTnu3S*6 zm}$`}l7CC>ZM+!#YMJ3``J{;TZ=>sbyzt&*(gnwIhs=X)Flq5GrPi!wHr4@l+w9R& z_l%wqPEJff)pDu2a)VpynM|6drPA=@5ByO7i0%5Sb9ZJ6%Xy^wlw^3s{R02w{##9o z4ObLekd;I3RWG&W9>d{V|jPk$KjE~cf+fvU9)ObBf7o}nsv?i zPh<);f2?i3Xh+wf`8V2?^qL=u7P-W2VgHz6Thhr?3z28}$L1LPRYmuV#C%LEzdB#O zBvw~Il=#Fg`olcQLk05Hb)^V~i@{2jEdv+w-!TqY-t&mq#YRS4tqEyX52KvFyJf8I zF`$ptFC7qQY0qwfGhy{b70-a1ad@N^rIdf9(|%0oTWi|D7V)W=^fA#(psATwbB%7@ zi5iHr>cyf<#2qvj;~zHd=OwXm%?^68*(D&bu$lz13p~c{i2mqHH#Rws4|nTLkr_jK9IE=Zjo_hbkU*9@8SvGTq8oTjop7>*!#OjGd8 z1e1XzdK4+Rr%8lBZVQyRzS7$Dl}n4~;#{(o9)2z7`0=GSx743E(X%^a(oIUt1J`cB z%#7235%n3Enzn8`htO%1a{{;w-1OiJ>J}jX4i|l6Ydf`-%}z(hu4t>)fBT!bu!4)b{z<%i8NI~log^2YsY{_Z+|;?5(XG1N zL$%jq4&RSe+Xs)0rY_+p>8WP#zNOBhY5gOn!z)B!6VD!_m7Bdb;yoeFgE-=Jy1BS! z{!3R_QXvk9^~w3eT%&$otDM<;h|{*`vl3pf`kK7RL_HIaDl?|%-A@PhW9vt8vEChx z_k4FnTfMMaWmRU6Q532ahz|R{tlsE;5$W>nC@}SV^$4EhK)jsNvGj|Undv;Y$$b5f zdERS$J$h!9dcug1cIt6MhbT7E8*6DVUYH^r)xRR(z5>C>h+gkOUJLNZoE(`6KX-+I&I>3Wwv!k5DAUO6AC1p=y58GDcPT9?;_=mI2m#(yYfUB_B2 zlN(q1g3YBc#bI+GlvjUx)}nM)(kf+N`sukE!7Ds0L+E)!I*0`<=eZE49}pu@r(7T0 zr`&#^>@M^(o{0%PLPf~AC}BloJ2B}MtYCBcFx-jYV(Bt=RHKlu91n$s&3GNxP9ABs zIQh%@;`D@h%-gOc(yIQ&OFu3^*<<=1_s8{O`vLOk+YvXY^}HCgT-F@VJ32WD;}6eB zb+ZQg5kD8ZY1>eyQ*q(yZj)~E0W^ZT`}|#x=6F0IM7pqlI8skWdH3C=*jQsFUwaL_ zy+~|xegWC91I*#bHLz(V#0j<(*<_Ap^HKVC6-o%xFY(vzZ` z$;Rr>e+G6P4Ws1Kb)QWJR-a3M*KM~)9o^j3T|0BU>9i<-Ja}OJW;fgJAR<5R)D@>8 z_(YQ&asbCp$BT)g$fI+FadgYlXsRiBf8e`PgH zQnN_^n|yCzvA%FLqmgh9q<@8lg=N!J{x+wnpT32T8^{MkljqJ6&zrByR%acq!IToD z^2@eXDj8<0B=0j`J>P!A_cBOkT%_c}jQ(Wse(TSM?Vy%6{|7R8{8+?4kAHqfPW({Na>zVb z@9SHx)#;QYx78eI8GRy|1{U_!lHd&W=$-lTRLXxOdUdIsDoRBvoo@&^9M4N zAcKgul;FI(mh~lNrE%#_kxlStdC_FOGUL)!>w4$tA7RyL*Y^%k$FcasBPe9(92>Ps zk(f2m_On~b4~K$-&%LxL^}Dw@o$uPUu2g7?NQ;U!FV)SHvPM~0)Gn*t^fRYRoi5Hn zuP1QL5+4PG3b9rNMNPcAaJPQ1)Ts8|zuD>5(F<*Xjx~YM)JqACiN~kUAJntv6N)-L zUaWih+-1Af`Q0Baje&DnVlLD}N+_QVv^U*&g!@SOQ{?Gwy5rT?9=24=%O0bAr}xFS zb$`@TH?1|g&A(^LB)Iq6E}CPjsLl{Zm`3yy(K3zAYy-`Z(8Y`&{o(H@>WD zeYc385sNC5ik<_$d> zdoJ94^HunHvEHE8b|ODthC`}4bZv)okBi%+!;tAT2!>et&5UthSJHu;8BB=`w1(S? zQ&+9TZ5V>U^Jgbzr zR$ux?OnyL0G||^s3o67qz7OtlH}c5^k`~SnnY*NHJSWlLUomZE@Cu$S_{q|wCuaSR zdD8FSzg2{CPCn_$B8+d%7LjwkrlibO8!WwG#~0Qf8@-1$wVmj@hZJ&jKQsPVH@z>| zA$geZ-*z%ib+PV(c%tQx72%*qlDZM{&4nR@kD8RbO`M2wuFe1Ks&gTD>vt|ll}3Te z@$|A#7Asyf_1i8B20H5iWW5o~z;Hy47`+|KqZi~SZhQ7LvKBq(>^t7v3C;P%n_ngU zp%Zu1OM4}MLJ2S5A!E&@_{tBL)9w5lu_yBd>=)d(SgUbeg)`&s90djmKM~3<;dRQb z@-)7J$nAXe$Osrw$0 z-p*Ik-|_1;)ZX6%Wm(*Fn8b^=ymr=Jxais2{Ji}nk=N?bL4UT0=Cz+;=(}g?qXpYK zT3I)=&TR^u4z%Fw&7hqs3}B0;uOw#OcnqO3j~#+fshBU*GCGdH8306-kAV zG5UGbEM=jool7B^tlabZq^xR_7OhBYjp*u?^}zJ4;}Ee@`=wK4@qO;y=Tj!Z#prU^K~)w0$C zImBm&hwC%Iq2u9b&mGlr33lE4^QC#;Bjl;=y51iKx>( zf3-+E{2e3K*tlxtQ4OL4DyJK{H2Dcp-;D;kyB&HY+g-c-$>YM8AVc>4lSKV22g=LL zXG7_1u^u??Ki1arcwBZugI5@AsyE$@j2>FmPM5Ex%SbKn3Q7%fUnMEYh{aw{s$+{r zb*qFM1XL@w@~*69d5|Tw=${-CmEZO<-qpC5cuvcAOeC+Iy(3y(JU(hN%XMgLa$K(xxm>Cc~t09lEvd9~$Q^ zRf#_Me&a|MXVpC8G8Yf=l{n6K6$1hh9g|EOhBC?&u>r+<5+(|)x|*~*u~gVe_?(eL zj+z`Dbeds_A>khekztR6%-(}@Oo}FZH$o(nv7(%>kX@YT&dEsE&Xf3%^DgUA13_^l z)#b9E1BuhBWg}zEYCl4WJZ=Bc*+MSJ>%4(qxZam)$#LZ+BGDo#gTcG$@U8F{?wq&P zQ|dzu$}_ib|C~DQHx_X~ADra1MSXOU84Ix@ac5pxjK{Qc6u#WTm?O~?wtcisQ zX*T5iPv)qV-2}z*#C1id@cPz?Rl~>tktQJIhjz@`&c{1BK41g_2l#k&_)_8B6YH)` z-j)5(6mM}{asDP1&%>+7Ob??STjha6 z#7wvAVh-d6pTq+PhbXvc(uKn-;rdklhpJz*8;O8Y=&h_&B5XNn3Cc<8T~o zVL?peypZe*>3O>Y=SC22nMS=bQC~pQKg%9!G}Bq@|Bl=tcWbz@if~v6Qr5^;AM`=~ zP)alrx~xSl)x9P~!RP#V?}|X!r`jUdPH@I z-3z=qRZTNYxFh}OMqUNT8K)lo)Ek5f>e0~=q#qk^Wij)_&7>x|AaPkn6;kyzx-N6~ z(F~gu`$35w+B31l|KcKu)e3KFRSWh0qQ$3IzI?taekgQDWXa%t2v+aCH1^moOoaxb zQ^%T~0=25B_byvb;H6+l)or=-oj_P6^*hq08da~uP*d*rj=D7#>GXNY@%rp#qMlgQ zA>G@i!j^=cY#9rnMm8t>7Cj`FhNC-DC}xT85-R&MFSU}Jw)E2Yf#({ZHGMbn5w zflE8up}oQHL?IJHe>6cK@)^hJNwAtv8T(bc-RFw8G8e*(p~CMQyjbbBF=(e>02OqM zs5DKb{mok4(OOfy)1)8N_Upxz$Ra+WFH@KI3M)o_dgf7;^4gV^5DVFkm9W@QB$&nN zFU|CUop5^DLG+ol0G(rh{OJNgRxLoQv4YL)c^7C+d z!m4=n0m~8W(48^K#_9((E@HQfwgSk-oCqw5yuUZpdPOD7Nao#&QWsk|rE5>6scv_R zv9Mt6*TQRwGqn0!aEEQ_d!A|{EGWr?MiHc~k*Z(J2ABC_6+jQsGXq;yP>?M}Yv-fX zMs_Fd4Mw_-_nB$rxw-uN`FpF~)ZvEQ@)rYPUwX%9Y|eO3~Qs z41sqK4u_2U%gk^fRl~nIiC#L*S6$UZvA7&P9<#1LotY#x`b>RtbGRj|K%R#2Gdnzk zP`V3Mgn&H@pCMX-JlEyT%3A4o%rNOrJg4bZssTf&Sb%zszB>!kRkE_W8dySR0RjiO zak>ZP7Ga#V$0F9G zq}N;blQ$(~S8md2jEy+ZL#0(Kg$;}h)v||X$KCT?rnrgp&>3!t9Wzy%0tO-n#6QkP zJLb`qh{#;c6_V4tX5!AHB_y|8&!)&u&nSdvY_u9k_)E&~hVkkrZ9CDH>G~v@~1 zj4#4#4=c1B!yg>k8F4>3@>g(Sr%*4D7{2i&#s+O8*p+ww2W6zfj7nl|?8>Il91^Ju zpAP=<&z;)~5Ks$f3=hO9w>bAeM}q_n5TUP`n<>rBzag&8NAp6C>1M7~$DmLi;p~ z+@Fz#u_fZpvyIsL10hHu4Vsr8SR3~0E*sDw#%c0Dj|!3p;tcaA*7c%S8s<4J*J#RE z;r@I?=R#Yj71CZ}D&yo7wZ+dgQy4%KRi$kWs4e+{6|J$7kmw=n)_#8p7uk+I?t>bl zW9D!+@e%qJt#pS4Y=dc6P4wO#-Mre?1XRu9Nqfm2bA4=nq4>#;o#J(W00^w(XCy%k z3r%qgxNps>^P863g1XtFJ*1au7m(E7If>UlKXT%=`Q`TN!%ibvAerQd10BQMW~=+L z%Vac9vDBxI9omXm6Blw#1=V8JFu76P+-KeXt-cxFU4(~>@$9i>$ek|YSiA_ic?vo4 ze1Z4(v!x$s$po5m#~V3x6dh}4uqm444hzbJeT`7LAhj2}m$h)`$k?}ONe3;Ofq20( z=?jiVkM^N`EGC`ALBrE=Yy;Fs16-J%9Z=dN$3wG0;0}Xz4V?yH;t6)vsy08!w|(6u zxn;D@@Wh!y2PYjB9eZ&>*brSN6&9&I%^2|=qA3Ep9EyDKDL#R>9>Ko6U zjt*Bn%f+dRmk^j|M1PBk@nG7L2OmKj_)^V`m%)Z|?uD*bgb6iY-4z$&*mSw^p^~x_ zM|9=8I;0pr2Wo+Ir?;&;Aeq#nc+~y|r!}uaY#Yqh!Z6!msfnHd*5$5l)nKUkL|3WB z$f0B8J=eu2`{2+KAd~W2XQZem-zdgpo!CO4^ZYcSA&fn;2OC%kr#qt=O6|Io%~af}O4q6)0o0z+G*p z#d5@<#%84oHlA5SOD{~G`Ac8@7JAcjEn3;heL3%gLb_xN*x9a!4i~JgtV|srY(rC3 z&@a|m*k54vJ~i716E#UF@Yd=v{t_fmXN0y@{eY3$H3xcn;~cBWs*aqnh?}5jjR&E$ z4u0i!KR*`6=m1m@Yg8*=Oy;?Xbk}(bekb^{egfBx3CD4(*OhxWtoAui|0tcFTV785 z(lKw}W}^N%u6w?}pt91>333qoo{amR(RxmOdoEW%l?nc@O#`U>iRGYMU0O><-KVT*gS%`6DA)}8w>BfrjcQ%SiYUC3vy<7YexUH zT6Eiid|jT!bjwp=fOzgyf%zi)a}=_9<&f0!yCDz~SoW=&y!DStS?Bcyhq8;9w6r3n z$0hGys9ASSjO|*<${V1*`6RD;jV0#iiY<;0xF`m zId}f~;_k2nWtPyr)jS{l_a(oP?4qQ`MFVJACQ~%1+(OUGf zM&;=Y<)#v}8X1mRQe^(QbH7GY&GDUkVsR?ADP&Ug@^09_~0f?CGJ>UQy8 z(L2MiYuD2tB`+Ws+(xKe|AOnvjZ2YhQ(kDw>BEjAW+jk>FT_7tF<P$Aa1 zpKB#S)CbKNovF(i98XAoWvlZUu%7Eku^SbU;UqSy@~B?1(7jdSBt2EN5&>)hkh+3( zMDnQRcL54$b%AwDQLnl)FX*{4=tD_X&NT%Ezn8M9GEMqkD}3d(hos5R8#~BAL#h*1 zGj{(zX>Qfy-inRt`XeXj$!#}+&HaE2*V`$0|47Ybl;Lf1jSL@Js^0&J_o;dBK7GmA z4{sDr)EMpb6A(6xp1YQ|#8+&j5d@Fm+$%xYMNPP$opis3o74T8Ol0RGK+B%8MI4_# zpl>UCA&KG;tJ-EGBs{;?8CAEq7MZq3$%McIgjDmrQyRUq!{Y5qfpxqerl}VL4Hv?V zyS}8yn2jOTah-vT(cW9qy@kb-`KW;-S|bJ~xxahv70uW&^HSiF0JS6T(~C^CpSS&M z+3nZWc+fcX0HLz48Zg|AGn|dQkMRDc=3%Ru=xRs`M|;evU_72NHk723j%4*TG~vlX z7*j75+@~SIP#9Exsa*O+e?Y6oHhyoyzcLNkO}xA~06P^dr8h)@LWJyVX$oM&L1z7h zR9@q}E`i?0d$D-ejlNp3E7wIY2WD;h=PiemOs70Gk7nn998N2zINrEmw3H9mpdpF3 zBxYmQ(=M9Rv5;CNI4L@u%yd(L1}`WGYkbb9fw@3d7h9bAq>gpdL|o&8mzUsGs+1l_ZQ>d{w^8L*@=bzC*k&=zXR;t;)W96#mJ5F9n9agW?X_H?#scG8-}! zOc-&d%0x=`oVw#WCIGg~LT zfveB)e)HFUq18P zwUu+w`Q1|OA=}lfp-w4gbPM5W4MnMv8y}@_D3EJvrvMDe)6CKOxpJmjOQLSXCTaW- zd9&MOyk(LCN#scMLf@nRu`APjnoRsxhSte(xDRk(q6m|N7wW|wie;Eox1h4 zM1EH7dbZe~+L7q6i}<|lmqXgW@wqZt=1E zVwcL4s<9=ju{l`k0%|z2TkGmX{Cgf{#8B_R-3n02iw8Y;g@zn~S`2feR0=R=38y=VrQo$X*0$p@(%c`|ls#+J*&59m80R8~T zg0tmIg*=OizTv4x6RWnh^`|Va-eh1}jN?&YHmL9~B-5>bp38P*rL{W$-4Oq`(yfQ| z8jsIvA>P`a0LMEl0c|8Z6OuIBSgROS9vpJh6R)|Ajp^w@A^(@2`Jpb4ZZ<+JAMA;D z+vPIl^EuWEI3LEfBG_@1a%u5x4@(aDqm1yeu{m34G|)mrpn-L&_I(i(FA*I?eQRw* zN&_o1CTm%UUZbdA_VDP}^WfHKe0dx%W9$*#5h~r8zFYoFp$!HxR+SoTSJxjiN2?=| z>SeKqEUf`61^9u`^?z@*5}T9lv4)59J8{gSs2kxIf@Ku*6A>%|OfeoIB^)n9EG5x{ z!ajNpd?Q(p-jXtegYG)!nzQUWPDSa}`o5k;C^`_3w@v;90Vd4IFA?=Gm$>G7h@-Lq4Y1hH>Q--4|@!0$j7tvU!; z_$&U+g?Y<&Vjb zk>sSU7nkOIWb;x3!h~IJX03|br|;1WaX~mXG0<mG|M0#wjtbnov z@>5Kp1{=H;SN-tzJ(LJfP7c*$iiQWfBqe-nf*~UgGHmS=(d8}Pw$4B7r{tv7BbX6# z6lqrc5Bc zSsx&>A6#}Y)!_e^lMv`|(oLvdyzQ#_&7(8=&9e5$`0X&rV?aC~hdJpxJ%zZSk`Yb- zW)W+CE<*xv4rqlQyV;RxLJxCWl7ypa#CY!-Mb}I<<~-&* zBvD?kh-d-n0oEi??PdneV@Oi=>2yGw#6UL1{>b9SYZ+oM-0d{S(bU%=S3EbfBLAo9 zuFUpud3xr{G_IHaERz@8=(IkQI8o}*R75$J{#;r|u&}>+H$9hsc8ESA`*Y{&)qrGO zRvv>snx6Ub>`nHLuT63-Ca@WR-AGi&Z@Awe4&o$k0y&LzoR9+%5KI~0lsUk@9;C}W z-p-$%V{<`^uxV=HaZ$cmChcC0rJk$19 zCUv^xF*(m?GGdW4v;F8q=PH(kYj+Q$z7p)U-d6CWuw!NDj)c4}ZtY<#uZ65G$kCjS zH(TeocDo)z0P%xdDM>HiNhig|JkYXVPLUbz7^vst$9Lzgnvk-RoxKeyc>{(b*P+>3 zr}7mZ2*qO$N-53ik%Q(B@weoi#JE15Fr;Tb)=E90uy+;DX|8RE$a(OW$PoOez}m_R z9PXf96D?JN#06b~QI*H5$%*{Tsvz3dRz*g43JKp= zTYrkvu>a`fNA=Xr3AHX9ihg=2ypa*CA0_6dS0`r2-fVb}vHo;t^I_gqhtmA>*GQ+P z_ECJ#w41Q@g3ls)7{uJH(fg$q4em#~XZQJi9rOC{Xe0Ohwf^QDg2Jl4dNZf; zcY@o^J3UY%k^-P@gn{4rx^>reTIWe9^x2*sAJokjdjG4AC)NEcKXP`)^b3MiW}_6C zwkYSBz>lpn@DzVod-dz>jmY%TN$)z^3qLpQ82gjs7@W?ygL}Hf1z${4N(G+ew<@wNz#m_g^tYoe0 zGo*j2^2dYWGqSx$-c467yi}DZ5VCbJd(1t?Q~GpdnTKJdi@rYNSVrKK&TPc)I%!gR zU4GOL{rCJMs0V`uir;H?fU$(M4=2BL(m?R}L$2G?$9V&yeIS(&s+BiVqcCj38&EUa zl{aZ4zBAydbmcE}3^8~A-P675*mrIp-({=g8!29VQEyrrAK+v`QiO$NyYN^_LM>K$ z%%)LSrKz~!i;Ff{(H0O4u&Bn}$Q(4&28fphZfqGoJt;QrA$@T7UO$@KKS*j-I7x0D9c?*l(lA!2YZaPxz4nI zLr5AuAZ_6J-_wQ-^ltu{ntR}DB`a+|bKDVO2WjLp{8fEhGb-{MZy?^ls&Mwb8)Tx<%!P3fXrfw-&23J;?k z|GZ+Cd6;ezI_3z>*OB_u%G0vABcgEX-@Yx#$AR=ugxQ}6=2Tac>&M2?0X_@@rd$n+ zmmj1lp8HBBXVR8JKn<<_Fn>c<3<9eOhY?+J-40G-MAef9-zGL`KCf=IU(92qnF5)H zBZ6=2)6b^&bsl#NalUgb;GBMgG;2f{fAOxn`B;3U^({4!^EB>H#NWQp$@$PUg8idb zkdjAP3rQ1IT@UB=3kD1{QEv?)f5@@83M9j}UbpZ||KP76nu3JDp1mv-0AZEB?DwPL z*y&!)782}c7~XA2n36;a)9@0C;KujRyW`WZ?r75g^pk&>_Ghj)`X}4%9CiEjB=eV) zd^9(WT5DUvavs1WKVKzUYIbwvL8v#UO(0y#_a1qiqL&n0qFls$dT8Q2a&A+Kh%h__Q^X6*+yYg_Rq;*CzH3zHNAtF-TBC$p=8#tt$?WlsoC?UN1K^+teW-%ZKLFLgBYmgHL4 zGBg>q_#+nK;ykv1KOzjr3U4p*Wnw9=Z@Usu;^T0ICJ-OY&oIHQ^W-`6Qb%=talw3{ znvtX}QHe;p9tlz#B8YAkG8s)sC;RaYWUvXDtMZ7_ogQFkMgz#TBaG&aYgtJ$2P<~Q^m9Fa zm5tC4(VUW|G5(WlL5{onnG~HaID}OADeH*l(4|aVL$PbvH{&(5-FE2P(ArxPvf|$~ z#@&UZA#>%%?|&{N!bwvkCGrjWv0HgqNV@?IH9+Tr`g?h~yX(TRcz}5}x(yrH7gX`H zym3=ZxLgPvjWI*KDwX#f%g%;sBahiNWHkIznCi8~+XgGpG%Sd#?eo5=HL6F<4VoI& zCSSt$@|M||WmsOkjF|e1y8167_hFBCE2o;NolQCop8uUt@$a4ww2Zgjs599B{r5sZ zC|1gQ?!&27^m)QtYt$MU=d)H~723XZTKe!^A>tT{yf2>EHcP2LrdKZ~>p@*{73Vtk zBNI*EJi}Rr2|8%;p{C~;Ea+{R z2Oz_QvSO4|LQL{{Ql2ECx^5uczOW21Kb|rhnJcIu!O?mwHS>_?JiPyyVZo-Q)N{qk z4ACBbD(^AUBxqRQNA4v%liJt4D;^v63GtW_?9EgQ8Zjfktb>qmDsd{x`ody+xWf;e zr=m9VK+lK*Lh8_nyvr+#1$Bk(BG208474Jh*r;uYnWrj@xZ(_NW`8us28k5^;j{B| zod8f?6FRr)9JlXyb7b6o}?CO-(7tlU-N7A9I2TL zJ!So~-5Gh^vzgQ5#nY4A<<^LTl&49`U)H|=`7xc{1a?V~WWi^!xgSfeI}W{XZE42X zEGfbWu1-~yhlMsR+5^d1A^L$m;EmaX@Ta8N8T3x7xv%o&xGCqX>QkOhZEPqVWyn3J zFimOGiOy(g`d#*pV2w{6@UOX-ACSS51fj^lB_PcLAOzzH1njmOQ5}NxnBe558V|`L zuQFbP?%z#u9Y=@CrF}~Z0fCo{21GZbc`gj?a|(Q8n6ALu8quLo04ZTU-01)Q#@Ve}?KX!L~eM zH$v0auQOhHfmXbFI>D^$kr>^d5WIq0fn>lp4iPN4W%Vpu4&|ykN$t%1`o$$0Co*Zw z3*IM_E<>#bQ+dO1)L(yUXMOQL!F2Z7`41&}eZ3-*F=nMY+ z&Z7C9#l>zz^qQ;)9KhN?x^d~zuVO$qfSoRFvU1y-wT+F79!peP<>MHft!nO7y8^5) zQ|x!5Y5n`l*Y382DrOHFG)-Oeg^L~ANG83*ghu$VtBgkzE3@ylf8-)IkL~o9Hk&9? z6AXN@>1@GGm_^Qg{ldMfD@5M#`Nf^_$11>r06K6mqVU8NMF2;;o9|BVV<=#DA;CqB z28(J+a1++@cN<=eKLDRS8m;dF`&|zV-wm?%igIob7@iep7is<|8uOQF^GjD_`wdXG z_>NLa<0j8bD(zHBf}v2y{0-HGYjwx7_j-1!{EJZOnJ)rxcNMG>HGjDEAik#iHwQM_ z9k1H~fnObOq}}h)KLrAM4XsoT|ALv#ig_co{|l6A*=40_Ij;$f0|Q`NhqEC|*gfyr z;~Jzrb`cXll_MQ#6V8t3dsanEa&54j_lgq(;qRs)(5fXEFjIf$!+#EE3Mvoumv-K8 z+R)}LA5L*tRp=f4xD4>7ajSBS27XN^Pt4}XDyD()xUu{wF{ftqz&#Xk`_hrfJy+cA za?}ldAau%6TRa^&w+brqLxxPbg1-q}7@725NziNX56%k4C;{U;+f;sxFb!A?zyLWx zqfp^*dxK?}`_aE(tK>^ryC6*;n!+G@gz_|%M@xrKVXUvRQmY^p(0?-sZ%dE*L`EhDu(6G`X$sxvyT(g z?adFJAOcrkngwCEA#*DyU5Kf^;P$x83#0tv8SCV1p7}5FR z?~Z;;=OtW=NFS{=7)2miSfQlfNWf?>G~D2j$zXqF`4*NetvG}D6)fC6L=d|q%A>0A z!E#|MRVniY(@+{G8xy6r8m-S|*i-GSV)zF8le-@}!@x>|lX!v@rb`~fZ%u5?Bul%8 z;((=Y%%Sjeikf7I`quePrtfZdOVo?uUv~v|E<}NVL7Lvoh zn#kxv#(8l9A-Tv)ML2PSLemN!IlOZPyQ9rti&j6JBQCWnn{`zlQ4fg^@i3yoA2AD$ z=ISrI4>j_CJuB4MhJJt61M;L+9LJHs0mwehefS8Ih#QDsAK@0MJXn3AkHd0nM?zMa zDwF8GKX<5lQ_(kzB5vFG`_WgK{@V3n{G~BMVz!94K^ZEybt-HPSNhksna!ogm(`=6 zKh%H<;!YafU`T{_=$oRYogw}K&-PE8yia^WxFBM{Q@c6^<+2yAUk_+~B)Mhks25AC z)NJF1`%$cCUE?A*rL}wa>n~vVK+#d;(^K$@Qwrx(-tx)r>g12G5D&0+b6Z?L?Orzt zx%!u8+bp?KX++iFPKte&IDde=EIH?8X)n`8#I1rz;3;5k;Pmpy;RZ6xqu`)pYkaNi zJ`}n{%)bRTN-R8*k1&7U)aZ%gxQ57k*`zWlIK_(Hyzq>@lQ+|%h=vNE!KKgt*cwmk zdP{;K39;Dri)*p?0D>T&dMgHW)^pK@7W>3r)cDK=ni`25R`TI^H`?WTA$ymhx5o|a zGL4TzafX37`<1j2;W1rV+?xO@((nR;nagF(Lu<1ppchL!@1agP5{@68wf(&$2UAV# zBxNkcMEqBR_1YM$kp_5N#xr|@0)Kr~wBM{gR;EpUKM~L%QkkaQ4>iUONqjwDMTa`W zzU8LC1!){o|GS~;bM94+Bt0(ePySvr{1F~iAv2u4tzY?W)QL6D_3b9k4Q~K|a=4Xy zmH-z$eII}t--LhyalsN5ycQpi%j8giX^N;9&V9f$k%LIE(Hv=k?JvNkIY zV;u5}`G8S{g!WjRYp^3?`YG-fmu5Q|e(-s~5i2se#c-iJ;>*nnYSL3u=z{Se76X@Ua? zq4-Q*hG1L*0yp<_l84--B<1W$nrhh8m~t8BwY2bBn2Z1CP8bqcrt4#++vJn#+Or-8 zhO3*fxzgf?$Y<4~(Lg0m^V*Armn~voI=IQ83v`gaH1r`w=l-ftif z^%%FV?phD#qzD#0yahs4Ly$l2Vjxt|fN;5jbQ@Z^uj-#HJ+lM2xgj9^f3J)A0azZg zrumz|ilyM6u*C(ZiFEIB7n=9q$gwKk?y>=prZ|Z87AEHil-Lh8>q@i?bnk!hGrI0P z#c;IlIX7OwF={gVhl<5``kQf@#KyVlJ1TKcSm0ct%})&bzV!2s1A(cj+TC*94w)%>YJAd z>ti3b$-~M14n+*V7{FMOerb;XWuV3Bz+kXY1~?^dc^EL5ana>8f7!4H)Fz{A(q-|T zQE!%jBhY@&&JKn2WMYutvlR}qx6?vFYW;KXj;tXtgrjGKr1nEl& z>a;w*lX7f5JlUojNTD#`AzKK%>?cuouZPM)abB?XAM$e?rpYi(#Vi#=4!r|ge^_dS z5@OSlnB&~r{(l9+UUWTLhx41F_>Nr7{Wt!GeN>DV7}Yxw;?}(ft3CSANv19x^3^{H`UBwrtshWd?<>6Mq`*7 z>zeGtn>6jL{{VWMp#+R63Ty2YICf3{e?;2;hdldqt$Nh*s~Q{Z4xunaeC1L05RLQk z)Re)Lg=r(WR>X9%K&&L3keH4kk~SJ79O`{gJY3Wk?MSuKmIB_XAW zJu$0h>@|$P1SM)vBZ2J!D+GENApQeXFo38?9-Km0;yPuKk@lC))M{pdo{uj1dxjSb zhY971f2plK)iz{i`Tv#rjzJ%01|Gp0CL(J6UH!kwi?lRq6+WMPiL`Yq1 z*PIF(IH@cU#nPWsN0t1}2E^+0xFW@c)&GEEO)(P8t%Yjo8*diZ77t8{7tfpgrM5;w z1hThUfSI6JtN|wc*cK{xfMO=`+7YoD|F%B#Lgim3EKpbfGGSc`tQa#X)A3&AH0 zOdJgR0*fsSqEu)B9@&gRa0~A27XX?UYW}c!-G(V0V-W}U0&t_Of6v1CS-?_Et29>^{4gzcy;1Ebvf|Bz@_K+;7BQbSX1%*VwgkSwWvOU_dq8x{8;&jMT>o40q)-(kaxMxX)#G) zegjL)2><_#3LL>K-hUa3T0m|5|L4EK^2$Loa@L9Gyp}-maGkMMuLE*DSQ;*?lTHXY zyC`5!LMiZHPAyo4%d?!EYW_K=nyF?G1A516h&AP9e=raD`$0ql3G1iC1Hnu1vw1T& z{;5=>7#0Az_CTZrFxo5P!eM~pO#aJD06Bg4kOT5D-jj?0C>LRQ06_-qGod}bqv#^g zh7>d6m%V|#`ATqJXy$(~_tsHSwr{&XB`6XmNTVPa2na}r7$8Up(v5UCLxUoq(jp+; zAky6oh|(!B)G(yPzzjLWFwDNj=Xrnc{=UDx_TPK0S)xl|?z!WN^E{5vk*?a!F9!hW zpd|?ox3B`te1K5i%<}{bgde}&R4jRev|!MSPKR9Y@4%-#sy1D~CtjYx3}AbEm5treG*Nu-gz z3Qhy0gjGGjs8HdKGXqqoN*?e(kld{6;m?=%j??WTeWY)8+{kw#0+5(NJl00NbY;E5;R!wLtUq7cB#(77n2*XUqd|So13- z;ZmN)0AXe&sp=3-Yo(L;!CpArTIkc0ETYHH%>gm?1sk|rg9tz}V~i9ZzX``D-igH4 zEI3ap$gg$P0~YQ*_z9hmvfG&_(&?H%1R6>};Wh&lZVS7b&tc2E7~N6TQMkL^7fdo) zq(U`snt}J0{RfJ0Er65h4M^89tr8vpG{E2@si;2=;a$DzlZ07?+vLM(c{iwtsI zK$b4xY9$qbk@J6Zx?+Ah76AMW_q1G*=LGJ{jqI2A^FMjlR;>paDkib*j3-WC&+OO` zRNoOvQd+#L>iuaCm`DD>5`pIrynqQ8`Qk#HtinHu+^?Uz0@?)OISp$67ln(M1`MGW z1*25kF-Z@VM#1?6cw0A#OHbbYtkz3>U{4^{nhSg+7)Ti-D{I@X{hI=C$%*qE54e=r z@?KVD)Z6f;OJTX6FIV1sg;>sgvK7a^z*<#*vG-D?ZNztvo*01RFz6M!4T!-Y5XJ@E zy8tN0!5R&qSirsjp42~WSN|CjwOHv4_1?_hZ3j#|K)Z_T8P@$b5+L=wXouqehNfkh z04WGE?P%N_dVwNfp5oN8chV1($bRi*;Qb`=$3urrcg?PjJ&AgKd5{PO&`KuT8c?Rk|6ZN)S zGc&H+{@sRLpllT<$bbG%I-{I|r{UH)oGj4k`W9aElLj6;O zCn5sdDPUg*b@Mk>mjPp>G$TP3x61$PDc6fwn+1v z17RD*X|1$eo}hR;RVI)XxXHkJ6wv6*@-BihHYj?65>eIakVQnZY8B68@z!Z@i2sW=W@XAR$J|0pQZhBALmbql zZQI;{V1}DS@r4Y)IZM{H(>RFkqcU{2gTlx z&wktuDY0P$9i6|>)0~l5#o>YfS`&wrBEepcAanVfJi&OR=MvLWzthPCmY7l;a_{Q_ z@R^98{_oopQe2+-$Hf9A%4U;hd-ZVWRj5LqI;e;X)-C*d2uiQx9%GeHEkVq&4o%TB z@|A&E(0Td!rXuS919fWRTkA12-5~4#xNzS9zyzp8iSAiE zKBEI+eJ?KKKrZ3JcJH+If2t?q6rj+e_>M}V4kCA!?v)_tNvvpQYM&a5k|D)+%>yUN zQf8R*jY+sBK7VxM=$_-&^Z(%Orjo^1Fl!|}hfhwfbq9jx8XoZx0I>>4 z*&ymC%FPdE2sy?XKDeD<$ozCvV-Pgou-J{s>15YSd5qq9*@JNuL@%DZ)m7Oh_lni< zcsM*3`^c$9D8>T!?%Am~(N<&_&_R6q zwKz$=-3$4zxMGGGUD5WwP*J0iZ?601!lPSCBpb)hH||^;LnMr!RZx@a7;CGfIC;D4UGsvr1&UZ;1~)dYZT zYFG5tCe+}j3kS|tr_C+lUvhKw5lK=6 zZ2gX7gEHs^CY>pam!(%8WnTXD`~a}wT0CU`Q>Gkzms}nt(8;U8#*YPvuSM56RLm?~ zGbbt0LXMdT&!k_v7&bnsdrDm~`g!4Q*X-E~t{fw~BOoViHEqw-iC zm%VslHt#$P4fPWW+z&sZd=cfoS?E)&X#(jFW@1 z;mdajz|3}5tZdwVXLju-1rVkij2|U~%KIm)8dU_J5>NBBfO~ zE6M6^bEtDQEV@`+d>$SD>31j=_p`H)iaXQ27Ahk;W9LvZim?)Csny*W_|UPz>Pdy< z{vmqc6#5XusC73iO)<}M^xe66qgAo~yQyRhUwheQ$k1?@)e3z9WjNXv<{K1q0 zE>}O;28}Za&_6{-C8SHk16o8I;N2!&M}5$zr%-?9oxp9x<-olM{CH@F>@?4w4OLmT1% z(v)?%#v^?#d&5ztlPKO8l|Yg<i$(wM`ux$MB-g=@7axLVf3!x{flL_K;wvudaT0KaLYF^3Xi*Wj=_*Z%Cm$&~qIkOnGCTUMY`6nV5YEHefwk3da;cJ9RObu{KzhDyP>)xe597BhoinhoglE?<-Ob{A@5 z&-V?oo7t+@$k0OBen6Ng~?XiqUqwD44k}@&1Wy z%OT)nl)V{_*11!CxF4JP=r`Mx5F~1Sp)w?8Kha(br<9yd(TXqWUNuJD<-RL9mko(VrR>>o=#`le0_U~c}f;4BfoJWhQ+SBz({4hP(>+vbHz9uSq^t(8qH9l8e4X>EI zmB~BLo62n`2gksLB#;-^PAXdEUlizByOc6;6vhVRM&eeCjiOZpcJl%P&n@53jpV4a zn6gyuFJMxzgV0jX-d$SQo_D2#|1$jZ_FBr#qK}hq$C3B1=S?Ze+1$@?D)9Er>-2=> z-Q2UX2TLOi1_MxaU^hXexvMu?oo4{sn436f&F7P$WnBpyR;Syp;8`heD6%XrsiA++ zKry$-PU9w>w-IV!=1_uTbctvwedy@U9;XINSbX@TVK%^VGEGqq&23>EYx6K-UE-%p z4do~$M}`avg21w3h8&4PNNj6Vs6}1gTa!27m!!I7_Eq1`($>^uBZu)F^jU#_GEDGs z_>S&@8<@C0>a zmJ)3xvn)pR`lwwP>qZ#$_nZ!-<}o8K6Ky%r{W5y_He2nI)i_ILzxni@MB9AN9o;fT zy1v(4{<0u?0kjgpW&uc{f(TLIz{d~ZVL+1=5SY%|c#h|KUH&ir1kn?%!f$hRO*3;} zZ6Mkq5sinv11r>xk| z0Eo|a!~<67@pRXdC{u`c{Ud~uB-bs!CqD8?SGz#K_N2 zX_wCD%d@edPnMQxLE!Q}C~YnZeuJd(U^amRr~i8TocKg`{Fsm;&U(^kZ}8E zflQXQKWp78VRoJidC;jsZC#|KeZ}EJEEM-4tpPbRsQ=AFQ4H`$X>I08)B08jbkG9& za`tiq-Whq;K|0rN>8`n*i(}0IlLN*) zZSPii`|;TVjw_9|B(oh=iraee^DHd`H&wwaGeLy}{THIgd*@|AV~!xoOSO2ccn0BM zN>O#Y%zaMLk|FFSQtX_r&`O9>Y*PMVe`4-xZ~t1g+Pc@QguHTo4s62b^~XFEMyUg7 zPPd7!8@<+Nae&t=VG(mLXz>~>^&Bb=Z_TCgfn2NCd%ll9U|tSby}o6@l-V*A`hGgD zr`Aa7R?n}nxk%XQTI^n6O>H@)^60BAK~4K)E+Bba+z|z>7!X-8cVFK`4g?m0GWwfD z;zEskgrcDso=kP0?@|0G2z&i2>lDpV4Y*ml;BxTq!GtJ3qk{$WD+s{nntpW75*IRN zyFq>**$IQK?it;G4E=m-%H9|4@_4;vhUd@T#sn`c#zD_qbSd8Gt}c1USN8-(n8(+g zv%$)Twd@xMfY&$rqta`e9;Ecd!20OMO9d`piU=d)W~HG9`W28%d$>6lUVv>`X=V6g zuzn6~MC9{+pEYut7G*q}m0;}s938I;A3yN)OwM=|3SgC^&4R)qO9NI+hjZa&bFO_l zP7gg5`H6s_e`qy%AV1JJfda>@1rbKRa&Hl&=zMU#&z4@5A@th)&+R@HlfovBtD3O* zZBDB!-&{^_YE;@%_%Dp5e-)tSZf&1Lth=jXL5$bu9!~IbtY07pCH;;!$$d}2CMn>< zthqv!O?Jyt15@3Cn-kZ)lz9(C^Mi{a_*E{Cx)%j4k(ybVtRr_?UGcc14*U_D1kLK6 zw@yL`0*}k^bmU(w1}e2Re{y!vM*wXGkR=AB7Y4jfVF#_NO%JJZV$F2;4&6*^w2h~DaSr)gi{sATfr1xN0n%k8 zES08yB@=d3%aS6MQ-`8nWJ|u_Tl=zdOCw=oUE{XUs~;oqQ(b90QiMp?LpTJId&UYz zp~G3XXu>l1Nciejd=$TR#)B#ReMT1bYR2N|UXIR(gjTeOe)Vw^E(E3G1=z zC+^=2>1svB*d-eaZ|*5RSfBgZ@9hHvkYdlNczPFicXN8mkU=|D5QF7h>gMch0(u_c z#a2J9&6~L8B{{b<`;D1}h?vo{RD+w8S5C`Z#pOZ%MJlei=8 z;~F0R@hFFSS5wi*=R--vTh! z1*7Y8J8~tK5VR>~gx0TZkQhTMbLf^+mP4nrg_Jzxc3 zY5=2VIGr#crMckz6MX!{z5^WfE{#`cY|jyNRvvTRhzv&}Q42>oIp(4_Q7CcT*wlyN+O#uT)X@0s`xm5X811?nvhglm zvK^fdIUX)csb=G(Mb|!t4aMVdxI%76%XT&BJIaOaedAEk!jLBgd*W1(Ai03A43(F{ zYOn*SmO~@#LKs{6Iz`fW7#lbHADcGp=7#`h6WVlz-j(Ti@hFxWFUeB!N{;@=g@><5 z-vL^YK9h_2D14`pVu*r*f@Rff;Mo>nn}gP4>A0;w1=c9|P)$0zU(s8v_jiK3xC0+t?g!fYQt+-7;O_+n2ccJZ5Wk7pszXSh&{mQ0WUDH^3qrV$YbPPX239sRe3AMRq?{BK zrQI4<^HvZ@T~{sPdG=%m>|VwhRKLL5pMg4rW8l7KS!D^6W4R1SWWvC$hQzx-q-D+y ztrT_&vk*)>U0Xs@4Tr^H-z822TXtBj2Pu7D2qw))8(-RF=@Z&|BWx$*3ilwj8gbBH z|CM%qcu4n4MX*nbKX<0+MngyH8_2|4GCa1W^S<-lBnJ>RG>BURAb19+hB6N@q~VXE z@%6^g-_QEL%kWmd$eIl+$imh!;rCegBREpK)k`LHrM8Yv)nYH?(YE4owwn<94hfPa zf$dQtkErUL`!iK$a%K=nG1Fx6=HW9Mu;elAvflvRu1$T9d0Do(v;m2GEGnq4GKv&k zf<#yMrj^Sk9+^VFX9zS}_ss&e%(da+ldr60ernwJNaL*UmKre0g0d zaM!%8TBvf>xt-@XqI89wu4zT+RFq!Ve&WT_hbQd{!Pxy^TA!%v<|Zh)gs<)hH}m58 zgA3Qsx*x+17J3U{! zkAr;uwK-~7-?};5zxO6$=N-K$BdbvU=baBqFM4ohH))U{@xUZQ%q_p;Xbw!mm?S}~ zO^}3V@)_aF<>l|C%mlsKz5H!2qx4z}u_i`BOuTZ-efkV0gBy+d+VY#RWlgx%arJdX z?s+iqTd_YM4pw(>irv3owhAZro)%ghL_dV>v_uFLjY;kKfLR!%MS*c$V(`OEY&=@g zk#!d|xG^(`Gm!ZVMzygFvsfy|?TE%dOL1(+-NThjxB$u||9Av`4aZi!wNx#890do{ zv*Wc3;TgB%9}VY_UvOx` zrG&q>Ozf-mmu!-*q#iV%*8joGH|s&66%`c~nor#%IQz_QPCupwt%+h^&GZc=d;Cip zGBgQto~9R^z2UEH54weSvkhid@i z8UTN8rqQtHyd7-_4l1Q+jsdB z&UCojib8r6Ec6}CrYUeGxq?(^FevYN=#>2%gpuyF3v_^ioBlds1O3toY{bxM!Ogb6;2dqCQC7qWdF+*@KGx;wt zmh~-qYB0cLxH}HMp@I{W9QJ2Y(KMEcQD8{SzC{n>IlwCTW__>x_|}mKT05 z?PbJHgVYRSr9*uP{dcem3S6Dg-{N*^ZE&0T9gM2325*ktS(S3CUg2y=#UYH(T(Pus z2c@kAFJ#cH%kBjSw7uCe=Sf)uz2D@(R%y*O~xrWoFzR=ledoEt53R_^+m$KH{xzM9R86+amCd;cm7*MLw-wF zgO~zlCg*+MtP6!y=mWluE@eMMY}q7s1oqWUPi@=>S#P;f6 z4{w1P$VK?qV+A1)mMCF2*ZeH5$K2;0yP}5ESJQpQ;%M7f1*Q|fOx}ZR6Of{8oEqbu z9|wRApn*j$Z2PCt%-)Iv?P~0Sn(Ta5FgCdK+)e9$~PSl-FM3>yOBi+lAJYrUmz*M--`21 z;CAiI<|4JoB-*QkX|qJ5Hvq(Tl`fU`O8@p+nK!YnND4?YE&8EQfe08jy!tdDDY7F2 zH{mpeUs>UUIEq3U!>6J%#Fo}-X9AjzgCQ+_XFpzN*d{iSd@?%6Kym%H8^_x`wXO0^ z$9cI_^}^VjFUx*9C0PW{fUt9LrSfTzERb2id5YK7Q($ZLIrxsNt!o(w0FoDEsvFoO zNw6$$j2B_RMGW;MD;pG08ODGMa5h|(vGv{?j4wbO(1oL zvXaWvX1UmtTnIf~!Nl74KvIkR4mNeMJyz1AttYY3`^}E5Z_%17oRjFK+o+2LGY`KI zor=0sT>8}>chKFDDp&XeC5K`Y&=>z+HSHg%MiK-Mx!;odJ0RqtRr`~P@^pey8=S$J z%aIL)Gdg$J3L_|*#naKSZpQ-9Zb5s9uP!WP`Tyxpipo|&2ja0?KH=*`zs|9MgeRSoi*^i@c{#>v*Dn4Yiyo;8DW zPX1ZG1NqmwT%B%m=?8igX!Pucpr-nOPbWEls;vG%3wwVkpcd{mnsOpyo4~{{$U&j0 z7^m7UXBv`igtiZWN+{IST@nHaAFCi6br3<6 zYS)JtuyiZ-Oy;^29qm*4ky{4y@O{9tJb5};ykyzv4egCsyU&)z7T*C5Q4`$_gmXP! z43t8EP;TaT`kPP+^#&~(Oc>OjTn5=-mxUWgZ8cnfFwDhwn`ol zyPi9`9_0)6xTHYH8S16oHR8bnDj4170w9zRP-=kSjgXQ)IsUO@!MO_`0=6C=%xxDd zbu)Fyq7Xx-*K+u2LPu;aS;~se!p@F*1Z-w1gY4-h;SMv#hT4Hmfz#Xp2iiL=eTfy= zUwn&ub#sI$SJwtAWg%TquptB-z6Wj3gK!FPfkb%`KoUM{H$l-)E{B*1$d87F9KKae4-i13VuaA-Ron^i!kn~r z#i>evB&gYdCImzZe~^=B>jnW~&FJwma-);qVu5gT24FF&cU_?bGP|9I)*+q)Y9e51 zAp;Ewl{9hS16q_sn~F#bdl)k0ym84MYJaG(4SpFg!EDSTtkS_KVQwJB$J6)Y4JXj>0Y6?6pfZV(O$AXA0w4t2iZQ1TVusvnq{^pODV18w1%(}D7m70dIkOHnMj~xgZOqVLA1YP@a=~33Gv^LB6l$#`G166l+Pe zn7@5{9C8!m`!zrRmnt@G;QPaqV&w?a8|6HG$J#IttIE4z*Y9!9=?>l7H%|4p3$1{&9fWxzQjyqx zbwm*3wn3{O15qlms;Hz_nsEY)hwxio*;V~eWpYg3lEneN z2FT;2?cfJGYTs13Q6W=ZI-rLJRshGf8a-<8Fd_mr9~v~Q&`IJf_()OEld)*zaq{dr7 zLIqFexn}*7G;|WJX1Q3<&WDu>@BfMo*n*WG-iN-UZ{3L;7Ag@rZ++uC$L+YS`AA7x z=VmlVTvU6PUdKkd=C}vTKT1Y3u`(bS1ZM}}dk5VoI4G=mH{pY-ne29tI4Yi#6QYzgc}XnsxC^80$->P~>1W1kgL26}rix`0cQyYk76 zF}kZu-Ur;So@vZy zEs%uB6}JwpeZXkg|L*Y>>jc@Q(LsP`^*-Ik9WDi{O1>?4k(^X|I6VULyEb@-)u?$? z)AmD>^9h-%_4qSvtYRL)Ed$U~|7h~E0SYX&0NFUo0J?s_qXRmp;!)hdnLVw2CxXry zq%rg1W7$l}KKH+WzOH{`8Az90c`8LcRt0r?~+m!k&s($1n0UZTbJR-(n?pJp#vQ)nkw zFi)U1jKS>$bpF>U7XX`pgI=Q1Yv&e$H=)6e3^3%OBcztCJqzl*o6Q+f`Tm6>FulK| z%W`VxKbcu$^`}i!S*3LOS_L~C zKyEMiUiuHTma%6V*M?$djj17p1nHQoeJ|{EK>W{}imz3wSBVNHe*>OEbQr78 z`IM9tz^4cZ1dm)Nd#LGS(y<@*Pe{5mD+FK9^?Wzg#U;k{DvhB~C=;t1bv4q=1CQ${ zwlLkH$<8HPf8-TMmZzr$W?SD&-7MqD(&6y4zC{=eMoa`Ms#{YU7siHlrFN)1bdU!G zHx|LC_NB?OMh}Q%!8%|tT?x?2fRpXO2aX;Rx{{#rDCU6uJy}F)ONj)C#_eZizb{`g zDHE^s{Tq$DR+X;Bo|~Aang@er(G87TT`v;q=le?)b35|oBCtankTW`&WZ#3$aVCe4L5W&U9++Lb*lW1M* ze|GRRbsR-J!cO&68M3km0F6%oL3J|k>1e9Ot@}ZyUbJ<$CGxEPrw+>y=A!2*>8UzSeCznIlx+I8v2fNc<#(ZnEW3CE+@8R_hB2j;#(x$`EG|$TMUH?zut@+q;%p z@_Fio-v&P1zfPmrt!TT zGCLSre9tT|?(!9W^Q3!enw6jGFMhg^VBuk#W~bFdB2a9sDf6bpNTpuma^ajst1niTn zA#6s^>b9rA`+u16>;Ppy-u&OtTTgRiLAm9gd&4cwPd|P1mRr@OP9ggmpr1uEaOWG) zX+I^A6)5blE=8sZr&g7iKVLsDikShFEHl8bt27({Y{k@7b4$(I#tW43iWb|QyTB@K z2m?i`N0B0=S9FxBv|H2L8Gs=1J2r%QJ1*!_q~}1n>%_<6^F}jm5Yb{Iv5xokH*7+$ zuNf49>v8IM_-w6F1punZ8cQo#;8aS{`_r`VV}j;2O)ELl`jzuY%&U4`^8P41j)_Q0 z*X5>J?4g{G;-F-al?TkKn}BayN~r=;X|6qgLG*B7j>nh|$zJpc_N;K#^ZbId?{da~ zE73C&`DkjZJdH{cclr;T7s>^hLa7#hiUMwu``r2On)x#^ZHqM_&Z-qOPqcypmcG6{ zINxh=03a+RL8jln^rRmY6-xn7HLCt)*Voj+dkk-5>uRQep540?AbdcO4ARRH*dCTe z5+9XU=oF)Oz>YMo#LdStLn$tvqsJhru9d-yI{?rv=lDbgg;IhrX-e(4y11`Mpf42r ze$0qrsJH`22|o4O%SriDG@={g9x9;%W2RCb8yfQMx3ebgE9U*yU>kD-!w*13`9pfWyCdREk8m}B?GY<1$;@hs zyT`F_E_d`$I`+srx->@(5c2e08fsM)t zz;f9OtChjhbm2gcu5m9!?=U~k>~}?L^zp8_3XdWJezpprQBN#?W;=L69@%F`cl2H} z5x9L8srtp()&n-)ZGPj!O~GHZk&r$g6CClA6aHOBEkl?Ky5&&(F4>R4K^0Z;c6P88 z0-}G3+D_mKA6>60{DM#MB#knB|yo^L+9iS;(?A~($qqZIO%eD?ZWYC%>JQm zJV^7n5D=+47BpuvA}Ihl9rikmNujx)^d7LX!K4S4&V-HWn~L)t{HgLFZkNE#0&B!r zOZ}%=mjGRS4-c;8Uo0uuy$Y1SuGTAQ?MnCCRq#9RGsf6I9rEGU*-?KPfvD7W6|75rT2S7RQ6%KcKVSdrn=$Ym5pI?!N81dE4a=zgZ?xHU4_p<3 z6my-6o2CNMA@t}%Kt%h4BDd}mq>pcjFl1BIrJI0ykOIu?zl0-DV1WzX@sxprkn&xo zI=u$~t}*Mqng%xK^)8+$ls#0%`9)G? zT>AS=uLIUA1cKeXucX5H2D+N(WKv<~EFyL8)t)zCpqdg6)}L1SLc)i6EGU`1T{Q$a z4`8Q~&l$Oq%s6W;R1Vl6;I_e{p-}FFOt$}~zNUv{fCtndypLN>Cg56Q`Y2I<&U})` z=?71##B-O(Vu-^!V$(r6^BgwQxLr3<2>=wqC zPM^!WV(p>V)T7$XZq9ESH|!NWGT!sN{)QDC*+_mbU7bg*-$^R&?TfS04E4M^Z+avzcSRHTT?= z1F?PaJT)S$wL~er%+zJ70%Yd^jQZtDA^_0tcy;h)8jofis}ko=dKg}ZXyZHmk%1X3 zWeinJuQCfv0b* z-qhW)>ack4Vwf)A(NW24LTV_-Y(2|5dRrEIn02Z<$4~4J>MV4(NMaLyRa{^Q&$>%k z*!;s^{fR1-{1cK}=wNTZ&ny^qxB;eH09Xor9UuXA5rkZgqo+PJf2hADDTq9;wgRVg zC6oDuLTt&Cf!ut+^DpWu`?Z6Fjd=1`y&8N&XDckYDGv2H{l)@?_DAVi(>veG6uB-M zHe%@}*tLa9cY*)HLtC0IL@qb)iJmceCQ2z&h+UnD(<;v~zj>~y{6&wD7imh!#NB=} z#^u}3Owzb=v#5PP_&yFxCA-p)Cu{!a$_4k`pvR0& zrL5mHViq1@RUAj756;%G#0xI4>JyuRGPZGOdg2CMP2~s!iTbYp z0(-6;>X>-Z;^VUK22H!2-KqLx>%~DYr)rk2^(JHX2Dz`F*PtT8xfy5si0X0FB=TLAtHhYDfHZ!%L6yk4AOQK(l!;}Ej7NACm#Ood48`|-V#9?UIe-mb2{ zk4+9x*1~03Bi#5Sb#8!!169 z>N0V(mhn-qTK;-_Sj*}3Y|;t8ly2s`LHDQeNSBvdk}YdRpRwYia14p5#cY{s!5}Bm zn=6)hTnAggHztwJ)9lqnsw-EtI(@AgXKG8DAZSk~v!{VkV*MKBC*f6gHPhYtFc8I~ zc`v>&r$_-T*Ku}FPcKhAqNXoC`>=rA{q!=h#1fr6EWyZnfu$zJQ4PLWayV(|A#YG+ zZ{R-`vmYOxp{v=!@iP=9nR-oS(Nv&o9VeJm#6JXLBco4tqVc@zmPE1JiG`T7A|b|2 zsi1}djdDeJHb}PY^?(m<+41y!vPW+5i$>+lwCpW2QLmpRYYQFFy*^x)`lEVyP_Rc6 zkbmlt+CmNsR)oLvD!*f-jtL)EKz$GNDaRWzZ8%=jj29t6s>WdsRC+pvIg7;0egaEakWheUmKjU}Mmkk_TlmpPO%u8<&Z%?R@C!j1-psGWBa+^3>+% znar=!#<~F;!&4Yyd!x27MUC1~G(05t4*$QxS5%LVF{7e3$FzQK*VnJyCE3c0L$Cnh5oi zKAGP=m+`u$wD1GCbzgD{&N&@~q|H z=g7G@kp+M4pzkxao1d)+pXr%oWTl2*=g76$^YCVRQ&Q*~&Vo;nIOL6*3in4AC)E=_D-W|2|fP7_6a#IP2als!LJLpazxZqUmSE80YM*V-;=8Od1zVdZs)=sC&eC_N@ zNy7dQnSJ_f2=7^6aj*LxgoV|wUt0qosvH^42MvM`uQU>w&den)`DtPtN$9D^=gskCv1nBo!R z#u7;5uWMn*xR`O*5lBUVy}W*zP_aA z?$fhX1QnhuLN-u;e8Oc}@d8Fv=@ zrirq6*?d&fG@m~4fgqA%4@du)vocKBDnO41jMq`{%ed+#FF|up$SS_`vEosc`H3T6 zkCaYD<}e{qs9_BL+mcfr$Ki6;qHQW2DF5c^pj(*mby6w;k1&(c-y9vx@+U`2fvo;9 z3}pO4Q2)+hMy(S^9+QppAZi4N2~-=?+?bM|{ITo#`tDrfj1m(sF~d01Ru=WX4}Coe zh{01}3p_2&4P=q-R*(`X9f?8B#(F}g0*MyBivIw-->@GOj&+)4usBETvl6X7yTdez z&Ciq^)XLsaw=npj$@@8CF5dpOXG~1L?aFYgYr){@kJy8Fqi5_o5W+Wf+Mc|A2htxj zc@qi0A#MG0@Wp1t%SMaGqM>qWD1?>6`G{eOwx2ZZ{3C#biddqptdbCLbWr}T)w1_x z@Qn0Y@%gq%Y`JG?ZxtO`sNQ;p;5zQs{C7#J;f<*q4x76)>>aIGxZM)pPv<$3r~8rR zt~bevZ|H*`*w{}WL&Vj+4%ESwY4)KxP$Qj>g5qxcT^fSPTZ=H+eqFqfc5{8HD z%X+qj5(7mUs$^bb^dIvMvwIJR-A%eo z#rdyXe%|SXKy`XAe=(V`HZy(X^Azq_7sk3b;CeCDvg$6( z1BmJPcaH`Kqjry*K}&tiu@1oG!9<*|m?!XBUqX8sJRZtyIYl32$H4okEIOo&X#Ttx z74dTOQpC}(*e$J>J}dFGw_C*hVn#Hd@kB+G6??r*oD3u~O%ngn*xXzUq8fD*#*gn^ zqkI~DY+MCeXyVe+tlq^__TP=l0A%Ln=P!LLAi->Zd!ZuO>#NDCr*| zkN1xJo z8!8kD%_EwWT0ifA&t~R%p4DK3`2C$Id*7>V>95LfT~@Q2MQ5kY^?Eo(yIm*ye3bt( zn9KjpX<>Jc-^qHx$y!eI34IJ2g^4Z~u)DG=fB_kBNYH~+Sgz?x`r@Q;vc!h}=F?JY zSyc$cGAQBzViS-L2Lnv1E8biD*zMLNvbJ+Dj|0Mw0fIwCtD_h0u&qaOxC0F>u((HQ zx{rtq7107TmqvP6LmoBn(dzsj1|djaT#EdzSJLZYsPKDwdb+zTlgpo-tEE9z2B)E# zE;+KkzP>H1A5ogUw7JPs@y=t!@8#Tuq4jl}Rmwa3gW&5eZVB~ze=o$JH*F!gloR|| zbnNQO+JOft!|Twc!MbZIczMAC^0CC<2pEQgOucQlvG~j7Gm6ICXD+S<%9}Ti0TMox;TRvw~}T;x!((A zFqP}jB*Srw@viB7z3=lq-{qa>nP>hp^Iv=a_gZVOz4qQ~{Wgul^V{0tt@C!vt-q*N zSFO0h6sxmR_+R%F3@md#N8OsebUQu+Foi6Ap7rIsAI+~fwqz&6YWvupOUKn=&RsLe zsTv{9cU+B~1+3#Yb#-<1`cjL~YKd*}bYy!VvwwAUmB@P3^QFWA&HenmRWOor$af{P zHd&KvEN|w4xeL{1@p)SP)jeBIOmf=r+Vvd{m))mty2m=zzwgU{Gk0hAz+5TW0F zWj=edu|-5oJd%!VVjhsSvbrhd)39Ihm+3&!4q5j>#q*MwM)2VoTU6g!96G(-p^XN% z0nEEnLO(;|@a&_2pP#zm=5|IFMj!QY?Oj`11MIHq++xD$U?a3Jy4vNW2S%Q;9E`!lT!rUD0Ht>vw@ga zw1I(Lv4b@FoJvMTWo1T=a|mj6(`&7mpEgTJ+elwckAn0$eYPYb5BBB@!s|Cn{(8Dj zCGr^p5Ah?zH%4eh-TlQ0jX||>e}$GELA8$=3?+#*IypJ@ZkE1QXD2F0E8E=O?_XK# zxT!c(KN=zAI}z8ntJPa8X!+A@Iy5gkMVPep#aYkrEsJ<_QG}IxQ&8>pnds=in#*?W zuBF~)Wy-qO#HxS&z3|CHDGi0##h(!JmHqwwl&?#U^_RMj4evK7mnr)ohPa(@M-bIA z!02oj*nPj}$!>KT_OrzG?%U3#gZb`)2n2g9_if0I&6}YeP8+RfYB%;Wg|6Na46qrB zl|URTr`3z=-1fv@A4j5WseQd?Hok1JII}}VXS;)?Soj(OQEpdSFJ7EkeIP4NBEiww z`88v0rE8&2C?hXR<0|_F0wJHhxM+}4fbU--m@8=54uXNTIujx}Jfq&7V%lvrw+SQq`Q#F{+nto>gXvQ=5f4 zPu`F$bmhar{-fAoyrx94@T{6Y9>#KSfjs{G_mYjs)j^4-mF=-3;1)B~4~fMXv|G?q z^$L+5!|&dmJeYfH)F29wbjE5*{41S$JAN=bO!ufcB(*eKJ?I+|Kf__3D{E~QKNWXS z=70jrD$8E7sKfj8Us0}*iJ3-$E)4c4(Zw}UpjrReE`w1Un{#zF&s2w>t6~Ec*E27Q ztX{aCOjJlY%lUX0aDL4 z(nk$e0m-o#reI0d`WPHUo@u7z>W2=lPASAJe@Lte9=`^Vb)OzHtmymMbE8c#ko5jF zGoW)TLv6yGOXH5Uq_?lcEY{is`oeupc7WSgr(V2= z28cLeXv%I(k+#E5+W=aqb~gIq-k(}0=N07KTwVL7r~P}6yFswERn690G>)~SA}ej7KyF=` z{XjGM?n_m6u6|5Jm{%Fcx;iqI_&U}Tj_#}FH@6L&dq!oTR6|qKW;!<$R+^P^+JAHe zjX`URq^IJ)iyEQ;_+!T_ZWT5lCdP#QK;RPmNltF?8k6R0QGx0tysY)liw}f?C!EnW z30vYzOG`~9vp>=<6B`I#d}TvPtym0Fs@yYb<5@h1*SGv~^fb0`g+h|ZW?9@gVx$?{VA zx~!l|WKaIa0oH?p4cihWv``Tw%QDvoViD z){3h~rlWb^N`H{MHl{Rbx?Cq}<`+JMwIt-XFR3*(Xy2Z_hgD!r2&Dy`o=5sHcOX}1 z$CzZ_o>(_BQKx=S9PBci<;gb%Ep!^qKC)AOcfnd#Ofg!j*;5S76LcvL;bvM< zUNOC^vs2OfsY}VcPaADDXS7Qxmp~j0X`q#t7n~}5^VD&nA}l^g=H1U2x{sl3!pRkp z!T(JHbmNr=?!x?hEbP)S7&B@g_{ulCCY2HjhH)p1dCPO7SG$B8=H|*ENfdf9YxMA- zNn4QDk((=I1*K6ghjHsDQ?kit=bTX5oS$K{Kb_ssacCpkg}Fm?b=GSTkhuD9R4}o9 z{<_08p|DnU7=mcBo0=kFXW`{2^semXp?grYh=>RpizJ#RRYhlxHfJhxk)gH+#*KWL z1-!t0q$Dq*lL+k({OX1B?${<~*vsoYBYKrme4Oqk@K0Sdz%fKZ#-Xb^8%dVqKfP=& zp}3+qXyosj`ur<(u9HxTyxN744}kpoZfpBDZG4jgOJ5{+w)GAzw-EZHtcsmQS|P)YLUKsiz8ku~_Vfu&&_mQhiAwLdt}Ftlo~?Z$0Z| zHFECW-#rWDN)INHNI3)rT9E@ar8YKA(U7cAXygh|Yt&(!DoC8;ug6}lm`qqd=Q7a8 z_= zALKms!-n@_Es3H9gpStx{!`D`j|SN?Ddp$MRYxUasGJSHon!c+TUOL1OMXG z)xXWijo-wJ_}?$ue{&@e2#T1XD*p%h4CS)|{EI^Kx@&fQGoh7C4kb&#JmI@VL)~cs z1wQ%+WITD`)y1pL2FEPu9@<>t^gDO)+Z_0$hg43MHa5%s37B3mHO#~^vpqo(-oKZp zsVeXSs+rh#RqD(t&pUcxRa0{EFOsY=#)U*1uQlyF(ZrT1hKKg*Y~a@!iu8p$kUo;} z+kUvejb{IN;2+B3plcvL7#8iRec;~R2VCLRfHNu*NLkrdT2W^rcWTONg?KP+X{M$G z^4G4t%7+Y?F;h21&BA1*RQ%OsH@$@qD5-V*V-_3P*yPg2qH~XD#>ULSrT)`i<LTJ?L%0d#dd*w8u+N!Exhav|u?+;r)+c_TL>;$XG%z#tlQDP7+o{hNc?8 zr}5qeG(@0r?BUb2J+b~*594bYV)sjpI{xSXtHb}L{{L3Yzq$3au*2H`8D`?dZIn?7b1iGe0&LrBj2y&4+j(cyfG2-r}5r|aF1Y&JXEhGRP(9= z2(`WwdSOC5gZ(ZL{O~x${~!oCWoagFedLI|T`=C;FA%fyCxHYY*8Wb6^}vOCdw3E; zgE7JXnc9V9k_*(T|DwiwVFLd%nU-=~9+2(jlU?xgMqBxv!i1RNLvdbyI3F{71VRgC zfQryJ)K*2QqTGff`1VHp`^^rR;1GV(?946HwKRT}m$5`g!2byAqqgQHX6|wS1ZQ(R A)Bpeg literal 92749 zcmcfoWmp_d)HMnZPH=)dK_@_PcL*LlXo5=!4#C}mySoPn?mk#>1_>c#a0%|t;GE9= zKHqb_Kfd$#Ko8XP^i+3O?b>_oy;eu6tIA_zkYj*AAZ$ei8BGufsR{%_yhcX__Q>i} zn1VnrUR%F?t8Q&>4gz^Dq$XOar-T!SO~L&ZG40b!`hR6>y~b3~_f9pEMM+!HPopz? zJAf`jh;JQ5D}{h0SE5iAVfG3PHj!#nz*9HljQU=%MAOdWe4P6*a&eI9u_ClHP6>)4 z1%X&l6Ovfg?%U@Y-%9t-onj|K#$9XTgmY)9Rp5(+A0Ri-t@22M&A<)s=Iu?{83p(sw)z{*agj0j| zm;&zzDIuOYF~qf5)|q9Y|r zrQo^AkZ{QfMqvN_>PhFX0Dc)X@Ty#aI4S;6PATEbH&koM4+;4Rm?M0f{M<33a!iRr zn`)apQH8uIkt_w|-x0>7+P|Zb2Rg`X{KVqLeIo-e*8WWIO@1U@Tj(*Zp%u|BN5a+n zofPx^&?P6%cA%HJsUF+VaEtk%9^;>gX7jE&&^3s_>|&0Y5@EQv-q~A_HHVcQZ@Axb ztz|>WnXm1A8@qwTF@nR(*1-FyvW=~?4$pTG3UOqb@ToqMb=I?q8`THw2e3c+bC4u$ z9eNhBOEBxJlmvx2B`_l;qbpv`%di*kzsk}jg5UmT{6NqZnJ9x$AEBorssfRwe5Fbt zk@TH`F^Ow5lTc2Hktl&hvHBbI8~!gW>r6H|9p;ZoU8B>RZ#KEV5VWWJ#*3;Ll}5bh zef=i|q(o;)QWEt`wOuN+08*@3&Z31`!NC{Qk^Dhc>}{89?l=D;#hAQt(?nR|GSsQCM0oNlOMtY$y1#~$MxX2} z!@>{i9X}v+@1|9`H0q_#8vf?Id^;-lTB=-nFX|U-3qv+k^^

{XFK_`B=@E{uuVy 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

aQ;fbAN)VxC{3C{IxlhS?1#?4J6 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

EQ4fdz7=fOUNf$#dcH4auC@>JgE20`P^QE8wDfW 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 literal 91932 zcmb5VWmFtdw=LSZC&6732->)Ng44k*xVyVM!QCB#yF+ky55b*4aEIVDyvldZJ@1Th zf4uRM2AZO}YWLo2uQk`4v%?kSBr#BlP(dINhP0HJ5(orW2?D|1A|nDv#5ITwKp+%4 z3sF%83nL>C$bBU_-b^7W6fb1@&Sw?PCbg*lSEdRbnv{lTvaUEn%7#YD2Sd>TWHB5} ziwKI(FmMt@Qk7wb?`diEKQ~CdQ!r$SDE+=h-pcN9mi;_(eVp#L!Mi^}0*W92f#?zA z66m*{T9+C`Mf#U6FycEVoU3DFX`U&`hd?kO_wPurWDsW=>bD>@5Jhh46h4Te74$us zQVMu74C7CjoWunBGzAArB*!8`^k0JonXc&x!GI=8yS-sRY0n^GBoGeLr~E;m9mUOi zzdKk^sr^IXx1}`gAAXvZ6f_Cs{ZoIP>de}Cd1`&`E$UE4SvN_ZYsOyvDX71KKwEJs zUBS8U@R{{rHx-OTDJk!t@Xx(rU_jqE@4H`N{Ovp~qCr{Wpp%|W4HeE$cVwVL8b343 zVHhzqn6|Ua`uk-+6CMyqK;aWk8U)bx?$w%%;K1Lf7CxW9W#*Aq%I z5~`yB|Ir@wMigUC6ua>ge^#(<3-aO?^;+-~3#$BQ(A)a1F%D5`{YN#L{gloFsR z5B+6%v*+(&WS|Zn8vbE4sQz&wtjVZz33Lm>HoRVP-Iu?4z$I8k7&p3oSqv71JA#rP4GGm8z0T9SIvDR;({=qy6ffXr5zU zbig~~m49t$%!Ll&MAr#@p_6hbGAz86Zu$}}#V9>4y(&E{h5yA(Di-3GVld7#N;OK7beQ5n z9ho>Ef0H~JFG%er>Z%(SE7|)JJ%o~`Sj~KGi`q7<4>qHG1 zzcOqyJTh!Dur-|-wW`poB&tGJ;B8`D6K)kxpZH2+%H%ras-^^WR2F5pKi`#}T@XDJ zMRJx|5iLd?&-`uiT=ul_One0U$U|YFwoq2^tm#>RU?`O;lHOrnh(@1mCRDT8Zh2Gv2LWOQ55n zTD{R)+iLuM5prlhdy#)p7o9=u#J#aW)lTOzTQr%UNy(iX*&_)r*(gyd<|)Y~!6eZt zJ}=IALE+yGt~R&BS>LmqTDM!vT7$Hlf1IqcCGKb4^{cI^Z7g(o?>_51B(Aos z68)fDE%$$ueRHSN=O+5Ja8|K#*TmCyFBfhgZ88d>tNA;1C$ag}r@Kwq^;IEVW4R9Q8(bOE z(3=%90aYg5oUcMIBgYC~5!&-xwxPc#L+!q1s4S4@k&NeVBEQboOzB0obImumo*&-C9lw3@c?z|4Uu$uheb~E!IqON*T4-k4 z_|f6>`^~=GolZl$PEc`Bc6Zv#FJ5D=IhW~Y-D#i5r_TQ45a!sW7;Ueu`>j3E=1@1u z#n?Bo2r+_0Z^`k6B78ZXcpffSX_ngqlhPpR z-FLh54Q6^mwf5{7W`mgznHkKIOf^lT&6uZnr`P?Oe$W3s{<}DSE#4jZs(UAKJozAe z@#R3Xjc?EzO2*qAXXzoF?e{{l|IW-XLkQ&noUK zCs3~}N)Mg$*zSMJE8!6l?(~tN)XxbolYunocEfz`*pxrqNx1jBQw69T7D4-kX|IP;y}S+GbF zsHz%d6mORFvU~~H^?9i69s94lO+*!2RQ9k-BBtE!UN7lAHR(NZcFS*<8foCkHi0Rb#OQJRCe-%d3H^yVf2l_5 z1t<#s5}Yr~sHaJ8e3T|?J8#gQMwC?d8L9_YR#qGHF17&q zLy7{exvaXUkB;b7RGaj^3^R@gnrMueHb|As0<$8dOP_4&E7UL3M@vZVR;jnK7ymWI z&U6{9bbI~KQIWb?4=$XwP){-8=OQ%K9Xh0kwv5vL_ZVIua$i0ESZP$7753jlI(5%^ zUeQBCLrKLI`H+y1vV($x-uO@T_6GQ9rIs(gZwM_5RVwD~-QB~WP#^OQL{-)I(!Uf6IMZcTbcr9A z*Vo1C)c>@7q*jPZxKtbl1oCB&&l>CJBfh zk18-Cm%2{~5na3i{dj#g(I-?iTwARa6SR(eTET9(^?bV!6f7Ws=U5*F6Gy)*l~JUQ zKlsq0v*Y@XbWusurjD1Y&>Kd3UG(DYta>wbfJN{>!$)?UvUg5KA@&{h zrB3`zooIkWy+gS3M>T;e3Gy-K18clKnMba%omug|ddckJy$=@p32ix*v@3*}Qz5~G zu-HNb2-M^#bY-)|j}UCrG>UENokS94Ror9<0uYkEda(Ty@Z&<*xFMqz%6f$JX(0xE z1Hk%O0+$TMSO6JiP^+n_)pmEs8ndCya>UD(D1z~L1rx#rlH?lN+9I@>%og`pW#$Z) z&48Sg#*~FcqMt?AI~+sWe{@uy4H;rl9A-f$5%wji2RBTxOQNRu{L5a4eVA(hCyNnK z$Ju{N{_m7V5Q0J#d;J98vE6y@!~Aj|`${11_c#j`!kuoh{|#H+e#X}=-_K6wdv74{ ze9<3pPb>)h2pcpkRjcsL9UG{uso9BOsJ?jO5TKO0+QR*;*?`Za-P68t!_+NrWa$3( ztq^eNt?)BTb@z+s^Pb%ckQLc5JN%GxDXJFH@R_z`?L4uu!oU5$N0&8j&qoLi*5gH!w2lKUcnt63O#FJ+=8a7@}yzsce4yux`xkFKI2?5e({NuySz=)_DpSPdLSa zcNbgOg`C7c1hekWfoC_Gv^XM0m9QOtp#cH4}!Pqo%_dcjH{$cq7Vm6a( z*O;6hVcQudrj!x&@0xDLCM4(nyg#u@0hXoV$B(@`I(LWwnWO;O-4jQe|2uJyu$2sx zJxa@~cY~bc6B0Nk?=6p$(_>3VMVA)A+&YH;SK0VaRgs}E2>RcXZ(YmwKcy((8^-@$ zrT?iKK$e8Z`mZAMpG8dj)c5~cqyGQi?B24LD^s>nvnoB7T_z65c=>O}d9YR0f25c8 zvrT;qAAY#Zn>589G@Q{zE>l6>btJ4)M+g11Y*GN@%~*56fFkmNO?nU2VVw}G^=4NL zHOUI62d@H=N@&&>#*DdOSQqBZhtbbse|w?<`qZS^6l-T=^PVhrbvSdVg$=y< zpR@B($GNaw)Q8epwj+C2ESv1F{z!v9f$>B?#McT6R;i&yOTZl;AKzX!HF3@zyL5Lm zgrp+_8S9+Pgp)8zRX$IDdwW}a)iq$q$`7CsCf$xO zcLCd1au5)CK5MOM1k?xr*Put{5E%$d%T&hjF4Vyxot=U>sKMbI1=>tI6Y1DS!PPCDU3m)FbO@9S<^{#YjsUoG8t1$-rtBsCOU@F=|7QJ}R zH)Y;^hk9YkNdlA7ovw)QW?DLtbPU%X{xI6)B8wdcUS<*hzAhWcs(K+w=8yBb%6@~=f#`g9Jv1#`1j!k z1nk|e^g+q_rNJV3!#p-kny$nr4jZ`Qia)KnypDLLvUr2k!KRCY#Y%K1r>D!qE;^EY z*}9MT;}fCfu(L-~DJH;G$qJNI1H8MQbi1Le=RMs-dJDxSC*yV;hEVW-e83fhy?{> zhr@Gmb1Tx~oHXWqNo6wd@>=zs8X7`G4Tc4>^2#ZfVI6^O=gmT}?_pGP$14=Sw)KIr zl{Vu389-9A@W$!+N~q{??#EgI z>L~;7v(1oyEMkpS)yFLbe)s=>4??1@++mdazW&Hy|GwvxNgd zMQ73G;aoDs1jr>)2^^Om(A3u}Jv_%rAd9FNEdM7DveRW0FMCQ;C)T-O%g$P7OC$hb zI0{l^h?GGk9Y`fz3m#u^0rJezO)cWe_J`Brr?Flcuw`TeBo3 z(i&P?qV&l}7P+S~ic(ZqEl+3dr?gD_1I*;JIPsI(as)n~xF4na%m}cITfMTrC#}8S zZkD^>|2Ct@mfPX)+F`y-pB6xTD{#Ria8t(p+pCKvczvBAlzvO3?tDv>-1B43Wt618 z1|E)h9fGbsoc}ozMSe{Nq7+t~3~UIDaYN6Gkahq2#5^}Y@W$hU)#XKhqy?n^iqr=@ zF2a@B#Qn#y6g@Cbnl> zNCC7id7=9-CW#r#ec6XEgdy*9^gf2v3%j}{--6f=09pG}op_tKHp2eLHGZhN*BLb1 zJLG=&8`n8^TYpAV_5E_;ABuoGkL)YQQK6jsx?$8muS=DPH_p=?m(!Cm-~~X$MTFiO zvvpf~*-PZn`m_Hu(dap|J%8eV=sNd8-k)MT3+cHcB^fDo9*Z;4piPFrWmZ{a2y*7v zgA3Hbw;gJWF2Huei4+I6b6RmYkbQvd?AQtbP_7w|nMsPu|1MMMxJtJlrA7AYQ`i1M zbKF%51b-kP0oW(5c(N0bzl2$O*Zm4b6O>Q6G#8a9)>^rvH&Ss`^-6OY8b+O*Fh1rN2^F?_^)W*o>eUrDKQmyoVe*Q>=5HK585{zI$=> zRj+3-a{sbE70TdyiI403hjRGx_uE&@jfW{ar&clyFE8>zX6Uck%Ru}N&~jzOzTkPd zU`T#GEe{XRfk!qABtTQvnH;jA_?%ljkg-^+`B{Mo_wU^Lg@a$E*7e zakW2ndjInLMF;cT$8LiQ=rD2(kP96Ba;s_BX9Gu!2V#rE&qWo*IGo*@GgpokU8%4Y zt{w!aq(xe_L(0otm64QCOUVM23KK>Pvm*>O@O~X~0DojkZP=V`ZA}dPT=pXwGH5%s z%fSPK9__s6$P2`gmyaxw;6EOsFW4f(m642>Zq(kM2-|t>@M2=u5$-P3vDI35F}l`l zndL0b$tOuvXO=_DZ`zp6m7eKPh)NH@W@;7767+|%fBc)lXh1i}g0AJtI8OA_A-`vi zvrSZd{`{DVta8|&YQKpVBW55)@wYJ)~0fA-_C5${e|ncHO=Un~iH- zz;%jNktvnYgU=sK^() z)AbhTGtnN0iYhKpSRnkI;SR25B@*t1Yvc86POo|UJmkb~Zygs(*(C7+qCiwt5eL{9 zD~QKON0#z#Iz-J<7-H-C`}g+6TC!md@0jQZNieE0I<>exaE_0Tg8%7_{#revpW9!XJt7G>> zum%n5O8V&}1qf^GB}B7#rK#+oiJWWSSLSwxV^?LHV?KnuhxNN=YwFdkQmbod2m<;M zpdE&Lw?6UX#}5D;*0r`C-np@}w{2+U9yVScye3eguRstE#=}S=8WtLlNl$!Y%x##W z4A_zwE1p7KiGIncsFJv0BWe`$X>h5fALdDD7t-E(A+#F6_mhxj9YSY2LQKu&BZ@6< zp}#l+jFo!Ns!P4(OJ?0qtzPxkTvwf*U-;7K?1|E+RutMo6}a8ZN^W1s;5iJzmS8JK zcy_|VJ9k`+qDwbPPIKc7!>i#J-x}E)uWmQeuFGgi7TMK;GV}$tieMlWco{k5)1m@( zcwuo-a>^BzEm5wR7B3(f*WeT1E2xc0DRkV#VWJ)k)H-bkagr3(V^;dZ9Qh|6pX{U% zfhccXf|Ay(r9aL(1kv z^vNP0;(=<5FKSgQwgDFx)59BIHFK)_wXJ{x-%Fa4RPx?vz$p>g(WT=sd7+5z9H4H`Nsl6n5 zKPGOgb1}TQToa}hw*)8*Uuw&p&=g@!zkfrig1X)DHof@X%am<9q{gBXv69k${+g`b zx`*S-{U4g{0AgErQs4W~njR~?Cs@hrxB5O%MPN3qZ+UQbiJqKfl}C)J;nGY|UZ4Cn zLvL>AeShP35!ZOF+wH{guh1sz26jJIOmE%Pyq1mU((K^Y-0Nfszq$axL)cUjHw@^y z#OZc8YaZ_ffAOE)bNu+>i)rV3U6w;6B#R9(Dq>rCm%Tt1SJ;aT zo@BnEm(Swm127x^WVuq=lHvlSh^;Y_bcZwVeC;e)Eu3G0-n z=OZZy6`{K(hA?ziiWA*ob7}qbMUVk^tEmS10ez<-mES57XdH(#H@&&Zyf07%_Iam! zm2<9ewA-9fF7JmgoBh1r8f$z8Fa(&!Vbvx#z`z^++)EE{^Vt+#@1;J1+50zf*l@*t zFL~5&IC7TDJ?=;i|9onN!2GZS0?_l0@Jq0dUi)!1_lMl+9iaVWd+GPPr#S0q0Koot z3nJ9u?tUY3FT8UPc{`$Pi|wn{QrhJ0Y79v6$HdXC$K#seR;T^v7i=;O^NfH7+qvcJ z)S)oeeh2#d6Jp&r9BM=LmGL`a&qL`D{u3O!0;e>^isOywd>LwS7MTRk?4qO@l(1>X z;^waEiC9SG|GKh^ZjkWs1_mY*-+E%F$ zgDt=3Snyew7t3_^Hw^pO7%(i58!f&kfi2-{>+6Ar;#2}6$tq~2M9T&-fni|i3^8Hi zF7;1>beg~y)8V8j`VeIK!O|m87^R@#|Gk^q9oU>^`PTQjh!#2{HVY5529lTGXbLZu zr|EB_q%;fqkdsa~?YekTq&*2;T{qUQThHBxF+jGUT0}r*LGrt(xi8E0q&N0h^?l=_ zUBrrBuqU4~ZbHI;i$sg(hdu4NpbUcyceOn2i~Lph0rsE`UE_?N>!CwI-?24o{W2AW z+qlwkc$TS6$kVR)im^l#lHgfTUQVCW-(`57H)Ip?KFf)dxv~X8L~%k9>X;y%_myXy zknzh1rio5fN)N0ngptd3s10WhG90Ymr@?nE=@^KzB9T z;S+?+*OZrAx=FbdOUA6$(&dl6k)ST+DX8!-#VnxyLZXAqjY?!Nuh*;`m6Le%{*9eGzgG;nSikc-U6d^df0261 zAYa*H`*C1&rajObc5j;?zhNl!ILQv4gifs_K>v)< zaS>c|BiPn<@YglMHhH|y{d6gL|lLW)s;HYv8|3b2=@Yotv|@uc3a(8cfmn24z>qu&S6B0ps-#?fMP?^lFtFL*rzM zRQidJ3_(TGPFH(-Khpi#zKPoeXJ4V<_5$ZJ=X^F4kDA6GvD?SQ(oL@x`qv z@$nEkCbfz}5_d;JJ=c#p01Bd~q&Paz^5XG4uaKk8I}|&^4e}UUUe1C}`7VS$UM{k; z)$f7FY~fBcov9wItHtE@6g}~x6Fz-1o#WsuJ7u)%$PM>7g%{0k=Fjy*(R5fz^>pI1 zO&L=3_1`SV&z3v@^TAL)vEk#nh&&&olkNrn^+Q;Ke!0z9K<=hP5A zwq_}Nty35$p<;WxJm{y@&!XARofNT9ZnpxCOw!KY_&yfvVwR#W^OoCAPq;85DeW%X ze|6`=!uU!}8# zkvghRrmYz@Zo}v)HBCkilkK1I2fFTLh#-bV;DSInNx4dmWJ&6@8#|#C7ailKhVo*~ z3AVAh!j91xk-bFm2&O3MnygdXuQ!l~-RhpmUfw5-MHes4VGfzqZ%w)0U0$2H#>^*f zX@9$mwa><=Sk(KZ9e zlar;8lfrnlBXE`!m3Az5rtE-WU9g0$1)QUZtl497xD0iWTuDQ%lR>`tyFaTK5F0lU zMa4Fc^RwGxZeF`1W0{2fEo-jdGFo)WZ8u)V`h0fqMM{f3g>tP^p3R<}THob&v>aP) zHJN@^y@mC(dlLamLUya?)_gg`_Lo`7`+z^}!{_8naX^V#2aQ@(Ml=D&IXX*iH839K z;TF|k_OF0~A;kon@=JDE>;$SjwF(64gmR0Z8~c#=w<_X?G5CdHA9;DoDCxwNB~5k| zM5$IPaErK!7^JravSbro-3FZ=XFX}&)9M5iQ17TzOR}qC^rv}NV)0H%a}(Z@%s|(m zJiL77f7V#C8k(f1q)Uz#6(vRqcr8NSkFW2=^jDW{dSHtIj92C)^~$MhY#jvXAB^nm z?DBalPhE+DnET1x-huTW&h=D$_J6dN9=tAb{fr=Pt&GV5mWFp!53c<-#SSL$bJSY8s-*ifKz}7|U zOscN;%Hn&0gi$#A5$Nc&rCp&9kwi!W5k0th_9a$y&wK{Aghuonu5x z{CGI>6N@9SfmYNwkCQ19&#*q*nZVFEcf0f9FR|$gwF>hlO&+gXFna$dpoC3L#rSwz zS)pCJlK>##WVykdD-%#1(H>w+@3X%X8m5iLkUzS~+W9u}&aCfD3m7O9C(7wg|5=gdc1IQ{y3v2K4pveP?G(IO2U@yRP7V zHa6;<(~!lcxf#MIaH!YdyT&9~D?gr}ot-H~shUxKfRvFUiOZ_0KHF+^))WwRdl24{ zfp>b79hir~ipKNlWXEE&-=_X>X;5XK6`%19FSdSO{z~Qcr^kWo$jCE&Ouxu^v#N@* zanak%J&m^QJGqTow<^CwEtXN(Z_w7!aVaSpgG3+%S_n z)jOkVN)|}H2`w#O*@?>A6K`NC3w@?-aJDOJP`COFuQSvsrrLhp$T%)0@B&$L7=C^0 zU;3FbbsV7J0w8(X)V7KxEKW(rs~ocbQsSs>(JxNewWEWz@AX)a#6qk%gCThKoYK)2 z6OA7v(?*p_VmJp!T((df+KMRM9dALFCF}7?{URX>sD{y8-6Qe_gxYYAx6;eY>xTox z<7{CthmFVhEpEw=otQD8f~0R&;t{<>gDHTuI3WL+^|qe*7b$ zZh4FyTf>SflxQMZ_UCz=N&{>$7h2lY%jOu{%2h6~^&WqT$T5$woqgmO3#<29Z7k7Yic3&GKFStm>6bypu2W$IEF7TvVwN^J!9U&Nxegak3r1 z!m>uDy_0kvoM>G#yS}2(+f}MzaE)DK3#>x~%3nPK(ZQ6#yvsV?GmzP7 zBiI(y5!x*JgGG9E2~wGK`T#_=BtB!?9O^p+z1xiSI`6~>Nc}Ti0hB2v%IkUts$V%* z;%{5f>5btD5MLe$r+W_Ve9&V3o_7Ra)5J%)LE0_$Fu@`)5&08y(OQ5P=c)O%m{hfB z%051Tk6o31TaHCq*foQ>HY~4nPUM$OC-15jU$m9#X|>{!ig>l2hN~T`%xMBUp;wMn zow^OhB0=<7nx8Y(Zg7}-|^QNzDR*~>-pgt*lI=%cqJbp zPtCwOwG??A#@@HzOxRDUAq~7{*Pl{vPEGy#O9rL9i6H_)pyjx_y?CRW27{e*10p|`=#XWB{La6K-II-#ehr|HSr4Q9fTUs9FgtzqFmtr;A- z{2posZ{0g=EwNs*TMH^|$aAeG*GZ#RfbL-RO9Xz|PbK4CZv1t6c6T$4UFDp!T>r^E zxx2iHPn4+@gN2L3A5v>$XSV}rr`jWnB#nY=RwL?@yXb)4_Fp_wQh|CDi4qqVm;KXe z^A0~CYYF;nQk-vICrp|mNifL5xeQR7c&V3Dx=0i`>*_l<&uPk9cjE|t)FWeAx~BN9 zQI;e6)Vw%E|1KK}?A9bmQ7~6afi-Nt-v&qYPhwYoq=Czw;r8M6EOyCgU~bcI&w&62 zoC!rrz1eOX;bI>G0I?d7TgyxOmpHNnJg`8Xd>EUa$5rOdtL7X;l=!8KRZV3@90mkK z&l2e3QjZQ^)&waZle7~ql*-zJ`1_6IAVp_c@03=9B=iDexJn@MnXDcQqCaj?q*&<6leJQHF$TMy8Y035hee4yR~s4 zOQH@Oc_+y8j!jB9G<4gcnQpUyKU+b%^c&cs`{jWU75xIrUne3w!y*Apka+1E^!WXMo-%SI0LN;Xi^-tS3 zw6VbeJP;*v+4Zv+A@NdFh??eKD^vkR|4E%bxo=}5$47h7rEpzIfB##^6Krkfy9ors z5V@jxj$jj+p#|CzDQCHE!~w|Y?l)E*>o+5{?~|KW^u_A5@!Sw~@Fl7<<8>>-jc{-i zs2ptj^N-3`1l=HdR69$jYXJVrjutZd)vi*vw9Xll-5v`s-IWa(8PA7y$nF}=Z7U;> zBKR%Zg*5QkJm8~LDO%Ws7=i9eZLd9?74NJgF?zlLqGFtR(Wj1pXm#hmLAX?ua6x%j zK~y*AUDc z3Y2OZ`J5AJRswNAY|m4u#fQiB{^ty##X$x3oNN4DRrAKt!yvzj?&8fuK}DO;K_Gx? z*KM4ASWvo@4vBQ;_E&6J@gg^h>*e?({Q-H+n>#w87Myn)O*C@&anyJVU6tl@yd4es z^H%%Ck7j7#rrxCC$bPH@O$-QAj4&5*mLtz%Wmm2&^!_R}mNN0sHA{O)W{k4GBl>0J z(28K)J~V#|h1p|NM2`EUUN(s-^~N1De9Tzl6=i()H>%*1PoN}$iFW&%*WmHgN#c)6 z{b#ceK~2ln`Rd^OdCT4wZLiXQ+Dm>m^}k&(IXM|lgbGyqHJ`h6SB?b>czMS)H1m57 zo8l0IiA9)tCBjPP25?=_>=R#!9)GUrVB>7d2dMti&rX9@EXgE_k!I{8U+6Zz`~m@^ zbFD<9b0GE3EMO1#qIJx0l~SS;pMURIUn%?YqyW zEe?Jg0B=ei{2^ZI`?i!t(TZwDXB+T#09DWdsY4yi<%k)@FT^~zm1r%~&tiHfmaxCb zXg2ha1Lbt=F`jKm|M|Pwn;%f30ZSWKcXz^I&za&Taza#WU$$76d|UNb?qx6}KKNpUhWg zvF@V8d#PS3Izj_#$U`i1$Ny4oMbF zM2m`Sm)q8pKtA?P+~{`#0WWktpmy@~9zZia>wabaw+A9NOX_*ldrc%hK{r8p6L*q| zxZ-tIUqzSA!$b6xgyB(RN9%w7%zDp;%B_r#sc|MDfh)eYnY9_<1W&}$kv3!D9COUd za^y=mbT0f!JtY|6ahrC;XFatP=8m`Jg)7ZI^n>BX>rW)UB${?9e9TEyD&yBLATGtS ze8D_SK45mX%V59rto$b}BO;;z4K5W{cn?vT92?j@WZrrp+M!xQs>ymtMbFmwT*3v_fF`G{R zJj*xn`flOU-Li6bvUMcJFB83IRmi~K$(Q6J2Mb0Yz zdbY$vQ?$SGL4}MzZH|ouz8yKpC_f7)rh7OM@-I*Wp}%asGPnrDNn7>XLMRsz2B;?- zo96k&)03hI;mXDDD@NR);;b_a z*uWD;|BS4tUfHBkzY+@evJBw!MtE;PBe|kBsI!VuDl5^s_5|`3rn9z_9@-k4;vsrW zXx%!mc#^XRX}oz@@3^zB4=q&oNFG3AYzLuUD6|^UORUznIs{SzXC_7BG?r} z>k3bWe%sCLyI9H~`5=pbGVYrDW&Y-7OwB=?kPD^C)j2P_m4r=p1XflRXPm;uUl!-i zfC2G1?M1DNyQfq;M^YzZ3d;p0 zllSd`1Wq$`{D1kdY!(1Fw|x_N~Sznqh@Y#*%3nC8~ZNdmzNvboSfZ;G@{TG-TtIx znNiOKe3FxsvWx%H4q!+@(>6|~FcL~VzD=}00w+;(B{{dXzgNr)1xE^tl>HG(O)`M> zuReA^$m5pu8d5K0j!8!#vN>JbFI!eBMb-pt*ywH5qA9y&lnNo3@f=dBxSmVkCt<=0 z4j~KmAE2h>B4;md!T78qVBEHyLTd~PV7W8z1e1>Ir*3lYr|Z+l7%R%TaNXgTV=}3Q zk|t$Z%J1DpY!qF_5C=D+LMU6ezpWa!xH^m?V474ro#7M{AbVR`hw7XS*C_v&e-^!; zK$~C+V>tcgSQ}-~@SMUa1chLK%7^HywgbX(`$W75&~^3!wMkX=Pv64XTsrCi%Nz85 zWHU)CJEpEx7iUe5Dyzyp#~__$WK~?mgR^RPvfY?B?deL{cSlG1yoBtW4P$rl;}it= za>ZCfiW>0HQp@Jn9IaxDGODvLWRmhU2KmTV0I3F0Ar zanRPn%Zuw@OSm-gi$&JyC<+FvPGRRnMKHSlq>_7mos`sEs$}rG#D-jp$*H_Uk|2b& zk<4rETN0&7Es?|`7vV>@!F=}|_8wD$PQ4@pWTfc)uxP`ylf;5y8tRDJvy&5j02787 z0H3j`tf~Uss%H9YvOn{_)3PeM=|lKYwD<^}3R%(NEcCsRoO zn#-ofM{Rm2Nk=1Fw==y;tukc558E1b$jc|lc`pay!EX-Fd<>!b7=3<}JoyI}eVZUsbNs$KCyhguH5L2DO}h`* zGQ>oPXz2TAdg;Dc0|HFTskNFGMNO9ZT(aMl_2F&saG&xN2;3_Hdo*C*7K{a2czGWz z04Ifu_1#9B8Hgk#;2W!JG9B`b?60%bRz!FPK>nwZ%Q~=V5oTdWs)l!5og}=zu}W zPgB~jQ>KsnPW67BI)5g3*?JpOjUS^y=6m+r|Kcl;jdDLroYrj?kEJ|GBcl9-_C4dO zE&4e6Y~ycfgY+mbUe11a*&#_l2O3`ft6U*YHH5Pwa=p8yh4D{LC{rOCQMGH*{MSIK za05nK8ylNq+t{LCrI-?wIG%Ex#(TzuSEnK6u(2K!X3th!4KgiLYhRxe9Qx|p=wb&( zHsB)zO%F+at5lW#Znl0KM8u?_R%2Um+>fDlG>oOGPOgRgImuzXUK>MAhdf&b7sUwo z9Uq2SG=_;~P}7Y0cg?C5VU7|PO~B7n`{PFlV443b;Cs0(4(g;E{tvG?-VnLq;?t;v zO?YVb+{gT&rneWx6@|{);J5HlgoTH9+Z(H$#yA&*%@&@fLu5#4jjsiFeXJQQjxsCPhFS`b$G@r)S|P5d5G zncrt7pKQR-Sum$A+CToaAV8Di z)ci-;1*73B(BjlKH}C&H)V+07mFu_ny%Z#*L_!(`q@}wh1qo3QP$?-<1nCZ?ySo$w zBqUWDq&pPpk}hEp()G;c-uric=bUk#_kI3&#(3Yc*BD!IvF`i6)^%U^HRt?(Khx#O zK(mJl09h4L}U9vu6AHR`iLtxfmzD@!s?&gydHnv%P#j7f@PVR@Q@Q7R)$l1zO zbMGA3-?crb@i)=o>bc#e5k*(9M5FE=vWGOkcsu&4&*?bc0N(}Tcg&6VE;T=NegCLO zc4+4Z&dSe$jcK?xnBpL8hFmt<<<~n~A3uH!ROKTLzCCPTEjkK19`%n8zdipf??6j4 z_~`iWq~*lGN`Z#WG!ixoG={MzmT836LqkKT)E{Sa@#FtUM81S)VI>VD9zlH3zWw4L z;cE%lHYlxXtZyJ|yT#qeEHUzPSQ_GPn&x(va@}9ES3SnN0{MfA)4lPn)ak?2w7R17 z<9(s2tuVE@q!)!-XI;2F3Ve-_q174?NYs`|8Y-V&Z$N*NpEZE-z=7Uy+8S`8Pky{fdT^mB(2TJ!$C=nZV$8>dbqG1WV-%BT!?(^^xX^;!z zqQ&ig&sP)<&ttCyMuqA4 zl;l=CJ%ynz!|hn>0lqEj=`EG|dK$*BA^h4#B_ktaxJ9EQBe3dAWqyOuKpx85s2og( zE9WO}%qHcpbPMC91)1OOh2RZIm1&bZs$uTg>6_h5ByXfMaV1Va{Wa*+aW`#le}VH_ zSn<&tTAs580tvz*C%JCq-F*U0l6~sBeO!}*hNL?T;B#rqM!(mTrEMYd+IH!P0_nL7||kh!Rw6MI&XIR<+YT=^sJ!(;@AG)v8AU_8mMsLYyB+ zZZ-*Nf3Y9{j{<^6@V%)R6EhD-mx3FPfXarDq+f|jJd^|B71T1@Z#V5w9SRmA4b}yn zNGEnu$~(H7Z%TNzHDfU~d2!la91hu+3{xjYs#Nu=W_gu;5TC$VIyJ8^Axdlez_nDKgI=FH!OM2q{hSt3 zB4=aB0c{D3Vj67Rrmsx|^*@jUo3vlV<#_~dl3h_Bf|4;jQHH$TEg$ycGEUqjeg+O6C~xc?BtatANh}P;P(HKd6LF&A zs{uo0(#wo*jLW1r%zQZ;^UNFX#F}hbWmnhDL5XtFCHQltFYC%tN zIi1ebHpZkTQh`gNoa)~?<~zA*QI$-f9CP&-15LP$IKE*8oU zVlqX@lkst1ow5>%C_fmnt}5h|Xnd~IG~E8F_qygKR+23d-D~y84SY4UXp^u!9<=Vs zXWd*^vSwM}ajKf*>Y)_>!Va&g_|BJF=|7}p+29RcCzDvQ0b%9DVdeK zvN1R0wa<674%{iu8XVeWm8lHzDEW39J7mj_M!Fh&aLtnD8%5FMmFQTNt`DUtMG~QkPp<``y(V-{E4&kWG7|8HRjEHk(``&(ELi6KpTKwY;yn~mBeIuJCg*QpS#K%6VQr|e` z{^_$?i3D2$Ec#FNxfj2pGP$QuQ z?KeKqS<}K?ATzx|=69jX#hkc&rbCgD-kEkgshy%AZg71;8qQa%^q#LddY{V)*h z*zoBfTK!|zS=|-MLFXigg|M9-8{BmK9_c~l{Vvv&3kWPT=6Ew|)Lj=U=#dOm0v|7^ z7{Pq}{D}Hke%)al`C{d^rZ3Ix1VNjCZj{Nx#>9S}&pbN$*qQd8`eg5apy$>X+9liv znt|-Fobx9lwN)+gJ8j#d7e_tyqfN+7+NuWm@bdD)97go~a36zzMLY|2LPA`$+;=iMm+C&6U%M*()ARgM6xJrgRO;xsjDm95IO5u$86AA3m?z zlsCE|H*8NO>HvD9KdOANQVbi}`!@+hcSsG}qc8}rK_)uleTJmrF!LI4^n%+Y1n6qH zZ{?344!`VK+>y3kVm^z6O@-KAN#(QA7pmTNKe$C`a)b5RBR?9hn=Kbe=q?SdC_nqg zSAv<+GEa5l3O5j0UvCEcNbgOxo-@vCb{;lhC zeiv{ap19j{oJhz9<=t03=hAuV-yR8}jM(|1mMoJu;tF|k5YMyX`yHAk?OFc3JVW-w z&-gGbA3{1XRK5vmn|^ut8|DuS`uq95!b)WF!#d&*a|<+@>)DaY=n0iFT!ZZ;X08mS z?E61Tc)Bu0IR(j;xo^c{R5!n%C@$p@3iGSVqNXa&=>2U#hT-5q$5$Gd&GH-b0(*Y) zYVQjJQ`1gmn5PZ#0Rp3F_*%4Z!pCZ(TRPL5B=^TJQ;+2gKucKLm4B# z(Dq1_$cazI8&tk$bsF2w?dqQvku>x)eb8RA1At5}eykoKXOD6`a6(|Z0Yc`KcqI!Ko3@`V< zq4Ksx3@$?G7@s+gd^wyxkOMzr~zR-u4gO_?rG=6PRk-du|q63Iqt3qYegGQD_)Rc$s1*}#8^-5Bw}m(SrEwZ5j|+d5Xs5DPl&O| zm8lu$J6j9IQXm=xeAz$}NC+kpUluv#de>w{uCF6ZQ-j}-$4Yeq71YN{I_RSoNZV+| zZ)j$oo{c38-C_sd?Q;Lra>j7LbPcqz>ydX5h({kup`ue80pX?ZDw468t5sI}IQ=UZ zO$qKHqteaQFbQev9PW#_bA+%r5X=^M_}a1w$B+E=bm>dohfz#;+sYwj>@szM#`oV3;c8CZ z$``asFcdRLw&|D3lt&$&>NJMExBIEwI(Nn%lNZqu zV9zycWz?j4dS^C1#H_3l{}Ve-xCDii(V!v+6Rt)QL*w2XBm`-smoFXri=d0rW~N*7 zQQ(2b2cG%}1ejrA%MBsJuixIV58vIjKRy^68+*e0({9pa-k+hw%x5dbq_e#2i`DWS z$^qjn@2waUJq0F12Csdh`** zSiky~9jfdVG&Qy3291i7vI8OEH#wmW(^Qw_>k!(@C4EAF#}QPU6z`oD-yJo}(#WaVKqHnBV!jHK)6lC~{nNo29-$ z=F*!ImIjFYiZ2Z-vc@K@pn)CuOL;lSmwvT@r5;O)9rs8wi?RParzaDs|M)>pICnQL z#GxTW-TZ<#N5F7QCX3{0n?ir^&e zT8OAj8Ot?KqW<>24X+6@b6hF|XB%A{-!Ke~JHFfy?QkAivxhy#7|Yae&ULdt0zQ?K zv>ixvQ2O0l)_Ry0tW~=@dT;Pj&_@RQOobG8+xHO4u(Y4oEVcAob_FXsedC)+upV%2 z7ZMjE#tAzf@d^5)q$n5X*1Hni;u10mp%ZMdK@ZeCw-vdgJHGDFN0%HEd0D*4DS&nx zuUN)UhXyWafa*t%re-P!^+5o4fvXLeAaga|uy@_lBmovn6a!30=|7I)`?{7JP+EOzZ$BvTN@alR&T;Cz6@Aj>z&`NC_VeKZX~AQ?v-2`fA}+C<&g%47 z(JAGXhF%wHr&%ITyyRq0p5&4|b2{bZjsV|G^QJZB(L`s4t-G!KDkA|4Jew0sXY7`B zhXe?*hVfut+>!`}+;aKkB*qJqCA{qC@0#MX?|NN1;Wg_u0Gt5$^1rB0fVQb_@q5-? znQLADp>QICX!uT!Yi5D?TFpoVpvw7*7ke$dAGi?=4u3V|YpK$uP}hZ6SK z=?0W!lMiGm@I>bPB__f-4Ut36c)7|~7p{G{^fGO;!bM7l1~-1?=%805BXjJa?|w{4 zk;@8;MgcZ1+_05R2izT++*L2yGF(@i1sBEND2R%Usx=o&bcXMAXnyns%JCpo3Us;L-C4T#s%d$b zt@nq8Ir$5t3E@g%1rz5l!fVx{kG0q7U-H=o+e}7}e@A43FaXm=Bb; zDu#3OfcgP;VR#LIS9=wS5GKI9Hlxsq z^R*Ls8D8D7U;~zBh>s54Xb#;xGJfdk4x_+L$8B68H2%`(Td@3tC6Yp0TAdj3%|JZR zi379d({xec?)U~ClX1l?x@P+Vx1s{9mWe=i9J$og&2IFAn{&Ty2KZ`uwee&Mur*0o zF4tht^^9P#eg0Yp`6LAi2-#a?wW2;*GY#ct7 zvSHCK47M__;qv@)X+Wy$A9J*ot83?0YMy0PLureERX zNUmb2mOggQWjGU`<>~GA)8|oj8uRu_cGn2S5L}`|wYZG{5#snj%(lHoTD|JnNv)HJ0Na%AjY(j# zl$uZM^M|=>WR5LH(jg4Hdv_@wKQPz%^*#|%pAjD-+H3bSva=?`ZlU_g;%O>2UN%d! zV@7G1N4xgq3b3S#@CL=k~p1nj#a9HesYP!&{Axcl0mG80Up@cy1XJ zUu;50bX|N}!fEp(IgmZ(gy&OkLf+-clv0dm=x?%1N;*fB`A|BBpS_|;Sx^A{DgPIH zIygAIW$ygCIU_~a1ze@buccnd^RuGjs3zGsr7Y1{^K6Y$`XEEHJs~nCz9b0TptQ+l z_W4h!I&9QE+ivW&B(}ufB}k;Rx=VPIx@u~@_BL@aUFReAQq(bt4KK-F`w10p*xik! zHX(3Ti107+T}d^}XwQ+@WqD|m&_2tqm?{(-@*48bxM)DbV+Lc?sF9`D1{MyYeQ5_F zE5oQe>>9=$4EOi9-O;S5_A5s2e%LHBWyY)|>b>*0jEYeK1w0|%fpi6`A8g4^(Fe6J z$sRSRm5-xvgHBNY((#CUQkfxD>HNB5=zqB=hqA2mW%gPD(1?DLtL;e}e{T!mDN0}c%1mT};&TQKxFb&TwD}>jv*h?>kE$(;neEw9k zb_E(v8hE_iL^u zZH{;uiS#y(oS%n{oafue@7Cz)lxymFZ!kt*kT@OG=1zOKu#o_63CrxPRILv(HPMh8>uc5bavg8L(pS|G1?m`-eDFv z%($MUSqP%Xlq>>w=xr1rIQo`!>m|)DKL;kBM0zuQl!=;U>^_`zNOz|O!TOGs zugdSqhuGWw25w^BBW^kC1acgo z8UH5Hb3VM0$p!MU5J6d9NNqYD`Qijj+XPRWHFDw1temfT&UkZrR-y=*IKBg~6F+3E zp*(UqO$)A$@zhbMm5ix+0D~Bbf>^At5TbAv49eX!SQ3EmsdH zooqYG%n5RJ7viiL#kyJNekGbUel6HO-E0!oJ){wch&OaIB|Xeu2I5l5+U$jZxQ3L& z_U=0d$sC^_-2x^IU$P1!;@y~wyYzm5jv&q6)>Qr?rQzh*n6wxT@O4nW znWP@Zyunr3A{EAHII)X8V%vCL3(44GJMBWE)QN9-!`=4ZSFcqa#PgaaAh?UdpsWjF zR#oeB4kj^vTweOueA?i^{ma*x&C zvsCBZK|w))r*LT0R-p63<6--E-Dq@Gojacr;TUe9Bd)LC*PB-+($*zuWp%7EU1W&B zSc7WX1q77dJ=i1fbZanOHO<~K^?ePSNsz7s{LWa%NqEM1Yk$h75W8Z~oPUq6^9gtVWdwpNT+5m*`FhR< zqK#^#1c>LqLy;n6XQ^)vToJJKtxIdWR(~LO(j<9;R`)xL^KkpHtX(j5A8diIb_ccQ zR`ZMY7A9&Ln74o4yscBV)R*3dMj-Zce95)cUvhzEcIjxXh3IU3+DpEv{6&)Q+jeg) zbd#Pb&+}7o<4Xn>dF~b|hvIR%g;p6e&(L0_De}arp&%mBQc!?r>*Zd;$XN zy=+}dG`$+0h|K=3o;D2tE>+94r}~zP(LG#;Xj7*>t)D`#c$RuiTB0#rOVZ& z9+w}wPb*lV`)EkKq5J#f_q_=umV>Puj?1sZD3QP@z4unD_Qd>dV4r>CH?PGOib4tT zTbt(u@_|`GNjKdz0wrUwS4%Zye6#KAa~nJ*h=4=dX= z(~SI|N)1@h%7bgl%ggZWZ!GkVUq5#wu4f+B{r;W2xh@tYtEbc z;7UO@1%;9CFKLs~Bp zH?J8kdIM!se}E6Y^zJKSFqnYccw}S*vNd~L3(r44mo)q1;G2+`vJhDR`vRfL2k{ju z@dx=ins6gfh|Stwp5^B*gZ0AI+Kmu(7(D`B(K%zWknOLoLTFSyr>+yim*DD0XHG?_ zhWSW59(SuR)E#fEp)OE7JXONI%69x^xxEPWOh?5^cCt$iy_M_uxJZ#x3!6L*<^Gu5 z77PHM+afGHqB&~mY0D{ZoK(7h!P2TnrH`HoM}lE&V`gnaC>ihOjB$%rA_EZ^Y z#8|ru?tw2{6V6Mi2(J5B`1tsKG%w1>>GkjKl-8g!HE6>&E8lMdt1p~nRk3$8{KeB6 z!$*hsd18N!;2iZS55Rl+moPMGoCwS&gf4@C;1EBfx5WuHVQR9?XDEhlzFPZO{?y%_ z`p->{iK!JsXQpDf!D!zA3MmQ4-b z!iOPq{xf86U;=(w@_u`C1%bk2dQJUEh9n;9Fe4Si96{)H+oAFJB=r2xcQU)nwbO9yxLIWW=xggr7&r&{hUZ$W8MXgk&u28s0-V-Sp2?4@8IzXdG;h!TzB#*H zVb=f0Im;C)#vwPk;r?eP01Rg{YL-$H{Kwhe|Id8%;s1}&Z2xbdb1`tcO5d(k{n@g5 zo1_SLvP+*it8jaKwP~Xw(H=Sld^1Wu3hCYd_LiS9qJIP7o4Ih_d4`)f>w^yBZ}2Z~ zra1-MCI}t@6ff3`Br>Q?d?hO^2Um?;8fti z@K5l}1$Z58PG8yr0M4;9jRARxs+6i;gX+a6N+7V#zocnNI2c(;rP#K&zmGW;j`*LD?{j2KbGt6Ja}$2BOL}>@5&z%l@63nkT6@7Q z8K;k2ikh05E>xP5agvqCvju(69bVfj@%U@R-t-FTAnoM4jz83@@PZYa;K+PbpkCPAP( z4Et`V>I3(Xy$f<|4)U+F&Be|6dxz0rd$CD&^L(eXj#oF~I;Z#~6Im-;>-vJ_UxU=2 zC^z)FuqJ$L96N4p#n5|D;RA;~S)2(h=YuT5o)eZ=aObYg83Pm_e1Qllfn=0;1VYpG zIhacd=4OYcjm^x5`aZvyq7{jQThjIo|6DAuvPOc|P}}-?w?%QoDm|o~Wo2IL(Q8J% ze<%L}g5_F)-+*xpep=FQe^=Q6hV+L4U5Mb6o)5q# z$(;8jEY;5+{AEi01g*uXqoOv&Fr%@iRKn8A%+wq2A#DegLhL8^G9EPlaGv18t$vj( zqI8jN_v@i(|E(j_gtuI(t+|n8leoq@Gy^;3#(}DOkp$An`%g zuEOH2T!v;>b#mG!$;!)l%Nj89!|xqEgo_793NUkBzSkM+$U|H%k}3~WN1&;@r~Fq+ zd<&ProN>zPHoP5VIH)`<+bX)SnNU@yPpJBK{hd)jE`rzV*H>dPqX|6@#jAj=RESLI z=T#kg{S6@fQ@zT4CD1is>zE--1oR`R-^|D`U~1T|nyV6#XZJGRjbZHOx^0vYLKGwS z)8UDxCfrg~R8$A<DWZk%WO~9I%Qw0AMY{zpMc}rygwz-oYBL@w(nd&lZXFd(d;C&{gmT$i3GqqH_{#H zYCWil3f|KQ8JstR0LTvNP)Q9H*q{6%#iM@ZX^Hl;=S{Hf0(5-Q{{b<*HN zcUB_QGZOoIQmV;$SV+TB`1wJ2Ki@4r!6L;9P?%cp^az5UBn?H-{%MESAYE+Qrm!&XY~7ns^=H&I-@4{<`0rJe}_P2Wa%OStpESWns>xD z{r?wh9=#DIl8~VV@u^2TO;h(Jh`vz3_YaMwJ+jo0TERWAEPj};32i6R+CZY9nkwS^ zAV+m3?y)5RWPcy?k()9?bcX`d%aZ&}vo>tdLP@rvnrZeEl)JaUfD8&N2wyWsE%4cy z{jf#;8(w}Uxnax_&{wfen;-C1Sv1^FOiWM>cy5An(!$ z#ZCZreA_wr_hiN^8gU}l|8{aljNYHYc>uCWSjbT!()f5XtF8f*QsJ;5c0_BFzZK+A zy}rNS!e#VN1p6=eeq=7*L!NsNa*1cRgbg7KIYrmPl z3Ga=*I1p06(I0PIYxN0(o(hoK;GC~T@#nMQ1b;)e@kfrt!piaXSr7V!v3h@dWGW_# zwf;v?d~7`+mWb{SJZr$>>nR6iz-Dv~E(-K6;<@OSOyGkAJ}aQ2A*6*t0ljp|moEa_ zpN+3qTc7R@&n+ffIqZ^gheZFWs9UFqI`;1D>;0QZy1rh55gpo@Ot5Gp@o6+N4H$9 zh0go9ZvPYI|3mU7dI-23qY^S0MyYcqpvKFt;6P@e?Pu1QR*n{9tdgOXRiB6QUugp9 zEI^L)U*~3lvPtoMV$iSrp09`Fq)50^Y&lKvABo)hm)rY`wHw4#M<8nsVfrT}@J}y< zH|-i2Y}akpVCMwW`qEobCxE4Z&qdk&qUGTRm&2+f zMSs0aBb6s_Izgd$@HxrHhh4kEV%~w+Xdj1&P9!e<^QKlVd%QIe>LB1gYugn9MH5d6 z`xbpyW_r$=SM~+J3wN$UhXJ*=efRWfv%bHN*3ArRy;3sT+B?h{`^t>F3ub8oUQWL>?-u}_iH@t*5x z2No_x(h$Gcg|~XN=Sen|`}^1RuAz{`EnLlY1#5I@;LOBtSA6T5$c_ezR$~WQcv?~s z!WHKavO+-$74d@b2LTH7Rv0))(Lz1!w2ra$wINm(d}atwr;VV?3V+;9Vx0S`QHom$ zh5+m~%?*nQ(ERaAPv9CZdQ4DpLvdF4hvRGd zJeYh6(YcF%0I3L!5KXD~mmqO+EUe50kkNego0+BOC4-vp?0!f0;aqAxq|hW05xhmyx8SJCvh@^xplIn6`?xq4V#9i+$Q%@G9CK_)H>MEJBc_^mYwN*X`;+GLv+0W26}2{hd;;qp{^6f_W|EXq8Fr$|B*DKj z%xW6AWG^_CjGQ_u2SFMNdP+q-{vAU~)qjfvb2D_Uu&FKmKz8Ev9l=b#nj0NT1N}an zx@m{T38CiJ^%$eKV{9782nWqf5;Obd%{~cAa=#8gkNx}tL&N4cg?1#`|KK5>RV9qV zObcJjnS`1e83hYV*X+6Hfq!4)UHv1q2eoZ5ub|=zxEXLoFD_=M9*qNd09-t%ukr2A zZU!1?v~Xl2z^11_^D?J&Yii$v#>%NFwqh|U*l95T>`E4NB4C8b=1&VXP*Ud5x)Z01 ziut5<%{V8SvMr~3u06J{s1N7ubHdQG*<%MM*<8ix6y>IYSQzNvQd0$C6@%LrYJ=&n z`_)^Aw1Hn|mz_OxkUZsstUPlO zbL-&`NMw8^eED(FFzU&4e9H7x8ogss;e0uKlM=H1=cgU%veI!|2j_>9;N(8KMMXpP zv*@7~+=XDsyruQz^}((3pA$Kfc)K=97eA6b5>&-)LbdVYTpE2Gcd3c%t=sv&Oq|Kq z!NOAQ+H1_sO38EEC&zo`b2)Xpx7_;n-3ZQ>j;F)f5iH4aP_})=%AK zJ;O{|{rQ~+&wcjGzCNYqK`r0*@$QQpbu6{4@g#O2#ld8pl4yzaJnuVj7wIPSRysU- zckFA3C3+)1xz{NxM9JpWqRrQRx4y$%*DK1@h95OpLAitKS>r+z-ZnQfHKlhV*r^;+ z7~ae9!+!E%AqkNAKU`18JX<=i@v_(h<~nZ8nNDA0t^!R%juCgwVX%HPR9s2Z_G?~j ztxp%?zW>P@bdgn|w9`cF)!`}jVHRggZh0*pnIKMGm^00Q;nC!%cgF$~1*zN~v__s=!GVvGr`%RjYB}P7$FpIp(7Z3mr#9O7!!!7VG?DV&)$MYAr*U8XBZI6 zS{Qvgl{~|IYS#O+vd^7E;`efEeGSP_d$LO6 zgV8?MuEz*X-`u>fT6GtHJRfnCb;bdivcBXTecT}Bg~>@0^?_KDcNWGxbS_H!Soa?? zs?>`MEuZQ}RkfCwJG{^(XJow>mq^s~)nv)NytcJ7$VsncM0CXf=t?Q#n3(h09FoZ0D>&vlqxKw8{{O`#_He+SFC5906_6Gi_AN;kz9)(Y8XN z1q%Ud*gfK#F+Fh~HlnIX7j0%X96>7!4+Ra)mb-d3ln`7+bM+wM`LahK$Fjnds0>7b zWfvN-b->(z0gcumqCJ?kIv0>Q8ts!F9dByTKU;WKetF^Y@bd@+Q0-~Z484r6mULxC zPB^WWrQO8sBWx#{Pi6_?x#u|fjPKRPL}k{wJDJsWdJSm9XO*w-pdxynH3yv^2KXSp zy%U8FriBM;?yN!Cfs}#*o0FoVmb7p7M#}yNym+>&Umr4kIyv2ve$s(N5pI^XUmYKl0x>*%X1B-_aEt<$6*GOC z&=+Lx@`sI{u%>4dpdO8n1%sJY`v?(ia;4|mjBHMPXAMcLid&@4lHQp#>* zulc2{Woi@So7$og?J>!n@BF~SJ}3T@DwzQW_RKd0E8jv|naU^7F=u3Y+Mhv@cjYHA zZox)30ySXP*i!mDFo{BGqjho7blJ2-q>DYb!RMNa2up1z8=Ce2Uqbe18Oz0|(Suaf zL3}Dr>qX9Z_`z~yK^Ij9Pz;!duF>qI!L@H(E4$PgXv#`X!C^kwASr!_gRZWWVXnGJQzG5@kWFixr@hCB*;uDkD zOr+eoGZ`k|8pV~gRU7BZ-DJMunAUoBZ@WjbmdD9#TPH6V@7%+qF&GI`hBc!kd@|s8 z<5>L18b62vAK1*>`Axg;=Wk_PJN3L5<4GXr43jnd#(Sxe0H zE_58Qj#ez0K3gr42!Ud7In+ziWb$`;+;;Pa>1aF&fXUT2lSwQ7r-s*VO52#oOL?$G zJKYR#mZ<_-?NeZ3zBxfk6M-=k2pg9e6?JCY`fe`VsU6sNd3MWwZXzpM7 z7i~3_Ucb}i239tUK&)bhr)ixkswf*(BOk~DL&mGO6@y`**-Gr- z?K;VOyb5i0=|{T0B**w z%80eS-kex9zn>l?pi)&ifWdlyz;`jh*hQ1~UV7=yrHl6<4Xxe@yorHwW(ENEW^AsL+p)zRj%U_`-htSfy;-2b6F8 z(lJqYGji7^>-i5at)%I*2Hw(%Yq9Q161((`%~*#$k=bF(WK>VW<^02&u7qrJ1t-Kv zq9HtkIBDC=Bz7!LW;t7bbrZ8*Iy`8r4}$(h8HjZ3X1Wgl3qCd;RSu7P6VfD>4YlvDe4w_992X_ir+s;=lapg$#yMWSTW)&qm`a!Pd z7tE={*jf9J;yll!{!&ylF+`%Hg`H*oAzoGTfEUG&g6Z5K&#l|+`I7Ere|Sy zmk#mNeUB-%qx5OMO3=j#2TDZ1)tsl_#2<8wdN$!L-5U7zwCS35Yprhz3*a`%QdOOo zIos%k9R)O~9$senaZq!r(=mVdx}v1`w@MbJ@-V(=!sE{m)|tQzPAQh0R?Zx4kX<6s z1atZO$kM$S2MFRJn1yOQM0}`h)5HWi!s1W2#W|E>5<*d6bp9H4x|G#d`4VF6x1%-C zI7|Ga*@Mod7E}4D-!AU`q;3Pr65f=S%ZtHxqkN4^-&j0+zb^8C93)>ni6Ltz{f2m2 z;7zDI(em^ys@wFf*b7wq)tg~Wr`V4~o8P4+qcv?m6_o~ytdC{B&qpC>sSE^@4re#m||ePN&v0KLy!=+chA z$7gH>Y5ja2#UHuX&*u6$DFQjE`;`l1e#oYSz-gZo1+yD$LA8gfHw%Bv+9?W$&UaT$ zd>xyb2SN4%#e3qe>s=N4zk?aCpA~|ORsDYBX!9FAwQ!Q)N!M-$5>h=jOemZ6tjOQM z4ZU1gF?%~ksgLa0^C1HAcX2XoHraaLYa`R3PcXDffPPKTfCv)%V0W0Ad3WkD&^?)k znj+xYfOgE4Pw=6Clf&2O`)XN~Q4A_Emdmn2k|YU?n_J;%QSTA=?&aErDn4f)I<9K? zJnI&g=Rh66cdOy!qHALB?IJ^R+E7C>sA7npaz49=u^#+>`T;{)3i8u=?UFdOP~5%K zr?xJ&7mu zO~xmUHAv1u1>QnU6;SVh^#D|;Ij#QV$4!7}%n9~=?mhu_6=>$6IAQJYQ(m`QdoY^r zzS2LMiMYp3GdtyaerbL0++-=>fx39s&IXcJYWRWf^p?0szw^B8wvVY*K%&z=Z;=>JpI_RY#OHX1x_?8_q7H6?a56-^BdP&=&;3(u-heH(c+%qMoAu|N4Pc4y{p+X ziTIXEvhr(6h*a@WlKmas8t7hq2jjUUzyRvCb=P-~cX@-kN3HrfF6$0sRy`PS!Khk` z%RuwuB27^pess&R(mdUAIC$oL?3ycIMyi$GCcKwp8%0A&BF7(MDSwe`!Z6ePsV7qFMQf-LgbmIj9 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%0AXYBc8DN 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 lNjO6g-l#GPKJ`9e)@kU=WIM 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 Znb}#m?%t9>{07sdp2~~mKhb;j-vBW5nwJ0o diff --git a/docs/graphs/l3_perf_skx_jc2ic13_nt26.pdf b/docs/graphs/l3_perf_skx_jc2ic13_nt26.pdf index 5d2f075f707b7e4e6184dfa40af3d66cf6d3586c..b1a4774f549b0432cedef75cdf8663a5db2848bc 100644 GIT binary patch delta 34527 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 T)HE(*6LS+oE>%@me>W}wEDe@x delta 32415 zcmY(qRajh2+cXMHfZznzAp{E#u7eCt&=5j`yE}tBWU%1w?iSqL-Q5}7-Q9lPZy)WG z?!MYquXRv;*Il(TqY=`55F(w>SV3%DZ0uZIOsw2d-g3}#A!$4Ex(s>Sgj;>)s~1%l zJ$PW(<;UD!_!jJ%Y=1FT^GOm^)@}JS`!7{RU)Wii_iiglIO;l<+aFbSo(#oPU7qW8 zdLz8v&gP$mJo6*k-!@b>IP(8%7ldx?z1!9_N!ep{R_FfNg6%zjl}F zGvh*^316U8{zMnfF0bo3(C68=o8q_Nxi_!3SBr;}hkoeuOTWq>&v+luUoE|Cxz;GPo~dx7>kpP^?Z1l<`=75iwrUEjn?l04A3O;XN$pRs!8 zLtgd0=`9ah7mhh|A^Y9C?(EOv@>}s*PsD;?5JLMC^0h?DV|T=L(d{*{ft7$`i~96E zS>s+*@cKae!wP`8{l`W1<`G5v)5ez2vpmY^>o~>R#g_Bit;*Z-nc=q3%ADc6da&Ne zB{Z#WXmU=2?#@3DL~!NvH$lFPT&`O?%|3iV2PrquiqqKiz;qt$TKPaE_!Ov9^GC=9 zD%WlD!?bo5M3;imH0X5FCb&4&l4QB|$hIgHhGLr?6xG+EabJJHL9O4lk4!C0t?F`a zwQd{MGa>YQfN36E9wx0qbu(_BS8$yq2`%I8bK>+l&sF ztmAYE!6}9YqT!AIBBh|e8K01_j1;723J-1#BxXwd1ykcuY2EwJXS;)r)TCJi6=h$O z373IooK}!`5!R!fLcV$Tv3j0y{9M`zkq&8m%EZdFbcB8!i4bEn%v-=KE`mpy?Wz@T z)5JtYe{+K+qm}Sk9`b^BJ{oN81a)BI=Ejzlavb9Di18eZnP+x1Mfn5wK#6m zsk^Zh@<`US%Ll#od;bocAo#?j*cg+bMZ*MDv?U9x+;j7-)W#V_v+|H~)NpVfIA<#s-h8 zGBMVgZY_H5krlHmmO3B%ETHX|8n*hPeX(sI5A*L8*=Vg<8K!1v^04%f##0 z%gQf(u==s_Ryo!>KFA8~L%hj7ZGy4lHH}^{n_8*i0ovGD1IRMEZ+Sp$se4iS&fiE# zwmVTa*5tn6&VL64kIl2suEGP}N`9qIAru;XkmBJFn)Z2uA3rn^g8~qJBTeoN+nFgn zs+>yj@{^V*#>T`|Sc5#UDyVYkf2VJxXp*E_J{b3w^hElDNi*g@MW9IeyLL3$=6fGx zT&-5Xxp^2kX);`*XS9GA1%u?KCR5u2a%4l1D?+<;GBrWttXE005Gq9#p+E`2!O;>H?f#aCd&Qvt`#q2BJ01 z11+Y!yAz}G$7XwpMQOXYtKUDT14?c(7>&N(zda!?b?n~4IWKuV^;mh)j0yK`@Y#~O z_4HIv$it9$m~ehgNWB(?Bwgu{0m6Gba`cETPZ38&gG6< z)$td|EVp*)YdRfTQ5h}8mPZzLIT*tE7V=?1A-EF)SPK#==M=U5EV|8~zDm&T11q$i z=x%;}ci^`ng^r_=SXs>g>X)CtNA`9xB3tJ0dWrN3@#-}jJxiic{g=$qC9ev7l4XAg0(mRUCzuK^A-n2s|*e)V>Xjnmwe^vVxu#A0F5%m>+1W?aV*5FUt zGK*W!08;5UD?RA2l0qbB;L``|l18we28Cr{EilK3Ld}VefYlXYjUveQT3!%^lo0O9 zZkrrnVb}pgl|*=+=Vyw52#ahK?w$gvERm$Q;`DC#5+28)1Ml{eeay6Zax%ZNKEJ6vYF7N7yLvJfm?A(BSRH zLrkPZ#BX!eqsOqRY;GV4Ic@9kL_OJzY^ZdLT$7z&UZVoZqkAcSH)-y{Ag;7;Cj5pJ z05ip^(k#&Tl!C>oTqwX!9}a+^>k9jmNt4=lggKUiedL@nkRe}xEsV4z zVZtN~B13K0uib1LMyELe*D-bopj@D3p2oFv2gX6(dLKe+AE1HFm8YhoYl>oh7iudX z`L~IC+lzGkKjkoAK`(xS&vcM@yP;(^_#1@NNE(m^tj|JEVm|WuMRxKw`ZG?awVRtsQ^R69Ei5d9G=GJ!kV2Gso4O|5H z2P_=C)<9%0g$&v9*s4J6(Bid$rXc6py%i6b*^>GY+wfk;zP|wrt~i2afXh0!paSxb zpHUXGTilY8D6K=m?yx@h`_Fv^eBOk0-lCeoH2jF=ds>M3@iQA1OrpS+QV+$B--iEO zQO{YPjl%`j2a=R&Jof8vScuuKCE7x;q1{gj!b-L54{VZ^O%>iKOMsZue{w$MUQ&TGK!e z0!s7N@7_jVz-^d|*{?Kgy5rKVlpArq7K3nI?&2xLaxpKT?gw z%ZF~ih#mQ4Q+E;}5mrQ5)|aa{mk8Yrm1@+k7yDR5L^6hG;wvX*YkY6$-4v2YTm9$<@13Dj0SEgufhNRFHiV=u@4e!s zg#?wVfMjs1Uv2L{97sNrB+JG}>Y^@D-`R>u*#*iRs(EJli9QL`au7CMRfUBMU`Xyag9fD?AsU5^dN!#&g zYnG@9pa>)9bTij*NlJpmtQxJsrP;e-+6W(L3Og^+O-!;Gg4|_uS``HuI2|(s!QC54;QpFYn~!&98`WXjMU;0#OhYF3#&J{%hUgPz7Wkw| zu+n`k^o4Z}kKY?F1g$k$PNE5X>P#mLGqk4lP=zJ<LBu!1=}cinJaafJd_a7yF7ZIr+m(I}5T7fn7Sh5Og?Zew$%@A97TeF;bg?jxf>Y zK^_}YLaEM8L;)mVJ?ZHNn85l}&z)13W`#suP?uDSfVEiQx~1ER?n=?_NdNY_A}pi; zN<&hsFQA*U%B;FL*%Q63*UX*zLv8R+2R8(pL=WyGouydb4(0F>_xs^6Q5gIWcx*{M zy$=^|s_`b&Zv8_Z2jx2-bfv zTnV3aZF$Rm+Sa}))aoJmh?3V!UTXn=E<7d`oQ+w_mL!H=D(dPsBVi9PLGxOLV$Jxw z_y|^7Yzd!;4l?SI?`XQtjJ2q6)EQbLo16THB3yZmXfD>1Y~?5D;37wEgLD!reOf{I zkcZJo71mp=u(=q;AFb0xvXyx}AXn2P0}xS?sT`2|lt@BdC(HK%LUtDf@Kf6_=pe7m zlLqzJqQc0Z2omn2m%w&_w8}>4LAqlgOq75Sz4}&b8`yPcBNPj0Lf%mdRM+zO!X1?& z$shKu+4b1JWTB$hPQezY2T~*@lNtEBl->&&Dqdh%kfw9WISG!DkPHDdSAr;4kSF7v zj{DrJcg1@*7@|n$MS=}HDDAceoa~f~U_8ft)!&yp6ff5FoHu6ulC+@H2S$)8UtT?l zY4}yki28x1)A$hq7e4s4qI8#}l)X$WqwioRgGXc`{+(xQcF-;n4uEq6x8?6Yz#kZM@d5T};C=ozf4+V;-8*VDGh6o|GOrI<~_2Z-&)!oBoPnN5U)_TB}Hy z8{!`+n+BH~68Cvx9>F^&x6+p=`pRvHr=od`Q7(_^9i`~Fxpz<_xSoF+PC~CVzk32$ z*uU%4zW7gCV{8SO=$6+^#Yq#3W023?P9I(WkeA7yc(_kidz(JevJs1yzH4t8Wo^7T z%x>2CgVe2PqXr+JIraD1DOSm>hCxAiknN4e_WQV6tH?&&4(Xt9m%GVqsKi#-HlG`z z5827al4sg&oZAW@Ok5T{Cf-J^* zn<;#-_7b&U@#|^={7opq4h2opLwU)Bmn4!nX@BpU$%->G(GK8OoZb%t17BN1 zOR^K{5~1q9GKQqs*c6O=dS|N#{xGRo&{)-wxqe!M#i!Lm?V>HD733zEisfmzY1)(a zWopR+HR}3g%+Y<1eZK0;b(gO(m9~P%v zr5)#f%*EX2b95P!(N(c@t+w+R2|#6y!(r6Cao%78l=dpTqqyEIiBpBR9S0Pi@mkQ_tRxbk4M@qEl=_t=686s& z*DLFP55oN~qNI-jIf45JrL|i%2@AI$+s5r~NgS?KjQ{Mc#Tcoe{jB6c7vn9&Q5&@` zvE`q)VXH=3f>V{-nT+YioVqkp0O>Ct%tlQHawuoWY4Dv?KA?8XZ&R@s|Bu+ovvjqh z!f;@~31d_W_GT~HfnJIsE5--MIY3=?3Gy{O+my>f{GFG6Fq&(KUe|8FHqPl{7q`GJ z8xGvj2%U{dGEYUAVJB!E6L#MszJ&q{ojYj!#w!GDD2NOe#%7yxTTc&VIcW@ymtXHo zgNFU~Hv5Ncca>7Db(aG;6_F9u%$&xA)$}N2O?A4yv$q;`e|1w3EI$n=gy>q?u|dG5 zs)D{h@S(#h*;<9D+j}{5^*{VH%dHM8&hTjk(W9LXtAR)W2#b%80tUoGJQ$!@hKITM z)5{q)W38XYz|(Tjs3~BW-({2kNd*zZZG3jKEG~?h9DeyNb(kx%#wpM z@^+2cE-AojfGddL9JmL+?4r!pmu-s3N7SJHmV40>eYh2=*QrL#gYkYTn%ain7S;nM);P9IK2Egou!zm#4`L{<pjq_5o?Ip{9VtY?wV!NabpAhDqtO~)2r9j50=<)91PnV5?ho`D%N*HGOi`S| zjI#8-0p3ar>C6K(qIrFiBu=>GiR7QI2AD9R^;Slv#Fl^PDrDV`BxTVJ$S$8kiGao4 z(DvnNwn;){zV4faIRXdLiU&HtNXT{^$zhdJc^Ly?*3lE{;cmdD1E=5nM7b|D3v$Lq zTYYK4d6>sjqio_*P_2)1NRo@Cd;g`+XmAR#=CE zU?{lc#NH}Dw);3r7{%XgzSI-NdI!p2@ond~5=85&gL1_nm%3*9DA(*Z19J4ANQKM- zt0Yf*KCVZfS2}!l&Q7D9!Z&!QlI$$B$7ZwcWDaO&`6?su&=qw09z$xHX2hn0Z+~N& zZ_n$c^C>mk{UZHslGJwOE6*=4LO7=rO564BHMZ_M(NE%xZNe;-NkYbva}a;i?qr|I^^4Vp(GQcV69H);K}n$4g|mH_|;57OWnb93?gCs*%qNBj2k_%Uz2{F zN1F7iG6Qx4x{k3y4V{)u5lADA1|=6@+S&^T01QMIdT8p?RC=bBJtUbn-zPjLI4p9U7D6iiCWUKet8{0@`0=9B)$c zqJ-+oGviWlG8V(f+~f$f4&~_M>#ECSZ3hb&ZYq+zB-BOw;o}(_vlndUy!p$s1?1k8 zsJ*%n+2% z)v9824qcLOd8Ce~-v+-+gp%G6{-U~-{Ke%|)g1A-Y~$c1Ey74S0ayCS;KtsxvZKJZ zbk^~OtvLdlJ*Mq40-AS!r;|dqR<~qb(8O&C@-?AtUAdA@H=oto#5wKE)gD3qQ+;F z^735?)E~AyvfYd4p;rT_fBFFBL!jx&-PR-Zlv;54U0v+DkWUA=C5TZ3RtUKKrk{0R zzx|3ZGt98Ob({I1qMHqDU}^w(Onv4?hEcDxrh|>z-PZG^ezJ3r#sL~Ax9dCbx|ZaS zVN{~DQX~@ldMU~Ws7Wd(wZOVXlHXX8Y2T5T)5h5G7iha81FV1_H6Ni3%kT6`lqI{9 zlCjqJM8Ygm!hAtrO=#lI(mLe)(cGQFU5A!KD?0su@bS>uph+me5&W4I1Kk21iMS}d z66!A~Ty^bfvn;@NA@f+CLw(E;j;D?N@8x_yY@1n~QV%D1yr3z$)$dSYLI>e^t~E%P zhe0Oq*IXAMIDk1Zl7fa68Xc{aL(5$~4V?WOc21L3AFK2;A7h!sf(C)YD(xV30mw7} z<4z8v=sy?Rl#R=%Zr5gxGM4TCo;tR;Tc;~(Wn&m%TijMTBMJY= zTDngpsL+r~p(9oOCsX@8pMp0+nB^cHZZB@?@dkdL!bg9`dWkNE4Cf)M_}`#0*YD?edCkfJqpF}mn-W(Pwj6j7MLA8 zN;1`Wx`O^j#FOfEn5tIg>1&OrZ^U#dnz zf8p3){`zDA#_gYw{WV5y5iE>c+*sU=@8|}O_2J0k&B3h6raKS<^7(=pzOHBzDzi#) z`H`qyu~jzgC5mA|4wS%>6g+caD$6#q28r4W45ihpLtDqk$Qtt0l6is0ogw572uT50Oo{^3lS4OITo)5}u6|@(SK-G{54))$7UlntfS^r6v7^SC zUlfMV-1gVTnI-)Ic@T=bl=kiR{#`NYvQ%NOW^mDd(n@a`BllgaMlWK%UlaGk`qsydfzOo_D zE63Yl?#h!}$he=geW~pm#QXC&q5j8ID*u44#H#n9sjkW}vM6lU-r>?zv9X?=!YR6U zUd-azY-GjfO2fy=RP_i8sBaB;PKNL;DV>(Wh?F!cC}P6x2?+o5!Kdef7N7VzY2Y%5 z%C9=)B^t5||4Yr(Xbh@+C=$jco=rI`Wh9u2E0+eUlm0B88{`c(d#u!;%`fO_3PMaA zL9TdS8gfx(_$)~!N3|lg)EYOL-}E=<>n!#@wVcmk5HAO za@4;2%OCF>@t!HQ2r8)ejjtt7E9xPkYI$u*87Hi*<9ILmGy+3C>D~rm~HB&a#E z8sE>PnLT9{5^AL8Ek*0^1dE+=oVu2BH*J6+!tqB(vZv=fLPX*n4;rAVZr7lsmP8h; zE8nqiR_6Ze7&{kGlDaG#VVz9yCo5K)qKvQOF1>Jg;glI)66XS=g0*V z(r>(pT7UNuewCN0;UIC@#@#`-$jZ7oQm^|u-hlb1{n|Dg%&eVm{=8+I?U7KEjQ(&& zH*{5n^~Et4cV{pSK`B;fS-7p5jOJ*4|Mu?l_=nI5(WYn#DF47#2{&I00#8hj zR_cgvAYEar@uN|ghyO&ripEUmOyz5HNqo-+yOPUFIkAp=_PT5pHtvE)LZGtVsXX|h zWFy03#-|KWri?Ey*hZLDy@WjD-0rAkB7)x@J4uVR@@~0PtxM8UC)Zp9ufgg(`@F_n zY3`{e4pbHh{x?biSE|5u;gCa(rVWq5Yf#A+Lr|ME$&JkDsh{h{2YV%<28^BN+_?Uo zD(ulL@OcgX7jf>-Yt)41#y);oNkkt5 z4Tu8i1V`FVL)sB{rb*_(eybXG9<2?=Jm9JnPU_oMH_>at!U`;r#9vn z*HUV!=kE(R^pmf{rLjWA_@+r)9PHotII7-;OF8F*8(dj?Wv(H>cFgZTL^j%>&r9c# z@+!yef$)S*#G#Yed2JyqY%dO1lh7Fdx8Jo4(3h08*U`1t6`hwCp_hw0$&8Yt!H6;V zE1&ahe`ZO$z+I~;Do+oEsWD^H7kTLYi~D3onIFH=*FzG#?t0Wy#4m0pE(%Ihoys;W z-@}7R!DgMVDxIyYB>^;rMLpya8l3_hDp7swf!ulw4TQ;1O3H2aaMV*qH0Uqt`Dmg` zO~gBNtMG6Ekr<{X)YGJqU%kh4lk}E|ci#oG^e~H51>YwyCRNeK@|PMy7#aWtf=P3` z2F0sC>M5Eu<(X1;i|Y6I4!8v3OM8^9$Cb7#WS5<1mpP6${6cGSe@7Lsg{$d@dBx6Z z9v;^3{r3sc*}m?NyYUR%59rS2u_Gd^I`(!T^fxbRgUNn%@j$E~2O^9^z@fWErJulN z4^(}adzsF(j;SlL<-j+$wDqe);5SEVz1ASU%^n&G-_=m=K5B!#E;>88KDiAdY|;5R zr_EzQ3;u3oCMj+(^IAZoLm;G1U^qBhuFk7Dv@ycn$`amL5G}F47CNl;-WtXcqn?jo zST8%faT(2_-x!<3hip^g{bSe|gGj6luz%3#N~=yvbeH+P(TH=}f{~SSmmBv_6XlNa zn}R+Q396}V!!S*-Z5g5+7mQ<=rthcYCruRRInnY3VOI&JGl(6<4(zx?3&r^ld$qqi zgL?kTw&0L{>V8cI^uV3=?o&H4TkDZWGtQ}p1c4Fa)cZ4@u{xGi_ZH%8_T1gBzvT~5 z&!2I*hIwAQq_O=*;S-0@>BguwMeHLjh?go`DBH&ZEW>kD9^AW+y5Q$+gsN;tFKKva zj?VcSn19*k_2$q1B-gxJ9Gds&aMXj)uaD1s7D1bDv4y*Y@)&d(@;B^OUs?i?=YJLc zbIL4UC?_+t|CqM|O7*q;GfjqxwwSmnU%FJI%@N6TlS{-S8&3DG9`h+ z9($fLG{x6)t~GeU#83!pARQO^@xRC2PwrD#wLo1ar>EtX~22d4WO};y!;Dn6eWO7POt{4I9xv79FnYZjb zN61|0Jvz?};h}m>`u9k19|CQ}oWp)6W@FpIgqvcD!d%u(<{dt*!ne;6b0c3rvZ^xd zb|mXqqIX)}z#Vm7d)^7&>I&>TbSy=F;pMHMosTBwfHERkV$FFVl}vS?bT-**=>2kt zaj5_*`dJf?`QF$_cKdSCal>p5I+JthX}t5-9CYQ{P#NN~D^h?ZlZ5+tjTSEqSaZIT zhw*fXl}VrO8ckMnamY=#dX(K>Z5;SbaZC1z3)m9?CyWn_-XD`&r@ftw!?wG~m448t zWMik7LXSo}x#f)-;k(fmC(Nm?(wK?6Q5Iujf3@vk(HVjUKHYr!T^c#M9dHs(btTF@ zI2YR{ZY5*sOU%JlUqx8+Fe3Hy#{~1p;B#K;sMJz&UxFR?T)(DKO6sWUi=?2l9XF)k zn091vaRhhrl<^i=bAd&vv|F1aU|#LrncIOj31xEN;Qy$6Axeh4f>#cwXpq(P4WhTD z->!)G4H9o?;L=;NBMb@D^j57d(+hwFJ>;Z^tw)ls)!3DbL0VKCQwji$#5~Cvn0(vD zj{9*$ufnH2C9hZ`eA_=tnpL;B-n}Qk5*kVrKVUY*%xr|{1TT)*>G|OXz^+%_#6==t z(2-Qz5EWp0|)|HWCYKpOG$7IqPfVl3^<0f$iv; zeg;XZ2uAW7NvnI%127vG3907zw~g72HYeQ1DV?*Si(&4-Mz!vxfyI&*E#-H4icM-b zK3Op+$6R_x$2^d5yqYkmvs@k8JH!iR@joP9COwHQdREEPD8;mVI&f6R#2Nm94*CC# z7yrA8=7U5)+qIV)%1X=e3pyNY_6W@|TqejK*z94{Z)D#W+~F)H&Fw%%wZ^vsvdPF<8jwsC}*P z9gnM3*-~k9GdSLHMTxW}`e{Ta-Y_nxDoiH8u{ zJKOh3Cq!v$O0|S`$ZjuHR}DqC$0n&Dy1k+$G$o|obSP#Og@%&*0opJb{l(V%Le{Q) zQ`!0HqT5S0TDL>B;c5QWFucdnfTpTjGSw2>BC3L7^KnVfYa?BUZzq2f+!DbmGuq#o z9}XTJYBX@-9h0QA6x{zzC(>#vxKDX_vVSiFemmJ|-Sb$;zD@n-gf%u>Q!rU5q>QgJ zoqjbN0X4tfo>6bXST0KzkYn~-&Bs+4O+Ujo4*6}L&R{Zrr`|L9yL3*mI)OznA6;cE zJ=w*;s?RRIx}dhufiWdnQH$4|O;~S>MY}()dK^6j4K#a-x^$J&x*E8Sx@1z?VVAV4 zCE~tu$EVfv_aTy$pF?!hz4CR98pd4_{!=zS1=;~W$0Eb$ziV z-VsnWNDI}P_vSiai?N^f<_c#IYjM_LR5iF7pxyYf+L`^5RJPJ9xU$4tKiL&|=MPzEe+|(O)X`T0KDlN5qWC`x|cP z4Dl`v`7UhM@m<|q2Gnecjsh+Xv~P-M(B0qq0Tz0tr;FE_ zqaPpl%C0k+HvS?_FqvYpmDTM~?uev};FX8t^@lHY4X(720c(i`)gUo-k|&>FxjZw# zX#R6PRbZ`T)KYG%bYi`vRsKXAdn8&C`Gs<+^g<4Ii0bWfEMuWSGzNitl*`pR6hp7n z&HuBbR7xQlkOUsXxT9hIA92@s|; ztAF+CWj5m&?%2xMqp{-KzuBvU+DF&%EXS48SkdRPcH22#M05WevJfMS=6+)2h{uv{ z{s902oAVgzn{xfSs=X_EYs5fM}wSt-wwy^yO|A*qF_Etw{t+ zF30%D|k*2Zx=AR z6$wy@x1sjMU`bcwNWZlVcJ7q=N4mCdF@r%mviET<2a?-q5A{2nw00_g{&Jo2KREvX zqj5VM%NIYB$)DOeYwupTN$a+_`hC#+5W}@b7J?$uwaU<;&{(@j73g@G;_b@f;O3vD z4kFXnjLVqS-O8%O6ul1veMRrBo4e$^2aK}bD6_7#1iWz*3jKY zMIHK*>XpN*bdG)Y-`cI{)nQAwLw=$h2H2$%4Y|rC0)%eA3wq_anj}j9D*=DiCq7O% zvo4;?BweDDz4(4&SSo*mzjUx`@YT!_JgZ`w%J{wFAG)H&95riJ%FTUUvHDH31AREI1bAPg^ z&q~!E4i_RYmS+`8=ZQ5-%@@ghTPD{`h`My(M*FHQZ{!lQ21!vVEBYm za8{+z6aP3ZZ~jjA1RiXP#XI%SL?=aQ)ty^DVh-4WdLi$i8!-l)AmVjTa)G*$y&r!P zl;MJ0Qc{T=7)7JCtyhrkX{D?HvIZ#2&yoGyGl72R(qiw^Ou^64w3w@|MLbV)BOP|D ztAopwgQDi%=v%?heyVR()qo=x{?&^2s$IgC$u2h6szf~XL4&(B|PXv~> zsaRlS-sG;t$E}udWsZ#ZL0KizqKw1fIWNJs!mVls!bUYIM20(R^?hD4%_|%RDCtYZ4u&O)d9 zeRsd|ZU;#~g4(Zg7e?d-5ALLR<5gD+X5%<{z%`NTsx*vHx08^g0F!foqZKA z+1KJSdpm#r#b_g$iuJkL_vlNK)>)FB&8Rj(D|8QY5gj64JwL=VU<^8OC#d3W>I%(A zOJy{?YE5QY!wFchglxuZH5kFCSnJKG)YKzdZunkJOQS77ancqc6jaCy$J;%}Wz!qj zDVv`{fI7|@-z){U!Znv+RNQxqRO_xi>1p)q%qew}midEFvY-!DbiUo~7>jFktK2i; zSf846xJ!>VF8^I*jy_6{UtDC8YyE7Mw4z1+Gd1i!6Fz3vmBamrzeiqh{8IzxJvXuS zlmGAd`3H4tC_DER0xUMd*GetqL6cc~=to^$akmvtCE_%}6;Ga}9KbCrIH9T;&3i4^ z@^iR3jcY>Hg|lTn-2$x<2f;(5c53WO{tg*PI)zv82&3c26vR*;ecd|RiT>_gMLn5g z;%Guy5^v^DbwgRA1|>$=r|Gkpngk7L0U_EGkn1RD3psvECI(96KS}05J0EVEAA-|? z2XYe<03NU5h*7j95AM@MEf&*xvvOw^Q^{rnkO=9#dxIJoi>a8yafJK;tz|XyuBUKI zg;vTabrs6;U|ASpotem>yii)jXz96)dP)Vxis5QaEpFX`rt~M-R-%@QQBLj~OkII^}rUKH7?L zp)>76y-~$8oKfuL#9UrwtyA~r&vZdDfaT;+&dIqu*8YyzKmLsVa(=aXI=EqOpgd}^ ze#h|kMoJ69x{N=VZ%D-alSxTqx>rW8VL?z=TcN2=qdy@>?kQ0BA1A(8XNv62;}gpT zbD@Q=IOwVWhsp-l{`Z*V7;XKlQtx5%n!)-AB#E*0LJ+Zl$-lbSxj%87tu1j?Q61cW z&qRPJG&v`I*TANevr(tKy17wjy!vI+gQJ|)R(0>=3&7|0`QLVoB0liH)AqLuXshtM z!VZau6CNV@=ZP%!%cu4v`mm8)Mw0D@OR9ba518Rds1y=WDX7rjlmC={2bpDb~eWc$% z#CVcjn>ojbN}$ZRz!f$x>JADHcqd8MOT-PEKq#cDZgbFwqCQEu%0w^?YVt~Ol)(>V zx6Ox)eh~JHEXyoP^2PYuecHvWCOh;lG2@kSoL&qqu&bSJapO)j3TUfY8l%j~ctHdD zVkr`L=(Dq=6HaH?Vv@3fRNk?~Jy6-aOf_FF99G1UUY-&4k}$6%zdj@7q^Vm^dm7Sc zP~Pz%Qz|RLHKs{gsVXT{q=GhUvFT>aC@FV26Lg^d!8CibTKPd%{m?_Tyu)>Kj?>RIE#wV%X~(uCADwkkjA zh6vE#T;Ce!kM*~{GW~)8P9Ld%fW7z^X0(6}Aq)1*P-HAvD8C1E>dtjN-ZIy@N&^d) zBtod4bd{Oba7!qn%ck**Ur-x}S#8EtCSOJwu;^jT-PCO$=>w?gMOOs=EW3Fuh!E_6a=48XDiS^u32w-J6#<8BKu+vy#!yuYH7?>(GG zDqbZF09YCqa1zD=Eb}uxrarlK7&nkYo@t_8JAjkFz5t;WNsdt#IdsbaZf=i6P{Apj zJNxYh?KW8VD)pz!oTI&qoOPEiKcY*E@oulflfG-q>1bb+OG{sMKWBI;_ zAK;D${4k)-=o7SNl1B{h#sh3>N4A@1%V?)sygphpj=RS+<#*UVxT4dZmt7K$z5a0Q zDxK2X($%{E9=S@pROz`Xq@?s-PX{fDb!{_GP6aK6(pW`&*$}rnt)%Ok3t5VM?2aK` z%W;Z1Tp%<$R7jzrq5*4V4P`kcEcqX)-(;@z_&{w|o`E%!nyx;6gr+g7?y+=OOWXSC zfeI1t6|kKGYdMtULpF;w3f77#%kOEmHHV4Op%{72s(@1ow}09Qz5%DZMC<`8Oevw) zz$T;Zi1qz%R;Kkg;bJgDtG-0oKQ^#KHC+VUPF6~zQmE#!k(I>A>X45Zq-uf(|LEQw zx?R@$xWT(EG2It7M+KT?(~M$ZDGE3pN}eA7wvm}4sIlwgJRv97rOArfl$D?SVF1|7 zC41-?!n2=WJ|FX+z1nVeQsLQr0oqM|_ss0~eV*4wnVAcU7WJIdVPK1aN(qSS4*fhX zUjOGViuywXQvJ&g>RVoY@_i!~0dfxtmkXDhS9n=0kz_KUl>DcvlYoExgxen*s z6P(Y8^!gviJfgQdGj{Nj4i1OO_?a($IpY>0)>(!QDF44kyy3XY%Td~HLb6&(&(`7+S2FwIzd^seOyBj~74Mdw6D#zK}KCsh7`rajt zi<=maoe&sACxY`X4qNw`Kw>@t`9jKBet#nB7E(d6wewg+U7s0!UlJO|LCkbv!||+M zJj}}NXNvS?9F?h4U9?3w0cx}wo!7RRRsAASj3QEEXZ%5e5a#&#yh2KXTp&9}8J3dL z)y+)rh!ygeI*x*7d$h?T>on!Two4>Ym8ZEdZ-m{`IklDWhC3hfrN___WV%m3Xk z{(Rha7Tbh8`TktzUDa+5pTRCT@O8VqEbkR#`|sznM@s_LQFDX^o$Lsi0nc*L2P{Vc zZGN@;X}TD!;$G5bgcIPm-?LKR+$~fxe_wA^41X;dcd;^LudB*5-|g#W=5;cpx+>oI zQQ5C5XrQ(~c=+gI`W=cUun04AnfqsZB(ckL+!(x~PRRG$b#;>3#dH)+E_m*4$0j&H z%Up9`qAx|h=UeCu?93CE>?qqOW}&;@O=nFERL2E$11Rd0hWy9eDSq1~I(wpnYb22J z!A(9%=L00fJW5!3!D%G9Q-4nln!LyPw=u9N*VdjAPdg8OSV98>=EgcI#tW9P%k(Ww zb)i$_B7XxENy|K8p$Bq6Cwk|sCsnfga+f%xurJLB>rUDC*Leif_U1%#kx=cWR z{Y+fDC!iWi@G2v^m*vfed*aghQUCLiFf(RFo8pz#P?o=CCDXd z02FA_HC#|t9^ewbZF{uH`iDop5MxWa3rvg;3Jv&qLG8HuxeWlAPUCX*b&N~-30UDRGW^Jr{PiY^Vd|iPshbu19k!k)e z#@v7hDaqpHGhJU-dbPL_L_NK9V%qc}b zqiU6dbV00&6Gel&rXYR=9h0xdOSaknPHEx0yrK^t!xC%C)26Fj(+ z+vmJ--y3gycZ}OV_O4#F)~c#MyLQ#AId>luO848lleM z36io2A<325vTHs!Zept3RHv2paKQJdr-Muu+ia+5RAbfu z)(TK={l^^IgeoJjJNNExM#u18uAW^|Xp6KL2>v)*^yzhrXMm#;3StDv3MDdh(wL}* zJ|=;Ev)S4NK)1n|)ydKT@4vT^jXP6Waq5`&h97^>V*t4&4aJuOa@rz7U=}T!B1`%p z%C^qZEf)iCr@CS(k)@8cCMEzBlHsuMD6}MjiKf;TLX$`zMqm4ksUHmSQWuuUwRMZ- zta|sEWPUb;?S?}`<7UFXST^>r;=igH5`?Q}{Yc6c(Cd)^Jv6=Q3@%P!Li*y7XPcGi z@bA8nW-X^<5yW-afilGAMkU#pe;sqt@2PCp^RH|EFK7zq9Js*WB0pr$Pmc zF69aZ31JjNgU-Ja9}C#RMe}fOXZwlVOzekWUf|4sqmS9FTpOhlc9B`lY3bIVNRSbg z$AH`Npi!P!~v1@qdOb^C7;){Ej$3G9a4{BZ$3CbMRfrc zMw{YmY}h5QwwVkgA6PsamXT+pc_#qkAU%P6iAJlW_*)d2_!GpRn<;1rOMkA{@jq_Jz0(u9`Eb{+dI&MYWMLMWJ?c+gByyUy5hgOX~QzW^F@#0xMz`r*TFg6`aN( zm*j6j5ju}*ra4shBx^mK5>T`&?tM$gheejrtMx_a`gd#{6h^N;Ece}FeT($TNHv;rowhFN zZNsRZ!6^E&0gQZzYE~-VTeW;OjP(fw;Q`*Z_)l4@#QKb*y=k9pd^WG(nou!2%qJRA zY$d(&PkrjOsJ3QY!y1u`P|}zK>6mwL`y{YgoKXQ{eI6t6PfYut{T=xBE5ZUs?t@tJ6M}$mp0Fb=Xj5AY5Jk&e)GSpIXUP7xg9l_K@TID%KBw-F^#|8B<#TQKBqU z&{b5;m-nNfEGtPz{*Cqj!4E|Z_$II6SB7|spj&Y>{ZY)02XAlG6$5M5$|@yZggsxx zP9RJYf!CU_K1>D}i04;}t0OS$sL8_wi7McM2i>iV%c3CWHg|2C9O2-WT z#=mFLTcm&j%vcyU&!j&huCQ|@O~_(`@^?>RvFs`bPg8~KxP(oBlf-gJ!p^OKA^ycSE7NH^{5a5R52wj*(B6r$!tRrSa zFXGVMbWGS^49q4+S%p1CAinWeo1<`cn}pGDf9gVnF|X~!Xhl9P2DQqa>~?`55Dyf` zTfFS*x^DvTxW~><16Zr<@t&+Omfcd3O-IH1NFd3(5A2R^<=l+CkTpveaFtRPEXwo* zHb&C(wPW24wuZ0%W|nVM;YKqaOMF%soA7^RB)Qc(uGVEZ=o=O__ba3* zIiWu2S*t^a!rAe7?$RCw6XCU8P3^y4gR;pJAZZ@t-l8J2--d(T(an%IO zojNV-k?3=%*ujldm`-XnLohmrx+5H>MQGIodlN)}L`8Psbj0k895lD8PNmSLFMJ-u z>tF}lNoA_$Zp7K7 z3yOk6Dr5Rg133>|rK1DGeIxbk&v@60TVCSO#G{x(d({v|c zvb^k|J*jfbmCU1AKas~e3}r}3%b#{w(+Yn3!klJxrA=zyvT{`f(7rq=wBQC$_f8Mp8J^WY&YcNZN7Ydx zyaxDMS!f6QUQuQwG6(RN^bph0$X>-h1jXR=eLS-(Puf5&j)fhSz=KjqRA>7%I&9%h zq0n%o{eVg|&wsZ-vDAyV)Ga@FP+pGyq+u0hH|eZ3C&Z5HsnO8Y z%3SfOdhR3PNnBN>un&1=?*eGJrS7Qv0%_^v<Owgv#;V{B$c1qeNL@-)i)w`i8P1&9_zF6GBm=#9WEQER^iI$T*jr z8}tc%#R7^ep1feGO+J@wg9Mb@VWn`WhfYVRxe}e%z)wdbUu+4QfY0ACa*X++>Mxf3 z2B|i@_XX=MI%2#dCI;Qd^K6=cH!9O@S_YqKGEfq`k;tIeQqX930fHptfOmpt|+E}g7I^^-&KPUqJn|qWW3MitTDkr&tk6N z)X@?d;Feb+?y86#`W(_|3~Ba`D)zF&l@gP8o%F?KXID48bdXJV7}U zOcLm1G^ent#r-UgF-GU2^GR_4X+UFpUyvFB3fo+gUrnz5C=ebfzp5qZ^hh)+vkejT z1;K=q%BhvNA)%kILX2jxA^{yshYge1k>GdlxwS1KZub}*8R^LJ(m4<^(_kdA*YOL= z+w+peQAuu+P0kry*!xj%&Lp!a`U&%4m!o*Fu>6t_C2rHK+@v#1X7i^yqv;oMpYPz* znAyvgldP_>g2nVP{dqc8XCC{HXUANGAW^_~@HZ3|M-9mf1OW=9V;HxE_jiD+=~vf1 z6nD3&DQkny#~eIZ#wM=YhdG~Z99TtLijz-ktt#S+I!ODTfIi$3*}}U(|KEL@zR$z8 zQvYGa{08T%A)GH5bDHAm>pdKL*agis`sG*ilSeT4!Ij)b+U9NsE`uSknVO;j~@!vV)M7v1<{dMcwh8pUNl%Mw4s0biF|R|p%gq= zPD0w-_{x7^L3Bg3l~wfrUl~noW^ud4$)GB$cb_th5Aj`+9_#{qLfu&KZ%2YoCPaB9 z4M+rK#cT22^Xbz_V?(f1Sr zuk^1*CiKUt$Y5twj@IbX)(vyfQ8f74P={?WP}>gAf)&Lf z=^pY@SK_lu2s?MTIY)7H8?iEI7$)^wwR*!S4s-ZO*)$a3k?BgX45uc48D$aaL=?zQ zoMC?^A2hW7R2&0m+FDVv%h70I?UsBg=8-s-_K04^=qaz|pdF_Z7~q*9fE*+M`q4hh zx5LT8sK%IN#iw1MvBMq;Z)1Eym>gKlAO+FU=kzTc9kC58FVnXkMG(-zwfeo$X)s~0HF>cW7$>dNJ{>c@hgRK0gUl1Y3{Qvf$KH*w@c~1mu73LnYsLSoCpZvQ!~uON z!@BsLYdG+>{vbZAB+sp8>@GQ9113;2wjf=7jWR6aFjCLY@a`0Ag&Qf=OO{qqaFNk$ z%#vWk6bzaWt~J42>xN=b99V@ii>#&|k_(11?^84lwHE9}C#h9Aa3hFf*4;MNs%Tz(zm7>ciX(aV z_cbC7(I7HI<}wZ<#JCmmpC=v^-}``3Vld4WG*G`6OzAKtanF_B8OHwOchb`M7Sw|D zk0M2F&C-K+ib{W^<;_1=m=aSpZ9*gMC!a__9jlR)2w_ubE&$~T2bLkj_zSR515qL0h7<;gUmDnEemb+<$uXkj{V|nM#9x&A@EDH8x zv#l%EIz~g^2;FG2L_}Lv?g$4)!b69@i zlaUOGgr&4PhzK@R$M`2mDT}qOYYeGWS2NXJ1nF$p0*5&G>%31Sm|$YC5bMJBFK&|s z37cDFz1^gl_WkeG{SCI!ikKOkICeR2f^JLO6p6Xvkpm}J<^RCeH|PI_twI0At%d)C zTR)7dd(GSaZ`}GRcilRBHNFx3^;d46u-5XES!_mN(0QG5FN;B3<)&b#jC1>#@PAJl zc||F#G5tB^vHz+GLS2_5ZP1Kxx&yL&o*z@Cf!s9tFx6MWWI?Fga)5@JQ?fv@k%AK= zo(;%Du9Vmoh$#xhrpUE#znbK<$9HLKzfW)*85kDNuVD^}p<>GIml1opljtBi-(|7B zk`D7Mqj>@BIoMeoa^;rv3=TuI{^-%^-Gbj_m(Z)OTsjQ z=0~~bXx3Nl>6d%PhiKN(YmzdA!_!SDy>f7mV>wq5ek3U^$g+oewPhYsqCnp ziKL?~>|N>3$1L_4U1#K3@f|d4g`a&OWImN@boc;sV=_GG6FaQYtVi(8`Rj4TAVP#h!Q z>)Q5tZdwTlU6&Qtk~`P4egHM0`?|epa+XzL;Xql%^}8vea~o9BaMXYP2j79=8LSE0 z>#|P(7@1q>&C}@arY;nr>IP9Q6BIG1RG5G3Bzp53&w7y z)RoB>N(!HAII7;vQ#A2OVv7h-*07I78b=z55<(yJePw0gOQ*WeVWod4YvD^5M$u$Q zFmP+0cEh8@OBpPP6W#WHlaK zWvl;4>m^=8HaxEz>W6hQKI-9j)r-~2e3+_!V!Sly<{M@Wc0@hScjpyP&5Rd9K*Nl-YAjzV^!Y86y%H7a`mg%)lOZF z!(BnHe&yYW!dk4U?!~Y>RBkQ18FI+rCcid>EaF$zimu|eXSY)17${SDc@y6PJ`pZ4 z6)$$w-kl}`v1h9b)IZwQEHHcQh!F}m)4Q^I@Sq!w>rfvjwhZaY<+JN)aCp?m*#6+p zwOJ(Wr0~3 z4Hp3rc=+P5Sexl)CV*aB(3oPf9KE(X>0G-$>DcE8>iC|3m3&CXm5;U1yu^$>gblV|DY_qfDq4oDdQ}RM=k!G;5+~ zNonx(kfi_Zv*Ydyvg&iq|GIXKpxRbfSDsPVX|OTuVk=)@IhycQ)MOD`Qt2 zpmJgaBKRfUPD1TbJLQ2)+d#f+>E%WFtUBTy0$`APXsQ3mxf}hQn|jB~f*f-z%thXik=f*7JGnw5 zGuw6J@>m0+c4{?j_#_dWX2%=r9ub=TwY15bd1KhVZFYW?wGE$F$R=hxVRc&tN23o{ zz4R<6>v5%Cg zw|f#E=SAQmlGCiOsNP}QC(u^V<{n#cN#&JF2sM6UnR6J+PUshmQPZ%8d#a-%aEn{1 zDxjM~%r|>zWo5uXC@qZ9E&eB8vNFCiEp)ZXALlb~k7fx@l6|taHSW!bbdq(c zTE^&zs82rZJ|jJ%IfxdtCy4abLjJ3j70P?US4;XlVAPl4qB%)pk0rbG&G6F3mbK9*ml4{`uNAxBh$epKhAdvP>s{{;11mv~k|!9_>I$ zu8QK|u$?6V^njjq9%CF)(J&Qum3V5Qv z+u58d*a6Qva+X<~#!d$Q5!IkuEM=0pDU1@wRN z9QD6N*L&Ce-c31jPW+%Pl)K)2d+lF~XuZHGHZAj!$MX;7;o*D2S+D2MkE4r}wXgkn zhdez3XK0{Evgs>RcFVpcN7;#^_@$U$8Zisb5*Ew+0hB|M{x5|tkY-9*jsyjL;v#Zc zm3}s@eFqk%=_Db0+@hKO@7Mmadi=c}2f9UR)X8D|GYBft*WFKL5>jIEMznq1@zlo@ zhYYT)zg#v%2@m(aI1;npoFy22No6G;MQra+XK(-&9usm(awzqG!kGPjtQEhjV@}ix~PE=d9r()$1y~YwgGzySUqHi>H2VmuG z6wHcFDi~<(;FgbW2N`wy?zg$t_!Om$hYf8F^NJ$C46*!4VK z!!@}yEO9~Gfr3d2>t3o87!h>P6fy5$-^9oYwjIr{-)Jbgoo6lJWVCX4PFNkNPe!NX@nHFtBgjqgg^twTUvF z*oZ?OzAe_Os%&kS$L%`joLL^>sx5!NvM44_#~lU{;kI-0W_%HWTco8fUNIEzWPiRl zr&)4g{V?>wR8jJK$AovDD4+;5BR_hgmZLZtAV}qt^RW80-9VAwCr8RbWqVaAX8>z} z)Yzj7Zpgn2%@|oA*xdE8tAdde%GD2Dv03V$+jW3NCp3D4HtgrKL?>2JuMXn~4npBN zj2I&{A9=rYu+PXzDrw<8`G}1|zQ<+TBHA=Tb<5CIB`#Q4`7ZJj*Obu7 zbVA{(k?TF7P5!~6!WG74H*;q%I>-17$SeASs_af9$GVGbcNd4!C5M?|q0V0=%NU7d z96it%nuq`N8{{N6vE+tBY1-apyX zHTW^SA7Kz`+W^S$m)gU*X-=4+;@@r|a84R|i(AM9DH@b3jPIpv@oPfDQqi}>)%U2b z#2zttOM&76e^v&+%h~qled~#<2|t{$dpC@$={VRYdCUO`Z%w&8Xq=|!c~yxidXa0I zs6N~n`B(fCu)Fm+_va$$1L74+zNOWl`yfcKu=HepM&mv#@h_;{bFUf%x?1UcSm}JK z==}Ff;`Q}U(i)#cAldv!bwrI^6Ep-&3Y<3`e-&K%MqfK6+H^-p=l+&B9Sx4kL-q*) zJ$|Z0RjQ#4$UiE!l;SMf`tLcXq#ZENrRIcXJ*<4J?7gweqG){j8#^Sn+@GBmV0{%e?0KF zwD+=Xv(JEGLrNyi#cI0e?ttw_wned_2D z(HVrRDt6XTc*NH*AQijpOO`1i9$IY=Kg)b~%DwM?KYvVE?i{THRc()1zpeKWtJi8< zB5WC4Cj3U=gt3eF=wQ^Z1+S~5t>;9vo|9iIsYJ*ncp9~6Ha)1&d^;_C2#paC`Jlrg z4wYU%LBeA+$ZiU4dtl>J`xPg>o}DVmcpjN3Ii+=(`hD$PyaA09iS)eWTwGPW7g5uS zci+sC^m;qbc4Zhyt7(AXQamR^dVO?b+G^B(7ZUIFOX+KYR*{g-AoyG=WP;h|<^0!A z0TDg*R+Haz7pcFu-d8u|LVgPPWgNUW^l{J`0E=a$SEp!A6I@!UIPUz>9t2PL5_`Qk zCGC8rl=~a8XlzK~^kUI59$T?9=Ez9NQdPTineO|wMyJSe4UEM8BS*MqYOjc#nl@;!Q95woc;XP<2B~3a$@8cf7 zM&Cg58S}k!yjTzp1J-*qw{VC4%0)Uy8b6%MbVuVCNpcIsT|J6o_KN&qhmy3Q2u}Ax zkzOmegg)$J5Y}QLFS6T>mi6#kDDv(q*~DA^pcA*01fe%zitnZF461HHV%(u)egWh* zJbrH|_&((|<&Aweuhq3?Im;VkZPTn>-=}B@r$0ZzF$lr)$QujXCp>QSL|8sS`h4t@ zpZV@Ifw70Ydl1D6J5o5yvX5J6lrlX?&`Hrbon1((4y5`$V89`Z6d*rj%HKLfo}y8o z4fh}&7KHdTa)8YcTOg({Kf)B!K!?~AW{RQl_A=%X>PS-Q0QW#p0qIyf4})#{EuAMt=9hR zZqH;2+vEg~_NT$9ydQyPy2}+RR zDC%<20q=&HIMQkVYU8$IB9;`mDD|B&tId^Ip^%UqprCKNogk}d4A!``ed*wm$bUey z7CxY`>|docxNJ$8$iHsxzCTUUUNrVml1>RA1s2CV#pTY*Q+nhSUED_k=Ifll?7RaK z*7evLJk6mmpU}@PE9`px;Mee#Cj{N{!rNmQ=KSlia66i^F`x1Cq+0%WrflbFQ{WbN(|g zl?@Lj=cb&Bwd;VjKw%H+=BhlcB zmL(wgy!%C{`z}JhRYx(j?ruIF^N6$s89v3>{w3dnD{X|Ik#FTnX)=}p0eut~>;=VhCG!g^ieX@(vZ5b<=xg9~%d zxjEZ$htvHK0}qcX?%k+z>_@IBW9!);$0enY?;kXxepVE0!mZl8ew6``Qr}#P;c=j* z>zBEwRr|6#l2SyY*&@~wWn3)ZfNA};imy${j5-S06ES@2bL!`8mD(#}M009^Tjs3!%F>JyB~m)l*_DQ*O)iUbszmCF z(WN5|%cMv2L3usl2}f$54d2&OrYRrTmDaQ7uYOgk%3o)oz{PGL4l=~_uw~*dPI6yM zRkh|RN+kRS+LSN7(&K7%5QfCrT3hKd;=)r;lhdj&ou6(n5OFcR*q(}bR zJHQ|Ae6yCr%Zky4UT`}&j%FM_RF;~JP&D`;lrxqrUDbAe%|pZ<2-ljv^H^PSx1DW{ zPKU*1j0e{z{~oe+(WK03Wfj;}%M6NRZ&fs>EY4UiPe!MskmXU(j7*!G{?2>YffNri z7#R4@D-pR=X%EtCAbhP_=dF^luXAYH8Ae{1R)~3)MnPY&_{o_$Qn$P5tNKJfArQ^* zEL<^SxU%%Su_pRzeH;toBSX599&GPvX%%a==mJ>E7ZED%0bYJYtqCx%{|!v^t>0i; z+TzcBYx#-)_ZB~D=WPuF7A(|(Z1D$Z7>-nB0TdRTDY;nt~rH^zt>@I#F?ytA0=IyYt>?iua z*O#}W5RmeEP9=}`(}TBQ(oU!tWF=2S*J`idkLHvTG3=% z;hBM3QE{YHl~dB1gswgP0?XROP89>dH$6tixAKHV8axdD)L8{`JBA(u<{rryd;gzh z!n88BN(wJU`qLp%-m0&iN=gG?)9o+gJaorF;Zx9xN_BmpKP<=nAD_lgmW+R?^sbAWY(Nql{eXsC`#rwpiKfeH zl_!EDb5%qaSB{cB0`ew;X6vfxXYZ+2+PmPCVyk9N z1)beMP8xZZG|X;-W~#X_N-%g$#s(#kna-|J0b^b_hfF-XtHehNQSoTV@QcZ1QaHc6 z*4cxD=xA02$WWdhtNGU*FaMz>lZV!sZ6=qL24uM1+eaeRO=mAB zU@EIt>v&GW^6Vi~P0=vpN!(Bo%<9IWc#NmBHN2`Zp@KcJH@rGigqXr@c)G-WH!I#_ zuJ37iHndKPm&@u_?HMYvsXDT%!O)k{jKE-+;pe#yvYCU72Bguad+nyeQ{i3qvcb6T z8dz-+Sar5?0xI?(mJjBl3k@UUx{hm|wy`JHRl~58fZq z2v!#k#?-)bHl6Jb1(xZRr}-4v0gf|Pwc(lkDomMzh?HmoO?pTLN zKhRkYTEp}vqt2F*L#WDVM1?a4Bb;#I`R>eiPO^fiY!_|ys&VCS3jyq)KJvR^k}dk` zRYtzO!FNCC0@YWIv-98NGgs2NO@F#D>tlypQGi*wnr9!8v6t&t;zh8R{cm;kL~RtH z8zOey!O+jN>({|3r~RAFE}<<#lUDcNr9kK?%PCsY3XixA_R!q~l+)qsFzkEbNh|!0 z04u517Ty5LhKwP;jowfcpiO1{`biYZX?Gn@livJyekv}XR0>ISW*eqZ&P)OD4mB95oRNItyT~9R>!t@ah1pf3_*si;)Z%mP&wDJ<2XV3o#vTe29+M<3Vxni=HbOg{#rL&9KpP>y z$7)Pb&#_to>a&OQ*f;joxAs_&hf&Yz?#2!s4iH??$ba6ibC45$w{j@Qg3wHv)o*;# z$AVb0Q#te5j2+f3+HGY{oa~u^wlWi!y`|A8j1)e!`V5?jw58thhWo8u=;w&NzQ?NW zd&|C27usX*Q@t^7ulDy|v?&-#$zbTJ#f7}M3Vd?y;ijq$kneW~0^|304 z#y4GC%q9gcglqG5Vhxl*ZIp=;_n9&rMoHLJTWHQN|G=$K`XLvx`|}?6KT?s~T>d!! z7CS)1s8N!P6%=Ik^(Tv+8D8G6Ga`%}_fm6*MBg!^n_V$U|pD(vGi7gpVeC#hFjg}(}x zNb!p%8_#UUQMcCZ{ODgK___RJ>3%tL@20cz%@2F;(+enYa{P5d*~i?!82SG6K?f(w zoc7=L61&jUj1_?@Nc{0FDkQ~T`|VyK6$~lEwex)D+lZDVyby9&C{c)DbemJFGl=zC zTBY^YG&v@mOwY2DR`3;y=1tR7N&Lt0;6b43Rbf>&M1N-GQ_l7rOp2!^Q2Ko@YHI{N zlK~U$1FD2IO!@O=@r6*2hctCn>ON*i8teDK{#Vvv5~5|$*dvL=0c_G~o~ms^=rxSk zh6=c@a$MIm&BEs_Jj5cTs#33rouz!Wfc}H1Zfe4ArQ#OFG0!GG$9EI-uN{Jg;}JtPu-#pdKJr|eg zbxd2w3Na~n#_j^8V807bNcG|;>X~&Cih&av>E(iMI#IR5n(rR%zAzw{gA&VYiaq?I zAjWd6SydRX%vrWsjR(&YVk8YvprV!}F*^GKv{n(MBWj>K1s!((VmZMC{y0ORYxcWW z@&{AP_WqdF%CU|LFFX4YD_Q1mdPA20;B8jN4_BGrlG6lpuNun=bd81FhAu8|^+g0q zSSOu3FsP)6O>qprf1$$HaO;Tq6E)-Lw{hH5=h9!dwqx;4pSkFLRFj?zN4lbJn4iHQ z_UW=N=!0l;P=#SA!S5NufTAk_-XC&b{%+RIAZt*J>y9r&J&BZbJJe?!y!JvYEr`PV z9A${oN2>?W&^G3@(Q66Dv=w1?jrti?HL;rKeKRvD3&u z>KA(MH@bqSNaYxdo8+^mNM)>#!hg(9zOUwOC2a7Ft?6eWgx&6(jB$NR+FIu8=J6H{ z1KF?63{YLVlg1bu8B}8%w;(0QB8?zSluX&M!?*k) z*VkVjZahO*2+YXmS6GoBr;jPnFHjT!gn@qV>;?N+ue-7~6M0Sn3+RxSWWLq+BzO(St;QK_IMhhCuApJOM?q4IZY$G-3hTg+X(fL`f#SnK) zA7|mc?X)g|dV^A&%km|#*ZNh*I67#=$l%&%IJDF94)Cy_Y;UdC3Ch@WDh(O@+$6zq ztIRgyORCJISB!gPn_3n!WBclxG6`KKY)=bAyLrL3=!%*Zia=6A9wuQE z-%+WF3PU4J!|$VxuN1F${g~%$CKj|kKk4si$t*5?zNtK!FYYdyys#Ah5>tmp_ALQ< z53T(sCw7G#VjirY;Ab}mk;_HMd?fr9F+V(*3)Tj-3p`&-af3pnz`WbJ!1ye~AkJQC zr(Z_MdHVE+$}Fz+uwIW|qv8tTT|t1kLPpnYx*FiCP^v zK)a50i`gKxU!b;@aow_p%vdO}8tHuUWA?ETUgs(D?b<;KB;h4|R6&fS!~dmLGTR4} zKG@JfxLT8B*5;6$OYWN&f0 zM2aV*nj@OZjjX_utQI8idSAEx0}m$CTHPLTi?>H+ov!i`TY|&SxBnS`j|#uwosw97 zTfKpdcaAEhW6`w?^KdZlfsdMD-n zclZ@FS^kmbh$%fBo#kd!E4_*Cm_)n*Z*+xvNt9*O7zHhk((mgE)2PgxVwl?x-(*Fr zfM=u|19-D5Rxi*SJk^h?*yy$HciA=TKk1vzx_vR0GyVHQzuy?~f7ttnH%~_- z+`6Q!YwUQ2Bw#AGEK*W+7IJgj_WOCY9Xu~5aL<*TDxxlslG7Dq$h*N6(JAHe5<-%0kG6e3>lD`z`AIj360qR zB?|WWR_`hvtM~b0|eTWChnFXuQxA8hmi)HAQyqkVmC*tgA=Q05+_yFWVPesCQF zr%1u5sDnI8qcCO>6{#1gSWAMF{HaEedtgo%B{xfWq6m626IhpJ(XWv<9Ex#E^^JSc zufUkmnPrjAp%#Uku1RM44H-Zk{`VqQzy{$Krq5jw@Oz!-F~`feTk_nMPVNiB^;vcT z6cg?G6FK*$0XQ?wmH4CNxfR{D^ZUuW_2YpXl1ab%2%E?9w_<2Q%ypANlx3gD#iw&b!iD|He{YMY$4PN;&7l9^t-A$LGwT zf?Cnt`B4w=6ySvsN(cPQ*#8h|1r1m%&@3G-+}vF)O@aR@Ihom^@lbP8|M$)%#8saf zYL5Wo=HlU}=KRl(+L0RVzXcv{ERAZ!Sp>5#;FH{6bu4 L3=CgXzM}mv{C4wu diff --git a/docs/graphs/l3_perf_skx_jc2ic13_nt26.png b/docs/graphs/l3_perf_skx_jc2ic13_nt26.png index 166764fc778303907134796946fb7231213b91ff..ad1a6de958103e8548303646dd597555964b3f64 100644 GIT binary patch literal 104341 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 diff --git a/docs/graphs/l3_perf_skx_jc4ic13_nt52.pdf b/docs/graphs/l3_perf_skx_jc4ic13_nt52.pdf index 8a8edbce436fd0981d3360087592f7f2d268d0fa..9ec55d689879e1d7e06cf4f06861958a15cdf977 100644 GIT binary patch delta 34841 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 diff --git a/docs/graphs/l3_perf_skx_jc4ic13_nt52.png b/docs/graphs/l3_perf_skx_jc4ic13_nt52.png index fed5b22e2c1775bbcb7dc5fa850eba724520d27d..69f0985706b12b36e42bf7a84dc892c05da36c54 100644 GIT binary patch literal 101900 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%0D9%k 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 AaR2}S literal 96292 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%0A7EXVYYUL%ZnBJ6GSWCo zNIxx&aDgWHuGVW%sI#qttSaXqJAjr7yg-73Lz5VeWkzUrI>VHisOwo@&c^_)1vo*F zP{Ob%t#})=PUl@xgjB`#toQ#+0J{94%_IQ!jme$Q9#aQce|fo;P)$5MFvzKBMm4wK%I16N$LS#=Z3fJSRV+Wi-DK}?YZ5kS&6f7K>!}i*8|NwIJ7}g zkaRD7{d~OOs=`z44Y3BS4`5p5&aQ`g55yhQ;FE;%*{!|Q#6$)4kd`~N&l19(w`g+= zS1T@ZMTUeHYz$zY2#UHR*SS-*Zp8`)`MA3%Whvjj$n5tvNdI;KrXEtV7w23eRd_0f z?O+0)YI-h`=lZaH+b)V60Mii!dU{kZpR~(g#?b}iZPWyNS-D}(G?<$8hHqsQ%U-Gd zO=-%q7Cd_k{(Lsh!XVKS7%b)74g<0rFu0>B@0LB_TD_S6KD9j^|8m0l;pvCcFjEr> ze2)hQ2VF1HMF+-?w>c^^vwQb?)P7whR{Zq4&VEgjnJ$}}gelivRola@rhkq$Q-SsM zB_%7KdMOQpT<2vZ5zEdkI(z#NyvZ*fept`WX3!sfaio<9l5ET@uz0{q#v4H|ztd?^GmP5G|V>z#0Z1D_8;X6ggU$N7UznSaY1eS6#_@ zrCsN|t`0tQm&VQbC`4-bVkKrzj;|+xujk8#u-t(yORzJAQi|#RRCBxhLBSCP@KY*6 z%FRwb>8i{XRYGsETQ-YJl9Uyz)I(p6rTCG~1vK1g$%B+96 z5xzI@s8VeeNe{~a+P!U=$bnaI)nTzbWQ)okCaj^c3&=1d66!Z6>xm7f)lG z$_d`Y$&GUB9}`$VX*|lOfa#V$7_4YNW43Lu9Vq|y>xL=f$AZ>Eb~%P%(8JvX1f5#+ zRZv9XAi*WZi{-i>EfI9TeG;!<>k0BbSBC?dBi%W zSA?q~R+|=H+z7H*1b{YtG=Mpa4Z^G#_lYjs7Sew|8?L@VFRv^QwX*b|Mg68UP%BJ~ z41LM3_3P&`3!JA93Gowz=;ln;*4A8hUleVL@Upc?om<5-`#e4&)#J8F2W&$}v#p>G zn0*&8W>A|1`CKxMB$im$(ScPg(WpaNxQ7?bMJCo3OOrBqR*`%Lpj3f4)%(=n1R47Ov3AM}dD!zXWQZ19byW z;1eq=)0aZgV)1cS8CIV^m*rZu>1by?`f7J3GgKzqNY}ihy$XW z=})H9{ScA+^fQ6 zW6N_n(YWZexHw-*j+giZ@ax^3^XD!_($RN*t-?!tTNj@n`P0U7Tyf92gud{NAzF6xCO9Y2BtHyh59xYpp#^#~=OTSOt{V<} z=y&62B>jk^m0&!AQ$^csP!=q|5@&(n4{UJB?%WqkG7k^;p`FR>^(*G-gpc*pQAbXP zTSS>|2h5jS>LGZC?BjSmjCK7}T!I3`e&}UzFXG@h{}3rUnMaV@JAM9grboM@T#p4a z2sILwAV_$ezf?ia}P{EFc;(xcA1 zyqHMu+8){`o429}4^DMy8&T8onAk#HUSxV<(zCa55tXHfVy)Fd)0nx!BiekD!iAE` zx()j?lAV@DttrE;f^88ikb6Q~39)3qU0i|gz29Y6Hf#r$F&N|I5*zDWfY~+9fQ{o6 z@Y%H9cn9o;;HFu?^S0E%`yL}6CpWn810?s*Yndp`n8iJltGh4orAeR#L|cDwT+g`h z{87~Qk>+Vt>1w`Lqft7;{qv0(Tz;Q3k2p~KJy^gG)hxGMK%I^35Ftb*)yHcuuz5{Q z&9m1Q#tQxLG8N^uN+Uj}^csMg#-q4-2DYgppOP%3_`-cPTVJhQexMyg&1^oq z1k1GfV7s*eRg(y+lh>E#zwK%s&F{+xTKd$5Vl?w@m0i@MzHZl)nN~pX>6wxA)zd{^ zZ4lfZCWKB!x?ve!FpF~gI*I@q+(s#d!D1PNf4oeG&iS01u7kAIkWaZ;=g{~2WgQ?c zIXO`@&3G}Z<_(1U3DxscUmrbhIx!g|?A-pPTI!=!9q;RI;X4&Cw;P&$PNH|qydFNp zdtLTp+c1)}O=8HT{LN<#Eoz%o8g~hZncyh~W2?hBK=ZVMhTKhHf}-9%%99F1YN2c} zvO$sQ&s&1;zJ}0ICB%87#=5B8Rbru7j@t{QGQF+}6^~+K6x1S{=Ufx}4NtYvUw?Do zcU58Ez2}^LZ1!_^PSOTz5uJ70{!$pvG;xP%yYvzpg4;qAh9M1pZ7v`8dcAx2fK)$m zaoF-jO$JERDKD!GT(9|TbLfkU{djo&i*$Km>jeM2e8Y=AOIWuPVBMy4{$2U)Vau8f z=w@-znn-~V4s!mN;h+_>1^foDY%@|zkyOq*yc?rw-Wi@Y^^dH7sqJ6T~?T)$dHBN<7?Q)hwVZ$9zxCTT};#bhuU7x2}zDpMm})4kwzdr=daN^V!mrV|s2h75OD_`} zDS!mi`=_hgx72pbIj3KuT>n{P>dcDJ#G{)xJ3H&;3^i0f`xNO%N1uPT`R?k-no6Sd zk-_lvw0BcXY9rs^F7j^og2?5w^I@s^Oweg6cd+d_1FH^Oin3`(Smo81>cC`!F@xwW zeAbVcg2u;T<)2ITCZN1+FxH|nEs@S`uT7YnjRyzbJPMS$-RGvq80b*8m(xR09o9bT zExaCkCRPK9Sm!K_CJ1mh-Z`t>x%smc{Qs*e8--Eq)k31``^>>?4>(kbV(oP=C-fJ^ z#m0a4 z3n#j+V*@12=}Pl$*&slv`;b324B$1~_#=OR`32$Ef4*0C7X(<{iW*djddVnc1oi?L zZpccUZB`Jd6$arGfKF>Zctiek0=pFP z81p;xpeFM}oaSV}y+Hs7@6KEqkrDoVnAVX^>iu*rO#QAprvkQDKqL16_f^qnY9LTm(u3tUSqC)zni;=8eion=%_q!`Hloosq%_c|wUN2k*iA-Ps>^=6g398@iI%5S(L=nam%o}H zu`X65sD#31q2&wH{bF?L?r`IV1K84X9tU*x^E9*t$$2*X7f>PTcpp85VBrV zOVU<6JpDf@2~Tp014(XBDmjQMTIeN87sV7<1PRsT!f>nAsSjza6yFq8)Z-LA7R=}B zPmG@O+YYG!WJ|fTUHplMIOj#6C4Sf{X?zbl80PRfK5_8B1WQf6ZU359;_pJrsBApI zMPOU8`%x~_2l~{*m&pCU<1?B?QJ;cge=Myba`BtuJ-JV(CBBH3Vd%iGI_>gNu-D=a zl^_JeClzY>Z^s5fh7K`nSs&!&cgr}f!ebE(XyvVZ+fg_Caxa@<1|{#yLO3g0cTx5zKXF|SuN%6 z{-&5sRgp|&oBDoc=8aO=N8rj0nbh^$D0V31v8733y+=is8Jbtl0NoQViwPzaa(<-z z>X`iY53HhlaK3Geb6O$0q&pq@yKi-c8cb|$#L?3MF`l?N+LN1CLE?mm_XJNxQ9&24 z+e`pj@hDV;ag(>tSi$>JK@@pu1%W}i3}e#>Lqu-fz0nPuFcL}D3X_Il7_l^(5F@$* z$vXGB+b@1fUx8Q#07_8Mv8o}tmP_E1F=`N@J|axUWNH;~-%}N*l%qZkV|xevQxdY@ zc(wDIr?zb4n3e*co}ZLbkHr(h#A`n_P`vO!=j_sQos*|rgC0=_r<2yOUbATYSe>^0ttR3H zeagACzFB}nRzW=lplde#R7jhK37mp5=x?c|(0;j^B6y0cJf~#g$Bxs=&p{*XwNAmf z>fV@PR*Ew=IYPcDcAmvBHfpayYC^j#RvJ?!%3!{o>;?BK;^@J;B*fG)>wZ`2hjx6G zfh72%T>HMp3TneA$R0fqJKC}1S-g2GUp2~h#v@acAGj``{1%Ez{NZk2J{LOO4 zmdtsqClQ;boYt053xAP;n)HqAYu#C7^#!NAJ zY@bZ1vXTO;u#-*jvgkHSqJty-yCcWaPayYRcyFO@n>+}~E39j7NO0MwG=sXyHr;uToacI)oW?jVfPQA|yrmb>z`sV{|9 z4(OglZ{>*nob<^I)bv}u%vF!7sy}JKdmaSZ*`^gZQEv(U;DiS{5*i#(z{>mccxJC9 zoMx1ZP!g{&?q{`Irg^f;T$y;6aN@A+LbmpN#8={gpM)g{w+OB4qwQ5Th^Wilu|xBZ zKMKZOJMAkFPk+A8#>qsyn2c$iFWurh9#eGnlc}vBtVf1xIc93h{|E!x(WNQPqjmE; z!xcf6UT5x|f#Mp17V1Ebo~_TyXDplvZc4;j!pw{^br_fdx)?p2g6|@;cNfv}#u-UX zpx5V~k9LcFpcdl}=(q8!xS_8YZ-WbS2qW7ZVPEbCuID}kuu}8|7*SoE>Mu}8Qa+&U ziqS0sO7)p$MXT-=q`aN}P4?E{4Hl9cKa-F0%)+c&@f4O5BvhA+U-atprVIIk&oar| zYyI44!kp>Z8(B3bP2SRApqnNRba!=K=C0vT&Ob@;JYon27XARy-#ooZ4eT=TC&g(8 z{ih1%4!2lot+@oBUq+%I(BKsfb>_ zhP&&PmfnVP)59aV*Xr)mcZWjFMmKstmB?KAQYf;(iiVNJK+A+uCcHrXvaXOS24jz) z^Z>yC{p%otRr5gB_pl6_y|D?9ip>~8%V+STeLjj>Gt3R0xT}BUw?e<-A}QIFEF8#P z=Rz_q*L#8lSLT&mLBSIPRUUX6w$Oss`3T}!Uq@xz08O#5(g8U)0o{@*>oks6#!L3g zdS=7Hd<5lt;;;>r^siZaY*7L_F^&p(0m6?bg<80I3Q%z~@PPdNji~MWXV;sB7WNLp zds&h1w+>QPE9f|TEW}#qo8@`f0|s=u7$zD#2V@`8P902J+`$Wc`9-i7o+B2ehF3$Qb7#4YmIKS?dpd;xHNi+btpt|lc0!TpirDqGX0FxEAW5TgYrC_9blc{{nD~0_{ongPGenF`|Mx}YhgwxNW zbe_i}v-NLZwX-zJCDlo!XvKR^B)2Tt_{Xw2+@NvFG23lV0zo@z6J|Z>v`I8Z?&Up@mIg^bXOtbx!A!CmR+tFmMf)FQg#6R_7$R5nlpbhxw}Q>&t;x>61%kY z0AjdZBn(o;4bq&P%$UKxpjYXzrQP(YC6q0=a6n<5EShyn(19BnB;3h;Do>wE^^e4) ztSV9~{&3w4HynWVIjN5J7*8C`iG@z&r}!avrYM5K;h4C$qdiVWbX=24nGsd}7-s(@Z0NHJvU4M~4!d?emJ$(WI@{$~Y}X zoztk8YLs1H&r|!bYhQaqKusZhujn~TC*?=K3Ul4Wb|JEyxbA7M^b8Wx8(?4_Z9c?r z{B^0X^6MjHuq=zN_`;;^)IrCjsA%Kz*tnN2bPET!F)Tj;0G(S zc)m=&=*%7Fe~K?)ri6+KdJEUkhiW*=S={KR-rfbuVw3Q=_*hB<33$j;>H^1Q0Dk(a z1KX{f%(nYA#+Aq>+O^Ek9w-v*hfS^**ts&v|8)$4dqU18Pej1 zk}opbs$*-Gyl>y|7Vy#SG&8w?)eO^^ulJNUk+Z}TB87Fq^k6|9kJs=2V(zV@s%pFU zUqmFN1?do_r3932K|x6YK?#u(5s~gjP`bM$C8SZhI|T$pQZ~J%yMJ^0Jn#4Yo^!@H z|D7?;7z~G?>{xrPd);%+>-t<52l`GepBR1vfW$%f#3=<3h^dm6&EAL`&WgkLckA`& zr}<02`P3Ts#Uv=1AC8VH9)gTJ6zv67O%WHC`ZROSClUx zr_xfcf}Mu{0^w2cn{wc=W3XVO=zNvzZN1Zl9G31ZsDG%$PsTU=m$c!22o#7rYZS}2 z3s-y%c=CkO%@S_&^+d$e@M@B4a8H6JTjYdzx%Vr*NdY=7LTy+M`A#y&ocjjp_G=Bn z56goONN!<9$A!t*kpVy~2^W1Us9REvB$9Y}Ix_RBy?wO{`hxYw#xumlHuu=OleJI> z%FpUlyk?`WuDn;L9+b6nt=i36Sk^EJFF9e{Z!a_m9?Ru2v|$=Rp58&UUVOhl4$u3wc_eW4q#ePxbKCE5S$;YC}Z)2oEf z3$EQye!+O_Y=?^_nB%g?CKmZ6G)tEW<=N5a4zLrkO=-%@lLmP7Q809$3(xQwe zzGi$z@-WJG-#0_E**>gq*j&^kHL%kqhiM{DkT@33NIf%UzQIq*GwF;3)~q`rm1D;) zH(I#^@usb{X>3#;ya))`5AjLB1mK9|-CuZ@KisW>+QSerlQz_DER;-* zJU!U5K04p{zJ-S|hHFX_y0gz7h;Ch&kv)`T#a2I%u^1Nm=%s!Av-`+_m#HX%({V}U z;#$LDAa^r~@_fxcFv2_x)4a5D)!#Z!o&Hj>ej0j2Xq0;ee;n> z^XkVl>?wU4tL{W&nNA?Zs3ua{c)4d{ek z8z?o=D(Up;okR&gf4bxQW9}_<^HF4! zA*{B@-WuGDsyHjG+s0TW!_o543HS+^$aV!pn%S=(l;-ks#%es$s;y-vZgo#YgqJD# zUT0F;sT$|7Uq-WZ9v(mpod40Q-Hsmc;^ix~tOz1trw0bPq^|J4^)%3o28U&~K<;7T#%fT#mcFu*N5DYrJw=1Y2&`(G zS|w7=F%fONubiZ~iix%T-UcxrLp@IQXSa>52&)PoE*-a9s&6%192gP4m5*rW<=c5t3&HRfre-Hd%OTCN;%Ug z)s0e049VPiL>J49r^KPpHwL`3SCbTb#A$;@q<6DSoS@XkKRoYiIHDI6bR;g+xs*2| z`nc?gzSyf=vV%qXTi7XqsTW5qn_$lx&}kr7OjQ2(bjWESKhrw1$@%>BsL=1xeQ@>d zjXstlPOl^n5jF9_TmobL6!r*T?`!FuoAUa(nj)MB{!%N=K40F*S{}u? zeO~>Bw(JYcXj8x%uFE9AH6Tkecs&B)#lHtl>CJh0X_=d0sPu! z*#U2kgX}kK;iaXlEuOD6jI|f9k(s=q>4;CMtq zx>ZVil>={QPbKHYRqN@Wh^72)PDXbwge1_mD2}b%_^VI*8y7h7WgvH zucls{N=Vkx&A~0Wu5cUf{E^8kg3V@@+H)5^33CcVyZxbKb?c7~5fbj~-ZwgRwJ*0Yj-*HfJtQsLl^V^@C#T z{#;a+6g@=HGCNo$LaLx$8j7m=?2E*EH?o;9j-JY+MY5E=0)fmkjqGME;!&7@Lmzf$ zX`lt7JZ0?ck6sj9V}uy#dJpEyfwb*ZGxvBltQvp+A4+nW#0-W!FjIJ597^qH^PeKJ?& zCSIi<3N*$qL{L8+%&BL@lMxJgMIa9;rMyswr?~R^!`oPS;(;lC=Z zM_yIqdg|%?*c^3(6=$0zpIAFD$`uX57O<5alYKix&EL)R2P7Z9V!a!8BNTU`qQlgw zFTd=1i&5|mqQKm2t6w55cs`gZAfm?><)@Oy0eYP;6uwGNZ9Zm_e$HI43-sJDHX-GI zmJ!3#!-OYdRuOp(V`^iB|5N1w=IP22iNG^9s)^h6(cOn-3w2 zH0?&8egmpk>qs-B%qEoNq-OyFKm67o?BzqeJnCg(JRKIE{&rZbtDy0b+dlI%PjBAu zYIVydB}zX^Off7Pte@k=xmqZagfG^a)4<7f`$L{bpqVe`Fi$I4txk@blEPD1!uLKO z&uvK~Rp1R-3hz=fd;=X9IzxBD!(h%2K&Nk9#F*BvBhk~M@OdRB{lc-Dp6d$93Aw-nHF1y z-r%R1w5c{3NOvjxK9AWwj0n1cy$P3k7^L(X^6)k%{1ug+R9`-j#*ZBxE!D?+Jl&+n z{RwG5^xiD)UQ59>Xq`CBoZbIH>Vqt&lyjV#qI0Mf6hutRrx=o>#$0zhF`&+g* z)$KNFj!QS0-rL3iq}t+VvbG|KU^Y%F52g>KG(`H095FC$er<_zC&=SqGwH;5J)k?v zZDrVmK2QwGoCG$AUJ{I^PU3r8*k-x>wPewBl=HhqBN2(W@AS&2<-NqL?eyMKWsinP zc!+uo2?=?TzzlJg!k>}VAqNc?B#sjk^`5YilxUxrIWH*Z_M-HGo)`*F1Lr?5-BJEP zQVSF^Kv1v|rSbibdYJJVy}nGt<*o{{@>wqDMv;~zety82Jpg>*OF1f@US8>2;%Hm0 z?{sJN&wD}%lFeWNR<^s0XX2EmK5Nh~ziN(VyQt2*CZqid6rhi7Y}I27$Z$qvE=yMF zKz#Cwbw6vs&{9E_;}+8DU`lz`3rnxn{4j#2)bBcx>L?6nplQb(Qpg6*%<1WVBirjl z-Zc6u^2IJSU2Rx6Scvj!!#F0GXvUdbzc{!!OQKf9%B&&`hKyjy=X)i$Dt5rXg^);j zP;vG2xTwKAQ^wykg;$#yPX=6Hou#7XyFLj_;cppx(v>Qno{EJIyT`vV(3WO4){e5r zd*l+DffRP1V>w6HKb_MxbiEpR1y(q(kU@nE^MpQ=C@#@FpUoSuF#2!Ed;^tT_#l3mfUlB~<#p1ilQt3~XqbvE|Fnqq_cZ0C$3{nJ%<+h{@`Voex(#Y(tOrY;5P%J*}*wF1(hY zM`XsXRE#)>{ui4L5W%GHooxn{=Vx_cL`r4-$!-aIDS*RXBrHBOyuLhe?@82oc9cBv zQxhTW>y$ZzFC|&3h2@LQOqY;D^%y4T?Rf^YD99iPyi4|B#3)^&<-2j>2p_)+$oJJq z{$XpRuYt`3Hrh{86OHX$aJyW7<_D^{*v%Yhs~Ti4W-hqUz@_Ze!6Z-hDBK{9v6K}N z`BHn15|{!P1BK5tUaPe1P31(6gjwJwWCvHY6Xv-`EUY^ffbyFl{{{l1Ee6u5DqBB3 zVCN*a;nV6^fH@j0y05>NfBov$*Vo57QaSP(HC#ibYVJcvzNF<8Az7w{bw#y>XCC`D z-*wbM0$qf7L$ctXWCLcVKwfdSt@b-0cQS&p|J@F!NlH{Yc21{LpF8x^A zISRLV;XjzTo{sb(HEW6vL_(9-Yy48-?e_2dRLy92`?k`v zOOyW08pMPe$68I0VVY-L>MULM*3BQ$GL^UjMi~Vl-NNNR7b3Eb@)v_eD18hICGhi_ z5I^4vMSu%RxgcXLINLd8lcT$oM=4p$og!H9g=Q@1!gcChDbLYujFve6D}Dl96iIRq zOe-H9m*T~Zn1Jvh6nGud5(vhzO>H5Y#mD@4y>=q1Ofv^3qbCYk%`1(Rrf>jax%J!q zB~E|8r;&JsJOIP0Pq$~=w3V+FyL@u0YLd`!viLv}Ub*{|;SAa0$4CKU3~4%~9YX_L zxnOp~nTe1RKFmZObVkiu1%6@Kszt$K{`^5vSx|BA`m0Sh{3=G>&v#Nop@p}ns^^}h zSHmc76i3CONBJ} z@7W1h>ih=KzifpdB*$*+W(axTSmsk2*Xk38DitUt&C;Wr9A9Q4i7=YJpHoZSxS1Cz z8LqWx^l8r}uC}k4_sfixD52wEpg4BRAp|5z*c;wqe*QS$XMnT$SE32n?)WoAkEat6 zC~496=os*rm?T_|HY(PuVLqpa4)m+bv#`UqS9(_OzlGbdNi2%gUdh?w$(M~WawYv6 zw+Nfm+fP%L^Tu(#JzVxdm0snwX_O+g`Z4?BWTVzL?7Br|XqgL@gK z2?K`?0Zz(>pxF=nukZCn$hjlLn z$GZzU6L+;uCrXU}hSkC; zdQ~XyNe2jC*XvK-f|^Hpq}&92SVkc(;H3jh4f&MTFh%=)*G;=?>P2~Z?661?Vd%7U zKkk$7Ibdz(nJ0BHDMTFuDWxuJN+>7qfd;>s$7sQS#c=SsKKN=dp2e>W_(Xy)X0%fvt~^2X`zpxRLhRqA@7a`HhdBg< zUO0(d#-lHi$y-MK9e2T_AtcLz5LD{GCH7N2#`9DH)ywo*isSR;8)$E+^$*Su5Wi5i z&yn8i-OK?F-fzC8HY>#$GvmGQeUgXmwB+J{^Ve4*G>x_1!WY$x1y@hh<$|#kcyEKe zP1V#~{#v!^7v^2MXV)BsD13PS6l5ff7Cj*1XBp(j@+c|1?QW!fddY9CC#Y@h+eVqY zxH74%pb^@ZWiBJ>!=Zeag&F=fLdt4ChIJB+wPm&~bpl?!r9*+|PCnNuYL#|JdA0<7 z@TBw-^$v=&?Od!#jdy+04*Uk~ME^KB+Irb&4L2T$`279|%$=u~PU+23src|ihAC4h z8VDn#ndfQkbbk-xp`S)J9Osu8-LL~VjDW|E!@FTh6DAz*wEXdibX#=h=z!ucmG*WR z_1yKWLjrQL8X6h}C4PfeG|rHB{g{~5guS`=LK*Ioz4A-E$@Z*$lRK@K->G0|MEH6s z2ygM+dZOxkAn+b9D_THH_vvY3x&5v^#$qDFrDt)M7}7Gf13N|dLY^{V3!Cv7r46w& z$R$ky2_GVo2-1w-IAZc?rNY`2*1zRP7QZ8_q1MJK?RLi|@V3LX%hr=rq!x*XJ5Lu_AkvxHUE>e)DB zM`4RRvm(ZtkbogX1YMZw>gn9e^Q^0nRmOR86W)7=El8Xr8rtFb@g;GR`Op9Q8oB4o zL+adGdAyxuijsdf1&vJzc8_t^tCq+LigIQG#D`U!$thjRI&XmRR5U&- zqLO?rRjNYGR)RR7*&v+FDrp_hhb5)6<=}}GCSR|#m8BzsjgKQmSLRV?x42p^SD`@N zjFqslbd*~K>s0!)>txZ$fQzC(v2ND8n3ako0tpLZ0ptybJwxJkwrO~1#~wOe8Lvzu zp46ycb8frp^!fo+0jf!{xM(ti)Mjs|Yv-Z0P2lRt!JHw_mz_jNvt5=yq5`nty&ta{ zzlsosO;cLc<%aa?utvA0u8M6qvDfd2SSp>^D#bXmRO_`dbva3IFF8pcsc4iOM)GAn zTk{~iJHL6hj&;RNPEGhh1$$JkwA3Vwmn~X(ZM>X?F)nSIdhCmr0~Bka$1L@FOD{dt zp`o&vhG&n_IO5OlUv&~?q`^q8xQEyFET1)*j!Yi8C|{Jd=bWPw7ay+|Kf=GYbY7L} zg5$nLZmD>(yXa$VN5dxR@Z@INOcSpeCYtg6!nC({hF(Ct;H~E`Oyi}-Z4D?=3en%r zY*2*CE0<=XBN;K>On+Q@^L?YY`D2ly6dGV^%po00FJj*;nP#C><;~~7%--R#PpAH`oo?i3NP<3a!0BulgpXa*Ny9%@pis5VfLdNJbRt--c&-wKaf0j zj9|sv)>AF_x&9|fWi`oH*E(~{y!X&<>$j{5b|JgE@q$Bh8quawsJ(9{M=R7;<_|kX z-K~!HoUhd*_xM$2Dp6f+wk}_FEf$){swDypA zI;t+xj!I(A(;W$Y@7V`L*lsk-kF(SK)pP_HXg#SI`cATS4Y0bqsSCa)pB~`O$xW9I zPPmKJe_+WHVqyE8|Du48c=t311dCo36%D@Wr#t1!7Qnk)irAJ`#N-b)j$64&CwbsT ze{te*fme^Lp(>+|GT`-nNQJXGqOaTj)K&IY9?xcN6gs5J7h zqFR{BKV+f#;qFFR^f5kudW9wAa`^=Pqmy!zTjHf3w%?->OZVHdddXkzCd0VzroVVS zxq!q^8Yi*cP@nyyi^H$@Zz(Lze(D>2_swgJg}&Q~t>(PcW)s_|%|VD_2y1iyxNr6S z3eRKoExCRvq8r%WyQU_QcNADC{LU6^GGkl!tn|vrnzb;Y9m=Cf0(N*%iw`1U_XqiG zkOzqJHbSu3P<;v)X0&;Lh1C8q6PwZZ=blrupDzt7Px@yf8*{|>F0$Md5aChN6E(AC zr7c08q;wrtH+r_Mg&E7Fi|+7Zw-Cu$WDQyT97QG$!U|+NT7?|ew2>72U#x|>nPO{A;Z~tPFXGK4id?ELp{_*za9JvI` z+OR_VPOGwO0deS+7bc#qtavhzB|ajyr#>taXHWB)5Bd2q=Bk{N?T@bGj~n{Aw!#LX z&ZBBx%#@$!qt-MqT6k8`-A^{o=){kIjb)$Vr(zdAIt~J57x~7U9KVM~ahmLBWsj-| zQsYUie4ye1DDmrO+p^;fQemP@p7O!re{-P0{tsh>!cQjvQr87*q6o^Sufr9)Z+B^V zUG_%<=X{y1?Ka}uF!3>h|~LuZtzdF28G+{0Mg$354UGV(Hl)2xLQM9w4QcsvgJ4#|blbdM*%dz!%Jb60**bU@_D_Kw=3V%Z7ir+s&`90{IBk7`{Q ztzPOD=k^CLeqfR{?v$jB*>2?FlZ^cEMnrbt^k!N}-qr~-wr^x49(jOw+b3*3A-~U$ zMEg!*-VxUp`Y2w!rIhyJAhmkVPh8o#PBU3V#@yqVo^3aml_ou21W&#dtV(T*8!@hD}X7Zf?Pv*NA(P{3R$wn=8LCf~s9cpS8J z>Bto~1i^7{WQzZ2qcszqbNs8tz*Ebuv-QEy=&NIiTzCEvH2#(0%7D_$>x35GpybmZ zcP%i#)TJzO*0+DWnO7|?SQlWhC}}y6&VxrzZ;-XcJ8A19WZ*4{fsWi$LdeNp(h+#y z8*dOMgGEH8ZAts$8tFpjxSP*@YWW0#*ajvoH+IB>aGu;9kZ}qKicYp%9MX@pMLQX- z)Eg*4nrV)a*tE(Uu6Ht-(Q|)3)52v2U*LoTdl|`r8D!%Et{f^U@l@rLgqsn}e^l01 zo5|c2L^egO$cJ>8{j`bdriyjPbX{#ncq$nvY~~K#bLQ!nIlkTO+4CKmeek>bX1cuD zw_rb&gzg0;nT$-_G7c-N0N#u8Ue(L1%9&FfeE1EgJ*gesr_D%~*fr|D+?$PzUwX4~S+(s2_7yD2${Y zAhX6E=PL|789H!UJ#njVDAcJ!aaHItcH4ug1%-q@_CF$tiT=Uc^}LXmTc$iNQlTG5 zyXgMS2^G%hXTeTN^OJ1R&QG}SDw5`2@%-||ChSE1p#mU!@5mbyyprIhi5(PVlq14$ z>@#<#1G#BSi?Vf+ULXDPIc+Lo;RI*4k@lS69%-rc9KrYSktw%^nyzbpb+R+_&TO}% zhcgninR!t-iWK)_GXU{`_vgjz;r{+TdwYAeCvR{lQtt7W@pA8|8Vi-FGVs^pgxN5z z7YoI{d*Rv6F602fSp&22r!Gu&6(^CM{(bnel!cE6Yviwi1QT?2rN3Ez+J7VD`i}oi zzWeSyMXUO}fMAl*fg86O>)%utz8d3K@sP}Zh$j6ut28pxr)SREZ}1CsOJBp|JK;@N zKd?7GEz)ZP;s^9dcU|GM(wNS>pN+Q%9qiriTH}w2-UXY_+3g&x=LB%2H6>lA^b}wO zu^xfBalNW|_i1y8&D;08&JyaZ4-?v5(Bi4bQ-t5TocDMf34!WjM(k9UH^KZ`8#K^s zV-$3Hx)h2zwu&GH)kfp`@5Ya72?4U7OqFjIsnxqRJfHW(G|!Iv`63!fHsNitL(;Vg z6|Htt<53CLRZkg&#IExxlWE*EdcXUvjE!4?**NsYcxY(Yb%x<+KOt_n8U43;4=DB* zF}ee43JMg+eBUTDA7Fa?={U#s*f%8%DRdV5B5s%<9iKBT-A`HN+r9p*G|=C}Qc>|o zUk+!ZIv4KID8HPSaab0+r1BpRgj*RIH=NZkvPP{4bdCkdpjh+umpet zyX{Jrf{~RU)T6JaMsCgL>w~QCnY9A64|=bs_4ZKW~3OF z_)&^z*RS@({ad9U|4WVNQpM2_M}`DJu+B*l&F=2nZm+`abL~Mc>r`;J!Gb@I5Ef02 zz|CGOnvxh7y1G20H5~Muv(6zh)dNksBB8Kj8*3^)TK#-um$;x#bq_Y_!=|-`~+MaNG9KES~iX(p~1?!dmV0$W{w&qO552d;VyJ$)sU1&D+ z;*4Gv8RSx`cCnay7vy5}NCSM#fMV()rE|(d%y%@iil|c?PxPxmhE60VG zE1;Fw#|)IzU2bS=tTdcB2)?>UJ{A=hc7-qB)rBstBBhNRKEB93GG-&$-dl*X6P~XY zgs}(bYWcoNm-&#al~3QSxSZb>-`O2L^ip*Zg^KWKMr5UA_2)2%F=uuvQg{qsq&Q|QhHm0m8|NW<~Y z;cn3xl{?bB-p`DdQKR?vObXVlg9kZx?Y_+6DE(2mhCV?TS}s3|=?+v4xKW{@L45+H zNruaM+m@T_Y(-I?_J>iz=0dsu^|4q_S(Ic zzD^U%mCSC*64<_j>At9CnARj`X?1Xo^(n-%xZE*j&h<& zil>IA^epX=bPW3E1zeo4NQ_Uo*x?Ha32E;Ukp<{ra0~Br3!v$^p)lT4Gj*$v;sZIl zWkwhO6!hLkEbzWqW;h?~pliu3LwtG+`&!8RY&(S}w9rv`}Cz5b( zWq~9ZjQpH#*M{Xk$;d7`@T39pLaAt6`bI zeaquwX3XADEU+}J;z;=RPWM5($JsX(`r|vNfshBRq2H}zqzLxv{_N7_q0cy02kW|U z`}A7681^_;K76l#c;$46`|KJhECkTeU?2I^jm>6jFx1_4t%#vNkh}f^xxVWig*knc zHiTshWMfw$iZUN277pvF5`nIl(=ErLStx+`-wAo+m zOFWE}IEsvRJFhiAjP*E*Met=^v#z3X|J{x+Ic+rdrbC2tyO?!|*Hq$oFcd)T2z;$~?(+%{b3>ldEaFHA~!5DOog z(m7%D-5pa!J@rja8_m_(;ldd>M-c|tXFz{r6u+ngu>Rrn#@Vz6VRBdr@Mh6a28H~5 zI$;Kqrn^Z-@!Io=NC9o~O7}?qi0-giNXxmjjE@S8zZLByJ$j{Epi4N)D#Dm`hOtMb zUY<%mtEn1_Lx9IbZvJti3uv3m^Ox(Kgnt_S6couJbHuFex2-tT>6WaNQ?@F_2(+z# zEbsU*4V$+XqM@TB=-aqul$_=oSs+8ng8JX3cngV{!9S=9JRhFMbTz$~HW+DPF#7a= zf6V)N_?pt#48BD02YIaeV)3>Ae8=rFRs+Nf4Z@p9;Ji#a%(%%IUch$*kmvGv$c0dY5cJpMsFxs@v=&`IrT>3Hcgj9h6Kyvzl|b;|c#CgX-2 z#f-!&-E%GynA2rq+99A|x<7H|bg{n$raMlDzx_pEr)jj*pDZ%C_59mgJ35ckt>r@z zNKN<{qG;_(Iay_sv(xWT&v)G0LGMw!bGkFY{iZj+l9^Xzr}N-u2)BT4!Nqn-?ybEzhY!fS`eg~3a z=MFrvDqW=?Ntf*NhK^u(O)`rGBiM{xw~c*ezL)H)Zk zwBrOh9^oDBb@tkwLyJeQbTCW@!WH}lCPgHu2fA-!O81{PM;+Y$OP4S{RFya7F8nNx z4S{U=e>~x<;*`rUj}PY&J=+~d<59!z@9+1cGygVmOaC@Cs8?znHVAZjrfM936DX+p znT2wPz3?N4pV@-Qm+gNK;M{Vo)xeHlN}{IIER|A3B{uRv@JK16UzQ9$Gh4mkavuLZ z8sK!Y6ql7Q^(SOd$Qo&>6f6hwzxtj$uh(fktVRCI6orYm2#bIfmJsL0+g0Q3= zMZjm35?;4g7WSZkdG{^-8gM^EnWH3yX!n0(d1_%mj|T#we%|SGNy?1<&pX-x8el~Y z9qMUB&A0pRp3Yelk8W6PC(9)Vau5{Gtkh8g8<{TcN=&Yo(|*B~v*e>Se?`b)b$@ z8DFR?_uL^b1rq}F(TSt$&YiAs&Kg@c(Vrc^S8|U!YtoFZ`zHz^N_rdZ1_0phK z{_n$(QWgAN=HL%C92+g1e-=I8%xnMq=l@*|bA2&y|NCFU)TMo*Q7a_;>O=NVO$z@m zn2gciUoidqm=OxE{%7r!XX5|==HWH{mYlF#-i@@}n4i?ngw#mvfgMdZd3Xt(YH9GY zv?>46{)?O`e3L{1qugc=KyUWcO@1C7AxPkTLu-!*TZo)>V~OzJx5>*_h*a}pA;;`K zIofH=!;-|`Ml#!mfa)(ihFZ^HKgU5Hp$4pg8ZTr&wgk{QlZR z_%zo*)*EF)8Ske-$m;KQbu5ny^olMM)o`43z$dnG0`*v4-oCnjlm~>WuN8FY=d&u1 zM(_lg4X_xIX3ReaAja;+p;J#7>Zow{%j_eHu&UoD<&CW7aifcVu;9~0PuW<_ z$5lEZ(yo{8NEtDNI35;>G6%k0uAbfz_^x=&%*YuOv0JZGg&yCkE<}?pQ`Lr8auaMVz`(rrJww&CDMd zQatzCQ^IzPqFh5!uQFbvyB?L|dO2F*{my$1Un?-$U*+ftXr{-}HeC!qfD?MmuB568 z2WW1cK*Q8@(>Cw>cSlF`DX4SmU3?CsOryF+@NsdsxFRHjh%KQ_@$gCy$wjy-Uo}oD z;EQsLVDjs-(a~Soxcj)Xnm4re(MCZ!>tn-bXz)P*Rr}}UWb4Wb8^59q5eA&jJc^Mb zasRAOVZAM3v!o=1@?i#z3)b=N?Efrn^U{)p|6S#p*_-}d&7{@jO{Beb$J)SIFfeCV zlbO&Wy81}F{K<|eF!S`@)@mj&KVK5VmO>?l>L zUAKdcUuF`2AHZ*?GzbmYEB$g(;XAwMEmiKQzm37qEAD7sDx5(|{?Eg6L}YzLM+0Qz z-+l58Hip3MunM6^i?__T!`g%%ncVtY7b&2=FJ8Ba5&BAjgFs4O^zs&g;gqm?j7MSFv+99rDlWp8j;#46B`XxC@SN-~8t^ z3Ht4I&H~$*@2~j3LrGFr<^$Ud*fIl=>Wgy$41HWQpZ6`EMvb5v9kd^UFpC zJgE5P#)a1=lmOLaY3oik*ZH1XqgAU@0Q%?G2YmBKXfG({+`J`&+ICunstEwJnG>>`Ws zTj3#nR9HzdmAaR9 z;Bmvp?9`}&<>q$&($vkDk?piBWhE6%K`nwIm*2eIcZR@6-XNIMVP;tb9&DbqIdO90 z3W}4pv){n$x7+$a5NYWNs}Vian7mPz5q6(_A~}eiP{~qgP^~?&$wFd7?N$vElrR7LP7-T zRX)f`Km)^P!Ynn{N;z;R<(TX=g6BKU*9rzeREBL7eM>JUO)l7fGlzVw14Xm z1U>mbcwM>lgNjr@3k~eN=#Cqp*miTB>4141)V6@-;@R2?^iH?MZ{;D?>#OV_A@b7` z%>n+AsDmqq9*d2nztim&6`IJS?7iwkyczPM{IN(G|GO5)VRIaJ0M*tlsBQUgaXtEp zK&ezg`FSGf^x!N(1p>i>0i~Sd?%)H^>o89noAFb@?1s{@e&qG1!B;O}`0Tm4{MOPk z!+oIb-uj`eq_ZXh)4YN`=)rh1)7x@p2L0z;4)|k?wsm79`K*mAW(QS)Z=yn8#<^aO zvMN1?5a&zQ}m3TK8#LnyC|Sw@g$5{R!I z(>kGMOwf4|9cTedPcxRF!t4grVEc|944>UmmO8)m5}qse`slGd4HQgr$zqR&xwf^z|WIc``P^S)PZkqb?qf) zzSp+fgd+(xDtHkns)u<)Z-gW`LQQ5EY8uQ#D)vBGIi5S=IxFIDKLvI4QB4!1k}?6R zrHMAXyv({a?}RsssnBNINFvO=Dc}>sL^d^Df(bcL-)Z+=zJ{^x%namwp<+!4~BcxIy^ zn%Z$O-ZZ`26mETa2yLlhEquo*`3Tf15)+ENx}ZPi^@VeG<1`scsiF%~J!dw0%HnJs zNQ^wCM)NSt9)PA3V{@^&I?%O+W;WJV@X;!MZH|RDTiu`8VpPa#lVyTV@!!i(&Zzk7 zGfo&yHhr~Nb{mZTYtb|InPMp;Cfv!MCFSr0r95tV{I~pe3mZHJ(WF@PX&&spfQE(blU_ankQAL=72W@N>wEchaA~DMTApOhnMX^k>qm4& z5zIzezh0%RoAW&f@868Pt~=mdsS7ovXhw@ZsQ$uPaz~`w^RA-RH0$Fh6nXXB)A=)% zP-|LSfyy@83VAjV{F>dB_`^)OMuiI>XKWk($bk#KR_+Jpx)dVoJ0DzfLqgxr)m1Q! zhE{(2?68LYyZS;I=o(a>59I1Sh%kWgoRHmQryEx=FPDAaZ>8PlLC-?hhW5~5RC*3; zq|Xh@i_sAoOlE@wbXb8C;rGe;&niSU z7x1(UDBfiy#)Pqf@~{2scYJ|V6CVw~>zMrK%7YWPV>X0pbACq1CV+Q<Yg0KNf zL4Dss3#a4CtRMkRhg6;3hH6q^+sn|G_}B}=crveoPHx)Fo}5qe&O7P7Ja?z5I#T0` z{e(33{S->*IxBNnLhphleo$rkzR-gl&rp0pqVlO7M4`M&xHt47TCObV2^i3TiKft( z+8VaPmiOy+;!vfII%Alb{Y3xcfWp8rj7u#ZI1KZ(I4yft-BU9ckeeY5p$#yKhb20F ziHkiiA(@Q75ZSy_n=50>+0zW^uu!&;t{N;cQRc&=XPc#~<=)>Y0|FH!4Jl-KD`b_f z7Wowr0l?Ksuly4)erd^30WYIiwpx3#%f}@tBA6a8gVP!nGqTW4=h}eRgU+wm0?Z?l z!%hE-E5NQj3x88nNUa+QTsx!M1q^TiY}e89w(!W+kJ?Sq-AXiQLWUvF{(#utk0+=*zm>JMwfHRs%6f@>izXmlW zpyd{)rld$~XsEMahh9U|*R@W^JrtSyO8o{Q{@Go;%Ya7C$;kl`-tomsT{rbG6-^n% zG^6grTi>B8aZsMEbp)3HaQf=>9uQ%Kmk3=2%<;gE8$EPp0@7jbObQPG2A$L<7-DdP z(`(IPkD>tD(DbK1`fbC?5|=dAG>WgwN`296Sy?fgzaFd)M+pK96C7QwLi4iCKAzpY zgy*P#9hIL3F2oq)-*40jxgvz$Jf{eM{=BX|GyQ|&lNGNYb_^chECU<9ef1^2t)F3b zGgMs;vy1hUvu>@u%@fg7vIn*4#jFfnTp*WyD);c&yQH@@#ZF-dUv|Q_SQ#r}egZpe zuUCn#e{z#z5qY}m+ROzIMT)^O-!tavq7+}hxDef%` z5&#_^_^{mz*7I({;^L4#4U{DKg0!bXjKtp$z|g&nlf;-fTK(PR_M5= zP@R47z>os7dtv*&lgrRfmKoKK*+4uGo(mo~YRcIy8RrO)SL>CII*<4{TI22(wUKQ%#X`1%v4{Cd1eoDtf(tbb zdF(kUZ@ILGw1A{w7f0mti}kwV@xs_Lb#~bzh$=InkkeCQyJgj^!g`uA_GOe>f+?4L z0h||97R#OQ3@EqK@?OseuL;=Wx4_x&RfvRh6R5ZCZ-=rY^YR9_2;Db*mQG|MKjO$( zmBl`3-0@A4Uoc3ZzF@znj?=}gKFa?Ek7|* z(y__7`nyf@hE21Xy-{$T2@P6?HybRnz85_c3e@Q=^_4F}c6A+bckwcEiYemp;Y!6u zGt&_cA#u8th3A~&|Ln^>RRc!0hPIa_9Vcvc8L&v`AK2;pKdraET%FQzKqZuVHz_%J zZ$7zupg=QU%%<_6&3xYPNAYxc@n>|l0q9UxJhOPSdr6)?g=L--+m}QB zil(2DM*a%U0MmSWS=IOi;m=Z&#MCp&8`0gTbez&;US{^RR=m}wdK<64+!J*hD#gV8 z36t-70z%PuE_nkV@H8pcYk-Okc33ED(56%jB-M%guWknhAILmzJ{TBiVHe9i(<56+ zF5$R+bv*c%jEypMC2K{sm$4}dJlX4b2*q|)jDGAbrErx+Yzofl-9!s-61oa@E*_Jw zds?XE0X^q<2PzDy0ZS$Ux@-%xOta=qTN*5QGeG9TwY!^!^s&(xZe5I=^o7ItVEXp; zt1@vj7~en74nMzXVk8#U7L3MV>NmJoyt^btBCV;crj&~8e_Pyr<}ORTGh>CB zZ{35PdOqN|Ue%#_W*2t-n%~Y-WkPg=mR4*Un&xo#A^Ox--r9cmCw^Knd*Lau7^ zgc3jo7iany!>3a#T%So0M@y+2s0rE{YRZ=UcQkm22z8)?#KnK+i#r1nGxB@`Vh1`X z7VndW^~1{HJ3+rY?A)pl^=>EjIhy%)wz?Z}*+ToSEj+@2M;M0D#-4Ls2GSX5Y=pI@ zRXXdh5=QSRmSyCvT64d|kJr%C?21$tcj8L5u^&D8W)`sYb|xltf)-l9aDNySfZV0Ptetj6uNyAgs#gpT^53yU?yZ+he5<*5{cHBFN%&4gtZYe$jWxwyby(Xo zi;-JhTu5ea_{7=XXDs9Kt!=03B@U2I@d?iBHUW? z($QlJd@;u-HN6e185DZqQM}p7PVYG8^S_)?CEv-h9oH&34Ri13F607{^u`K0J;q)k zAy^(WPy05FW~`Q;?MS@5&W(bUm>WdPqx3q-BC{0Yd^bh#?t8SWKJOR61GV^_H@bR* zPwTssW2frk0~@<&HRaeC@mim`d2=<}OO+OSo_|sj0vswo(Z++cKWvb8;>%M^^7g!{ zUsTN~L|tqJhF1pWPQPg}6v{aLdN{(0@Y+B9ZC_txp;Z`q6!C?Z;tYGg2gRcpbQROZ zS=G*&cfnh7ObF-mJ(R#sjVU=yKvSzXaB<}2^9br8AiEg7n@l)?4lnb5ycGP}xkEqV zVM1NAv8OeN7)eOu*?8zay5^XFopXaJF>2t*tNd_xgbMgP>Sqm-(3uScdcNEn471^D ziTUDqMi|Ve9wb{I4n8WHn2Yu-d;N zk}zOD8S{lPL#ve_*TmbEaY<=q$}pVQEWL{y!o_K6Z;|86+a!86z54y*3@NSM)S~+A ze$hGVDMs$4)u(KQld6cGLS)aqvI*zW>u5#m?3Nc)(&z>p6tSqKy=0NYD=8tX3}1{N zDtj9kaRe1zk^NRT%I&f9jDhl}ai_p%CS4v43OQ$^@o&~O0;%(xN1nt$I}Qp;z%jaB zPL^W%sIWeoi~7n1Ov&E5y;3oYW%sNdGb|8t+zjDA>2Hb%IC7?s{<&DA>@?`3%k`dn zd&7JptiRB@OPAL5U92}51ESeI{_2CYv~ePn*CvPp`UAR_>+*&AFDs@(jc%?l z$_d?OgiG`H_Pn}D>PB3hIvXEtrVrfN&1GH*L9ugp=seB1ct2rY9VfKDFwRb7q{HWE z^yU+T#!XQmT>e4}NSIFNnvNfB8;@4P01&maQt}Hhnx%?cRg-rkopZc1s*}Ik8MY0- zFjjx$<+=DKM3K4!A;m#XF~evuI8jRz97~%tF{wJ}5*PW^zjTEIK@sGoManoDKH;nU zyM?;f((yW4=LcOh2wt*dlMi4%)0O zlw<1g0o?^!1&`biRDBvl#73TKW-w8%#ovMuxgz9?P21bbGwqnvfoNgzk~%i+e?;wD4`y9 ze}lBMYm*&P))W___jE`uWcLP-2LR5X8#1GBh%&0BDO0aBH#$I9RUY)-;ESA{w#4E|x zwk+?4*fu;DFAWGoYt-B6C0MzjWrx9pT83f~*m3U7Cz1xTs8 z?8{^Kaeayz^Ls|)eE2R4asdyrSAb!5InQ=F;F#Vboc^Sb{$n`*gdD`MWW9(GP03sk zlPS)-g*`2X*YXh>49Gz{U4~BgrxwSp5^r@UF7`G_yIw!>@Yktz3HQXLyU#!Y zX|9Q%hdy4mDE;+FNw6Mm9{386U|7DM-|_;n6~rV?K}Zgu15yMHkEHT5*y&DsDZ-z> zVXt(&E$UKmw`07Pr|KNjhyq`n4(JRXy(`-4tRQ%Xk!QO*7H$xVXOXa1XOml_RI1~b zs#A)vWeH+=9DO5pW6q0?r(3RAKW(v*QPdY9+$-=*W-LA`TH(U;4^s%IjJFS#32tGA z#{AmD3uGFyd;W@%P1aj!PLfE3?p6gXTpnJ3>JC+z>F}y@p*Crdh=!12ebW)kkyC&5 zYUai4=CAGzCK8{vyiv+|BgKsp+#6O1+qqNy!om2opH5Y1Ss65^P5CaOmjp0ZQOxc$ z-0`GnX1S@-KRtisPg-c@eUAIt=>kzSuBmX9%J1oQ&SAm6vmnYlv7Rd&F z_QQ+}yLWqO`7h#izvuSTwF9(jbD61)vq2lNW2j$#${aZemm^qd3kRW3b1@97GmG~` z!DD->AH#_ZNn>ZUG1Tvj3fM*Jg5?)bO{8yV zE@1MY8y)wy$Fi!Mv^Z`B7wj{AUM3R#INknUrs?(4;cE}jKr|FWTSNelIv=eC?^C0W zv1E~UMh1?_b2W6AzdA0nj6XTt zxO;woeDZ`7iVMhO!*?j@dT8CQyes@Qt^g`x=$Jyq2UQ!1NnLEXJQ1G$x!sdb^?G_& zd1qXFTDEFYg39CRrw@PmBf?rGJu^ff2EgNLZ`{K|^FqvTCTNT~jJ83W2V$WT^pg-} zPEJnE$@n|tO1Y*pQ@!ROF<;Jr&$tqm^#Y&D%i6;%nMN>Bh6A_? zRfHR^((+>+xtlbEHCGecxxyLL%WH%+PYZ-eb1}^dbhE6ZX0|!j0JB-S8d|S$ve5Z~ zx<%lwk^XiD)RSSFO|iFJ0`|D6shFYtE42TROK;pd4A74;+4`m3C`uYHFK2M zA-j$`9k1KCa&yD^n*&`0K9tQBi!V&zl(+djEpudSs-3{sCVb{(v%lZ}yY@MaWOn^4 z%O4W-w;qkowjQ1v>Rl-y$78_70$WnQu5*Td zT*Tlh5lM{%N9<)G=X93K94e^kj)!;UY8#$MM<>%@k2PJUGuS_pN+p5!+ss4YV1*!& z*St7$J@lAdFDP&m^=^6BtNr2XXY{_~vA-K)9(A+ivl15D>FE;z2dJrQOxqwIuvxxa zNeJ5i_?!7O_lwRc;Za?z)l+r!dB|s*8tr^kNeCgX)1aXRc251mAg2H7@F^$8FOZ1< z$)De6wmVRITp;dJrj!1PdIEsMB4r%m&FZBB|@wSWbSN z(Da?u1#HX27X3Q1(oRaV+c4vo<6~-^Tn(@4kp7f4r)cx>8tDbhM`qFWN-kh}Pr!u1 zDgo45&>^EXxxk6n(s4yXRj^{;^GS&|Q(;D1?36{NV>V>AhsEi}IKDJZ;(7P6yikFjMXxDs2(nzU7eBOkr53@jB(Gu+1_5x({;V(TZdMu zo%=h>kFrE~o|!rCsP=MpXy?(Hm_Za<#~3COU@i#k?DQI?5{ z6-7j&(ZaV>_v8{0vKiGIc9e>`X8K%0CmA*{njO6kJ-i&#&X_4LT&38J7hiEMLnD*$ zrf=}Tz#V9n6LQo5yP8plBGRYb<`j8LyLLj4YW`|4BOu45H)EZCrj)FBE;7!Hf@_mel;WC;5sb}QRQ3U3&x<;^mg44*O*TXGc5AVjYs=cqf zYm!736inpW7h~^VQJX#_(!UrHa@LiR-QU91Cb-xKT?_!T#6IIk-8>0$LhL&RSh9?` zI>t%r+dd!1@TO$}C2m}Tx#cV1Ffuf1pVt)Qt) zJudbXElb}ohIpvfvj-G#BbT|C;!c7JXX0q$cJOIWIo4fYdc|3Wi=l2Edw#lHi5=lr z3^H;bbnST`jh;;-n{eY?dU_BvO(n;jRx05o8~S|VF`hEV63WU?_r>{qc9T?cpJqK0 z3d=Jto`&`@T9ON zZnS9k^;UgH3n$r?6ptL_@{e?b?()~R#-#IP{Qlo>=4q4ZDD2-WU1=6p2McS4nNNxZ zS@6^oCf4?`Xr5D+%hCsp(UYgElWl8jYpwzH5zJCQq4&KxcSeuLOyM}e9>k|YXx9{P zHXwZbk+7bmSCaWODGZXMv^zZG7TPN7PFRfwUhu@jYmpcK9HYmaYn2=->-<+;y^g)1 zr2Vt%TAY%V3HvuJ{Tv9~;QEly!^5ZeO*!~^wh=8hx=l%a6t3x8yPN*MpoI-JO5YXu z-w$ZIPE1TRU(9@*^NE_!enT>P@Tu~>GM;x2kX%{y%!&jt;V*b_->c;S&HOr~S43#p zdhXIVA(2sIN?gg^+Bl`#jZUCGH2<=%vCBbNSTsv{R%E$!v;ErVa?UWJhp2=u&?KH$ z{PI?%sDD2Z8#Q_46F~S%0rBF?Jg-uw2L`Cv;%kRH-JUP_zeV2K@;mQ= zI+biL3sPx~#C5w$PamzTgP&dK+{Z4H6#83~e@<<8)jfS8>QcC(J|^9L!mbYy;C2zX zkKhdyThV&KXTBkAYyH@G?Iy@oAk_JLJxs}IV22l-J>toNYmRMRU@!!#>b3T~w=oL! zq6LLs3Aaz+jlLdHMv7QhFE2-X7FQ21LxsCkbP}s43gjPv5ddKZ<_42{SGFu?x+2F~ zK`{&uLFTQrBn4=Ljd*2VNZB*tN_@Q{etKwewz42T&%>BF>D@r*m@!uP{+!I0@ErY* z{ni&=_=Gxogzx(eh@Mc>wm-F`6qAq$N4SyJN}C1g%H;vXsM^`|F>A%o=?J}%_z#mY z2^o5jqgzu03^-nxzCggwPR`>F$+Mgr1N6q+CERL$v-j(ty#9SnnsD!Y7Jbw$Z+)A> zv?4|tYnT~~E4(+xdM5KZe5XC=N_kI5g_izrmf5VS+Hn4o*joX)=E}!yywSa`(Kn=| zRxi!OS$;lwVT}-dp;0 zOLyAaKQ^6Ip+0SFxGX0=aD`-7;wXE{apX`p4EO=b2x?d|@_1;=>pdBxYlFxaZxhH(e23r_l5I&u7)!;NF&Y?;V>5FfHIY`n|E+X8Esp)5YbZX zcA~N!3QTxG28)tOyVX;anf51JCHjTDpC1V0F>|HI>wZzH%!s|AU3g17A;mQhA}oyg zVwRL~F)!9m#pwvo5Z@mkek>ov>Pjbw5t(zTeaT6Mj-J0%L-tQj6bxXtS$N@;4zEDo zeZGPLt=X`Pw>NHgIfTB8R3^RHF7K)^ae9$=)wZmw7I*968Ipg#o{9{UGyI|9kk#05 zU=BVNff^xJ&4Z3_0x2yG4hR=k3~iU39LWp?FR_`{mvMOdGP`xNV@+_?Bt9k07x$ZL zg(u$c-wwaotaJ?5#Tl4=$)|`LA7Za?oVS>_@}0htX%znIGPnS7o=omXPQLa?G!>g} zTP6u(Bslm|*50ywB;71vx~%wC*ZWYa7N)qdWMeNHUV<3e>fO2SWwRqQ(GjB6(!tyn zo`_rh;VX}`JIEoG3BdVbi?Eys!_&ji_H>4HV8c6wgIq93{%lJazi7P?^UEFQVpMe9 zO?4Z6I*b@Y>Qi{mXaZiM*A0X|g^jy4OU@2g^NqCR?v6|Z^A_>3m4E#LP)xAa+} zgKB1Jyr8vP&l7XV)J;s0A;S7L9PrU1K`Ku-u;xi#*8{r$3Jw!+bIaU1WzlQS47xat zmCSPB>pwVLEzF}Dc!`CvsW;m1_sxeCsfZ}3FgT9^j(I-8(RFIkx!r~C^MFcD`Mcj; zV>&g?|R&4CTR-5Z@uzs zOG<_JEFkRqnkzA{RnKKFl*wn0y^jjZRpMQBxG!EQG7>KFQ>b@*I3997!QC3}2%43o z4ObrYV$~Um(Rv&c9hd} zZ)_XhG`aX%Nb2gPx1SKiU2oPBOV!X^2;iUGyJPWGa>CxnEZq(!Tv(V3bC@!}KZ3Of z9}?FVe)aVcqj@ExyDH6rF!OV*G1VM>Ws}8W<+A2nuhAi7nCH9a+yfmW;3tRbSqRnK zP2Z!=2(-C`<(G0jjprF??w>Iz6$$Zsv@2g%dhQSnFAt#0K7i#%ZrV&faz-i-`P1>d z0&2OHWmU*&lemFoJYz`ty%=t_F5pl>l$BgLN$k8o_f#<(b3j;|gLFO0qdvRc zZcmaBRFl=NbGR_mrI>ewDBO>IecHWlumtB?{*GpUvZ2+E#1ee*kqe*71MfzMg^{YL zA7UlvB=VRKdGUlzHxr(Cn>hI|x0P5|BQ81F}J&MTJ0mnnGhahYgpmi{pvR75Ohodoqe&SZrM2)5v13> zpS9r^Fnz286(V(Kw@+}rGn}T1OM=YL5wevtbOAEAlE2DTbaj0+LcFpu)eck}T8Yp1 z>foyA{}%7q#>b)BB)G7eTf=k`p?J8Qf5g$WdU zw;)GWv##{C?3X*zB-{4qPf}B3;k`-dK(NyD%q;w6C4)xe90oIcE64K#!qZ=b>nlyC zXu;T3Zw*RGCAm^+l>cRjDLEEp!_waB7;(e=b!SJ#?krObctPJvou-uZE^k&SbzGS02L?i(d4 zAYJ%5%Ao@b%@cp9bh8KTBH@iXp6nTMRD>2s|Ni|els)6c1gIg;Lkkfu1G*cGXcyZf zywZS^m5rpTdYcCkCqw$1J^%%W+Io(*uO-#5vZ@N~XMF?Bw%R~f?W%=aE%og8c{-Y{q3tuNRhqAB2-PLDjIx@ZGdx-Fk~)y< zrvwogl%(b(?gk7)kuXRG<&xKwy(je$%4=Qn7o=6Lh)MqLD#|Kj{aVX7jIw#OV3@yC zmub60Ia&#aDocYuQr~FG&#a?)ez8b={{(D=dA0;({ZQG1c`}1?&kO8qAK@~O{?@JB z|3FyLzfCf?B04(WN2D{j@wZ>is>)@f3$`&E%CUYdn0Ss@ zM5RPV&?DqZM1S#+gQjTAaMNQf4Q?$6N@OF&VN$Adh~DBm=|LS6`0sf%iN-B3yp#$^ zM8tpS-si|$s^S{BKKpOg5vQ2W7(enReb8Od7`oe09*5BGv>+0oxQkkEwpOd(>wB9HDi@R}J92S-JC4pa5sS)*= z0vA+R-~8Sl)`%nX2~qgAP4i}hNC<=|l-LfV8ef3mxbt^k5>~~61;_55oTAQdd+rnl zPy)jyZ}G

I5MUW?)5#dFX#_-zz(bUC}bdv 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 z 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

vkyjMOx!0 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 al9`=_>o&QRfCu~@Nk&3Jyy&69i~j|d9+cDo diff --git a/docs/graphs/l3_perf_has_jc4ic3jr2_nt24.pdf b/docs/graphs/l3_perf_has_jc4ic3jr2_nt24.pdf index 0717574cb002cc460e0967e5fce9e88df346d273..ebaba084130a5c610f2e18d8627d003403e50b07 100644 GIT binary patch delta 34557 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 F0RXc}LL&eG delta 32893 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 diff --git a/docs/graphs/l3_perf_has_jc4ic3jr2_nt24.png b/docs/graphs/l3_perf_has_jc4ic3jr2_nt24.png index 0804e11c244472d039fbfe241f755c8619d9ebbd..af0ae99f22ad990fbaab19c6018d1a83e4e7b36d 100644 GIT binary patch literal 99251 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 literal 76368 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℘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⁡k~G+kram{xuIQQt|)DbSixn3`^N*%2)`#L6lw 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

o^~+C)1ys6L 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

_p2gs;MKO!M9M1>a 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 diff --git a/docs/graphs/l3_perf_tx2_jc4ic7_nt28.png b/docs/graphs/l3_perf_tx2_jc4ic7_nt28.png index ec691cd3e97a419ff6e28f04dc15f2fc42d6cb1f..b2085567e9ea125aad64b5df88404948852c91c9 100644 GIT binary patch delta 104 zcmbR9n03x$)(s~)Iiy87bh*RtsWe~Y+& delta 104 zcmcb;nC Date: Wed, 27 Mar 2019 18:09:17 -0500 Subject: [PATCH 041/109] Minor text updates (Eigen) to docs/Performance.md. Details: - Added/updated a few more details, mostly regarding Eigen. --- docs/Performance.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/docs/Performance.md b/docs/Performance.md index 37d6c0267..8c326f870 100644 --- a/docs/Performance.md +++ b/docs/Performance.md @@ -183,7 +183,7 @@ size of interest so that we can better assist you. * multicore: 64 GFLOPS/core (double-precision), 128 GFLOPS/core (single-precision) * Operating system: Ubuntu 18.04 (Linux kernel 4.15.0) * Compiler: gcc 7.3.0 -* Results gathered: 6 March 2019 +* Results gathered: 6 March 2019, 27 March 2019 * Implementations tested: * BLIS 9f1dbe5 (0.5.1-54) * configured with `./configure -t openmp auto` (single- and multithreaded) @@ -197,6 +197,7 @@ size of interest so that we can better assist you. * Eigen 3.3.7 * Prior to compilation, modified top-level `CMakeLists.txt` to ensure that `-march=native` was added to `CXX_FLAGS` variable (h/t Sameer Agarwal). * configured and built BLAS library via `mkdir build; cd build; cmake ..; make blas` + * The `gemm` implementation was pulled in at compile-time via Eigen headers; other operations were linked to Eigen's BLAS library. * Requested threading via `export OMP_NUM_THREADS=1` (single-threaded) * Requested threading via `export OMP_NUM_THREADS=26` (multithreaded, 26 cores) * Requested threading via `export OMP_NUM_THREADS=52` (multithreaded, 52 cores) @@ -208,7 +209,10 @@ size of interest so that we can better assist you. * Affinity: * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 51"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` environment variable was unset. * Frequency throttling (via `cpupower`): - * No changes made. + * Driver: acpi-cpufreq + * Governor: performance + * Hardware limits: 1.0GHz - 2.0GHz + * Adjusted minimum: 2.0GHz * Comments: * MKL yields superb performance for most operations, though BLIS is not far behind except for trsm. (We understand the trsm underperformance and hope to address it in the future.) OpenBLAS lags far behind MKL and BLIS due to lack of full support for AVX-512, and possibly other reasons related to software architecture and register/cache blocksizes. @@ -247,7 +251,7 @@ size of interest so that we can better assist you. * multicore: 49.6 GFLOPS/core (double-precision), 99.2 GFLOPS/core (single-precision) * Operating system: Cray Linux Environment 6 (Linux kernel 4.4.103) * Compiler: gcc 6.3.0 -* Results gathered: 25-26 February 2019 +* Results gathered: 25-26 February 2019, 27 March 2019 * Implementations tested: * BLIS 075143df (0.5.1-39) * configured with `./configure -t openmp auto` (single- and multithreaded) @@ -261,6 +265,7 @@ size of interest so that we can better assist you. * Eigen 3.3.7 * Prior to compilation, modified top-level `CMakeLists.txt` to ensure that `-march=native` was added to `CXX_FLAGS` variable (h/t Sameer Agarwal). * configured and built BLAS library via `mkdir build; cd build; cmake ..; make blas` + * The `gemm` implementation was pulled in at compile-time via Eigen headers; other operations were linked to Eigen's BLAS library. * Requested threading via `export OMP_NUM_THREADS=1` (single-threaded) * Requested threading via `export OMP_NUM_THREADS=12` (multithreaded, 12 cores) * Requested threading via `export OMP_NUM_THREADS=24` (multithreaded, 24 cores) @@ -312,7 +317,7 @@ size of interest so that we can better assist you. * multicore: 20.4 GFLOPS/core (double-precision), 40.8 GFLOPS/core (single-precision) * Operating system: Ubuntu 18.04 (Linux kernel 4.15.0) * Compiler: gcc 7.3.0 -* Results gathered: 6 March 2019, 19 March 2019 +* Results gathered: 6 March 2019, 19 March 2019, 27 March 2019 * Implementations tested: * BLIS 9f1dbe5 (0.5.1-54) * configured with `./configure -t openmp auto` (single- and multithreaded) @@ -326,6 +331,7 @@ size of interest so that we can better assist you. * Eigen 3.3.7 * Prior to compilation, modified top-level `CMakeLists.txt` to ensure that `-march=native` was added to `CXX_FLAGS` variable (h/t Sameer Agarwal). * configured and built BLAS library via `mkdir build; cd build; cmake ..; make blas` + * The `gemm` implementation was pulled in at compile-time via Eigen headers; other operations were linked to Eigen's BLAS library. * Requested threading via `export OMP_NUM_THREADS=1` (single-threaded) * Requested threading via `export OMP_NUM_THREADS=32` (multithreaded, 32 cores) * Requested threading via `export OMP_NUM_THREADS=64` (multithreaded, 64 cores) From 22768bf959c297de934855483117cf6402eaef2d Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Thu, 28 Mar 2019 17:40:50 -0500 Subject: [PATCH 042/109] Updated Eigen results in docs/graphs with 3.3.90. Details: - Updated the level-3 performance graphs in docs/graphs with new Eigen results, this time using a development version cloned from their git mirror on March 27, 2019 (version 3.3.90). Performance is improved over 3.3.7, though still noticeably short of BLIS/MKL in most cases. - Very minor updates to docs/Performance.md and matlab scripts in test/3/matlab. --- docs/Performance.md | 11 +++++++---- docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.pdf | Bin 35304 -> 35291 bytes docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.png | Bin 109980 -> 110443 bytes docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.pdf | Bin 35818 -> 35828 bytes docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.png | Bin 117134 -> 118143 bytes docs/graphs/l3_perf_epyc_nt1.pdf | Bin 32633 -> 32709 bytes docs/graphs/l3_perf_epyc_nt1.png | Bin 77571 -> 79325 bytes docs/graphs/l3_perf_has_jc2ic3jr2_nt12.pdf | Bin 34401 -> 34386 bytes docs/graphs/l3_perf_has_jc2ic3jr2_nt12.png | Bin 97432 -> 97791 bytes docs/graphs/l3_perf_has_jc4ic3jr2_nt24.pdf | Bin 35171 -> 35191 bytes docs/graphs/l3_perf_has_jc4ic3jr2_nt24.png | Bin 99251 -> 98566 bytes docs/graphs/l3_perf_has_nt1.pdf | Bin 36296 -> 36279 bytes docs/graphs/l3_perf_has_nt1.png | Bin 82684 -> 82950 bytes docs/graphs/l3_perf_skx_jc2ic13_nt26.pdf | Bin 35104 -> 35056 bytes docs/graphs/l3_perf_skx_jc2ic13_nt26.png | Bin 104341 -> 105991 bytes docs/graphs/l3_perf_skx_jc4ic13_nt52.pdf | Bin 35414 -> 35382 bytes docs/graphs/l3_perf_skx_jc4ic13_nt52.png | Bin 101900 -> 103651 bytes docs/graphs/l3_perf_skx_nt1.pdf | Bin 36581 -> 36599 bytes docs/graphs/l3_perf_skx_nt1.png | Bin 84908 -> 89678 bytes docs/graphs/l3_perf_tx2_jc4ic7_nt28.png | Bin 94620 -> 94620 bytes docs/graphs/l3_perf_tx2_jc8ic7_nt56.png | Bin 102875 -> 102875 bytes docs/graphs/l3_perf_tx2_nt1.png | Bin 71627 -> 71627 bytes test/3/matlab/plot_l3_perf.m | 5 +++-- test/3/matlab/runme.m | 18 +++++++++--------- 24 files changed, 19 insertions(+), 15 deletions(-) diff --git a/docs/Performance.md b/docs/Performance.md index 8c326f870..2d9d198e6 100644 --- a/docs/Performance.md +++ b/docs/Performance.md @@ -194,7 +194,8 @@ size of interest so that we can better assist you. * Requested threading via `export OPENBLAS_NUM_THREADS=1` (single-threaded) * Requested threading via `export OPENBLAS_NUM_THREADS=26` (multithreaded, 26 cores) * Requested threading via `export OPENBLAS_NUM_THREADS=52` (multithreaded, 52 cores) - * Eigen 3.3.7 + * Eigen 3.3.90 + * Obtained via the [Eigen git mirror](https://github.com/eigenteam/eigen-git-mirror) (March 27, 2019) * Prior to compilation, modified top-level `CMakeLists.txt` to ensure that `-march=native` was added to `CXX_FLAGS` variable (h/t Sameer Agarwal). * configured and built BLAS library via `mkdir build; cd build; cmake ..; make blas` * The `gemm` implementation was pulled in at compile-time via Eigen headers; other operations were linked to Eigen's BLAS library. @@ -214,7 +215,7 @@ size of interest so that we can better assist you. * Hardware limits: 1.0GHz - 2.0GHz * Adjusted minimum: 2.0GHz * Comments: - * MKL yields superb performance for most operations, though BLIS is not far behind except for trsm. (We understand the trsm underperformance and hope to address it in the future.) OpenBLAS lags far behind MKL and BLIS due to lack of full support for AVX-512, and possibly other reasons related to software architecture and register/cache blocksizes. + * MKL yields superb performance for most operations, though BLIS is not far behind except for `trsm`. (We understand the `trsm` underperformance and hope to address it in the future.) OpenBLAS lags far behind MKL and BLIS due to lack of full support for AVX-512, and possibly other reasons related to software architecture and register/cache blocksizes. ### SkylakeX results @@ -262,7 +263,8 @@ size of interest so that we can better assist you. * Requested threading via `export OPENBLAS_NUM_THREADS=1` (single-threaded) * Requested threading via `export OPENBLAS_NUM_THREADS=12` (multithreaded, 12 cores) * Requested threading via `export OPENBLAS_NUM_THREADS=24` (multithreaded, 24 cores) - * Eigen 3.3.7 + * Eigen 3.3.90 + * Obtained via the [Eigen git mirror](https://github.com/eigenteam/eigen-git-mirror) (March 27, 2019) * Prior to compilation, modified top-level `CMakeLists.txt` to ensure that `-march=native` was added to `CXX_FLAGS` variable (h/t Sameer Agarwal). * configured and built BLAS library via `mkdir build; cd build; cmake ..; make blas` * The `gemm` implementation was pulled in at compile-time via Eigen headers; other operations were linked to Eigen's BLAS library. @@ -328,7 +330,8 @@ size of interest so that we can better assist you. * Requested threading via `export OPENBLAS_NUM_THREADS=1` (single-threaded) * Requested threading via `export OPENBLAS_NUM_THREADS=32` (multithreaded, 32 cores) * Requested threading via `export OPENBLAS_NUM_THREADS=64` (multithreaded, 64 cores) - * Eigen 3.3.7 + * Eigen 3.3.90 + * Obtained via the [Eigen git mirror](https://github.com/eigenteam/eigen-git-mirror) (March 27, 2019) * Prior to compilation, modified top-level `CMakeLists.txt` to ensure that `-march=native` was added to `CXX_FLAGS` variable (h/t Sameer Agarwal). * configured and built BLAS library via `mkdir build; cd build; cmake ..; make blas` * The `gemm` implementation was pulled in at compile-time via Eigen headers; other operations were linked to Eigen's BLAS library. diff --git a/docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.pdf b/docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.pdf index 6a8c3a5ef24c132b299dbec87359f98712ff9b97..7fbf4abda4ca45f03fd51a93f68e2b0099fb5e9f 100644 GIT binary patch delta 33733 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 bn!1?SDcBHDGWkHKJg1Qbm#V6(zZ(|-jV^cy delta 33888 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 IPy5IJ0kboxIRF3v literal 109980 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

~KIiKCM$MfeEnI+$?th8B)T>_gLYggL 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 ON01Pe5h)eY_5MG?9_Cg6 diff --git a/docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.pdf b/docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.pdf index 05c7763813be24c960de3749ef40c2dfb7216ad7..d7250eff6f036389ddead94aea5a6a12afd081af 100644 GIT binary patch delta 35206 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 delta 35192 zcmYg%byQqU@MRK$Yk~wABsc_jha?0E?l!pV;0_rixVsGQ?l!o)yA1B`7Hs)`yL)#3 zsdu~2>*{*vywlZn`}TF>hr`4VQ7(wwtQ@Rd9Nf`=;Kz!g6j%AZ&` z%%*ozmB4^v#`h%nB!e2or^Th!O7I-8_O>;bvY>U%?J?;zNC;fK{{Hdy3Iq+|!Pd^} zW!$DK5$^R2_#y|m7$$9h-F5X>-)fA{O3xy?cvMy3ytSX_*26}B>4VxSlIIl{A?`va`T6* z_L3^!_o9GkrvjYNuDKJNsqk{&Z}YNA+IOulK(v(6_E7PP{<_}|#%_NSzrK6TEZUt? z`gi&I2RnlK^}u?q9b8B%(06y$nZ8eze_MRv4$gj{YgOcnpt!!4@4vs9Upaf;xBykq z#3i>1uY(Wqa{_OVrw<0AK+IxVb(Z86rq_^k$yF)9rIyW*1&R@|m2om_}y8l5M zXa0YHECuKe`goSGI-Vh;56*;;u-aRd36Sehjfbw*Z+-Z=?xyN_Eq|HTW8WfqB95{( znv7E++r@me!^1<&nom)Xu}}4qt)uDhC~rGAhyN!#_BxcW^U-rd-G(*n0z1uUJ{XDa z8J?~Km2QosLgarC8@7G9v?vhP(mvC|PF17b8=rDe<8jg0GK7emVVNYSra}BMSx$5A+ zG4GaByydg_4yb2m0t3s!$Lf97h>kHNg2mmOkYHHkIkg+yyf{{`%vy|j5v#fHg%=hz z&XRh!X3w|jDF4urY|Qdt9fvY|CaI$OPmx*QclwfA@Qt`e;IOU@2GwS3z-OKN2G>TBbd1p4iyOyM->3@! zde9bP{RTy#B1;X~of>-MZGP@s5N+up;W%uouE^+Tnj~a_UotQ}{_gjX1;N{X^!n&* zCr3al$U;Lg1jaT3NjcBQa5zQJhB^i+xU^*kAfw@b$#~}-ohW}EOC(vWvi$D32LQj! zC;ITw{mY0~(B%lOuydKJz$AU7PcL6>xRNc?ylt%-n!0}ynR$1lz7QV?LT!0Pm?5=_ zMtRi+_k{%?OQv<*I__{Vc9q#!Z|_;J+Iuh77s|IV!EJz2+S-kknS@H^ZI1=MXPqkb zFAE5qyWb2u=YsD-!Vwd>68^;R_?Ic2;sPr1+`qx5&AP@8=8v}y?0YZ!9;2wA$W7t* zh}u-DXc6Zc%D*0`O`XCC>Khv-&kQLT=x$OOd{rkjv#f|YALg;j3%7yGAu9U~?&up( zNdKyT2G)9n2qPzL>Kn6R-;OnYVOX-Yjy0yWz901H47f*uSBf+4I-jZ%tAGbI8X-g| zEt0xERCNCC^o`>Z;7zC=k?dLxzKnGpe_z_!P8d8K_4Y|&@VZ+Y8m^sZ&?5@Ht4u$N zcm0=;ygFx`#jnVytSj_*<4bl#b2$U*m2QWvV1voI@4i?-q1o@389zsPa)c@C=>EN4 z1zSZyWv%+*mu-qxDtFFl>FX|%J|TiEFA)Ul47+ao{zg)q&FtbKCwW&Y0c=3Ftt4#2 z5lg>l@Zg%p%;8;n7=`NKYA3DtIvD#|umlt}JHr!YH0^=g@GwdyGfWA(MTW-T7MDmL zz}G`3LE-*zMeE2zL)I^1$i_1w+$B3)-ajYJ^a7^3thw}^4f^#|K@L3&J)H8=>W!m= zR#gQQ^f*R&I3$TqJ__i*pS%@PA@0gJVRw^|c#t~;@P`mVUi6i5X@aQas zShrzHZ@`C%y6|gp(g(9|~O) z;+H541F9(9F#vUws_(vgmRQe_crHhk*-G2YoPNqi?fbO-bUV{`_Z|Ltrb+<-p2F2Z z*lV($>ASu`LHg;sSjcGGd7!W*Yu%z2#N24^pSDCS?v#5Bz7Br_oWEoptCgBDpSlC! zNxH?Xr5`5|T)?Y^;V<3`Oo?srOHVRr|M34E=W+#j!+q$|e~uzdn8Dz#d;D^o&3r(y z9sxu4qZwziaR9&pSWmb6IOM_Kt?K;4VOV+-6fBS~Sx~7p-vEy%t+X;MeRDa)Ud~`FT2+vtPUuj>!#Eh+E+!5^FN8B zVuW5m7Bb+^3T?LgfQXs4D?A`Ke#7y1f1@mf@>5^@xBGHPu%dX2abc9?e<5TgW|OhD zKSUUYY_2IA4Z_L0Bo-Ud=ZqMn9jl~ZX5IgK84B8@V6GYjYz9gXCh*({9gkM49i#Ny zJcJnjO}}A0;8MHzGVO>&c$fkg$?XKjX$MsR`%8<1M|3kv(e&Uu#8U}l;&LwI(&EoA zlsez2oz>#c59|vU&^E#c1mB^0mL0@;WbrGl4s_*nZ})|EH!6R3{>jY@fa^-zKO}~_ zUE8KhDTeXd8xnrb9f-L$a$@5)A*BBrnLCvo3uVO#0wcJJdc{C08h&X_`pM={ajU6y zq7%a{DO1^R`ACH1VX4_WV8Q>D5@jZnJKnwFN+;uDW zcQ001*vstrF$CM5VW{aT)M}~Jv z!*NC*gumL9U}KypSTN@SoHB68@6v66r>$wX*EgCxDVLd)ImUM9_w5=+Jy2a{qBHunM|zPv+@+ z2JTj00l|>cU7D-tpRg_i0z57pq#}u#q{eTakfr1T))Ui7yRQB}5VV_+4(L>auB-=q zCd;}SQy_hFnI^E~yyf9GbkcWo8MhpMv|R!N{pl;A3Kp%O_d(TtAgD;_cCUMS01NKT z#`GDG_NGx`Y6Z~V5X*u`b!^Q|IK00zE1|P7w>!!eF{&zv8W;b_A4IlS?;$76E*YKi zla9p}(!(}P-{CGotO}7DQd+=OSSmF|t!U;nZC&5pCjzqIz(gOTh?8@itmt+)Ev)K7 zm#D&Cx{z6iW@Iez&-qN*6k+r5Z~0qVwr@ z2JL>JUyrwGr6Nglu_b(33{YqQ+9dC&hL({z!=$YT${KoVd?Q>JH>u<3|6I)hcek9- zzCDZ5L@jSFDi(p0M(m;E)(W*>tb#MS0$?*W@S$A9xB#8Di8NExHgAg_KdP`=RSTE8wS0|}L$vrT7wm_qbQUg&fIXb1C_-YgKJG0|@oZ3tO-AEs zzCL=H8Biz%YH!1sl>dHYm4dg+H78hBLD!|yRN=29Ug$f)QsKAZ!HILgkqdHn_lX_<5SOI<9sUS}*_Xul7~*)py0uoRra@ z0mRTqFduDf7t-_di8z&30bXclu{ye0`_zCQYW~rhtoSGp(WPfzu_#16&|2D%*p+z! z9Z-L;qHxfY1?ez=95M>f%y+mLO(emxIm#1Df!LmU#voPrI;O2L+R^x z(0a1s#?<6fW72B8r%zM&H{*`U>*A(8M)e`FzMm$YGt{i6G3?fPJIAZ_oBfg;d5ZY( zz@gR=*ubx|WI~@YmN_!M|191kTfpnb695+dShG~3;^!PC)*i~gm^nqHF4&Hf0v0ju zP9h*1#f2|z-Y8amj3p88hSv9}Wv12aPwp44Y|-l{Up`ySkW@<|5TkNiU=Gm`EX(e$ zDM7g9TN0Q05Ki7B;{pR$ZRu+PY1@TE;BSB$GORfYeYT$qN#Xom@4~C>Hv5j>n@kfZ zD4a!wXKWLMiQ;k@O;=G}d@S`6xn2L(FNt(nO&k}rroMBJIb(6{2psDApQpD)3ftQIk|33!V< z@Cu882ooso;sdyXO9IUVD8D-hNar=|zjghg+{=$?)1kfp{i9XTZ~OOm?^MVl1Gv}w zR^{IPIhB+`1Yxmmc&)eEtm9$m@BEc2bY4Hj`3+PVZiQ>Oulo**=*IwQ+F>r8h{HO< z^?&m9@CzRzfJml03QNy$VZXAIB*7|&wcA4bjz0p`@~m`5a-yaVa1>Xg0f|wmM*fWJ z2w~L%6MZM&g*k#o3mgx6P9j_;Z0ROsHX9jVBE^x_zwtL5l!YnGl?N7VaWP6n2d-0F zhoU#s(*^5-7!PPWN_EN^8hU2}7iAc&rnuyQ|CID}THj6S z;bS_SKj>hjaSd&(%9B~Z1ItTm12{|96XGXaa}&a0L{uLaI2`wQ?2n|kR00ht8j`U1 zscGpX(V@LHC0l7n#1qj#a02ft7G-Hu3?$Z`a+O09ILP<~?CylvI=9`+hvJ5D9!%f3 z^L#GGt*F&Gy0{GtFUGcA7Xrs%JU)DE_$RRSOR?V@6CiORDK`o_N{o&H2jlvMV-iZN z-8}!rxbh4;+w&8glBz+NdP{3kRHv}%@9tpNmgOU4W0Nz?NPq-*9C79@xqbC}2s_T5 zz1E^7$%8%|UDUMgyLXqL)$SV%zozk@uO3FW)R2sdfkB8V1(Su2f~F+!!v=Zwf?(fx z$$<4TSY(8>D!CJQ-V!gVT2Z42{Ul)XwT}Kt2`%^7R>Qq~Pfp#P?PL4(6IQzJ z{{uh491Yhnq_&~&C{^5Bf1^TI3=tI929@5-@SBQq{eaMzKT+;$Bm-`&pR4k|*YG;w)UmwhyGGcgO%#!bwo&pv8v%g`UqNz!QPo#D{`PJCa`u*tUNEH~PV6?xA0 zOFwqG><%+;yHm7s#D56+Ud1IBq$z3Eb?{)yu<#TugU^T z){ozOMOHN-w$Og0bVaxeT3UjU$_bj}@0*ZMmV?Dh7aN6Wz1U!Qmtob}F?`g2 z?>VA3fb~tzyMbn|iwbcGjmP-f{3L?uc0pG3s`D7RJs()9LQIffSChn1|FB_kU%K`l zE?opvHWcC|)>}B8+zmT)4+jbtX$~2py5QU4SU{TLkHpgKB8r9pM^#R0AgH9N#^)gWpFIq3+Axz^ zfz=4gC}~l8Lpj7BXnoj9Mp*BhwWtT2*-7q1ck1SHN_jUn;0EsI3b*}4@$r5r#2VSt zOgivu$)Y~wUq6L@LC8(7B7`v~E`gIhAg3PfvoCP!-bmb9h6<}nbSS_YeVr73Uy{DQ z7mYmmS5Lx0C1bmr5rcoDBIHn??>j45m!x&QKBv=YMdk#aQZK9h)VU<0wI;72iQa^Q zs@d=aSw0Ds^#mAiI;aJSmtC;7XcqC?&qVg=A3(-t+^7@!8ma~KM>l2O9-^9F`Qe2I zas-NDE7sF>qK?YtA**`awowN9DRy8N{diq18>Fl2A%)AtW#msq<7s>oYqJzWP)8~i zpyuEr(2&WjCCbz}lDV&8cGcO$kkfyxMBALcW-=}U!yGItC)+gCZtMP8D{8C0(CKw@WsYJfi(%*kLSdbA*CgkU%iJ#kPX z4KF@Y+gR9&WTjBhEX=|c5l}~_8@?p2_>a%xDk?OpxOo9AP&XMsCn1s(C0N&sqA|nJ zs0grbQ2`s@tY6N^j`Rdl;YC#2^G{X4(<`i?3N$1`-zkNt0JuPgBUt;F$Qu3D9FvWl z7|5zOu!wC*W7*7FJN~Id-`MqiV>s?{Bcex9uVaBmXiYNBk65UyZB4t!Z+=^G>ICoe z?Az~{pxO%Y}z5*2!#P?V< zF9GWql^1E7F7JQ*>zQX+O(ik1O!BX86P zu;%7s7YZm@{~veJRXAKjE>%~scdRXT{SLRC_j(tXs;vWq`VOV7cIPOvUrzvVk&d%@ zeex&4$M*Qg4uEzpJp0DW*h=$M8- z8IJ+pViXEGV)EEaedmc_;0r6;PJmH@-)RZX4$!>+c(O)h~%RyB0}I;TC%- zX91K)|F$nYW%^%RpUIiAj_=*C3M^5qOqd_ntBlD-0_epFrp5kmLbG^FXv-4gh;cd< z?d^SHn#CVG#VsVJ{T^6e0<3Z!FjpbZ(KAc)2w+dllszzAhCY>XU}(|M zTfLS4jlh>%<$+AVrZ|SoRVn_h^2-0F(LScUBlecoW=icc_t{5sr?#r^wdOMv_`dh8 zt7VXO)68H*vEJ|O^`9g6!hN&^JwwSnAKD7_iD?3T^l^4as9aI24LZ zVOvU8^m8ORvsS=|DKiOh0{!T&J{TzfICgF2GGwuicTRH^!vQ-o1tcR!F6P;(&3S0r zEaFS^KkM3I&Kmt{!ZA_{S60i{qHRR1h?p6=}toFHOf3?Z`GV8P*#|&RyP3A?4YtH?;^%)=27NNWd}H zL||u=jWyo_nt=l~F#~?BXb+7D?8}ju=NSWHMOKGKv~(LM;8xgVo9Lut&41h1E6Y&v zC*`B+2JIIbF@PSbT-9UEbN?Vdsya&VPm0C;q^;n98e3b=87=9kBXf#X32cqo)Se;3 zH%^_of=KehhP04>iv; zQH}|h1ad9i4NRn`B;jZ;rJ&Q|s=aE~(BfTai9JS~^)5AukzyPN10R^6JChDb|H@3Z zewWzNm4HJ~N{0Gk4LW_(1c{astOd+HIK`-o+VEc|&DIW#5+CX*nM_!6E&5`o96wvc zW2v;zm(_LNF@O^S)Ds084CBIlMEnQ@8!lQqqN-I7 zyR56KxtvTjpriE>{f2x4@yjt`(R2n%i;bga@CZMg6e9URN*XZ2ny+>J`c6;Wy9c#&0o;Lnc6cQr`eA=ZDg zq?~Pdi;3!~l!NAW?8yZmCn!hAZig2t89&2~*&e@C89=1oD|s1{Il<;w_$4|v4c`1z z^+p5QK?^1>Xgws~wt-fmxEU6g<=*xS;6B0k5V-Mjj;e*-I~JL(5t`%5Q7j5Vx~gwn zR#KPf38X;=>b46B9fq20*J!mfCfLwVvQL^8p+26=r#I;n(?71mfIy4wd3ZW^v#ZXt`+8qy`j%0fm|9Vf%)K1_DeVsWfxPQ@g zr`>sGmj#NSlK+0vL+BqtZBOrg)9_l4%cbwBcRDI-lqY(B zLIxWsAuUrG3^Vu!rxm#R{Kb(SJW!)7qp?0X8oQb4@e9@|V@VT)eJ$XyF0{YoO2j}~ z=L6xDBuh~dBqwh4TgYc#oc4Rn>_U8_meL8FQ}X=ETqU^EE#0d6WU5ez`IE-4<(u;Q%^W zd;wj}!BO@jy-Wx9P*4!~0E?Q-4Y(O^M@+nFdOR4;-BH7Lbb7wM>!$U{%E1JSh4B79 zp9tK=yx2C`=fEf}H#ZT08p|dfd4(*OGI^g7r8w-B{{tKt-F;E6=>8;*D6ab1cR{rh zbpCf|{j<&tTYsVw#g$9@GiEz@#3yYG@AJxPf8v<;(-}lX$My$)9~+t z87zCzxL)Fo^O`gM(ENI_(*Cq!^BNf`d?fBAe8MjEqXZ5uQ{URnZ2lHkZiO!*RW;ei zL`h*)?)mKXOxWv=S@&ju^g7L6PR5i@K!sOqHGQext5<1DFDDfKba$se-YlQ&<>iN@CwCq z(7)|lNfuJlJ1L}*I|Fx6#txR9aPHXI^MPGr&=JA-pXEp%QP0K}!Saur{mR%C`QuFz z946NK0lA(tm{3Cjoz>OjQ2<!*&FMcPBd@Y5$%_b&)dcZXfUvdiC=g_=@W?e5RP4qZlY9;CpN+LK%ELHb@N{XE$$ zW?Eq;{=yWjMP2QbbbsaGv?JN`vUshX@9%0?M|2732xCIR9$rP2Kxg=eNVN zl{=9{#hv+~DD-;}(0T$u;FNp8$3{TcyY9*8h}Wf`Mnf4^JX;b#iwzHPy^^NNrGAbT zdtzWb`vDWc|H@~!nNY8{LPO|Rfo+Lq3AxGW0LYW#RbhNgNlvDyyp$Ykyd+Gb*NhAB zvFiu#(tOWw2Zx3EMjV%W2G23lv4&^Sm(~}X!WO96QgqOhsI#tE=QB+ z)cC-=5%I-r3efdQbt{ewq5iqm9QZ6s!YT`9WF+p%*nVqG=>YO?iR7JDanOo8q)J5! z@(Eo~_?(Fp7ZuiUZu0LWWlImjjC1rSeJW=CGv{?av^LdEx+zbPzULP|iiRI_0at9( z{svS{#|Tl^72HWi#8kF^5c( zsMFY}x1&(Y8wqVVRAC&clbw==RZQ_U)v`o-P)Qwh3V8>VhbL>0kH?Ql5td9Gi4|}f zG^tL&m9mbOHmbr0!=<<3`mrt8nYGwr!9TUeEE)^qhvX6xrevPQkDx{BSxtQWR}iIC z*^$KaDq=7qjyh?Rgh+rOIJ~Myas`f2?@=|c)k}B%ILIl!GvpQk-IMir9CJ&k8t1%m zCttKn*TFOIna;2DP7jY>5@s#nnUD&@eo>grEg`wy{Oj{&@{xes=!e`m;vZB81?~y) zV4qN2T4umL)sc%{e8^R4O=dy7cS0Nc+xd=;mC}`K)(W0#jRvnONIRw5LOcNVS z)|-}S9W?fLGGkse&$lHB*H2(->~RB;z3}T=_{r&-K!?iNt4&Kkmkpw2 z$7ze{r&u0Y#A5%uuo`%+?50M>mj1THJ$AmJX6DE%fL~ zyIp{%%bU9v&^049M+XZ%_d73$NEDjWstFvsNmDX%J|W!t_4-HXxO>8RP_uT~dr{0t z%`ipeC#^=MW4JBwCB|(_M6UI;`Bpld@`<}Q4fuR|K;JWem#0_Uzu4vW13CC9{R+JS zW|*3z!HY?UZ8+L2!Q8(H9dsU>#)j)RlIv%h8jha*d6;6cwF~w%yxf^O1dge#W}Z`D z0!F5%3s~4)7Fn1NzMp3(@`yw2gbY^2WNdik6gSvPZ_HM0g^*}h^@J3VjIzC}4BIBP zDXx{iYq5~Jb_SKD(+}zE1c)>r@Tx|-HF;GIUD17X9Z_pRHEC~>IAs}Eze>mVd_lNM z)d-U~nqo+r_XV$erf?_GpxH67N52HP4RtosWaO288F8TE&i^#eeZo4fo7a2O((EyU z`0!nAhdb%Z52WdWo$xOs(=Mn#2YD(?Nv<~UJB=9Jhi{Ya(lZJoSJSHzv=_8a@kkR4(^q`c|i^JqjZXfIA%xFhccf&t7hVdHl6_I(92GxsV3VkWjn&*vmYO@Rs5 zSENijHh^>RdHD0tRN2;(^bza6G#3TeWYzFyDl))7*Ey`WZ+1+rl9b8C~^}qa${Z*>%)biP8qD*@| zMmkSzLe!x82f|HVxpmE{mc=DWKX~$&Kb;+>vSO8(!-rplOz}LQn`+GsMC}lFEL?WDx6ZzFXxaqg6alhH<#A^d@YLH%&7nhYB~*pO2pSM8EWZD z<)0F@&)@H-OyZmwe#`o-3i%_0QJ2I~v#D@Vn`BHq+AIr6@+-{5=-WQ`0BdP*h7QtI z3#z$)V5g+})IF(!oV{$@bcg-&&62O(LA7U3p!IO=Oj2?cd}zfr=J{ z20BuKzsm>C^qI=V<-*2V5*XGy^eh$Pv*?mwA-_9V+r`pGTaBP%;2){wDk4fOgSgm! zHMn9N+q1<2ub2Bd{bjpV7k)3#rz#bT1VvJXsSWuTaUZqT2yd}+K z&u)S?o^^mJ&;%x+kQ4+h4~`a2+@`~LF-*FHXab3#i(=C+51T~L8Y5DfJG`pxF-^KH zO}zvd!`|l*{8DXm2_=g8DV1ppmLUxjc=VP#p9iqnbCDWG4<%owQy*oz0+f!9W}( zxbg^qfr(J@-B1Amuw*=1P3*Dm{us#g)MdD$I0&OA=tPyPgo4|cPSaXezdIVzom()< zJDUL0IR1C%b2N~K+4p^wekGcpRGMh*5}GOq755-kMEs8CpAK_P2L+f9j`H>2LmkKR zDO~cIqQ*1r6KJ@@8-jV$MLC?dP0|b>Aqg;WX_|mVs~+V($pTC%^%1K{*bGqz-eyEC zF?n@=lw}zha`C2frD!pr?pZjH34QhwW4e!Uws!Ya%FZSop{fLWZv8^CD1Iv!>5O$| z1)Gvv2<&_L9YduOjxSrX_@{3HUuQyA9e%h(VQt!9w`DrSIOg-p~mlDaYj;#!FqSm>kb(_SM?f0I@ z7G!&Fbo~G#82p(MfkYraljLGIXs{Zb_QEeU@`xnx-Bkv1p$6*b=pqJTgBw`&v+B!z z3li(i>zlS=;5N>pWQ==l<8jdJ1mPe8OsWz*zC zlvK>+XYL~>!$q^6F<)y2@UoBEpX`C(uC$>7!u4O*T$Zmn3NuhsmG3Li%8=b3x zpd zD{#nS#US`gP0rsZ@U{}er$?X>hh{rQ0OsSy1ixf>fI!}?>OlL97*m@P=D&@Wqvua> zi;bRKyETH7m~CcHwz~!W#0HWae|YW!`zz@X6MbM()jx4#{P=U7BYa>Dag{blm{kHrjObV}9Db zIhZ+7uT|^isXhJ5K5K4(etD~?+W*OgAp|mahWf3}z26IS*NJ{DKupK&)VqYiDO!r} z?Y_g8S5Y&Go(B4B#Nd2y)v@B-5$RMb zVIQ20!;~56XGvqQkGD!FK*3&<+L)@{HSyA#h_lH9g2sCNMSV?UT^oZC2doFcqbuK* zrSkALbP!hD8(Fq4g9@@aT=v#|{c=_uSX05MAb~Be*WHaLAmwmZ-tl1fLj#fPNrP$) zk?d@QHb=bmj_nJhGUJ-gmz~N(=N93u9!1{^o58@@+PKR523r(aCw=66*TVZYX?BU= zd{^2u1@~5LxcL1iU{mgjpx_u-lA~ATK>71-T>LhX)`#!5k4teJp@AV8L;5Liv*TUP zxWrq91Ww)UB%QvgVP5fMb(t0?Qwf6!wT|6+rsxB#P_WczOo^Z7$aSY^R1`3EgF;kSx!(Da^=x`@2Q1Y_}I*w1L4cbAhz4yJCG(po6+RLq9 zh#QO2tj#f2V<07!G{4XA)a>{C`o`!3+u^t&myUII>$^{;A{wY5P<2ei;_l4pEXgAt z%!-^y7R-(aI_$)Bw7pvO23i$fIq};%*z_Gl?{o^Ll7L}8kkfv~wYD4#*i;5t<@*NL zPtsq65JB~e6vMud63V!(&)Gzc#wzs_Hii6B=K93(`OM>XkO;wtBw>wI7pYnjzVu}* zemW;Dy-w>CPpq*1$^H%|a{$q1in8b{h}w$hz}xJAbzS z*gza~0Zv9w6j}cX3NzM}6oe|(aA8ND4%NPMalu##R!v%l=>53U?-iE=skS!y7x}}k ziJNtyG~A3+4JS4<-2Ot^qNq?*F*lfaf{2S_ITy)F7)a&@Z<@I20@BC4oCCQnKlpS! znI_S`oH(2V3FbKT45-JKgg_%dz~E zPM7xP=j-_wB;HM@5fLzs>QP!GIS`+n474K_vJwuV!GP6v2K>>OCT_g2-F3ZNHyKTM z(%Hn*pxXuha$L_xJ@s6~fRX#p@ZunXmh`5Lqi$jOvQ{A`5zEnccXm)VH&E!>qZfGa z5|;17y9&}uU-oRW;}3KPZ4s;gSn&ZgPx9or+g`a%?JR9IGIpox7TgNk^0=~!yq+$FI=(H)AY@*X6sfmENf!^ntg(}) z>qhAHe@pbPt{&59w%C8-;z3L>M9Lv2J*tZc4&yaoB+r3#jQDlH@@Vq-4)HF_EuC+; zP8c<**I>uv&#FN$83P_Y_g}e6^+Bwb-XY8lx6pXBPGISqq=q|jN%VzoSMgwiS!nI* zDl}3=9WMjWMZ+NUcK^rozxzM`2k06z$%quQ4|ATeIuxC4lY#%UbZ=&d%%SLL`;&wD zn9R@9$ga=f!q!Z^R3rFO;QNAplx_t&dlmgS)YrUcM3bE9m5KRBG1+kA`~ss~tl_Ej z3l2`c9rWRV)i3iYrI%tcpVq|YQid1+-`soc=)EkehXAVjX(V~^7SZe#8HEq|QtqR3 zs(b;QE-K(+(FpbuUBc+R<8gjR#yQm?$18T}rUbT<0L4X3Q%VI!FI99IIJGW!OH7Np zdc|UbA&K8B_Lhw7%v6uvO^qXRbxr$}2tlh$b4y)m@iBHdGtOzrA1!L?6)ogUqCBj< z=FsDF5tOb}n>iCC=N|d>DxEDEPV6IFzx+C5r=kMC?dzr*|2U{y()B4u@Z;r1upI@k z#ePp`EpQ5IjWfsE72qlsEytCz>19c4Th>3x<5a(U7Hb`-Gf;|d3A;fvGVgplBJ|O- z@Y1ZroBnw+RW@g>9HvE|VC^?+$C+9wYROtQX%Rz+OR*P{H|TOGr0MwZE?|W}-2Jad zCmSIcYmJu^kx|2s?&z$~-JBd)ji6+bn2CCO0O{&rzV zGptwV%wL&f1(Nq&bk8puB#l0*g@LiPCl@7~(LL-Z#-y2qXIn9r3?7&pjw1cItY`aB z4l-qGG8c=|m%{%b+(kIfjD3#h_+(kc=)7rO&@i(*U;VrkgW8c>e?CJZ9ppqmAXrD{ zDe6$HYRW)GjFysC7w0m;KlUc*iAmN-AXz3Fb|j2hzU^c=US_(=taGGrX$Mbzv))FS z?LSGWih|G`Gb6_M!yG3=jSIN`2IEz9u*-p_{`9$e*t3Un`-#Y1%*XIgdyr`%(9417 z&^YpR#ZN~j&aY(`@`D>k96yu5q@l`Z6Hb^Qi!kPzE0og_f%S&)1wV-C;x*jWI-U(V z1t-APA<>_|XW9>vuwYv=4)%jo!5VDB_PAtzOnV+f)3i&o_MDw>$;VHQwNwQf2!i=8 zob3VA(fM}c4iG5$E{8jaJ$~jIcn#}&7yhv705Q2w-W+iN{<#v05@>kPo7U)c;Fp>^ zKk{^eA|h|6|4_j%Rxb~*Q=V6T=)Dp zZ;Put$`ZQTu;*;TSL*SF2efr}lvI$s!xd=Y=}Oe_5Zg!4We1TeB zf&+KA2P6k(%7$RpvhKPjLoWd%N@XK(}UkU|%S-iW#p zRkn{d^_L>9t5#GZ=O*-Tl$~|HNiwFYyVt5&vEV=O&R+A&Ur9Kk?&=p9zEIALcUUL$ zci{lJLe8&-=kybi8zpE3wR&tBigZ{HBsHl_tpY}T+U{;c&P|S2Q5Q3Jmq9nR-dfq$ z+oN}Tr3EVpke6l5ad?Px-wMy;0q(*3ZMMAA+6=bEF)xodA;}{hYWkYWl-SdyDoUUW|J%75liw>D?aZzNqdDTnG{nhJ3?)Q^$>y@O9C;J-@q4T0FC$Pp~@ zIsCkHR(~u4+s}P%DN~R>6>{Kr33hD7D3axeo#?ML(;X!)RR-I8a63Ksh!vw$jve~3 zPdF|Zm3WPW{6W)}nYN!4zg?X9Q8L`PqTvQUSGAaW!Uq{H>4iK3i!=gNEEFfw>Zg~i zzKz>)Sn?Ck?ecZ$TNT)|w>zjz8g?$o26FmisAgk_>ZE>R^>g1g=MQJd^c;QGb6gDL zEUOTh_6}cYIhmoHBOS!KjMZD6qyO^@p;NxwoZnc7`Kr~#x?nKnL|n+K);#`t+VmcL zHL$oKs{(XgYC%+qpLQKG^K~!U5aVsRz;THhPJf?|zh!O`-?m)OW=7YRNFT^1*e@;^ zb`fV$;AqJt&Uy2=pnBODw~&)^>BWIRHp-)JajsJ}V?R1EJZW+wlokiX?LzyZgns6f z;wSp~6qjDJ{Nb~@@!LB+Q5sb%Gbdm}&+_10z*gnlG*A43)$po2VgA2Al|AdV=}kQD z@dWrRf^hN~Y#B@oW9+`R-CP)H_66iRl`ALNHwy`SZE7L?T&u3>gL{JY?0)WNE&C+P zBWm(zGp7;DpPjUs15wAVi`&s5j15$!MoY^?4Wg4gpq0`suGtgnoU*NYGk9<${Z?vs z{l^*U<=nT2(2Bz62$&Tc8BGH0Ni^rqWjo)Fd9<`X0`^&z&Cr?%y2Cx3wzv`vaY4eS zIv8LK-ZmXl7YCsqHTiufhUT>=tEdbzP8v`tGzGZ4?Ub7uwnixt&Ua~#R+aC=<_~#gi z#b?VNFm813ygpah@VK1$=+I0&fhrAJS3JV=9@)j+D2*U(Yu^L^g;6|3jUZyH zdjHr3x&_(=|AlLnCiG*}s%9CSDy(H(f{Pv#i|qsPtzel*Z?{Nb&`H=|)T(6j%Uh!B zoS_4ZAu1Ezm@g7f*(iQX*mJRqw&!f|SR#GcnUD$0I zzw_70-@65Cs7^nUjT5Akk~Tne4t~8Oqd(cA zsvb>GeSD2pbNOF%y>(DqU-PKy^PP+Wq$B)D6OI}|8x#Wgs=p|}Po zIK|x^3iRgtyYGFk%-nxYPR=BI&LlJYIr~|kwKnKs@2=3dm_~`#SlBoB*rn{}$=??Y zB<)3v(tr=SX5B2AXzs*))@d~(Rx*Yt7iij=ZR@=sSWktvKm|MqsDMSoF0}N)>;>Yny=Q05iI{a2|C@Dx{x|C~&mm@A z=47iGLIMl|hbLjB^7?|8hnDGCnlId1&Iu;I&Qox7np%LK+LMX5x-vdNaRCQOJ+>@A z+U(>$uxyoJ0S(n5NXx-ZvXKnTa6m>WkD6b|f<$w`etoCs47dWviZk#Eo+$(Ufk|}n84Xq#VUGUpp2lH1XnT2>7#6e}4 z%G~o#y7hL|0*rVh_3=vl3VD+YRtC7ZNSPUsAA7Ox_#g%oY!JLXDqRc=OwCg;tBsPM zcIz!}1^!ZzwKfF9kvo4)>FX|=CezLqlH%H-?t8F+6jClq_)qmA0WFWpX49~SNZyeB;D^Q^oCV@0IF0eS**z>Xkx|-A} zo8yhIjf8Z23UKg=1hXP(oa!2+G$$V-777Pb6w3w_vkeCJ>BTb{XZof#ZUQ~ z#~`qjm_d;~?6r!t)+O85vIULJo9ZiPin}&|uT}LNeA(oMBH$zrGZJvg8c}Sz-GVEQ z>rdVv$g$)5BU_j7fsF-E?fDo(|BCcUCR6M^n(-<4vaER$iE?Yil&+QT1^aG;p3`Y9 z4_tJY(|jq;Th4-5$Y-oA|0nt`F~c_uVe;LwepS!0o*-{NGvQ1mGqvprsnDED;lb;7UH8xx#nAer1L&c%O)q`R))u;S`5cd!uaYHX`*hdv$$^ z#)x5c=rz_wV$C!eB+AQ9MHw$kzFqfCx~on$ve+hlRXsSfmqGNo6J7Z#f)MlctLp&{ z=We7~9CNf6L|Jf+)@T%Cjk_A_;;~=&Ps(||oS^SGPR@W%lF>Y_(MPKBpopCFe2!cS zf}C@8W*3%b@eTSP%Rsh4Z%Do8@`TvlP4>zy&7gN<_nI0w=jw?D-PthM{a5P#VfuJq zaL&Wm^LQ`^BQdtmFt>!#FW*U}r)C^m@_k!;sOsitPFt}|;ZJ=$nvm-!i`R3pH|=u~ zz5N3|wOFgRHH7dPBm0Mzy0uwkLp@`omBBmZ?)sb-Iftw9aUa~U*549K?JKOu*nn2Q zK>xUxS$$JS#ntMD64GhIDYLu|ItgXhGw-Dt`+BfS!oZBg0vQMTN&RSE&Bofoq|S=Q zCQN7lEXY@2d@}+4R2tmKeb?RN%TURFw|w1hZBxYDbL7prx9`Sx)oy*bXS#irbmx}U zZm2`Bc6B#>a$a+uV;6XE)N~neAG~;#lVoRMIOy9s2zOwfzM_a_pzQAXJ2nRM+}`W? zYYI;K()GGC+X>ZgDE{53(?CuWUO@>| zzgDZot>HJhN{m}mbB)fgB?wo)a@V}djRWk~Z3j*qmWShXlOy`L6prZkZ~QvBT*VE) zpJn+FtZ#9rQ@^-LHfQ(IK671DJvGA!Q<=bDIx5w}PsX|$D(%rO$86@hDC+Jy51w)O zj~>YWWLo>?=ce%$R7uP{X6TY1@SG{cx zU~OtrI}`nOMKl?i!9E|ZX7uBzOJlpuw}wuRgHwqBCd&OoXY{iU^t}M^c2TzP6ZpW; zCRbi#Skds&`a(UO>|a!qt}hgXjrIEPI^3~Rx(0+T1r3{@a#oqong2hv@{08Sz7q3Da> z)DZI5b{XPr>^KB=&;DFq98827)$+)yuj|hVnS7vNbOc+cJvqX{CBvV-~V<~Nf;`<=7af;%hXt!xCt-eV%AQHxXkmOQ>n`s&wFjP;Y*a*x_QEY@?<-zG! zL8e&cmBt5ro9chKL(IwwsyEUyRbLM)`XEz+r>7lV&cdeVr`+B||4`XrOCpf+Q3{Z+ zbgPz0Bx*Lv2i!wjGs@ePJTG35TYVp%sC3`cBS_vA2d)6sn`oJ0$o2F$M^LcHC51w` zFpZ)fh+L}Uhw&=Smcce1#l^}D=zxSClf)&p03KTcftU>11YJh72UAj{RfOTG#gep< zrBN2d$~NgbPV`+9)yOEN&2uax40H5Vy_7N*hdM;dmX!gMl=ZEw!!w=*TmNhYOCkj0 zjKeY=)-&mzLT-1$B!6UpR-56Yb^NYAcaT~;Pgj{lAi!~30(>rKDOJv_+s`Afi>sIN zb}2)lSDVO=d@y~MUmz(ocI!wNRo7zLkoRo`q7~Eet(pb2YGG;)P!cYb-s{Q?(t3i? z&gvHkq_Y9lOVL>0IeyOZ8w=6`_K@}*VJT#M{V0H8%aXPL-zmr`zt8FXrWRF58_}vj z=8t|;uA5EN2;S$%N(zZ(eWyySN3OA?%YAE5t=WTdEmcCs_ckdwRvOJqJb%PAb5>Yv zz59&+EaT}JYmt&bA9_^Mhaxr2bBL^I65P2r*j@TDsq!F7Pgce(XXhq zcUlXcwE{5kx~!BMrWbUPeW3gq9=4RlMfRbLuC_zS&b5cGqa!CiZb_?752Z4^-Ly^p zZc&4ngnp~WkiOB36Mv@JEYmYBB=4tzAdq*(H*0^Ly@^$iphn)tO}E*Qcn^LNbsezz+fYxXY3r4( z8GikG@e771vpG2&f905?er&7M^sOgmJ838eaS>#FfTj2V16e%J;kRL}q1Tu7mTB;t z(~%$Ne)<>$PQ2X?;wu55tekDL6AiE(06G^(x!@^=i+vAfTk^h z<(f?-tJdn3UD|z|#K#ekgzzcP=ivW<`|FPWxXQ6y*Tl?!Xl-wPJ*1sd`>hbP_mGAh zv01itw^??!`D6gd+DPkHkj4#DqQKUI;5zdb?8ZJJ4;_Zxb=L~DzS>L@?JRg1dFGJe zkr(-5#CXbTqQ@)gsTzB1M+0UX-u@JF*7gHB>pnbG$73KvrG%L(X*+csqmOm0fQJ`$ zq?*JI3btdS%q!+yIaEiiw~n_TXW85IF2t>YO6gxG9CpDcLS7R|!?l@r?%>ZEQcD94 zBqy~PN6b&69vW94NsL-l8q5Vlx!7zZP6tj$nqBor@SNjTF=oF=6|~o8rZ?zS%L!aX zIz;kjFSzboo-p~Ql(CZ^#G7Fb&aoy%cMSz?-_rX3 z0$KQl+~hNgocSvlbJ$zc8^EYDIM^4FSNp}KYx`Bs@8Kwj42lQ_RvQeq2wZdYDONwm{Lu?Er4-DYw%#=r+3l}@I}QDAfT zcRtHb`@7Ex6~O(u&(|%_^m2c0yFWA=M>uFPnw*3io?6u*M6KZD+PY-6sb_uCD0?~h`xt~>{Cx&ldC>5WC$Pt9ji&V7p{V}v;&DyMOrhm2g? z2ngc)t6b;ldCb*NYcLz~Ox`!QeFmG_Zv$w8;SR&Uwf1Fe^8hAcs19ulFc!lF9kpyM zvDO2naDd|A`;{qJ)fW9*Q5W8a=AnNsem*X||FqTdf2%kQaXFW#lC>OIu6gm!dEai2 zyQ%j7L_7e_MmsH6M0n(9k}2k2EfhIa4!eDsibPl%=nUOM*1%IRjGdx*Wv!mI@9iEL zXkyKJNoby&es-eG7tuJp73D00psCx>BolQbgbo_n@sXnA0;3=wr45*s_zF8TU9TcE zEHu>d^hp3|!b{;+9$g3232FVwJW>m5MrS*{2Oi{>#W-P6%WP z^``Z75L}!619r{qibTq*FoU~hMs2(ONfm42mF}RAo#JpY&)#qd6QoN&B5+`QoHXsU zUu_(9R@GkL|?m|TCO;FyJwgv^*o zQ}+h^pp1{h{XSb`s_||8lejylcmJ!=xU!a;1HKy&ro8Ygxghk~lG!zlyzW*h6F-Vg zB0A~s4N~y~ORovJ5{^H=3@KGi9p9pM1dLtHriX0lwO3-{AUxGh5k#4Sag;rbLNYNh z(m~7(UNV}2-PkRJ4O=kIaJ#tX$~9V5>MpxH4MB?m`mBC z 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 J-F)03e*>C=9-#mL diff --git a/docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.png b/docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.png index b021e6a916311a975ef76e136bcc6243012896cd..168de353831fd4e1b4099522e617f44700063da9 100644 GIT binary patch literal 118143 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%0A3F>mVXHDuuct*y#YIiIn;D-}AJE-e* zyT(q3UF)gvu^5<`%BE3R=ao^4uL$^DX;$&f#mb$q3uBxt4Dn4w2yH41f)ChI4(w=D z7wyCdS#etk4*w*F2CdE8Mdx5SM}2n@cMvCa>`@_&WbV>4Fwn0u_)tm5E2GE4q(|Xk zDr!yjh!pc9(pA4|(u&`cf#WQ2vyG9L6E_?(?X6cg4I)$H-IJ8wMM>iA;{fN^b*@N2 z2sHNFc@d7yrXCC&KJ;rf(QoW%K}b)Ca>k(}VGRH;C;U3>5W>j1O*sd>X4uccBrh$o z+#)@3U5R{e+A0cb)qY1hP^%`LOH6C{Dd;pyQb5oHR#o&omx`wHZKMiOg!cOgY70MT zqHi{IS%{ET(01AO4vqge$7g=yDx{d4aR8}C26W0%-6y-g+1hfN%4$1SON|6{jX6#! z^=(5Jhe`veCNM|U^RkzO7j9?L&=pTfhW^vId3t!%9}P+u5Z9WwQyqCFen%baa#E1Dh{UtTEe|CcPKb^JMuv;douRSq zyY(|Y&!B3O-SD&`lsQ;}!Qv4%e{;xd?%36uufk06Yk9GX!oPNWpt<(n2qwJEv&*H{ z?aHXQ!UQg%HW3}RCiJwtD{@YuF>g)LOm23*_xImI1`>cB)Q8RQpKWg9CaPlm4Us>Q ze)Q}y?(Walh#sr3w6wIDA}2y@j9W-`_im3TgUsnquO5db zF94#f0_&#fk)ymZfQWfY)rj?0EAtpWslx7-NI5+@3D4)V`e}tlsxSZUk7I6hQy;0lWZt$O!*J zras7BE}l~=X$5osyJ=0d#yjB?7ro;d$+6H>Jyvyc3KfMKLxcf>4iFy351HNU-Hn~H zfC)XWvpO@^0NZvx61I{j7#+baeChNe=vYm;ecwUd!Ljtj*)H=he6gz*n*7w^D{=&v4{g1w^Z9jDrG9aAy z)||+%n08^bnw@9l4=jl^z38L-UN(nC;a%=zYJV(d+@Dk3;7SiBEjLilo+aWKlzEtI z*~AuPp9x};xxxSCrJo;-41g9@Esd@xNV#G1mZ3iuKkMH!CA zPqzK(-v4}_D?U}0GWYO@bF(JV6jLM@Iw^f#?O7Y)G=k^BueK82-{T1 zm`^Zqi>owDqi)0h=fn{@zLVv?JQ*GcxcW0N{vT-JC<-D6>sEo>kAZ|yMlHzrmc(@& z7VLciglozpuO+@d#=CI;k*UJ}pcIPi@|+L415pp~!@~@#GPaH_+kJ>gh`Q;{)6q?)bTkN@qzTaL+~k4qK5&0SPcv!zMUe7 zJ-a+tunR-4&zp;4Hun9@rio;#%bk*%&+m~`+nFdVnC0qlHAkPk=ibcfd63{D%wSmX z_!9s)fNNJzqTq+8>xz6Qkm@g10K)-w0W65@OE|cPR(elT*+4;oT=xRt;8j$#?tTzZ zOHkOAqf&DElpNfzoA;-8JMXw6qg|1QV+(MpPoX#0`)?jG(!!8Cv94qCH&_4O&3A={ z7AgT5Y^fe7Z%qEHZyHv<+?7t;C<+bnJKg=&I@THgx|HS$B<`j2^Yb6Ux5``U+uPT- z!rBMUA)v!SZ$bPEs%7CdJIVuD2I3f|vu+&z8`T}i#>R${fk8}ed1CPVj!#S@FNvKA zV_`u7k%7V8%F5hh4~KPdkkN(*L`iF+KLo7K=pCQH4^DGnG&qO$?Y|h&X~2MQML=DO zKJdq6|HiFF+NA~Ab2BzJ7I9OT2i~4oWcODehEz?`Ip>N`H#n>{u10O_jf5A{Uv#ml zKW2KG`WD)0!K9HY%5r%e5DW%A<8Wjq0LZH*BTKM4Mc+e-IK{nApLSUn@jNgP_IaE5 zuLv_nL;Sn1pYd^LA!Zg92L4{2K2@TjOT-T7WK2p?G(( zt%2z!EqCD$w-y#ZbY@76;qz^L1b^>ArXqt3DTp?eIe=enT>?hpRuCyfq~Nd zz1UJeE`L9LNdePNS&*T{pN8;vvN8Shjv|KNDm zxFB*ZP~^j;^S%rTKynJ++iVmnJ+rg4^i|Zh>?`+Fqn(aoj+B;`PxpVYy}u%T(z`ca zL=#wLQJ4HzIb(8v4;nFY*ugByjVe`!x#D1bE>}25HtA<`L}VmPb=9-u{)mDpn#lY8~9(rQ`X zy=5C}M;eFMpnO>fPOA8C-gjHv7Z{%fw+5cN?H4!=NJ>g}kK{?{@n?Ag`9j8T-^!(V z1Hb`5wKiWqP)I#pNtXZIFW>hljp6{!LE8 znDA*z51l=gv~KRfWq4%#XTL&;sVBVExG{&pjeuW#sEq6E?5rr%ZHqRM=~|sFjT-MT z!e2iRY%0MzcSLl2T29qZi>PdQw1A_}#&yB_y7bdHp9Q!of0jJvT0b_v<$qcz=GY+> zH-!{|7qz)CAx3WbQo{fv{bh$SZxUV*9k{f9AhLy%u6%gY4wB3JqL2s1Xv=W{Rjk|4 zMD2C`AolTsqD4C^)%u`~JOAWgOa&_&Z*}ATM`o=r?0y4b9UY#ai2J~MwM9E2VYdKAZ1AQZ>yD=VM#sKFaMTT?>l*!kIHYp}Gk zwGQ$}F%V~N0F9B#Le9MW+J9*in!oQexR{3Re5u7#2JG=k_0;iCfWLS5_EvHn3Kal+ zB@pO(&NktzMQL-=)}pX^uF}0SKD^GRzOm3=8cK{>la`lEy7N`S zz{V~!#*U$Z&lPt_&$Zc9!Iog{1`^VK@4zti9y8)#=4T*nVSfEmMI|?AwpaFOWH7#u zI-7&Z+Sl{blWSI8<(Bt|Y6Y#bGWGa|Z1~o$71q1BGwPd2y9qtfqX7B$AtTq`%V$L2 zO{{1aLU*MN6bfETElrt6`)-Z5o)UFp}&iM@ucEl`=d=v zov*3Ng&@VT(u$Y4FYgb!eOYDHZ}^Z4F_2ndJ3sW3J7fb1n{WYDF_`?~VR4WGlK+K_ zXr30}{U0jvK^u+++idzSrSS+0V2Keu5P-XH5o1TyEn`dosJA=CPUm@ui8qFC^dOJ^ zc#=|B4lhfc9b<{%11N);rHmE1Z;qIo~g>n6C6XemU|*_fO>Q1Rce*& zSe`C3mHpkFBL)ai?ySTU9LcD-tCcg1CIYI2hs7Jz6j--0q(@dNI5moyRb;ExYg{>B zN)kq4a?sWs6>3yj3<^d!dPn8R`LrN)B@W=Ud%#AP?Z5 zc7hndj!@V?w-W3I?EuJ`L1YfYBD3RbzFXEw&WkYRe=`@oFlB#Ns+w`i23O=+tW&PS zCV@fs;Xfb(`82@Y6!Nv5$$-HHsrs)4XhT_vXFd(q_HUR9$oub}IPJbncA5-}t?!`| zSLXU6u{Hmt^ZEAi#TQxDG038P3j@{{O}MC*ab}cTOS>Mv1bmo)Z@9&@#>y?-&VLx; zeA|RVUeupOUDg*C7Gn21)lDmv=yw14BZMENI5qtRa`waWoMN~oPXS#l!`ssN1vP{d zGDRlU-Onw80g^+!;LyNVQv7B zLNEPSw;fog@<~5o-IdB~cG^Mpv650wQWdghQ`hRr#BwJF^xVom1+^6@dDgeAWjTJ3m*40`;uisXRc-Y21O)hLWacGbZudrz!Ct zH}1K5{J7{SlHuVL>R2jX6Q69?=mY};gF72u00y7fL$wklbs0abnt*o@c<_RvZn#>soZm{(`c~gd1{Ls~gEtw`0kS!yprIRoW4E%diX9Mho4AJDDs8IA3 zR89*S5kH@)0)quGk{k?;=f+K;1($0zje7r8^t|3<5wxHJEIjdnq`~z9LBsu1Vh}BU|E${X|at zCOMfQb6_W<3$h4{v3At3m>gw5|jav7WT#fo3lo9Knxw@JfC*x$z;`W|< zQ($9z#M7}ayrpa=pnnZ?@C*$*yLf?B|9kodL>-+VReR<$n?f_~4-OS;T+ODVYEjbf z9|~2)D2C4F4gJOkI|wE)*A-E3tmGi9c3wUJlB`V^5|#)WfuKRN2)ckM)GS`*XBpw<^;zDJga|Q!?DXp-J_;|qJDR(R?4OP#+FW12rVf~mBbNNvZCPq&XBoa)$R_BK{C59B5q*i+-4rfqDd zzqA)N29p73Y1abN;cus0fKqWGuY8Xe7nxDd=bQ=Q*|lHW_hmDyrtUf$7iCSNZ`AK{ z>VN1vlrhxLPGn&Kgq}Pa4z1^Nd8ulI0JrmEE$TEU>(l-U!eW(7Md)kZ8ccNf9w1yG zWQH%zs={U|du0u!eg{9O%UgS#TMm?PCcwq@_i5K^^b$=e&Sd3tHnS^>%>Ku$O~I0}1{AnO2e=;ecg z>N+RZac@~cO}xqkXA>%C0Noti+2757aZc0-#}}xXqoG>ds5eD0zBZu*xw_P~kGlb6 zN0EMf0r+szhCdJA{724@-@XXOr{K`qXCwL#WyB4sttxxwfF8%6g#oANHVz>qn;#v< z$#9?cmc?zI^1j>1tE5K(6LHLB8=)0-nV}TQYg5Pz=<@)sm=5s*n}Y&bqR0KG z=F=>3_W})Q?ePmYfHr;WL9zO7y#?&8y{^sxxeyv5 z8fO4t%QdZ`@_RCf*4MwiJZxK^iLkqEK7uaN{yr%vEcp4&EBuLEQEF&FAHwCr2iCS(7)pJroD*%Ot(Ne$c15kE>TiJ>c1Yf$@|M?fA7V z4SQjI2?!)0Fqd!w?S&nfVOo#TnuH{iM5fABCq#kA1rWyTZo;NSP#E9z8`VwE8k>jb z%+38kc>~cA2-Xz%Q4Q#tI&$Z1ATxqk*swUhU&nWs$1Si#cgB?UtSD$tz9+F|!T9f6 zKB%mL@ATvyi&yUT_>cs#0#*!hgU?)bpdT3JWvn$p$nFeE#N? z$;vHf>*?t+L%+L=!iRv?H*hbJX#G=Yd*Ez{7o@67SP4b`wwv` zmlr9|T%fZSMB}Fr(A)(wsN{EcCF6c0lI99fCL4K^`F;piLCfW;!-~p)TJ_CQwBK|Z zD739cmc%3^fL8vG`vOR94fQk9zPrT$av}pe=M9hjycuxXYFGa5h04#L^-I)VV^UF( z%xXFFtXNT4|AsdAz3GiU?yxZP?XxjK%i~|5ASOKHS*943=JBk-=cI7iU50A%&%UG` zqX*DMgn+A+Ul(}U;xc+0JL!7$#G#l9xV=AfT&!p<`If}RfE-d?Pt)`OWKb^O?$;m*!MBQU8Y9s_l&=&kvDI<1c<%6Im{27As$UYi}04&2Bc2Db2sU1_MSk_EX@g zr>=8%C`;9i>n?ksvD-J@PVH?Sn{>uvIiSx&aKv>}aXIlKt6t5sc0A0H2T>4Tivnh_ z!%`dZlnQK~sGIN31YuTo(aXq<5?#)O<}X{PmyV)z3XCpuN^k6$yUv#5{Z3{bfceDl z+}Bf;^P@0s6j=&GcsnPw%!@2SlIx4O^V?i6#_5M0P%dbP!|#sxW8!l9YV!Ww!>ui@ zQRK$i{$7yZEBf@&wpDtF1+c>WXYY8qw!&T-{0CDZyK0}@C}bGt|5!Xa5ngB9#pt#l zUpG;4g;Ye(i{vrJM>&LY4C zr8s@;*;8wCe4a(D+P~U?HRJ-JTkd=>-p@la_S_MfJrZWY79-{gMZ5|vQd*D#3mdqI z{=gnBh;IzqJ4^z(db-YX05Aa%22yVm3AP0!eQR{m-m6&z8pd#F^SkQd0cwd-{E30Nbq4E5wfQB9g zG?$%CJvYJA^0;@n5!$c5M?;TTL$=`!d=rp+`~c?Pz{iDYqTJTAZ7s8U7A_GIMATQy zKO=r#H~`<4B;N4+4MDQ6WMLgk&OfjV8I?Jefj7!Zr-y0<8={52@j|TzBEYgGej(S8 zZ^@rSQw?O*n$5`8Tlb5+=Br!xiv$*;(Tb+uSZz&Nr@RU>Y7}IRQ+6WwU|r<3-5Iup zXx&T7;mWaW>W%V4dTJYuwxp9jAG9=A&tB{oXBK|l4xjf$cs_TN<#8{Jhd;)ow7{>s z_r$NAGpk2ze|#d^f>J%!hSaES}hw zb^gPf4T6VoZizpbv0cf;JTJ1FuKg1xXRY7f*s{g(j^!eRk%Id+uA0 z&je`POBM;MpxYWBCj*H*;s6iCv!Dq%5RspCe4*^L>g)J>?MmT zg$h8LpwLPtHMLG^=j6=V(ppM@={=PBXv(M0ogviM58El8`98&rTUNvuW)~>_(mbY= zGyl2)%>CFSV*%?uXW0J`uAxT!q@<*BM)zBUD*yN8zEu=Y?%G}RY0!`i;CN9PAia~5 zsrW%hFGVo& zco%?d6@8>}Ye~?nnk=r|o>5GwtOPzNfblNSiJB-~8WZa7j2)uar2+0`C-wRPt~-(& z_C@!;G3@<{q&BGu+=Y>Mr3v7A(Ej_^Qq$bw8?G+Wd|~XsVj2+mwBD5-$j1|1G;RaJ z@hzg7xzl7NHnY?>MaMJTs@N-{r9N7wj!ifVR-%GV^{U5r@yhnic|L|RKv(8oyEF;Z zMyyk{)#mditm%C&qYRJr7_a{{*ap0$`rNKYZj4Q${^@_b6>DTRX@QpmAdJklSl4H- zT-^(L9`LlYBcUJ~j8uQ2`Iz+M!3DoLH!u1#0tLOEbkG+5^Iv0~Kp?^FDbUAf)JtHz zJdW4eY+P3jx?TEYhxFA>e0IIqER=V1k7t|+9_e9-x#Z12oYlmQoisg1qdxjF`g=QU zozsaq4;pjyMtfj&pN{zH(7Z0iRUmx=5B6^^n6(4nFEd6TsA_8xU5l#ceI6J;p{pOY zu~Yr0?Xm7(bi=tER}Q-CD$XG@zU%Bsk)|F%S9j+-rN{NpKq3DJfU27v^yiE5{g<{Y zevpRnQ~3{|vd6j$u!M`#qM5{0xfTq%Z9jRCdk!R_+BLk;qp&$BE#maA@3M}j(VsYq z*v!BR=)Oxo{Q-ghrqOSDNYOXrVF>^m!(I&>FKSu8>S0x%DvAoQQy1jCwu!wDBS71@ zili!3MrN^P_>F7cO+ghCTfhlx20Cfc&~DHC#Q{OW+cy&K^Z6enVKsh*I7k?%@x0Gh zck`>d<~t~Z;A(2bX?%Qsj5w@guCmZT8rGwnh@)P;=J?Qx+`W&_%WU*GJ%9TB{wkYo zs3jT10PAE|t0Wy3)D)g{ri?3PQ)L3Gx?xpw0VCHK#%3Fv)6XzFSdw$|P)Yajl=ZFu z2{eoejxK8QTO_h`2&X_Yf0$_p(1Xqu8oX$s)r$j#G6C{3d)tlHL}V$aE(OpivDu7F z5~Dg&4D1zM&T(=5j=?xOwGdb1Jx7Q2PkB zC3NYccQI3$!;@bCr2$?YJ&O11ZeH%z_7h8$-NWKGCRDa2s#TNW%(%euZDz(51J*4t zKV1BkEA(5A{jv9}&6@x?5I%6jw!qO72|9%zd3ioyYI^Q^(N;m%#f)9gqD{ZwbCBeA zEsXkBzeM9ZJO22oQc>%EqO!=+C+k(;aKc}l>wOy^i;@OA%y9;>9ltAf`Fq~j561oy zqRO<4o>kzKX|yP6@tvX4t4o%tF5RStTEmEeCTl{)vp+mVzRO}+H$A@NGuxi41cWZY zH9>6kSqmKprguG{A#D6yp0U{GR^0tVlA#;JNe6!W~X?-G4gKKub%45qte^W4FJ zm3{bup_Gg;=Gfh5@lYCFgABWZSyLAzV|?UN-(`^SX z_l7gN@Xw^O$b(j#8Iu=23eIY5`jV|+mqh5j`zb1_c{&P0s%@f(kbX`tU$+ws%3+og5UTLwcGdnRVN zF^YX6dwdb?djb4dtjR7vvhRO|BMACzG^W*dhjapMx*O!D?}v?}!Cm$!_EvX#NAs!L37aVQ=N1CS`)Rgf9B8rSqQ$ z>lxV-gUNG_W2yPsm52y;zp16bdmBZ6&?3KLzt-GlqAp=soxJpVdFkoqfnKAYq90ifHOSv&~2Fc)|`*DNQt*ik_b* z&c5A9oPKX!AF8@C*9cQ&prdDs;Y6;AzZ2}2IhS`<+ z4)hIFD)htI)boovS%Ri`E$2Y%830|nL{%45F6g|Lm6g@(*P?$Oh^6pT(F0FN;Hc=4 zBdOT}jCl6pb}QfPuPi8J*V;Y%jc15GA-|ykOy4(~^6WRGTl%(m#-Ei%o;+U8D8fm2 z{aCDeA^UY*ttR8DD9%?YpIiMwnFLa1Mr_!-5ti^pW>NBU1GjqqKpW-{(a-;kp?G8I zs5VfPf4NDZO4hSJp2)#uO^x*ox&^Pe;p%>cHwA9f3mjKcJXs=2=kK9W`5hX1Cd7dz zcLx+YEgVz|XSsWqy55d8CAbrd&{lVUb$mA^)@dPtOU+Le4@{GwvkDYNpsak4JOoc> zJZ%4EQQaLK{O69tZ@ye~6}ZP@pg4Rlh&oM`VT;su_&%S@d)g7=RCuOA0->3heb?q^ zs-QBlLHM?R_p^lu=dHMwTW{=cXq?CxWNyAFQr5y*1jqAT?6IB2iYJF2*#T={5uW-1 zWsp4!!vG$|*(dA3TGWdfV;W?k`L*m=sQoCvp@zZaX}+^*;~yuJuu@GofeiLUV|(;% z(}#z_ehspt?HZ1`RJ`8~17FRGm!4Nn1UQPETiZuu6jMozXZeDb($W&tg>$mJDbqP+ z>D#0~1FLOue{(>|*vjY%+S$qm+Id9w>j`h0q$Oq8qhy}Q&-B+8pB}lGAsA6$?Jqxq z5p}HGy*_0dGXm!3v%XWb7M;I4#{oel+-RS1a-S=I0a}T^K@@P3%->?!HL zKEwExl^6X28)Wav`58c}gm~ik`qXi5 zzv_xSzJq=_q4U${@^m;i`dJ%E{|0d^&1tQwfV^9YL7Swdq)PvnPbEBkzpK#CjBaFR z0nzE6pCo`A(QpY@V*ZpmAu{ABAxQ~4H^tncdHeFIh4`AYyOvtQ#)#2dyElDe_^!hQ zwbH^2GpvoI`l?M)glG7s^Samv-<9p%#r znc(>RUJTv7ub=YYhm{go#-0teAD*gewGoqi=18X+xStTHAC-Oh6;c_~Jt%>u=y{Nx zgdsXP{+C51hH$Uz)IAIi*R%VvDQmaq44zw3Ol1T8O~}_hjR#SoV;Ho>O}o#k&gU=u zM_1aah#nou++@eo^(?i*8 zx$#*jf#v@9$G6u*?$)VHsmIkBOKp*D{-u$3x1e*WK1NLOlj8o985)Bz^V!8kdb{YQ z8)c%Yk3;YWVb{`OfBz18<`@r)w8nVCrGFBLIms|xNi9B;hsYQv$lK4@P(*hOjD_;= zpWcKVWc&T$eN+D^BkuXCxK72BoX{c<+~w+pB8h}4?+uB!6ZO@7wHf`XN2elEKdh)y z4S$tEd-!9XCBHt5L%;6$<-$+Rzt`5pCy9q{agi5#M<94M%Pv^rMJ%fAmFDAAOs$Dq z$&(7O5FMv1JETv@@m+iN8LPy4VUnsuJ^At2H06-w0QQNOT4-hS@t)_E4b)gS?Ig#` zvhAKyl^@T{wWQoQNtzAgrR;x(++0b#()pWs_B{XHMJ2{!`)9W6KyS@xX4Hd?6LV5S zYkh;n9j<(Wue#YSI3V;b@=Wl#Ql7}Tk7Et|p?m>1PSjKDdtQxY*rF^Ha+L(9jBsFc znv`Xr8V-(QHJ%FaQj?PR=31uuWneI}VKyfC*cvJBf+Rj@!W%mT4syK;eekH7AL9ag zc{Jwfzo)4xaOeoJO)L=_xJI}Z_}^Kd3n5F-^TyTW{#v(FG%*QseNM`%u@9eBY8Q<~+WKbX`<+Gu<4Y39)f4iV_o)^=dagG<-SCcDx>V>cgMU zTU`$x5)80VQj>KLQ6i_IWXg?V)48s`tSL=Q*f<}1QI!!?Z8{=9EprNQ46?a`Gg-I= zNr%~)G<33qhe5bCYJV5h^Hon2Q}kU?h$5MRh`oNAF|{-!Xf|CWjBJA8*@^=oAJOp} zNOHro85;LDTZUY4cn*OpI;zIesYzJ*?S_8&)+GA!;Zu0@|03?q!>Rh;hhHj@xy%un zh0LK$O~z8loH;|3sZ!=mLK!oU5rxe2JZ$XDQ%KT|ZI+~Mp6&hIyFQ=u{r#TjJmq>0)vetXO*ZscV_x*Ym3G8)HBW`QRGSWIAPCkCfZz~@cI$-x}OfZCrT3qx= z?+4HD5I5 zd+@&e!C5@hF!RPPU3pza{iI1CtZsbOig`2{vxrsJG)Nq5S6hGXS?wa_)QoASOM>Hs zj!Am7OKIvZ`UH>nS3ezZb66Blc?H|LHWvlN^ovIc*Qrn+YKOlXj!R^F8s_4E)~PLx z6Sgx1=%F8OLH?&z!4sRI7g(F{;a9w2tS>KlAB~t07xWGg{qh0TDMrD8ZrpkG``UR2 z`4b<^1;)lziA>(G-Pzc-Kbb^Lxf*A8Tfj**J}a#vP(^}aTk-nX0N zz1BcY=2@mgyzk-cv2^dLz_EeGvmQ}c&6QJ0wjZ26)paD(XNgf6*YTqgUm#9Cl=Gp? zz8GzJWd-#*XKwO!)zeqU_06ok^`UpeJ{fA5#Jge1!p!93_^j;eO6EzjyX}0PRWq_s z7XFgVh0V^6!EN-7QjGQJ*fEw!l$$A}@}73SDH0%upU)Ji9etL#+a*P)O_^C)5!+ga zU}<{3FU9>=X@^Lm^N9{sXAPF1zDLq=8^9c6W6#R zRN{Q++qn18;lowbdEGd+^>k-U*lkEPK|?XDh}5H@K_K4vML>wia%xAn7@tkPKDySJ zD1{3RZQM}Ru59=8qQQXMMG{YTY325r5@De#k~9 zy;cF-)`Fs!wU(!vQykq^1NjlHonlpV>bZSoM>f-RGEI7AOv_?W_(IL@^M*7*KPCK^ zs1~B$>>VM)0=s427}eeECT|awc+rm;X6YCUs%?wPg6kd?pogb~frd{vuCg{$g5;e7F1QES(d7TF~B&I}ObGL#;sC z!m?SQ#ps(b?+mfSGZrz{DUS?tO_N|-_d&rCTt4^jLF##*OHRii09y2&lh0{$KUmMNLIhtMD6|zpKs5~@CK1=L%%i2R~rNUKD z5V!tqIbuya=D0y_7-L|j=sjf?J!rN=8s7PyC^CgjRb{!|Dy0eS2)5-HN1-?T)Xm}E z&Bx`8552yxBkx@tOyNO8QK3Yk{b@>6=V9w?UB=5|vGRDLuME=a?K5u$o;Rq5i|6yk zyq<*Z1;`4(8sfec8p=P3cWTQ&!U}Ki5cjR4vaD6gve@SP)O4$VSJ$vgLlni1&utP* z-4Anx3+1e?w>m>NzRff%;YJ3ruJ<;q6lF9Kb8qO~E^R0u%Mm`h^O4^#{QytArM#LT zMH4H$-|=Mp2E}kA<(dG-V*tfX+MhTs8#&FeMMP5cP2EZg2BQ3O_;crIp3`|B7~ zL1`a-+B3#8MlD(vnn?ylA~(#qb@ShOp0@npduFCwU4lK>KDjD|b^{j9*vZYFeV_trHUV&ukaJl>(z z_ei@}vgbtS(mR2Bma(%gm53iQ{^mQ!C(FBWckeL<=tWN}DBso4Ut4y(%o}n-`QDe; z=#}lo%O{TK3q&|PCQ*wn4~ zLNw2ETFYs>RGkYC_zcRZZvH&K>8Wr*)C--#xaoRlEkYAT5hKGA8L(!M)Hk>8J7=&G z2burJ%Q12R7nc1AIfLn{e;a07GrEPSk}AX{40&&2y)-bTQ>=OF`+?jN*H60d+Ti!? zj|)wDS)oR^Op8e;R&O>i$;fAyST5JStG>*`Hn>hCOC5&aioq>xH+64+3{tqEE|n5$ zU}X9lI$^&zddUdnJxUT5#1KL3COQQZu6Qi}s|GIvVhnpM&*i-}B{m-cGReT7$$XOv z_`%h9N%7+kRu*uDnA1u{!uwMnrxc5Lmg*Ek^wJjC9gMRtBK~gUnDH(2J5Wd7)5Z#l zIXsKmwzH!gHI?UQWoBsSzCXxkm+=e|@6h|z)}gpndPBjPaeZ4#R`}8N`sGlEohUa` zd^y_}DvcNOShM11iwph32WLo?8A`r8ixBDxca(PdcW99K{m07*aKhMvXn6}Ow*KA5 zp{Sm8WwUc**Jt6zT7Q>h*jzc*sB;?Igi!%{iJM!oSHP0NjkaLpC#frym$HFmpzkA(Zd_3 zR)V-OT4pU=aVz~YM>u|7rE0j7UmM;maKSYumCfFo6O*Df7mI7^6Wt}AY-9?Wp=8(B zxtbch)iGR~d&Eu6#d`PZ_EW1D=R_LRXhjNt{+5m!VPkJA6P8N&?M_e<^TsZ-1oDi@eyd|L14I5YPQ>GgXYLa1WX`XDHmB(#CE6rUoeFmn~v;T`9UCYe6Q*oQenBX@**{ zyN{5l>v4SA)&Uo;!$~l7)%^-vpdlqOhA;$Yp#RNWUG&xO@}Etv)LbfMh|XQdm*+|`kDSM`jHzR}94+u=Q@;k+Lvqyd<&z)qa|nv{i3c;Rt-BwX6pZuhUha*0le^Ez z@#}0RjyxKZU~j8h9zWlGC1b;tBCdDH`aIfCDW}-#iY=$wmB>)DP8S_2)^{6Z$EY!g zea@HoE<}~MwExnPz}6fIIRv|PDw*mjwdjg(%Gc3b3!OF*i*-HcKfl&e;pSut^c*U_ z=k)T+o*`8Id*mDil!8fpAKR%0LfP@dsT9aL%0o}jl~#{h6SE~*D=Pi9OXp8{(#F-E z_A3v?qhAilI9h&xCupJj|+FI!f1mHc9b|uvj(FPiZU<51$db#a;T;z1usBSKFy(F0(vF=w$js4t5qcz3;(DT;O-E-KSbNCV z#-p#+=8w#gNA$l~YQ;@*>?~9}l9_Lj%sjSCZPk=86U=zJbm21nRLG;UU+2g_IlVhv zRP}qx+8Qp}CGlu^NLJ2^XL#Lwo{ilmi^TrJT$H2T={4C4HrxeLyn!Ss+37g#Tq1)a zB7@>ReEM8t`!Q=?G-Q*ZWC>6{^<>XokPgqyzObC~m1Uk zevF_z@9V&@`Xaf(=gx)7+!q{cUCh+i!mDj2D2hUV9^#8Jixv!81_63K={&@Cb~wrC zK`$4+fRQRkLiauFPy}A(+&O@T4d{JPsWnl7y5YwI3JG1x!adjThugI5CL>ScxA~@| zPo~TLv@AmiE`FzOr;rFg!_<^;p*ICj=04pu=<9k_r=znZ>-7XhczUb7O-G`4LZ_N@ zVENg6%G#647+b!MBa*OSK&>~pxADc!-j2eyECdmwRyJvdP09z2bDMWK%vaMZLuuPT zKO0t7cBnAETz|%URLTy4RU2wwIwiS!u#Sn^q?PcePm7zqn3V1ONgFv{z{fSZIq;^U z%+Y9u#-Spw-f_Q@oQ>c8sTkWHd)8CAa)!sYPd{ABORgMEW$Z`MIeoX<@2@^w zw#4QeTiaJMVyeepY~UU=N8)}sv|l|hFsl9G8tsAIx$p0Ar;@rX2qojzM(vUV@{;=J z9>Q)i6aYav2Xw;8tUx1y?W2=DE4T5B1C!q>@6J@cwQ2F}F^@EV68}Cl?&%I^gLd0! zi~H|$lZa82wezr;G@lR|zQg>u;%>(~tDCOpj~_YuO-AaI6X_Jy)M>IJxp{X}mRWZ) zOq!boa}US8QP{Fy)zitn6bR^x1El%eqp!FcCipFqaSflH_8(Qmf9F6E(UWu|*3)+$ zJ&r;}8P*51CSK@clG47uK1)U9?Zdr1e(mI&k9kaF2HMXoM;aCs@Lpf8b-sx6FtD!- zn%C89Y>1=oSdBY!N)W{?a~XyHu}?QBlhI{Jd$9CYU$eJ8Dn(klFkbZT)QN;Oti+nI z3g-4y|B;q@O+8K}vzv^F)A;A2!Dn^UwY_i0X76H!JmY85w9#8gx{xO;OMd>tcZ+>;2=y!PeX+0j)0&|K3YHmDkzP=f*dL9-EvtghqySKa3~iP8HrN7JphM>U5B(b^M$V zPsUi{)fxZ6j(q*RchVJS3;Jtv^+h#?az=fute`_GB=ckOtz=u5Yv&(4aei>2If!x} zzZdg1CGhM{F0B-YLH@gEVvyR3lX$%|pfJD@oE=Ud5?WGt;!R7{Azgw7uGhEpT1BTy zvIvvHyu>9r1*gHD_qQ&2Ons~LGNR$6)6biI!AKM^GB-#1gMxDIXxo*p{p>|#V!M8v zShqH>vftH%m>R=LOX-B~^rzmnrL0J*jJy|>KTI(FE?`m<>C4Z5XXoUd*mIHoc_IZ` zOP(Lky%lI$z09Fe*lFv<)Mp}spsY6it$s3p@#JJ1sxS>D>g=9>^v8=ReJ zm;d4h+t(GHn(wx`{VunomXT7+t?`F>URty6%5@`a2sQdM9SIjSLRnMl1$LF}GnBO_ zuP~pJ$zb=rSFiQ5XKd_icc5ihx~Ss>WwksJ-`rF7%nOWHxA4Z9%#1B%el3&BMl{@X z`tz@hl`mX>uJ5_E<=w(-`JR+N@9ZbRGlAH4&5GE&6gPYEy-%a`C|Hf9(z*jH@0;ho zT|*&AMt(l*Pu4qm9!D1TIseDbonn5?!N?{TBK$Z#d1UNdr&Tu3Zu@Ff$%7lrLs~SRUw*vU5Oz*C^x7RnYJo`G*qAq_c=RycX%t!2s9;{@=JP1f zj9%5AchKY2qm#L2N5Ykd^z(4}*5a1^ifn~C6lreJrqW049?;#P-u zk-U{yHCy0ckzN$M(w*ICaK_0`*d}&p5>@u zDtx0OI^COU=IR&Wd#y_}7O}D4myaKJ-tl4AjMO+KDELYBho`4ygPs7fZb|^V+`xKq zHTujL^Tr!tamvYjbph zzUoh@zDb|tRU9;QudAEq)RyQTc`h;)n$CO*p4qOh=_g`XB8Dk4oEb;uAOJa&t;LF_btT32J^VCbS% z=>_);vxfBKKJAr{5}qMTd;5qT)Dn(jfug7E)ACbbQ~ZI*EcIFPUNMxC66Evtp6HjF z=o)TL$JvmzE*-W-wDX^R({N8=R4&|w=j1u-Dg^|Ii-e)S`=Rp*SUNyurZ{XlFFw&h zs-jV5qw*F;G5L(pVNh0()ZHr7-DyZJ;4SI0xqXN?;Ff#gRTOkm+)TGi%)++|Pl<{+ z`6ARzHR5QjNL^2ueb=40tL=>#`Zm1xVCL(=?$QK36CK)`*K-9tfe{xY@Y@FT<{w+r zTEsuR8c*$96VSZ1_UrP|!OhpbKkACzOg^&lSB9j{9iBXYGl_AG&L`^ngU`JoMUhTa z%7Ve`b}_%Ajf|dT$o%$goT93?E9qZ0t#mYJKeuh6e}6Oas#n*Y)V>PVxH)gU+RXi51ElNPgeG09+i(YYG9s1^hW# zefax^*w3Awrr6n18Nyt2V9xQ8fjy)v3z0$j!A#6{{;?OD4UR0ZFp)UCSg2vExZVqm zvQQuSFhpTo7PSHuU7;sye+!sYkE}5mYqHjUW3g4%GMv@OGYfv3eZ=*#<5#s<9>8pGJ) zY~|V~FRd39P4luC8PRHZ-N&QM)0QqwH`FQ3fBkrkrseRJx!HXI1LVP(6<-|pF!Db0 zJNh`P^&@?{ygSgw3H=~79_xHimJfH<^K>Z1-A3XM;j57I=-%_>tNCEd&YT)?^x%v0 z;cadjdWK51)?>3BLQ~WZgPl)#WIm1N$j`Xs>=rKzwontG5O6+Ie>K{$k zd}+S#F;mr|%&S^FLD}kZ|6u*C{qSSOyM?e1K= zq*3axuC-rfCx3Iu3&k?AH)*P8Y?jYEYfsH6KdwYg*-172%4-35n6*)wQ;E*dg}`IN zne=Ui>goB{&0pD2>7aWNHJT8DJ^r}XF+l(7I0s(&rSooMm-tJr@6HDgJ_Xv+K7GHmYBsxa zsHKNc2uW4VyCfLGmR6lhbe6=7C?<4Y`F zQ@I6tHKr(KC2jT5?kY7t&&JpxYB__G5#N|Hksx z4_a&UPZV#Sysv4C=JAM7jBr)HlznnE?ku%&MUqX_N3nx@L+Lm5>^PVhl13_A_wAXk zb$@t<`7A~AXi3zl@U^ALQIyyh{WG!;-Ic??eBBcmEb-{x3^VqyKmMR1dGmV9b29oe z^ZanVP4432%op>Qy4Pz2!WIv|2A@sfUn+h(9<-9d5pXv*L-6TQh*UU;R2(Di@4HeQ z=n7oSjSmx!)V)Fe3gAssN{I=`*fyC#wIDTl=@yNW8Y z(fNqHsG507orNRX#at*tNoOR##9ZJeeg1o^dM_`(bvb9%xytmQZ677F&kiog)#4Vf z*~U+}FLqXE6jmCv^Lcd&)K1*>&$LLEG{Xuq_jmP(BIUhty9)v73Ff{Y6W0m?|HW^V z4t!glDj8YBV;rc0LnPRMZvlu3lx6uvHVs((`zoSOR7`12a8RQ=aQLJBL8vL2hD#59 z=kVgXnALKey4_{^L&U(qp(XA3Z!BP+O_|0+o}!UvnxXh2p54(iD)BLRsi_A!`>KeA6(9Px*?SH9<4C20VqAWD z64utHmsD}Z|MT*=(=*^|xX5nUWbN;aUv5{Qi03*8PTj0E;^awKSm?@$?1rZ2_YY4_ zEp#CfxF&VX?U)>ag$3O9a9UP*`Odwk^)th2^=A+h@0E@o7Up!_n0T3jvdaJ}39tI; zwA=eLspEBJG;m2RHp33E>l_`bLkYEoXpgcVzP8DMs4VQ z>(KIEw?3QpoBXkxzI;oYu5)k4w<0Na0!)cFJrCH%opO*Aj2Y<7V1=cn#|HDx01w{e zQGUeO+U;t{2&asdJtrpAY9%7OnEGzvs!|OPuM+J^7K7MOQ_-zl#K@g%n<>8c*02Qv zxJY4|0pyPd!G(M8SKOAETKRkYo3GEQ3?JN3z~>?)>5K7$iPVU(;u`%PM8uHw-obYc z=N+TF*Ujdo4c9fkw>|i_^UeH!3p%kj#?sU5F%MarpzRH+$3kxw=4o{2dUyo0x zXNR}5*xi&#nYpJQ8)X{%RJ4`G=Cj|R6axRFC&;&WG#Itrv^~t4^@}oi*xVvHo9Zsp za~{N?GxY!m9^De2y`*m%$wDY`^y?kYT$Mdu8 zuenVmcrce;zGwD+@Y(O)kA++Y|1ts~|rup0LZL6)X9V=C^=9;Y3arj?ZQ)AV58Qf~;Rmv;Uvn#(I z%Ic0}Y((t)N6@}3$=g#JcX}JV7f}|vy)`ygva58kbu*OHa{TP?%`eLl?D;EM%1kW- z{X?6`r(Pza88f%Ioeo^7k6hA!;uu2prL#?Spk8HbD(+<4D)$``%v4YPF@ ze%TmF`|%Z>(U#?L0ux!|bqlMn%|?x0{;hIO4mGvGl*nu>La(&nHnno#Z8hlPbfA~E zIMBm*b&ugZ~P|BBf#A77FFgIhlSSCgmPrSi4ayDxw5QH!3Zp+Xb8IheoD zT!O!j@7pbHD}&Ozg%n5E4~wbpBJlXFa6_AePj+^wv)(J;H-qwiF16U#U8$C9qP?Xu z57oW)=kK4M>QptZ=2FNs+eYMcXw&n*yI{|8n!`g2z3h4@FLF8V_l5Du_id$4&t!!e zl_U>R5bHVfbybDZhVKMIBo3;Tw(iZ)VaHr#!|0?vWZ6{0OZVDnqRzTbsXf0xD;{`8 zB|~YWp~4t9kjKQ8qaaMbCWrOtl1sKttwx6y65YP5eo1cq-K)CszB^BYP#a8!CCrj= zPBFVks*z%r^a3V6`C$nmf371#))&tG@-UV)+DSwgt-Q8Mueqe;m^sF&Uphg5i=(#J z^;5$ch3)LVsdB|g=mGk0o^F(B=v2MZ{-d|4x2`XyrAID_spmhcID!lajW;S=Uf*`9 zdHy4@=0h=aFg=TdvFs%YVu|k7llt~g>Ql0~w5<;d^3IG2Z%8gTy?7@yJoLeLjUVA? zSUez;h z4;q#=ap8x>IQk*{z7X*aSDjjDDUry{@<(c0!)gBS9fuvr3-c*1vqMfWB=cs~{@ZT8 zvIbW@+7o%)5=(Oad138c!3(<`nHRmHehYj?d9dteifascS1Mi~6g4XsDsyB${%v`y zbsw#?Vre*pr}UzE{r<>xS6wy%t+0n)y656f8>{w=pL*VmCAOV=-Cw4)bb26Qdt(4n z7~DTbG}c1}F7SVh`$-wKlhdcCvy% z-z=zDO|EQyUU~70xP-Vu1joxMa}7_!eI#*8;gk>VryHJAoi4iJMB~{4=bPmfzrQlf zSsUFP78Tg;7D^AW9X9BHqeJ!co>63&<(FV6XceXycL{t}*832RxHIpl^X6opfS@{V z?q-Upn@@$9=iv0CY4^VQ59xDURix+6>(08Je3w8u;NfC=?D(jN1zMU%-8c{b{&4R0 zWkrFvyNHhupNP=EyU%(gsMeYi9n(QO`!oR5a~n8lo~RcM>w}efLA92KZQVH}|ZU_+URsDX!b!ilqbdFuEpTgG~wB?w4p6_$xkIy3; zsMXi7u7?3M{OJ~E+vKPMVux#dch;Z$G-7HiJJ>a$eQs72l6NF8q^SC9D@%E8@8@7Q zx)a+qnV$k)eG(^~Nz)}KF)JJjPZig0s{oZ5JKFNm# zzuE6DS-PbThW3{g?6jk`+nUJVhIW0|3+m#e7qLT2PvCJfq*H$KQIhD88Chu4k?$xr zLw;USap-4%`a&D3vArx)-s!VC=9paV&N-rDrt@=-eJggzRbW|5TP5MA2hP{^;?I%1 z;-#edno%9S!+}iclYP9F@&g?8+2KW@4VhEeJHzgtZPBK@>f9ufZ0vkJ-0u_{%y(|z zPsTlKMc8WGITv?;07Bkl*lEi;92>p$@a6kwQ!3<#QD-{v`&Gt7vW>B0XC0W@?PK_A zDV*)u>ZlDbAgF2EObV1GSjyv$Kak}aT9=0+vFxP?WR_`Ii110lg9d&5og}JeDdK^0 zXcd1yuuGPT*vfH9Eq+B+2qb$8E_!Ce&{799_fhpxA5_T*x$5#xy0+5?`#m&?rNn}+ z_B6^(75iZoGjn#~s85dmI#o-Jo1sLA5Ci_JWq^MCq0c$29{nL6z2#ndd2};8Q`SdE zTZOYJS}Iqq%J|)v%$mOAy6O6)9{2sqOn5)|0NyP{ zvexGvF({5`PkW+i-znkZtGHWhxifRCE@|06jTS%OtUqT!S5@5l<}QmJ!@8T|1-X*IfODsE(zOAv}f$-i%w-HDcDEnT;Jl-hPKxXJ#F`u`D9%zI=6$s3*+QZ7@*V@PsL6Rj zrg4i$AIl_eLDRnIu0Kb!IWEYV$ah24t}3=wSxWzZlYOBXY_lf^pgqfCp09siD5?iP53tCj?cja_R#z_RDFd9 zS`vq_r+iM1UzrkT=4;ecR#68qQg0l3AI5Cn$=C?_1xgh6|=z-{z!72veNEe zl;AA-T-=Ig8<*lf=1{KYIeljVPgZb}WN)2Opto0AFo4^3b`8uo@A=k`TV!TEHIc_k zlt@BUxn19gsaM*O8yDSo_K?Sl@Ml-(@VVxP)f6HhK3ew=tx-)b z`2OZS7O!iN$mNxJs85LR-<6 zH(JXpCdpAN^%vd^07V)_GzO!J#H8Ef&9O=WElW<5j)=qa?}oxzJ0Y>=ku$n91%1Fv zme&1c1Rg2=)$PgV$KHM3*XR_hwArhclT2f6Y(Q-zznx_sQjGgq+%9+P7E#z8zr->&N@ZW5-mCzE&-` zX~%!jmZ!Ou3;FX@=MEb04ux18dYfovVL>x`73>R|2;0X=sN^jzARz$r;?;oC;o|KX zZjN2DH19QaLX-Iq)=P?;o!pmmVm9Z5d)Eh)B7uWrtq>OHik(pSUjNKFclJK5J**zK_A5nmGKO@c4X(>wlaM z`-i@K+t0>!_eZ=CFA(ndg%vjp4hEDaGSqgR&Do<>mp+DO+jXPBBw-s+*#3SWPlXlq1=>kN$XBTMrN;dlzzLVHi^>Hf2GjA3 z-u?TE95f0WM{up??o^}22#F`Z`c59g>+?E$B=<`reJIm$8#$|U=D4{(XPbHegW0TZ zqHRVJ5m5%Ga1RVF9V<%+)Qe7706N}n?`gUuW~QEg4AdqdcKp-Ht4u#Tev@6}qRHnH z9S~leT<^!gI7V5LX-Bh9IPX_EqpE$-)iw%Gf|9xkM-R>I)?cpKB_>T?OdYd@=@&4p zn*Ly@h@6!O-UL_-Q9J5X8F{!xqTauX6=}jJlET0r?aFE~7G?w@NJn&lBLSt><$0g7 zTnel{RVWZTz-xL5FP@DOLQT0OZl0ZnnG|w>*Gmm4qZ=Y4Bk9)n!JhN4@Fm3(%r7ip z8*-lgVnK575y;1j9hdqSpY@&d)6wpFvfc(fS z9t)KJDJTetw5rZ=OtIOAcF*I0(@e+jrXxQkuDNUWP78Bm^1n7w4_SND6$cwdNU>n9 zd%%g{eCmixlg^emqbX;TM=aozZLK;B!qX4B(%Eo<$Q7obNcpwSKL}di$)g<1O$Tc| zEnEBBSQ_MhJyPx~P64y7Ao=Gl-FN2_g5iG{y43Z0_--(Wv5=)@;&!h8FW!BgGePfp zwg2B84G?>PUS}cAOJpaEKtl`xFj*s@-qFKVePuppfO503??d2fLo++Hx&jhKGV)yH z=ttr9vbDyL<)yQl?J}#LiET-IGbsWz;3#Q!>c4KBJu@1vE2H~0t1 zOwxv;{wNgcGBc#2&k?CHJO={&M@OI)xtae=sB~bLcNcR#4>JQm`&M-`(rkK-Oz6r_ z&&OdKy00aNIZtnj<#P+pK*_zYOfliFqU#Xp#SG8NMP6bmzXX5Q!i7GHg%YzPKvC*C>o`eTmbX6~O!M{PXeh3Ci%gJ)?T^DOe~y^;hB(A3n_=cT0o&D;IG zWUjwj4-}S@*FHQJ&ktC@dYcV5l(cxB0LulT%o9p1$WFaSIc?Wq`L%@^?`)rE41G`= z1hYHQWm;dNotWl7EdxoHvTdp*cWume`}5`D62%D_5YF1j$v8M`&S|J;38sn2oUUi= zZX&jBaLxw)oU_sE?*_^A70J43i2WXn77;VkGy)L@0=isu_Hw<*P%BgqwhrCvpZ;%` zpUG#C$?^N9SP#gq(0myAU@T+3G~#v)_CL4Sd?3}A3$8%$2L4xbI1Le$xg!q#3$PbD zdEC$yKBH~$EVzDR8Bq2Gy~1+y!bPu)Qf+3v7|^3vlEaV-3fQrlCChkj&Gu@|CJ$=N zdBUyChxxB#Ee^7jy`Hq_ZU~!PpxYMq2;tt1_lO*o;UW% zUH7~e)NUoKhFV6K=Rw@H*Zs1bga44j3o0EYoe4!8{U z^ax(VD~ZoD1@7%H)lq8>TO{+r(eS8i(cAp;PR>405c9=Jv24qWzP@;c7U=KCuK3v} z`}fj;7ieAnLtZyL6Dif#kYT?@m)w|xPVV;uM-+IM4Rp-5M$^_wisix-L_qI-5jJE; z(B@qoYETGmxDib+SAA4?G_;ldOBk5epi;@t*;_wzXv@q<5#g-!0K zEoA)f1csNkxiEH#Mrtvx1M39woN%3CJj07|_cR$!=bla>&^D03u@(Fpg$^=3UugY< z7Fp$&milc{KD;+m!`4#!9+IzjUJ?_*B5_N|G}-FmXGTR#7M<2Ai}EpHea$=3=Mn z;3@kb2M6-6u^$ee)sJ)f5%}vavevt{YqygRM1}T~vq|=cO8*rbwp7%b#LrpQk5gAE z+r%o)TukYb8@Be5y_v9GQTwK;=aGWaFUvmKQ8&&W31AZ_zSA;qHjjJdWI#{ihn(gP zvC^s)K9DOMB4S1ZlIAQA=PM87fSCQw7}vc9{rr|HN3!RBAkfjK2eKY?)pC&&e3AJl zur#2r+U3^7CBz-N)QDZl-`Gflm`B`EB$E4?K4(xPW#@^wzj=x;st?D*sxZDr>jLK8<&_jZuriyLC1Z zc#)33WI<7s-8V;BeqLB;X&B6Y;$JQLXtn7(8Zw$|q6EpVW)2Ff>y$WLQv%#aa<=Ql zsTkJmE?EXX=Icx4Gxl);}3%VxK;x6o~$JXRm(-t@i^U4R&S$?G0HsJk# z{Cp>!PvRy@IbPsqqUD-ObQm4IGHvy^lqP`MVE7h@23Rt3Y2u8wk~FOteF7hwCOMvU zoJdoiAY2DuxDMh)OIBd60!tAnf!s`?S?_*w`&3l#mupi}(5RM|_lVmO{HbGhgo*cL z(x2AZ4bR5U%K$s+;k4C|<$1f%Lmz5$H69`9S0Eao)A`(voG ze@ul@uYxQ86i!cGfd?rl8zHVC^7H*;MkG~_pZog4E~tz9-w;?x82vZA<^qZq5VSGC z$93J`a{TL6AqWm3kRXC)?rVe?3N9doy@bLF0QUn-=~Uzxc6)V-2Epu%*hiPwrwGlr zF`0ja=9r>_;8F=QpH01ny`TAD4{U^g+{c&9g14dGR7h#-65!c<=k0utJA0wgWle5E z+@J^)1VtcW!S+B1LZF?8v+C^nSJKkPz;MJ6c-3;Q)>0lZpps@y5F>i{thO<&7Gm}a zAp<0&Bn|exD1Hw^5)V&XrX-}&QW@#k;uC;n9%&J!Cx^07#=odtXmEvkkd@DOZj+#C zsHx$BoxE3aP>)A7cv%SIN*)Ec znZiOxX^mT{jPa9b{jcyNs`bDvxF(7VXWvnYkzTmmMLOBP1r-Rrc>)zC^*V8o~ z3c{@uT}4X6X^YL zcoP(orX6hkf8LCsE5xb%f!4Urb?hEYWL28D z2P=M9(uy|iaHaWd839bsY>T%r+|g5u2r<-y3U~w&4_Fb8FZ=0t{deM?RDDYIRl>@V zM|9v9#6h5{s*b<6&Za2m5f!W#m0(u|Ku`GM&esmbs-c;+0|ofTzbjEU;Y)wN@aL8B zPgXn@u)TT5?tDME7pV{gAr`vYnKYe$6{;QoBT<~**^$k^VI}IsnbwN1^>1G$+TzH17}+XO<*Mnk4IJx`m9O*talUG zPf_kTE&flKyE9WKDa#!Q_QPPC)G>X-s=uFHmsl-vNM`&vsLByRh-aG(4FMOqKpHs4 z{J*|dWE=&UDgd?s_9$nV1+6cV00A~({ri7VGJ?ZVLw(lu)tK(Fe@qNlc9-Gmb#Nf$ zXYRI%4HK5W|6O`o`y^l!nl~Nh3jb+2X$fE`y5BD55kycUf<(bF(B|(an!GWYH_B!8UG(g?kKo_`LUpbJYp zZz)0p+1d`MEeF8~ycQ_kL_}r60O=!iheP54(s%=Vb^rMZDmxLHB|>K`5!jQg(9jzT zHaDp2ENkK;#M*y8Y$^VcX^ zKRW+tm*CYd2yXs!*2|^9ZE;CakGTY|_(j@dJ2U%MCD8SW_i*!Wq)TZy( z76b$87fu2ERCVP!dU9w~P$?dzxEeqac!bH=O8N+4SBP41BZG#7^Ec(=u|JLEP*Qd5 zieb+xW<71&+9&Dn8sUayLJPs1>+b#%5(W`ex_pvgs&hochS4hwIDZL(14mFA4y;es ziGWIwN1br1t*Rn6RE^BZ%L5X#!8i9D52@Uz^^FoJJ%UQNmt^J7$r&S`@3#biRf(gQ z%~7D=7-5duUi)h+fqL3iv6!^pYKare$h4z?xS}=q!Z~(UDNt-3a5D~`w;UR%-ZzT!vfTm1;e0A_O zF!1#}a-au$_?3z)JMMk9>qGO$|Esh(CQ&YU6NUtl7-#QCVZufNAZTyMx5Iz~NgQaf z0tRF;F2@+E^G279Xl$}xC~UtEyOU-vWvxSd44l=bqkluEBln~qz(gbqL~|P>5H!=F zfg=t;?6VyJm;z)RaDpdvI$Yl_U4o)!9(B;Phh$opT_&X8{u3yGJ7X{|Q5mjMu4Nmf zG{9{(&v@}1#7vvC`o}#~0jv?GbA=WJKOOR_+J7icSHbZ~5OrKwxA7(Rl$#Z!$_h+8QjD6O zkqZ8rBT)K+gnK?oo$u76s@~I~w-I51h!BEfXv_l3HhOuUkIL`A&Fu5PQRGB_r;2x6 z)=!9t{D{=AU(tn84wh>e9|QpGVzYp*r5JPXlY@WSsUQAARXYmngw08GsAPmk^N^Tv z3&zuD85e@bTjbZ7I2(`OuRH&?MnB^nJQ6BV49}|@qKy^tcHv1JAV16>0aC|QoycEl z5E!QnnZ3Z@Bvd3N3Sw2D8<;BZ02LebR6QH)t8D!Rq5px`8uBfGCfJBy3bF0k*xTN` zE>kW7GvDeV27kEIsj4V3>I>81IhOs&Ng|jsk4#c*Kn~**c#8M8ma|0O!z=`wD(+wr z3rO6B+zI?y*G7+W#nUK zv&`_APWq!fUYdu_HMqJp8y8a-oNcvX;MylkF3L+G>;@I1;Va_@wMyFyV1{g(k!!kF zbU45Ej}98<%I{4+tZ+9Ip7P7+YKQ>{vZjweTgr8W8C{<|k&2)6fx*;b(L7fz3Vw@B z0kgbdvF|$B#)Y?1(Pag1HJnXuP$_Hk$rn^PE^u*RB`kOQNv9g@HHQJTaa=tbOfA5> z)>-$uIc)OvULD0hPfAJAw1q39ZV>0g;?SXz+;sFY>$whz{sOvTDeXdiSMYCpk0tnw zne6x5ln`P)qV@*s>$N8BIGpdw8)Z;#(`A75OrEG&ubT)X#6xz(+Q{qyJ7_%tI0inm zn8Lg~xIf^-e-Hu)$Y8wv*wJAs5Gn&_thAs`zdLv(U`8^2m56Jq@$ zv&Pf1jR4Jf$?ta<%YayX(Odr zH)~d=`cw%hBRxfLrMFaN%|Bn>PcvplD*j186q)D@k`QT*@Tj1w% zmgovt<6ZeeESbR?0dpFd0(Av}Y5dA6r^+!>IY;}nMfupx9as zc-RshXiX7fS&UH-1WDh4HVI@-xGo@WoN`F1r__9(DNyts@O*qg4ur!!CxZp%e9??h z$f*M9=&8B~CEmr1=&FE*pGMc7bk$$dgrzx^mzUSQ^wO3~gm7#eQtgm%_ntHGoy$r~ zu<`QBxa#@*Y*^zBwG%nYTR)~h0MJHQNK78=Qj>w1Z8+H<>kTZ0!ZYY_f?b6!Q-DuJ zHoDgN$28J2uf`ByqHN$(?R;d+id0TSqcp;Qad`bIEgcALoBmEh0L)>VzqkTJTI+(M$J6g;>WWf+PJLrEY#NOu7;hct?;j<1OV`_i z8@tty*jziJXK+FfVnnxVx#ymry&V1i@~b*nQ9(WCxBi~8Mh`8yMk6^=ttABrB|N}A zk)kz?in0Jf>;!K!f&=WQUmg{JIAAvqi~^en))nyt(~;*QmN9;H9ER*$F~Pq4&rfyY z=iZ)4cSQS_vM@EOqzi>SH!eI5>ZZJ(x*p~rdnN!H4?fWx()unY_?}3IQU#(N&SM~< zWFOT7XpwO<)PLELK(WW zPqOd~uw;JBa0B=-@irtOFP7@$&R4HDg9;9?2^ucyiN!shjOB23;#RuHonJ`3}N1cjHK^TAM8F{`0`*8026S# z!=BNt*9+YR!6iB(>N;Yj+GrNf++YJ7+^jvN5MZ>tV5hdJrBqw}TKTiN*MW2H#Z_cx znwACqMOuBad0vyT$^-Pey3QJRBtmNk}d#1^hM~ISL{r#?k@Br{sfK}_)_U69} z0h78ys+e0lB<%XxxjGL2gR8fWs_Olse(4VB4iRYqY3c5klon}_knToWx;v!1JETiM zT1uKjck@1ce|OyXj{Bz!$2hUie)d{(%{4!*%RsdPr=JLs1*nQF>-z&^80Jh~XM;+z z>^m!}2s|t}FO%(wuL5E6Lc9$$luh<=8=k) z@Y9d5frF7lVZ#NEot;_?S0Im0whBrtm`NgO(#-8JPa%_awjf18fH;>+@Arch?mXwG{`ByQ?#d0JPWN5;Pbmc`0re3lpqX&K(vNpCK3|d_L+x!g? zJT^sGG*Ivmy1Y_nze8GZSR7SwKQbPD^-s%M(4&jUh?q3bEP{ai_8X4D5m}Vel1+W^ z)9i~iVn#)=NKdd!e&A0~1yqX_3cxT2x+N%P8?XFh?hd7Jn>aL_XdBMbD~`&{^62fGz+~Y zFhIYnHt^;F?YBQNiy)g@zG|^Bh{}H?_Z7a*=7j}{waO|jiIL8hM@|FR1phf2_~I+) zV4=VW4O|E=4NZARwkSsIuF~mI8qj@!np^oa?rgpXg&9u~MJ%$&OeAqje9J@|SHh?- zt(gPFaJuu4=Xxqj3zTyH2=B3`rta)2>b$RmmsFVcccd-xCDXrI-L^9{>}TkHIZ}YS2r^#R)Ji6vdWiByDjrWbe=0tn)4mO#NT0dh@2r$4;K zMxty5NDkTapvw`7dO3x`1{BfHc(Hgmx34|VY@-z-GgUw9i*o!W?e%FCra`?5=0X2~ z6+~E$wA)LK#8o!oUz=Kh>)v*mT9~t7jUaJISDptrpl%2Bydfx4$~ml8`|N3wJTta< zcM71|aWH6HCQoAw;Uoo79RDwzOYi-4%ZrVbaZVmo-&9 zetk)ws|s$w?IRexKt^;J*@NH)KnVw6TaiCA-BCbY0Thv!>lT7G5r8h7^`JF(S*`r; zliMb8>H;+#t}8i96!>DO{dU|Aj7-4W_#)EeV{yR;nk_(G*)|J2)0Qik`n#eY4Dx4F z_HRK{RR(xU29By`)>)*6=EUG;^!78<(*MqV1hO}1<^9R$N~6?rq=RgHn8AVX%uDu? zw6h9aBR~@YF$@4W6%S}r`0uegKqcT$DUZa#scn|5KuL_k&$wv>@7eeLTRfmkSywTH z`2&h}gWlXF<$&!={h0=$S(Q$cl4TWhyk`uy50BI(mfdaZXP%A|8 zCIJdaWOgpz3WQr8<^7{~eLQX>f7X585z)4~q8mf*d}aomqyFJ4+M#0b^eOt6yH1}= z2YNS+l9UYU#bKF56Oa{+%(oJL7uS$(?f-KKg_ge6btJYt+%_^R77G0z2app?6xoXBV` zhFCb38jv_MMCLBLVDaW$wA9tXko3?vS^m8O zPAs*;pdo0Atv+nDFgxmDu3+JkbzyxTZ4gDhW7>e2l)TJCa&(yygXvjOj*&vBgBp*C zUxr+5YI8#L=lPycC%xMDT?8Wr>6dS9~z^mWSWRj!mappyYv z3k*$+vs5T%^|(}fm8Y#rdI+V;*eYQSZ}lz$6v>}P5?qfVZpDQrx`EHo!6A4Dl ztqw&N#PZW426WiTDx3`j5}Wuvno6#^vLyW6x@j2M~7Gb3G3W^xgLq7h8Kswco> z0Zdl+$yrCa440f=smrJo{&hZcNFFi-FyWUUe|I$BmWYY0=|dLin^!@?oq<9bzMXy*uMmwKWK`Wf27Bg9+;(pPO2-7K2oP9tL~;iyHfKn;bN}q$`q= zGHq%fg8gKE{&XZF;DQ0oBRJ)KJNL1^7RM0`w#q7#tGdSiOt{kG@i%mH;8(J)@r1Nw z?&`g5>LjckV(Y;8PaFY^%76-pv5m0xQq-7=i3x4iL5(#aJF4Jnb2X;xCE9mo#Vs8= zSJ4?TB!G*SJ*WBKJQ9`rgAolT<6318@O*I)M^@vde6HqctOgnKMoZ4QB#-|Sq(M^y z42`59ivc{MXRiTBE(dgJ>alqrO7p+}4p7KJC|-}%MRKwqbTgvT3`zosGiVRoxs(`&fNQyPcf>pg?DQ|#63QYgEq$%_NM{_kLlBk!? z^v7c{)WpLfKm3td6{+aao(p3)S!(O&BV#$l_ef?nRZ>#22ePF6@FC0pC-2eT#1RWr zK1PJrMPG^jZ+Ihwv;za2Jte&%-*RGs@GDJ^OrX1H&ejzCf91^if=q7P^J@l>h=8PH z2CzQAAKEbhgsYX!C*+%Y9+;`4a#;obH!4gCV}>Ri`3MePtJWWNh%aE_&>io&)|DVB z3NH@lK67p9ZmnWbTZ4xKS*PfzLt7C&7+N*(-}ZZqH?46j4v2q&+M_iR7A z@q+e#Dri0Mqh>%x#QwT=V#JJI~YKYfBHb-b8)>OIYR>du*P}*9+#_LpK0> z;NcE`g9|Prq-6;UyG_hG9K28fP&yT+dB_5ZjCH>7N9I4M)2xnKSCNyGM?FI2?RQU3 zBmtN-KwL#{xqXG9v!*k|G`*gRA0Ub#K1%hSbo6A2&zYb zv-d9MmYj2<3#$<{Ru8e2hknz`fO!Bd9sa7oeu7 zWxNNL5c~8{d~On%R&+uH!_=;*I^TJY1q>W64Q}u1Ky4CmVp;%_`>xRFHsEi)m@nmW znUhAU6FvdI!0E-b5+dHzOD^6D?oz{g%h6V#oTZjhYm$T=tH4j^7zz58jw)y(fl8#+ zT}RfhXsFU$yEB8=x$}g0?o=$0zU!46;GwS%(bt*qYNND0Q@EWkD`PFCvSsT)QX}Im zhfe|UP^6O@JZk!ACo7Gcx5!nEm46-!N1Oranl8+b9Mt7FCetRKNSyZ*Tk_T3O9Xz|_N)fBg{S9#80J(?gqN*CHFKc72d53=Zo5k(<)vP}WP-n(Y2`RBfm@|Z<4(2wM4b|H@mWGf9)c>D(`w&*ZE<_U zvBDeMJ_JLfvpWC%T{5l*MgCy53H7y?lb;aSR$#IV;7Y5LTtKT0|IH3a7S`sZtY9HQ zmP29b;j?$<4oS%p_F|g^_^Ab^mzIQ`pMT@hNXY=nn1?dm^F{!QdHlB-jN4uuDmf>? zLY+YP1APrHF0pfQDJ#|X1S;N-%xeb2YAVHe#?%Y_@a?4FYdPWxCMStS`c)-1t-RIn zhR&Sy`IGs}$&LV$p|R>lEG`WqQ|yr%7-J5_oS#&3rCiJsDt{klya%Am!dE^oDGOVM z+vz3kc$k_|B7VZw#dGCLe#t2(d-0?LgGcddE0Ce@9=(6$w})yaI^CA8P;DO%@XFa! zkKSbLYE5NYTz_s&s}VS2pMrIgzkUdg)I?#&|4B*!VqfhHG}zC)hK=BTc~8z-4KmNS zt+~_|;*AI?*d%4Dqt9!C(Ld1yDR6f*qM;z0ChK+8FabZ5uK z)~!kmgtWcpT>b(%ouE)+({t8$fm$KQdg*h9>hJeMh~K8?5w}aQJ=m@CDAC#EJxg`w zNmbB#S`Qm3v`86|$)HD0^fjHz9!SmwX=$CBCflR+66$2*O4#R~s9x~NBQ22=l~`A8 zqs%#RuLex8vVS&EqhAfvFp{SN?*f=Uz@+Glz<7OJv1sMQt=F)ZLQnVSgpdsSrNQI~ z#=v}|r~PinzbD=ryYr5M@3!6l4w_L(t`7rVfo5;!3YmY2L=7lY1v7UP#Q%s3l;KMD z=X|06K~TA@f5ek8>~PNxo&MB)fL%9ORKkE}%ofO!J~3v^1zsAc@jzq^-S1KYaCQj?}{`~F5|Dmf&fmw|=Ic7SG^ zvm1rCR!+I8GM5fKhI&SZCwi|~<6fE`OoeIeUa$X2)ZjdnY-l*;KR%1A$q0N_B4e7; z87%wEZ%-HVO>${sKABvWv>b*sBrL{A{(h2^Z(O=Kl)Yr{As9jc9ZIwQab}(OB-oqc zg)qX{5qcZAv~cih-7GLPsI4@Wi#!~_C?&x511i6oj?ADcCde5)ueIIS z`MAqk$XM!kOw>ZlCV-a;4B1rvjQIw(I@a#*$$YPc-g3ClMpOnqy(IYrYfs-JlICN9 zRfUEZJS}sx;6cHo-yCcSZ!y%QJ^Y%D(0y&w(`59x{RTJS4gx<0<4UW4hwZ=_+ zc$!kU+J8c@=i`hZlay`W&DR3vVg*k^h&EB1n3=Wr0DE1UP+gt2t?a;PnH=2u|8u5A z07uh0Xaio@2$V9|FN2F0sd%nJuNN#eNV;qKMer*d37BX85p~FH`p*5z!lQ|Sc^!}w z#CKgox#>)VL?zvm9bD1YH~RHjkynKa-m6^xt7Xq#g7F4fM zGvm+0dqm)Q5^!?~9CHiD_rX0YGZD?!l`#+p=ycrJwo-AmNuvPHpp%Dvw`rXvp7BB9 zcL`9vCj|J=tG&bU9~1jGc2P_RzB3O>wU>cdA_33YG6U+ogimw8TuG_x`U!rWf5UBM zi;?DwHFFJ;Y+v-3UnCy5S19tqW1pnCqVjA$_kUF#<$C;gGv249`&!{FB6z?a!^cEV z{qbA>f~uo+i_rS4kU!MJ%rUg!Idb+@k{5iDK80Q{OB;&krOw0Z#CU(STwe)4A|P9` z>U-?wz&}By!IP8`{cGvqwpj4zsQt&2N5v!0q;|<&45i(q%F6iRV^Ii=^T4S<{$;%C zLGG?CfrPM1zgXA~GV;n&TKW;6$ zVHxliWuHvZ#Dt1cFf+l8W<|@AOT9Mn_-jv=-{_1b`W!s)({PH?N%VQD$5j`}fwbj_ zKwNgXFF|!2@h13Sh|g23>-+&Ft^#s=9ZGeQWgyql!3#CgGji;GozCsWz8)4MCoFrD zJKs?G-9Q6gjh6zdi8=G;cL?)N8wt=?i&xaUG`|)h3wUV$eC2IB{@D(tr^%1lhJZS( zcFW*fhZR+#Nwxp@0h-J?hdSD}n`dkClA*%OdKCzShd@%&?0T+->Bnx`-R=Tfa(p%% z_o}c6(Kj**QNPFdOjG_;0f8O_{-m5G_21TVY+ID|v7_GoiV$GtRC?uW`mN4VX+x%V zf&;1{QptP3Wz;Sv4P9wg?sMwXM6NQ@mrvgM<=Y`r%(=d;M@|06EpGzUaqW*6>u;l* z`v`+$EX!cL*MY#?v^LdNMuq03A*Pl{%h<&Zl%J>#yH!I|GwCUNTnRrDZT@ImB1U#C z?u2>|twSQAG(1qKCz@8p9=$rU*ze(f6_+mH6hZRCXv5id*cF^~RUM~Ro#?u^GpEPT z<4`yK*S7>Q9MRunHk1WnBI#RR3F9O>+K)|d|NKhODooS&OG9E7UJGo#_p)V@f-rvi zCwEKE=hd$+Z1G7wp?e`$*Ze}%*e3~BRU%~LSa2r?bKW)$*Q`>?ucIu6+o)yiNJCJW z-}Th!E6Jpe^_I{98Vj%{0Wq|EmMMsu(3DS_O$%PcHbhb~+qPI_f7d0*@N1a}ijL9u#V{%%d@X>^svLgk73 z8SmuJ>M6SV++~6jG0xUWze>ol2)ga+`tRyUbi}K+tqexrNn&-}KZa_{KZGq|~4^};zp zortg%>O7$dn!ws}`3fuK^KDZ>HGc9@hF#0zz{t^ywp8h>V>k2?`8h5#+?EW>erQgQ z;i0oT1Y_<}pkQXdsVu1SHSxar($o962zA51hU&OJq+je*jMA#!lZ_jgK;6i;*(`x8 z0`za1K8e`;L(DhRms^~JfHLscfs2>ab=I=c!bfvXuc9%JTH*M;416c`5GG`%F2;<<9o=YSigijrMrQCV zKSu7>GnRwRJSAHIj484fwBSA8nnBu23!76vyiaXpKpGm*bH*C3=?7tyo-36P!*|E( z;;1U49y$za&D8r_XzQVcD1(mDC7IBv$8EJ&tF-gdrDZYC9FAHAqjrCEPFae9tcX(ds)#&c6gr(#f7hwE|U;dniCGO^PIlmM~r{A;a5 zqo*#Y62n``Ur}xIdUMOx0i0tx00}syAZc+?ATeCc#6tclefyD`&N{iDn7noa-1aIg zkdh~^nga?=m8NG)q>&o@3I$4;DQ8B}DAjFt&>Dh1n)79%h9 z9NUs~ye58Hmixer<@MEuI%Id{*=>!agY-tJ688C2NRh&)$wpzm@TVP{0<8CaBkecS zJ$Ioy{u9oip^c~O)jg6@^8PTh2nmjUdTtm=1lLrT4|lW))P&E42hkoOqJ>;R@#&CRSKt(g3!*nE*&1jZ9;XPvpa=ybVsC6d06puS!9Yx~aS37RGP8iPMi zs&AHxQ(2+-&oP7(e5cgcd_0J|JS11ASvp8&5eKp81N)VXqQ+=Wy0c(QDiJgHV59M9 zI~mPS`*|;a*ucDEL9o(>ig)}OhkNUy0SEmL;%%%ZY$gRZ!8#dZaEVE-uaQEgG#EO{ zBszCmI?fo7PHoJ3RutHFb7eC?)Q9P5Q(O;edzJ;>hrDm7>cV=L>0%qHrklsFK$OvW zTTpvGpNd6-=undOuW)uPufFR((|ZkZbl9zlAj(#ox|DHB3PK z+rk`X{SeYtszY|$BmXkUnBJ2obOy?PhN4+HtQ80G4{D18vji{wxs~zlTw@7ql9W0+ z36$;(lT*GDSZUcflRxgRQiB3E^uENTS>FS;q9iHf2z7^PqQ>W}_%LgamO~csf z;7aqY=yiLFUg!C^|3)SmO)t~m2KHzMTmHR4P8THJcFyTsp!(<5?;rtg884zCk$gA~yhW=@&3vr*k%-HTygZ0;qjIZnS7l z)h{es?NY?BgYKqlnbf#GKie<;3sWjebU_0s1kcfo(wkiqw2z4fuqWtGX7SgO*NNjq z{cVI|7x+Pu5BN}fa{Z01IW~bd(V{$9#FgKLW0DlT5%eq3=Deh8@^%?~KZJLIgiV;?%_1mogYg(y^}65y*+W0YQRsnPcXHx=pgotlAme<8)5x7j`RjBe=FL zX#aW=zIE}M@JIe-nJ+`pyWZKQ9i(N8Zw}?YY^BSNk&x=sK~OII z_okW9U6;kfTRa#M!blG(kNfcv@aaP9uV%+_)LgB}KSVHJ{aU6SIAug4q5nYUU!|o} z_->jf(cIkboFOPyiL9;fz_KE1g-6nss-*=`4lnXkKH)obcvdIVtNs_PA@FlgfI` zvPDQo4f-YN@V&-A1$|byGbe1IlYH1Ff!ZJ&2UlhZ!7><$Zg}ePAde$0uZ7R8_WdmV zYP0%cFTxI!{)jn-rCL<3q>XM`n!DF69;(b4BeEvL6I=#P0o8GtTz?#^!Z+@Ck`iSB zCD+|LWluH@o$`yJSTR*tX1R`HW|6O`dqy4E36bk;rBypsb}J?mt14){hR2pG_N3Vw zI!`?8KSqA6d3Qzww9WeI00rjf?eIP--~j{o<>za+mklhi_yj6uV-hvx;bKtFU^ z+ClIP2b6nr6bsy-Tdr!k(|=IS(;Kmezf7$@Prkzyfl(Z_>y&-US}yDQu-P1*(5soSp41_h*9id}fVZN$Y0mNA!z|vC7Z+_TDFi z%@IJHDl1jg_%o}+E-|^Sa(Q!Yk5(t#R6q~ ze0)!sK?ra{d07@eMz*S2TS-2x0UMM6E8ppe{uLXD9}y_#9aavY$4vw?0p|8|-puK=aAg8ej#QrEunX!x!6XB{p|mj??p zcg6*rUGmb$M3u+1PK>r=udd@~Y|3AMzmz8yJxHrg;1kZEmO%8s#idFs@;jWtWHJey zbityYi$=Wx9`T(Fm(M;vKG`+K+8PaWl?WUCxuFIeueI$_ToR96L=KLRH;!75 z_2)0m1cC>uHJt8pt?H*)>Hb!Ix~#dI`XEx)=banuW; zmPv_X&_ZQMSXV&^V^gJu`R@xAL!ZT=Ra`q*s2$unf0~$`)mSyVU`NNm#Jm^91kQD6 z!!st6xIa6nMzGSdq@P3`%x!i3-$2pzuv3ivq0>A7kW%`|aJd^z!ScUbx=7uduCc*7ft7X~ns<$z6&DBAe2tu&7~E|0wT@hjzd zqU}gcP3tIZd(KkBB>NFta%VF8(_n}9_>Jxqna-fvZW z{u}T2wI(u7{(zlQ*zt3ya+so345TF3C7WeFEgX;646Enwx`aY@A``Mu9}X>T4d3=D zi2Bq}5v}k}%eu6}*#2Nj=;^mu+>Fa=$2%(!AYA?xo2U349%o~+^>z7*cDcJ(iPpg? zP1ri!co|_?ZTxXc;e7^C|B8`{0Q~4H_UNgkspWRzr(m& zsSfc_#}3bOv{~)y(H7s}D!XF~9LF(Thqb4fD*4itvO;~A^_egCy}2y?(x%XjpIxAm zy6v=Ye}Ky75HO@QEoxxKVJ1?yh&Tqt;*OSH;Hi_Ca7Yaw3#W%kOMzf5I{Fsj<0 zSC-(yi6Mey2IWkuwD6V7BOtp((Uf2L@H0Z!!xrDi8U^-FKLYx#o;d2Rrw5x?R`myT zCo;)}KXo{XAHCj~J4RvK2+O4QBhN*D>GW9uiAFu-WBgluNJOOts`TI7?to+($pFZdE&bp}ap0}Q?^XS6L@lqwRh_m+2f)=ilI5DeUQ_z#COZ5&nT zz6*03a(SgNolPgZ9ii^;kaLqOV(hVbPm|#~E9S$LZ>W&UF~N!uBCp#2kxCIci>)}0 zx&G6;qLMIRnScUw@hh{`O^4=U0%r0LUt(z#b65VL_!9pc=@5@xTJsPz{mYmH{aC*I zEmt$8H><81k&qH5c5Vv8f4@x8uSkRkrMp_t_1L1SY{i4->lnA&+4r(7tds`N=yt(Y z<=wY`!$irw^|C(6JJs_psAj46)U*w>mW+Nz!vvUT(t)91#9@vN#4ZOn4nJ;%N+JC4 zy}5DvusNUbzP;edEdIUv0=0jtiXbwhgP!k%3VT91-`L>S$6v{)3@3G;EHnuF<5$Q4 zXwC4q4SxH8k#X3DYk*5tv@=EEtyLCLIWflNIuykRHwR}-wzsv3$8=zmaaOBb&AppR z@DBl1*xRAqzex?TLGq`!lO%)%BE4w(XGmD~bEI8>Uy}j0lnA06J&MsZraA1lM~Uh_ zmH+mKEHCS&^SNN?=;+MP&%ZdGdHZoPS+0s?uaAY0A8w_5eQwg$9qas#_2y_v#PQ&Z zmi?7?D{`TD%SYm|tak4rraMh8-282pMkIxXQE5LhrC$`*iPN&ZrEjmmi(CxtFvyj8 zFZDh+DW)2md2+EqGSAkI;kk>zuyZ@a!z%5kT69z@Pvx1jHq9r=L?ZOmm@LMI<>!Bu zYOxR$ZsJpx(57>!6)0JhvcgMnoX{#7s?DH|S#lJTm?~Lev6qNf@D^GymsPNSu)Nc! zkE!Z3w2NYje$B91Am9DRp>@}Nf)O9hf;yO}>`R&Cxwj*Q{}s!V`@f=57oYn^rFF@q z5DCR`w1D7!!4N4?8>BkZL^d$+hEN9tT7lO828)7_gIc9Yl3@g+sIctx<==bYW=XP-W_@Z#Fw8>dYm#OK7 zRc9#l-;xe!@7}2oOW}q+yfNmiQdCUrrTXXMXFh0%9UQ}J6i#=wZA^2viD1^B=Vdt` zO21Dxt_2Sz;rCFty7Asiyyid;yW%EJ-e>>XoxyoY!7aj_~3HdXbnR}&)$G22C8R&vMiJ-So7z&4%dihAm) z_2E9=S1*-m-S$exwjq416$*Z@%N;7&m>|1u?4KYz)xgehKKV+!02e;q{YYCKr{xuFF|ZMv$&n#7dvn8YHE&^@^NrUW_O zuuO~eS)U#>@H}% zTFEY)O*EXi!6c6CedwP6x3c`*@lD-nE4=|i@T5V5hc%1o)Hlwt&4|S<2bOkYv@b@iyXPA+_NEjPXGRPNurmys`@3AE?+5m~Q@4k( z->PKL*c&zDK4pGp>#BiK2xFHdiCj_Q&chvBxXLj9#!i}0VzDwlMk9~YbbmxE+0mYZ zU{yLJ%AADirU89p)CFhL*{~M$FF<DkRgW3 zWcoQ%Tr%_IO)b;DBSx;m`?KQu=-p6?$Z=59q1rx8l8$aB8zefrEw;R!3AsxTxQmdwR7v_uRU&hzw9`jYc_oGLs1_URSemOxPkPa-jlxcMq>|J=RyalpOGcen@4%8UP{&n2B)WoJft+P8F83`w zF{8uXw|-~}g7LCXaOb~MfYba|Dih=M*v5@^ieuiTlj|bm?c3dK%@I;KS%?Qx11_o9}{AEe(1_gYrfgf#My6czp^%0tcoq|g{dG)D0yZ6{d zS@tilZZi`058^&i>~8v{=!1H1MlxZP*zcF`8<^IXI&A7LONCJaII|{R!c~FKa?QI= zVAp93EH>PdYmDp%edeQhoc3F+w*PkRiYO2OsHCrU6=Uayp$>dQW`tK4mG8xTo$zzq z%LqcZ!^0 zgi}76jR~vgIwSau-3J!06|VJD$nB$t7ji?cgM2e|?8^EdN$sn}xc;hqIuC{O{!tM{ zbG_?`Pb2%ww&|+kOa9kvbahGCg9wd?R*{$`grdd*0(=UPpx%TLeUH4yK~`TJ+6oLG z9=YK^ag)F0(IWd26WVAJj7&$%XukM^HK&!a?rIL+s9R)hf5>bLtgHD!jm;ot=9#n1 z_fTpw;a5<%J`essZ9T6#{ASHKI#JgldVA#iy0P%e62%rY5Pg%Hbn8&0ZTZtT%Xu}+ z^;fx}(q4}3+zagC2>p9*1*)Cc3ReB}p{hAhdD&tfW5=Q;xRP92AK#sZ(djh^=*Jr~ zyj(3~kTjH`Nb8&hmI*;eZ*5~^G7I?x!Y&}*_G;dxYA{@lnXnL#uaQE72!T2+DHCKD zqW+zC?|e<%4B}CdnkUSKm_fk*)nh&a7j>UG=Qbzc3{AH1RL2#A$^bIJbY&DHO7Btbd% zO!3&VSZtz*PuWjkv?(R^CYYZjQgPoyN8J5GUQEnH4iJvDC@Z?1A-N0 zGjfi_BhGYMTDvC$$JIcjTM&%$Q(~{(XZ#VAXg!rmtI;k=xdph9z=u1t9DT&mXD5PD zDO<%hJYq<0zGAs>z)7I2NUD`YhPGowg;Hj|Encx2!^RdBVZ#^WFtyT?1lmqGdpbF+ zhxq65JPOp%l&rWQwCH>fqMtNhs*%$9kv~@Co&=j+AB)K;`^U@b>l7K)6PFQmVoX^X z!2Pj&Q^1J4@07>!yi51kA);!6Ea-AX3WCAL(?0}+6R`X{Ir;s(u(Z^B?elz{xBS)E z#l@vfV>B5!(6tjEFTFPX7-jJHS?Y`)u66$5yjAy|a&ZYdU-11#lsS1fHPO{}p>3<2 zxJFWQmeqY7tg5v!iS?V+j~D8c+%`?QnRUw+w^eV-dIeH1o^FhsU5BD z$~j(#wJYCJ<|Z>6U}Wed_7)%IkuNs6*d8ptx)8lE$3{ZB=9HCo9(ku!Xtfp#oPBqj zr1n<$xyqu{T*@hE!jo(`Zt1z4*sXBi;8i&A-*M)N&nC_skLBwcpJ58Fayy_#BC6aF ztS(JczUu;wLT()!40h)`6J<-GnYbg=lR<~)_c?K;O+7p*7&ip zKw<%lj_4Iu(Sj&MJ!WY;7_B*vTZ~!$f!OE@$PW{@w%;zQ8r!~T(>@~icPhFvX{I<= zS<7hJj5iMZ;gIYq;VztrCObcBBYONtBCA6T^nI2#x<_;}GB=@RL8AtT9~AuX-~UNl z^#&+zH1D2$l?Be-?WeyWr`cowPjN>UNO;Nm2I%97S8D9*XImpjL8t_Gg0>vQ71T1P zh{Yw4%-hO}(v}Jxmu2^5r|2m6wCLgXPW2fl2#bSWBQT7TJpWSvRk&o`QsJ@LQt_9s zP~$ubOJYty5JMM|)_KqpDcPt{;c^gPJg3*Fw*R;c{$p-n0k{+R`sT> z0@5;5;&QZhF57!r4FLqD0fjVbw;{IcRUe;!T-u4td0k>Q9JnyyvakGw)= zN=O!&!yb18dCxXKsp}nQeJXEMiS6-e9a^(hLB z5;nqnZH&vl{pVYcuX`6#9!qHoa|tGmr~L*_a;pyWkdc}L^h7=Q{7;dNdmF~KofZEa z9>!f-BZKGK%;#*m+9&qN{f~L?K#4XlB<&JT0?F%DD#v$!M_W^};R2HR#N0=|BM$hG zdqOMu<-M7+Nq4Wh?qdvFdZ-`3u4DYyH^uA&ejc&XJ}sD$!c#D8J_y(S0hq48JjBXxk>{U7K4t1XRsmdb%8(Oo1dnM z+h>CynQY2_^5gB$ecn+^#lF``sk+rf4BhOtr= z^^lYLOy_1@Hsr@|3B>7qL4imJOzr!&o$eZXz6!n@cpAwLb0Caf-V5%NKkqJyWi@}D z_`aW}W-pLJar0!((FQAHL1-czC89!;l%q=j5S6Mn7akCCYg+3=MTbOhc~L}NytgMQ5f7N$>QPluT^D z=D$|b8_&Z~K8*e??LsWCyFNsmH0)#hH>LC#xMjO^|n&NjX%pQ{XlCbNTMtU_UDp zwau?|W^Yd}->3O&+d#ilyWqQ#yz4X$c{eJn3Z}H0jg}#liOIJ}$pzqBjB6qYBnT@>Pp zhdygsyT>47E0Oy8`+d6p)5rK_CI?3jvMpoWSjPeT@sH(&=Yq{gXOZg`cN>$FlWWK+ zgm?XCM-hvYF%T{x*JZq{r{W77XpS_=JGu6i+Qne>qLRhc&Zww6GwPwp55nfsPQ)f? zKexx@OxdmfMx6=f4Tz2hn=fhFKY(4}V8*aq5B>@mVX!4jWh8^E&V?+sdTDyStLO8o z!}Ca}Ig@*m;A8)CH3h{YWlF1Ecu`*A<}dj;KVvOW>6@tX`wbVvKOYxm2TxAYHQ zZ-?Xy)~Y! z+Z3tNIPdsDKYYXlvd2ek@3SU+V{O>8l~3*@bh)loRO0pPqd68jHDl~!-%S#`^|DmS_E!n6YGiOI-U6HUkyNey-y_) zK%d!vV1$)ctxS9<+Dh1~{(aZ!RAdPdK4E=S910+fg~BJpnUx!H=%dTJNniY<=c~dG z+0^M4S3`9sIZ1}OX`Jd0g=Qk2=Pp54I8Wm)-JVCQ3Nvc5%0x+gziN8iWt$Hk1?uoE zubcPWwJP)4$h*H7#2Z*Bs|PhzNY7xquV!2;GT^r9zP6{{qevKbyr}-E;2m~=t+}7~ zNkXY<>r*9MBpgemE%&6{76J6ub66&3SHjoe)%|b}?JsIjoKQXA{E{X#UlSM7mFc)8 zIsM`o`~54z1UlA6xM^pJGB0V}EyH2>hy91}b8-qL=P1Lm4LaReTh?Hs>;>y9+uxVn zDOLTfYEA-z#&=E1v8qetPXf_tN`cth;_MC+VTK7f!#V8x=L|{h8-v*l3H)28WODuh zzp;-L07W0~K)H~2sZ1Uj?cLZJeNs4=Yx#t0$RMyx%iQPw*GWp9e9H6IK1I%WEljmk zDo5G3q{Mhmx1Oo%W})li(F}nA!g_1l0+PbH+5_c&r)x!)ClgOKcKR_gxLxmKyUn%R z&mtxtt(Qn}ILpl<5aib2WrjDzxm=q6%8?Q+NB2YW*Mn(x-VRwc7P=jh%sSCezD-zT zN@_PQ%!w|q>n8p=7*0j0mB?M79%yC`lVjZ$24}7WJq5|#fsM$5iKh^&d`10R6NDjb zhuSRVXy1Ou;)!j?(!%qYL7yFZlgZJ=J`!GNae8@YzV8~wjtc}gHi_vTPQ2oyJGvDL z_fYOMeIGQ_Z_%Q|2xA(W412OXAEK_K(h`!|b*~mhP~{ST24t9(@F{QpIthSvE!#GX^+!D62g74A_wN_kKi4tLlCdUVkn9mQWiTr| zOyt}~D^z(7v2BYmn-9$Soj0$3ar+R6_A1q*APaBg&E-5pD8!o|jfJ@xsd zqT}WAG^NEga%(ZOgi&7}1=WQ9Oo`5o4Ww0a_xbtWVY+4t!HShSd8&+p%;<(h9X6E! zN*otOmAEZrLOmzN`c(vVRoM~cG+DX0JU3c~5x$?z(r+h$h1Pw70Xa+}*Y2d^jf;qn zyku?<{sm{?wCUwR&o_k1R29#uvsa)Ii&Tz3qW<$r><Xy!S3!-`$!3}By+46d>ar>b5B zr@YdeQ=u?co#bfmP%2oG?Mz0bo?JCu^1adlD$JllD#6c?3Ix%viA(xMA>`uJ+I#PeSbgq_xt21yXs@%d3=O>yt)v_Ei#TWFzS)hZOT4B=X_@1}tU$ zax71at$KDRpPy2{oN#Txxk7}PbQxO0Dn+RGG8A_6QhnbRIn7)@j2jsf^pAs@M-T`) zP~qRo4;6m9ES#jOm9zWj(=F;YWSdW~CzZ>!i$42z@|58%2OfG}sEN2Qz=tbI|2^G7 z*5mTgYuD?uL3K|w*J&eP-&nJ=wsyf)+o&ebe3G{p8jKWT=L*eV6`uS$8=e%l$aFLN zj~K)A^C(W5-z43_AiOa2Tu|WJBW|pPx&i;qTb>lnemx)mM0(5NsBJQ(%iH)JR4=o+ z@0>~B`e5Myj8bOhKyg`6ISD&NURlyD8)x&~)Vubaa|tuO{Twf=v{y6iugLijnuCph zy7UvEgSJ$=%N0p+!y@ti4o$A0)2PpF*~=wNv6+E2HS7MH(IiqXPcB4fY+&ChQB&uL znpY{Vz>z6h+z9#LB9=HE5S!kEcki6K(_{ddZCMrbU5vmP$jJr43N<(+S8O7e^Yt>S)8kAqBu$`ze^vK#m za5}2MjrMVV$a#%14m9BjhcXZ=kYT*V{dm6p1XZeVvPh9)e*>=n}t;-^x zyJUNhZpva3lYBa_>7r?|0~z+-kFoZWcZ=ALda8HI7SrY*oV-{fEOA?^3{Czyv5OnA zW;y!H#D*~9CQ&_J3PtBwaWQUA^6jW+5%>Jsr-zglc(F_Z58IMYgx6}1t?wRx^2$C6 z)TcDjpww~{yj%2xll9~BWTA5NpH#-4`NH_ms_To4mED4MiI~i#Z?@GnIcl2JRIzS3 zS!KIZ`&HNU?R}DMr;WiGD0V3|X2*7=)ihV@2HUNUf^(NQ->);`*-q~9w6rla^TsuS z)#LOnPqM}2W1Z;>o|jZK>Rxw>M2#9|O8p`l*39t(HW)IW??X$tIxb3nOdNQP#q*Wa z^pz=peFexduX~<9PPqc5>7oeK9wxTt!#G1tUsr>>u&Lfn|{%LyS{H!P2xh)n3^@mQg3wIL-7yqXQ8d^x2h4X`^o1`%G2xT zZ|i2Nif|A^>!=+%K81I(^G^l@PP$|2LK4>NrWi^dMb8+=it}3(mW^BeJ6CH=HO59o zjhJ4cw_Uh}SUsGa8kAMHUE(QGVTppG3)_L1+RGAd2bJ%U>HM9dvFgoIlNtj%I{xAF zPgJ89sIrU-Z{}PR2sOAV+gNqVb*0e``HpAVk-Q~+>$I2Wl+@#(;EX`|e09oy6|c8) z*JQM+-N;*ZVcd?kx>~bwd##FuElM9X$=j`QG1jilGJ1M@vFAoiM?*1}=+ROdNC!ga zy}U!NG3wyK+7#~DoY2OasT1yV9NpMzgi>}BSE4NFbMJWWx*ibkw+7$t4B`wlz*OLv z^Dt?;I%hb)wXrTzzi;W3 zG{o{l#hAY#9UiXULH%mQ;+>@FAJi-nFa}WFDCT-tIVm5hEkr0f_hJ2Y=0%S!&|->}ZB1`*SsfEZ+!asW zm*`mBhQwM{=y|h^=QZoIU1dzutr;SDAy;Qx+rlLlg)7w9BOhcJXb|FiA-87Eg@S@> zqXM<0owZ8E?{G)7SAe13+qc#qy0nR+7o@RmtoKH)cJb%1kmUR@Z810J=#YPr!^u2G?q)|__IPdc}{TMR;15)+CLlE z4+P_79%Xh2d?|<*&3%?k7a+TEyu{#vxbRNYo;}Lx*%f1hp`+yr^rLg##&U{JO&!%) z(~yS|cTAch<6fGp1XS3~;R>1k602{KII}zXWpl;?MdP01oV!JsqGtzlP~n4miOg&! zQx^4RO>%;=x;i%T{jWVU+sWsm)^(?^R@TTQJ_sOxyEIeqxNKhhiBy|B6Nnw{ddmBk40TSvYraBflmdPaJ%`|P2*aFL=}Q_ zcSb?onilk(9VZ+{{#L|2Xjylx#&T-8L(zYd6?O#`%Yyn{AmCBA?!Mk=p?5s?RnJpf zX7DzxQ&-mnKFhwI-X4Wl!LH+u(e1dp)u_tuGjfV^7(dZ zLN{+#>?EZ}PpXZd!4c(yTIUm!Xq@4OIIi%vuxTjwLf{23Lw$D9pSyet!(ch3iPm?F z0^My*wB=N=QNMoI!V4(vA-L%zq)6s>&!A7yFg6hV`~QC7PvG3DmSmcsYOk=Q#8-zq z0C;=Y>!7fWHGkbO*4Squ0p$SNiy9!*jWP!9-rV;n-zysw9s{$}d3kx#w*m|@2|%X% z4~UQE5W+X@pfilRKJY*6TS{t;UJyZJ@;@rhgpEH>_R8x{SA(savhAVhKEb+@oo}yh z==lt%-l5#ep5%DHWik%jY3P^6;c;rvvTC0d!S2Jqb_xzNZ`HK9LxW-F@Gt3~WJqz?gayiad?fj6L-rdL zni;9|WSpn@60Z$gozM?wa!ryTsYE?Y&y!@lrF=}$UHp@i^sgKp4Nw&H?mMdI$k~&_ z?bd}CXM12*ZNu;d{b^un0t(b`K?;IA+W1;b#|$Lav&JL8yFP0+R69&+-b3*|Y>wIV zh~1=Ond<;oD}Q9YOXyVNSmgI(gXVyi^@WO0@3p>sug-=F%~3IjKk7>*7q4w}1mGSwJ9kXB52~j9Zl- z)?uMHuyUx(fXV1R?oW4zldaTQJoy2ntv?M&iYK?MtyyOa8E+=VZpPiO{Z!;m0S^vD z#xttmt#R89vfK6r#ya_HMgOl)B%sN)*Ecn7x#}+;!;MjY_ZrCP%KaSv{Sud69w+Hj z7pQCw|{#zb47foAwHj?>aWopm!oPoz)81bd7a0 zRb70RdEwpEX!R%68Npop>DuG9#?cZ}3W5$jxkbUJsYH}53u z3vgH#cE5qNo98dzkGt0pwzEz6h?(95m~A@Tw`|7?4Nbp)wDo%X_HE!e`gS#&lKy+X ztyeDR|L=!#>)p)q_sX|Zjq`VcVcO%u?W+5vYT)Z2lPK;^4P&dNVL&Jh?9`pWj**vl z6V!uVmt7_B`)3Ml9lGfetfGfuV$v_fGy7i;|8d>Xki6qRD_A4KhQ4tm*ny@lpv{p2 zW*{MbU5Tf1+KY(g%C%IQqU=NoPkK;y`&W(Py^HA>JS^^}rWd~Ibn6XPgVGdS%0HjE z6fYnz*nX;DcqiiK|La)|3R6gySbj0<53q7KO}$dbFIdT!xKk*M!OH&MiyyTo8@;|@ z7#6~lCb~h{eQ8<9gJe7j79)#q%lgXHBklibPsNX4U|{?oU4DLin%sZyd%OxP|7Cy0 z^gqq2;$9PJf>z=`Un~*-)2zzqznrlY{>vFl_P;;+|DO-L*eIYV99ptu!rS>XE^`IM zoCXB0y33=l3rU6^fQbP)0ghI5>Azp`B-#&pW|p2j8>W0ZVlcj!n$W;&@4euD_MgiN zd22wKTaUEB>Nq}e9!sUEcfvNckjo&wuevhM5_H`NGj`p}5#LVg0AN8~u+OouHR z99KSPgPJwi1%QroD%;s1xK;tPwGM_zR7_I{P$;5p35+T-Zxe=d2+xH57*vqrGiNdr ztO@8Ag^2|em+wH3%&e638`;Q5D7{fhr|NW00fpr`=BC97;ZDBWN{d7L>jBpjH-=uMp}&W#B@NEnta%4deTGJBAKGH zapjtS97W^&?T0Gj<_!ND(RmZAxOW7r@=?TFe}mW2mW7t@0z0@OfegpA1&N=N9wXE% zNC?2UM`eMjOYOxgHWoq&XJy)XzX*J$&xz{uhMu2+ndVpUvOIsHq479+0X-rE7}3bC zQK*OGQ)PeIW@t76Hy+WrfR%yGw=#`5)AS4s`)z`a3LrSk)locdCU9bqW2j&4f+kfJ7BYocRR`QUlw-CI2!3#1YVv!}rL)tGs%6G+xZ* zX(Hy7%ZTUk@E&Q}S`V);CDYVvu8yDf z6GVe?ARXP!BOzE#!^F_)1s7oK2HIQd94VSPH!IEMiJ%9b@p)`~=5L;AC4OyYSszBc z6jZ{}%AH0dZ>Gb{CIeZ3GacR4#&uw_Wk*ZtKf{V)5NpntFN*Bs=g+T>IMaph$ef{* zV#9DIJH0rBQsozYxr}gz*^5qeuSxB&8$Hcwm?uCYeCJm0lbtSJltGvqiLY@Y%7lXX z*oX08l;i6PCh{g+CH1IDtg$|+Gl`2PM$cUPwYrE#`eB?KLDxZu7>c=#P+B=}`iBc-Q?)$IS-V;h{>@w)s6M3@OM$fWxU8s!|~LGam( z;p0`AW?s|{rP_gSphu15I_~6n&(tI7&a7<_YY-g;)1bPvIkN*2GIPSW@6;PLm^#`)>pZ zNz%VivZMZ+ST0CWq9etrseK8H@^KZ7q4oR4T>BX?gN?oZ4NJi`<}W@qHb|i#2A3$E zYNw+0?f-{p^NG#hdBZq#M}(g_*Bv;yD_$(fvDDsp-jN$y z23Cdo;z8dS5W(ymi;MbGQbODKKZdckveMb9h2wOhBo#exKy8%O z6N>cUVPZM}aZS)w-%BC-Lk@*McH>uTH_&H+n!&}KK~;plg#{;)Zee2GZ+zrt=*0W zl9Ss0-Wg3JgLtEiy8Z*PoYxOTJwDyw+~U1i+;1v-fx+P+-ffob9cpI0P&|+)SH^1$S?#QWFEgR2t(WS48e@rboz`^ZWW|KAu51`(&Dxmw# zyT;sknhkP#2;qp}w-u**q6oL_mt6=S5>Qyq0{Sx5$G`Ozh}ATFY7{UD=R+}eYQz4%EvXOrB~V?n#8k!yJ>3j zl}19p|7$rJ8=!nH6hY$>w3NY90u6e7Lqn|n3CF3_gzvnMy#LQX;3~HD734P50Lbq; zxlJ!IB-GM`?D$V)_@8zC?HkcBlaP>5MFcPB#s72FqYSS(Xi@zK2ANR)e?Ula3UCZr zj_bZe{u_Lu5b)=5(tn*WpwG3|D%$vFr86OtFLVwx7>h!YiUa3?34@0xixPE99J`|! zG#PC{my+v9C{D21juy}mo(}?Eo-@Q4bRDGD@|RV}zsEcotJC3bEan1NzcCXO#a{_F z5VV9icW>NAZ|5feU!~n+ zGzEx{Yy^;Ljql1lM-^$kPGtj2g1`|twZUJ3TzX|?h3hE#p9jI>Po!z`TsU;jRp9pp z1lTGu;?-Vw6S?V9v*s!a-I(ecesjXMv@KJ(2vAzr&O0J-PwVqSJCe5TSHn>Zr?#{z z>G)NFFe(#@u%8!wE`>{n+aYSNf_f~B29e~=@z-;QE$GYx&J9q>{A+=8bj%8ts9+nV zMcabm)jNOqS#)>sQE)Ahe;c`Fp-I?BRud}l7md$6Gzjux+;LV>9M~zxNa9zbzp<4` ztX2kQk5=P=AkS`tQZX93#bEgnB0JOJLRe3N{D1YoB4{kNxZoWk2il-BOwp%pVD<8H zKry)X%D)EJ)ujk3rc(pO4}F5}c!l+`<6(kaE9ltzaW`Mqv5;HL8d*LQ84|#C8DzYI zjR7jkmHEdh4TMO1n3@9u|8i-9Joxs=TQ%&vwnSN69dIq~r=@CH`u6q%?+8AwlGBCx zgS``A=J?O(xS<$}xnaPeMwubCtz+8tb)nVxdBP-U@`KaQEXX7U*WQG|8B(DSRkYq< z&d@gqdf#^}fK3uC^Qxs|luN6jVf?S&jXEYXG1ELvnkQ`zv=`uEWSSq%1U2yLZINbW zkC}#K`h^V3s%S)s<#cMrW>OuE^AhS!`Vu_IQm5u@%7F>s|BI>Fq*VLqPTDg{e-vjc z9`m}XnzI!NSPb0g6Y_XYJ%97}8<< zJ$>OPAiEA0lEEJ0@^6h%;9z^*S7Sf`BphFSO>AdmvQhg&hXB3pc~7BygLd9+P)>vy z9N5+Sdma6>mx;BJm)^+hPbG1S9SB~*ELMg6 zCn%NSy=>HN|KBJ$&2K#ZL)oTZ1BVRyq|LE;0^AEQGBx=MqG0&}T7;r8eXEg$Y+4cm zH(~awMylM7t@wThU>G78f@<^l6e9I>nk)7F6y1i!jtxK*pQTD88iPiry zb^}RFy0=JMLWeFJOR$RO^ZMYmk1u!yT8TS^yLfYg%;PUf+hx_{Hk{z!wIO1xVKC1; zU*Pe)t-G83_-5tTP9NBZMvRwiwmyc3N?*D7upwVF2V~l2t1$^nESD%Wj&Gg>i;D9*4;(oX)Tb-iLkS~fi9PNPj;ll?N+!A0+fKr3Dqwg+yarA%PQ$YK> zcJ~F8pJRdBiMs{I?8n!z;~mU2HF#@BJJu-h*a@1C`Pa|#%KB!uc@Un zsgfVdvGa9SLNYJe-JKdYCx7{j@HjW^iVsz#hQ{vHJ8)g*C9ES#fB2S6tvMGLo{kC| zxI2XPD@H^YbFu!qF|DF!qLIQEN&Bpr>zMwL+zYv_f@P7vy`FyPGSAz5TlSaI)Wu>W z-$!t-uCJ%5WlckGC!$(-9_n+iC-;2fFC3;Ky{?@`omVawbZeR_zA@xsJYNbGOfAv~ zF7}}Q7_GpM8*^q)VjTRFP;{w+9`YG#4?{0N9GFYiFuFN?-y~B1jZvWj>e3&_FT{az z_9|90=A<{7uY6Eg;L2GJFrd8l;WZ1#8#pJWRgbppRho$4FTp%-KtKWohC;h7mIyGg zbDwj|Qr~Kv&l&oowv+Il2;F7@WOLfkbH8G2`_zn?uzMIzL1hM%DU!m^nbfpw6B(mA zjKL3q^G#a#OVOVD{J}oZ@A2^Irx=6bxaq3vYp3_(=Gq=+?7G7uPKkv7(P!(g>PxFa zBn~U4MNV6WxsQ!D;+|U@UMNyMZpc5Hw~wFQXPz&XQFg=uN@_qr8YX+`C&H3$Y@#83 zb%HQ!*<>bJ7;JFu+rbbcw1(_6Af4WcAFqEz!w~* zJwxkn9EK37WL&#tW9LlQ7sIl(5pPV6m~KQ7Y7od?^P@ljBrvtsA=PRw!PrG!*K*Vv z5CB2WtymdZ8e$oP!^ptckl>G(<<>b7MTex(*LDc?N0V^Sr{eC9zz72o#XQYz)~CWp z79xcqJS6HsSzO5veot*Q&(#1&45a*|swP4wOrbn{$r&UZfCygMA{u`8+Jd<7kyGGnAYdS z^I0!VDaNwQHKB>#w7k6Up-TQ;Ih(KRA&!Pdig`SPlESsb^oPuO!A~i)%07|QT>QNA zy<&@Rb$4KypuXZsI3LoqC_ zN`5+((3Q#AvGr|?pTvZjrzG4)#2N*#3ks#zHaG3EPvN!3DEi-&CcGu#F%EQ%CGDG= zMVvv;^y+Sli|a1kF&^%`r|Wc*#0`?c`D{VfS?b#6s6-r5j{=e|lYuCvHc&G@Us+me zwGyD_%prMugGUdU?JeI%7VhCM*%r^1?gWzt!iw6Kvj1d3cgt;TYC6}Rmfr}y-REOb_lZ6a;8@mdV;}Y)-a|2f?t$J@uD@(ni zQvuh2Dp^dOr&fpiIPkjP!z9Td~I>06bL!$qdnIf=jF>HtEZ0r1}=Q*z)hj!*2xcY39O z;@G|F-C_sA;Z5CJ#W6L6U<;<4ovyrXq>{bIRbshH=eN3QHUHwa&es>l|GFmN58_6z zHdJ!lO)_3BEhxP&b?o_V5mL0PDdUx6G=*U2lA1;`{G`Po^UN1p^0S zgxbHrknnUXJQ$Z@ao9>!aHHEVPoihRB6*Jcq6|J2T2ylSL&NSb%N;{H;7z;uUI1rR!pDy|X zdumH@M>zm8(zn83>H?!XMo^Ux*03pbfEl>D(wKH9HUM&l?h${Q zTh^~bCtxCUcN2q3$*J_@Us@sg3fLNEssDM>NRw!V;WG1N;l=1V*Ycaxr5<8c+`A?( zqfxc&ZWF~^X7R&UhwqK9Lgbmh?Ea!B_d*BP-1a|_8klr!-48X7FPhXa5ihjdZ=4(& z@-cRUAU;@7F6-q$F&Bo8479CnABxgD&tC>+J6!>V^0wq3`pzhcXw~LLjJ(DCq2~}`F1)xcKqe7V5qRCCHn++$;+~QS_|2|7 zeabidw0VFuMj&d%OIWzyvMfX+0IF3C4GkN6a9=q&3BL$&<&L4Lkhp^ECQ#p!zJv|Q zkVam{j^cvETue(Zg?GjgHjssA(7c2VF*kfS<^pUfbH6@MuSFNMM9Zx73W~TavRJ0#UgoBSd@_cBbHvwb+&?=T z9fMMN#U1j$=+6Mpke{yWHE^hJOMtX&fGzr&Kbw3^#IJ(EBl+Gu-a~a-13%_6c1poV zffD-r5x!a3Akcr(E31^{nbX)Qnv9tIvV`i;C!TPEHi^Ju>x7z8?nD^(f|rq_R&KMBuC z<<2k9wW5bUy)la~Q(NAL=GON3qD~{A(Ak1W;|0mFF-o=Hnvzkm;FMW?a$x``8_(-+ zCRxAazLxjq-F`hEDw;hnjVXE?tYlQ+WM-MCVj=1)766i?&kQzK%xS{X(1FK)j7Nt*XZnfdF2gkCRYYo{epxyaMue&kgU=2Dbl{Bs z0=FJzLOy%QFqp;v;{4U1g9B$Utkd|+y!50-UON?a$w4;ev?vspVV;5FEM%mEYm?*d zN|!vQ<1qh*%w7fu8rWao%J@bZ`%{s@-F28UN5yRkgkq5gBRK8lfdldQ{njkCl?~*2 zRoLJt=cybeL|zT&M<7S_b479&dy;{*-jrB>DdIr~sxWm+uJIzvMoo4PH(d0`%aVCR z-fH+$k&Kt6EFT@^iEZ7%H_wfuzGWKcxXELqZ~fhay%e6iYZzyq^G4lXf_9G z0SHid5=HPIydMWSaWyf4Y#{|_$ynIzw+J#qq=?aHHLZm)j@|Gk+~x3T;qLlyTDy&7 zZ`9S#9GDSL!DQrle5PKSIcyxoTm^|m1Wvd|l}?Y%-*TH`>sU3b>QMS`!de1yB0IbI zg4`v9haMMBdRReeHNOJp7tx?LZcs&n7*6Taz|}uhatk`)T93ac5e*Od%l#;v{l=RH zJ1fjMr$oY8;iS!WBZ{XZBT6v_u>vX?*z^M>iX0@%--ECA0X0%uii3)N{NlrN+Aj## zr{u20=O_}eT8z8zPlc7;(iNnLP~90W&OgB3E0&~EmR5b8zpRrQV(?7samye-{~)>y z2Og+bjN20Mey5z_|4*hm#R zImt^Wm06-$S3jz4isk@SMi7Mk(dd1d)ix7z<9)3MFf61RDuJ<>YYz6iikH7h0ro)o zk1eQ{NL(J^e@2O`lq8C;H~`G0y2jI&5tJs`Kgw$O$>a%<7B8Q+{Q3ocyg|v=lJWIX zfVnTVKe}63)Si2hoFEyOdSIlBuQd0ckZJGK9a0leay#%zd9FW0UcRPwNI(&m8Cc6u zJTqA+osIm7{~z z(P9YSYW645l=L}x>Om!jFPwS6v;ki^Jw2`8w~xG>{*kwn1DzsI4>$^D!~?4X3)SER zl*i|0p~l=B5WRQY!UJNKJ7xy^xy+r=#*{6284h3IB7xl3seIXX9x|M-Tlo?nUF`vN zJVoW@Ge{<2_eU#;sv8NCqoB}<)Rf;2N2I28B=>Z)01D0S|92!V_4 z*JLgRn13*~FXL8_gy<&OhfNBd%7W?-SQ-c@JEZxb^ohsP2?YviQDi0=1|;YaH-1-R z4AMQ-=+J&CPw6zNAsg;=o2(={jGjS2iLM1ipW$+@Nevfs4IjpY{1u1zHar|{6N|Y~ zw=>-#TH#J*uwdlJ&Q*yq>Xn8^$wC)8SJmuW=a>s-ZjJg6FVoUu~TOp~qO5PrO zQ90+v9$gYp8`Xa* z44%c1-4pJ~y(wVL88l1tsi9YIt9q=A2#itGUbIm@FZ>1dK-xF!bQHlbhPL`3 zr5=!y){fX)Lf0fs+9G)8LdzmMFALv0QKzbg7jprZ7eLDSesQRnOR3_^>-2U~ojgqtLIycP z#A{MsF+k8B6fw$$s2q>fX7F(p#0nvX*kpNfiHGYD|J0ZSFfU>(z3X#57GIVDEU-<$xd9bG*dFoX=U54u5T^tW`C}T>#wFhA+qB>Nv?olh>sd$dCi{ikK zZ2klnSgv{WEI!GbJ?L({ zkwoa6v)Yvm3E4*~-sI9YQ#cCOc|ZnQ0D4wMk%Q|Yw_q-zky)OvuJB? zPl#K$`p4rn79v=pDTIxyuV~;NqDgYVgW)HyC=duQgzSAu^&jlbUndzK2BQ2APC6O& zg;J`By|xIua~wTQio}Kdx!P_upbF#6!=>S7Wttbs3PHt!o_^9asVO^OS6_8XC{}B+ z<4;EFw|O1$};?E#g^b(w02>+LB%)fnB z*)Mh0Inw%#GATMeP*xUDLMQ{jUY0sz2fy-0dPA`cl1uus z%23wp6YyxB`Q~@=V4hXtcEpnoNDJe2*A>P09*6~oiiH?c*ZD?voF);42BEkgqJv?j zE2M;sUz7x`USu!@X_Qq*kvO^E8U>|BMh(h^x-&GO z`6pxPQ&2US7UeQF<7LJ*aX!xPoc1YsZ-c1V?!Hq5)|YBe9(I2fpK?Ke|LFU*i-u0x zY~L8opA~}#JlfFd+xlx&sv)iLbX}hed*rsgN~{-EezR=_CWK@wgrtChKV z2X9E@tuN8=f`Ja5s6&5-`8{J>fKTrXn>-HT3o&G`P3{!c*CxTYC z*E4Yn6^gq$#A5BVSg1(ub&$sG8m-~xKmxmb9H>KBk0}iG2@RvLk^6PQiGDAIcj#5_ z$=FaARpKMB7^vMNt0b;=$QXkja#~@{ zqFu#T5Q;`$UUneu8yxS%Yuz9OLLoRlQ*-~px20&&@NFE@yrkJ5bE$=@U_KzijGOn!7(VWyRbhN)ARM4qVHZL3R_EaOi9S#rGj~%>8sunlMNG&D zEK(MWXdUh?kDQabYnm4=8AreDy@;ihQ*bBrF}-9iR!d8L-62W+FB2`hazyokta8eE zTu(Q*x`<)!_t%{qspd7M9%<9Ula+TfN%jgen*_v2mY9-)nC999=ESmOld+N-o{vu& z8S)<6);qb6y``yGXk)#4I!^)4w^XqYLku*D;6NnFiJMuvXz~gUV9;Ss$>vZ>6vlvH zY_LDtSaLuBs!1?`{y?yV{P*N&3F3cQTurJoys> z{M{T{UIpx+=)ln5w8YioF!+D;_F(gxx~hBS14^y7xXyzq+%c@#Frnmq+fh z;ZifP*F6mITamGexQxX_!^>}*BlW}h^55) zRSA|RJOBvWHbJkB@aH;c;=&Flf0^3yU5S!q+>!|W1!mpUw&nK+l@hyW=Xwl?BukRX za-Fr)H3Toh(k<9jG)eULsd9T?Os#-!INP0>ea4LNtAAeYy4TqL67(V(W`C3w5`*1b z+)wvF?({Q#zGR%{2yHjhZK>JGl%Rf|x`c$u#Q`-oT%0$_8t|IkXmc zzUa!m(%04!H8K;Y1$Y~R!LK^RfP_Mlj&qf4?Aniev?E!lIE zmBE+iOo}IX{;&XN@)+569Mxf95z8_`=S0x8X(w!Gv|X`SBUf2#zUNv2N0jvyv4R(2 z`X83d*PLbSV@&njh1O1zb8g@1NeM&N7dLNv^mm3?k%XG@hHTd4>^!|Na+C-4Fu-Tr zBbQ#g5YbOmw<G9Q3|qj@F#k4w>B>y@eb-wfTAVT z;8RR=XT8sI+BYA;&u~rK&B3C*v+$ym=_}TBP4X^z znd$M}r*c@WopE$+SML8oCg^ivmBy{M$wF^gEQZ_hB<7B7M?|^8StkneQE?8t2vY{rRhR3ogJ`k@2YtB&2F`E=`lw3V@^4H5Q6K zpzg5E^nV_YC092o;*afRg5`{x@mEv)wWYmwnM6aS#P>XTWb>BQQ9eB%?x34t zkfz-b!PoDXK?@_GKy>mNRxUuKr#q*FU;?;8c=F}!1+|u@W1i0bI>zZ}nb^}bWf{+P z^ZG|$ounS$x2ehdIkk2tY5U6hYrAC&OD0o98HU@Q=DK6cW_3}+^3^aMeO1|bEWY^0n)D!%MEC8s;@_LU@lX3i zl$`Q{9z!l8(m9IB+%2s{eJg1j+kdzCTU)bCx?14XhtgC!FJv^nhV;{>@H*~s7$-W* zoaVAYW%s-4s_;}3pGr}hT=tKxjg09JjN7=W?{fHFS)$5Ab0-3dXht^0oEm8M_ZgsJ z9^(9w@HHt$hRndxRk=rYd;7Il54I)NJ%kPfGzCI5zlhE8t<`*f(0#R{dN=X0Ys8MM zuYdng9m%t?`?wair%zQLJ0kG#ryg%iTyhKbLHs>_R7n0^e#Z#qH0|hND&E6( z!**im@m?4xHqQ2S)=k`SL_R%6&ZwD;6o%$NJz%jo3HCLvpW%_+ zv4ke;tIulIJ<}?voXpL%Pu$aY3;&4dqj*E!Ou&Jf=YKv|FeQ;}8hM#tkSfkNJbaEX z&i942(F+CBZ@HUlA?9HC11@7+9lVuE&yTp|3MC2~;=`Xi7^KwseS3Lw1#+gc!0@2! z1m_Km=s8F(-S>(SFjLw4Dcl-Cz57iiaeYb*=jYb(q$z#`OYw?g?rU1RV#3y;`4_@= z%(j&(_Rm@@TB;<*aYM-XtokeWdGL}Xpy3X%@HU)<0WC8h_kOF|9wG zwdyN|d-AK_rWIzsNV_ec@%u;nBcxW0x1aN4*-^abQR*%xgTHpxQO>_N!`5>wG=2KGx`#CS;Jx?g;zl;(sMo7r`AY29?M-j4d+oDwC6pj2CyX7| z1HVp9$B!>LZVwgUcr8Vsm5in!=<_Uk_1$f-cpzSe2%^4%+J^3?)!JsWR{RN|}|NTU7ZalM--y{3?jxOXiT>0MW z)CZZYidvz3s`8)3E@b?&xjS4{`N{>FNpnucZ40W=nB6Wl_kZlUb>!tyO3p=A=gR(- z459MIkr`4j>~_c_9QHFN+a|k?(}=;R3o06zXFG4}lh4vN4nJEq7yKj^wR7CBd_#0= zco%!-ec$5(fuU7*@=Fp)yv{eA7RjX%diR7?)ohce*9C}C6MId5iVsEx`%j7QUD$B+ zAUK$_5S7p{+WL#_3#3CeRe3^Fj^aiRKv@ea<$n=|^txbW1csl3uQykIT@-Ncf z5l9#F%3~CC=w83yx2%^V>MV4_jGgRuBusCRB`H>Rfg-qV`+JIa`i;jzM6#$9zD1gm zD-hRI{?MoM^>fy;DD`-E@$`24{r7W-9yb=-RcQl~OY9byUL&=wWcS6+e)`Y6&2#T& z@3)!5=FERPar(s*d-@7~PziSIgx$|GLVub#QWt|pqMbkG+MA2Sr}Uzabw=fjs(ONc z6+l)fVTMoAX6{SLh>XQM7Uwj%j0P$X^Nq}Tmhi~jACFRfwDa_qEJ}X}{+g%FQ^#DS z7og}n#OD`aixdtcfz(f+j)#RVY}KR4>&n%zVya&1<60U z&Ln@I)x-#;^x^Ic>p2h0UrizU@oCDDD(RHHc}c)WM#VSdF24!M7!(d&6r?h|wB@iZ zITOY&BVTDWUhi3b(P_A3miZ&WG>u-r;*rmfusQJsA(1N5k-^V=a?K2g84JW=3+}Ci zZ()r+6r1!D!i~3%LQ-c2`-E6O#CT|i`T13oNU6H`KOHOPHNTd^LGA_8_4DH0yXc5{xU+KPk$SFsJwt~H?Ol@;x6b>CHl`$#_c zMhHy^LAUnB-=?gXH@^BueSpR#Rmt>raek;#p-AYybVsr27a{5!L=Wf9-v8lS6Tg_m zs(QCmy8}Zdpa}6sR;F+z@4Ng)<$=S@m7MZl-+oh*bIcMAFMY-APX1$GZKzaBE`0RT zs19@5t!_Vu5%Fss*Lvih8;fDdIBuHj)2%|>7VZnDkQ;A`!r15QuAE`MHh|n3v@x^# zRpEclT%zHaRvj7s(Xy_Ro`FCmuUm06*5r&`Bst%8BFVZzz*}kY&>qqX`r~`gU9?(M zeHf_Olfw0JB3ZTSrJkN1?GgtkG2b~K?=db!h+?N=uH{!Lj%g1jk@O!wtKyl zOy;d?q~H99H)s%RCkb~`TrCq*b?^4Dy&?FxcDi(aaxv+elHc6B&~LaOeP)&=rB*Sg z5wkZp6Y?x3OD;(x3f?&5s&c$vZgDdnV~`QY6Mt~yj4~FX^z6%}6=rmkIG=fIWF6&8 zLUlpso68|@>HY*swY=t2i9CBluYps$`$U3wz_p!#(;`f==4sCKA z7058yC1%7}jPJ4Z7gHV}`F)4qKh8V51qno7R;OjYlq+DS(k(p+B$%PgJ zj&iBkCFSTrK@S5gKZ*6VsldzaYg0bGy9hB(+nZFI8IE!jJ#9HOsK)1>H`t zcSKyQ?FTV_-JCLH7mk#648P25^)rT%u#VVohSiGZabVgUWNmxGP=7uMC`bpCIUD0A zeF|wwF(2y>PzsgquVj|~ji1QmEMt*UAGAZsC0Dkn)@{-pL77f+!M^HX>1b!zsOO@b z)2$HZ1S74T12Jp~*h!$U*HAD8+5uIuLp z7bmA5rt=OWAH44+MZc<|ds2l~(Ex;wu6|yt+1LI2D0V1TZWL>)H@#9fBt~p$0$;p8 zXg?#fpLI#dN7mmBgSN2F08xo!-{@`IQ;rcd>$en+7+rE^vm)FtB=9~JLcH*xPPi^!{tdshphg!Z_KHKqlbdSWVfZ|!*6-V4Vgx&Qm~KP2S)RSIJuk1 z`Cf<$aZHSTjAdM_i#=!ZQ!{eMiaw>Tg?h*SS>If_vO`hC2B)^Ayg>z^%L0$5bhe)vhGsT(2#X+n4kjIk4C;emy|UFxR}3n)~8c z+pDweF!Ad48y-8UebrDm3f^a{tfbc|vnR?(Tpo8C_*h=v5>wUc3f}H5sO#Hq`d{q5 zWl&w)x@e1q1PdD6-4ZlNaCdhI7ThJcJHg#ugS#ZS6C@BEf?IHRf1S0~-uIrf->bTR z-u-nbiUMjfnRATZ$LRf&*6;~jnY|n~z8{RYxy0%G8PnJi7q`{LfHFeCHLQ~Lxo^@U zZeQg@&oIEJeyN1(?ulW#@P(GAcKQVt$+`k)p;_nfw8&zH_M|D~ylrCBz9NNOv&A31 zwq$d!CkjT*7}G-=@UtB4)r%NH{Lt&@#@dM8jM&xC-!!6(#*r|zPJs1OJWIHoO;J}X z;2`q_4i#n0MUFyTTAES@eY#Y1D0u{%KPuu)gi?4Op{m095{?2+hQL~Zp3+)who}*W zhTpRw&DIvBx%}Uyk1tlrBNjmt#h@$UPKfITg?i{+*Ws)C%+nAAD0w$NJw7+G`|=lY zlw)GPMe7b!$oGUwXG~6fgFo(;^6!wB$b#HSnlDuB;8C7bud1*hF2!yuaXk2x0R?)5 z@+VPG!a9??m9ofa!*26|;?=AGLmejv4l~WN_8RO*jYw~O)r!o(o29Sg?}^Q<%vl52 z(VXPpy*#%nvA|W!6PXaK7we~RBuXQVKY}}c%rYi?Gsw5ep`T_t4gZVOko(JDu(swt z+LeKt+H;PWjp|3mlQCArs%b(ng=Hcy#F0w$d3=JQM-Lp)zQ;#ikUGC> z&<6d8K8;R^Keo=$`^S*at27h8l1B^o9kTqsIM;xcd zo~W0hj~*!y*$DFtqQ_d>4;@9AD48ck?f& zoAsAYo6aM?C=I_YeG1!!Z>oSEymBPgc8{8QVtuP2@wJ8(U3zRR|FLBcDmD&jJ7G5s z^AXa;F$7?8deIKG@>9f9Gdz_e(K9$O+_i50%F9J4rQ_&{QF`zZo-owX{ zBYvS(pBVm(mQIcINAa82!-oppcHUNmhz|O`W9pRAF9iGQ{PxK+193}OqNjYaZ}l`_ zKRWNkwn__v(vqoCwdVxpcO7Tdb?4~n-QFlE*3!4%g+&piFkn`$XYuB#tpwybk#@#> zy%ebPN3R6?tcqC$HnC4%hr{pa*!2kyyN}e2&*RtW9@{+^<%8;R1R5;PsFO5oPE_-N zoCorQAzqH}*ufQf9}jQq9(URMtdF9D$CTvzB6uR>Mk`wG(6>Gh8xlAkjvM{e%L8kX&JG~hUhe1T@|`GNEnMnCDK=VFhmPLj6>3k;1vs9MI!h@$tK# z>{k}&8`wWAURQ_SH3KO*{ge^S3TrTIK46v8uJwiC;nZPabu68;6K+6!=R+n|?W++Uxw_~e;giJdtEG+7vo%)_ARRGRQlrIhqQRqwT&?Z_V&(qB)(D+r8 zybh^7iJT~{PYsAza+4vg2$zOAF@hlPa4LAbz&md@f(-Q=pSh>%I7~S4+lTVrv$QdM zm%!c4x_cPQ=)nVv^G&-z7ZZ}{SEd_*j*ESkbK_lmh#{FW%;Yk{Xtt%7!OFG0_aBe- zcF1WYL^jL7^c}uw+wL%s5dAejOBR| zspOhAXq2t$f6jxKQ=K@iCK|zk%jMX5CHvKAsb+yL*xY;D4uf~?;Me_;T=4Z~|Gn?5 z+mVR^t5k>qSL?4ABy(RTE_OtUVUidkZrc>%&zJsCdm*j8oA}s`o5a%lIad5RU;foO z2Q~Sx6H7R~9qu_!FOeve$}$Y99hQ!R*jEYwj_YG3SJ(;H;5Q8=F+b)_QL?%pMN(!W zsGID+&0UHmcLoGMAE_*g|e62I4ZuP3JxT!0qUO za&&6QYptg{@2K-1AjJbJo;sepEJwE8ApL2u6_|NHks@-oPgsR=x6-Y{d z7PAG|HxO85_!nS^wdC2JJY77{MOOOT5L*uXeM-7il{rSw4rLOXoqlI6!~9^H_@bIm zpg{In-h<=q=LZQuqzjk6Yh)Z+bF1*qCrJ7Auy!8ED)*RtoGi zYe6*C>lHCeEuIpTp*o3!kQEU zV{&5lcD4?kD`JoytX9@J<}NG7r9Yo%und%O#=#kb8{@SjjTou98PqC_D^0h&@_X*- zSAJI-4lUt-(vM3s9G&+kMh(n+V4w0K>SDeiyo}TidqaXdgDrE8Iag8Q<5mKBmp2pa zbfu?=D*;vZ`DH7G9>OO=W?5Ykt;5I zo6*QkLGve^#(0pse+brl@*)r5Dm)suFN(?aO_MqLxM^?W`+)+M+qI_Mvu2;hGG83@ zw6xr_3yrcAx%1xbs&GFdEi;ZA;DI_fdrmN%3LjJA|H2@Z%fo`QLJAV_uiwFpJc=Ct#}c%M%j7H0PchYZ>_CamLvu@HBj*o%5^ zS{pFP)_Za#zefz!ZO*&H3c-4ILnu#qt9G8ybLhZY$lXb79eTkYZ^S)@B_NVZN>g!P zXi)Q=l0M-#A|bdeq99Bo;f>5YYwmb`C1#I` zrJ*-Zt#kK67bD^53BD)o$+8A-=0YcSMsJd$UI-(2)G}$P$m`0TWDze#Tt2?dp!g_) zTSFEepQ4+5Ga`JBLwJm#*?3W5+f`eJrLJyQj`j_=<6b%0d#cYC>W~chYalztpt-Q) zV7u&j72#OnyQd}*M+h^;g*14K5;0Q)ancGQjXn~*jG-zof_mM7}=c=dKhM7n=&oxPE zbSC5*!Vh@M5smc`OZ);g*fM3n(>93vc!mK(-T&Uw+-9H1k~D|8^NgISsF)Q`=6j!? zXHZu(LZEGCb@D)uuwQovwG(u!l$h>(NNIo9A1?7RLVgm> z6;p*+Q8Kl(7auBxv=uN(=06Xh;3K)``m%pA`t5A#b~e3;_V)bUS7v%U0T_Sk1c>;d zB98aUrG7J3sFQW^n^13F+-hmr>QG(a{qDwiRRaap zj39WWQ9_Gh4?WQo%Rdkh9g%Am-N;U?w$*Ixh|0Xw{Dc$K1_XoEOLlI90v`>1*E_s& zu|!}6d>*SOs&^E{y-TKGzsRr;VeW9&gy%?PH6ag=jvIMiMG4$zR$j=xM3g;!!+lW| z@MEIq2zL<{QS&h&NSW~8V$QdK`+A*q1eO7y{{6X23RGl+V%Ra(uTs6>TTmTKc}U$U zD^ROTB^NZ5q^K-jhJ+jLN4#z!E(oOn6QFzQg{pJmz>yWUe|-KGS}?n+4skRNf#24aJ$F1q@c z+qgpgo<2sHf9((p-On;ZcS0P$dfj&PO}YI~pKD7IJTI4iNzFC1jz%Q$y%LWldNXTz z8yQ>u$4ru<+_un7tpX|{DdJIV7%_w%5}N$023M60?E!%%v=OR4lxQr1}P)S@>?bk z_ksB~AkW=Ym!lN=%Rz)rc{^>E+lM{3CSgg1JYKV# z4^sr;)>4v)Tu9wXT^_ICwR8--3Zw-tlEjM&^#>*dEoom3Fe({>6CF7EAV+O;kL%r1 zkB>^laBoU2CX2hDrwOqCu6VYbzzN$@6BCf z$74=oaG7b-OI!;eSKNWjm$QVG+*29yhPwIO{+c-Z-Z=tViWX3R?^tAb4p-c1OgF}l z&LdGo_#ZQfkjh=z!!r+BcZXTAe68+oi`Vt)$|7ROWg3vgE8SF0v3AP6OGm}YRiqPr z3vafnaQhkG@s4?WX#`zXBn6Q6`g!+wUWpb%N|oO+wRU<`ciKDIU2ifs2h_ai=WB|Y zT?pr+tbu7g!Ucq^JT)fJdjOjC0jvmEO9`>REd$i14=C$?{Wi4qm7iPKDbW(6ZO=~a z{dx`G%kl7WER}c8$cg0G?E#r@s3F%rlX{AT(#(uqM2C9MEjDgsu&6{vet9`nsH3=C3ln?N1ysJt$Ez5@i2t`N!FD}t}ZA-=|r)e z>b#>|&#$a5}()f@xbRHYKh+j}~C}3yUD#xP=3au^7PL;6#ct?%TthpSP zs!@4W>HXq1VuIs)2-)pIY|YQ4q0De=>!3=4VJIAKG5p?K=lgH9Sr}}sgM+fWj&c~X zEI*^QWzOm(Xj%FKu-OeWcbI-M4v+^{pHC8Qu(!kTvsZTXYW;F~To&3%d;GQhwGwXQ zHT>&T479kq?0PK|!UTBv;*RfEyz#Q$W#0FD6%pv|7nif=h(RdXJP zwuJ8dk9H4;21fZ~I1@n~BqzM!>(P!4^hHGxbUpQ4q8ntFMc$n~rts@4#LcK&XXuEd z#1}_Bz7}+Y%3D4xVe1^VVU$($%9$q!)EH0&PUx}P%Ct+(T<0SZ!t$wn=M}RbwL6t| zogY4%23Cj_$@>sX6}7JE=G091o|P}-G1H5CM{hnJHGRC)Vd}JtM?BI~luk{jgmu-( zi#xRQ71;Qd#|E>ROzFCo9g3DaTaK%6C^Iaal>VZ4%7?vW^)q(DzkI5DQf4yGI#nW7 z4EId=;ONam%QV%U(Mm#+)PNtX&E8_j3h}n~$+9nRxvXK8-xR3jnvlc$TrY_0n)Mi} zH@0|gHac86LhM*TE0Dexv`|GlEs{Kz`hgO=fz%f}$s>9Q7sFqmYX|{LybyOx40BE) zKVFBiIcJ!CYg_3}$zwjTpAoD>E@0q4I2lXzRzfVF@uyyHy{SolQJ#WHWTG!QvPEsa z(Btmig8=>QzUcV(yuczBM4a;Tn$t{$_RkTQ&@F8-tie;-uit!lM+4KUc`<_Hp)3@H zM>M#oMC)pW+(sO$gJ~y$SB&yd5-XY0ShjRKZWsT=(VGk#ZOp>OG=oE~-k5@uVTUxG z+*9~C4o8PFW|YD8C4&jQeRT)rX+?VgE1T_2*b;I=Q??_VU7YxoIm3ctB1zj8R?g$n z(_DL2?zs%DLcp&-l=9cBTsikWGZdn%@sh2$tAT zx8U6Beuz^bTQ8_rQZKot{>H2Vd2Bo$W7lzQ%;3RTwxDG-STOc)AYOLpmDja7KTc^$G4AtuF6DiaL1jCy{xsPy-ATuOyt?LSIRf%2)zZaf-8-_1>)iI^$7t=D z0?#OIwbmgnv11MeX=|bS-6rd9$HmyI#*!xMR>0!keb6cWZe5JQVN%@eeYGHvDr3W^ zuwOsbJa%aJv(pNWH)(slRJHZ8hh%7psb2H`(yjF>oub&8;ivH_lmBngeznq=yKpm$ z;*BQo9>#cG2R;BSwD+<}4MQ2E@|2^<7|-L6tbEiP2kOCG8*g&+_i}Bp1LI>c&RV(K z58<@V0o0dQTmTOG?t}3!NB^17NQQdNBRjRyrG{?}aDq=JH4AZP9Kft+XW)XNqOvGz z%NVf^LZjlaIn)pSSV)g{o}no;KaD+zaD{PQ2hh52*8$t&-h~$imkfv{my*XULEha! zd*5fHNk>=QEk%r^;8TP`{F1s>B^BQ^Ik2Ox!&Zl`gKqSSl9I!dFUZmg<2>ue6OK_{ zM@l)J`D3=)JA0MxR5S@KBZ`&5mu76OM@q5d&d@V5%T~LNl>`#E{B`qjvM5)$Qn*w* z++znd3*Ooa`>ngecGr8S*R#!X61xOgUrnOAIM%P^{V%Hf38jp_=z!A-NZRptvj$Nz zPFPAUH-MoE;7_{ek3};)`ZB)cj_nRpj(E5kLyl7Oz8Sj}CduQ#=NfpmJ#u`5d*^$i z?YOwBh1Rye4KdC01kQZu=;eqILt$RtA?IGj9xUQW(W!K(dltWB>sg$jv?LRO5cKYe zUAz3u-cl=NYoquT-eii!`^xe>M3ip%`0Ej8j|F$9+;1L(k$ZjZ9X%_SLe7-J50}fI z(}-FQo2-xA@n^8LjQpIC2E^o@l;5{y5fTM&@=BZ(O)372x!IBys-2r>mu=K`^jAsT zj7i8)kBo93L}>LjOSF2;irbwKV6=A4!QFQas|YXdjX$NT)xhMT?rjOgjUW1k7)$bB zr=dh`ZksxkhNaMyvUw2^5JbEunXq(=t5vwjaQH2QpFd5`dEt=Bg)e%n#1 zpcCD!zkjFiyJq=(P{8NjR)il+?`iA|Am@jwa|?_a~isa5n$_Qc{8x+gKDkh)GqDsYDrLN}oC<`Vw00-j}i%m%kqV3z0W+ zy8F>y0wFF`f*#IfAPk9iNQ>UURK7(o0gH7B%+PLmN@O$T^PzWDNY`;~QxI1PzIfjA z0QN@;iwQtd5->|vf~Ys>#`12bKiPdgom=;R(Q+g+MSuYOzt4Z_BaUN678SX$$40j95xC#k`O*JF9RI^n5%~rZ~r-G}+ zu~vJ*iB)k$hA0dQ#!w*)s?qO4a9EjOc>w zQV6?j5}#f$xBsY6R)sof2n%9&c zDqN|kW3-`Fx(q@qS?-=uQU+*C1~G#IsU%xK9Nj-SxUgCVDNqpgy+dPpi`#G4f|Fs2 zI*7rF>vIgfIvVc`l2+oREw^Ru=SrUaG|Q00sm_B?@O-Z)A3d|>Z80Q+FamZ9LVb?Q zPgE?9-!37_*Y)(4kszBV#zOz)P|k_ibt4&oYeoH!hQ}p!moRkz1GORL-=Bd@pU-v#lQpd-7mmBm@uq zb))R(@RZbgahQ-)tM|S#gPDZC7{Y`y9PhoN zj%9}l=RA3cNUv?CSK9vXEtV0wrNM}aCa1wy;NR(03Qh=r8F;8#n#sa`Xdge8E=ho> zi0Mc1QEaDDLPPv3k_t@d2-3Ej$IYC8=q)3I#U!1KlxAqJ4hrB zH+CScJZDoiE)Dl)c)G5Qp_kX5#B-mZBkwhFC^g)%`Op9`l4*UyChBI)4%e5tthsT| zR1t{vg(rR-G=o5PyCc?ChONENXHyRW-G?A0^R{VGsG1&ZA0A;kGS*4 zap|LN)f&dwif!Ivi8gf+l)WxP98ES##(rF5XzSFvyNJ#5D}gXJdO&nGzF&|%1DP8+%`*FSQUEnGg?lIyRM{b`{x(qMhf0PcHNGNtng;z>dil=s)_LZjYXq~v;0{CB(#KQ#>L*l5qFR1*Zu~?Y*5(<@h%g#<%L}L<_LCeVfqC4 zjaG-mK`=Oci>g9Y-&DU9&&zAusz+#)f!>!#xX8aWR=<=#9ka@1mU9m$Gr)#E{!(VN(u^%6-Oq1B!hZ7uI}{vp#ojgfIrcKi-v z?Jyv8j=cW(&K-(RpPDhDi`4XhlJR=d?-$)X8vPI&&($B}_83%0cqNJIrB=74#iC9c ziSC2XgZ455p?+I$G2M0aCGXWjgfSI%0#}w(|71k*s>MG>Z`Gk2cJ6_?oWRQx^Gf{R zwEU|bIorPc=5jJ;ZBh#78-5#(Z-nwvrhpc+%HyRizFY;}8=IDe`{~MDAee-reWUzS zCVuJiUW7es0EMhlUmMmE&*cwGdw>m)^t7V#?a0{VCBe|()<}gUgOr%A8K{! z$!(wHX2I7=0{o{5?-`!Lb=nhNgzhy5@ereo-0CJZv$4vTpY#$WFVOiN9gODAlw(K| z3kwNz_LiC{tz}f|f0w3|mhh}63cA77bo<{pmP}EUPPkp6TqO_Gip|4xTHr;zcc@@hpLXdNIkHjEh&2(gWKKOyl3ezz-Ql@Xq~R6- z)QMWe9%E;*QT2;BjlHI;Gjp7x5w;k@+Vryg;3+#F6P`W3)%nMBxtCbYEWd_!@nn2Z zlMa#whhb1x$`#79m!*anSpWdTV{yh4FTcHIzu6z(q+W0no6^b2%g^Hh!;Nw%lSIDM z^(ky^d-c3~cU!RyzvMfvQbLc7QqIc5l4Z~xqpN)$p_<4Jj#tA00nvGp;!m^FkzSnO zi`!$ETf2fTNs1#D+R->n=1{4EDdrDUoi$}Wwh}UX$mA>1MZ?SjH!lOQJKu*_RMV!m z+Qy6en=GUVtB!ZmN_3Pr>U5QtlN4jTg*fkupb?o68*fsjb?j!)H$14mMfz9iOKuuCxYWzxP<8`$-q)uK-7{A1+8WSw-31cO77jmvWcFe=YOrR@)6gJd zfVt3Ytb_ zOEMG#YciEba(En<8)rb$!_>2$g9UJ@?|UxxiWl-G zid!Vp-#A%?IG%B|X2oNryF<)8TD{%4kNk|J6SOiOIJxH=kPCDG0oVP8JT$^m(*!j| zPo;uUG7eKDDE4vAyw*a|b)C;m8)X#2QR|bL=+P#6w9SRBG;95xId)r!$imPUV*}7E z3kxvP=m`w%8Qnf9!^{KMGH_?%?N7XxycfZqj>R~}7|eV6fMqAI@&^1{2tWg7JLhzDL)Qvms*rC$Y}9 zFJO!nq)C^-&B&xeN91N&7rO0S8Xu@5tg$JF$xmfaVF2yvG^mvEY5(Qe^>(dG3M>n1 z%0*Qs(9(e3P4IVPVniaKbZBWwr^){X+_z0fe$);Lm(})!4&-k7+QMdZ@0`)Kr|d6y$oY^s3=uR(R)gJ5_qS-7qJ;MTEa>+A_@U+WaVZ^STGV&m@N z>2i530~AS}9z3DSp1t}RwKRMS&%%_#st!<@fShJ`xvv5744Z!@_+YEDMxv|+Ua~>p zchV^c5l*4PXRr*@C#$!u(j44F>D3J8Gkc9Tdg8V14C!93dpIr*$v{`d4AN%;J6lEj zwbM5B4Mh?*r4-Pz@m)7Gt}c75A3^h7`xj}u6VTBOEB|+8ok8yy^f99Pi%isJ;lUB` zk( zEa9fGp$K82i0Uo<&Prb7GB~?j8M12)fRfkalnA^4$N=C1n#{tiA16WQLJm%a5!f!T z02Wxvb!5@ouqG!o37{@$2g|RnzeNsMH;SoC*pJK*HtMsU(vtt!8s5!gj{rZ~fTFjy zp_cl~s~@r4(*E=pb9Q}4(zs>*FyuP|HkOv;w6{Zpw2m0WTFYak^URSR$XwPq1K^=y z^qyj2mIzU+-C5ntu?0t_bA7gnf%|aAndjD2N+(!19Nm0&JWrAKueh&JaMQf8! zsy_OZ|F#SK%OOV}EAh-P(6_Ka0GP~2P>Gt$Z$^q^{C^^-+hRCfT3#Lv=StJ3{I`YR zUr+p(oQ|J5ZEAXYIybGGQRzSbb&Q#R!oNIAK^nT&UU&1$kC!6spQbpuxqD>T7vr%d z0S@aJxLPTIJi^Kh*xzKoLeDpx_+ho^mHl^@nbET&4T#K`2ce@@5v#4&ud2X9ypjii zkn8R$9zH1r=U>6ZzUKhbUqZUayCY}d`#7{|cREPDdsfaZKd$&A7yeE(zM}_ai%oan zr`s8iXWlID<*b2{#Tn^g2u_y7hCA-ONhgrd^#S?Re-%<$DE)5&t>^*z&QkvWvC+{{ zD}DU`-9~p&Q}{nNy8p4!{f~_yV zO~~^V-Wcfp5WDHa0ZnnJ=HHJ1ngePKOi!s{T)<5H+ZSW}uBv5}i0vQqOma07qW>Eg zV=Fz^EIv6c2k2>nXZ)qx@)m&R=2Am#|J?YJ`${8GKa~>D+8`Lp!Ua1)Gby>mBPYmX z{RO23?BG~(0R@aF51>;~nflAQmJc{lfCLG8$p>fa4AVE$QmD?NAI$3k6V(=&9Rnjj ziyZ zWz{=u@U}G)pA1q9D?1=E^(<0hJJQBzFvGm4##oVhKaKH?{`q5EZj93jI)6N zn!Cqk31*3{RN=oAbv9$4MNqd>9psed>4lk85N~15&Ka^MSI3^F)xn{%f}rEI*!OfbLoa^+RNuGZ|BYH zQvtdCi5;R*we-eYDs}_NX`XDrUuY!uFJD>{{3w>x$jf7a9OjRA#U5O{AW zBB;Ox=)+D&He^rjA+3M`p;MGh9qQ%uV`aHhn6T5}g}|{8S}eAscaVgXavPjR;={84 zDLVp=$&E2)XPF_N3->Rn4dElWpp+L9r}z}KSrB{V!>3FoEpfvDq6@|#fYq9^3IfOr z&xe+v_hf+h0(PPxMd-~|v;iorj~@z%?HFDKX|US;Ep2;~{B?gqvlH-Z08UtB`9rN= zIN2y-ZCNhcWx;Y)t@8u=_W8c7Isw(xM)S5CK%!3k?N01=j~b)QW6n3HdFp3#4Kf^ALH^$on^9to%9&@4sv7DMjC}{Z zGC;WQ)QkiHR_MQ2e;%;{IA2N0ZH7eRW}9Wm9zP@btR4Oof2Bmw#DBf9`J) zGmgd&+-bnN1JU1q)aalf&99{7@$zqj-OaPm0U)<9AIdNVi9e0cZ{;#t@QP=>vooxVg~w!pLuAoe%&0B8yt;Z}&y`$43gO@%KFXedM_*YkJ3&vaT70c zBB1~1+)#qBP$2PkALL>ekp4lX{8gX#SMS&i)Ap5~v?mbS2w}xu@3lW#aBp#rb^?I> zmZucUI?yf9Ir6Dh>hvnf@g#(}HvymbK|rK83Ua)z zlv|rj+&mhw!Di6~yzUpfQ_AaqsE@BRGU*4pfSb>|)#HZQy7{1?I4kKtUfthO`Wx@Y zc`K0Td4`&U7yw}7h4edp$dIQ(_)9Sd`WDQ#7luZV?>msoCLf-$FJNElYO4xL%Jk0Dcqj5$0;EL0ZP&F?>}DsXN$W3 ztR?vP%}37bG>(OnFKW4aAe3G@uIyY5x1DBZjDF?BokJrg*eoW2SL(xc(fUf1hekcZM5+{ii%N{jCPmu>5~a zs%LecqO{k?Z@A?&3;&%v=tl(PdBOkPg=b`R2)hTu48O3i0Q~2wWsAqFf3S;GKS%=l zKdvH!;3`r;lIoVGuL_rFV>|^krmAlet^WF^rmt)8_rJC2jKjqLH)Oy6WqI{472mVQ z7^lCcOoScWR{s8_F$qAz=mT8<@C*De=bk=h*F+zuDM;pni2=eDfa6MU{~aG3anKQp z<;h1EsE_@Z@=ge&_t_o)uP3Vrx2$@`cmhZ^2zLMuF$AzwBY|m_Gi9#t?d?5wRmTjp zXeuiD8mfhWMDpya0+wFj0S4sv9XW8|8TqpczGZQz98uD1S!U2 zuygmJ(nwC&e2z}$rgi*vOj(%70%5>h2FB3m#Q|u2dZsZ!01YS@fprxERT z)76PXn;{iP9IwIh4k(wvatEZGhwXs*EwDTNg!DE0ZAal1S?n-f^KK4=kO%Z zv;cJ&|KVLvN21^daZvIxC{w=;I*N;H_k$d!I;N4%Iy1yiNB(DVb zod5(;BOi_ws8;S?ASozdkVv3`=b|41&UT>I1$+ts-rg!xE%nO6{<_#yArwnKxpyHy zFEfF7AXW1&loZ%9$t6%=fHfBMS?G=FLjPrs9qs`nae$_PfcTIR`NRdHd9%$QfF(`1 zTou}fcXWi2RYnL%5P`qYEEW2V30NMPX=a_6%(KA=Y$J#y8sUJuc%UGO;bf$wrvKEl z#ut^D7p&O_H|>{y>&Q$13No-Pwdx#MxPygOu`*Q0YHX?S0qBv0)M^=3h#R zQ>s9SQ8GDn9e+r4%h+5u(F#v`H zhDhhwSPT&fa7I4deZgG@BCkt6HuV&hKhH8$>+hS1BJBQPlfvZT>nxrCi`0~aZ~<@II6g$#4BEKGW$Iu^pyFOjZm>Nm~2385^eOo5}9$B z8+1oFp?%K$<=(|Av*5awaeZm?bSc7zX*`hqCEj(wu0Rp2UnN@zcRm5D^o%QD$G_w~ z_7&lyHGTnn!D(q}UJkQmIY$0d=8kK;>_902Flk^|rgMIVg?L`BfWlp1F1yP_G-l4# z8RJ-|hdZqpx5H?_yXXQc2=@@$1j(}g&(VxZv#T7@kc0s(^(7^R@O0q316eljy5-=I z7;CFBqHuor2mR znVj0(r_Wj<_7(#rlsCJ|A-nN1t!8oJo7`56(OeW;_K%mplX8u=gA*M9wof$A_xWzv zQsxio(^k!D&GnWl)(F5!uG{-}MC-~76vd6-4xL`qP#f}N!M^~odN9jnCXR1s+P%i2 z5;U0b`%n7qx*0{CIKaGDEM|?(k-BjJBlHuI_|Om7JrLaofH)A46x8rLySeW{jyr+n z7^)HUFQOmHske}b&cRbA6}O9A9`q~M<*7(IbqdM@o3QVs&3KYbV= zrl7dLzUE+ym7ZYr_Twqh#R%(d6KDGEt!RoPRy%i&&fB*L{gw-CJir)$@B#Ke=azMX zFwf&*!JO(SaIq}=(nnmkA)aWod@YR-F%|!kGNMgTb{IU+{`)=`I=F<^Yxc5$cIYu$ z$8Th|H>XBdlf_DhAmA^?X}Qh$)iD#e`=raY!?Ncrn{ug}`uqEHMx(%<6zIb*E2qqX zJnQ+Be(2ev1rX))au~gBfY*KOZ3D{RN=kALV#$A=>*QVKm6T{z&WQ2$gNf|zQLZZG zx!Lr$YA>(5O5O3;!>9p-OQ7Z7}T zUWr}FDVM4=YL?4h+@8f^5q7I#?Pfh&!qPycBe?{Sd4(pNXfPwYuAaD814)8z-$BWT<_|1B`)p)az)o_Mf^TYd?=C!v|by&eMemTB-3pLo|#+&zIT z%t=JSVeg^|nA;b?78LBP)i8RM-K>@W;6((LQip1R`9B)FVJGhnK;;WSN7-1eTKYXS zH{hIAL}9_ae)o#63HAcc&8Fq%rwyToj;Ky|Q*|{YFfIU#aZCZSi-j(@RNYDnfcx_* zuwv$ng8PtaMIT*Y!LK8r0b`(}hTywF5MWs{o2l=$LLOli9hEysxo8!8B6L(`!KSrJ z{nN7wJ7K)I>5h^h*^B%_8G`~NQ&49>v3Mi+Ce~6uB{zFG)qLlQ56dH2Sw+;sdsbz?`i$IBtap-YdPV~x`~rFT%V)dDvh z)a?8p<7cz41Q^i@m1%FJO2jYow&;?EydwR+6{v2!$urn-IR(BTHpWSpB?UJ6^|^dt z2a_NH5di)92HkpMn$YlAcEt+p@epc#8q}%g@w#AAJwO~SP&_%a7d~5#rb={R?xZbRNX0H3U#$V8JfOF~M#3B`>lu2D)DcU56M99w zNv0n49yjwnB7Ax7gV|5v;{^q1`z7ct4oT!d$(P-uH4sBrdej)nXhdLL0L*yaE93U=tBTysqS zJ7S`Q^+ZPv51;9$fWA|3zNvoXZA6kA*xhiLj<;);UruFG2{~cs3v)%TGZg1mb6yiD ztzqBpZw$ndw1(1R0e=o2b1}di15b#G$^);+`csQO&M0Qx27`JZvn&{W!mT=D)#~9t zrv$cgYvTNYwAEDIma&rmSd&!)Czv`kU+7_o5WmbmJ+Ohr z|3-NR@>^gltT`9ny+MLx3_}3>Hn#BkL;;o)$TShhi_p;0^}}%MYKbe}{V9T_`e{EN zZlbF0d?PD3;|OjJ$W7;-ab;uSZVm)a(O^)yYe*<)sDgGWll>%_9TOZ~{JO*DF;ftc zV5vryPpK4$p^9H7-VMPu;nsPh-e4j(DIeh`yS}s)A4SHYfHSO*5{`yvgqFrF4~DCp ztr#qw04JN@0f?t~IW0>TKtTxQwP1+AZNAIS_dN?T@;DK`gFw+a<9xnV3+Aj)*@b7a zM@Yw@(_5D@V20(iFo%u634$fBsL;#4=Zz#-^8zVv&&Y`E@+EL0{HO^BGYz5xY;@HM z*P~4wmGhJmjWFN?s|7oR6%c=7_Tl7@eIC)&K!wpa4~eZwv^C4v+W~cUcP*Yf#KYGq9a1*7ck&+U`v*!QU&qg?;e3lqFd@bJL+w0l*UE5j1O>cx^ zo>Yc;rB$k_!&Tq^y@OqClH*2;!)EVWE-d^cF?6m5A=Rs>aixn=MU`Um1m%M9GtRG3 z{VIyBJ2yNR?p~u>^}FVdWTJJD{^hWcvw;>xE9&v_kM&m~*iAUxl zCnhGsB2FuWs^12_P@{b#9=kDr%V5@~pUwaTsn1%iOGFT9=vm6op3?M&M*2d`L_ zCo5mtN5NTxb=+`Iwf8Ru~z`i=YcIVk#a%0tx?$5$BDe@B6y{uAXzTDlVot~M2 zREP3h?RxPnqT%!Q%0<|9_@J(<+YdDMCjG-(XRgl*5KOmQz-9S@?71xjpu5Ggh(wKn z{p8;T>(<1khi{L!dtbexbovrNNMpaczY5$U zL=-;JxUnG=nbqksF`=4sp*TVj7~hYepLd10`TxoT&%jd@gv~3^Xt;M&x@(JA#4V*N*kv^58@> zq~a!GNT+{%=CU$<&0F(GSdf1V+7pgIM_`*#SMlag@WaOXm~)UF2z)Go*(Wq)Gb$x< zpuhR+YoPjv#Y#i>R-Hzzpm@oG4zyD{AO|wZlDog+kjJ@JNLG;w__onJlQ!D$Dl|8I z(%KXiN6aga5y4eMm>?4dtdXW-`GqYHCigUMwJcGcY;75TiApQPPu6+kCYcQ(?AdsO zRi9iec~ZDSX&9sS)1;DIZ{Z%eL&H`GSUzpd4B99cEiQvgMA_T^?PRdDXgh$1n_fN( zUS3G)ld9J|ARr(>vZ`l=2RrXp#bU#!r~J=58qAR`;TUKh9v+Atd?a43uFoFW$Kh{v zn&rN~{Ga!bKSUF1vftF_qpBH6Poy^mt9Zc11@#WcB@yqP%E(`T!v9%OJHkC+gMlg1 z_Z6=Gm%4^VHII^jz9z=B2;sX4)|bCYAY=(SMH+^+a7A#{9p+S3-hiT{<6{({90QSF zE32QE*nvB4r|2$D3?rD+>;67($m(4hM z*o2@B^#hk$-~kMZBpdXn?4D-G4--5!OE+dRal@pqvD|Bl6wTBBY5<_rvz~Rq1s>AS z?cXup2!;zwL~DU*5P7>(XX$MTe2N26-_!7s+P`a^H7W3Zf{dxj=+AxLTQKc z(D;;(KfSqW1UBkmaR;U%;f)8O&zrMH0IHwON(m6m@wvEg1g@ypLqkIi{cJ_H!oP|A zf62L0X-p~aU*S%|EFCRRv=E+rrw_%lUfRUN_VC3Eg4CV?;#AWu+Nr&Zz#ADHc8%zh zqJW({yKJ_Xc^fwhgo+?Sc^{cfmU$uZlU0L!j`D}aoGB|T;zZq!i$-EjiMb_0LGLF! z+8~ZMQc~+(W2A%EF)0C?tC}j-@6w7u*7@My=R}jXP$XxKFfBNmcvIM`44>w)uE_kBz{c~yDEy% z*MFTv7*6Khp96kvQJG3DEv>7|EsLK&^=xe?iK)&NWt=T6&;a?c#$llLRot3aWIp67 z{F|=%w;c`ndyzo`wP;Y}IdronmjufL(9!=>0_u)J`$9zC8Mk%0?t1)kuC?##=bfVh@L*znm9I_THdYm9~CvTuP!!Jt@B}@#0+LH(t26 zdeM&>VN&D90T|1IOj?%mHg!;p02u;k=m+A(tJdF6tUxcB_vU5*pYvMjf<@Ijy=>16CHm*5Aqwed9d~>K9BnOG{z?T#7-!Oyge7stJ8AG%vjaG^lXEThcQ#>tC`1jSK&Ho!QSreSs?v^t!>k zibkCRsp$I|@sBe&!2oEB2hMfZwjaB?MU$opBnIb**uHN*E#>8#iXwun1|+rf>wS#D z04ij6WE|fn;dX@eiPfQ9KJ2X?c6FimR z5CkK)0k`wymNf)ZE%xwQJ{GT6=g_XaFAbknF& za1*6THUSUmDnQ!F`qnly6ec-5+Tf-8l|pcScM2oUJH@F7f<4jU4tENY0upq7s%PIU0nXn z*4hI$ZA}e=^mu7``5H~wmoC~BpW2{FTr`Ln54BVL$Ed5}Z#%t=dSkG3=6`rp3X~c~ zA_G!jjN*mAgoseb^%o<;weAXQ(8q0)N=5XtSMG=j2Lh8_R5Q7sc(h0c*Z~gfc$7Nc zou@*!22IpTbL?c)!j%a>`LiLK(*G0gVW9?33p56VqKTrfNlRHhR5nt#;Ew#DLj6_+ zi=qPCYdZm?h{#H`as3W^c{%VKKp~{09|zylQa}QToRM)bLzU3)4I};b(8!f8B6P># zH(fzS34|Ib8Jy_%J-HNPYr0BUh98z#^e=TmYa|S4;9Nll&K(j#$F^AwzG5qP99>!-^9rs>FCWA2kY=keM?FW=mPT-W%L`hXI zqVFL066a^dkcII0=#D`N3o92Wfwy*UCT71*lfl>X53Z!0V`%?pallu2e}7+XJ@>N) zygBG?vLGl^^G>V_2DiT^__P@jAcp^gse_7$xUal2O^lzP)ey5(K(aV~GMfG>nwbIa zk2j{mWP-c_d9|AOf}Oa2$UAiHKC!y#g4Avvh6iAPld!rDRt5#cw4L#kWkLrq{lE>c zww7>JWs?SEb9ku2;$lJh=mGqKi7?8ZQe<^q@%cTcIZ8PV2XakNBbFZLtO?W=1XG_` zV?0TL$J8Wu2d73(7Z*Wu8e!`~%RicABb9V)Lst`y)KL{s(t+Yx+SrIHEDtOT=ErNK zsrjaBucFG4Tg1kNfEuw#iUP?*0xMvR4K>ORSl;A{ls^Xr>cTZryU9n8_r}yD#u82m z>*ls44sVYdvqGt+QGhQA#CSk@u7>_=n>a}6oRkgcOgaX=UCb=S2#E4v_l7#qnn#WL z0k-0##16&~&`3zQj@CfKKYgh#P1Ry(f0`44(61A$-z>j#^ zcEIb!z>5u*kdypltqf4B)VWvi5XN`eCNexZafY*Q_ND%|)gcz8L7*ZFe$0RVq;%yk zOE*beH2AAq4%jgX!kMGSt&AaQQ8>gT13c|ulc`M;OAz0>0DEtJafLq{v7&&9oRNN+bF`qp@$Y4{FEa|bbJslB|SB#h@`@lq@Uq-SYJP#<|CoJw^gaM%rU)$a@@6!v}84k z4bRPMC>G23?1T#nMk&*P3UpviInb33NF$yCMF0Rzq{*H*w0mKj*4GDV&?7*pYHAAC z%mW*<#9cC_AL=i9gkb|bbVs9i7=66ycW{6^UL0FtACsUm1LSCnQ1wSl%VFyg+eW`AX`?ii6&9F$d4z*NWMYEap-i@yMB%^`Ybiz`(k)^XZc^RTv8R==)q?sb-&9C3I4X z-%i;Q`RUFC#oQH{CU%_-b%=~{xnT7;?`=D-xhQq@^Ym8ZTop6R#~b0{fExf-Dp+UL zLafq%=Un`8Sff5fwn>QOlN1ybfF(rKTLI!4FxC#B*!LTr0gn&#^1eVQ>lf*V0OSQQ z%fUn2Ww%~moH1(LK}^%iX!7S6#MZLvxq1e9iffHZl<&sguV)Ar9HL@&@$^*(WSfBA zinM`-5LlVtj@Nn8KgxQ1iGrwsD5Hfl0b~0|x;#&Uo z)Oq8wCnq~@;eiY;jR9SHT(ueJA9$_{R7xmqj?{Ke-tQ1?`a(P_gc}ySGQ#h|Nak3NeSR5+JDu;uWs=rnA14)s#J@xQn?Dt2cWZ zT-v|r#gQ9(^Eq@5OA4=A6>V{sdxmhNE# z`BW=n_>JO@^%R%OyE|@VKr2*If@*DRg9dQpPc|XEg)iTewP}ZxMC2X!i;M?M6H}{r zx(lBjGXJco*_>^NLmid+$mC$|w@%t7y>gEjVOlYi4pQsoVCZ2KX96Sf+8I&7&LS4+ z1O7J%bj2b&Cd(33#lBTTgQOTOMW$E5NZ?T8^`#0gb3Ei7Xd~BANI-t`6n=uTgX(xh zlq}7^?UF8f)@BYMKx<{S-d+!1SHO#gRX)ONV}ueffAYFA!*5-}BG8_mORLrd1%A zv<9mjWKcWxKcCs~(O!IU+e1l0FM)zQYA0jJfq!ToZb?kA2~5lzj-1uo673;eJm1G4 zU-nRu6S#&^s3&vm+CvUVNr^IS;^63!34#o|Sp^s^;E}$vx33+(4U9lc#6O)@y(FnK zM@yeXgr^}mMy!L8hFyLi*`?lreVGg)-WPZm(kO9RfCKW6i2gxOsTlmeFA5H@34*pK zgb-fqd+=MN8)?MxaJw@n}Jr zkub>2SW$>m7VOjy*&>0fnl(?SZcM>xZ>uzpr)1o+(yvY|xup!us`Ls`1r6_Janj)o_l73NMC(iL?S(wtH>suJr`%M2G=a%Kc7od zH@;2LMTOuqB%fZNiIQ~cFJD=RYcEDyCVe~@&;xb~plSk>MXCvYzuP;!D&u^AFnJ18 z(m|A+Gmi8~h^+ynUUB|Nfw5}j5;r0_hIt&0({S;fX^*wm4(dcE`1Qj3sF7^D@%Rjrm0Qk z9rKanR|rSR!e9O3{VCNGEC%P>jPSMNqehn9f)tuY#9mq$@@-akAO!+T6Yaek*?VAYGbP;o~07AKJZ;pn=HA&B_^?X@R}eh|btN_nabOcmrn#*JVror89L@T*=)~ z)z6S9cEs`Hc=-WIzLD%h8oS{6+fY@2iQhi7nw`oF z3KD_a#YXQg|8Vpl%BG=^0FDmc+)d9~PJLX5t)qsh=CeEqd;!AG?HF+?!g$~kms5(t z0rW;zG-W7G_oo+9;XKj7;(3yYwS zA6-{s_wS~6Zv~ssUG|Q3_#O}k3YMW3JO}*Ya>T1y0#iKk;2eFSYUHV%#DY5kqzjH0 zQQRh+iQl`*J#=`qyW4qp)VR zxR^ktyp-c)1h{%EVX#va%G1ko_+ytg7QR#-9nZ*LOr0(;@CL5>^OQj>JNvi(D_@Jf5=R5iW`%TrKkdm#UV zYglQ}ZE>_2{@HnaHd{{FHjvR;i7d;TKkApZD(1m0*uak+H)BrH=(x!~<1X@%p_abFxX5=;R4$RAZzS1h&S_h4kkYyEK>Z$B<<5V{ z@4c0#tuHT2WbeYVA8Kb*iF9JIml6_I&=4p=mh&y9J zhr)xx7|=t2F1%UCsLUoUxtRH56VBuB{c{G@sZYJJfOrLA$eCsM32!-~ZEaIbxw&+8 zzu^jRxaz!(ER6PTkk!zKCjqCe!tU zbEtTH& zFxXJ;cRm!gq~)lM_m!8&N0v~_H>DMp@i@}HhS9|iL!vGI#zwB!(+kO4@E-1$?=L=S zzfSg6C?IN4C}?-#gG7A2V~q(hLGKg7G9F8K2aNJz=C2mRi@)D)aC3W$Xe)XvDZ$#* zN!MH}#x4r??>sD}OGMXTSEg>VspIrOBx06lG1-J^V%h}7)>HGRYR7C<==WMVGp=DK zIa43Ww{<6XSbVZgXs5Njey?yIf270)3mx7JKeZErCE6KkUJCyrVw9CdTs*=>RwK8K zczBb*p?@Xd-!skkTlupy^HhajEtpV0JYtF~zbtjb` zPAN&I+#ll!sLq=W$`$GztoX4;lgDaz*x2WM1jt1U_Z=z0tD#?p`?O%33dCMo_o)96(gS(DOt8$BiA96ei^4*kriiccRTiTRuh8V91-2KoYO=T3 zIRO;Z7l`=RFN(rwM}KBK_uoBzi9$g0Bo=OU%8BduxUKv1%X!{(hwCKErKOt&9%Uc^ zexJ-93N1W`iuSq~y{P zl?mnu<8bf4CO6eTnJ(Ps9aMgeH}%!ID-v-H{F{AwvhH##>&2Odp~BzO!^2Za*{-{q zr59hCt@i1D3A;D7_pww?Q;BFnc3pA&Ayns1YJ}|vp_0;PLI?HuY(v(dGmX3u9Hvoo z^u9dR_<>;UV?8K4tsWTK9;=_#uibvZM@H46PW@n6YL^-Oag%Q0;R%%X!$0;w49e4+ z%lnFD!vl??Uz%Oy;dzUldWDgC#sGa7?!|BP+#I>#V<;a%%5N&5`LD%ymMPt+i_xP* z!*bJithtKqgArn^wQ=H22yoVSGr%inMKSRjxbVi12$QujeUDF+GGZh$C|dVpA;i3{idQC8NVMo;R}sWn~5+y^x#qEEStB%|hc zQ%<$p$pO=g=Cuyze@lg-ewP|poo53gqYRf$Cn&2sJ^YsMN~;-q$X&6v(pCNQo$jm$ z+))E=|V{$w_<((>s**|hqo<1~MQb?E%G z!0?x5q03$#n)ufA*%6BK^z#Zy^K96NeDo7x4oSMy>Tqsr()4^KpOAj3viD}uWKl~& zNefpJ30r|&)(+I$<88h|su1nA3~TIM6Lr6yLP5*Vv?Fl|$_VTsr#xBFG!cr#*JEQ2 z%NgyOZl5QYdTr~>A4ByknVU12eW~egc;j+kou-#oU@pU0L^DdNOJNV??9aYN`hh2l zwOAij?&G{5xn`=mYnm!!M29n7Z|Gq{CfhZ$>d9n2D^h-*i;|2 zB3VZ<=}TwflHH#S72E=PBfFHN%53%&$5a^cmzLYfq9Sr9+i}EmEJ{Tvz(4{=$Ir!( z&c2SxE3c5U4-=*!F?fFSejEC6x*73u2d5}BImSV=#-OYD_qTLIDCp5|b7Vt2>bLJ& zAIw_rF`_9Q)s`LoqY(DuY{azFPUPf|P>0<$Igq>GC__E8^)E!>%BJZRNSvx9fnoJb zD}OD&?s6v?rOT(~yCoKpLpve;lr2KSI=23&!_Dn+@pe10d_z|nBC#o8kF04=S(Qv! zBepb?8x+Z-3PBg6V{XLZMc+IV#AcTu%QhKuD`y$HrD8CiD)?+b`!0Ai{WT5tH50TZ~$FzgeO}f_;2k)LB`RaIe?NdFfja<+Wa46)ya|dK-p{la7=+ zTG|zTt%@X*rfn+{+zY|Q04euG}S7h{a>{O|7tQ2l(+@URDVB) z&Tmh~D;nRykLBKELCr2KJxe|Dw>{hiCmnkIQ8-=vff*Lrye=(ssnJq59{fs3N&ytn z&;>3x&g6YZ@&Ca{f5N4m+PJI_8s&heC7ZJh%W$qPX;qV+fN55sht;kdbUKQJJ1>rF z-BI}#yXi)g1--*yy@YUQ$hkE4WGyVKRe{8+z3@!*TJ)K2ol@p@iq(P(zQEp)PA5`= znv?#KeCv|~O)$DNLNxilDDf6vIuCd2TOUS!JxfbDHJc9^d2e$0l~$m7NSbP8 zmq)%jraeA?_HN?>xk;(ERfop+aj7K;m-J(j<1r1Rld2;=bqs)07u<#uSpS_-xnF5j z(;?LhsCFFX)UJ0pB?TINnk*Cl=FJT*Q2dKyx`60+W=*Npnf4tO@B73L$$!tL>imjq z@3)&TXy4;N8_PmXBk{u`)zM~X)jZ{CITA_q;h8=EbzknqyZmxrM(|$z8Y+uBt?6_+ z&6P0s_{x3?%H@iF<@rL26|0lk!(`~&1z`%!>w8`i>xOC0tjDEmBx-x25v_yu#v-a% z`B}^7X$RatDRzYY_2^i>0UUtw!0)?WGzlH;DbmUNdYm6E`Y7n4KsKp%<8OQ)T=)D( zd8MLWuWgOWKRi}Q>1{MrM`@GehO>98v9awc=}{c*aaHHXi3TP!YNj;0L|!h}H2(%D)0 zqY4$42;Wdg-Fv;5c_=aZrXHKpk9jjk`z)INrw_p}uPOTl#NYCW+C0m8wfJMZE>idZ zY2I#l@4jQAi{SBmy!jM`cKWF5A8s^t?uZ@6Bx|FN$8+G3#xP~=gsXZx%@-`EC=j@D zPcQI1F-}#^|4r7IRpeHSk8Rr7a^z{wgm)kVBx(8UkEhmKF zPi*b^%ocnXr#1~X%@ig#rj-upqg3qDITYP<`0)k-3SCW7(p%oD-w76XP;p@uL={7R z|75z;G3>k>zdX@UqKr1_;i&p3Ss$Q9gRxDg_w3Lhob0|6M*CflzTe~2D8;%4{X}Fl z0KTXg!sy4@OKvi9gDNR|dUWn5jW3c~#BG+H*MfOnD)Sv@+SKzrOY!a1&-wZD@YWA% zVNT)6ue?5~h-g2E6}3rx=my6&*edY3;T-k6l{^i1is0OR#_Sfh(c-4NwtbJa?b~lt zp5hMBITHQOUc0u<%BIyouh!V6iQ1mpyWwt@Jc$~)6SZ>ivedIplH#b#ge~v1yjB zD#N!v&-0^mxsvb0>eIf9Ykf7Ph%ANWb^E+;V?S+Q;zG-?DfjheH0M}v&@z!>=7a>3 zzeOiBgr?YW_MiyPX!JkO_``JKcj-{Tt6VS@B;Uk`lbl@1jCPwGywonfk_7h$L4ASv zjhDDkjUvo|>~qukQm*pj`H5H!EB*+eCwOc zGxbZ_bUyP0wEeAf%NJ4E_xD=QMc%i0@C!{pY+G-zzn}->(q1SYJtO&T3N#S4q)X74 zGvu5WeOS+g=Z>CXgc6Q#z;1cXsI`?GMMT)jluuovR4Y55%L~OdYFxLAN`v7 z9O<<*AGt}T#;|UT2*j8@$$F*E+L+p-i2%+_i9kdIAEF+=GmktFFTJ0qLSat9iAIr$DaX&p#`v>6w7!>@}8(7ubM<7kZV z24cKkx-I~nY@Wxr#FFmz4H?oq>p$@CxK9Z!l#<*!f@Sw6RHy68nL&28f+<3hz=Sph zD%u2==Bu3ye8juXc`pO9(1C(uy*ow$O3G^wx92kp3#f;eci?7%iCxL9F`ra4=06VE zl6up=&+-|=0fEp$x>il|$K{RZCZhbM@3dRH*e))NJxj*U}wH;y6`rh^p zb9cQ*Yke!{Jmi|J@O=IJQ&SZ-Rt(Pn6~|A>i%Bn=3+ zVoQ{e(&*HbNO`Q(>0gZuZphO{eH)#irAq z1PSgepD8ZF`PQG%m9)rn>rRJctVYSLh2TeeEBQ@WZ3FVN-)ERw_LiB>jX#4q2UFw9S?^Vq2r z0?m-;Zu%u+8yTU1+zHkm%bV;cPhGsgdUTholB6j4w=JkU;kBnI!iz<^Wu%N{c>=scP`l z^QemQKexaP5#k#M)x4os@3AZ|oNpfA{L{nu^RorIli`W!qNHW0Sip$q!CtQUkO_Bq zdvQ6VRO|Fv6s_c<2yt_3>#wLY*0@jC6ZxVXFw|LZCuLx>21Ie%-mIJ_Shr=7(>(N@ zrADX~sLfMByO>ZrjK%no*HV`QPml9)6HbZKWWn3d&zxt6IW59JmSq11?NH#k3P$ij zx>QHloOlb9d1x(-5@K?A{mO9Zj~y*{8C-BK7#7xk8uHNQ_)^7ruRBRnn6)fBm#g~R zvAoW3&_jB@m}A>Gzg^ut2dlhW59XIwE`Zj`0@cd2^U-03F6b8FAt3r8GO6AMd9GUTXc+=0s(c7BHeUA<^ZUppcaj0&uN?Hmc9GDGaFa2~VmZG2v52Um{bw*B2sPz^wrYB-8WN2S@b!RxYEHlnMZ+@FHkKIKr;=HnE2EIIN# zYfecrvB2NPlZj>KM28R>ObnT8%};bvuWS9_E5qR}jC#ZNTS5upW5Y&7+N*y~i=bXK z%{I6fhw8E0b1fxAVG_wzcsNR1>`f`BJH47%>QL?6?$8srb&9C9c2qd{~G*^3p|C(mi}%v*~s#{y@@cYg{82 zZ>=oEN7dDS4%M+msX!>XY1w7CL0d_4-FZQjzp@CesB$0@Pz{0CDGsBtp@F+xo+r{? zX_`p)ojVV=ESBA++V$s!T`U1@1Q-uEsuDt;m=CaXB-N?7H8AC zq#-oWhBBWnAzIi$vE2FwFXxZ?2lCiGs=#9h^@pHL5?3CM^q=Uz4|>i7I)(X(cAKiz z1Rz@DKfWIbDm`xN=w-4rQEd(Cz5}UD!Y%S6ry;laj4;L5daeW2%JL&L{Sw7=g7owH zJ|4D=d^hFAhJ?^_C8{y=CPeMboc#dUG@X@T4gN4r>5aDYT9^I@i~`c z4w#l3QI7?yrSHF+$OOzfVQaRo$LQY4KYxO%MQABIb$plzaf4?7kJb7V$@|lI&QibR z+e#c$%E>mp{$>-F%$>20YTivLWK4o_xTEI#goxKMeS|OR_y2bdfNyUZE_1dgpmo0-Fod7w3vx^t4L>B|9(p?SUxu;Zr*T zR_aDsmK0`ejRGM88j@UJSm~`#aDNH>3CGYiDl8+PuBLv`6wcRhf2CMY8~#H3Ls#5f z7>%Nr<`(XFd5V_KgfwC<3f^t`+v`9L751|h>EB>aoD>Y8 zsUmai_9ZHKndS~+f@!3+&I*3j25I7^W5mjd0=_;|aM`tYb*?T%*DiPjOP+1N&(3P;zAXJ#6cvckG&ioE8HmqL3`eKlm3quZ z*WO6q!M(Sq%R_(hkN4N8HSV4+#s9`#9LlY{7m^F_9c%_p|H(5$5&Qx0&4k5g~@g}FImk>%#Z1T@9?D}E&g<6fvn zPOBhPMujce^7;?Ap$|^7rcV4CDtPSGnJ7+gE#CSbS$LwYX5;@1JH=%0hNOC@)}29p zeJpefBj=2t3(xtna#($s!niP6A~r5&iT{!d1`-8rq@z?YWb1bc2Nb#P0yyrB-c(0a)w4YgTo(QSQ;2EyAW!ND!_YtD|j z4sxW?8Cv$2XTlYq=jt8=n_^=Nb0zXA)oDe}S|iKwSxZ<@Q?p~ra7tBWJrOVs z6U4?m1pa1EPGwIM9Lh!T6eeb`0&)hhlosFE<`Y)~6DZgl{fV87y&CYzQ-%f`Gg@Odc)3sd`>G(4esr91OqpWYM{#WFvwq~;j)z^U z<9gpT=>#7t;{H&mHchIDFyTI!SX)x4Dr4>(^V`ya22r?T%Cw!=_d@P6v-oD{wxbk) zLLM7-Y?vr0V=P+}cfQ70?_H5T`9-7f93f|0P$g0VegBnu>gq;PxEz7lF;D8ZF9!H% z-9kL{m9-ekYEBdD^4jVc`3YovBqdRU4fuPLOl|?hdzBdeAq~g2Vw{YFsAg4dPZ{fL z78sa@UdJ4DS^H@s2X5CGmAqN;TN~js1yNgpwHw?=%F>Gc#;NgXzuIRuLtrLJ$%>ib z9h^+sc}7-g&28l!@Ek}?6z>9 zhgMN#@2Ta z6WxhUq!avNM|qhBYZV-?@M4*1!dDX25mbfx=&chz{v_6p6tLG?hWQo$k?eU zcr?mhcwG3`GcG+0d$qi$86r(}6fQS{$*wo1_ zEs!-#ARzsURaP{}2Co%;0lok=$Eyr|HZR$hZv-yeUS2}CK zQh-hgC1E2Oz8XMIQ}3*B%q{=!=}(XB@YBTTqr(tcHQv7(r&scLHCIr=#o_tv)bX8D zvI?r1fe!0W^D4^eB||C&GQKz8detv78$UBd|Fqe|%4~V03Xydk#P}xb!W-(FDoK7C zj-^iMRg>D34prj*xZ}F!|KA+A#h*AYpsbzkqn2kk;HCCs?@VUH;u8tR@Pm$zipBpiYTn}9Un?J;=|>z{`T#%ZKoG5hXZ^HT)fKaRq7ISgK)4d zgWKmfR(M_Y+Vem!jKt*Hy`%S-BUoss>37YNn8(`Zvv|G7n2*~N_=*;qsEUZPsIdOX zFo5~Bv%fr_c?R@?!#aP69TRoObiW0e|y`eKNW=fQ8>5v;q1yWWeH3tQH9^xKLBO_ZnDqb&wsEWzk!4-=HY#x zq1nvg;j0ZZ4f(CWiG1nf(_bnHJUlwWm8ToDrZAAz;bDC~sIF`-P zX$Rm}RbV0Cw^L^;lf^4`D@C)71U-pK(|>BK+YFOXhZ`5i5PvBc*vKOnYZ)g^EryM8pL?aOtn+XJPs2a; zJ^o$svx2O0*w!ylF(8@NwT!`+R>!r#B6%y%g=iH$7#2p>j#p3OZI9OVR= z9I8?NbrEc$-tv*xlIvhKjbcmj_vk#4=g{{eE_9gI+sCh#VcF1wS@5w_2HerAgzS>O zMk5Y`Ej9F+DHR;4eGf$I^h!VzF<2(Y1K}Ul7&>I6zd_OjKd8Pf& z7u*$fULV2yZZ;^V*soQl7Ti1`H80a=kw9)v(D1}wMy8ic@3|l6PIKQpYL#dlUE10446o;bf1Tm)h_GD}BfQkO zK5~5kq@3#sg{I{6uRKeL(ZEGGDt}@Gwa@jiL2=l)uX$|q_zb!rO4PC47Ba{r8GW|D zw0y5JeeAj@g9u3~_ie6jD`D+(XMOwqd1k(1Ls7oHrJ_P#^DmBC^@af?kINUEE3X5OqZmEW5_26+owaXd z2411RcIFi?hgT07F-dXi)7AMHudvcSI7jdOojdoqeXA=pqbKDqUVe8z49(ya!99Ip!o=Fi|62t* zl>{2ONH2QjY$w(o<pyR)_)8VzGS%-o+W4PqB|EK}FL39DIx zuF@&4$$VS7FHVxEDD*KN1V0_@9)iX3{_CqC9N?Om>NYIF8A`iFA<@QVFvZONA^-A@AmT~CTyQ@Rt_tOqn+FLS1>UWsu$=?Uu z)2%mET78IHI6BPm<#uF79L1i-)tMYLK>OT(z0*TFPc)Yo3Geut-d-|n>MlL{siMpB zisd+>jJFpkc->tFu4Zd>(A#L$VRMH%eE-Dyx0QSO*5T!l=o&nP_1J>gr{8#U%%;_X z!eR~yY7&l|C8KE@hI~RV^Lt4?eXB^HjXz2ax`*8w$MAbXd}|wBB^1OgcEs7r3dviIG zaok%T^(^^JbeXv3K>0<^bhEJ<5eW=k)&=t$mQjR5u_10g>U49a?{uVTI!u-MCf(M1 zm=q=*=3WiFJ%;O=AC7$I(P2IH`tIZ~=0MXdfH|x~YvuOgTueT+yKK~!Xfi;;z@*nn zrgBI5X}I93*=E+>wbScuFM02+{8!`2ufKWg8OG%4_13rbM(>IpnEVr8*!i-Eq?OV7Fh^dPTcX2b zWw;`x=_X2;PL)!S?rCQ^>TRzMXaId_J_OZ1U`l5zb+@&}-rwJc^-YM}INL-Ab7slO z^RySca~v&KUN42~=0A3G?WO!;CwVHmTo!@lyqR-{C4T;~vhvvaU3>efdE56()c5sg z=nYZNJ8uljb`PaiF4jEAIp_KlR{bI)i9XC6(G>k~=W1 zS2{6`#yyJl+iMz50bwpLEyBrsg;YtG!if@PTAfHr1IH^Ax$!PWRCoOt9>Mfa^oTS{ zxNf95?ZF&M$2f`yajh;YeqklASZXhBYK+jF$R~!S^~1x@ zyxLUT0a~0WiqRouxEw(O6C6;f&AX)0?vDj>Pe%&gcN#bD>(OL-T8|Q>Y9;!${lthz zq0(v1e$eM={4f*ta*-Z$)b6kme&meJZ4%wMS92MNOvhg7H3&Srsx7f@TDAf;1XnDP z-kxFmk36=ZuHZ>vN%;6g#*qPr551V|L2U!Lcn=T3oK7Xjf{t!J<<_Qax4~JtlKUZ4 zv7Gt~i!#I}lh*&M?99WVZreUSxI-dkm)&j4l40ywvSv`0nCQ+j*&51Nvu_E7l%2|` zY{^)XNLdn%tRu^4VeDJ>edoP?b=P}8&vU%TbG-c_$BgsZ&-3~nzw5j{-`x|BzT1t< z3h{K}rs^d3msu92ZRo~qCe`^Z`dCA!($;C3vD93d&)&&;e~@`i)%vVw`(WMva)WgJ z#vzMqP9gxD890Iu6^Xu5;K21P2aY*9FMp*vslD7x{2cD<@W!4?uUV%ifzscqhVEhz zMUKZO;g%g=9BmQK0QUeb7882MxlVXYpy|(Szy*u9FO4b6p?%R>FJ$te`!$=CSW7(j zaWct(yrhj@ky9{2`0ct}Ds7U-mpG;h(#oA%$^6*u#dbkOOt!$L@+n6F@p%dTdX4%G zWe=Gv?-quSdev{9e2ac>Y#=w$uj;f9z$fD}HtFOk_;jzLW~dL9!N(`NtBJ4Mza7Pj zY4Wk5UOp7JTb;CCeY14r3N2h)P`jYK2PgA!aqY^0?l5N2-Mi%;Z@6wZt&tO7Z>t}6kTg4; z{+OsUr;Cg_-ibXTs_G_lki5u-U|Bg|F!}sya!kOTVyjddQRPOw_G11ylfrv?4bw}9 zEs2+AtMHO)bALs=`!GEGSkWtoE{2|&@z2Wg>5a_Q7?CCNG6G`BVLC3V8Xw!xfZaT~=mp$Sf63(3jFRNE! zjR4j*Hoj#?torUt)G@^*k zs{3FOW_T;W6jeA6)TTT(B;KI^aFL%>YR~KK zyEq#>8!e8YSeC=XsiwvkS6lEf*6+yX&sG=xQ_TSf`N_bCbL}_1n zHN7tojp`+>)!#`NbhwGCoaQ!-Gms|3%QJZ<4=j3RZXRVUB5rd=x94@MG?xgcpq2F8 zO;#x)4Ug0#6@Y+ZRy)z_p@p|KpXGgwf)wNP{%eo%7sFCmS^Bo66uk!mZbwJsCo`(v zU5utWKPzSx9z`)aw$ZSgtx@Tq%C9l9*!fBNDTN62fZv*H)vP2-m%7JNI~?Dtr*FbNF>94uMl`;~7dG~+=ukn;TnV$S0m4bJ! zC}-j3(H?Y_+bz)y5=}O!FFG1wmh|jY^J|?Bbf)4gg&?YF*>?*o6y+56&1nkO@)#xseJn$0Xf(a9VjTukkc%bdOQ z`0Qln8H+;FtJo}d?T(wp3G_3iHebg*%SnzQQiRX6Gn4dL!IV?{LdX>K1eJB)UTloi z+UaZDyp)L!KDRGZl)7H0d;ZLjtoo_dKo8gH<_p8Vur0e&fDj%}GYf_rQ02SZb~Vw^ zblkjR`O4;vNZl&+Qeb(OOIpG69W_nD3tJuCSKmX_lP`^I1mtWOn5@QI_6bexC3(A8 zi7=qFFRK)r-)zNT+~d0BAD4^ncFOMFHRM6fiwo?(rIujtWvnwnM{zP+_boANEY)3# zDSC0UiyU5f?9Ya_(@!K;c#p)njG89!%lLrv$bdt)SOb}j?K#}EJLHN|Fm)!%EK;Od7wT;h^65BQqm_`zu&)X;1l!R~iA4RA~RKu*q zPq68kgj5JoeDFF1o1VfD;YoH6@p zvh*5GUC(7dq(K#&Y_Egy9i1##OC&`$w4K1~x{$cmTc_OVjp)7zhp!vnGqdBwg+%w< zB5ulrb3H;=b3}y`L)KY4`F5FDkYz_?%j#PkBHwB8;1vCeCh&lPF@HE(>G&O&wymP6 z3(^`3GmRzIM~2L`a@aMB;-k;8?OsaJPjqagW))xphpn`)2Du~6nx_wOD8`N%(I+n8 zU*%q5WAB#xbWLH2Jc&DU?VKG4X$042nJMJmbMNuj;8pUXed35wY)-3_E|?Z%BA&gz zG*9!2zWediPgYUPZ)PgHW+sKLBODh!J-D3o0B%+@5w;b4K(Q%cNQl+N&BDJ37%Zr_ zFfz;_*`u3IU0v2m;&0J4V-el3xHW<4sgR|`rc3&ZpX5un!HiY0-qYw9Gnmad!CFU` z)HVgW&s3DRYQO5ua$#n`F5MKP@NjdjubNugf9$xeeTt`W4dFX}DBf^IS1*YrE|Zfan%UvpS7tpIh3D1yArzly=3Hi z)^3igaQyRD%6OYm1rH+@SxhM<2k%kI2J24!@Nu-f9cONK^~YA2864Dzq za$1sl-4iX2$ZO`ZD2l4{B*+)npc|7XPa;Ws3m)j&DgaKApo-SP3>E1%xtCy zr&{dT>f?O}J;qfi0t)4a&g8r|djg+bp$2=uaxpqsdic9l+sLP&>+$Ee=fIc68G7 zEYuF4_hpPyV_u2jQ8Ougvi@L$3JgF-uW}L(fPH<#1-hMi_9eR|&QO5?cB}udL6=H=K`%a7)e%h)UZVy8A-()=&N;)VBA2;txgJecQ&cJw?MRb^n#k0x-*)Z=&3PhXI@^udC)P1ib-(wFZKNmicHF^Z7 z5p~`JK4)IhSy$e)Pn;iaZqq0zV(Opv26y1W(|s;q~H8wrjU_gh%#N>wtv+$+lgDpc1*5*8}!7AY&T25yx-u)oKg zWFV4&{QwWEtmAoe^4s1s|0f9<$vpv<(%}AOkUArXIGx&zKseFf)m7qa+BulKC3PXS z#BOERAjxREgTqN{i`q^#@N|i#Y=M&*Ck<>$rDw%9Y@HE{HfBi@2et8q->vSO>2d_GAKagncRAa&f@Z_w6^vrBvu2Rb7}TWV41?GECp(PU}sCW^B*iS9&$?O zlzkD@5EC$&21`PX-1nGLacL3g`HMI@l&x4Q8iQm=YVjSNAJm@CFLuswGDC822j+S+ zKexc;!csu?F6vxO+^Shk{Y29)K}L^+R2f6BMbkB3aR!oGCD-c( zz=N)h$OY_+c5Da&l0fMPcvj?~mSpwf`y)zT6GmNW$GMEvw}fy(%gv3US)y4%Oi**r zKT=BgxYY!N#r#IO25-Nee{-a=-}4A0Eud4Zb{?uLF;(Va>o|BOtrWSj-|Vw#y;sz% z(TdcMRc+M0M3|kc9E=ym`B9bxjY}{?>0<5Mr}us|x^{2<8?&+ov0m!mnv9a6uQvpW zJOd%ytC&aX!79^+_fp2k$8)5^Gbo|)1ac<}$nCBSfgHy+kzgKtgH+-^Pnkg%(T97> zX)iM*F}1M#GR+J&HYb#Za1KnMF~CT_0~f-ly|qMFfDAB@ZLx}WeAFx}IcSs$B$K-I z!9W2a6>zisqGxFy1`tR=`5aDHfL05>LAJwzGZib+3al_=I^gBFaPaXEfV%~+Z}`E% zJdzAbk5xXY65oO;*cfEcLJ{voSC-b z?GNN=la~A;q0sjZLA>MPK1$k>5B7O)oWnq$S%&5x-~>O}=Mi=W5BAA_k(W~;^lV_h zan^hdcuoJ^x+b8P92ykVAJ}x7j9v)ccst00u}$9V9s&}zHNJH_1MA9zOYy#|>RZjm zgd6S1erAMv(nnwJoqWyoIO6CYJn6W|=!zI4zJc?~r`3&8R|Dv?dN9=+a&!fFrbmYW z=>>v|RaF6&3KW69e7g-0`q238e4DGN(YOXxX9wP10FVwvo*8_*bX#y4k z`rZcA;9ezqfECsE{o}$Od0~ybUQro2&$T{)fmpoZUc7vK(D_QZeqS=-|1qw5HQuWDAhltd~i4S5@qT!qx9wUwY1B}dkHqeN@ zJZgLSKRcsfncqkvrPeHKnuO58AjVAC>D9dMX|VXBf6V`JwxfWSDpETk^iu-&bo^d7 zzY$^K%}jCC+aErq>bl&n67<4SZcojqw%bpm&7pMv{DInCIxhT$5rFFfIz$y*d@#9l zFGF{K#u1?K^LD)ikH7V!22(K>YJ;oT>({?XAd+mL3HisQZ}fW+K_3vDXjz>6mJ?5{ zCFHvzga7NhdgFhG9jkGWOag8dG=UUhNCNS2R~TzjEx-Z>sbfXuu~_V%X{|rkwB}@v z#dFhn(fB>1H$eS+^s@#76dD$OEUv7x{&qYa#{l*^+WNu?@EJX6aJnwv)GorO<+gD5 z-m(w?<<(G*{T*`P)AG4Xxb&rrpXKB!i&)i8-h*@gqnJ74-ww~h`b*~$@Nd)2-zx)& z%)ce3jKtCZ2zN+f0AKt4UBN8|)Gsk84w017`j+3iR5?ulS|YUsvjn)WFyN*Lkq--i zu;1?hZ6(sW+zx#Y9OOnfI;vSva`Z=t{~2=2BnSVkP7=NRK^PzNR0bzB&=UY~`4?G%US7<=rGVs8Db0AUVH%JJ z%=fGVVFCODc|zdy=0a$#(Xx>6DDtD?JK5T+rANVrF#~Nt`#9|91{HgdgQ>n*&v@l0 zv=*#ASQzAqUAcxp2Ej!_6_nlxGK>JcXsMnt~s64+&jl{a_a z^P)sE2F(vBXvYIOs!`D* zyxWm?47A&sV2@f>o2~+zsE6GiAa?oRU&6O2a^b!70G5tKLJjSMbotX``~@pOLI_SUuZc0hYOs@Quvg8yK$ za2aJOI6_KR$y`QJ1)-oKrz8cJSAoNqn-y07#o#*D0psNVe;Y(3$Lj+FDX0dFy}gP( z*4^I|<9yW{rv2+TeoaqrjFY1u{{^g*w=de$ksnkqL;L1KIWUy@W$57OW$%e`_r_q| zVEh*}n~miTRr zb#T1)-_2yiZUTpa2|#A<4o)ii7&AvNEv%251IEo+3+o4yfh)oN6qRKq;1Y1#0Y3@w n$1K1880F~c1$E6tM^8%TlpH_zSrtF`>6 literal 117134 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∈do+!7;rmN#CHa)rS=K5L<|2Zk8uZ%q|`67TtE;Eq(=J#1M-`9 z@$q=Ti1cn0B$Kc3rC|>sv&NThoO8tSQ^D_jcY!2+_yBd}Gt$@wo@-tB?}5x z$8DqhVe?qvgHKzg4^(;pQogp}VRVrbMv-=N#fGbnk7s49tqr``-~}I4r#-57fXW}GGib?$hoq8LUNQ?cKQE-8DH$TUmjx0ykRxj?sj8?*K$W3* zjjD$&Ko@eiLA-M?yuP;9Lm)lw#6tqI;y3BTg$8WNz~Q7h_f0(&__ix^8DM!fR57mK zY{MNS=6odB4~yGp&1DP^qdnVpj4U9K{~`f9K81JL0|4;- zm(1ZXcTl^Z;Hhzrnr;h4RYH=)0{}E5YKy~P_L`uj9jUZbvO4>|F68v_6Uy>7@jX3j zs!QwAvYX^7QsGbGO=p940~<&HQ+6&x&MAJR0-z>~4JTWM%;O_lC9Q$_o98laNg#8- z=j|KdD-fUPI2p1{A!J#F0C{Bx)vNjP1lL$q2kH3s5PM9lGSBM4YDe~`3RwkmFQ%!f zh)H!~L+lZItRk>|DUi6$2G?sl@*^$9d|H8dW|kq`z+PINb3XaJXfvhIPEs?P@QYP9 zSEe#kVx$Rv+$SqyfTcCUjH~@o>_syj`7AvgBMDc%g?ac&4J8V!C4j>=im|;TjqHh2 zM)3*&>Q6}!5&!`xf8Ys!Y+Jqs5Kh4YMko}Z$s_KR(hi-0=b_~n1<~UkV5b2FC_Ig) zq)onb|9XBsbqab9yuICHGF118ncRvEjI zx#2Q-?=(vA4a!1dq@C!)au^1Gd|fs*dbjL3ZfQl9%Rm?N0#K*j+z>j;0(sahs?6HF zj;P^iF?>j120Yu%v>}kjfIPU|sn;y>6AE*1Oz=~A&HGCM1@Kjc596_ak7V;R7iUj6 zeCMNJWw(4?2G43L0iRKO{NDwV8-?TmmpI-u_1Ma891XVQI|gQArn1OfhWn_yQsO%> zenMva`O}rbk{Epqy!{C;%gOs~QYjks_{~+1cUHdlQsmRNYdrhjDrW-0c!^ykC|xWy zu5>kw2-?6&f#A7TjjLrr<7Ett>{Wnkp#yJfnUoBM@I0~>&+GB(DE6#PBDn7kqGA7% zs^3w^jIS1cX2b~Y-MR*+rIfjDH;t+X=z(}VOmP8SALjf98V3Mj#&HxA5(;L4fMJ6Q z2g`DuP;jJm`aJ++07RS_49H6OyQ$2BsTXc>4P>q|{-+`u_itiO_;iDzV#AK26=DN%-Dw{@ z5)TB5AGWF~zOB8VaJ=FGcgY`oC}ju(2SSF53CeLt(#rxd9ryIMy0Qzt@Q0JVTH4Bv z{5C`~e>65Iw5*0KkBWZiDE@2-%HcV0qAjtABrkQ!`Hm%+Bc39sAI3p@JXJB^I_pOe(z;Xxfs8exNa@F?y5+UY3i?OE1f^0#{g+0j8E6JEtvau87vCL|oWMgge4q!3;%!6-lJZ!^$D# zM4G%$=z`9QHIjJp8XSY`xMEg^M81=>qD~g}mTM%K{#sAZKJC@xX)*THkq?-xX5Y4(e(7_MuuSXHl?_znfc}mknYKW_UTANhT3sB*pBDQzg&=+W4Z6shz)eu+)hnY|C$-<<<>DwgO5R0!(^|V1BvVMn=LdQ*vaRfp zl~98>S12-+%Rs-*qYR5MzbSw*Y8Rl{r$}Kb%w~2SfLlD=CEy*95T;e4h0sCsCw#+S zom(+Uz5)GMA84JQbn`d}fshr9jUGM)Ugh+NXDYoDwN0*Hqqsz|ldQfaF2HXziU

jEjNmod=rSe`a$Z%$)%q^ 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 diff --git a/docs/graphs/l3_perf_epyc_nt1.pdf b/docs/graphs/l3_perf_epyc_nt1.pdf index 8e6c7ad382c50b8847a559d3d44e311b9dcc837c..4b34f4d274fa9834cae92bb44b97133521421695 100644 GIT binary patch delta 32074 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 diff --git a/docs/graphs/l3_perf_epyc_nt1.png b/docs/graphs/l3_perf_epyc_nt1.png index d9f6bad99c691d4a6ffa5cd2002d1d4473c023d9..f1a2ef5a6e536a3c2f8f8bd261ed1fcd99831965 100644 GIT binary patch literal 79325 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 acdwMJw4BIheHCw5jxo?P)y>vEe(vAAe>;Kz literal 77571 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%0As=1uhyrcFLT`Udni;1&j5sk(;X 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%0D$- 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

xZ}}{Su@s`Vw=T1AD>`yBxu)pPInl1 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/LQGKq4%P%iey>baAS zpFNB~?s#CTSRs;2*D0m4EZTDcinyo<@8|^!yqC&l66sp;^eHbCBbYZHoGHx8kqAY~ z9JyHj`_ZfN-`b66<}cB*RPoy1592ZlKS!7k8MZD}B3LAi6DuNQIa#UFth5N3ipJ&e zIjZ0g9+Si5B;Qam@#h)ie~uT+6=c(vE_|EK4G8j{9VJlVcUp90?83T;l)`@lqSWG@ diff --git a/docs/graphs/l3_perf_has_jc2ic3jr2_nt12.pdf b/docs/graphs/l3_perf_has_jc2ic3jr2_nt12.pdf index cc27d747a3bf76e5e329d198aa2a727df2401335..3b80889a9ae3251738541d69d0c0edff772c995d 100644 GIT binary patch delta 31509 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

Nk<~mC(6x*4q++b0 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 G?f(GC{G&1e delta 31482 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 UNis_~B^r+)Ivt&yhCKTJ0hm$^(f|Me diff --git a/docs/graphs/l3_perf_has_jc2ic3jr2_nt12.png b/docs/graphs/l3_perf_has_jc2ic3jr2_nt12.png index 0d61d382b4472e97790bddbfc0641f110396b0a2..08e28fd0df78d1c7ff5960b87fdfba58193db39f 100644 GIT binary patch literal 97791 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
    Om-cV>I<ZVm~Z2(F(R!=Jo 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 z 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%0DTFyQlWq*I%zU3>caG3}f z_m{qAk?GfFB)|S?FhF)Mtkk&q^wNjDrEjB9?D}G;5);d69`xGok}iq5Hr}Yrx9zLI z*A0jLW;Y$Jq9rM=yrIweqyr)M2J4b*{@Dfh*r;_JT=c(mGG4Cw6n&P5mq>E&uZZVgLoEgXX-Qmk^iSK6~H3f@mO>W2=>4&15&_1Q=Mb5t-xhE zE-W>!dxZbr2D6sB*&YkG_n5hz4$^e0j`ka1!K8b}p>1Y-aOpsz1c2Nzh8IfFZ`0GC z%$K?HQ|4a0wh?yWo+?)YJSF1d;&LFJEZbtZY_x&C_1UbJY;#6V0*VGL}cXfx^Z zY3ECWc{aNW5~Z)R9kZnZol?2LD8U&J!+ZI4_LhI3ciY2hsg(O{2|cXveYauYR}_EX zt<0+pohgyNAIb4sAFCSNuNf=McXU4rX@M6leBI4E0nQl$0U2bf${e)f($Zf5sgBB# zNlQxus51yl-7on7^m`z8`CD@55* z6gZ~;48ivP)v_?4G+ipB7%%tJ-w(U@qpti$N`nxiC4%g2zNFcMtrK^AD^Jn0B!N8q zLR2J#4pWl+a=EhQ@_4-8<+105hO0lQZ;C*ec*aN@xXb`G^)FR7;-;4egg!%qRcfS1 z(&X}g0K4b1AHKRq(ZPE)UTfp|{RE#yLxIR?(MB~i-pczF-7_D%=JVHQ#(KMMB=-`+ z{HCTdS_3L{^2HKt^~?4iQKsLd476idERW)@F3HnU$xA8F0-}?`-y&enr8EWhocKpy zFWxK0k&(YpbypFoc@lt`F!G^d0Z(jEamfn6cS{o#EB|G&nRBz+9|N>!I=6@`bo3z8lVeYC~I?DveC!MRElR%Ipd2C#A`y&J8x zs@4Zvx^)&8k;aES0<4)vW|xpn0S+$wku-Hjq&yS?WQAel&rik%np@{LCs=k=`SM>) zOeuuTo1=cahEg&)dwZTq+0(AHa%V+Z88Hzx zuuH0oXbay}`~HSG5ma;FcO%GguOp`Z@icuPaAJFE0G|K=0g!-Vt?5sz71MY7p1pHI zv1@wN5hB>FXkznnA1r35ay`<)NtUEUR_%|M78f?2s(wVt6KBq$_Qb_Xk5j9I^S*@& z7$4xpzORw?U5-k^Dw{w|i&N%6iJk$Mjhx@@eO@s!=0r392L-Hs93ylTTjz#XWdd(e z0^DXgyQ&z_wu!Imf#fcEe|R5CUPyWc^Wx(aBG7KBS3Deqwc5ShSqui#3Pw z*h?Lc4V2nQ)xqUuR_<5-53slVA0#K=n*>x(w(AR_?0VjO^EkO7XG)_YoyId4B2$l) zyF*-EW|&Mota5y>_S-E47qW!E%Wra%fV7C4AVggq%D3$ojN@z+(H-J;xRk34CfUzbRJ^~`;sw+hp* z8OhVyI0gyuhJ_f+ruG$wDBqvpbeALB&9|+)-1oXmqE{h_wnM-a82arWp3GZqelasm zoPl}`{IF1+!JwDK3HHonk30MZgdZd|0#Rhq(9^-##vo_{qGsW3Jyr!|re~b=d!s(c zBLD;w&s7ci7u00Tn9GutJ>t7yfXh)mjXJuW{5rPbX{zdM!;^*pBH6OCH>b8J#zkur zGG`NAi$5mhSrzhp+V=-F>O0>jzG$Q1B|vk#7oS?V{4Tij7XGzD(j)oQz}G|+`YuDZ z&ig>S^y6c^$|1LF5F(REq|TEk{YytxqBxH>^mwvnfnIjP00F!HAeUJr;Z1>6KJ16c}5c}J{`3;_Yq7EC!EY#6q@K2SV9J8|# zCr=IwPlyB@)bPZpD+g~G+$vo0Ra+_jqCqC`FY%sm6Gxii%}#)!*G~22u;Ws1v1ukf z>z`xNy8m5Ba=>m3J}J~`Pg6ztywAM!w5Q@#Eb~2$oa=w3J94V28n%Bx0?LaKaN3D$ zb^!dzSg^2qRM$vx8XR-SU$?<6ZG`lrnHGr>BcXkKzuK@h^AlaKmPRoyjBzs|_-vHd z_e!_Xm%J3l6Ycd9rN$B+&p%!P1hS1u2>@jeov@D=8#Mq^McPfb%IGtum)9p#mPTt!T|R(bP`#s^OQ3-@3M z^sV!nTv}o6eT7sgTJSpc%fmnA(l$OQiZEa@12 z;(V9f9s%(rkU0$zCPWWb%+G{{xc33T02uBbTtI-ic7f|4+h~b=-Kdcwg>B~tqF`%- ze$gYo*9V!%Z9zG2+cCR!b+kg4r&#;Jti_!}x~xK?_mJZdwsR$gL)&VaUMzCmf*8E- zi2>gp8-`PU0`LpeEZ|0X$I?*=0{#C1l6slsLQDYi(7qJ!0;K$_&ff|wKi$ImX;Oa-qVMQOe>{l3Q?CI_YHk}CJ267QuB4906>RGdJ%)#-|Dn?eF4#b`t791K9KFU`9F z9zTzQdaDkkO21!Y)qXlHDxJ&_dt_V$pm^<164I65;FW@#1k>yeR2PIY7pRG{KOJB`f(g~-2yG)wkcYvW5Li3)+7QW;*_9c1VCxUA zF$^qbeYy1o?r3oQ55vrV;8On@W_*lu%Yum|wtzeVJ8zy4KT%J$LAmOOa;M(ayZ}`Q z!Da&`TfVQ+@hT!KAgt%*-Bm2BdQ>Qjxl6Adi`z=$v_VN9lavPIzqHZ0N+(B0`C(xQ z1wl}~ni>EMFctnQymr9fLkN5V%pxHgNE-b*kY$~K%{7ma3GYqjM=%MgSIg*Sk|t{i z!>1_Z{y5Bbh2a57Cj6Pyxd&qN*>pPjXR@vlJT?iRqSJiFH#M}U5~;saEod@UyFCtr zJdCL+X58t7^DoCX^p_akZd{pE*CYPKEEH|0O}n`hTQ(VjbuLjR3wT_~%ln1!Mg z)(|Axq3|$*Ssy5{F2{H*B9D1D$HaE+KYp9)O>N|Ag1xJRgpaa^YpfYlGJ(YlE35g; zgZYC;zpdQehl@7F&&*o_ueHfE!nzYd?X7V^kU{ti!)<3ARn6&}o_&=`y`|Z{C(hwy zqWBV;-(s&c>)7F^l2jht6dLnBL0I6pgg=t(%Z_GeW8o?$SX>DdD6mmoC$dpf1J>|) z&&hHT&0hlK;ucnrzvD>Sc`Ahj2;63czN%%%2+C!BAg-qDPdLvk1RZHMTI*5W%~PWl zv;?$q|6YlPWM#P!>)mjuY+%~VPff~RAq)&*^}A)d_I^Y>A^&=IkeE~pK?#iC%}&ZU z6xq_hM0kik>X_#LeFt7xa%bBPd6^VifFzmKSXU#;c5uh_2*f+rJS73(RmMX;74rCR zQyZZsJu)f?4o8(nsjdOn#tO?|-yGrJe)H6y7#I#8%2~umZ+-gV#b~|QEccuKp=vIE z8WrDqj1L+b9c|0UV_YdXm}ar-dlQ=p2?>E+l*3aWvKwf1fzVfh?5g`ree!j^THet2 zy^>mkwa=c6p-BJD8TpM+k&n6KIbRjCLP!R-MLE4oaJ8i*`#tNg-uJCz>;G_9XwGq$ z)r+LpOvlOc;9B2Dt+%bMV|O^}lOGIi@!jIQ(xWQ)mC4$h$n&?PEGwIB4O&ah1cx$- zmUV!ncTM?uPNvy8H(4`JMr&`x3>K}4Lq20nu}_|Xg}+Z`0ql%sWM*RK>-;hchKIEs zot=Aknp0Rp?wvGrj=-DGi1%+&f5NWsBjkMq#iOtafkRiM0}TV&B%=6&EQA-o`wDLg zVduC%;HDNPb%U0-S`RI}%xBQD8?6}AKlJrY6)YY@_|I<(e;cM&o)L{De%R?9o7JDL zLd3!G4TFxN70;vE21q ztEfNIYsS`hk1m*dnz-i#y7@I3W_e*>r?7mO;bP`uST(fpxX5)d7;|KBd^ix4=p_>T z_++n6#QGxxJ`8jF=Xuq~d4WUAKABIDYfL8Q`nnE=&PtzL8K>yexzTp_(Dt@5hX^(N z7ruD0cY&W92Jya1_@c&VBKs=VE(zAXECGBaS&ub@uE(`3`p6G8^2^dOHGg&7J3r%v z_0bAC?N(yAk-o=ZG5ADmt8NWz5kJOejUksreYNUs-iZ!Upi|*>TRlG7xNKmEOWO(= z+~1U=ZrO?6-CgPq_gO7@#`!&?k}QPXNfA-A;vwl~Bo=>N@L{7%#0*Jaa(dtIZWjF~ zbblN9Wc3ZXt~PPYZk;KHn*^Qyn!Q|mk^#Qntj`P)R4T^-^7;aOkC(a2NtCp^ld@{4 zqZ=jZGwUK7#CPsH*RTEZk&x4%#E3-qC7DI2{F&VPP;%!N_Ok4=zl!}-{opL1uhhd5jtjuYbE+KvFN9F4rfx)PVTI{rD4^0&e^KjN!J@V{&AoM(_1?W#1B9 zfFXX$pM?8#{kRsrF4v)yH;w&r%(r5kF*-i0aAI32njE=Gw&Hwia79_=Pl6QK-Vwm%cWLV#rx+N=oeznP__PE-{A!26cNww+nYN21MzwXkr zuLE*SPbwse%a0b<@(&njrdEz{a!1!z^%`TyJt;(GPb)rfoD+fo6@k61J&;pakxb$Kg^Aj@}4QJpwNPOy8;6;24M+MCxeMMl zo1&kztayTH3z;=lEJ!5NY$-YVz$+i}r(4q>GZ)jYG4c0Q&nZO{!)5LUPb$q7YQ>_B zLfNXRr0K&y>iFe7lRP~2ofJu?k3rs?+T3w|=29o!J4i_Um(*m3zKF=Kd9{Tybr;o& z9P9p>G37AJ+c~H9Hl?z$yhJhg)(*L+WJV3T_w9#sqpUuTy)1D}GMg5LcqXsj?SxFj z<(PHHLfNRdxMK%8eA?~5SlKIsKZ;FN?Ui!+Td*zPcs>w+4 z&J-2f>Hgqlcu*gNBbjQEdY9qF7!>|}ra?ol|75jAcy#g~N?qRTRU)NfcdoiCp`Kh@ zOh-QmB1a`W>*5SL>A5R(G4k8Ces6(k#BaW(PNeZ-wJeTzjXq4UuIP$sY>L#$VYL`W zcg7`T+tEZ%*mu@o;*d3=ucMViUgi`+N{{(^hkpGsL+w2o8@o^?XNW)7AhH*e|3Snr zb))Rr0?G9>`wmXl0kVYs~axkMlL#EKu@zrcSW-=QZMhUN9+tjRGM_Viv#*^nd z=yk6=wRxTxedW2S!)MgW2%VIJaYxf(W?|4YPwaVfhMO7bn-N4`ZR*K2t?XjZV=Rok zM|Yn^+SKQXP5;g630n=OBAINRl0DsusHkci2soXT6aa-ECC~F1YeyEZ5 zMOs;xkIm?LII2On<4Z%v`Yb^D_jxPowK>`0^g4`qm@aWyjQ6uB^SSu*a;o zx6}T9_aA2s=^I|wJ1XkM6>>a%@-)Jfga752Q+*x;X_>2-F!RGJ z@|GIgSLEnnp4zHxa3Q>#jf{*&087E!yBv_Hn)jhAq{0W__)tk`@a{-!_E~8|izxp6 zop;%)c{xfk%zgNLP--6z7O1e7dOTsXa_y=Yc6%S?ILscSzUOGiO!%_A^dvc4fNS5jGwvwL80M`ZB*(gV!6!zd!Du z$nNzt3IGqJFW>`mkWuA$=7tpV|EsX;fNFAC{_$G4qKHTlL5h^X;6XBUM9y~H=erAVmB-+4t{Py&JRrG54&9{TxEnGzTdlg@$sb(=iiFH zzn~_;3=N|D3|2xIN8lbnAex$SEiF87M|QAs6d>pgqPB8VtljwBl*QDPt7E#2FD}0r zZwp#7?>jRUI-YK&XnEt~Qy~g=*e%WD>_T@-(OA9pW7pE&r&+W;gVRaoawOG-X9dTK z9UPR!gmLxWxVoSmsq(j{>iilVcHRxHgNRCX_tLX9zPK(*6R1KxaEL6u4Qoi?oY`|y zrOm#;{_Uqvcc|{wh0E-zOGJ49I!#L~QjE&o{{2F%TW9H;?zIP!R2b(-mzA2_N_$4M zh|9}Fwqa`dJug6qX?^%1m{Kn1c=Ti5yqU9`%8vEsD`3MVt+t5+M~YUarTd`T(u@ zwMC~nq)FIm(05gdq)yAfKo&oElIk4<{%DS+PLDx)Sruqpzivcac~Yet8yN{WkX^lj zOXmG3?`=p}I@+wQdF!-8dA4+_H`L*{lZ7)zWKq`SI+*XELT6?kf~(~_f6b-r8E`!gE!FPP3sxY2N{+UG)YNA6MX{FK!c$(pARC0*GBN+Yp6yc0BvKsp$H@;SJ+s4*HoD}mFd!~S^ zZERm7UeF!5#O%}dYn0dcj4UB5=tm$BCSvP#7Q#D}CMZeB z34v-IkT}+Ul6+xpM&vVHR)kyJ(gRO*SXRo;F0VkN5LuTliWb6aX!R?UpxT?762DKf z>xxRv^4s5sS$gTC5Qvt-3u}YFVDdrc#?jGG@&R9DiKN#>Q3S%Lt2Jpp^!0}e=lZ0? z)lvH}>mm8wSoVr!jCTIHByDYR_d_G?C+hhTC^#?^(2MxBqp~2zkmZV)adsQ7Iem}} zxugn`DG>tk(~In^uv;?RfX&DQ5Dlz%|!o85sHzb?KW`1A$9P6Qyp%ikB@S8t1ilBIOy^ zw6d+84Lgp3oCiIqPz+H5?2Eq$)lQ%gGXh-+?vX4lRnrRqT*kTCUOA`+$E_3#Z1OCZ`)T zC5<${eB{@GXI~l!*||EKS!d1S(mpL+Ywq}LE^{{DuOoLn^!D-zrCv`YRE3hsUPPBx zrY@q5XF2_wC!cQ*s@s=c4rhBdwRtcIdNcK2E*XsP3uP04HTw<%l6TXXFAnf0oCoi< z`v56h=$@Vc4w`jI2uUlU#W8=r zKE23&jF+$EoYgYhhLzFJ2*uFM;KcPOXf!EXZJ`Fk*dng+L zzsUi7XI+(XgO#v@+C`PvDghiKG>qCYBR~NLyt{V{J^{zQw)KXCuya%vi%qTp7e2KU zOumtg|44eH9a)lAH;wKKifc49b1<(4l1;LJoNmT}$6RwDXQ( z^z6tAcVS`-0y6yk_Lg}X$IXsdmaRav`xQ4P*Qsm;!fQ#!tkPy(%2GPPE3tMC7q>ik z?HziYE^idl#5Nc`x+7((JY1gfN(k9xlQN|+LFT+67I{WCBrh)G8+7DLgn$#3(yj12 z&1DGF=fFYy>q1N!0f)0|^m=%Fl1>HPabon5hh)0%qhdItaHsjjJ9H~u-sAV&vqYGf z2{S^DyfrCDf@#?;1&4c(3>)+1vz9|>7D;c4$nCnFTUJ(fyAC`f*|3D)zr^KomnggK z5*dPkqHL^NM_lFhg_^hd)oLrLdDQ6sXwqSXeE%3bwGb2a;$3Vme#G?VjGn_+&{1k_Jt|2Z$TVnnzsCI@!#UdTH`AEo-BPW;t=bk%2FPMkz>Du_-rF}Rk~#n_ zLW83~u`6IsmzYrsUD=YUJA|Ip%@%_umuCA3x4QkE zw=#{{+9TDPw`xnB4A_N9iJzdud=MmQb91w4t>T6HnLOA4dN&)urv;uCZx)OU4IS?s zNevnd)Rcf!V8z2t%tH6^Oe(LWt55zYDR&IZeU#**B02nMNVaUoMlyKIz|_bD+2<{B zw;P+5T5k56M;ZI`+p8NaVOQx))W^9Rk7w3I27M`+00XOhu=e{=xSB^r8glMzC|Eb3u9Bc=h>B<_Oyd)*fM6v!xc6{zH9X z7$rI?r8_+6j`7UE2EfpN>}msnR1f$5%_!nsL)Fg8zEJOxi%B8JhS8IB`5iQ7L)Ex{ zothoNQ_tAg*sgk8bdSF#GWWKEC3)E5tKD&c|NR=KuOz~6T7AQY_X78r$rE&a1B1=( zQ0;4HLz;P`iIMr7v&BtkXmB&e`~5qPZN=nez;V_7`unJ2=ckq<^Sj1d!rd(?W3TLZ z*_8C4S#){5XfmaSsC}&j6_VP^v8|r8Fw6B;=myfk)>ET zui^cZeeeZ8@7kiU&53t4L0&8Wg?FQo#8dPLM5?7i$z_K}{SHN4memp_r!R+OkvNI1 zmvLF`BOD~=P(I*OPNjN1JNTDKwD!dlD1T+5wg35%+OcSTL&Nl-!CH;pa4^0_+&V1I zuxyLu2P?6I5prD{3_AA3T=^xjKy)~uvFaen6G{7o+QHJXHe0@hi_3~wuSyAgeBY`- z4$`}1fFmgg5tzEb4X7E3lti%ipugnmB1)aQR+rgW7pE!HXab=Gyc*k`=8iBu%S+@?^R($Zhyv7ofUo4sWAYEStJO0A&#->1J^vLs6uOnvZejg6O-v>RI2T2`MP5}RN>5p>bFvu?$(|X<6jTH z2u*k?Xd)=l?N zo^Gg#J}IKU1@z5NwUaHuB$a=*e&|dh1fPA^%bQVm2XY~3VX;{r#z9bUDE$&A<8p}d z?qbfCSd}5kw%=A0$7i>K;M3W7>h%-edRqu4y3}dHM$ckGADS=Wzbj0>A3v`YCtH~xAWZ_NlxK5hCelYwNY+HPI5@HG_+QZ^AEoC)4mhdK8 zHb!3Wm1C%@LBp!z)PwE+8fQEe%AW-3z5a8{t?~OYXjSuki4?~##c_+Ic9~R(?jgmcv^9_r{;IXn$ zy!x;7Mj8;R|4HbB4fVzcoCyoS1tb0+L8!g?0a;5^Q`sYUoNvHstnlVFi9oFJCvgxa zINTTG9Ttwq;{P}G38LX`px*lzHO>cn`hSzD?>T=5$ae9_&iMH1TLjo+Ll5A>gM9*m z{SM%w5b7vhRFsaM#$ME3l;?*io>UU~GqDpEAIf{RBL~e?)KxWQcbe-*!E=P=A=`u0 I11Hb_AJZ*#Bme*a literal 97432 zcmcfpWmFu|7A=f6?(R--2*Di!!6mr6O9&p^Ex5Z&AZT!RcMT9|+$DJ94qxS*bMN@x zct7612i1dJ)unr{z1CcF%_2fsQ5p@I7#Rctp~=cfsDeN+6(A7wEh0RyMN)^v1O!52 zv=$dvwl*^ZfjpK|60DSy!|+3=?|fHK?9z(*XS389QDk(yQVb>GQrC4-sZ7NO5G8Q2 ztRpE!p!!flUk_unG;bTs0Dg0!@^5`#^!xpFtuBAY6n`1%tjjDjWCy zchI0x$A_Tri|P7J{<;;E^obPxQ`gS5R_*+JHNN-OwMe7v8>G+GV{ZYJbXp+LW_)T_ zNFF8utMS{0vY9wF_5BmUxepW+=sWj)_Zw7zgO_y-C|eSA(zBtX&i(0*9CS$UZ}oK; zN&*F{?d+oNe#zg04+IiY{)C%O2@{!*tecN8WQ?w9jG(xQzK#j{QG?`xiNV+tMmiE^ zpbSgv2tpS}`y-Ci@JTQ`#J&X)yh*nj^2CO$B#Jl(A;#Z?VWvhDllY4WlOURm=_*0M zF2xs)w*B3M%1?#?J86HDH zEJqQXzcSPR7y8l93*|-Nh5w}xQCz}kK!HZrJWQriCT%2qghZvTw2eW_CFx7+l<>q+m+kRgI2WR*u>b1*fZE6*z`12 zpXJ%vLYevld(BQPx!CR5iZft~>E>cGMwm@rM@UUsWaMNrW#DD^wNk1wY#G)r)-CZ?<@8CQG`38!L$Pw|qk%eDo>%m)^bA7$OdQ2s zW8lMOwVFPW<_d+z^&YE#%>>W=F!rt`+p!d;DBtS`~emoMjR;D-`^w?%0sVIs-IT*i??MM1Vf z*IV6e*n)%}I?h1~Ahj`>B+k6+>oo0*o^wT$1zFU*c~L#mu+j}u6%t<3JW?!Dt&;PS zA0VV2(jL`?rv>i|4ooY|#>^~DE6v8utad7P&<7_6SBA8Prs?@;{?K$NxF}R8>C0Uz z3S=~7l4h?ah{;9Bw8k?fWF{}?6{n|W@nlzJ878w#)J*VY*Y@0P@>)@4kZ^j#%8Rxc zvwePVqqJb&q~KaEu8&YziZ@cyH|`bk+m3=W30ZOx|7<_^6hRDaeGtF&{?X5`3_TtFoeEL zE~LR?n5!l1I&!S61=n8Cvi-6(8RnpsslGt*gLG7Ys^YTZs7&*huyUs=juEG>jnRq< zy-{|m71#guu#X-@Zp!;nalm*lZe3U;#?JY{deyX13!#a-BiaT<911H zJ-OA>l+#pWo|cFac=RvxnOIws%LkWXcNA|i?@-njqrb0 z8Q)qVmq#fb@1wNls;7*i+Ii-iTh9+~;*T+&e4oPXJyu&>=N|TNpw4~)|)zf zx6lt1?+ohO4T6hNZCD|SIW_TxcJozAU@=B!41AqU0*g)aSZvZd@AvwzE{M(@TpU==3 zYZ1^uaFJDzMA(5L!9)CjqP0%*Z$CFjQ7aG#HW2`Gx}d9fwDZ8VL9!B}>K@A{FW%|Y zR-OkK{=>0mw!w~Q=*C>aKZ%3jEX|6ORr=mF$&S)sV%S=J-ijH{SVChQ>|8Off=lar z<_o1$mBHsQ6)deo`q(QQj?BAAid{hkLsxSaF@}kn`tGc6@xxAyTUurB;=cMhMOgXq<-b=TMC@miiJ*6bqdDF=xOVTl$~n)zrg9UE-Pv5MHM{>)A`CZP2k9f| z!nDe9O?B4?yPj`j!a{|bd`hG_Z?Vq&?MhZ`Ertmzbih9i1v2L#l1bdnS#cumfP}DK zPg&{U8{XEXc^(|zJ;2Vq&oS>bYA@u5qoTu+%1!gpO4v5F?rBs!SV5vH7s*G22I zgwf}EK!YF&aXzrmZfAVx>o-;I+^ZOfri3nuOG>^+Y98AW^o|QUR-(9r`26#(Ik&c^ zmV^=uk}4-HcS*K)7?Rrb(K~$F+S-t#IMn_xGN)ta93y+*)@#+7;QHA*c3Sn(%hbmN zwS>sSs*cfyfsWhZlPOY_p-ZY^9v93VHP@Y*KfXdLAP^Y!Xf~U?mQ zED`T~j@_ZmkneNKh99OAMU~_AEy}RuFZ!63jt8G|V_!|bv<}6>t|C{INb+p8xW4XY zq2tEO%eyu?sX!3W-r9OdMj$zpVzK0E02VZ4N$cDR5$nZ+?FClhHt~_+&eLgRtIEsQ zH!_Po50*#&cN-#?Ml5LtptIZCrsFo6je%=Uxg{`H<(_X-bF14YitbvYT9sf4|f15f;VlFG!kb zD%4T5o~E-56t(C~0|SGAKvaPvg)5mXM+^GIl+u^`(K}wT1ga+ayCS3^Sf2$9!6_cW z9QgT{W+x{WYC;r8eOb0CLdSHqj#U<$OTmT@Llia2p5rs-RbPIcB6tk)F4(mXA|)3h z2DP%X!jLx3h6>YGC64($R_YgxY%VzT4L3^iOQuxg=Yc=JWrqaGVA5ypb@0Enl9CSp z7{Ov!i`KhE34!KPfB}{JQ-vz>X3&Ovnkeg(*jU`h_X?PJP}AC{M;81of^!TBA+QsS zoufRdV{R52Lg_{_)&0+1UUcJ0in62ymzO8KGQiFdB*puRV#ZHeCXDZWIe}(ZZyRO) z{gE@8@_&7R^CAj={C&$+76kNF!tHOXAFHe^sPlpvZOfuWoVwyN=ju|)H ziQYSC>NHCcMJWUrU5Od#S^AH^OzbxDa<_Prfdve^9W7_avBxPMQimil07j8{0Kjh6{d@KO; z2oEnW{RFih z*zV3Mp+b{E?}kV71PkoAC64tUXZ0V)W6Jac@%_J}|Ff{CJWu>2U}F}(%9!4)etWFG zn6MIdp8b57b?$ra&3BOP>^Q}LAn(QK>-_d|w-bcIl77wcxL-R=E>43jDx8;ht?IQu zl0eP(bW%^>8BNAM{_S$nEN*hQ>)XHmlk%Q-f2PfFHiRjK>U8n2c0k0QXDD7~ex}Xh zH2BBm>1=er?JB*()@s`V*F;+GrtfDq%6d85a5k$E-XWUq*-JBu-P_xfWi4{Jd=Nq> zMbaZtyudyG4ZXu&= z$Kd^nPfvIE88HXoH#Np1EfA zXVZ?~Zb-2He*H+IJV*O~LI$EK)BpAT{{n~H|L@@Pzw!G2?_n9Gy}D)U%9Wb# zKG~GTL_maCe@8^WkC$lopN3^bUdBL{CKKM5%zXpI2npyVTl@qWSP*c)4{Ktk6lBn+ zREynjt+M`FuroM-%j^*6P@H&Av+~~t6;4FW*UV6J4y5rq$L#?m&?n)%yV&ZA3QFP_ zui^J8a{W$0>6S8G5uRb@+38v`P5*63(wWw1{?hn2P$0|*3CyTLAtj|o-NB(D_*hc@ zZ89T$eTg#l%xiZ^%#Wg%3KN1fI|ChJb^mQJ*HH&^=S}bY{vi&`ss|tP? z@U*WWke;4ixK!c#IS4pu$4+ll1Z6SV|JOq&bfIb5=hI;$DfLh%ATEHxwG9n_=J@ND zm}4nKVuKMdw#VLAOBAX0US4v5Tsj!OHtMdJVSK#CWF9YQfGc=ULPBysKrbBV;Crk` z&Hu)*O9JY;>pXv#H*E&|d@~|v$JxE|T=jo@p%xT5-5Q|LF)|va7rsCeg7m@$m2vckr0} z`N|EP^k1Jz$B_@t6iQ=7NC>?UuiDo=}6sj*u9y)n*RWW?q;dZ|Ula)vXLAap;)wW+sl= z21bPM+pdf_u^6XN0m;ykRbI>ifMj2!{%ci&GDyZiD5gPslz%-wcK@*?)c%Z^5ajU@DP zs6-JlmjK-4tVE%TL}A)?FGAkQv8%77_QN2KTTtG-K;BFTa}r!GY$v{uq3Y(>X0zFQC<@r zd=~=;j|nHz^kSrT9S96zC{#b&CZD3wd5T<7{P-RagiJE&TnvW$`k>F+j;j)UgcF@i z4c{%%?UMlwVm?ofpr> z`Dzhl$~lMVAKen1HyUOF#6>>lD$7}#+_3t)`kdAwXvO-&7Gjtl6B?F&BD zGF$)%@-^G7jF@xes*K0Xo7RQ{KuBRO|5$)|T&zsJ4{-3piPJLwFCP&NGj96m&$-HT z-)OWlbd|SZlo!*b8U$tR>WT*pKo~k1bWfxecwqsUuwKN>q)~&8*MC)*KYZ}C{#c@z z(|2@KewV$sX8~+6F*Ac{)I|gQQy2yX`GLE_b%Zr^-2|*UE|jckoFIC<98^#bD%idA zS5US83!g2?Z&$1)JK&K3R3q~&X{-R%62uxw#XKHFBa11C6+{UFC63Z?DFib_0>Je* z7g~9_*O(7a)=e%7s7MtFKt^*73EW+j59u)9h!3YI5y*9FYI;x&RAALp7&nD- z2#g8B%Ih{1aFjJj0P{(;FtI!3@p%|eTgapSglTThapF^sOb8!8iijzRR*aPG{|bjW z=n%W>{q7;xzyo)qj(K`F-B6=E!hsch8KjJ z*8a7?l}Y^L_(7idf3v1IkUsCEx~rN(X2_kjiOfE^SoK7^^@Jo{w51D!ty2n|p=ihi z6(@9wID2S!vU2BN>;Kkz|5utKkl_`I+>0UfYFZ>*`vi^e<(k;=VXV18S^K*Q;r%YX z$dY@En-Tmm5MfeNQ-M$w(S`blO?$@fDcd7A_Y*3-(z{)iJU=H=gjW5kqPZ%&6~I6e zX|`;P+DTcxmvqp^TFc7~|BN)*EjGn8cfZV|CC~&I&bDYf)w*YW$u$SfTHf1ke>`xo;NK;0xXqYN%;G;->sa`O_|bQiHI*c2T?K3XY9G^ zX`%W^t&VM{j@w41eu6Ftvy#IBy3b0}#bugNoc~j^Q4eqTgMrW<<3`V1o*#^Anbn`0 zr{yrFf2rCLj`76N?f{0!mfgh9j*o{WcQ^cx9NMh}fQw>g zVTrxSi(N$0hXQk7Z)zr?NTPY8Pq~cI)VPV!0+sSUhnUph!o0d)dG^KAYz~X~;nFL`P6f-##~Np{ z^ibu6ns}5Q0FEz3&XX6qpN&!$+g#^XK(<-@E4?}Zjt8oOta{ArmzvP!4eJRy8q?_@ z%ivc`k+&;p$dT6YCLj9jA(we;fP>GD6RF7SQ_E5LFS?hDaHK@JqD{V70>ZCDP67I{ za9{h>o!4E|F=79Oo&Bth&~er`X`$Oi;@h)ENXJ1Z`fzL~8mmX|yvN@kk{y>R8-bLF zi>pG>Z`XM)LdQDIoq z|H&H6jU8d^=}Gk9({<`-BJ7i%&aAK9nlQ#YV9SHj&jxs0bDhuvhIk7i;L&%CJh10iZz6wmL;w~>Ci8~5o*#W6Lka`ZP^cEf`1qqtU&!Mi3z=?j* zrl|HuFFsBkw{YOxu)ghWFkYE(Dr7hj*yXKjKl57pnI?rvU8wsJN94XY1K>s2tp;{% zG3*p$eAbT72G5_Ti1<9>C23n@i^`b*XR59dQfv)cJXT0L9SwnY9K;jpvoX>euxtL{ zea9^OsNu5-;~z`VeQyftad=tqzIX(Sd@uQUdS2V$0@KuFpLMMzDjzOS7yOy^V{{m~ z?mz#}5ZkSFJ*mE?`ot;R==?`7omH`y^n&dwCBp#TA6Y>?ShM?M2v zvWWnWOggqd_GNW?jrY(3TSAZd*9?}m&WYbP--){-&v>pCq5M#**?!*J0}0Mqo;Iw+V6wcR6 z8IS>s#>dBp6jB%jgpogb1Kl~hV(&#RRw=I1UI&(I<40- zr)DneQ&?vT*tef*z?Ih-KJ(?*QV-BD@!7nN|V{u{dWiiEjV zo-^msgigJ}3ME3{_n6%xnr!)gEw350s-cdJa4&3}brqFRnOdV&I$KttX)-o0AT& z^cB^d86%d3GIUC&0LVMYeKGz9bdxNcI(750h`P-7hPM5*LcLb{|7|I}b&Fs=8Aqlx}`-;769^pI#yL{K>e; z5W?$?R2*Geek7^aiWBhu$%hMNzonTM1T)Xf#N+pkY-ftR(!3p`_T_ zuoCL-D=RZ|zA}S{f0`UE>++a|k_s+>DFO6J7&?Q!=OBeUm>MbuFs*sqQu{e0-ek&>#jq|7dd>m5b)Ykg^Nv+i%mx#hdy(l29MS< zKTW0P!)U4Wjc3*Ah&TtNiv$r_JUg7NVvG|5aPP2Tu?C#d2iu9BS6*AwQx#@;;Oba0 zQBhAF?CR?aaJpXg%s3IS<~q5*q~uq%Ki~(dAAygtC^q-A{NaE>=#Ihg4VV1El;S$D zL-0e{7)xDJ1pvTpX}4M9dtwLC(9Fckl`w=GCqZxvpbnA;Hi2-oKEgT|!0gm~R`^-e zHPF_yv!v@~62Aj@YW~V)*<7&KD*a4K9tUmhiSJZ*5@+Bi;=&;k^iz&>hk6Q8?I?|4 z)$z%C5rdx^mm&1;ljJ(PmGOO$_7xV$APXLQF2>@77;Po==i3_eT#lntL;+4{Dp5LI(#WN%_A4Y{swon!36mxuT##={UtlPBhf4rBNQr z6&}j*ZQH#yhLBR-l!R{S}uo`$KgaOC+K<=ZgwK|@QAmGuBHidU8_51TA zr&5cS5-vSX+X3>JkO5|Uj4^Jv7Ct_)G&)=Y4bsYFWnM&X!k#9rb=vaT0PYT-yovwA z`1_huz5H?}+`;bF3-3g``X|zMD;;fZ8P6g>-4PAX`Jn|SM$oKvhc`!&_oo5&oNNhQ zbldv6@kgiaUoB5(6#twul=0HnCEEpORbV0k*`LFzG!TK9yV1Z#Z?IkWgA|+X8y``s z{ao=Vo;UGn4yo5YANtFTHGj0?^!IoB#X@r~ z0%(0VIwS@|Zrk{BpzuW0!}k?Hx`^aH5L zzXPeUJKskD?ERW&T3A@<$ZVvnV>Yw4Mv{&tJ>*-l#*eoUxlsfwJg-}HACRG}gr9eC z?t4mt=xT!E0k?c>f08)xYQ%8QEvP_SX15h;r|dMjmtOOWsU36M>1}l1;5X4Q;DrFpXrKeN z>Hl{AwsyDaX?pEgl;eJXP&4(0?y~j?Fhqt(HU*LZWLXYMM2@r8gBy?AdWzw_v^VP8 z^EcMtu5cNs?JVXxJuB=C3ASpUtfh@XwtajKg z>Dqm%ATVr-w1UFiz}wy13(@*jZrYA(^%aa{#dTQ#K&fy}3*i)aSmu+~um_mw_+_?G zNQ!{<#Ouw%RQuZJ(t6t(8{t4dc$+1t0s%6nva&LRTiesQXlN<~AK4PhgEnCE;~&^~ zC}pL26tBN6n@(ma-Zw3(W5>dtUy+o`wwa$vDfI_X1KgzS*t!i;ms-^rMXbn-6KXa$ zQuo}Ace|av*o8bLnzgTaeK?dYNpjoBf9lw0Ar-S->@$jnO|WG-a)X@}iPr}Lsv`sw zIEcDazn6Tvor`BqKT|p(Z!rt!jaNxtu!#i+pV7=twVz#jtJ3Xk__vr^>ZF3r0^@3D zUAygdRY;!?^KyHPUgoa=x1!XmReh@mdXhxNeMg)I2^-^C*yr5gTu)S0<|JBZ_ zehPUqveu-=#dsIA_=QXRK??lrK^g%6$s|%n`4GeH3RS8EwckJ11ayfJD7NIVvk^r_ z5{>Mf`L=&r>3J2YDD{bDIG0uSjF9@+x^)7sW|m2(u2$dJTh#m^4AS_k^s7C!ai zcS~$dxF%DGm#)ZDR>_rfn40rg>`u)M9NDK3=qK_l8znWyrYYmyK<@`x&rFAw+5Wr9 ze6v!WTBOt{$T8L5KaQjb0H-2rYpWmF*vKia_B#lS9%i)DWG4=GWz9JSf~`zR;9d9I zDZl`dj?|&ba+na}f8#G+J@hIN4!-mR8O}ree5Tl|m$o4f>p5R{y+goFS3~v$h8`vx z!3Pn&TXU$O%@EcOVxz~|w3<$XTd6eJ#P1<+B&=RD)!QT+_s%1i3VbdMLAJN^pmbaR zzv8w=Cx05)2@x@2*V$cX^K#QAgK~DoU65+ZInE`dGhEu)8Q(8zz{>j z4pTCMx1mb-#6>Jgm(&YTsGTwZwL4gAHr#PA!8F-uR%~thFn`lpN9RMGQV3$}K~)bR zs@8mwKCGMy^lbCplkkF$H{7Ejpsljt2nXmY{;w}0$0mt_bbXb4dG8NNSr*8+9m79UzoL9V~0`kGPY@O1p)1&VFJ zj40;adxr?ki~<}`0Mw>IDn89%8HvQ7zpq!_5QBct;#x1pKm{M{C{RRP^s2R2ciy7i zpIEVq|G?~jI53LVJ&oaW`72-jo=Y0MWJt2g>nW`!nx9BzdJSRsT|3$c&ae#ay`9=$ zwp=GH4jW83rL)e( zd({ol35eET^fbJy2{dp&Ie9e4ud_DTrmjt(_IDQtnG))&ja#7|e_1H|ouaoT9LtQ6vJIxMzv5p*=nkxeh(SWty+QZ#><(A$iZta=6-TRe?ZCq(Z%P)jCW_V z_wx@1=A64g1YBE(yeR+Y;gaoK@3Y=O7$ZrRJKvvkZv7pn9ztg^vU+;ncuh^u92j(2 z?aku6P}M)M;tHgw2(~(|6z?oetT>1|jt%nq1lO^G%i*bCUl(wGuAOF*l>fQTAmjm9 zM=phGGgjw6cr`V@z5gUxslv&Y=*{^-ZOkY{=XRkj0C7Ukz7-BAT^I^X1;QX$3e+L9 z#cdSBTY@ZM4tqeH*jX_=_SphA6i@-^ma9Bw3wd+4j>SvtvbU$~wXh@b0W`X33oauM zYQ~|?knQdB`3l%8*CrGCCS&QN8EUTg7A7-a*QGwBk1utwtynI=`$vbZ+!uIyHJN~n zx^VAHC}1|qpsaG>HqkdPhL^4k{V^OTX~m!O>xUDlmA0E!azjj=uGbOQw=$*uyogLY z%^WP!`c%&5&yV5zy{CAMNP*C#zGL^Ax!!(V=U#i)XoMWDa6Ic;3R3b z$>VX(Kk|KbN4_695 z=ZhW|(za3`c2Z_ap^T&gD2kyKE}O_dPu@vE zO3~1{Q27jzCEeq7CpS==t`FI6dwff_zoIW^*e8z|Pjhz6q`84;f(MY?w_m2I?_Zs^vXp267w&ky*^T0dGh&$8A6RSU+2{4~6_-?RhQoO61xg!ibuu|iU- zLFZMVxHb5{-b?R^ z@EjKBT@y@Nc_-<24PyCPvnl%QaD-2FRFIn>D+dP7nV9Pr@ZEYk0;eLw zO(Y0V@JON2o{9#};Vd%FPFkIt$J&*lMAM!bI`T;`bB&)pcXzPl=f0Ph=YAVRn|J%i zZ`yfQ73 zuTpal565;~gnvNkTLcw(H^P_!c|N!;_w-#qtYOy)6sFPIA9goMGK99r)%<2b>kkJ# z>zyZ6#RyXlggrm90^eSJErn8#hG%bfn6#5UOfaGp2X}h3Yj|dppzk-B%ibF3`1ECRD6Ir_vc>I$y)4wD{;&w1r$Q`oebl#TUb)- zSjFPyjm1#QB;;YXKS?kkQ>LOGRt0VcoC+IMn~=abAtU-6bbmXh!CA&2$%;wHl$uZ- zG0&i2(gk(7PzR?NCjFh2GW4s1t_WkEX}vpY^w_7pv{MS4_@`2>Cmla zt@Vw70$FOhv?~%4Oy2~cNY(M|w)>6h8~>YAZs~vp-@ONf{S1b_I1MPO0%+PtIF4F6 zmg~>2s;VkefKq+`{=Kg&a@G9TQgtS~I4!1>S{L$Lo_$o%aP=Hq52`A;@7`l2+(tff zaCd0Gn#S<~LQk{=)O%v07_)kHwAE@JaFyKc8 z3r2@0aA4F;QkMbL=x0`-{Ku);YEo|9RR{-hrRsva8igJ}+ybQQjohaDqC>&xJqQ#+ zs2Vr)2%s1ZF`*@-FSc&TY>k0UyNtu9!7C2kYir&9{wq6LM!t>SPp8f9AEyiBgpbx8 z`_ax`U!K-pp6=Sg`pz-lU;}s0;pV2MRhz2TAwj=>G~VlmCbQw#n=2EZAHv)aNM`m}w-c5TRoDDXgKb^R}}m3bSqk zogC!Im(!$#di9&uuu{E^3Pzc!HH>Lg}dKhuKoj;l9p>tn@wU1>*Mo12$5R#vLo zm#)oQUkxJ#-Q1X1JK2yQ+<;I5RD9ue!CU=GEdWMsfATkJJ!uR2{n%36YF``7hL0?7 z$W?je44lD9#r$#^$*;8z4;fA?)dE=DvqUlo!&OGd8_qUfR2gvfWfKL)vdVev zy?vhW1{YSi*-ddn)*QGdUF&t0yW5okxtoTDfo$TcYT2&617|Cm8utshrrOgvY3(** zv=+znP>{9-2dJ|i9eM&%3Lx;%D`p2+=l~iDZ9ToK|4BLe>X@_noS*?#^&On2HX-~~ zsCRBZHYDOnB(S;btnxJ}2#V0aiWN{44tc4gRptb$1#WmM%Z3=GS@V*CXENQM>*xcF z9-tw&E6>9olNBLDZL=;f+5UIbo7^H5-FaiHpY#0coO~@`4wT5Dru3?nQW2iyc>-8P z5VQG~TT+exeo9?>P<>~!U&`cdC^XfFF=}ojZ1Cfi$m?W5;Jtj553lnuS=^>ZwO7SW zKvlhei5p`}j;>^LRM1hI$VfC;+l{y-ZIWZ@E4Ym}ney z!cBnOF3fAMYvEI3&cWO^(0Mu8>$%RKVimaJX0ycBGqC2g==k`p^+ZxdLqoDm{gO&= z;2M||YuUHswG~6CfyUEf0d{siKM{(gV~K=O6y`t%6xL~XI;lg7hEDeuUvDfGo+H|@r1b;6 zT-9+YM=Icg2uKwAQnU<_=D2{Q<;VbZy7_QftBsl>_YX{aEYIccyOORiFJHzwo7OHW zU;QN;uKsv=>x|R#mzCu!={Ng8B8@{XNRt-SOj>=;vlS~8ZtI0ysrO(f4b{veU2=Ak_rYPvj7>&(3W%(7N;@>c-tc~Eyt3!+YHJMpi8Jf4n*hFt@~|Efa1f};vFe>M8XJ)N~< zG_QNTXG)P17cT`Atu^4l6A?J_hCuK0P6BJj$yxo@5~+X<&ujk$igspb1}08rPnyIM zg5tRon>WP!7tWWv5z9cUXQWMg7?B6}e9V@w9{ulfIj zJAJ~;hOqoxb*7d*rH<)s&Ch0pv|t1Er4L(Y?dRm9ttBQH6!3=)AvZT~Jt8k^Gn{Nd zx4QU31yKU^aUQ~4eH}o04Llei+fAhLl(GScUlT%xJB}~uh+*z;`>kNRGeN+4H*fd} z-kz-q{%OuzcxfkD)z;8xG~;BA%#O{_pK?%HLHH~kw|(Z|PXhRHn+4PEiS5_PoUl{# ztT^MZubHC`d^wI}9UCw0CHxgOHa4Z2zhr2zf%0;#_JmFU2CL{fI>8Zuq>74Yfml%R zZoVZ$twgc0Q=0`)f$F=?YviVt;>5x*7&-WyBnXoC-m%=1bHaP3>Epy;Nw7n-7eo4~ zGeF7}(~fps#=;QQ&1sQ^E=?s3?{TeonvHmLVJR02Cnv0#FF;{Gm-Mk!nik0Td*KL9 z{z@6^^o$$5Qu;xHc@)F)+iP>oOk+v$+XLt4HGocx*55AJA#oAgXmlPkM0u^M)!asghC@Iu9NHD8wDY($Ma zXR!=@otu`AIEE^1d~1lrL4p~-|6hhcCh$Ea1<%3ITI4@6N8;~~kga~euoo8>|9S*U z70&$d(aD6DVHNF9Px)u4-SPKux6;2;ZF#iG8hEsk`$#6fb8A5d*cc%v&rcmDW=h?- zaE@_}xN|1LcI?tN|BjY6Wson7z60Ff(9w}a%jKBn-si-hT``IPobK#YDEt~4NK@<0 zFnzFNfn4@y^WdzHd92BV5E#<(^19l;@9Kk&=LW+?Yfrt9Qn%th;=pz@8ao@77qf@4 z<#kV5IbJQT3L-wDj#Z4dSm>a&eO?6Xr`HeVNbr4>)aLIkEw|1Do~37bnb@>8oxt~0 ziXOw92Kypb>zBs)HsY%=LlfHOallB-Xq(plb#-p+0T7t{9hG8$;ICTMe_eiO<13Vw zjzafgV-lik2PhVg>)plLS^5U5Oqb0&NGkkRz-YicFudp%!LiMF`Ctr+FmJU{KNo^K-QR&`i-?&v>Pnfzu-c!FXL?iU5Wpz^;;j@7*p z`jh3&Os-5^vTA57nT5{i@#Z0g!dNK`Wua;2U)b1dAxX<4#rBiN`h1hg>CAf~&3zc5 z_RaY^Y-VS!GX%t8r=1vHQ@}t0w+{q_Bfjs1#@2|F9~!P6gbHR#-I)_)jD3CA1no2F z5`8$H0(QRzXuxv{!(jbOK*p;&Dqcfx%*Hi(&|7F9?lTN;+`cuP3;gHVFGy`^hC%DA zHMLy9Za8$7iPlLMis^K}HukA)Y*#`}2wP6-czL;8>5u*jWVzS5vqsUNdBu=O72XU8 zCXRDN3ESDbvGQWV7N11FJN}Ytp4ETnW}nQnauYk(PR4!pQ?>HPuDoxMI1?Vrw2y6; zNliCi$Y_am-EqEWVLXjx1N?bdFP6316fn$oE4gQVHX5x=JA7uc9hC6BY>V7U*`*zAR0m@b%2Ql zXu1LEY6sPMe;5YFUVA-I6o!Wo*AT1KpuM%0eB_1DuobGe)H)q#^`L5wEzkT2p=pJ@>WqS+ZA&`nq5!kDS3`ga!T;v!N-khr-aLOHTWLfCM z*$83I7!wfK;k)op( z!<0C$ZSCjsElk9qNBw+oVDw333#lJ6>;h>R<+oV2$m+MU$)cOXYn2y_b!a%_3bgzQ z(b-trcXigWZ)$l!^`5(?7Cx1#gHuVqh56!6R8I+1EWB@iO|DhbBIT~)!1N7=moeR) zJffZVRsBNpL~dKCvA4C&*R9J2}l9bMRFD5!|l-TLx1- zbUn%{f;59_Yy7;iAL*drH40lx?NQ#{0<|5tljoV%(|&_!(C+;6)g+ zCw2lyagDijc4d|)G6jSWx2m{qT|9++;TI+=J-HuyM4tPj-pQ(dK2VpuAem9j5t}|Z zDQDv35uCBdkE5)4iYw;`@$zoJ!ys-ri6{#dGzT>`!oApJ@)S*_%VKHf<&4%C!gdHt zftP$KD^mD+s-jd!s~=eKOXQ}Hzt#XU|9_Kq%G4)Yp(f&U$&}d~bew%Z)aO&z0KwN? zbkbOIdomH{i;q3MugF12ro>+~M}o8bU|yQQ$Hn@X1Id`S^5g8NFaU{Nop)B1I2kEX zPg`)zERZ5k)nJp%t6BL9rSm1j+ACR*mscDA>EQYGt{Ywjx3kA2zAVMbP^8@2@2d&n z>T$#PoV)w`HuR2{)3hF^876O)L#q;kmakgNN6v<%*gw)nQA+V4Atk}xScFrnRI8z8MhIfmzI??V>69U zu%Sum0IbW#W)a29Doim$Iq}b5y~I(2%4O<8)Qy_IdbuW3bv1I4I~+E;Wc`bqJiI_} zyeR?ILXUW)$rw$-4+pQPd>&Un)8sK>dc($=e+!jX69gG{iXIsunGSG833a0v3uxnL z#ut^J=qk`3ZDGBKY z0Ribor4a;?c0jruQo2EEU*r3|-+q7l+x6ex$1#V3!aZ}xTI*Wpbw-}V_t8H5xZX<7 zT(e>_S6kYngO5_eqqge?3b|hWd2^MtQ6~kfr~79X^Up!r#GY{ZsZ*D!L0hhVFzRTx zJk`O1PSvz#LTmjsJ+D5Y4#qc&DkxlX>o|Ev{a22*Q3luM)+ioH@Ah@es36c2 zRC;@|+yj#QQUVdJyx#ZNZD$!}R4^M{f^$~ABs&GvDkGx?P zIhagZFFg{t#1=y2DN=r*hjP2}ti!9Usp;6+p#o*8~!|Uuc%TxgG!< z?c?K*yFaB`f91c#y6S>KskO+CrnXk?ve;tqfkvy9`z|ev1%6 z6F@XVm0P81Tk;;xjX~A`qhG^iz6Vw|m8nZ1TMuRRaVaTB)vteTcwaE|zM0G<(n$4r z)qsWTdkx+td6l*x)?MCl@o^<;8wupF(E{ojT9hPF+t5JZ-)owFnMNtl3_~e+qriXj zj46bgWwa`HU4*tzElp4+Fg}jL0+ILpBLJC$+p!#Q;oc*h%JOV>rT!ROYi_aJtri&i>HV{D-o&?1-M*OVkmAriSg%YdXtEy|VPe&JN|GYDmdcOxu!s z${s1N<$IV2)u@kDzm7{LGc5w!O*@gntF6L!z;#h#Gl4R%&~}=E@gG?d{ZG4nom)+Uva+C%I=Hx6_ONbHkP1vPvsI z+`Q)JZBpzGR#fkEF+STHjDHmJefh(;@U*Ead$NlgNO1*RRqocd0eKh{Pj4I-;<4h) zwz){v6>+(olvE2Ld&GzuQl5KKL*xdQEx zJT)LQU9){Kh#QG~pDM;w50?-E?Mp~@6mWfw6@EOoeUnkaqlJRUiAyc56vqZZvtM_KI2HB- z#U&-o(FzFhCSclGA;LfvMhapb*el(Y%$yk%eH@qU)s}m={;lux-{LX^Eh6(`;iZG@ z$jRi&yR^3l+vm;F&ZK&D7l=|{cK9N0@T~I_T)1nSm#uUrv*PjmlI>_465t-Q@06GN zL;lq9E7HpkQ=Jbrf|+j5wH}Y=y$0^=CEnJyJe?xu z*skg!YV9IzTU%QXjVT2-bV(N%R55tqB!jqyMb=J4_0h*t@O)Du_g+jmIhJ6wM1vZq z_m9+yDI&>>Qu3fd4~^{(L~nmIn*}z3<~3f$_av&+v2p8eKC4ffLsrW+S#Jr&o9q`p zwVzn%C$C5E;hImo#kQ_CKc6{j@^?wOvw8WYIsJR&nwN2)5%=?3ulJ^0!1oFZz>d9h z$>+1uZ`|{)0s31GaMwG>jMbk%Dg8U*P|&r1R#TTloTP%27Dl=CV4gYTZm?>q=xwrl zMo)JLtKA-LrjUt;+(1^|6-_3sk9Pd-A=Im?N*kq@-pL}O=H6*`yE`uNX{1D^p;@cd z2jioa=GHVHlf~rsw!t9kI@oL`%=WNeZ7t_*p3KRyCMVD*MfOy89a&25-UI6abpl_O z4TZJ59NmPn&F)Gmiy$$v0t?sQ%Xhv!OW{CwK>-ee8}BKltgI~Jv1Jt4;%*AG*WqWk z5RLDUvKmFhf6o00BONf0`aEY=ihH!^Nd=ftaSkmrHZK`gA8ETTIq@pmvT|;sN-ZV@ zrwRCSiE?aSX(uFO(%=9eF3Isba_N{r$)NLV1a_Ta4}EOHIzO!UHU_(GTY+`cNrV{u zx#@>AOw{ZtNpjT9OBwm7_%d;aEpl@~p2y?(8JFnpYkUyyj6=q@)>Twssv^-SI*?j{ zO@9V|txbF+M#H-u9daYi@OZ$f%>7;E#q>!4W_;$o)^xJbR`PLr{70{cv(Q#BHdTPY z=Z)z0hoIAogjQ7RGqr8nOaB4;z1rX3PcWU7tFf!E_lZ62mw*cc6wZ2irwzx=xn7qm zRQqv6Wn3jIjpz72f$<}!j!WS@Ck&qYnUC`$%=JLyPAHXJCu6FYaOf@6C0$r;Ocm0J z8U;x>aQWZueh$=v;nWF?rL7W&7d9W3(udBc2-`@;qpW|`6t;RjL%zowBxpO_^t~k0 zD7bP~Palc()O%eS_vCqNPx9>k0D(Ru`RmnLs2(M9u|cR?y-vo_EeKMQJZoJ&z1Eu_ zCx5tR0r?=$`U^t!;q`xP?d;I9R!7GQ)5AHnk{Yz;8;$nqzxh(1_lDHDAC~IuL92Vu zPRgm`eXv?CUwcX-di#3pwh)8DmkaV${yhmFvJ-bX+vJufrGYPbElZv=83ofnOk9?d&IvteS{7k_d1v8fipb(tfol*!;{|C zrWYp|h`$0-`remjfl2gp)@(Qx#+p4_en@NF<`TB0w(n!A``k8J5n~&MT zBKv0-*ck`iCszl06tc09Tqr2;;>%9^W;uVE(-;efn#DwrDCg41kCF)88^N>5)s#Wd ztY0slyn(#gDFKu3Qy##9F=!eDLCFos^fVCKZoj{=e`T{|j`@;$<7~m4daYf;p_<)H zC?-|D4_3)pl$TN{-7DJ!&zIlCKHE@#3>QZB-2o5_d@WoRg6`;=jXCrUo=)ERa9m|q z&%O^WNWL%_S6+3X3zgMq;3=GHc@Nug<$~npb5f3w^=|h9)<^?h|(oGU_j71*A{#tNzAuCo0J`z z`Sc)mi*uLbGPZz85c`aDQMmimo@(qF!H?lMcX{@Z+XPx2sfxKNUgSfAt`ZHCZM9Db zwe*M_dMeu1Ub?wvp|Y>#R9-WU*WyitiH@L6nj`k5-2_*>l2$C4xS|~Q1f9NRpMor= zAT_ycM&C5Pb}rFI`va<)@QK@3JqoW^@k#AO7a3Ez6ZrlzC?z+sfREi_A~5u>vLBcaWRfz@-u@!gH7MHc2yl#rM3}SNo_F;i`D}BYZ!0YudQ-NV2Fu_leD~PIB~E;-sebbe;d;uI5xsw%8xbm(v4sc> z_B}G8lJlrySK|{DlbNL2aG%x~aH%z#Yb?UMsY-Begrp?3gk`eK*>>D1ZCbPWs`6t8Z`Y{k*0op;4})#C}QfUBE=oR(&bV=gDV#1!mTeu~x^^lG=5yN(({igY0sNamNq7-q!|V zTdy3+-C)$$DtOr7G6z)?;7t(`5z%>FdvEebmoXknBR=@XC-DWG2rMbh6TPP7@WDI7X?v6=a`+Y%xK&c3Uqs(lWX?+3 zO{_Vnf+D4FWz1+{i&VIm)*9Rme*Dm!$eJf_!!*LM$WpzRV&q^KkR;$TrA|ck#%Zjt zO%e8q{jVHeOs-85e9)4&MVhfQzds_^0!$h#P3CZ|tEmJy_tMCC6cH&FiO7$wqBnGP zB#_rID0F77r95U;oR4R=pp-Q3s4SjN$$p^3Cy?{1*KnP?=pFfb#{^0Ht8Zrh%6ui# z2@6{i`Xgh++?(wLWNF2gR2@UY#jJV387aKIEDhUy_c5N~@DN8c+A;wR=R=CK=K1bsBT?m#;fm46J(=iarX{5KMl>(+x&SI4vyH zu*QP%fEDYrv_GHTX*MRr(7uDg6T>DFi5yh;=}I4oLiEto*rCk6?8ypYNVw63}MkvCg z_%nc{y@4!&$d*dZot2|_>sGiy$MqgO@V+9!Hp4o+rI!%>*8qsAyV6nxG=SRL5`o}S zz?a>{_>t!-P+M#5__EUpKU?kyh^R$5I}o->7d*Tx&Tz;Qc6xE@d-HEAxqm6mRfQZ- zCdRRUI_^}Q%%U_gEy~^KEXiwE$m>%|ac*Qbi`sZ#4)fIW-zC)P&b}Iur1vQtJc>?c z?VS2ZgcJm+lZx~^D|tTn0L3eM_7X#vC9ltoG=p?JOtq~_ymA!S2h<5sLx1| zW`Zl!?|_j2-9-Sy8KQ*m-%myQdUpY0-z%%}Dw_+MwqQV2rmw3D%EhnQEqc5*!XP^IbqMbZfeKpFK!+g4R%^14^1p8>}rn> z#XG~Z%iF`rYE=)1s8fmK8E;LA>M3a!RVj=lYyJ$it-W=Z?!X}I7qOXrAQPU!drfU^ zhknqfSv2;+nqB522Y+0x;tHGIt(VpCR@_GoIwBFwcmbB>mq3~yWUdDv6%fB#JK|gM zo+%YPvzC4bGfax|r?^gc-c5jVNIKsxiT zUls{L4Y^Wa`ClF_Z{s5>-6n4jXTf_hWEl(NmaErGS$$s}qnc9J$2g8d6Ty4i)lV1}*R4qIwVhdUzS7n{kyyh6yd=F@2{DN9?xdhrmvc zI4ugtP$0{<%WZW_+#{aM`WO{Yr|M4MB?eM?PE1<5~nO-+x}cW(cFwnW{1>8X3_9TS4U^|81sDm|nPcXL+HZ{p2= zV1AtR*Aob%yhCk0Ql5qMe$HT1-|9Z+H_Qj)E)VD**^yV+P{;c?dyu?eqAngX3a1jx zNpNHmR~XkiyIyW{=<%1Xx#D^$fvtd9iMw0yp|)M9%hn$aU!wELS?7R`oYgwJ5s=n( zqGUiu6Fz!3Yc?16Y5;%5_^{(QHxdnO-{VB7*7NiazEMxWiBT)P>6Jc4kRfjfZx6 zSBh4}WOYNC1$n7)ADcHUahSH0KKdi}LcMicps~r~Y4wu{5vqJ!TvF`WX!#9k!Ga^K zT6`016{QZ@=x}Y5rL_-1t`7kHeyhL+0wA?Ck(c1F!5?J}((ys7Au)r$v+ju>tJu5A zd8Y_f%lpxq0in_SyvJ(!XWM9(A~k|g$1ai0>tjc{hoXwaF~^i1&-h9EM)zVdBHQvJ z^%81|I*v$UjmZQJ$`H$I&#Q~|$K3swBmSaK?3l6$_n_RhSHbhwm^)r3rNL&Ue?Lr&{6DnzfpmGVg3?2D5F z&j4Dpd{#S?3M#PT0&}5;&f3~qjPk327YscGQD03Ae&01T!xS?`l^C82me(m=5fgCg z;GP-ddABOz#p*7DBr_3*w^bFIG@2r0RSVe`(m7-E=fN^O8NW6w5=SZ>o}l>c6VuUl zb|hgU&zm|day#^1AV;I0T!?@rS|PCFNr_H0C^x~}#0v3S)&WhIAiSo>*RU*<*?Mq( z7V=g;1O31_Ow{IQFNTjwgg@yB#3@3F#GW6u(+Sy+ErzfdQGL{!Po=sO8{=4-=TdB( zYw_VeF2_&yPdY_&&^AD~W}{i<#dF~MnistVTKVG!Jcm>6jP{NDIE-k&pfk7Uk zUG(XQJTqyilP&M<{=Vy^3sO}C6)q%qz|fZPpA;WZ8S;1~3)P#;F%OFUd#nG4fpw;B za9pUM%w^Ur=JURL7Ac6@pD<`qT#jMemn5?a>ss3VbapUN;l4Q?o#r=ma`@|4_MwP6 zZY@tyR^;2!#;vn@&4TLnSurluX!D&F#6*}FO;Mg=!~=JHFk^DR*cdY^d3Zg;sMDmP zR)fAM_;eSZ5TKjfXCa;RKt2lW(l`n#RoIZ4#kq zhE3P8JoCR8HXgzODnXt+uIX`f+3~}}!x>&z*5WGG=9rV9b1WxgXji>-6^Xbf|6L?f z=o(Qec<}(E#fZ)ONaSFXDX6uQ$!;QuE$sa#^67Jl>!z-0Cm-#qXms8M2PxOPG*8>D zJ;dECSc$Pt0m;x?;n>ishK6vE;ld4Pf}ToyD7i#q0SLz#UhICYKvNv8z9p9F6rJ_I z{DEQia^1O~{-?VNiG%>iI9u_ zmuFLYH==idBH!L;za8Ia?zq46JkTNonDCqH@=_`rBxSNYzb7CP%+!(X6YH0 zM;dX3U*A2{{s(la-tf`E02HJr3FgdT5}05PxQ7Y{%Js4;M=Ti8fUiknca|;>xCcTV z#@Fj%K$Y+N#h|-=sGAONRZx!Pp4p@z!&;8n#O*k@$ot*d0%rH+0ZDGSd_X(B6%^U; z-9|g@57H~ItZBC`nRerqXOs2y4Gn7%{d2O@V5YRO8EftzJfAr$<-7l=^E{WVKGCrY zZewF3=faeuTO-VFQI1`o*f77Epgw!wj#Q~~3?KWj^1gc;XNtO9GoA+n-=C<(YM17+ z|6@PjymKFe{?xUtQ%P8p3Jby2^jqcHi;s1s-a$7oKpP15EZu@&t(egnG3sez`$v&} z+7uiv^1iK#n&XhLnv)4m-}+Mbrdv2<8YT$nTEhxO$r_iB>3p;eTGvRN)tw!u5iVO` zTJ;Lgtm*5D(PWuoCK&a~HWCSlg{wAU>L!e(`e-dln1sND6u9@aSrlLW1)o+<3XOt{ ztUIgLl{@ZHJ^hE?FTk+I&MzX_WFdbRCmeU%0*I`v&ema zf3O)zB(FhN78sqR2-g+xF*G{pDPHW^!f$QgI3-LutI${ad62B?>${y^BzwJ_u4>ib zS49$2lLyrO3rT{EdwqvPMm-3{X>TZc!A(pr0fg??^yi|r?6>-CN`5mD6lV@W*(L0Y z@~s6gE7|0b0%I!lO&uDZQ>avT$+AJ_!oC&crjEDCF*c9XED?nCp`NkaUzB=SCnh9Z z=4*MHGsR_ksPe{=s0N&s%B?jYv-?YUA0SR&4Oge+g#wWF@cP2k4Q=h$05s+!;gzAG zOptjO^Jr1{BD%}9T#Qhr2Qy|qilfRd^?=lbsZLJUw1Nr-0iXyb6}lf}9v2P6<^vvi zxt~Gxe6|=;e@F#^D|LYT<{h3%Bor?r(A2pE;;CHCoJy2P@z-Y+3Q8mbvDn=yUiP)v zXznG8A~y@Y$shMK(cZ_Ky3Z*x?} zw9mUGiaicFW{EX^7J_nlE+R^l+eR)i7>jP`KSxu*?Cc1^l4s!va8FpA1qXO4vvy|# zN2}a7-#?NeVMXng`Tpa5xIxJHNQ+l1huy@&dV~C@K)T9Ea%IlJ7>9czYgqO*YIizz}wbyxxgWg)ejyz!dp$ z9S&$4m+Kh3!l@+dh|1>vk?El=maJE96Gy(!z`EbxlMhX0<+qTR+%!yrt61zSePw4l#LXfr>6jiElhBNra@lqke+ z!m+%Czong zHB{;A9ZIm7$FRz*lqaB{z~P0`|I@*Cr=l@jqKuV^Tlazv9J1x%Q2)sK92Qq`!JxdE zXB~4dD9PL7?0Rn8eiYcy#0~R@KgbnGS8L-ZF!OY$FyR@!{d_Rlu=CzEeZ)#GoX>2; zt_l*K0L`=OgSan*^;7WglWzKM$vl->aV2TTV-6+|*sK<+#!wkvYszyP#5vlz`R1lx zjBZ_(-3hB%Dyi%NmYjzjZJ>Cu6sx~r+9rsa>W9w4JitI!Iq;a;4Z}LHeXsZ(U{IX^9 zX0w_XH@1L_hYk2Aj<5cTLEIveH@Tgp92ozDJ=C+)G3_8jIUtFAd|2O0CG-nYSTz*B>(vf z+t)l^U%eIZ7t+EOi+1pTRvkKKoG)mvr}OEH>4fwPimNgzDe2!1JEHu;g$#FM6#3Gb z>MD_EVncJwBGQ6g=jtRc1ZzmaG8Fp4u>Hp1cX-a5n7UVqXTtT?hkUn>367Pp=`x>g zHx`akC$(M|u=Bv|d&kE5m6HolS#yAIIS+>DYs-D(3aftVwR zJb|3V9(#`WVjFF$EaLi`;#ti&xE>3mIrr#J)Qb7u*L%bguYlKZ!{cZ!m~-bGZfny9 zsxu1Ju-n(>xs)y(U9%ad7e|hPZU;KTo`aPp0!GD)vXhs%3`wIWNCrum(l)rsXY?s#+O z)sfbdspkA2M(b<{s7|gl>Z*yYBWxWUP*7tFal3$wm}8_7ei0nzz{-C44K9NR#>{b_ z`_>+~1F~#3lON;wSM`Zr1qE2k@ls|K+Pjrp??f$G_73J~Gp>K~lX`Q#qZM^O(Tc-- z2_LtluQt0+X8uqz_#PQI%wFb8`gXE;zsdT7L8_|BPwHqkkX%3)ceqB1V#oI8XV0N7;i{lL%W1n<|y?YJ5J>~jGiDu^z-vJoP3u6zUYVN9{KGdO)*FaLhom1=}x29m@Y-W z2qv7M`P3wLg^o~9^cR-kM{I2dVF4TOuaSZSE8yT{K;eEg-&j{SUfUGKWP$&0$6&Ny zat8A;M_xq1EnQ5VquwW~oMfSje8EgXSN_L)w?CvU{x2VHFdW=4ziy*z2~vw6jz`aP zHCIGt3X$9PW%P@dREu?;pWRHV!!?_{??@K+^RLxJ`}7kBemiRTe)#F9S~%r+vtrW{ zJ=kY|JgAr@!*T{8q79SJD{7S!(b8ProT0a2@qj8piD zyC;VmZymzQiC#iOA53<26JC>Zsxd_?0JnMb===98XpVb>W&u-X|KZ=aKzlWV?GFtD zt=Sa%K#%3PXBz1kag28)md6#EmV#x>d<+)6pW1NBU0t7Ho7p8=pQ*p!#AzqcFA9UE z9(^i@gYt~~3=`wyPKTQ_o9Oc)Y<8ABog=P?lXdNOPK|Q+UN8698c)bI0PVl79>JG+?}7iT%jX{D1C3c}s9cqcHsL~HNP|AX7iJ8?vbp2=^hos4 z(M@mId<*l`P1FTBrX>;nzc~;2rY<9TK#G10Y}7w4Vfou12jxn2&U5GwMs`9@fmo9p z6-+)kF!6bMexBQw`8n0?XmXn>*C*9&-Aj*o3Qp@}W%CNhM95B z%hbj9-f0#Xfol^0Z^F|arhy;Xs3ILWXd>Lir>!42BWOS?2s10php?4{-ZK0cIBb7g z+Vxlz%KVISJ#>8n`Uk+?O#Td7Szn83)YoR_76*!>Slry;e&@i?Ai0XdFl6I4PqnnBN zz`5#<#OAIVFV@(f$sU;|Kh}sp#RB`>vw`2!0B{ zEk`ft;5y_kI=x?r^s8fDwkr!Og>6iN_u`XN*4r2YQf~RJwZGZGgu?)lQq6c>1(yKStW?+j~GuJ zyib%Rxfg8qV&}iF00DRfzi%h6zZA2-y(<)JfHCL&3|q#ZP0=puO*V)S!K?S7_I_k) z-b(IuuCQO}Xh(A-V!4i}(-AB{z)I3X3P^gpdnY~t%kgS}u|{$_2QW!%YlBs{{)j~K z64-}#I)V`#EFD7OO6TC@0YMT6Yhy^KJ_z%8F2xjLJfN0vj0%EiL?B?i)liHvO5s=^ zYwzI?DekVEbaTK}sCB;t$t)`34DuYYm@NeT53dhD7YDp6u^ZFqyVCXe9bPgFbWDp4 zU8l_dc{EGkj5lXLXNUphaYUkwjE!5JKT!qEW`WS?rvKlVtdiEj^((3}t>+&dg z=oC0H0O2e*x+~#0V=Nb7IB%LujrL0wnnYF#N$ zw>=25&xyWsU8F*Y%{X-s1aM3o?<&@w1hN#9x7XSM<^(E)&VYiZAmeJfNB>G|3CUh| z<-2;`+lXi#0egvD*6N%Y_#m8hT_S$sut!6vLi^=!%nMkif(N1C6?6(t0e%w$l*4&Z z8r^>U`c(c)S;W(v=un;51vf-D7u>6AAp*V4>W{)wxJ+Xkmj!h>@ye9#f>9#+hW$42 z0aCrfkQPBPW%l&{80*rA3d=@ttwFQ`kAVGgA{%~6-mSDirXU$%Jq}1&p{ks=bKv|F zOz;z*1rP-M1?-52G9;ojB_Ihkpgq^(p#+R_n3q&bMwoi3_wtq3mmt(e1IRB_L63q< zxURrx04FO5T#p z(%_F-P(?Ll+f6%$lds+Fn0q~gEkNiJ>o~0tK0|O{!&dPa40FLTJ3o#tAc=#6`2wtN zr>U{$_%q@bVC!ex7!N z1NvCo9+RsiPkAUg&j#@>NxM@o-SYh3lV9Roh}?S~xWp&j;$XjkhP4KTlL6VioKzkx z70xa*K?+$GixlH;UVLyGjNaf7!Pyux6=^q-Rh8j^&U0x@^ODTrwu-|^<=I9U!{;6E z5(%~>eMLXwN)Jt3XraZPQ-Ov@;XKqcE0zb>m9o&C-69>1nBSPbOf0CIPc>0nQC{v3 zbTk;46Sx1G$LH)Rm~6}yAhtc|3JZUb*qJ<%*-=N&s02#*872YTt?2GQ48&|M*t*nT z>aHw@5S^pd%hEGhe{W z^+OolvjFAo7e&4t2N1?G&Q>GU+R*O%@WYV#vP&%vc`Fd^;?~a7-9-#Pkv#bb)W%K8 z&$gt!kIa%5Y=p={dsOtPpdhgPc?bayJMpl}#~LW9!-`F9aSY^%iwxSp{h9Oi86&EW zp2>y)Cj zd-KT@yfHLaekKd*S`%jyRQcFlN}~46I`cm5`E!02lh|NpL7?+rNiouXCx??%#r+-~ zXiuet#6(Vb8_3R(2Z;&~W$K}isP08PchEsJ*ZO@Hg&-kjvFF$Ljrc3D=mJy^ zze8X0BH^8ck5kVtcS##>k^eeHD}*R)(+JjQVofQVchlFq7dmr6{dZQ(>rk3vxcE?S z+Iaf>ZH!VRn9srP61eg=uTjXTi2aX%7&3ApU0|VsjSsA69u5Bk2LP}}b?*&Jh%Xvq zp#RV8jGswKt#v>p2ckBxbj#+@I~@#Z9?D&YH(yQScx@k_HK%y8rP2s;|6$EV7 zz8Uo{?Lx1K1b72Lm4zbEa0QJH0AU7bUiNo>{@vlno;QUk=B%Dc%phKx#hi)s=_V-r zkEEF&A6vf@4uQ$072=A2E&&wuU~pQny8186Q?ThB96+V>hM;xu5^m^y`_Cs1>(+$r zaWQIGwNuA;Y6;s>Q<# z((X$HITs@fPAUfON*rx;qLG2k^}nt(oFX$Bx;k?t(vlERgLg*Kw|#8dFZr*a7WD5= zxz9}1dT%npBdbDF8h8l1D-|jA#egOVjkwP;hwh#O+JFvdfm=mbfNgv=;%`L{Xc?6M zHa1t`u;6b=Z`e&Z&;M^he-;C)$#;c(Oc{*Iv5rpjWZAoKWTj)i7^e0LnlhyyFjm<~ zQ;gYwVRj#P;@Aay=-GQs-G>xU_Y5y?G>HeKwtj$E8~{o$K~I(FMQ{6C#oQzxF{0Q` zpukBZN1ZVa8r(*(J8Q?H%qyI)TsnC&ayDW`Q}63^=QJ{#>BLz|I3`LShN3mh1CF43 zLc?A_vPd7?<;bU& zsE_@hGs2BMJ0KjB!cz#(y2pNDw1V04*STngSG+Nb#(F(Rh~6zZxmFrYS>xzovr1=# zb$;~wJFn-xG3bK3mYMnpcxNzT9qo&QWO;A(mgRGJ1^s7|)on09{udMK72qY|@4cx7 z*lZ`FeB89EZ+34!c&4{@5i@i&Zq$}zf&Ef8%`05=PGqK{3W->NrIU-0u3c)E( z;9)sjt&y8=Bn+-co4!WJiHSUVv2Y{S;F1ghBLm(9=8KW?9k)>!p|R(q_r-o#Q*uMQ zG_B~Fsc8~Z%ur)rsXATonITD%9W$OSeqL7shoY^uSln3C$d?mjNVY>1xlkCYd~fny zPY0^UnCvuIH9z_7Evdd#=3ABo=vt-y!*jaZJ3Og&4V>nJDtE3-7yYnKJDZP$#^f>HYPe7wOrXysfa61{471)U5t2Y85T%tQHC<*=@^PJNCI@Kgg1Q zCBN-`$%V8XUTCWnI7Uz_nmByz#_(Kx&Wp>#b0m=@XU)Ik7~f!BZe4jxObx}=4RHrc zb1}+IVsn06+4+5gG9K$L4|J>aq;jOSlQo&T*Xac)WYO`R9hWncn7Y>tw67l@@~fIg zYLJGCeq&I&r}{A=PJ>UcsXRiv2pcke|xf}WMkRK%?YC#50Qu@ z@!E(z2OZ{%o~10GbvukvgAc2|?-Y@j>bzT=P;Pg1Sq&J9f4P;S5IE&Z?9Kf#DE=o| zTFEw4lakic6NEWcttnkc9lYv%iyb%k8rO5L^|L362R)9^wC5mdw$4XRMdJF~|&Rb1g`zpkPf&1N<) zXd~yK{zsX~?WTCxKV%Z$KTKfw+`5sB{jO?;T@jNTig&hdtWLJ)N>BimH z0WqU$$zw3p}ecN>pm3v5t6p^cbQ$HuJ^$r z`f@qS68{xm7T0Z#vTfyn#49@l^7@BS+buf$R}EtPFV1H+JG){J5BI6v%*sp4%3$jW zIyDRG#BAcrcySWhf+7PgS{m&L_p)?8+#Z>s+Ok|m9 zzW=Ha9&Yk=G77H@MUuVmTNK9U4Q7?YEkq{-?F3p}<$lYvQsT2CC4JH~QvIM)Y-bOo@2Ld>0L&C!^9c(o@+mr-qDcO}tH? zoJ>$PN2ooNyi}rV`{4JnYYtaa>-TxFD=SRieP1q#Q4$zz+c2f>dpnTar}DYD?3Eb* zt~pam%2eU4-=PCj=0!w8uW&3T5BUI_w7saGSUQK54T5~K3U{H}*AOt$ihs!t!RT@J zTQn=$zfMnY`}Y&ee=>#z{@KF2ZaDF?%Kxh@TM5sD>#c*8<>_*=iTN?YIja$UaZh>0 zCtfG2g?HC?rZTU1viezb$cIowZPlEo+n?vo z+hQ+$!|TI!R!tb!+#kq%C1q}w?cC3K&EwtWe>COx1P2V`nRGP=$HYb67z zOD19XeS*(|>dP<<@n;RfEcmedg)^BNR_I5f>?RJ=imq>c^gE$`ScDc>TAnl0Wi%XWp=- zmfdGJH4zwmeg67oSFM|f0uqyrsYWMxS{=hYx|DsTaaMW1@}EArGV|!Tge}o#ExT`_ zK+9Tobh=y1El^LOHKdTOrm58KzCT}~z8#}F<1A|Yw}X>KO_-41R-mHaR69kB7HJ^i z{O5ZOvWp(2pYt%oE-n4jd|9J{>3U3}Z(ly<6;~T1V$9pDYOOA;Gg*ssIc=pzT#3S( zNMcaT$6*8ULNK;~7&AJ_JehkV81u5G4{`Mct8{d~jfbyu*)>VuO6rWYyj3LW@n*Nt z)cAOz-{{X&B``AwJR2G@Dm2AUxu+)gfJOeSd?(c|30$+*dOdiV`>F92@ci^{cOQ%! zeb?c8zL2Hw5)YBlarAw;E_Aqn^8IBSQ`Av0#I#E)KdAU?Rg&|7YgX8A7Yp3nZ6`e~ zi&4$5ArdXMl%vxTva;@Lyh4dU%CimC&o=@RWz|K53`s8Id=IUH>Qhu>J!_P6J6MA8 zzcj`-)ZQC8>lXN6biy5dd-~$s9AZk$egr&h=HG0n!hjpLT6PbF33=8KdlQM0E~}TR z8na!V)`NK8?gf&lB}l84-x|2L`E~Ogm>YN;8_iM?FHRsFAmegPAni1eqy?$ty3N6} z7f>Yd4ORcM%6_R@`<;7;F+%R9P_kUJWfHPxs%FOFAdIV4?m?>7tJIkZ{_$|}Mdx@i zyB+ahk$9791*qAj%xwanb?q{mzC^_ygt)B4VIFRDiNV#A1}ue(39>XsDZ-HZG~?|1HEHchv`DDHK#r80X(wm#Q)k2la~Jc!<^lwGl@ z;WDRj^^LBp*-i7S12Y=0ProtVJ!+GZu6>v7SVTPY#B;XDv--vJsnd(IQCgW#`m;lU za8E$XgiZ_fn7e8?I`Y}=VH<``wlWW_}l^m0k^FmY?E?OO1k zpt@X(l{z9o$>R*b@rzCz*nt$Xrs!6C#I`b`YHi5unlEPAw>0hTt2S0pkgq zfoiG4-;V(=2UiGVDoBC$=jk4R;O;*v`ABdE0ZGPRue@LXlzDvBZ8FRj_NdC%w7H%2 z=%S03#PM>f{LQvn(+#tQt>pm`E1mH+g6&1NE7N;93yQtY@e{3YbXR3-&=umKF#~iwp_*-Y@(-0zvYUHpJHpr{2uJH#G?LMWO@12mmzKO zoVs5w zV%rG6CQQp47hq$wEBDJCyvWDep|=|`r3%Ww=lm)B<3zyK%R2573LV`2N%JpRs(hKj zgDbNI6(u!2(={pi`Ooj7Dd_U{!ECVew~gxXX%6Qw>_+MGq02qg!Gwc*6unq2YD8Ic z)wJ+;UG5JO%KXC8Cp>iUh9jZ#0_mr*OwSIpo?&>bqk3zB7md$^2 z%CZ0HGx2tzPPC?RD%Sq%J_XuSH}mivT#ywyI>l$hMG*9ve@IcsW#4+%@PG@ke6xy! zugXp0KvdT{8?C$ZoKJQ`H`BsFs#%Zk0;~C*V2)2Jj@{01T z?xB;u%yMa|o&6s#w+H!r?iwZ#m>Ed)j~V9<;89-x!38)E$}B2t8gGPW;E%-A0M*y8 zn!G~HbW|F)r}gT_T5-%Y*X(9H-a(6mO)*R97#b@@TuR*>J;GCJVW;Rei(<^-V_A(! z+uN&k_Ndq8pYJWa&df=Cqku#lj@y)_f9`cn66Ux6Hhh7PW9p2YdHL~Ua?8O=9R8Pu z;%jZ?^f7G1^!)7V$s#^SN#0}Tv>R^>_BI}vzovaJbF85~T+bUYq9A36eCPLJR7%o;_O|oDEsT@m&H6w3a%^U^qVQaB7YD) zx7>$Q%ja`J3RmiFOq%y6vUMS!9Q{bK)3hfDo>CV%^(ic@ZS3z&X;9hS|J2x9OM8wi zlI)c&dteo(sBMQZsv4Waj&Jz-Eaha`bLsPi%b59EI~EN_B~SfVlfiiN&kphttAd;= zRXonr_MFYRngu!f{FH&iu6p-tbb0CkopXj^w+OyDx9&gXY#lP-=}q}gWL4`P+D*5$fJ>LNP(>cYa`-&M!GvmPvuQCW2^E?TJLY{KWKjgX_Y7q4nz5-#uU z)zOc;(ObFZFfX=ujo=?yji<62ZalU{oum)H4Z!MXxwiIgInjU$<{9kJsFIzezA1wbC%U0CX98~T1yNmNpO`C}F<``dhxu1ojDsg)^<`WfLT0UEj8^S-Kjk7}--PxBpw zkM=%Sy020evUfg<*Lr6Z7Ty$fxt(fvqwMJgvDhPFYQ{IMUPx8p&nJhQ z4xf@r>o-LIGGKXmw1{hxO*k2%WBsBYd$#$}L&o6aJPAB{H5bA&!Ec1cTG(Zfk>tb+ z`m0z0gR8FtK7QU{vwP$4Em8l#)ZH1WuBf41BU52@fC$R1b{@|~x)>@inT5UkGIQAU z1MB^k3UOO?QRNtOT2ydN-TOqx*OKA0C92y08*^_N7G>1N`wkrv3W{`>fOMyHgNPs? zDJ|07B_$2gEhUX~cS?%_QUg-L00Sa9#98C}?!C|6=X^LH&vkjJFfjAPde*w{b^q_* zA9lCi>XfwER=5Av_o*i$7VdVp)OxqpbzD|sAL$a-t18(BDtjxSNv3P-sUz9yW3e|S zr#_pL;{gnE<$Ggvp2E?eeh1v1oC{cRz0IUa{MCiXM@xY{+6oN#j*&Un8~gH1uDh#H z9W$L#Iaga8JDyX3n1tu8Ze9P^qOV(ZU_dN`E9~!ZduR1?ds0JvR)#_6AYIqnc9{PF z+JRoMG{5Wsqlo@u5MR^=<|c6`k?kvGZi+8=%?l2rj5e$0p;vyOzDR#(nA`r7TzskG zIcv+((o*h&CG}yN*50e%h4F2#44vhFXZZn}Zx5jUfxap_1q&AZ;=28?tzzfo^kn_@ z3k~6{)4c5nAw>$DU34Ml1-Sf_>_jIucnT{lwI2?Gb?M}Kv~C|1Z|&CxpHY(u$z6(M zt}F0BZC;~$WZ7>T#r~KO>?Vv(g0+cVoRbc3i>h6Etn@mV-h8z$8*mFX)+QADp?I!R z&r6{uvQAM@Vw*c2c)gM532r1}NT_R8z0|e3#1n|Z0vO(| zuJw*sTGJ@^F>7Lj)h_W%%+BNyf3ED^hHgM*LrPbZ5{uj%x zD=E>OF2Ht`eO{>ZwCd1k#>R`BOo;dER$CqMZNN3TFk-)bIrayL+g7HHF_vcr;6^#w zI({ag=0Z`{p*DLfq2eXVpjp3lrB!+mhb1ZU;ggp?>(yus@K@~O>LXJ1?;49TF^=N6CyS0l6TV_f_Z?W4`*)_j~xC+I%#`Dt#bdwDx*AH2QFbL}_L_<3Uf z9k|hW)2osOKY=xz{^72>SYldN8~Q7@NB?PKYo-))*~FfkpZ6uVs|U~&fDksQ!VHQX z7`3W5-dX>j0@hj{(N;PD7~u#UaYggPcAVYlJ&dT^pIXKZJCCBSMJu;o0xhaESJQ*S z2MsjyWk6XpP}7_w`>!+j=`%O@O)v%Gg40LIZ0+ZMOj4 z?J|R#fR=kbk{n50dFM+Gc?b~<;?Kv)ggzC+3G%Fbcl+DVN4ey7vG#1i>gL+zMj|AB zEco0;p|TtPaKbjH!4DvFZeptw%-(1VLc$uq%)0k@d1B1TK9&}~d-6O0(GWiA>_^aE za+%}deLi3-p$slyCkMLIgjL}LDsV&{2bX32107UL6kzu zF`wMR0&m0_mBUL8hWGZA;Uc|L1{@@vc6|uHy8TXTV4?jx`|*%Qo7G9{s9%ZQNkG5Y z=aSjNtY~qz60MK&fPbIWU-WU^(mMcr<8i8IS8}Yyucw?S z`7iq#=K~#45dh@VnDuUG%bUw`Aed5BfrP5^-wQN<6NWm@%1K4*Q{ z@kJ9fH05Z>CKZKC00tAdYru;A`eImWX!L;_&MJQ01lD7lOsTlAc$cW*8!|Y!-<0?c ziM_`*9b;AhOxl4UU{=D#{qhBvM`?o1);1NTaBsw*z1!Q&F)wj}9PP{1Z@G5PnrlzV zPn<29uY;S)LD;>rgyKO1NR_FUplj-^BTyCTj)`5kTJoc=67$k7f)<-#iACh-=nL<`Gw^#F> z&YnPi#ErMmv_i`Q5|5W`0wZElQr!v{?~ytanB3dKBb<_ZkH0PLAC-XK_1gS_Zk2*T@+W>3M<3J?|LyodiM;oL+A5e< z;~T4Ot6zKBEuhT1_tR6U=XA--9Fa1l8nBa+UCM)MQE-5tZY zT|2~X3(79#Sz!CrB`Yvq~ zyX{2IRV{b&wJn%9>U^BmkI(U6Wu@?aFN)Uig+(8zl{&`B9iZp#{%TW;%d`yi^=&`B zdP>qcDCsgxRn7Xro+38v2dyPAP=gt>w#=<|9u`jd=9<|2u4A1We0@xX? z+D+fCNSSrgD@=g+E$w)uu&~#bM3-}C)&1rae_pQX3BH#QZz}m5GGzCk@?G7K1nc0c zdA#J+=YMy-6POp0Q#&>TXW#RMFXpR*t&NRahtTfsf{i0^;mpqWDr%?~BVOsuKMni2 zf{{k1i~z}$K}TSOfD z)|D#7ul;b+(KH8-xhwe3cNX>8ryjT(+>M=voQQer zn>XvYFT^ro?fpYSDJo3oZD?5Jw^o>p?RncLd1r6YvsBd=Eu7CzsouNyQ-^h^ZQM#c zMWIoC_rWh8b^Q-fPo|$#k8ysbOKgXR2ZvBixEZ1$=XmrK+E(|L#f0Bf-1<< z;nug&fXd+I&n6TRj?R}Ds;{dygaP52@oRjF^S=7<(e|ruGO*L56||T)cXTV%MH3H; zH$Se=8=TEOM(SG%wbHF8ZIJs|s?qLy@zyAt z5cC~g_TZf?2!HKI0}T?6r=saM^!z#IdXeC?NP;9^==h4(kX*E*bA|mx7<;52&fJ@& zg-TOK6bFV`zU3zr;z}C>Izz7uS(?7iDSro9pIkFiKrjH5);f+2)mJ95P@iG3+RGCu zcriQZKJ*eN018Td5|AbXUuf(qJ653INgV{-29@QL|-lNYI~wbgTuX1X6!f``@^&I z+9(L0m8hZ^v2)%@80h?mu}iy);8oWpM$6wZ69qQp-9OcdOW!c0^{;kct6twqoP(BGz{TPJ zj(xm11;lqnvymbM^z(+H-=l~xq?wVP@nc)hIXpOzc251n&5+Ni*2m}l1vxWg_9-$2 zzyWQ1sy;C^(aBg!k2PGg$A*i(56g5dpBUT)aV-H zQ=)SATV6=1mYTm#bsnl9T=$*wVjDPlD2`adjR_4ZL;E%xEal5U3&-NSE#l`Bow$Pb z-YlZ?6k^8u3@1|oD#*AEZuvRxg`qK%BG~>N9fcEDA|Oqv zVJ8io-PAVzvC^m;r>{Ue9sG}?vj!!H4*KQS|H`SK{sc-^+K<>mHSj_5P|_<(u>aCkN06iJ(7 zUhN7rg%_N_S;3+E#sd(PJTF*k_(pGhA8xv=Jn{jizM~f8nXD+WcTI+pt#s_lFU;9c zBRuJrmMv0U*aijvc%QD~Kj;bs&Tb?tzUkxrxA@#V8w3YO8%`m0r@XDR1zb0l`y+5_#$e5g{@0*ezk-S~twZh29krlw{YcZWSbQr?#Xq+Q%kkH zn@1oz6nOj0Ylq$)QA7L)K(@Fi%Fs~IzQTz44UVetqMtlgq0?gy*y93^i<2urk?$(3 z1Z~iRX#K7`D5lUZe~6w%TKq5$u>D9vS3)(=)?zxVud?5mxjSKP@ZHOmq3VHlJn-7H z3;rRmL?1*+JJ|CnYYL-|jT|OvdBNa9d9mAUb;ELxYjIvkT!p>R-A|2lbDWYrIn^<) zJX}#w@&?2XZaX;~M)S_(D@nwENL7+(Ht}B&awN(Id`%}Iqd}jwK*@iTh!M1>AIIQD zqbs|ZkkRAHM}@_jvWATc3W9Q4a%BTA{Ja)#F6WK!`E5`<6DLqkJ+><*nrzu3@mmY0 z@cEE^)?Yg%6g?jLE+TR462Yp;v}2nfp2?>CLX)9Oh9_poH-fb;n%#@DTr&sP%4mox z!alEqE1Xf}`A14#GBkj9tQ+5IG0T3z^;;CN{z2J4FL$&pTx6pmAeUo|H;!839~KvM zq98S_K%xkMuN{}NE5c4|5TsSc)vF-;{OdQMcnz#~KvTP;aIPA&uV^5g29u+>DGJu@ zCJ}JieOJe|hO|!m@^r0EKGonJw`?LsK?lhkt~hf~U^V$4L(^IVEwu54oG*VzR(cvn zJkt+tNilEtWBAhFojk0T#*`y?APE(YWPR~-mY?@2?<)SRg?^-2Ge8t+HHBA23!jGj z{zE|l-}H?{$G|LGgHc9m-yaqE?6}`rDFK8Nv^so#priAn=GBB%#viV+$fsNz(T;&) z0jDc)YM5v1>-0xI4kccWk4P%lNQdg5kh#V`_M{t z$7S}%LE2FUCK((f_qyL5zyBy_`;)LA)qBEFfHea<0xK>kBs~6u?8d=hSEz3Z9pz#T zi*C#%x?nN&DkRXor|W^7wUvBRuu~vIjS=RWdr0T`DipK!150j8d4Ve;4%%Rh^*gN9 zE$7L_fEu?d@1%0^i;J(Xs{875-6F>tkwt4^N@6P!2+T4UbVmNmhI zf%ZKRvGzktZ0P}or6(8-Xk!m|#gVK5z{lx0wCHt3tt381@-@7JGUEwD`o-X=v6vP3 zelwT!4V81kZ?{Ip^KF2!DS@B4HY(pU41V%_dOgOMSg@n$o)bP&jy{zS*Dv{$FSmnd zYezPzJePxEf#;q-X)=c%#y&ZwWc!dul0EvI{HTFXnGB9ORv_ku+4Gfh28_Kk~4kbAAtTU=uyGp-wAchfJN1=<=8q+-RUv%O0rBHM{3qa!46IY75*He$CWnOr@ zxLsLE6y!GI`%osA-Aue*G0F%Bx|zkJP7HQA^8Wt8epBQmUup#BR^FQk22fd`%mB5l zd6AN*!US3I{aJu%kbv`H^Ca(1DnV%;NkWqZ z#eqUZO<${pK^}`w!*Y#6^D-C9QPa)HD|ImZWSf58x34x~ip06U4Z&I~<^~%q ztuOPW#|2U!tyYdXQv#ATY52@Hd>sJ&gYP`)_K%l=EMSmwurWqHxF3&b^WdB>m2uRs z{4&06wXxAO@sWY^WP&Q^T{{n92CV|Rr)c<3G6}P#SYuy@{1;#0Q}LDW9`6K?`gW^hd5yzv9P%8~>ojL{ z-VCHOBWCzZn*UN6HQFZgCJsqFeF9G}B6T5e}v=NZ{|IhV|kK ztl2pX2>nr4O$XuBHOyL2@-~bM;wd@jMMM@`Xovmg11m|tyCpK>!*%ar*v|AI!vy5X zB*wt%UDmaFRsi`_h-AFkr7Z%s8YPhGk*caQr`ZWcTE2Dw6mMFrVAoECNOMU`&gY2FB>p=AZ!1z zMM-4GK%34+>G$4rjb97ZyrES^*~W(C{^5G&120Nbzb}zECLlT?l4?1_ivMPQ+R)?e zk|5fcOHXZInu zBaV{$*Z*J+M9ILVBYSa#ZMbevox=MZdSx8A_x(x7MegI~k}HSyD!!LEZ&bb{b~UYo)AzoOPN)_2f(}7?Ae{7MkF0LU@IUmSVLbnhliqo>kkq*ZHN^U$+hW(0izp~CJAVC zh}$uGR9QM-ge>s*Wyh8-?62H==cwtU55OlO_!=U>dOUUOc6j#wz{5TS?P=w7MS0D5 zbF_E{vwU%6S&;R8z0@B@UEYcwL7lAon9s(kB!1K)-B*C=901zXae&YUlwqqZmnRyM zMr-|B$!7VFH`oJ~^}2Cu*{$JJ4~>|tQ2USUq{wL;U%dOAnv$;F=k}cxrk1_}2*wgFN%hs@)!R9y*Tbs8433@5-gcT9yU*Rf>P_IphP{ z%kU2*anLtLQTOt5mThUldeVUun8=OK+PUmvt1+YHvEO{P6$-3l(PWYy7e4lanWqkR zBrw=ES?J#`tAvmeHyv2xyD?>*;?KMj?BLW%U7An2KalQBNlSEje&{R6<;LVeB{5%% zX{Q4K)kX6wkMYU42p~T-)BLWY^9VXxb}@Q0EYNwj(ycB&e+eJLFguaNelx@q;{^Rw z4a@2L8=5f6EuWX2Igsu|$?Q;KdnV{Bz={ZYruFj89>8fODoRoxCg|%Oxw~i;wZV*3 zrZ8b0GhYbgl9b5ktU^3IY{rDMJk0a}5ZJBrhd$Vz;}|2K*f%p`35y~X3xPbuCHUn` zuB|Z6@&T1p0Y_+gy20@^iJ0)9IbYQAv^GABBiWb5GzVM!d78IM8sm1b$4Qv%PI_Wm zPCCP$e)rQqP}fC^ZeapdMTWtsbcm510{cz4mX4rMdoiMsaVA$4@|&Tr4fL}7(F5b_ zcw?A?`n8eK!R3TEKERvV`2u)19>3_YI038Fy|u4bXu$-%497jhz}aI&Xu4}1FSede zVWP!C9M6a_kGKZrb65E8!Yf`wBgZhVlTIYS0|R(eSbeiC8Mm&t$J1RpvqP|=s{S2m z7-`vnm|Xvwf8rbTTj^D(JILVh@zaD4&^sQ31r%t+8VxXd_RL)YfphX-iLN7BIn{F0 zrIo5PtsXxTiX)znmMRCPY_}NgE_<b_)H4(vuz#*O0N6-_o#XE0Cs9c7#BJcfEZe|IGr zupy)r5OwCJjuQujydW~YEPecc!a1jvO#e4Hr|0dHOC<`dpqYNk`dTtN^ce;K=hv~H zNVUxpRrrd>!#LCxA!N36KoNVuYR{W>u$-=@Gpe`3q-N06e~|;dbZRkt4Hon<%e`!s zzvKL0TVScI336^laB`&EA%KO$BjP)EcTO7(Ciol}{-0=0u5yYfIbh!r`Hdj_^^zbh zB_yl#Z75l#3ZcqGWM}cfHLu2{gQ88uOC9{FJjO^#kQk&DIXM$ltsG)#{f&MTWi-Y= z;z3#<8f}l*NMTh6<~g<>o%J!Bn&!y0L+r);0=U1}?Y4#k0wJZC$G9rp8gQ#dG){v zmOWJ%rT>n!SaxK1Y?Tz?i)A`fdd#q@n3tMpy;IK;Qa>Y=ulB%4niFVbe+FHCI|X|0 zzP*0&B$e!02A>=aupWiFs5UmfkMgu&i4+B%pr8*X-KVKezJ5hvh@zwm2lblP1mKr zdohPM!vf3`y3c(z&3&8AYBMT!`Nf|7QAhs`?4|VegE__kAKzXpJTx9SVEnxv0zNgM z0S@#&$^mKwNF_Ummz?*$mo*K8j#R-5Y0lb_{lKqM4g~Qm z*X#rYTFiQ!m=bv|TF!iJRGd1E73+TvAb=TD@QzW76Uxq1o?_t)X(suy4S#K8W7u=n z_Xv1*H_K^0O{j`p_r)OB5X|_zZM9D`$-@!VB+3s1dRYL+yX{FGe3`*@I$ryhsnISW+D@@UQ2H>Ein39B0d1Xn;oTZyG|MrP`@JoaW zv{iR3o1tAhXr{lG&QZFa_K?C2LmSv&X2~2;(`Syo>!tCdmQ4v0qcLI66;$loS3{cX{yVH(&AiVkUsL-2nPiIhnCbXlS z?HL*1cmXZ>xf_vL@)K&dwU#v=DgSmk*7gkQZDs0iYD8l%s4}}4%2a}ur*!?zLn>g$ zvy0HtcZoP4@Tov8LNM$^D2 zr)f1nFK}q}oWt3)xA?95wZzMIvBx40E{g5BzAx>14U4VrozKhYMp}OJYQ$Z3>StMO zTC#Jsmx&`AMTX_zc1RT0V(53|C^3d_FFQIo5KK4&rDimcCC`Xr#V5Ud~v^u)q4~2=E_?FSkGw%0hir3EG(>xQ|EX8ocXH~8vT4_-|{(1x8 zXmmP`W4Zn!3X_7klls}B>s5=BcIE`Yej^aTxK`K*;BcCMOG@#_NO;nyB&BNDYq3 zTCC${OLokV5&`?Phe6f^AO?lk`>TT{{nw|pw%mBMu8TK;g@Ip5=}@fK@YtJoXi==6 z;}->Eq%nIl1l@#zZK|$6k2>~rpnpO4-gg!p@f6&n$AM;Vtao1hAa1L^-5Ma;?Vo1r zT>-o}o6K;ajs;a&;fgBVu_ql3czU{GRHV=Op08_tO3IFVC1}z8DoQj%9(srw z8~*J!tsA)_l!0N&@tu=^=FEh|5sO7I2tJysoAdAx+4Pyg$w2P@>!7kcbOVdllIxj_ z-vD>atv*_KZw{W)n)g|KV9waz5xwzoGb3ia4X-Fg%4c39rmOhprc5X@s7a}ou_cZ& zsK~caJj*fC!3qu-zIqT}L4jR(Gr;meevLR!iJ)n>;heGOWd(IpR@tEiHv4X^sOlNp z-kq$q-Uj| z1J09IQOM%DMMpolRN5VvpilYPG4B+pk8Rziq+h+V&D@;8)`z5G0HmA=RYz0&6(h=`fmFg-C>hs3%y8W&&hd#NPq{Pnmyvfla*t2;}2#4y3YEA@wf zm01Y`S#SYg<*84nb$H#6w*|&Eh?TS6bjYXWKcSVJGv@xDe>I(TEpKwQgJTj*e{BU4 zWSgx(&)Y}es|~OlAGdp5j>*oNL?$pX=3qLs?P>}$vk>!WsT}#AuS9^@wR=f2d*jp} zO*>?GMK3pj=~-P+)#1-sFTX!;_}+8Stq{?8o7l^szPBtJ4=y;xZc*gMVLcW;0+yNK zPv92xx-PG?956iy94uu~BQ49KW^+HTsSUwP9`N$1)qC0|SHmh*pXtWEdC=mvi%^8} zbNi@N>Y0)${G<6}9f{8kV>{MRAIUdrXY_gkN5*Xk984J}+ zQevV*DSV+779?@6fOj@ACJ0Ud%WtfWRY04ta;>|U1^Fe5dBQO%y*})s zi`OyMGk!{9zGhFf-g0C-qq%7XOn-#?7~+tF4huhl z4}Kz_zF!9+DLy__`vM@7QaLdM>=`K04bULomA2}J9O}&kUA9WCXI6dm0uK5In~$gR z@xU@1iRZ4TnIjs8Ty99BMdHCO)Je9u0vJl>j*e3&di6i$I*o_H%MeJxbL_I0xB?k3 z$kFUR>a&z+Cy~{&`lD5cyb13`5z{A){&sQYvvUV7tZqfNH$9(u;u*#BKQ~c%7r)lF zRNJb{3dj8Zn$JLgaEU^?{3^344U0q#E95Ypl6I6%P9tJIn~fs6beE}zy$_WcQ*KhMYO^qD!q8F$}$k$Y<9`&f z&U4jgeATm}D4}z`fN0k>Y<&Ie@rHYiuaV}}pPsBBF+WWWJa99C3<((--@Y;DEdz;2 z>T8EyAVNC{EUn34E`%3_9vmDbMz2j|>i;}aDXs@sk+f4@hO|;75wwQ=+W%R9uX(-x z-w2cXD~o@~t|odPA@SBIU7vT1r^U9Z-XCH0phc6OB}936jbWm8uPyFmXR2_CC56j zC`(Tn!Y_1vGwMphM!j>TQ^##(+l}%l=CbDQw9DA&wXSs|xeUnwhrntM!M;dvLp$tT zkr~B|F~S|NN-|5`ABu%Xx^F{1%QV`T-gq-EoGv~eMkM=e{dCF>u=>q%Tr}nzuu+d3!v)gBt;C}u4QlpV0MZnc*?Oc(G z<)gl>IOSnXG2zn?6%b5|R)RS%QK@JcCxzcsI*x{#I&Qy~nFwb}payJ$6G~p>*RP2u zD#e_axvh;zl8XaBsLvw=Ske|6F0iO+%R$WQ1{1#=>i4MZOVhMn;mZF z)@%rxQRyUktGa@B?`1#W)hwCuYWAi!kWWd#;Jt^yhX_Hh=K-y$ZRiP*0=*3glym9J z2pg*S(bWHy$;ZMVyc)Su+B6z~+yreZdE-$3mDD8&{dgD5ET7mDISB``RDAHY>*|`^ zTg-$`Fj~Cf#|LjGIVW<$m|>!p!^j@=UHgw=Dfpn}HBVyYAX3qO0AdHVDlmb9zs0G( z=~jfjD0>eeH>zX~TwNzQa6Ibi*CdX(jJ36>g8G(4&#^!ZZy~^gXE`i}3QNJQC`n3@ z9&Z9(5qy;mFbh0|#fVcde1QpJ&*jNZqDrx7_P4P#F0mg2oW>o$&v&$JdIHODS&C+? zsUpkW);!s9GDyM3EAdodfNvr;9Xsy12~)+$mFRtftOL`S>Izy>ZI)5oeAuMPYJEkU zMpg0`(tn9b%iS&FOMQLli?Z*o;wdWYePQ>sUt#4kfjY3_*3)}R%=-E%=;WXI2X z0uF6}h==m8TjpEiR|r>Rs98^v(E;E#-aF&Y@^jIU zM&`AKE_S~SoG<&B+%bz;Ky&DgMTAbej(dmqM(a?G0hlgy!zsFs@h5o`Q%W4&R=I;* ze!{mO@IDAf5x?1mZZ5v7t5YgI?}EJ=EM&5f1EF+ih&7hk4lR2hao#O|m;1?tS1J^r z&LYl9jH2#?9tlW+6pz2Y;$2hHO?L7Ms>gM*Q|1+vZEnP&U(QRa6fNyO!dOmFyIR4M z+5S-4|20IFag7x7=wqoLiqx`AOU3N{IwGa0;9%IR-O3~$edUNBbsP#?qbkHr9MyNU z?D5v`B`LSBbck$zIj_M?x?>iGC5M8=^hK6;dvYIzJdF<199^g^>Q@;lcSX47_Ukj( zeZyOBkMAWXGR4JMJDv(OzKI}U*XQ}9^++Uy5^6<@hIDceE#1FAau z<*U@@T1Ihw+pCh~2SiRBV|{nGmDbMF8oES0OJE!Na87#UeRd4l+}o5;-#P=QZppe| zf7MwSz^Q}>(=^(bG$p6V&$}-=@@i{@_m{&uc<#$61(}AK)|FqM=G~AvT<*PUtqiT? z2sd-%+^yxve{tNd&)8F0(*HIS1n*z91k?rEzmn<7VB_HB?plCxU7pnAx=|__=2-hx zOy3M(rSsgI^<$MQv|?CP`RX;#c>eK0?9d8*B~#q zpl`ki--eOS(5a4$|5YDJ;*A}0Z8cm{PI1@FEaA1r)<-RwIX|GeYk^L%SkTV?UMiDH zm_Xg)ZFZpNGqbhUYi??~A0=l>ipgoz_Wobqu<2Qkoq_XRNZ-BWTT7)kuliQeA-v)v zF9;r(f(5fHd1v91flM&r85Rw<{c0(@hN)wtInh%75`c`%f4n7UzEf z6`h`<^B=@|;zu7a zOx_zqXnt~BgbxzCA#Q*SD8dV5-?c~Qr8fiw()(Gwm^AYNT*du+8nVBciK4tD?~-T)9(J5Tsw%;F-TKr=w>MYRY$0YpdJY6E2Q!=UHq>Qqo-G# zPC6LeGy(w)U9!EbN?tGw6u>P4HEa--P(??%8v%#XzwNf~)$mW%b*bKh;Q)Tb^0Q-I zjQC)a{SsWk3uOPbAc6zV;9x-k+maw+>VhG#afpyZ>a%m**XK}+l!C6&x-Sg`?D-@C zV{b0On&at;o$=)V_zB)G-wD|1-rtu2Pgz3p*o$g2rvH3#U*>o1WCDo!oVsg}f6H!5 z4@Y!*q~@8W9vE9JjrwJjb}5QTR!nijnzW!5{ru!6I{sYc2Nqq^0ou?Cf`jHjdlPKI zj7&vp?*U2A!)*WUaWces2H#n$>&`y%n<4>TUN+qa_KvP`P}eC5su~(MzXdz%QJ@>L z19-X>KHKw8OB&n5;-?Z{kM(D&;I>N&{xt-%Hhwy%og+=jm(qxXKyV-hHCAc%rrx(U8lVPEB^rOkS@HcF?P=t6Bloo$`&z~`ZK~n6?hLGc!xM} z-I+YiUh+qt$Ka2OR|jH;E&W|PxxU%hQ~U?iTf#V)C*RLmhpmItx=QUSPCG@_3XgSu zoPS!>*uHllblSN$9gs)q?;7r|0yyAPt1lxWA|OG}SvRk#q6bBd87?#%OjgVgP(@yN1zq8GLsme=DkzL9p;BM2Dgy!#M3Hk}--<;JPSnx~- zAZ9(J^7};@461-^p6IaSL<3O34LiJMyt`=TtBokUu3;v3S3UC@s$iFWax!jq?r@6F z_TMKAivN{x%)$G1-e8~S31y77CW4`?%?E7(p zQFvSxdNMak>o1fwQGA$X@kOot*i00=yvw%#6&9ERnsYcvz&}kZT;Kr+GUVLZobim7 z`}1vO_GH3p_Q81mM!&JxQ|qbRgC#SQqmajH%ZFNV$!pwP$U#Jo`QJe_ScH5YrrHlI zod5egoWEH*eC(!IDmU*At}oan^yyqZhP-5CNK`U)bgbDB7`1TueQX9!03aN}4&u%O z;Nb(L3E)o9Q^#xm`xH~|e?t{~3h3bAa0ge)oIJLsylZF0qmI<3y9}-qafaCZjd%j4 zi2xz`5pd#DH^~st{RKI23;Q3_#dobA@1~KTbZTu25;w34w5=3UvW!i2{Cm;@NSgmM zILXy2kb{#RJcMWm=PnI7EY0IAsyUE!D2;gu|95q01E#MwX2&iBRHVueiipnt0SRDY)gYSuboBl9J|L4+gs!;)XXrx7sBAj-YSGGjIe>5Y61vF9< zz3rrcW2nN_QzQf34O8a*c!-&g$40T{q8$-q$qX>^5ca=nAa<(Mt)NmB{Ct2@8&$Ip zhc7|)LqpMaL_kfzkkgumlJYNQv_fGMFqN`jnmoR_@!#=kHEil%ueD!l!tdcs8=L&% zCGG$ajyrd)hLf#xj61}-f7M(7*h0sd9G^(YI9ii#3# z%pf(~)t}{W*R2p4ZaaN4HDjDi%U!iPNPQ2y4nA-4^z*^7nM&={Kl{(QL}sA;f_%nS zJ^upSP~}WP$qN8KKNCE;OLJYW0oPSSR7MJUo22o+HRs!Ao-`vm%&t;1fWt8dL-ceP z;xt5V7j$()O;Ggd6lPq7jIWA10d&uxa}4$$VidnR%v+*Sg4#_lE#2%jwbEj65eK%h z5ROa;=Bc^{+pLYroF-^Dq@<+0xY5F<+Z=chs{ly-*~NZfyd;n2gMPG?h8~#+cbwlI zYVJm!Bu0cT1{=r1ed|t&-%G?$H6x*5x^H(%fBantM>N2u+mN%rjsu)s>3wXvdeavY z#6)u7zQnALZGmp^y7~h>acb+pjQb=;e=^jV(fYZw8@R^mvSlcfZefz!oNepXGRz}= zjxwpi(pS{r5JO_}774+17*uiSd}h_l>O(ER^d3Ff_Vh4UALDxryLLcnC|{){F*s_@ zH1IqX*k%%^B>tIS8MdHBYrtXxLyv4By+nk6DmOu%M+w@W-=&;z{2BpTsKB3}?^6B4 z)h4(lBKpmM5`yJ4F@ct^YLzboulxs_MxJD>m-wN@Fle*tmNGE){s2Y?G?w-)H+`a$ zektP|Zo`cx6HYloo)!%m+^$cP$b?i-%k3fs%AuEF1h?!U_c_0DGj@K@D_y^4~59&~5% z@HVX9-rwvZBZ&CtXA>Y~$!OF4SabT|-0^zI5$wrcu6#@cD|-a(`GoVq`B&jeu7Km{ z^F*Z(JY@ul^KbG zJE9T?WsvbSG9Af^K|S!~UL*g{#0jpCD$ai=(f=R*KbJJz=OV0zz^-uSS^dxK3t_r3 zy#I#tY~KZuQ93VM2~K4V+8}*xQwjBGkF1H)`zGN z5HJAMEC_s%^E8;c1Nc+MNykw8)-Mg0_=9a;$_M@NrlrQh#c=1yczHLpvDX1^mteL8 zV!?1x+CNz*f}EuSxA9*x5u?hF3ua15N74hH&T6!umE@kKv#aww>RW$754XD4O!Sal zC>LKPSYAMv6Yx~{R;&sM0?o*jP!M!75;?~Sk;le?^<=~?&!BJ=m(A zjg3!TB{Z&qlAHj;a z?#l@iDg@ufuUf$@^=t`W63BhrFtEdxt)%%sO9$B-V5=F(pMYdskL}UvZw2&u_14Ny zT=d`F3`C-~>WIErmIZDBE$XauV`US=Vvez?{z23G{=K`lYGaz%@^evPh)Zj4-V^Fq z_R|fQ0iOTOoXVdsArC!t@T$$_N+a)3ZBU)rmr9eXPT$>_bDp|ztcWN-ZnV(?@36~5 z5OzT51=Jm)wT+oq=WEYyaz@q8B-B0<8M38-dILz~oYwm=K+*U=5qI3*E0D~Am{pD* z1tKgiE(b36EoP7&$96XSP|ZR(wb+V+yC3^x4%TjA3!3h&xFCglBqKXudFmZ z!w``o*NJyv;h}z&V;X4E2?fU}&QzB?Q9hY6`nh}SYTapPe3w_|e;X3wdi#e2Qr7-P zu{liD&&xhLyGqs!L02}mWeOxjHd78?SCt>%+;+Jbj#+khhv87pfw&sP*uakt>;*tn zu0fLw*aZfUzif>bK;Z$nWpi@`C{C=mPWf{lcHad+NEblyBQ@C^IswYPOh}3fbt`^F zh%Fn-WGCm#l4UG9zRZ#`(a>=Zg~GklEf-%wS9^7l!LdTV2ZVD^P_*~>lvJ&U1mXffNKFS%h(rnS3dCL?rry}jlF zV_(SBwSHz@coG+EfN;l^wB;;1>BTrRGIKkM8tut*}bv0 z#sXIZnatm-141%nDiEL}GbHDb&K8dY1L))* zP;n)#@m+x_lZfwQ-YFVu8ihvSWEMUoAfj|g zbO>EzIzgBSTpeaU|Br0dLG3!!%mJ|BCSBd_udCGaetz2D+ zLEe+oieCz@6L{t+_H%#yk;xT`IeYO$=m*=;ar_Ayw9to%l$>`Dpgz4e>=q4TMZg`TZ{cL5ZNeXMs0H;k7jsH+AUmT`eu_fmU z5uQ8*1wc&E_M|!|A|5;@N&SaZ1QpVizNs%tZsdznizk0V9mV|ft~YhASK&82lIN{Z zX<;5h3}1)Q2G2^e<%^nn;vFiYaL(rjSk zIL>2=d{2y2DYM-S;uz>l485AmTMy&%qe~j4IEueJhI-Oxxoji|%+gnB`u(Et+Dw${ zVUfCoICNcFEe9YDgk86pup`c$uG}7h%s6lel$d!tem$C}>CXGMUKoG-unV#B`Z?!o zqZ`Fj9sP|JD#oNcSQ|mrloBg>0YO4V=};1w^Ez1ZmlTG$^G=iGWChfHX)+cehAMx5Q>6NOx|Ub8nybdB-{9ob!F(zuy>) zfdYH2z4n@G&Uwf6yPnP=PTnxD(itU>Aa zdz8mUxRhRAzF2qQMc8=tFMaBu3NP=J>Ac`efqST>rqzNNlcTdyOX1h)8n|w=&+B#BpvcKh~)$;u;s+z0j-qB_43cIx9%O-;tc@ju*qU zmhr{j>8U;w&7_j4_PCTp_Y9r0WOF)4Sy+35dde<})uBFlhc4*GWkFwB>-}?*$vus{ ze8)X!+vOYEVu@aV?WLPvT>5QG1@3rIx}a)LEh>S3LM#=p=tLYw(j;D}3HC=p57`t~ zPESR@>#BYQYc4yMS!Zb2R3zZ1l{!9uqn_U2bu4qo`%5Lw zyb7(J_la>~m8-6<23ijY^t~mq;iS;N&Pfb@jIiF;tU2Vz9;{2b_7L>N9Q&l3IWEvC zzl}h>aX)*re?0GgS;=LL?}KEbmlfmGZKVT|nw>N-(>@KJ8SOc3{WbCKJT#S@O)=Im z0P0bDV^K-W6LofSZw5%QmyTCadX1>FBX@uE-Pc$iJ?^Khn>nT;_yd-7%bH-9)R=g> zNDz0eBSUoe68LCCyfZ`TzIkt>tUO`^oNMo4L0owQM*8JS!m^X`w)r#St~uJm%7b8A zG}5%N&iXng>l24&hc4X33kHYD;`x0d@}66pk?k{;VZOeS^BidqN+!0kVeA%o&Ci9Cj&yI zs<~Mx{r4}CR5C7=w7o}1Z_R$Vp4d7&U+)`r(*U7iw}WJB7vtF`;|wiozeO{jy2CI+ zYY?XNe^N=KmeZ3i>(bzj7w77bVnzd9YOs>Vzg~ytS4jKJpF#hai;Ih*xhJ$$$q8m( zm8KKADRoLtDtI(mpT z_~yifs~Xi5c;BRrHC_>26C5)Xm;#Q1FbTvfrmQUW!Ttz_sD*_EM92^)ciUlto@sfO z0iGw?nQCz(t7~hH@9@nYK_9~-vBSRTv!Frr%a5w*PTtALpl@a|-JJqh^G;WgRqoF! zLB+fstJDhIl&1YZtch>m#q;z!Bq{F;VzK?&K0%$`KJH`GN+>>V8Y8~tDp&or?`3O_ zDAw^(e%+-AIdT}lU~H0jQq1w^m5qq#p*2>+(WDc#*fvl3l>TYQ(MA8-i%!U^5<*CZ z-?8a_pyt}$b$}5C#4D+kr=SD_$d%>&3kn0!4{cuhTq)_LW?4t7@=Rj`=U7mZz}FM} zXX%;v&rWU}T39TVzWCZ?$QSZjxMb<{MY6K8%{AJeWZHV%#ES&*iB#%TZ|Wb7t<>|F zyA*0hW_gDyqDdEwV@aa@wj}M5x@t0x%(hJGPkE?k&$q4NhWRY6QK~4bL^{HXG@`^3 zkzhRX{;|K#T^blIsdqmh?!>Uz+NTCR<{&IAEb8!nz`AQl@#iei`&qii{a9~9D$pL^ zis}%VxzT=kfHxvyRAkati3MiufCwysy1;ZZ%)K!wF0i7_f74~rVvbg|94~8qBauA> zUMp~C)}2Ku{C`6|m5JjbYJ42X#F62W@1W-qz!}2%R*)Nmj56%OOkS6lmlNcXWkLn! z-NCD*t@-VPcda?e$5Y(0O2BkQa4S9^zZr_JkPPx0iJ9@Rt(h&G&!em~Nk@ zs9~@8|B-hT?Aji@V70%m#`d#49GfS}?Z|9|ny`r8GnGc}c}gnl&!n+CqD-v>X%e5d zK{qYBS9tbGW$~`5hTMp!`)Q9@Fiao2ijkcidV8w-fhcEEbH1U3j0dx{ZHWHvO~WUm z@&oqV79e%B*Ihr~2`CKc341R+07V-h*UfMF*@dX-`DsUX#9JI@4VATj=HQ=LXCi&+ zLjBnrR?be3mbTq{y5_$#+z&gPS1sHz9!KSI4HXMd==$8aBXZ9WlppM?ToY*>$!PJ$ z)<-$zrkecU)x8cVWUt`6zqSdzg$OnC7@zNjjnKaXb}t~~1DgggYXBe$Bx%}9bih!F zCEV`t3&OemL-diz&6&b+jVI|kFhTl*CZuqeyR3|?HSx*N@T1r4sGllujqb`YB;twcp=NpbY5Pi962xd z^M0@5NF=X%G&cH`JgbCCErLb%{fFh{Rifb&qEhx4^HPzE{!QX7ZH{+`x8HiEO4!dc zzPWxR*8a7@ywvE@Q4K*`$BQPf?}t@Izb|{76H2>APPL}hCYQE)anOAAC>+t$A)n!L zGRe6pD?#PtffP}ll`+Sat@@H0pcUy24Ui(vL)m(;3hl3=+=$PX^iM9lI~)*JOp+ss zGrtuTA)k15eCDBTbMjz%vm#uOIddH=?tINJDm$6x;WqBj=ea&F3O~a39NNIU_IJVA zD*8-Aq6jr$KxM@dB-~<~UwVgPe6g%ZQ7fdR-LOqBG;&t=V_%U+U?9d9SI~L!N#fF# zAWO<*-Z;xEARN7Q<`ApmUK)@E>ICSDxG}s-Vduv^+tHSzn zZNO~7@UjCG05E~+!xTS%lm70op7L@ZyGLor_Y9Pm40iVwuYC<=94%u1+%X%fY5^%o z{$r6sSyCkyp3Cssado;5oDBu)QN z=yXSkY;!B>EQsfu9odAsusotz3(M9de&W*Wjw0K+&fsaSo{JUtxe3o{NSBW9p-nUuu3% z?d(Uls=`*ctGa3sffcRFD!klL7B*2CY>D&nH~eQ`QKwU{7W}^a%a+pUoCiF|)y|_G zr>K2sA&JyLaUTai4H`P!!V>d1;q;l3X`^pg}kRa)lviOeCz0=b= zS7uiF;`(}<5p%wysi}rH)=o|%-SAhuG^J42Z!I+Y(q|kQ`@E~HW43Xgjy{u7%8d$5 zsd_hiUIuZwcE1b!t3-yDElOkPNqwy#`TRWBWF4~6kT;w}p~@khNJdJE$w;@(Y?9Ve z65$Cm1dl@^;>{YItQ)}%@8+pcu#A=Vz}!|P8f_&UuW>nA_|YRP4rA^myW^99oiXQ{ znPa5xcwT(vqZ6*X)zwQbyKk*{g-Ub>mW=z(6)JUyTURG`WVZG_br+22FczjG9j|6! zg#}$Wy!{vKFrCKp-wr*BKY9lFZ`Di=?Ezk4n!quj6M{f3VPv6h677nLJRv*#ol-W} zhYk)3qC4uh5;KwL-6@hkDMWplo=URX^Qjf3p+7nKk;6cr>CzfIIapv*vpN4a)lN@8 z3KtaAI^zh5sx=8XFy^}MMio0bIk~hL!0#~Gc8jWDrH7R|j%!}tl8uTP10wTnu3S*6 zm}$`}l7CC>ZM+!#YMJ3``J{;TZ=>sbyzt&*(gnwIhs=X)Flq5GrPi!wHr4@l+w9R& z_l%wqPEJff)pDu2a)VpynM|6drPA=@5ByO7i0%5Sb9ZJ6%Xy^wlw^3s{R02w{##9o z4ObLekd;I3RWG&W9>d{V|jPk$KjE~cf+fvU9)ObBf7o}nsv?i zPh<);f2?i3Xh+wf`8V2?^qL=u7P-W2VgHz6Thhr?3z28}$L1LPRYmuV#C%LEzdB#O zBvw~Il=#Fg`olcQLk05Hb)^V~i@{2jEdv+w-!TqY-t&mq#YRS4tqEyX52KvFyJf8I zF`$ptFC7qQY0qwfGhy{b70-a1ad@N^rIdf9(|%0oTWi|D7V)W=^fA#(psATwbB%7@ zi5iHr>cyf<#2qvj;~zHd=OwXm%?^68*(D&bu$lz13p~c{i2mqHH#Rws4|nTLkr_jK9IE=Zjo_hbkU*9@8SvGTq8oTjop7>*!#OjGd8 z1e1XzdK4+Rr%8lBZVQyRzS7$Dl}n4~;#{(o9)2z7`0=GSx743E(X%^a(oIUt1J`cB z%#7235%n3Enzn8`htO%1a{{;w-1OiJ>J}jX4i|l6Ydf`-%}z(hu4t>)fBT!bu!4)b{z<%i8NI~log^2YsY{_Z+|;?5(XG1N zL$%jq4&RSe+Xs)0rY_+p>8WP#zNOBhY5gOn!z)B!6VD!_m7Bdb;yoeFgE-=Jy1BS! z{!3R_QXvk9^~w3eT%&$otDM<;h|{*`vl3pf`kK7RL_HIaDl?|%-A@PhW9vt8vEChx z_k4FnTfMMaWmRU6Q532ahz|R{tlsE;5$W>nC@}SV^$4EhK)jsNvGj|Undv;Y$$b5f zdERS$J$h!9dcug1cIt6MhbT7E8*6DVUYH^r)xRR(z5>C>h+gkOUJLNZoE(`6KX-+I&I>3Wwv!k5DAUO6AC1p=y58GDcPT9?;_=mI2m#(yYfUB_B2 zlN(q1g3YBc#bI+GlvjUx)}nM)(kf+N`sukE!7Ds0L+E)!I*0`<=eZE49}pu@r(7T0 zr`&#^>@M^(o{0%PLPf~AC}BloJ2B}MtYCBcFx-jYV(Bt=RHKlu91n$s&3GNxP9ABs zIQh%@;`D@h%-gOc(yIQ&OFu3^*<<=1_s8{O`vLOk+YvXY^}HCgT-F@VJ32WD;}6eB zb+ZQg5kD8ZY1>eyQ*q(yZj)~E0W^ZT`}|#x=6F0IM7pqlI8skWdH3C=*jQsFUwaL_ zy+~|xegWC91I*#bHLz(V#0j<(*<_Ap^HKVC6-o%xFY(vzZ` z$;Rr>e+G6P4Ws1Kb)QWJR-a3M*KM~)9o^j3T|0BU>9i<-Ja}OJW;fgJAR<5R)D@>8 z_(YQ&asbCp$BT)g$fI+FadgYlXsRiBf8e`PgH zQnN_^n|yCzvA%FLqmgh9q<@8lg=N!J{x+wnpT32T8^{MkljqJ6&zrByR%acq!IToD z^2@eXDj8<0B=0j`J>P!A_cBOkT%_c}jQ(Wse(TSM?Vy%6{|7R8{8+?4kAHqfPW({Na>zVb z@9SHx)#;QYx78eI8GRy|1{U_!lHd&W=$-lTRLXxOdUdIsDoRBvoo@&^9M4N zAcKgul;FI(mh~lNrE%#_kxlStdC_FOGUL)!>w4$tA7RyL*Y^%k$FcasBPe9(92>Ps zk(f2m_On~b4~K$-&%LxL^}Dw@o$uPUu2g7?NQ;U!FV)SHvPM~0)Gn*t^fRYRoi5Hn zuP1QL5+4PG3b9rNMNPcAaJPQ1)Ts8|zuD>5(F<*Xjx~YM)JqACiN~kUAJntv6N)-L zUaWih+-1Af`Q0Baje&DnVlLD}N+_QVv^U*&g!@SOQ{?Gwy5rT?9=24=%O0bAr}xFS zb$`@TH?1|g&A(^LB)Iq6E}CPjsLl{Zm`3yy(K3zAYy-`Z(8Y`&{o(H@>WD zeYc385sNC5ik<_$d> zdoJ94^HunHvEHE8b|ODthC`}4bZv)okBi%+!;tAT2!>et&5UthSJHu;8BB=`w1(S? zQ&+9TZ5V>U^Jgbzr zR$ux?OnyL0G||^s3o67qz7OtlH}c5^k`~SnnY*NHJSWlLUomZE@Cu$S_{q|wCuaSR zdD8FSzg2{CPCn_$B8+d%7LjwkrlibO8!WwG#~0Qf8@-1$wVmj@hZJ&jKQsPVH@z>| zA$geZ-*z%ib+PV(c%tQx72%*qlDZM{&4nR@kD8RbO`M2wuFe1Ks&gTD>vt|ll}3Te z@$|A#7Asyf_1i8B20H5iWW5o~z;Hy47`+|KqZi~SZhQ7LvKBq(>^t7v3C;P%n_ngU zp%Zu1OM4}MLJ2S5A!E&@_{tBL)9w5lu_yBd>=)d(SgUbeg)`&s90djmKM~3<;dRQb z@-)7J$nAXe$Osrw$0 z-p*Ik-|_1;)ZX6%Wm(*Fn8b^=ymr=Jxais2{Ji}nk=N?bL4UT0=Cz+;=(}g?qXpYK zT3I)=&TR^u4z%Fw&7hqs3}B0;uOw#OcnqO3j~#+fshBU*GCGdH8306-kAV zG5UGbEM=jool7B^tlabZq^xR_7OhBYjp*u?^}zJ4;}Ee@`=wK4@qO;y=Tj!Z#prU^K~)w0$C zImBm&hwC%Iq2u9b&mGlr33lE4^QC#;Bjl;=y51iKx>( zf3-+E{2e3K*tlxtQ4OL4DyJK{H2Dcp-;D;kyB&HY+g-c-$>YM8AVc>4lSKV22g=LL zXG7_1u^u??Ki1arcwBZugI5@AsyE$@j2>FmPM5Ex%SbKn3Q7%fUnMEYh{aw{s$+{r zb*qFM1XL@w@~*69d5|Tw=${-CmEZO<-qpC5cuvcAOeC+Iy(3y(JU(hN%XMgLa$K(xxm>Cc~t09lEvd9~$Q^ zRf#_Me&a|MXVpC8G8Yf=l{n6K6$1hh9g|EOhBC?&u>r+<5+(|)x|*~*u~gVe_?(eL zj+z`Dbeds_A>khekztR6%-(}@Oo}FZH$o(nv7(%>kX@YT&dEsE&Xf3%^DgUA13_^l z)#b9E1BuhBWg}zEYCl4WJZ=Bc*+MSJ>%4(qxZam)$#LZ+BGDo#gTcG$@U8F{?wq&P zQ|dzu$}_ib|C~DQHx_X~ADra1MSXOU84Ix@ac5pxjK{Qc6u#WTm?O~?wtcisQ zX*T5iPv)qV-2}z*#C1id@cPz?Rl~>tktQJIhjz@`&c{1BK41g_2l#k&_)_8B6YH)` z-j)5(6mM}{asDP1&%>+7Ob??STjha6 z#7wvAVh-d6pTq+PhbXvc(uKn-;rdklhpJz*8;O8Y=&h_&B5XNn3Cc<8T~o zVL?peypZe*>3O>Y=SC22nMS=bQC~pQKg%9!G}Bq@|Bl=tcWbz@if~v6Qr5^;AM`=~ zP)alrx~xSl)x9P~!RP#V?}|X!r`jUdPH@I z-3z=qRZTNYxFh}OMqUNT8K)lo)Ek5f>e0~=q#qk^Wij)_&7>x|AaPkn6;kyzx-N6~ z(F~gu`$35w+B31l|KcKu)e3KFRSWh0qQ$3IzI?taekgQDWXa%t2v+aCH1^moOoaxb zQ^%T~0=25B_byvb;H6+l)or=-oj_P6^*hq08da~uP*d*rj=D7#>GXNY@%rp#qMlgQ zA>G@i!j^=cY#9rnMm8t>7Cj`FhNC-DC}xT85-R&MFSU}Jw)E2Yf#({ZHGMbn5w zflE8up}oQHL?IJHe>6cK@)^hJNwAtv8T(bc-RFw8G8e*(p~CMQyjbbBF=(e>02OqM zs5DKb{mok4(OOfy)1)8N_Upxz$Ra+WFH@KI3M)o_dgf7;^4gV^5DVFkm9W@QB$&nN zFU|CUop5^DLG+ol0G(rh{OJNgRxLoQv4YL)c^7C+d z!m4=n0m~8W(48^K#_9((E@HQfwgSk-oCqw5yuUZpdPOD7Nao#&QWsk|rE5>6scv_R zv9Mt6*TQRwGqn0!aEEQ_d!A|{EGWr?MiHc~k*Z(J2ABC_6+jQsGXq;yP>?M}Yv-fX zMs_Fd4Mw_-_nB$rxw-uN`FpF~)ZvEQ@)rYPUwX%9Y|eO3~Qs z41sqK4u_2U%gk^fRl~nIiC#L*S6$UZvA7&P9<#1LotY#x`b>RtbGRj|K%R#2Gdnzk zP`V3Mgn&H@pCMX-JlEyT%3A4o%rNOrJg4bZssTf&Sb%zszB>!kRkE_W8dySR0RjiO zak>ZP7Ga#V$0F9G zq}N;blQ$(~S8md2jEy+ZL#0(Kg$;}h)v||X$KCT?rnrgp&>3!t9Wzy%0tO-n#6QkP zJLb`qh{#;c6_V4tX5!AHB_y|8&!)&u&nSdvY_u9k_)E&~hVkkrZ9CDH>G~v@~1 zj4#4#4=c1B!yg>k8F4>3@>g(Sr%*4D7{2i&#s+O8*p+ww2W6zfj7nl|?8>Il91^Ju zpAP=<&z;)~5Ks$f3=hO9w>bAeM}q_n5TUP`n<>rBzag&8NAp6C>1M7~$DmLi;p~ z+@Fz#u_fZpvyIsL10hHu4Vsr8SR3~0E*sDw#%c0Dj|!3p;tcaA*7c%S8s<4J*J#RE z;r@I?=R#Yj71CZ}D&yo7wZ+dgQy4%KRi$kWs4e+{6|J$7kmw=n)_#8p7uk+I?t>bl zW9D!+@e%qJt#pS4Y=dc6P4wO#-Mre?1XRu9Nqfm2bA4=nq4>#;o#J(W00^w(XCy%k z3r%qgxNps>^P863g1XtFJ*1au7m(E7If>UlKXT%=`Q`TN!%ibvAerQd10BQMW~=+L z%Vac9vDBxI9omXm6Blw#1=V8JFu76P+-KeXt-cxFU4(~>@$9i>$ek|YSiA_ic?vo4 ze1Z4(v!x$s$po5m#~V3x6dh}4uqm444hzbJeT`7LAhj2}m$h)`$k?}ONe3;Ofq20( z=?jiVkM^N`EGC`ALBrE=Yy;Fs16-J%9Z=dN$3wG0;0}Xz4V?yH;t6)vsy08!w|(6u zxn;D@@Wh!y2PYjB9eZ&>*brSN6&9&I%^2|=qA3Ep9EyDKDL#R>9>Ko6U zjt*Bn%f+dRmk^j|M1PBk@nG7L2OmKj_)^V`m%)Z|?uD*bgb6iY-4z$&*mSw^p^~x_ zM|9=8I;0pr2Wo+Ir?;&;Aeq#nc+~y|r!}uaY#Yqh!Z6!msfnHd*5$5l)nKUkL|3WB z$f0B8J=eu2`{2+KAd~W2XQZem-zdgpo!CO4^ZYcSA&fn;2OC%kr#qt=O6|Io%~af}O4q6)0o0z+G*p z#d5@<#%84oHlA5SOD{~G`Ac8@7JAcjEn3;heL3%gLb_xN*x9a!4i~JgtV|srY(rC3 z&@a|m*k54vJ~i716E#UF@Yd=v{t_fmXN0y@{eY3$H3xcn;~cBWs*aqnh?}5jjR&E$ z4u0i!KR*`6=m1m@Yg8*=Oy;?Xbk}(bekb^{egfBx3CD4(*OhxWtoAui|0tcFTV785 z(lKw}W}^N%u6w?}pt91>333qoo{amR(RxmOdoEW%l?nc@O#`U>iRGYMU0O><-KVT*gS%`6DA)}8w>BfrjcQ%SiYUC3vy<7YexUH zT6Eiid|jT!bjwp=fOzgyf%zi)a}=_9<&f0!yCDz~SoW=&y!DStS?Bcyhq8;9w6r3n z$0hGys9ASSjO|*<${V1*`6RD;jV0#iiY<;0xF`m zId}f~;_k2nWtPyr)jS{l_a(oP?4qQ`MFVJACQ~%1+(OUGf zM&;=Y<)#v}8X1mRQe^(QbH7GY&GDUkVsR?ADP&Ug@^09_~0f?CGJ>UQy8 z(L2MiYuD2tB`+Ws+(xKe|AOnvjZ2YhQ(kDw>BEjAW+jk>FT_7tF<P$Aa1 zpKB#S)CbKNovF(i98XAoWvlZUu%7Eku^SbU;UqSy@~B?1(7jdSBt2EN5&>)hkh+3( zMDnQRcL54$b%AwDQLnl)FX*{4=tD_X&NT%Ezn8M9GEMqkD}3d(hos5R8#~BAL#h*1 zGj{(zX>Qfy-inRt`XeXj$!#}+&HaE2*V`$0|47Ybl;Lf1jSL@Js^0&J_o;dBK7GmA z4{sDr)EMpb6A(6xp1YQ|#8+&j5d@Fm+$%xYMNPP$opis3o74T8Ol0RGK+B%8MI4_# zpl>UCA&KG;tJ-EGBs{;?8CAEq7MZq3$%McIgjDmrQyRUq!{Y5qfpxqerl}VL4Hv?V zyS}8yn2jOTah-vT(cW9qy@kb-`KW;-S|bJ~xxahv70uW&^HSiF0JS6T(~C^CpSS&M z+3nZWc+fcX0HLz48Zg|AGn|dQkMRDc=3%Ru=xRs`M|;evU_72NHk723j%4*TG~vlX z7*j75+@~SIP#9Exsa*O+e?Y6oHhyoyzcLNkO}xA~06P^dr8h)@LWJyVX$oM&L1z7h zR9@q}E`i?0d$D-ejlNp3E7wIY2WD;h=PiemOs70Gk7nn998N2zINrEmw3H9mpdpF3 zBxYmQ(=M9Rv5;CNI4L@u%yd(L1}`WGYkbb9fw@3d7h9bAq>gpdL|o&8mzUsGs+1l_ZQ>d{w^8L*@=bzC*k&=zXR;t;)W96#mJ5F9n9agW?X_H?#scG8-}! zOc-&d%0x=`oVw#WCIGg~LT zfveB)e)HFUq18P zwUu+w`Q1|OA=}lfp-w4gbPM5W4MnMv8y}@_D3EJvrvMDe)6CKOxpJmjOQLSXCTaW- zd9&MOyk(LCN#scMLf@nRu`APjnoRsxhSte(xDRk(q6m|N7wW|wie;Eox1h4 zM1EH7dbZe~+L7q6i}<|lmqXgW@wqZt=1E zVwcL4s<9=ju{l`k0%|z2TkGmX{Cgf{#8B_R-3n02iw8Y;g@zn~S`2feR0=R=38y=VrQo$X*0$p@(%c`|ls#+J*&59m80R8~T zg0tmIg*=OizTv4x6RWnh^`|Va-eh1}jN?&YHmL9~B-5>bp38P*rL{W$-4Oq`(yfQ| z8jsIvA>P`a0LMEl0c|8Z6OuIBSgROS9vpJh6R)|Ajp^w@A^(@2`Jpb4ZZ<+JAMA;D z+vPIl^EuWEI3LEfBG_@1a%u5x4@(aDqm1yeu{m34G|)mrpn-L&_I(i(FA*I?eQRw* zN&_o1CTm%UUZbdA_VDP}^WfHKe0dx%W9$*#5h~r8zFYoFp$!HxR+SoTSJxjiN2?=| z>SeKqEUf`61^9u`^?z@*5}T9lv4)59J8{gSs2kxIf@Ku*6A>%|OfeoIB^)n9EG5x{ z!ajNpd?Q(p-jXtegYG)!nzQUWPDSa}`o5k;C^`_3w@v;90Vd4IFA?=Gm$>G7h@-Lq4Y1hH>Q--4|@!0$j7tvU!; z_$&U+g?Y<&Vjb zk>sSU7nkOIWb;x3!h~IJX03|br|;1WaX~mXG0<mG|M0#wjtbnov z@>5Kp1{=H;SN-tzJ(LJfP7c*$iiQWfBqe-nf*~UgGHmS=(d8}Pw$4B7r{tv7BbX6# z6lqrc5Bc zSsx&>A6#}Y)!_e^lMv`|(oLvdyzQ#_&7(8=&9e5$`0X&rV?aC~hdJpxJ%zZSk`Yb- zW)W+CE<*xv4rqlQyV;RxLJxCWl7ypa#CY!-Mb}I<<~-&* zBvD?kh-d-n0oEi??PdneV@Oi=>2yGw#6UL1{>b9SYZ+oM-0d{S(bU%=S3EbfBLAo9 zuFUpud3xr{G_IHaERz@8=(IkQI8o}*R75$J{#;r|u&}>+H$9hsc8ESA`*Y{&)qrGO zRvv>snx6Ub>`nHLuT63-Ca@WR-AGi&Z@Awe4&o$k0y&LzoR9+%5KI~0lsUk@9;C}W z-p-$%V{<`^uxV=HaZ$cmChcC0rJk$19 zCUv^xF*(m?GGdW4v;F8q=PH(kYj+Q$z7p)U-d6CWuw!NDj)c4}ZtY<#uZ65G$kCjS zH(TeocDo)z0P%xdDM>HiNhig|JkYXVPLUbz7^vst$9Lzgnvk-RoxKeyc>{(b*P+>3 zr}7mZ2*qO$N-53ik%Q(B@weoi#JE15Fr;Tb)=E90uy+;DX|8RE$a(OW$PoOez}m_R z9PXf96D?JN#06b~QI*H5$%*{Tsvz3dRz*g43JKp= zTYrkvu>a`fNA=Xr3AHX9ihg=2ypa*CA0_6dS0`r2-fVb}vHo;t^I_gqhtmA>*GQ+P z_ECJ#w41Q@g3ls)7{uJH(fg$q4em#~XZQJi9rOC{Xe0Ohwf^QDg2Jl4dNZf; zcY@o^J3UY%k^-P@gn{4rx^>reTIWe9^x2*sAJokjdjG4AC)NEcKXP`)^b3MiW}_6C zwkYSBz>lpn@DzVod-dz>jmY%TN$)z^3qLpQ82gjs7@W?ygL}Hf1z${4N(G+ew<@wNz#m_g^tYoe0 zGo*j2^2dYWGqSx$-c467yi}DZ5VCbJd(1t?Q~GpdnTKJdi@rYNSVrKK&TPc)I%!gR zU4GOL{rCJMs0V`uir;H?fU$(M4=2BL(m?R}L$2G?$9V&yeIS(&s+BiVqcCj38&EUa zl{aZ4zBAydbmcE}3^8~A-P675*mrIp-({=g8!29VQEyrrAK+v`QiO$NyYN^_LM>K$ z%%)LSrKz~!i;Ff{(H0O4u&Bn}$Q(4&28fphZfqGoJt;QrA$@T7UO$@KKS*j-I7x0D9c?*l(lA!2YZaPxz4nI zLr5AuAZ_6J-_wQ-^ltu{ntR}DB`a+|bKDVO2WjLp{8fEhGb-{MZy?^ls&Mwb8)Tx<%!P3fXrfw-&23J;?k z|GZ+Cd6;ezI_3z>*OB_u%G0vABcgEX-@Yx#$AR=ugxQ}6=2Tac>&M2?0X_@@rd$n+ zmmj1lp8HBBXVR8JKn<<_Fn>c<3<9eOhY?+J-40G-MAef9-zGL`KCf=IU(92qnF5)H zBZ6=2)6b^&bsl#NalUgb;GBMgG;2f{fAOxn`B;3U^({4!^EB>H#NWQp$@$PUg8idb zkdjAP3rQ1IT@UB=3kD1{QEv?)f5@@83M9j}UbpZ||KP76nu3JDp1mv-0AZEB?DwPL z*y&!)782}c7~XA2n36;a)9@0C;KujRyW`WZ?r75g^pk&>_Ghj)`X}4%9CiEjB=eV) zd^9(WT5DUvavs1WKVKzUYIbwvL8v#UO(0y#_a1qiqL&n0qFls$dT8Q2a&A+Kh%h__Q^X6*+yYg_Rq;*CzH3zHNAtF-TBC$p=8#tt$?WlsoC?UN1K^+teW-%ZKLFLgBYmgHL4 zGBg>q_#+nK;ykv1KOzjr3U4p*Wnw9=Z@Usu;^T0ICJ-OY&oIHQ^W-`6Qb%=talw3{ znvtX}QHe;p9tlz#B8YAkG8s)sC;RaYWUvXDtMZ7_ogQFkMgz#TBaG&aYgtJ$2P<~Q^m9Fa zm5tC4(VUW|G5(WlL5{onnG~HaID}OADeH*l(4|aVL$PbvH{&(5-FE2P(ArxPvf|$~ z#@&UZA#>%%?|&{N!bwvkCGrjWv0HgqNV@?IH9+Tr`g?h~yX(TRcz}5}x(yrH7gX`H zym3=ZxLgPvjWI*KDwX#f%g%;sBahiNWHkIznCi8~+XgGpG%Sd#?eo5=HL6F<4VoI& zCSSt$@|M||WmsOkjF|e1y8167_hFBCE2o;NolQCop8uUt@$a4ww2Zgjs599B{r5sZ zC|1gQ?!&27^m)QtYt$MU=d)H~723XZTKe!^A>tT{yf2>EHcP2LrdKZ~>p@*{73Vtk zBNI*EJi}Rr2|8%;p{C~;Ea+{R z2Oz_QvSO4|LQL{{Ql2ECx^5uczOW21Kb|rhnJcIu!O?mwHS>_?JiPyyVZo-Q)N{qk z4ACBbD(^AUBxqRQNA4v%liJt4D;^v63GtW_?9EgQ8Zjfktb>qmDsd{x`ody+xWf;e zr=m9VK+lK*Lh8_nyvr+#1$Bk(BG208474Jh*r;uYnWrj@xZ(_NW`8us28k5^;j{B| zod8f?6FRr)9JlXyb7b6o}?CO-(7tlU-N7A9I2TL zJ!So~-5Gh^vzgQ5#nY4A<<^LTl&49`U)H|=`7xc{1a?V~WWi^!xgSfeI}W{XZE42X zEGfbWu1-~yhlMsR+5^d1A^L$m;EmaX@Ta8N8T3x7xv%o&xGCqX>QkOhZEPqVWyn3J zFimOGiOy(g`d#*pV2w{6@UOX-ACSS51fj^lB_PcLAOzzH1njmOQ5}NxnBe558V|`L zuQFbP?%z#u9Y=@CrF}~Z0fCo{21GZbc`gj?a|(Q8n6ALu8quLo04ZTU-01)Q#@Ve}?KX!L~eM zH$v0auQOhHfmXbFI>D^$kr>^d5WIq0fn>lp4iPN4W%Vpu4&|ykN$t%1`o$$0Co*Zw z3*IM_E<>#bQ+dO1)L(yUXMOQL!F2Z7`41&}eZ3-*F=nMY+ z&Z7C9#l>zz^qQ;)9KhN?x^d~zuVO$qfSoRFvU1y-wT+F79!peP<>MHft!nO7y8^5) zQ|x!5Y5n`l*Y382DrOHFG)-Oeg^L~ANG83*ghu$VtBgkzE3@ylf8-)IkL~o9Hk&9? z6AXN@>1@GGm_^Qg{ldMfD@5M#`Nf^_$11>r06K6mqVU8NMF2;;o9|BVV<=#DA;CqB z28(J+a1++@cN<=eKLDRS8m;dF`&|zV-wm?%igIob7@iep7is<|8uOQF^GjD_`wdXG z_>NLa<0j8bD(zHBf}v2y{0-HGYjwx7_j-1!{EJZOnJ)rxcNMG>HGjDEAik#iHwQM_ z9k1H~fnObOq}}h)KLrAM4XsoT|ALv#ig_co{|l6A*=40_Ij;$f0|Q`NhqEC|*gfyr z;~Jzrb`cXll_MQ#6V8t3dsanEa&54j_lgq(;qRs)(5fXEFjIf$!+#EE3Mvoumv-K8 z+R)}LA5L*tRp=f4xD4>7ajSBS27XN^Pt4}XDyD()xUu{wF{ftqz&#Xk`_hrfJy+cA za?}ldAau%6TRa^&w+brqLxxPbg1-q}7@725NziNX56%k4C;{U;+f;sxFb!A?zyLWx zqfp^*dxK?}`_aE(tK>^ryC6*;n!+G@gz_|%M@xrKVXUvRQmY^p(0?-sZ%dE*L`EhDu(6G`X$sxvyT(g z?adFJAOcrkngwCEA#*DyU5Kf^;P$x83#0tv8SCV1p7}5FR z?~Z;;=OtW=NFS{=7)2miSfQlfNWf?>G~D2j$zXqF`4*NetvG}D6)fC6L=d|q%A>0A z!E#|MRVniY(@+{G8xy6r8m-S|*i-GSV)zF8le-@}!@x>|lX!v@rb`~fZ%u5?Bul%8 z;((=Y%%Sjeikf7I`quePrtfZdOVo?uUv~v|E<}NVL7Lvoh zn#kxv#(8l9A-Tv)ML2PSLemN!IlOZPyQ9rti&j6JBQCWnn{`zlQ4fg^@i3yoA2AD$ z=ISrI4>j_CJuB4MhJJt61M;L+9LJHs0mwehefS8Ih#QDsAK@0MJXn3AkHd0nM?zMa zDwF8GKX<5lQ_(kzB5vFG`_WgK{@V3n{G~BMVz!94K^ZEybt-HPSNhksna!ogm(`=6 zKh%H<;!YafU`T{_=$oRYogw}K&-PE8yia^WxFBM{Q@c6^<+2yAUk_+~B)Mhks25AC z)NJF1`%$cCUE?A*rL}wa>n~vVK+#d;(^K$@Qwrx(-tx)r>g12G5D&0+b6Z?L?Orzt zx%!u8+bp?KX++iFPKte&IDde=EIH?8X)n`8#I1rz;3;5k;Pmpy;RZ6xqu`)pYkaNi zJ`}n{%)bRTN-R8*k1&7U)aZ%gxQ57k*`zWlIK_(Hyzq>@lQ+|%h=vNE!KKgt*cwmk zdP{;K39;Dri)*p?0D>T&dMgHW)^pK@7W>3r)cDK=ni`25R`TI^H`?WTA$ymhx5o|a zGL4TzafX37`<1j2;W1rV+?xO@((nR;nagF(Lu<1ppchL!@1agP5{@68wf(&$2UAV# zBxNkcMEqBR_1YM$kp_5N#xr|@0)Kr~wBM{gR;EpUKM~L%QkkaQ4>iUONqjwDMTa`W zzU8LC1!){o|GS~;bM94+Bt0(ePySvr{1F~iAv2u4tzY?W)QL6D_3b9k4Q~K|a=4Xy zmH-z$eII}t--LhyalsN5ycQpi%j8giX^N;9&V9f$k%LIE(Hv=k?JvNkIY zV;u5}`G8S{g!WjRYp^3?`YG-fmu5Q|e(-s~5i2se#c-iJ;>*nnYSL3u=z{Se76X@Ua? zq4-Q*hG1L*0yp<_l84--B<1W$nrhh8m~t8BwY2bBn2Z1CP8bqcrt4#++vJn#+Or-8 zhO3*fxzgf?$Y<4~(Lg0m^V*Armn~voI=IQ83v`gaH1r`w=l-ftif z^%%FV?phD#qzD#0yahs4Ly$l2Vjxt|fN;5jbQ@Z^uj-#HJ+lM2xgj9^f3J)A0azZg zrumz|ilyM6u*C(ZiFEIB7n=9q$gwKk?y>=prZ|Z87AEHil-Lh8>q@i?bnk!hGrI0P z#c;IlIX7OwF={gVhl<5``kQf@#KyVlJ1TKcSm0ct%})&bzV!2s1A(cj+TC*94w)%>YJAd z>ti3b$-~M14n+*V7{FMOerb;XWuV3Bz+kXY1~?^dc^EL5ana>8f7!4H)Fz{A(q-|T zQE!%jBhY@&&JKn2WMYutvlR}qx6?vFYW;KXj;tXtgrjGKr1nEl& z>a;w*lX7f5JlUojNTD#`AzKK%>?cuouZPM)abB?XAM$e?rpYi(#Vi#=4!r|ge^_dS z5@OSlnB&~r{(l9+UUWTLhx41F_>Nr7{Wt!GeN>DV7}Yxw;?}(ft3CSANv19x^3^{H`UBwrtshWd?<>6Mq`*7 z>zeGtn>6jL{{VWMp#+R63Ty2YICf3{e?;2;hdldqt$Nh*s~Q{Z4xunaeC1L05RLQk z)Re)Lg=r(WR>X9%K&&L3keH4kk~SJ79O`{gJY3Wk?MSuKmIB_XAW zJu$0h>@|$P1SM)vBZ2J!D+GENApQeXFo38?9-Km0;yPuKk@lC))M{pdo{uj1dxjSb zhY971f2plK)iz{i`Tv#rjzJ%01|Gp0CL(J6UH!kwi?lRq6+WMPiL`Yq1 z*PIF(IH@cU#nPWsN0t1}2E^+0xFW@c)&GEEO)(P8t%Yjo8*diZ77t8{7tfpgrM5;w z1hThUfSI6JtN|wc*cK{xfMO=`+7YoD|F%B#Lgim3EKpbfGGSc`tQa#X)A3&AH0 zOdJgR0*fsSqEu)B9@&gRa0~A27XX?UYW}c!-G(V0V-W}U0&t_Of6v1CS-?_Et29>^{4gzcy;1Ebvf|Bz@_K+;7BQbSX1%*VwgkSwWvOU_dq8x{8;&jMT>o40q)-(kaxMxX)#G) zegjL)2><_#3LL>K-hUa3T0m|5|L4EK^2$Loa@L9Gyp}-maGkMMuLE*DSQ;*?lTHXY zyC`5!LMiZHPAyo4%d?!EYW_K=nyF?G1A516h&AP9e=raD`$0ql3G1iC1Hnu1vw1T& z{;5=>7#0Az_CTZrFxo5P!eM~pO#aJD06Bg4kOT5D-jj?0C>LRQ06_-qGod}bqv#^g zh7>d6m%V|#`ATqJXy$(~_tsHSwr{&XB`6XmNTVPa2na}r7$8Up(v5UCLxUoq(jp+; zAky6oh|(!B)G(yPzzjLWFwDNj=Xrnc{=UDx_TPK0S)xl|?z!WN^E{5vk*?a!F9!hW zpd|?ox3B`te1K5i%<}{bgde}&R4jRev|!MSPKR9Y@4%-#sy1D~CtjYx3}AbEm5treG*Nu-gz z3Qhy0gjGGjs8HdKGXqqoN*?e(kld{6;m?=%j??WTeWY)8+{kw#0+5(NJl00NbY;E5;R!wLtUq7cB#(77n2*XUqd|So13- z;ZmN)0AXe&sp=3-Yo(L;!CpArTIkc0ETYHH%>gm?1sk|rg9tz}V~i9ZzX``D-igH4 zEI3ap$gg$P0~YQ*_z9hmvfG&_(&?H%1R6>};Wh&lZVS7b&tc2E7~N6TQMkL^7fdo) zq(U`snt}J0{RfJ0Er65h4M^89tr8vpG{E2@si;2=;a$DzlZ07?+vLM(c{iwtsI zK$b4xY9$qbk@J6Zx?+Ah76AMW_q1G*=LGJ{jqI2A^FMjlR;>paDkib*j3-WC&+OO` zRNoOvQd+#L>iuaCm`DD>5`pIrynqQ8`Qk#HtinHu+^?Uz0@?)OISp$67ln(M1`MGW z1*25kF-Z@VM#1?6cw0A#OHbbYtkz3>U{4^{nhSg+7)Ti-D{I@X{hI=C$%*qE54e=r z@?KVD)Z6f;OJTX6FIV1sg;>sgvK7a^z*<#*vG-D?ZNztvo*01RFz6M!4T!-Y5XJ@E zy8tN0!5R&qSirsjp42~WSN|CjwOHv4_1?_hZ3j#|K)Z_T8P@$b5+L=wXouqehNfkh z04WGE?P%N_dVwNfp5oN8chV1($bRi*;Qb`=$3urrcg?PjJ&AgKd5{PO&`KuT8c?Rk|6ZN)S zGc&H+{@sRLpllT<$bbG%I-{I|r{UH)oGj4k`W9aElLj6;O zCn5sdDPUg*b@Mk>mjPp>G$TP3x61$PDc6fwn+1v z17RD*X|1$eo}hR;RVI)XxXHkJ6wv6*@-BihHYj?65>eIakVQnZY8B68@z!Z@i2sW=W@XAR$J|0pQZhBALmbql zZQI;{V1}DS@r4Y)IZM{H(>RFkqcU{2gTlx z&wktuDY0P$9i6|>)0~l5#o>YfS`&wrBEepcAanVfJi&OR=MvLWzthPCmY7l;a_{Q_ z@R^98{_oopQe2+-$Hf9A%4U;hd-ZVWRj5LqI;e;X)-C*d2uiQx9%GeHEkVq&4o%TB z@|A&E(0Td!rXuS919fWRTkA12-5~4#xNzS9zyzp8iSAiE zKBEI+eJ?KKKrZ3JcJH+If2t?q6rj+e_>M}V4kCA!?v)_tNvvpQYM&a5k|D)+%>yUN zQf8R*jY+sBK7VxM=$_-&^Z(%Orjo^1Fl!|}hfhwfbq9jx8XoZx0I>>4 z*&ymC%FPdE2sy?XKDeD<$ozCvV-Pgou-J{s>15YSd5qq9*@JNuL@%DZ)m7Oh_lni< zcsM*3`^c$9D8>T!?%Am~(N<&_&_R6q zwKz$=-3$4zxMGGGUD5WwP*J0iZ?601!lPSCBpb)hH||^;LnMr!RZx@a7;CGfIC;D4UGsvr1&UZ;1~)dYZT zYFG5tCe+}j3kS|tr_C+lUvhKw5lK=6 zZ2gX7gEHs^CY>pam!(%8WnTXD`~a}wT0CU`Q>Gkzms}nt(8;U8#*YPvuSM56RLm?~ zGbbt0LXMdT&!k_v7&bnsdrDm~`g!4Q*X-E~t{fw~BOoViHEqw-iC zm%VslHt#$P4fPWW+z&sZd=cfoS?E)&X#(jFW@1 z;mdajz|3}5tZdwVXLju-1rVkij2|U~%KIm)8dU_J5>NBBfO~ zE6M6^bEtDQEV@`+d>$SD>31j=_p`H)iaXQ27Ahk;W9LvZim?)Csny*W_|UPz>Pdy< z{vmqc6#5XusC73iO)<}M^xe66qgAo~yQyRhUwheQ$k1?@)e3z9WjNXv<{K1q0 zE>}O;28}Za&_6{-C8SHk16o8I;N2!&M}5$zr%-?9oxp9x<-olM{CH@F>@?4w4OLmT1% z(v)?%#v^?#d&5ztlPKO8l|Yg<i$(wM`ux$MB-g=@7axLVf3!x{flL_K;wvudaT0KaLYF^3Xi*Wj=_*Z%Cm$&~qIkOnGCTUMY`6nV5YEHefwk3da;cJ9RObu{KzhDyP>)xe597BhoinhoglE?<-Ob{A@5 z&-V?oo7t+@$k0OBen6Ng~?XiqUqwD44k}@&1Wy z%OT)nl)V{_*11!CxF4JP=r`Mx5F~1Sp)w?8Kha(br<9yd(TXqWUNuJD<-RL9mko(VrR>>o=#`le0_U~c}f;4BfoJWhQ+SBz({4hP(>+vbHz9uSq^t(8qH9l8e4X>EI zmB~BLo62n`2gksLB#;-^PAXdEUlizByOc6;6vhVRM&eeCjiOZpcJl%P&n@53jpV4a zn6gyuFJMxzgV0jX-d$SQo_D2#|1$jZ_FBr#qK}hq$C3B1=S?Ze+1$@?D)9Er>-2=> z-Q2UX2TLOi1_MxaU^hXexvMu?oo4{sn436f&F7P$WnBpyR;Syp;8`heD6%XrsiA++ zKry$-PU9w>w-IV!=1_uTbctvwedy@U9;XINSbX@TVK%^VGEGqq&23>EYx6K-UE-%p z4do~$M}`avg21w3h8&4PNNj6Vs6}1gTa!27m!!I7_Eq1`($>^uBZu)F^jU#_GEDGs z_>S&@8<@C0>a zmJ)3xvn)pR`lwwP>qZ#$_nZ!-<}o8K6Ky%r{W5y_He2nI)i_ILzxni@MB9AN9o;fT zy1v(4{<0u?0kjgpW&uc{f(TLIz{d~ZVL+1=5SY%|c#h|KUH&ir1kn?%!f$hRO*3;} zZ6Mkq5sinv11r>xk| z0Eo|a!~<67@pRXdC{u`c{Ud~uB-bs!CqD8?SGz#K_N2 zX_wCD%d@edPnMQxLE!Q}C~YnZeuJd(U^amRr~i8TocKg`{Fsm;&U(^kZ}8E zflQXQKWp78VRoJidC;jsZC#|KeZ}EJEEM-4tpPbRsQ=AFQ4H`$X>I08)B08jbkG9& za`tiq-Whq;K|0rN>8`n*i(}0IlLN*) zZSPii`|;TVjw_9|B(oh=iraee^DHd`H&wwaGeLy}{THIgd*@|AV~!xoOSO2ccn0BM zN>O#Y%zaMLk|FFSQtX_r&`O9>Y*PMVe`4-xZ~t1g+Pc@QguHTo4s62b^~XFEMyUg7 zPPd7!8@<+Nae&t=VG(mLXz>~>^&Bb=Z_TCgfn2NCd%ll9U|tSby}o6@l-V*A`hGgD zr`Aa7R?n}nxk%XQTI^n6O>H@)^60BAK~4K)E+Bba+z|z>7!X-8cVFK`4g?m0GWwfD z;zEskgrcDso=kP0?@|0G2z&i2>lDpV4Y*ml;BxTq!GtJ3qk{$WD+s{nntpW75*IRN zyFq>**$IQK?it;G4E=m-%H9|4@_4;vhUd@T#sn`c#zD_qbSd8Gt}c1USN8-(n8(+g zv%$)Twd@xMfY&$rqta`e9;Ecd!20OMO9d`piU=d)W~HG9`W28%d$>6lUVv>`X=V6g zuzn6~MC9{+pEYut7G*q}m0;}s938I;A3yN)OwM=|3SgC^&4R)qO9NI+hjZa&bFO_l zP7gg5`H6s_e`qy%AV1JJfda>@1rbKRa&Hl&=zMU#&z4@5A@th)&+R@HlfovBtD3O* zZBDB!-&{^_YE;@%_%Dp5e-)tSZf&1Lth=jXL5$bu9!~IbtY07pCH;;!$$d}2CMn>< zthqv!O?Jyt15@3Cn-kZ)lz9(C^Mi{a_*E{Cx)%j4k(ybVtRr_?UGcc14*U_D1kLK6 zw@yL`0*}k^bmU(w1}e2Re{y!vM*wXGkR=AB7Y4jfVF#_NO%JJZV$F2;4&6*^w2h~DaSr)gi{sATfr1xN0n%k8 zES08yB@=d3%aS6MQ-`8nWJ|u_Tl=zdOCw=oUE{XUs~;oqQ(b90QiMp?LpTJId&UYz zp~G3XXu>l1Nciejd=$TR#)B#ReMT1bYR2N|UXIR(gjTeOe)Vw^E(E3G1=z zC+^=2>1svB*d-eaZ|*5RSfBgZ@9hHvkYdlNczPFicXN8mkU=|D5QF7h>gMch0(u_c z#a2J9&6~L8B{{b<`;D1}h?vo{RD+w8S5C`Z#pOZ%MJlei=8 z;~F0R@hFFSS5wi*=R--vTh! z1*7Y8J8~tK5VR>~gx0TZkQhTMbLf^+mP4nrg_Jzxc3 zY5=2VIGr#crMckz6MX!{z5^WfE{#`cY|jyNRvvTRhzv&}Q42>oIp(4_Q7CcT*wlyN+O#uT)X@0s`xm5X811?nvhglm zvK^fdIUX)csb=G(Mb|!t4aMVdxI%76%XT&BJIaOaedAEk!jLBgd*W1(Ai03A43(F{ zYOn*SmO~@#LKs{6Iz`fW7#lbHADcGp=7#`h6WVlz-j(Ti@hFxWFUeB!N{;@=g@><5 z-vL^YK9h_2D14`pVu*r*f@Rff;Mo>nn}gP4>A0;w1=c9|P)$0zU(s8v_jiK3xC0+t?g!fYQt+-7;O_+n2ccJZ5Wk7pszXSh&{mQ0WUDH^3qrV$YbPPX239sRe3AMRq?{BK zrQI4<^HvZ@T~{sPdG=%m>|VwhRKLL5pMg4rW8l7KS!D^6W4R1SWWvC$hQzx-q-D+y ztrT_&vk*)>U0Xs@4Tr^H-z822TXtBj2Pu7D2qw))8(-RF=@Z&|BWx$*3ilwj8gbBH z|CM%qcu4n4MX*nbKX<0+MngyH8_2|4GCa1W^S<-lBnJ>RG>BURAb19+hB6N@q~VXE z@%6^g-_QEL%kWmd$eIl+$imh!;rCegBREpK)k`LHrM8Yv)nYH?(YE4owwn<94hfPa zf$dQtkErUL`!iK$a%K=nG1Fx6=HW9Mu;elAvflvRu1$T9d0Do(v;m2GEGnq4GKv&k zf<#yMrj^Sk9+^VFX9zS}_ss&e%(da+ldr60ernwJNaL*UmKre0g0d zaM!%8TBvf>xt-@XqI89wu4zT+RFq!Ve&WT_hbQd{!Pxy^TA!%v<|Zh)gs<)hH}m58 zgA3Qsx*x+17J3U{! zkAr;uwK-~7-?};5zxO6$=N-K$BdbvU=baBqFM4ohH))U{@xUZQ%q_p;Xbw!mm?S}~ zO^}3V@)_aF<>l|C%mlsKz5H!2qx4z}u_i`BOuTZ-efkV0gBy+d+VY#RWlgx%arJdX z?s+iqTd_YM4pw(>irv3owhAZro)%ghL_dV>v_uFLjY;kKfLR!%MS*c$V(`OEY&=@g zk#!d|xG^(`Gm!ZVMzygFvsfy|?TE%dOL1(+-NThjxB$u||9Av`4aZi!wNx#890do{ zv*Wc3;TgB%9}VY_UvOx` zrG&q>Ozf-mmu!-*q#iV%*8joGH|s&66%`c~nor#%IQz_QPCupwt%+h^&GZc=d;Cip zGBgQto~9R^z2UEH54weSvkhid@i z8UTN8rqQtHyd7-_4l1Q+jsdB z&UCojib8r6Ec6}CrYUeGxq?(^FevYN=#>2%gpuyF3v_^ioBlds1O3toY{bxM!Ogb6;2dqCQC7qWdF+*@KGx;wt zmh~-qYB0cLxH}HMp@I{W9QJ2Y(KMEcQD8{SzC{n>IlwCTW__>x_|}mKT05 z?PbJHgVYRSr9*uP{dcem3S6Dg-{N*^ZE&0T9gM2325*ktS(S3CUg2y=#UYH(T(Pus z2c@kAFJ#cH%kBjSw7uCe=Sf)uz2D@(R%y*O~xrWoFzR=ledoEt53R_^+m$KH{xzM9R86+amCd;cm7*MLw-wF zgO~zlCg*+MtP6!y=mWluE@eMMY}q7s1oqWUPi@=>S#P;f6 z4{w1P$VK?qV+A1)mMCF2*ZeH5$K2;0yP}5ESJQpQ;%M7f1*Q|fOx}ZR6Of{8oEqbu z9|wRApn*j$Z2PCt%-)Iv?P~0Sn(Ta5FgCdK+)e9$~PSl-FM3>yOBi+lAJYrUmz*M--`21 z;CAiI<|4JoB-*QkX|qJ5Hvq(Tl`fU`O8@p+nK!YnND4?YE&8EQfe08jy!tdDDY7F2 zH{mpeUs>UUIEq3U!>6J%#Fo}-X9AjzgCQ+_XFpzN*d{iSd@?%6Kym%H8^_x`wXO0^ z$9cI_^}^VjFUx*9C0PW{fUt9LrSfTzERb2id5YK7Q($ZLIrxsNt!o(w0FoDEsvFoO zNw6$$j2B_RMGW;MD;pG08ODGMa5h|(vGv{?j4wbO(1oL zvXaWvX1UmtTnIf~!Nl74KvIkR4mNeMJyz1AttYY3`^}E5Z_%17oRjFK+o+2LGY`KI zor=0sT>8}>chKFDDp&XeC5K`Y&=>z+HSHg%MiK-Mx!;odJ0RqtRr`~P@^pey8=S$J z%aIL)Gdg$J3L_|*#naKSZpQ-9Zb5s9uP!WP`Tyxpipo|&2ja0?KH=*`zs|9MgeRSoi*^i@c{#>v*Dn4Yiyo;8DW zPX1ZG1NqmwT%B%m=?8igX!Pucpr-nOPbWEls;vG%3wwVkpcd{mnsOpyo4~{{$U&j0 z7^m7UXBv`igtiZWN+{IST@nHaAFCi6br3<6 zYS)JtuyiZ-Oy;^29qm*4ky{4y@O{9tJb5};ykyzv4egCsyU&)z7T*C5Q4`$_gmXP! z43t8EP;TaT`kPP+^#&~(Oc>OjTn5=-mxUWgZ8cnfFwDhwn`ol zyPi9`9_0)6xTHYH8S16oHR8bnDj4170w9zRP-=kSjgXQ)IsUO@!MO_`0=6C=%xxDd zbu)Fyq7Xx-*K+u2LPu;aS;~se!p@F*1Z-w1gY4-h;SMv#hT4Hmfz#Xp2iiL=eTfy= zUwn&ub#sI$SJwtAWg%TquptB-z6Wj3gK!FPfkb%`KoUM{H$l-)E{B*1$d87F9KKae4-i13VuaA-Ron^i!kn~r z#i>evB&gYdCImzZe~^=B>jnW~&FJwma-);qVu5gT24FF&cU_?bGP|9I)*+q)Y9e51 zAp;Ewl{9hS16q_sn~F#bdl)k0ym84MYJaG(4SpFg!EDSTtkS_KVQwJB$J6)Y4JXj>0Y6?6pfZV(O$AXA0w4t2iZQ1TVusvnq{^pODV18w1%(}D7m70dIkOHnMj~xgZOqVLA1YP@a=~33Gv^LB6l$#`G166l+Pe zn7@5{9C8!m`!zrRmnt@G;QPaqV&w?a8|6HG$J#IttIE4z*Y9!9=?>l7H%|4p3$1{&9fWxzQjyqx zbwm*3wn3{O15qlms;Hz_nsEY)hwxio*;V~eWpYg3lEneN z2FT;2?cfJGYTs13Q6W=ZI-rLJRshGf8a-<8Fd_mr9~v~Q&`IJf_()OEld)*zaq{dr7 zLIqFexn}*7G;|WJX1Q3<&WDu>@BfMo*n*WG-iN-UZ{3L;7Ag@rZ++uC$L+YS`AA7x z=VmlVTvU6PUdKkd=C}vTKT1Y3u`(bS1ZM}}dk5VoI4G=mH{pY-ne29tI4Yi#6QYzgc}XnsxC^80$->P~>1W1kgL26}rix`0cQyYk76 zF}kZu-Ur;So@vZy zEs%uB6}JwpeZXkg|L*Y>>jc@Q(LsP`^*-Ik9WDi{O1>?4k(^X|I6VULyEb@-)u?$? z)AmD>^9h-%_4qSvtYRL)Ed$U~|7h~E0SYX&0NFUo0J?s_qXRmp;!)hdnLVw2CxXry zq%rg1W7$l}KKH+WzOH{`8Az90c`8LcRt0r?~+m!k&s($1n0UZTbJR-(n?pJp#vQ)nkw zFi)U1jKS>$bpF>U7XX`pgI=Q1Yv&e$H=)6e3^3%OBcztCJqzl*o6Q+f`Tm6>FulK| z%W`VxKbcu$^`}i!S*3LOS_L~C zKyEMiUiuHTma%6V*M?$djj17p1nHQoeJ|{EK>W{}imz3wSBVNHe*>OEbQr78 z`IM9tz^4cZ1dm)Nd#LGS(y<@*Pe{5mD+FK9^?Wzg#U;k{DvhB~C=;t1bv4q=1CQ${ zwlLkH$<8HPf8-TMmZzr$W?SD&-7MqD(&6y4zC{=eMoa`Ms#{YU7siHlrFN)1bdU!G zHx|LC_NB?OMh}Q%!8%|tT?x?2fRpXO2aX;Rx{{#rDCU6uJy}F)ONj)C#_eZizb{`g zDHE^s{Tq$DR+X;Bo|~Aang@er(G87TT`v;q=le?)b35|oBCtankTW`&WZ#3$aVCe4L5W&U9++Lb*lW1M* ze|GRRbsR-J!cO&68M3km0F6%oL3J|k>1e9Ot@}ZyUbJ<$CGxEPrw+>y=A!2*>8UzSeCznIlx+I8v2fNc<#(ZnEW3CE+@8R_hB2j;#(x$`EG|$TMUH?zut@+q;%p z@_Fio-v&P1zfPmrt!TT zGCLSre9tT|?(!9W^Q3!enw6jGFMhg^VBuk#W~bFdB2a9sDf6bpNTpuma^ajst1niTn zA#6s^>b9rA`+u16>;Ppy-u&OtTTgRiLAm9gd&4cwPd|P1mRr@OP9ggmpr1uEaOWG) zX+I^A6)5blE=8sZr&g7iKVLsDikShFEHl8bt27({Y{k@7b4$(I#tW43iWb|QyTB@K z2m?i`N0B0=S9FxBv|H2L8Gs=1J2r%QJ1*!_q~}1n>%_<6^F}jm5Yb{Iv5xokH*7+$ zuNf49>v8IM_-w6F1punZ8cQo#;8aS{`_r`VV}j;2O)ELl`jzuY%&U4`^8P41j)_Q0 z*X5>J?4g{G;-F-al?TkKn}BayN~r=;X|6qgLG*B7j>nh|$zJpc_N;K#^ZbId?{da~ zE73C&`DkjZJdH{cclr;T7s>^hLa7#hiUMwu``r2On)x#^ZHqM_&Z-qOPqcypmcG6{ zINxh=03a+RL8jln^rRmY6-xn7HLCt)*Voj+dkk-5>uRQep540?AbdcO4ARRH*dCTe z5+9XU=oF)Oz>YMo#LdStLn$tvqsJhru9d-yI{?rv=lDbgg;IhrX-e(4y11`Mpf42r ze$0qrsJH`22|o4O%SriDG@={g9x9;%W2RCb8yfQMx3ebgE9U*yU>kD-!w*13`9pfWyCdREk8m}B?GY<1$;@hs zyT`F_E_d`$I`+srx->@(5c2e08fsM)t zz;f9OtChjhbm2gcu5m9!?=U~k>~}?L^zp8_3XdWJezpprQBN#?W;=L69@%F`cl2H} z5x9L8srtp()&n-)ZGPj!O~GHZk&r$g6CClA6aHOBEkl?Ky5&&(F4>R4K^0Z;c6P88 z0-}G3+D_mKA6>60{DM#MB#knB|yo^L+9iS;(?A~($qqZIO%eD?ZWYC%>JQm zJV^7n5D=+47BpuvA}Ihl9rikmNujx)^d7LX!K4S4&V-HWn~L)t{HgLFZkNE#0&B!r zOZ}%=mjGRS4-c;8Uo0uuy$Y1SuGTAQ?MnCCRq#9RGsf6I9rEGU*-?KPfvD7W6|75rT2S7RQ6%KcKVSdrn=$Ym5pI?!N81dE4a=zgZ?xHU4_p<3 z6my-6o2CNMA@t}%Kt%h4BDd}mq>pcjFl1BIrJI0ykOIu?zl0-DV1WzX@sxprkn&xo zI=u$~t}*Mqng%xK^)8+$ls#0%`9)G? zT>AS=uLIUA1cKeXucX5H2D+N(WKv<~EFyL8)t)zCpqdg6)}L1SLc)i6EGU`1T{Q$a z4`8Q~&l$Oq%s6W;R1Vl6;I_e{p-}FFOt$}~zNUv{fCtndypLN>Cg56Q`Y2I<&U})` z=?71##B-O(Vu-^!V$(r6^BgwQxLr3<2>=wqC zPM^!WV(p>V)T7$XZq9ESH|!NWGT!sN{)QDC*+_mbU7bg*-$^R&?TfS04E4M^Z+avzcSRHTT?= z1F?PaJT)S$wL~er%+zJ70%Yd^jQZtDA^_0tcy;h)8jofis}ko=dKg}ZXyZHmk%1X3 zWeinJuQCfv0b* z-qhW)>ack4Vwf)A(NW24LTV_-Y(2|5dRrEIn02Z<$4~4J>MV4(NMaLyRa{^Q&$>%k z*!;s^{fR1-{1cK}=wNTZ&ny^qxB;eH09Xor9UuXA5rkZgqo+PJf2hADDTq9;wgRVg zC6oDuLTt&Cf!ut+^DpWu`?Z6Fjd=1`y&8N&XDckYDGv2H{l)@?_DAVi(>veG6uB-M zHe%@}*tLa9cY*)HLtC0IL@qb)iJmceCQ2z&h+UnD(<;v~zj>~y{6&wD7imh!#NB=} z#^u}3Owzb=v#5PP_&yFxCA-p)Cu{!a$_4k`pvR0& zrL5mHViq1@RUAj756;%G#0xI4>JyuRGPZGOdg2CMP2~s!iTbYp z0(-6;>X>-Z;^VUK22H!2-KqLx>%~DYr)rk2^(JHX2Dz`F*PtT8xfy5si0X0FB=TLAtHhYDfHZ!%L6yk4AOQK(l!;}Ej7NACm#Ood48`|-V#9?UIe-mb2{ zk4+9x*1~03Bi#5Sb#8!!169 z>N0V(mhn-qTK;-_Sj*}3Y|;t8ly2s`LHDQeNSBvdk}YdRpRwYia14p5#cY{s!5}Bm zn=6)hTnAggHztwJ)9lqnsw-EtI(@AgXKG8DAZSk~v!{VkV*MKBC*f6gHPhYtFc8I~ zc`v>&r$_-T*Ku}FPcKhAqNXoC`>=rA{q!=h#1fr6EWyZnfu$zJQ4PLWayV(|A#YG+ zZ{R-`vmYOxp{v=!@iP=9nR-oS(Nv&o9VeJm#6JXLBco4tqVc@zmPE1JiG`T7A|b|2 zsi1}djdDeJHb}PY^?(m<+41y!vPW+5i$>+lwCpW2QLmpRYYQFFy*^x)`lEVyP_Rc6 zkbmlt+CmNsR)oLvD!*f-jtL)EKz$GNDaRWzZ8%=jj29t6s>WdsRC+pvIg7;0egaEakWheUmKjU}Mmkk_TlmpPO%u8<&Z%?R@C!j1-psGWBa+^3>+% znar=!#<~F;!&4Yyd!x27MUC1~G(05t4*$QxS5%LVF{7e3$FzQK*VnJyCE3c0L$Cnh5oi zKAGP=m+`u$wD1GCbzgD{&N&@~q|H z=g7G@kp+M4pzkxao1d)+pXr%oWTl2*=g76$^YCVRQ&Q*~&Vo;nIOL6*3in4AC)E=_D-W|2|fP7_6a#IP2als!LJLpazxZqUmSE80YM*V-;=8Od1zVdZs)=sC&eC_N@ zNy7dQnSJ_f2=7^6aj*LxgoV|wUt0qosvH^42MvM`uQU>w&den)`DtPtN$9D^=gskCv1nBo!R z#u7;5uWMn*xR`O*5lBUVy}W*zP_aA z?$fhX1QnhuLN-u;e8Oc}@d8Fv=@ zrirq6*?d&fG@m~4fgqA%4@du)vocKBDnO41jMq`{%ed+#FF|up$SS_`vEosc`H3T6 zkCaYD<}e{qs9_BL+mcfr$Ki6;qHQW2DF5c^pj(*mby6w;k1&(c-y9vx@+U`2fvo;9 z3}pO4Q2)+hMy(S^9+QppAZi4N2~-=?+?bM|{ITo#`tDrfj1m(sF~d01Ru=WX4}Coe zh{01}3p_2&4P=q-R*(`X9f?8B#(F}g0*MyBivIw-->@GOj&+)4usBETvl6X7yTdez z&Ciq^)XLsaw=npj$@@8CF5dpOXG~1L?aFYgYr){@kJy8Fqi5_o5W+Wf+Mc|A2htxj zc@qi0A#MG0@Wp1t%SMaGqM>qWD1?>6`G{eOwx2ZZ{3C#biddqptdbCLbWr}T)w1_x z@Qn0Y@%gq%Y`JG?ZxtO`sNQ;p;5zQs{C7#J;f<*q4x76)>>aIGxZM)pPv<$3r~8rR zt~bevZ|H*`*w{}WL&Vj+4%ESwY4)KxP$Qj>g5qxcT^fSPTZ=H+eqFqfc5{8HD z%X+qj5(7mUs$^bb^dIvMvwIJR-A%eo z#rdyXe%|SXKy`XAe=(V`HZy(X^Azq_7sk3b;CeCDvg$6( z1BmJPcaH`Kqjry*K}&tiu@1oG!9<*|m?!XBUqX8sJRZtyIYl32$H4okEIOo&X#Ttx z74dTOQpC}(*e$J>J}dFGw_C*hVn#Hd@kB+G6??r*oD3u~O%ngn*xXzUq8fD*#*gn^ zqkI~DY+MCeXyVe+tlq^__TP=l0A%Ln=P!LLAi->Zd!ZuO>#NDCr*| zkN1xJo z8!8kD%_EwWT0ifA&t~R%p4DK3`2C$Id*7>V>95LfT~@Q2MQ5kY^?Eo(yIm*ye3bt( zn9KjpX<>Jc-^qHx$y!eI34IJ2g^4Z~u)DG=fB_kBNYH~+Sgz?x`r@Q;vc!h}=F?JY zSyc$cGAQBzViS-L2Lnv1E8biD*zMLNvbJ+Dj|0Mw0fIwCtD_h0u&qaOxC0F>u((HQ zx{rtq7107TmqvP6LmoBn(dzsj1|djaT#EdzSJLZYsPKDwdb+zTlgpo-tEE9z2B)E# zE;+KkzP>H1A5ogUw7JPs@y=t!@8#Tuq4jl}Rmwa3gW&5eZVB~ze=o$JH*F!gloR|| zbnNQO+JOft!|Twc!MbZIczMAC^0CC<2pEQgOucQlvG~j7Gm6ICXD+S<%9}Ti0TMox;TRvw~}T;x!((A zFqP}jB*Srw@viB7z3=lq-{qa>nP>hp^Iv=a_gZVOz4qQ~{Wgul^V{0tt@C!vt-q*N zSFO0h6sxmR_+R%F3@md#N8OsebUQu+Foi6Ap7rIsAI+~fwqz&6YWvupOUKn=&RsLe zsTv{9cU+B~1+3#Yb#-<1`cjL~YKd*}bYy!VvwwAUmB@P3^QFWA&HenmRWOor$af{P zHd&KvEN|w4xeL{1@p)SP)jeBIOmf=r+Vvd{m))mty2m=zzwgU{Gk0hAz+5TW0F zWj=edu|-5oJd%!VVjhsSvbrhd)39Ihm+3&!4q5j>#q*MwM)2VoTU6g!96G(-p^XN% z0nEEnLO(;|@a&_2pP#zm=5|IFMj!QY?Oj`11MIHq++xD$U?a3Jy4vNW2S%Q;9E`!lT!rUD0Ht>vw@ga zw1I(Lv4b@FoJvMTWo1T=a|mj6(`&7mpEgTJ+elwckAn0$eYPYb5BBB@!s|Cn{(8Dj zCGr^p5Ah?zH%4eh-TlQ0jX||>e}$GELA8$=3?+#*IypJ@ZkE1QXD2F0E8E=O?_XK# zxT!c(KN=zAI}z8ntJPa8X!+A@Iy5gkMVPep#aYkrEsJ<_QG}IxQ&8>pnds=in#*?W zuBF~)Wy-qO#HxS&z3|CHDGi0##h(!JmHqwwl&?#U^_RMj4evK7mnr)ohPa(@M-bIA z!02oj*nPj}$!>KT_OrzG?%U3#gZb`)2n2g9_if0I&6}YeP8+RfYB%;Wg|6Na46qrB zl|URTr`3z=-1fv@A4j5WseQd?Hok1JII}}VXS;)?Soj(OQEpdSFJ7EkeIP4NBEiww z`88v0rE8&2C?hXR<0|_F0wJHhxM+}4fbU--m@8=54uXNTIujx}Jfq&7V%lvrw+SQq`Q#F{+nto>gXvQ=5f4 zPu`F$bmhar{-fAoyrx94@T{6Y9>#KSfjs{G_mYjs)j^4-mF=-3;1)B~4~fMXv|G?q z^$L+5!|&dmJeYfH)F29wbjE5*{41S$JAN=bO!ufcB(*eKJ?I+|Kf__3D{E~QKNWXS z=70jrD$8E7sKfj8Us0}*iJ3-$E)4c4(Zw}UpjrReE`w1Un{#zF&s2w>t6~Ec*E27Q ztX{aCOjJlY%lUX0aDL4 z(nk$e0m-o#reI0d`WPHUo@u7z>W2=lPASAJe@Lte9=`^Vb)OzHtmymMbE8c#ko5jF zGoW)TLv6yGOXH5Uq_?lcEY{is`oeupc7WSgr(V2= z28cLeXv%I(k+#E5+W=aqb~gIq-k(}0=N07KTwVL7r~P}6yFswERn690G>)~SA}ej7KyF=` z{XjGM?n_m6u6|5Jm{%Fcx;iqI_&U}Tj_#}FH@6L&dq!oTR6|qKW;!<$R+^P^+JAHe zjX`URq^IJ)iyEQ;_+!T_ZWT5lCdP#QK;RPmNltF?8k6R0QGx0tysY)liw}f?C!EnW z30vYzOG`~9vp>=<6B`I#d}TvPtym0Fs@yYb<5@h1*SGv~^fb0`g+h|ZW?9@gVx$?{VA zx~!l|WKaIa0oH?p4cihWv``Tw%QDvoViD z){3h~rlWb^N`H{MHl{Rbx?Cq}<`+JMwIt-XFR3*(Xy2Z_hgD!r2&Dy`o=5sHcOX}1 z$CzZ_o>(_BQKx=S9PBci<;gb%Ep!^qKC)AOcfnd#Ofg!j*;5S76LcvL;bvM< zUNOC^vs2OfsY}VcPaADDXS7Qxmp~j0X`q#t7n~}5^VD&nA}l^g=H1U2x{sl3!pRkp z!T(JHbmNr=?!x?hEbP)S7&B@g_{ulCCY2HjhH)p1dCPO7SG$B8=H|*ENfdf9YxMA- zNn4QDk((=I1*K6ghjHsDQ?kit=bTX5oS$K{Kb_ssacCpkg}Fm?b=GSTkhuD9R4}o9 z{<_08p|DnU7=mcBo0=kFXW`{2^semXp?grYh=>RpizJ#RRYhlxHfJhxk)gH+#*KWL z1-!t0q$Dq*lL+k({OX1B?${<~*vsoYBYKrme4Oqk@K0Sdz%fKZ#-Xb^8%dVqKfP=& zp}3+qXyosj`ur<(u9HxTyxN744}kpoZfpBDZG4jgOJ5{+w)GAzw-EZHtcsmQS|P)YLUKsiz8ku~_Vfu&&_mQhiAwLdt}Ftlo~?Z$0Z| zHFECW-#rWDN)INHNI3)rT9E@ar8YKA(U7cAXygh|Yt&(!DoC8;ug6}lm`qqd=Q7a8 z_= zALKms!-n@_Es3H9gpStx{!`D`j|SN?Ddp$MRYxUasGJSHon!c+TUOL1OMXG z)xXWijo-wJ_}?$ue{&@e2#T1XD*p%h4CS)|{EI^Kx@&fQGoh7C4kb&#JmI@VL)~cs z1wQ%+WITD`)y1pL2FEPu9@<>t^gDO)+Z_0$hg43MHa5%s37B3mHO#~^vpqo(-oKZp zsVeXSs+rh#RqD(t&pUcxRa0{EFOsY=#)U*1uQlyF(ZrT1hKKg*Y~a@!iu8p$kUo;} z+kUvejb{IN;2+B3plcvL7#8iRec;~R2VCLRfHNu*NLkrdT2W^rcWTONg?KP+X{M$G z^4G4t%7+Y?F;h21&BA1*RQ%OsH@$@qD5-V*V-_3P*yPg2qH~XD#>ULSrT)`i<LTJ?L%0d#dd*w8u+N!Exhav|u?+;r)+c_TL>;$XG%z#tlQDP7+o{hNc?8 zr}5qeG(@0r?BUb2J+b~*594bYV)sjpI{xSXtHb}L{{L3Yzq$3au*2H`8D`?dZIn?7b1iGe0&LrBj2y&4+j(cyfG2-r}5r|aF1Y&JXEhGRP(9= z2(`WwdSOC5gZ(ZL{O~x${~!oCWoagFedLI|T`=C;FA%fyCxHYY*8Wb6^}vOCdw3E; zgE7JXnc9V9k_*(T|DwiwVFLd%nU-=~9+2(jlU?xgMqBxv!i1RNLvdbyI3F{71VRgC zfQryJ)K*2QqTGff`1VHp`^^rR;1GV(?946HwKRT}m$5`g!2byAqqgQHX6|wS1ZQ(R A)Bpeg diff --git a/docs/graphs/l3_perf_has_jc4ic3jr2_nt24.pdf b/docs/graphs/l3_perf_has_jc4ic3jr2_nt24.pdf index ebaba084130a5c610f2e18d8627d003403e50b07..d55f37bdc78f03cd1dab2339158b9377f7b9ede4 100644 GIT binary patch delta 33457 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 literal 99251 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.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 MF_)^UtG^o;0Ao+<5dZ)H delta 34412 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 NO$@nIRbBnvxByARYjFSo diff --git a/docs/graphs/l3_perf_skx_jc2ic13_nt26.png b/docs/graphs/l3_perf_skx_jc2ic13_nt26.png index ad1a6de958103e8548303646dd597555964b3f64..cf970de3683941bcdaf7f96893082ec0aebbe5b2 100644 GIT binary patch literal 105991 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 diff --git a/docs/graphs/l3_perf_skx_jc4ic13_nt52.png b/docs/graphs/l3_perf_skx_jc4ic13_nt52.png index 69f0985706b12b36e42bf7a84dc892c05da36c54..561357a718d5c769cc9d4a9b97e1dcff1890085e 100644 GIT binary patch literal 103651 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%0D9%k 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 AaR2}S diff --git a/docs/graphs/l3_perf_skx_nt1.pdf b/docs/graphs/l3_perf_skx_nt1.pdf index 52e301647773daffe7536db178ccf939a506a965..e0e4c74b6bc3be20748d3cb33fe8801fd1866eb3 100644 GIT binary patch delta 35983 zcmZ5{V{~6{&~0qnNz(?6ZJP}nJ53t?V&lYVY}>YN+qN6q$?gBW@BMPW%ⅆteJJr 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 TAtgQe@&K-Ytg0&B#TNK4Uk{gO delta 35965 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 N(&UquH?}y>_c!(jy?Fot diff --git a/docs/graphs/l3_perf_skx_nt1.png b/docs/graphs/l3_perf_skx_nt1.png index ffe58309ca40051731aa69cc2840327b348fd83f..02ad841c06f7e5163ee41d740d8e962cdca3915d 100644 GIT binary patch literal 89678 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

    ICyZDSg!5^l6y!bLCyu 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%0A6^JH3>bu4QaEzv;2oLkw=cDO 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 Nyo|DR(LEFY{{w;1>DT}O literal 84908 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 diff --git a/docs/graphs/l3_perf_tx2_jc4ic7_nt28.png b/docs/graphs/l3_perf_tx2_jc4ic7_nt28.png index b2085567e9ea125aad64b5df88404948852c91c9..1b8f23192241bd153c3ad2f2768503d66354ef6e 100644 GIT binary patch delta 80 zcmbR9n03x$)(s~)Ib_6Ctn^g2t!=)@x&0z1qf?rQMTnufm9d$XsiCfcsg;4j>fgmX Wr>hq*%3{deT6UUsdqe@F3nKtX#2JtP delta 80 zcmbR9n03x$)(s~)Iiy87bh*RtsWe~Y+FNcHvKTU}{p7c9k0@YtVFUpCH5Xn0 diff --git a/docs/graphs/l3_perf_tx2_jc8ic7_nt56.png b/docs/graphs/l3_perf_tx2_jc8ic7_nt56.png index 4c1a774c88f404a287d2d23c23b0c9f23002f85c..87b039886eaadfcfe7dbfcb742fa2fd52beb686a 100644 GIT binary patch delta 103 zcmcb;nCfgmX u85kH;OI#yLQW8s2t#b2IGSeyC;IvW t1_lPz64!{5l*E!$tK9sQ%(O}dBLhQAT?1oXBXkY1Z22+U+r=1N7y*Py9hLw9 diff --git a/test/3/matlab/plot_l3_perf.m b/test/3/matlab/plot_l3_perf.m index bdc372814..c2ecf4d27 100644 --- a/test/3/matlab/plot_l3_perf.m +++ b/test/3/matlab/plot_l3_perf.m @@ -144,8 +144,8 @@ if rows == 4 && cols == 5 'Location', legend_loc ); end set( leg,'Box','off','Color','none','Units','inches','FontSize',fontsize-3 ); - %set( leg,'Position',[11.20 12.81 0.7 0.3 ] ); % (0,2br) - set( leg,'Position',[ 4.20 12.81 0.7 0.3 ] ); % (0,0br) + set( leg,'Position',[11.20 12.81 0.7 0.3 ] ); % (0,2br) + %set( leg,'Position',[ 4.20 12.81 0.7 0.3 ] ); % (0,0br) elseif nth > 1 && theid == 4 if with_eigen == 1 leg = legend( [ blis_ln open_ln eige_ln vend_ln ], ... @@ -158,6 +158,7 @@ if rows == 4 && cols == 5 end set( leg,'Box','off','Color','none','Units','inches','FontSize',fontsize-3 ); %set( leg,'Position',[7.70 12.81 0.7 0.3 ] ); % (0,1br) + %set( leg,'Position',[11.20 12.81 0.7 0.3 ] ); % (0,2br) set( leg,'Position',[10.47 14.17 0.7 0.3 ] ); % (0,2tl) end end diff --git a/test/3/matlab/runme.m b/test/3/matlab/runme.m index 973e3c4bc..2e4685735 100644 --- a/test/3/matlab/runme.m +++ b/test/3/matlab/runme.m @@ -9,9 +9,9 @@ plot_panel_4x5(2.20,8,56,'2s','../results/tx2/20190205/jc8ic7','tx2_jc8ic7','ARM %plot_panel_4x5(2.00,32,26,'1s','../results/skx/20190306/jc2ic13','skx_jc2ic13','MKL'); close; clear all; %plot_panel_4x5(2.00,32,52,'2s','../results/skx/20190306/jc4ic13','skx_jc4ic13','MKL'); close; clear all; % with eigen: -plot_panel_4x5(2.00,32,1, 'st','../results/skx/merged20190306_0326/st', 'skx', 'MKL',1); close; clear all; -plot_panel_4x5(2.00,32,26,'1s','../results/skx/merged20190306_0326/jc2ic13','skx_jc2ic13','MKL',1); close; clear all; -plot_panel_4x5(2.00,32,52,'2s','../results/skx/merged20190306_0326/jc4ic13','skx_jc4ic13','MKL',1); close; clear all; +plot_panel_4x5(2.00,32,1, 'st','../results/skx/merged20190306_0328/st', 'skx', 'MKL',1); close; clear all; +plot_panel_4x5(2.00,32,26,'1s','../results/skx/merged20190306_0328/jc2ic13','skx_jc2ic13','MKL',1); close; clear all; +plot_panel_4x5(2.00,32,52,'2s','../results/skx/merged20190306_0328/jc4ic13','skx_jc4ic13','MKL',1); close; clear all; % has % pre-eigen: @@ -19,9 +19,9 @@ plot_panel_4x5(2.00,32,52,'2s','../results/skx/merged20190306_0326/jc4ic13','skx %plot_panel_4x5(3.00,16,12,'1s','../results/has/20190206/jc2ic3jr2','has_jc2ic3jr2','MKL',1); close; clear all; %plot_panel_4x5(3.00,16,24,'2s','../results/has/20190206/jc4ic3jr2','has_jc4ic3jr2','MKL',1); close; clear all; % with eigen: -plot_panel_4x5(3.25,16,1, 'st','../results/has/merged20190206_0326/st', 'has', 'MKL',1); close; clear all; -plot_panel_4x5(3.00,16,12,'1s','../results/has/merged20190206_0326/jc2ic3jr2','has_jc2ic3jr2','MKL',1); close; clear all; -plot_panel_4x5(3.00,16,24,'2s','../results/has/merged20190206_0326/jc4ic3jr2','has_jc4ic3jr2','MKL',1); close; clear all; +plot_panel_4x5(3.25,16,1, 'st','../results/has/merged20190206_0328/st', 'has', 'MKL',1); close; clear all; +plot_panel_4x5(3.00,16,12,'1s','../results/has/merged20190206_0328/jc2ic3jr2','has_jc2ic3jr2','MKL',1); close; clear all; +plot_panel_4x5(3.00,16,24,'2s','../results/has/merged20190206_0328/jc4ic3jr2','has_jc4ic3jr2','MKL',1); close; clear all; % epyc % pre-eigen: @@ -29,7 +29,7 @@ plot_panel_4x5(3.00,16,24,'2s','../results/has/merged20190206_0326/jc4ic3jr2','h %plot_panel_4x5(2.55,8,32,'1s','../results/epyc/merged201903_0619/jc1ic8jr4','epyc_jc1ic8jr4','MKL'); close; clear all; %plot_panel_4x5(2.55,8,64,'2s','../results/epyc/merged201903_0619/jc2ic8jr4','epyc_jc2ic8jr4','MKL'); close; clear all; % with eigen: -plot_panel_4x5(3.00,8,1, 'st','../results/epyc/merged20190306_0319_0326/st', 'epyc', 'MKL',1); close; clear all; -plot_panel_4x5(2.55,8,32,'1s','../results/epyc/merged20190306_0319_0326/jc1ic8jr4','epyc_jc1ic8jr4','MKL',1); close; clear all; -plot_panel_4x5(2.55,8,64,'2s','../results/epyc/merged20190306_0319_0326/jc2ic8jr4','epyc_jc2ic8jr4','MKL',1); close; clear all; +plot_panel_4x5(3.00,8,1, 'st','../results/epyc/merged20190306_0319_0328/st', 'epyc', 'MKL',1); close; clear all; +plot_panel_4x5(2.55,8,32,'1s','../results/epyc/merged20190306_0319_0328/jc1ic8jr4','epyc_jc1ic8jr4','MKL',1); close; clear all; +plot_panel_4x5(2.55,8,64,'2s','../results/epyc/merged20190306_0319_0328/jc2ic8jr4','epyc_jc2ic8jr4','MKL',1); close; clear all; From 231a4b7c86512af9d7007639382837600867186a Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Tue, 2 Apr 2019 13:33:11 -0500 Subject: [PATCH 043/109] Use pthreads on MinGW and Cygwin (#307) --- configure | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 1a69f89df..dfdb7975c 100755 --- a/configure +++ b/configure @@ -1033,7 +1033,7 @@ auto_detect() # Set the linker flags. We need pthreads because it is needed for # parts of bli_arch.c unrelated to bli_arch_string(), which is called # by the main() function in ${main_c}. - if [ $is_win = no ]; then + if [[ $is_win == no || "$cc_vendor" != "clang" ]]; then ldflags="${LIBPTHREAD--lpthread}" fi @@ -2834,7 +2834,7 @@ main() # For Windows builds, clear the libpthread_esc variable so that # no pthreads library is substituted into config.mk. (Windows builds # employ an implementation of pthreads that is internal to BLIS.) - if [ $is_win = yes ]; then + if [[ $is_win == yes && "$cc_vendor" == "clang" ]]; then libpthread_esc= fi From f061c756eeb48cb8368c1fd5d2c1367e7d99a6ce Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 2 Apr 2019 14:40:50 -0500 Subject: [PATCH 044/109] Renamed armv8a gemm kernel filename. Details: - Renamed kernels/armv8a/3/bli_gemm_armv8a_opt_4x4.c to kernels/armv8a/3/bli_gemm_armv8a_asm_d6x8.c. This follows the naming convention used by other kernel sets, most notably haswell. --- .../3/{bli_gemm_armv8a_opt_4x4.c => bli_gemm_armv8a_asm_d6x8.c} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename kernels/armv8a/3/{bli_gemm_armv8a_opt_4x4.c => bli_gemm_armv8a_asm_d6x8.c} (100%) diff --git a/kernels/armv8a/3/bli_gemm_armv8a_opt_4x4.c b/kernels/armv8a/3/bli_gemm_armv8a_asm_d6x8.c similarity index 100% rename from kernels/armv8a/3/bli_gemm_armv8a_opt_4x4.c rename to kernels/armv8a/3/bli_gemm_armv8a_asm_d6x8.c From 9b16d8e995cb6eccb11aed685ca88460b20eca99 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 2 Apr 2019 17:23:55 -0500 Subject: [PATCH 045/109] Use void_fp for function pointers instead of void*. Change void*-typed function pointers to void_fp. - Updated all instances of void* variables that store function pointers to variables of a new type, void_fp. Originally, I wanted to define the type of void_fp as "void (*void_fp)( void )"--that is, a pointer to a function with no return value and no arguments. However, once I did this, I realized that gcc complains with incompatible pointer type (-Wincompatible-pointer-types) warnings every time any such a pointer is being assigned to its final, type-accurate function pointer type. That is, gcc will silently typecast a void* to another defined function pointer type (e.g. dscalv_ker_ft) during an assignment from the former to the latter, but the same statement will trigger a warning when typecasting from a void_fp type. I suspect an explicit typecast is needed in order to avoid the warning, which I'm not willing to insert at this time. - Added a typedef to bli_type_defs.h defining void_fp as void*, along with a commented-out version of the aborted definition described above. (Note that POSIX requires that void* and function pointers be interchangeable; it is the C standard that does not provide this guarantee.) - Comment updates to various _oapi.c files. --- frame/0/bli_l0_oapi.c | 16 ++++----- frame/1/bli_l1v_oapi.c | 20 +++++------ frame/1/other/packv/bli_packv_cntl.c | 4 +-- frame/1/other/packv/bli_packv_cntl.h | 4 +-- frame/1d/bli_l1d_oapi.c | 14 ++++---- frame/1f/bli_l1f_oapi.c | 10 +++--- frame/1m/bli_l1m_oapi.c | 12 +++---- frame/1m/other/bli_scalm_cntl.c | 2 +- frame/1m/other/bli_scalm_cntl.h | 2 +- frame/1m/packm/bli_packm_blk_var1.c | 6 ++-- frame/1m/packm/bli_packm_cntl.c | 4 +-- frame/1m/packm/bli_packm_cntl.h | 4 +-- frame/1m/packm/bli_packm_var.h | 2 +- frame/1m/unpackm/bli_unpackm_cntl.c | 4 +-- frame/1m/unpackm/bli_unpackm_cntl.h | 4 +-- frame/2/bli_l2_oapi.c | 12 +++---- frame/2/gemv/bli_gemv_var_oapi.c | 2 +- frame/2/ger/bli_ger_var_oapi.c | 2 +- frame/2/hemv/bli_hemv_var_oapi.c | 2 +- frame/2/her/bli_her_var_oapi.c | 2 +- frame/2/her2/bli_her2_var_oapi.c | 2 +- frame/2/trmv/bli_trmv_var_oapi.c | 2 +- frame/2/trsv/bli_trsv_var_oapi.c | 2 +- frame/3/bli_l3_ukr_oapi.c | 10 +++--- frame/3/gemm/bli_gemm_cntl.c | 10 +++--- frame/3/gemm/bli_gemm_cntl.h | 2 +- frame/3/gemm/other/bli_gemm_ker_var5.c | 6 ++-- frame/3/gemm/other/bli_gemm_ker_var5.h | 2 +- frame/3/trsm/bli_trsm_cntl.c | 14 ++++---- frame/3/trsm/bli_trsm_cntl.h | 2 +- frame/base/bli_cntl.c | 2 +- frame/base/bli_cntl.h | 8 ++--- frame/base/bli_cntx.c | 48 +++++++++++++------------- frame/base/bli_cntx.h | 20 +++++------ frame/base/bli_func.c | 16 ++++----- frame/base/bli_func.h | 22 ++++++------ frame/base/bli_gks.c | 24 ++++++------- frame/base/bli_gks.h | 2 +- frame/include/bli_macro_defs.h | 3 ++ frame/include/bli_param_macro_defs.h | 15 ++------ frame/include/bli_type_defs.h | 14 ++++++-- frame/ind/bli_ind.c | 4 +-- frame/ind/bli_ind.h | 22 ++++++------ frame/ind/bli_l3_ind.c | 12 +++---- frame/ind/bli_l3_ind.h | 16 ++++----- frame/ind/cntx/bli_cntx_ind_stage.c | 2 +- frame/util/bli_util_fpa.c | 7 +++- frame/util/bli_util_oapi.c | 18 +++++----- sandbox/ref99/cntl/blx_gemm_cntl.c | 8 ++--- sandbox/ref99/cntl/blx_gemm_cntl.h | 2 +- sandbox/ref99/cntl/blx_packm_cntl.c | 4 +-- sandbox/ref99/cntl/blx_packm_cntl.h | 4 +-- testsuite/src/test_amaxv.c | 2 +- 53 files changed, 231 insertions(+), 224 deletions(-) diff --git a/frame/0/bli_l0_oapi.c b/frame/0/bli_l0_oapi.c index 9a5492971..2dc37efd1 100644 --- a/frame/0/bli_l0_oapi.c +++ b/frame/0/bli_l0_oapi.c @@ -64,7 +64,7 @@ void PASTEMAC0(opname) \ bli_obj_scalar_set_dt_buffer( chi, dt_absq_c, &dt_chi, &buf_chi ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH(opname,_vft) f = PASTEMAC(opname,_qfp)( dt_chi ); \ \ f \ @@ -100,7 +100,7 @@ void PASTEMAC0(opname) \ PASTEMAC(opname,_check)( chi, psi ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH(opname,_vft) f = PASTEMAC(opname,_qfp)( dt ); \ \ f \ @@ -137,7 +137,7 @@ void PASTEMAC0(opname) \ PASTEMAC(opname,_check)( chi ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH(opname,_vft) f = PASTEMAC(opname,_qfp)( dt ); \ \ f \ @@ -170,7 +170,7 @@ void PASTEMAC0(opname) \ PASTEMAC(opname,_check)( chi, psi ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH(opname,_vft) f = PASTEMAC(opname,_qfp)( dt ); \ \ f \ @@ -213,7 +213,7 @@ void PASTEMAC0(opname) \ else dt_use = dt_chi; \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH(opname,_vft) f = PASTEMAC(opname,_qfp)( dt_use ); \ \ f \ @@ -247,7 +247,7 @@ void PASTEMAC0(opname) \ PASTEMAC(opname,_check)( zeta_r, zeta_i, chi ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH(opname,_vft) f = PASTEMAC(opname,_qfp)( dt_chi ); \ \ f \ @@ -290,7 +290,7 @@ void PASTEMAC0(opname) \ bli_obj_scalar_set_dt_buffer( chi, dt_zeta_c, &dt_chi, &buf_chi ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH(opname,_vft) f = PASTEMAC(opname,_qfp)( dt_chi ); \ \ f \ @@ -327,7 +327,7 @@ void PASTEMAC0(opname) \ PASTEMAC(opname,_check)( chi, zeta_r, zeta_i ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH(opname,_vft) f = PASTEMAC(opname,_qfp)( dt_chi ); \ \ f \ diff --git a/frame/1/bli_l1v_oapi.c b/frame/1/bli_l1v_oapi.c index 19e61bb7a..201af2e09 100644 --- a/frame/1/bli_l1v_oapi.c +++ b/frame/1/bli_l1v_oapi.c @@ -67,7 +67,7 @@ void PASTEMAC(opname,EX_SUF) \ PASTEMAC(opname,_check)( x, y ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -113,7 +113,7 @@ void PASTEMAC(opname,EX_SUF) \ PASTEMAC(opname,_check)( x, index ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -174,7 +174,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_beta = bli_obj_buffer_for_1x1( dt, &beta_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -232,7 +232,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_alpha = bli_obj_buffer_for_1x1( dt, &alpha_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -282,7 +282,7 @@ void PASTEMAC(opname,EX_SUF) \ PASTEMAC(opname,_check)( x, y, rho ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -349,7 +349,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_beta = bli_obj_buffer_for_1x1( dt, &beta_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -394,7 +394,7 @@ void PASTEMAC(opname,EX_SUF) \ PASTEMAC(opname,_check)( x ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -445,7 +445,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_alpha = bli_obj_buffer_for_1x1( dt, &alpha_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -490,7 +490,7 @@ void PASTEMAC(opname,EX_SUF) \ PASTEMAC(opname,_check)( x, y ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -545,7 +545,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_beta = bli_obj_buffer_for_1x1( dt, &beta_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ diff --git a/frame/1/other/packv/bli_packv_cntl.c b/frame/1/other/packv/bli_packv_cntl.c index 05f1472d0..ce4586f3f 100644 --- a/frame/1/other/packv/bli_packv_cntl.c +++ b/frame/1/other/packv/bli_packv_cntl.c @@ -36,8 +36,8 @@ cntl_t* bli_packv_cntl_obj_create ( - void* var_func, - void* packv_var_func, + void_fp var_func, + void_fp packv_var_func, bszid_t bmid, pack_t pack_schema, cntl_t* sub_node diff --git a/frame/1/other/packv/bli_packv_cntl.h b/frame/1/other/packv/bli_packv_cntl.h index 87f33524b..f1ba76a86 100644 --- a/frame/1/other/packv/bli_packv_cntl.h +++ b/frame/1/other/packv/bli_packv_cntl.h @@ -58,8 +58,8 @@ typedef struct packv_params_s packv_params_t; cntl_t* bli_packv_cntl_obj_create ( - void* var_func, - void* packv_var_func, + void_fp var_func, + void_fp packv_var_func, bszid_t bmid, pack_t pack_schema, cntl_t* sub_node diff --git a/frame/1d/bli_l1d_oapi.c b/frame/1d/bli_l1d_oapi.c index 1a8b8f124..15e68cf50 100644 --- a/frame/1d/bli_l1d_oapi.c +++ b/frame/1d/bli_l1d_oapi.c @@ -72,7 +72,7 @@ void PASTEMAC(opname,EX_SUF) \ PASTEMAC(opname,_check)( x, y ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -138,7 +138,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_alpha = bli_obj_buffer_for_1x1( dt, &alpha_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -187,7 +187,7 @@ void PASTEMAC(opname,EX_SUF) \ PASTEMAC(opname,_check)( x ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -243,7 +243,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_alpha = bli_obj_buffer_for_1x1( dt, &alpha_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -293,7 +293,7 @@ void PASTEMAC(opname,EX_SUF) \ PASTEMAC(opname,_check)( alpha, x ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -349,7 +349,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_alpha = bli_obj_buffer_for_1x1( dt, &alpha_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -411,7 +411,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_beta = bli_obj_buffer_for_1x1( dt, &beta_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ diff --git a/frame/1f/bli_l1f_oapi.c b/frame/1f/bli_l1f_oapi.c index d1e7f0dbe..db8fdfb68 100644 --- a/frame/1f/bli_l1f_oapi.c +++ b/frame/1f/bli_l1f_oapi.c @@ -88,7 +88,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_alphay = bli_obj_buffer_for_1x1( dt, &alphay_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -157,7 +157,7 @@ void PASTEMAC(opname,EX_SUF) \ if ( bli_obj_has_trans( a ) ) { bli_swap_incs( &rs_a, &cs_a ); } \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -225,7 +225,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_alpha = bli_obj_buffer_for_1x1( dt, &alpha_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -310,7 +310,7 @@ void PASTEMAC(opname,EX_SUF) \ if ( bli_obj_has_trans( a ) ) { bli_swap_incs( &rs_a, &cs_a ); } \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -390,7 +390,7 @@ void PASTEMAC(opname,EX_SUF) \ if ( bli_obj_has_trans( a ) ) { bli_swap_incs( &rs_a, &cs_a ); } \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ diff --git a/frame/1m/bli_l1m_oapi.c b/frame/1m/bli_l1m_oapi.c index 4bb0de784..224a41bc9 100644 --- a/frame/1m/bli_l1m_oapi.c +++ b/frame/1m/bli_l1m_oapi.c @@ -73,7 +73,7 @@ void PASTEMAC(opname,EX_SUF) \ PASTEMAC(opname,_check)( x, y ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -141,7 +141,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_alpha = bli_obj_buffer_for_1x1( dt, &alpha_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -218,7 +218,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_alpha = bli_obj_internal_scalar_buffer( &x_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -280,7 +280,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_alpha = bli_obj_buffer_for_1x1( dt, &alpha_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -349,7 +349,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_beta = bli_obj_buffer_for_1x1( dt, &beta_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -414,7 +414,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_beta = bli_obj_buffer_for_1x1( dty, &beta_local ); \ \ /* Query a (multi) type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp2)( dtx, dty ); \ \ diff --git a/frame/1m/other/bli_scalm_cntl.c b/frame/1m/other/bli_scalm_cntl.c index afff3c164..b815dc530 100644 --- a/frame/1m/other/bli_scalm_cntl.c +++ b/frame/1m/other/bli_scalm_cntl.c @@ -36,7 +36,7 @@ cntl_t* bli_scalm_cntl_create_node ( - void* var_func, + void_fp var_func, cntl_t* sub_node ) { diff --git a/frame/1m/other/bli_scalm_cntl.h b/frame/1m/other/bli_scalm_cntl.h index 0d589f207..32a02f5da 100644 --- a/frame/1m/other/bli_scalm_cntl.h +++ b/frame/1m/other/bli_scalm_cntl.h @@ -35,6 +35,6 @@ cntl_t* bli_scalm_cntl_create_node ( - void* var_func, + void_fp var_func, cntl_t* sub_node ); diff --git a/frame/1m/packm/bli_packm_blk_var1.c b/frame/1m/packm/bli_packm_blk_var1.c index 6afc48fad..0c19829f2 100644 --- a/frame/1m/packm/bli_packm_blk_var1.c +++ b/frame/1m/packm/bli_packm_blk_var1.c @@ -57,7 +57,7 @@ typedef void (*FUNCPTR_T) void* p, inc_t rs_p, inc_t cs_p, inc_t is_p, dim_t pd_p, inc_t ps_p, - void* packm_ker, + void_fp packm_ker, cntx_t* cntx, thrinfo_t* thread ); @@ -152,7 +152,7 @@ void bli_packm_blk_var1 void* buf_kappa; func_t* packm_kers; - void* packm_ker; + void_fp packm_ker; FUNCPTR_T f; @@ -296,7 +296,7 @@ void PASTEMAC(ch,varname) \ void* p, inc_t rs_p, inc_t cs_p, \ inc_t is_p, \ dim_t pd_p, inc_t ps_p, \ - void* packm_ker, \ + void_fp packm_ker, \ cntx_t* cntx, \ thrinfo_t* thread \ ) \ diff --git a/frame/1m/packm/bli_packm_cntl.c b/frame/1m/packm/bli_packm_cntl.c index 5321d873a..5b3e26421 100644 --- a/frame/1m/packm/bli_packm_cntl.c +++ b/frame/1m/packm/bli_packm_cntl.c @@ -38,8 +38,8 @@ cntl_t* bli_packm_cntl_create_node ( rntm_t* rntm, - void* var_func, - void* packm_var_func, + void_fp var_func, + void_fp packm_var_func, bszid_t bmid_m, bszid_t bmid_n, bool_t does_invert_diag, diff --git a/frame/1m/packm/bli_packm_cntl.h b/frame/1m/packm/bli_packm_cntl.h index bbf0ea332..5ce1801b9 100644 --- a/frame/1m/packm/bli_packm_cntl.h +++ b/frame/1m/packm/bli_packm_cntl.h @@ -92,8 +92,8 @@ static packbuf_t bli_cntl_packm_params_pack_buf_type( cntl_t* cntl ) cntl_t* bli_packm_cntl_create_node ( rntm_t* rntm, - void* var_func, - void* packm_var_func, + void_fp var_func, + void_fp packm_var_func, bszid_t bmid_m, bszid_t bmid_n, bool_t does_invert_diag, diff --git a/frame/1m/packm/bli_packm_var.h b/frame/1m/packm/bli_packm_var.h index 3dc5b607d..97aa875bd 100644 --- a/frame/1m/packm/bli_packm_var.h +++ b/frame/1m/packm/bli_packm_var.h @@ -101,7 +101,7 @@ void PASTEMAC(ch,varname) \ void* p, inc_t rs_p, inc_t cs_p, \ inc_t is_p, \ dim_t pd_p, inc_t ps_p, \ - void* packm_ker, \ + void_fp packm_ker, \ cntx_t* cntx, \ thrinfo_t* thread \ ); diff --git a/frame/1m/unpackm/bli_unpackm_cntl.c b/frame/1m/unpackm/bli_unpackm_cntl.c index 7c634a11e..f2be05a54 100644 --- a/frame/1m/unpackm/bli_unpackm_cntl.c +++ b/frame/1m/unpackm/bli_unpackm_cntl.c @@ -38,8 +38,8 @@ cntl_t* bli_unpackm_cntl_create_node ( rntm_t* rntm, - void* var_func, - void* unpackm_var_func, + void_fp var_func, + void_fp unpackm_var_func, cntl_t* sub_node ) { diff --git a/frame/1m/unpackm/bli_unpackm_cntl.h b/frame/1m/unpackm/bli_unpackm_cntl.h index 49a8b19f6..5c41d9465 100644 --- a/frame/1m/unpackm/bli_unpackm_cntl.h +++ b/frame/1m/unpackm/bli_unpackm_cntl.h @@ -49,8 +49,8 @@ typedef struct unpackm_params_s unpackm_params_t; cntl_t* bli_unpackm_cntl_create_node ( rntm_t* rntm, - void* var_func, - void* unpackm_var_func, + void_fp var_func, + void_fp unpackm_var_func, cntl_t* sub_node ); diff --git a/frame/2/bli_l2_oapi.c b/frame/2/bli_l2_oapi.c index 25acb4207..cc32fb61e 100644 --- a/frame/2/bli_l2_oapi.c +++ b/frame/2/bli_l2_oapi.c @@ -90,7 +90,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_beta = bli_obj_buffer_for_1x1( dt, &beta_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -157,7 +157,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_alpha = bli_obj_buffer_for_1x1( dt, &alpha_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -229,7 +229,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_beta = bli_obj_buffer_for_1x1( dt, &beta_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -293,7 +293,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_alpha = bli_obj_buffer_for_1x1( dt, &alpha_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -358,7 +358,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_alpha = bli_obj_buffer_for_1x1( dt, &alpha_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -422,7 +422,7 @@ void PASTEMAC(opname,EX_SUF) \ buf_alpha = bli_obj_buffer_for_1x1( dt, &alpha_local ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ diff --git a/frame/2/gemv/bli_gemv_var_oapi.c b/frame/2/gemv/bli_gemv_var_oapi.c index 2e746b417..865773534 100644 --- a/frame/2/gemv/bli_gemv_var_oapi.c +++ b/frame/2/gemv/bli_gemv_var_oapi.c @@ -72,7 +72,7 @@ void PASTEMAC0(varname) \ void* buf_beta = bli_obj_buffer_for_1x1( dt, beta ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,_unb,_vft) f = \ PASTEMAC(varname,_qfp)( dt ); \ \ diff --git a/frame/2/ger/bli_ger_var_oapi.c b/frame/2/ger/bli_ger_var_oapi.c index 3fd95e89f..f125efdf8 100644 --- a/frame/2/ger/bli_ger_var_oapi.c +++ b/frame/2/ger/bli_ger_var_oapi.c @@ -70,7 +70,7 @@ void PASTEMAC0(varname) \ void* buf_alpha = bli_obj_buffer_for_1x1( dt, alpha ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,_unb,_vft) f = \ PASTEMAC(varname,_qfp)( dt ); \ \ diff --git a/frame/2/hemv/bli_hemv_var_oapi.c b/frame/2/hemv/bli_hemv_var_oapi.c index 845f288c3..bf0e4b202 100644 --- a/frame/2/hemv/bli_hemv_var_oapi.c +++ b/frame/2/hemv/bli_hemv_var_oapi.c @@ -73,7 +73,7 @@ void PASTEMAC0(varname) \ void* buf_beta = bli_obj_buffer_for_1x1( dt, beta ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,_unb,_vft) f = \ PASTEMAC(varname,_qfp)( dt ); \ \ diff --git a/frame/2/her/bli_her_var_oapi.c b/frame/2/her/bli_her_var_oapi.c index ffca2e71e..44c6d090d 100644 --- a/frame/2/her/bli_her_var_oapi.c +++ b/frame/2/her/bli_her_var_oapi.c @@ -66,7 +66,7 @@ void PASTEMAC0(varname) \ void* buf_alpha = bli_obj_buffer_for_1x1( dt, alpha ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,_unb,_vft) f = \ PASTEMAC(varname,_qfp)( dt ); \ \ diff --git a/frame/2/her2/bli_her2_var_oapi.c b/frame/2/her2/bli_her2_var_oapi.c index 2b26e5476..dce87a1cd 100644 --- a/frame/2/her2/bli_her2_var_oapi.c +++ b/frame/2/her2/bli_her2_var_oapi.c @@ -72,7 +72,7 @@ void PASTEMAC0(varname) \ void* buf_alpha = bli_obj_buffer_for_1x1( dt, alpha ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,_unb,_vft) f = \ PASTEMAC(varname,_qfp)( dt ); \ \ diff --git a/frame/2/trmv/bli_trmv_var_oapi.c b/frame/2/trmv/bli_trmv_var_oapi.c index 931eb2abb..c74d31223 100644 --- a/frame/2/trmv/bli_trmv_var_oapi.c +++ b/frame/2/trmv/bli_trmv_var_oapi.c @@ -66,7 +66,7 @@ void PASTEMAC0(varname) \ void* buf_alpha = bli_obj_buffer_for_1x1( dt, alpha ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,_unb,_vft) f = \ PASTEMAC(varname,_qfp)( dt ); \ \ diff --git a/frame/2/trsv/bli_trsv_var_oapi.c b/frame/2/trsv/bli_trsv_var_oapi.c index 4cf346acf..62ac33e45 100644 --- a/frame/2/trsv/bli_trsv_var_oapi.c +++ b/frame/2/trsv/bli_trsv_var_oapi.c @@ -66,7 +66,7 @@ void PASTEMAC0(varname) \ void* buf_alpha = bli_obj_buffer_for_1x1( dt, alpha ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,_unb,_vft) f = \ PASTEMAC(varname,_qfp)( dt ); \ \ diff --git a/frame/3/bli_l3_ukr_oapi.c b/frame/3/bli_l3_ukr_oapi.c index a8191b1aa..33262b0bb 100644 --- a/frame/3/bli_l3_ukr_oapi.c +++ b/frame/3/bli_l3_ukr_oapi.c @@ -69,7 +69,7 @@ void PASTEMAC0(opname) \ bli_auxinfo_set_is_b( 1, &data ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(tname,_ukr,_vft) f = \ PASTEMAC(opname,_qfp)( dt ); \ \ @@ -130,7 +130,7 @@ void PASTEMAC0(opname) \ if ( bli_obj_is_lower( a11 ) ) \ { \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(tname,_ukr,_vft) f = \ PASTEMAC(opnamel,_qfp)( dt ); \ \ @@ -150,7 +150,7 @@ void PASTEMAC0(opname) \ else /* if ( bli_obj_is_upper( a11 ) ) */ \ { \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(tname,_ukr,_vft) f = \ PASTEMAC(opnameu,_qfp)( dt ); \ \ @@ -205,7 +205,7 @@ void PASTEMAC0(opname) \ if ( bli_obj_is_lower( a ) ) \ { \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(tname,_ukr,_vft) f = \ PASTEMAC(opnamel,_qfp)( dt ); \ \ @@ -221,7 +221,7 @@ void PASTEMAC0(opname) \ else /* if ( bli_obj_is_upper( a ) ) */ \ { \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(tname,_ukr,_vft) f = \ PASTEMAC(opnameu,_qfp)( dt ); \ \ diff --git a/frame/3/gemm/bli_gemm_cntl.c b/frame/3/gemm/bli_gemm_cntl.c index fc0a4a786..d7cd0a92c 100644 --- a/frame/3/gemm/bli_gemm_cntl.c +++ b/frame/3/gemm/bli_gemm_cntl.c @@ -56,9 +56,9 @@ cntl_t* bli_gemmbp_cntl_create pack_t schema_b ) { - void* macro_kernel_fp; - void* packa_fp; - void* packb_fp; + void_fp macro_kernel_fp; + void_fp packa_fp; + void_fp packb_fp; // Use the function pointers to the macrokernels that use slab // assignment of micropanels to threads in the jr and ir loops. @@ -165,7 +165,7 @@ cntl_t* bli_gemmpb_cntl_create opid_t family ) { - void* macro_kernel_p = bli_gemm_ker_var1; + void_fp macro_kernel_p = bli_gemm_ker_var1; // Change the macro-kernel if the operation family is herk or trmm. //if ( family == BLIS_HERK ) macro_kernel_p = bli_herk_x_ker_var2; @@ -270,7 +270,7 @@ cntl_t* bli_gemm_cntl_create_node rntm_t* rntm, opid_t family, bszid_t bszid, - void* var_func, + void_fp var_func, cntl_t* sub_node ) { diff --git a/frame/3/gemm/bli_gemm_cntl.h b/frame/3/gemm/bli_gemm_cntl.h index c6d20b170..bff91b58a 100644 --- a/frame/3/gemm/bli_gemm_cntl.h +++ b/frame/3/gemm/bli_gemm_cntl.h @@ -74,7 +74,7 @@ cntl_t* bli_gemm_cntl_create_node rntm_t* rntm, opid_t family, bszid_t bszid, - void* var_func, + void_fp var_func, cntl_t* sub_node ); diff --git a/frame/3/gemm/other/bli_gemm_ker_var5.c b/frame/3/gemm/other/bli_gemm_ker_var5.c index 0d0c914d8..9e13c4edd 100644 --- a/frame/3/gemm/other/bli_gemm_ker_var5.c +++ b/frame/3/gemm/other/bli_gemm_ker_var5.c @@ -45,7 +45,7 @@ typedef void (*FUNCPTR_T)( void* b, inc_t rs_b, dim_t pd_b, inc_t ps_b, void* beta, void* c, inc_t rs_c, inc_t cs_c, - void* gemm_ukr + void_fp gemm_ukr ); static FUNCPTR_T GENARRAY(ftypes,gemm_ker_var5); @@ -87,7 +87,7 @@ void bli_gemm_ker_var5( obj_t* a, FUNCPTR_T f; func_t* gemm_ukrs; - void* gemm_ukr; + void_fp gemm_ukr; // Detach and multiply the scalars attached to A and B. @@ -135,7 +135,7 @@ void PASTEMAC(ch,varname)( \ void* b, inc_t rs_b, dim_t pd_b, inc_t ps_b, \ void* beta, \ void* c, inc_t rs_c, inc_t cs_c, \ - void* gemm_ukr \ + void_fp gemm_ukr \ ) \ { \ /* Cast the micro-kernel address to its function pointer type. */ \ diff --git a/frame/3/gemm/other/bli_gemm_ker_var5.h b/frame/3/gemm/other/bli_gemm_ker_var5.h index 7e24bb5f9..e88db5cb5 100644 --- a/frame/3/gemm/other/bli_gemm_ker_var5.h +++ b/frame/3/gemm/other/bli_gemm_ker_var5.h @@ -59,7 +59,7 @@ void PASTEMAC(ch,varname)( \ void* b, inc_t rs_b, dim_t pd_b, inc_t ps_b, \ void* beta, \ void* c, inc_t rs_c, inc_t cs_c, \ - void* gemm_ukr \ + void_fp gemm_ukr \ ); INSERT_GENTPROT_BASIC( gemm_ker_var5 ) diff --git a/frame/3/trsm/bli_trsm_cntl.c b/frame/3/trsm/bli_trsm_cntl.c index ff2f18a1f..845370448 100644 --- a/frame/3/trsm/bli_trsm_cntl.c +++ b/frame/3/trsm/bli_trsm_cntl.c @@ -56,9 +56,9 @@ cntl_t* bli_trsm_l_cntl_create pack_t schema_b ) { - void* macro_kernel_p; - void* packa_fp; - void* packb_fp; + void_fp macro_kernel_p; + void_fp packa_fp; + void_fp packb_fp; // Use the function pointer to the macrokernels that use slab // assignment of micropanels to threads in the jr and ir loops. @@ -210,10 +210,10 @@ cntl_t* bli_trsm_r_cntl_create ) { // NOTE: trsm macrokernels are presently disabled for right-side execution. - void* macro_kernel_p = bli_trsm_xx_ker_var2; + void_fp macro_kernel_p = bli_trsm_xx_ker_var2; - void* packa_fp = bli_packm_blk_var1; - void* packb_fp = bli_packm_blk_var1; + void_fp packa_fp = bli_packm_blk_var1; + void_fp packb_fp = bli_packm_blk_var1; const opid_t family = BLIS_TRSM; @@ -318,7 +318,7 @@ cntl_t* bli_trsm_cntl_create_node rntm_t* rntm, opid_t family, bszid_t bszid, - void* var_func, + void_fp var_func, cntl_t* sub_node ) { diff --git a/frame/3/trsm/bli_trsm_cntl.h b/frame/3/trsm/bli_trsm_cntl.h index f81f70d07..7fdb1fc4f 100644 --- a/frame/3/trsm/bli_trsm_cntl.h +++ b/frame/3/trsm/bli_trsm_cntl.h @@ -69,7 +69,7 @@ cntl_t* bli_trsm_cntl_create_node rntm_t* rntm, opid_t family, bszid_t bszid, - void* var_func, + void_fp var_func, cntl_t* sub_node ); diff --git a/frame/base/bli_cntl.c b/frame/base/bli_cntl.c index 21027ee2c..0de6fbc39 100644 --- a/frame/base/bli_cntl.c +++ b/frame/base/bli_cntl.c @@ -40,7 +40,7 @@ cntl_t* bli_cntl_create_node rntm_t* rntm, opid_t family, bszid_t bszid, - void* var_func, + void_fp var_func, void* params, cntl_t* sub_node ) diff --git a/frame/base/bli_cntl.h b/frame/base/bli_cntl.h index 8cba6fef5..998a92571 100644 --- a/frame/base/bli_cntl.h +++ b/frame/base/bli_cntl.h @@ -42,7 +42,7 @@ struct cntl_s // Basic fields (usually required). opid_t family; bszid_t bszid; - void* var_func; + void_fp var_func; struct cntl_s* sub_prenode; struct cntl_s* sub_node; @@ -65,7 +65,7 @@ BLIS_EXPORT_BLIS cntl_t* bli_cntl_create_node rntm_t* rntm, opid_t family, bszid_t bszid, - void* var_func, + void_fp var_func, void* params, cntl_t* sub_node ); @@ -137,7 +137,7 @@ static bszid_t bli_cntl_bszid( cntl_t* cntl ) return cntl->bszid; } -static void* bli_cntl_var_func( cntl_t* cntl ) +static void_fp bli_cntl_var_func( cntl_t* cntl ) { return cntl->var_func; } @@ -200,7 +200,7 @@ static void bli_cntl_set_bszid( bszid_t bszid, cntl_t* cntl ) cntl->bszid = bszid; } -static void bli_cntl_set_var_func( void* var_func, cntl_t* cntl ) +static void bli_cntl_set_var_func( void_fp var_func, cntl_t* cntl ) { cntl->var_func = var_func; } diff --git a/frame/base/bli_cntx.c b/frame/base/bli_cntx.c index 3d47ff604..a3b789592 100644 --- a/frame/base/bli_cntx.c +++ b/frame/base/bli_cntx.c @@ -532,9 +532,9 @@ void bli_cntx_set_l3_nat_ukrs( dim_t n_ukrs, ... ) void bli_cntx_set_l3_nat_ukrs ( dim_t n_ukrs, - l3ukr_t ukr0_id, num_t dt0, void* ukr0_fp, bool_t pref0, - l3ukr_t ukr1_id, num_t dt1, void* ukr1_fp, bool_t pref1, - l3ukr_t ukr2_id, num_t dt2, void* ukr2_fp, bool_t pref2, + l3ukr_t ukr0_id, num_t dt0, void_fp ukr0_fp, bool_t pref0, + l3ukr_t ukr1_id, num_t dt1, void_fp ukr1_fp, bool_t pref1, + l3ukr_t ukr2_id, num_t dt2, void_fp ukr2_fp, bool_t pref2, ... cntx_t* cntx ); @@ -557,7 +557,7 @@ void bli_cntx_set_l3_nat_ukrs( dim_t n_ukrs, ... ) #ifdef BLIS_ENABLE_MEM_TRACING printf( "bli_cntx_set_l3_nat_ukrs(): " ); #endif - void** ukr_fps = bli_malloc_intl( n_ukrs * sizeof( void* ) ); + void_fp* ukr_fps = bli_malloc_intl( n_ukrs * sizeof( void_fp ) ); #ifdef BLIS_ENABLE_MEM_TRACING printf( "bli_cntx_set_l3_nat_ukrs(): " ); @@ -590,7 +590,7 @@ void bli_cntx_set_l3_nat_ukrs( dim_t n_ukrs, ... ) // within a bool_t afterwards. const l3ukr_t ukr_id = ( l3ukr_t )va_arg( args, l3ukr_t ); const num_t ukr_dt = ( num_t )va_arg( args, num_t ); - void* ukr_fp = ( void* )va_arg( args, void* ); + void_fp ukr_fp = ( void_fp )va_arg( args, void_fp ); const bool_t ukr_pref = ( bool_t )va_arg( args, int ); // Store the values in our temporary arrays. @@ -627,7 +627,7 @@ void bli_cntx_set_l3_nat_ukrs( dim_t n_ukrs, ... ) // multiple id, and blocksize scalar. const l3ukr_t ukr_id = ukr_ids[ i ]; const num_t ukr_dt = ukr_dts[ i ]; - void* ukr_fp = ukr_fps[ i ]; + void_fp ukr_fp = ukr_fps[ i ]; const bool_t ukr_pref = ukr_prefs[ i ]; // Index into the func_t and mbool_t for the current kernel id @@ -686,9 +686,9 @@ void bli_cntx_set_l1f_kers( dim_t n_kers, ... ) void bli_cntx_set_l1f_kers ( dim_t n_ukrs, - l1fkr_t ker0_id, num_t ker0_dt, void* ker0_fp, - l1fkr_t ker1_id, num_t ker1_dt, void* ker1_fp, - l1fkr_t ker2_id, num_t ker2_dt, void* ker2_fp, + l1fkr_t ker0_id, num_t ker0_dt, void_fp ker0_fp, + l1fkr_t ker1_id, num_t ker1_dt, void_fp ker1_fp, + l1fkr_t ker2_id, num_t ker2_dt, void_fp ker2_fp, ... cntx_t* cntx ); @@ -711,7 +711,7 @@ void bli_cntx_set_l1f_kers( dim_t n_kers, ... ) #ifdef BLIS_ENABLE_MEM_TRACING printf( "bli_cntx_set_l1f_kers(): " ); #endif - void** ker_fps = bli_malloc_intl( n_kers * sizeof( void* ) ); + void_fp* ker_fps = bli_malloc_intl( n_kers * sizeof( void_fp ) ); // -- Begin variable argument section -- @@ -728,7 +728,7 @@ void bli_cntx_set_l1f_kers( dim_t n_kers, ... ) // that we need to store to the context. const l1fkr_t ker_id = ( l1fkr_t )va_arg( args, l1fkr_t ); const num_t ker_dt = ( num_t )va_arg( args, num_t ); - void* ker_fp = ( void* )va_arg( args, void* ); + void_fp ker_fp = ( void_fp )va_arg( args, void_fp ); // Store the values in our temporary arrays. ker_ids[ i ] = ker_id; @@ -759,7 +759,7 @@ void bli_cntx_set_l1f_kers( dim_t n_kers, ... ) // multiple id, and blocksize scalar. const l1fkr_t ker_id = ker_ids[ i ]; const num_t ker_dt = ker_dts[ i ]; - void* ker_fp = ker_fps[ i ]; + void_fp ker_fp = ker_fps[ i ]; // Index into the func_t and mbool_t for the current kernel id // being processed. @@ -804,9 +804,9 @@ void bli_cntx_set_l1v_kers( dim_t n_kers, ... ) void bli_cntx_set_l1v_kers ( dim_t n_ukrs, - l1vkr_t ker0_id, num_t ker0_dt, void* ker0_fp, - l1vkr_t ker1_id, num_t ker1_dt, void* ker1_fp, - l1vkr_t ker2_id, num_t ker2_dt, void* ker2_fp, + l1vkr_t ker0_id, num_t ker0_dt, void_fp ker0_fp, + l1vkr_t ker1_id, num_t ker1_dt, void_fp ker1_fp, + l1vkr_t ker2_id, num_t ker2_dt, void_fp ker2_fp, ... cntx_t* cntx ); @@ -829,7 +829,7 @@ void bli_cntx_set_l1v_kers( dim_t n_kers, ... ) #ifdef BLIS_ENABLE_MEM_TRACING printf( "bli_cntx_set_l1v_kers(): " ); #endif - void** ker_fps = bli_malloc_intl( n_kers * sizeof( void* ) ); + void_fp* ker_fps = bli_malloc_intl( n_kers * sizeof( void_fp ) ); // -- Begin variable argument section -- @@ -846,7 +846,7 @@ void bli_cntx_set_l1v_kers( dim_t n_kers, ... ) // that we need to store to the context. const l1vkr_t ker_id = ( l1vkr_t )va_arg( args, l1vkr_t ); const num_t ker_dt = ( num_t )va_arg( args, num_t ); - void* ker_fp = ( void* )va_arg( args, void* ); + void_fp ker_fp = ( void_fp )va_arg( args, void_fp ); // Store the values in our temporary arrays. ker_ids[ i ] = ker_id; @@ -877,7 +877,7 @@ void bli_cntx_set_l1v_kers( dim_t n_kers, ... ) // multiple id, and blocksize scalar. const l1vkr_t ker_id = ker_ids[ i ]; const num_t ker_dt = ker_dts[ i ]; - void* ker_fp = ker_fps[ i ]; + void_fp ker_fp = ker_fps[ i ]; // Index into the func_t and mbool_t for the current kernel id // being processed. @@ -922,9 +922,9 @@ void bli_cntx_set_packm_kers( dim_t n_kers, ... ) void bli_cntx_set_packm_kers ( dim_t n_ukrs, - l1mkr_t ker0_id, num_t ker0_dt, void* ker0_fp, - l1mkr_t ker1_id, num_t ker1_dt, void* ker1_fp, - l1mkr_t ker2_id, num_t ker2_dt, void* ker2_fp, + l1mkr_t ker0_id, num_t ker0_dt, void_fp ker0_fp, + l1mkr_t ker1_id, num_t ker1_dt, void_fp ker1_fp, + l1mkr_t ker2_id, num_t ker2_dt, void_fp ker2_fp, ... cntx_t* cntx ); @@ -947,7 +947,7 @@ void bli_cntx_set_packm_kers( dim_t n_kers, ... ) #ifdef BLIS_ENABLE_MEM_TRACING printf( "bli_cntx_set_packm_kers(): " ); #endif - void** ker_fps = bli_malloc_intl( n_kers * sizeof( void* ) ); + void_fp* ker_fps = bli_malloc_intl( n_kers * sizeof( void_fp ) ); // -- Begin variable argument section -- @@ -964,7 +964,7 @@ void bli_cntx_set_packm_kers( dim_t n_kers, ... ) // that we need to store to the context. const l1mkr_t ker_id = ( l1mkr_t )va_arg( args, l1mkr_t ); const num_t ker_dt = ( num_t )va_arg( args, num_t ); - void* ker_fp = ( void* )va_arg( args, void* ); + void_fp ker_fp = ( void_fp )va_arg( args, void_fp ); // Store the values in our temporary arrays. ker_ids[ i ] = ker_id; @@ -995,7 +995,7 @@ void bli_cntx_set_packm_kers( dim_t n_kers, ... ) // multiple id, and blocksize scalar. const l1mkr_t ker_id = ker_ids[ i ]; const num_t ker_dt = ker_dts[ i ]; - void* ker_fp = ker_fps[ i ]; + void_fp ker_fp = ker_fps[ i ]; // Index into the func_t and mbool_t for the current kernel id // being processed. diff --git a/frame/base/bli_cntx.h b/frame/base/bli_cntx.h index e87794e90..cc4f7f7fb 100644 --- a/frame/base/bli_cntx.h +++ b/frame/base/bli_cntx.h @@ -217,7 +217,7 @@ static func_t* bli_cntx_get_l3_vir_ukrs( l3ukr_t ukr_id, cntx_t* cntx ) return func; } -static void* bli_cntx_get_l3_vir_ukr_dt( num_t dt, l3ukr_t ukr_id, cntx_t* cntx ) +static void_fp bli_cntx_get_l3_vir_ukr_dt( num_t dt, l3ukr_t ukr_id, cntx_t* cntx ) { func_t* func = bli_cntx_get_l3_vir_ukrs( ukr_id, cntx ); @@ -232,7 +232,7 @@ static func_t* bli_cntx_get_l3_nat_ukrs( l3ukr_t ukr_id, cntx_t* cntx ) return func; } -static void* bli_cntx_get_l3_nat_ukr_dt( num_t dt, l3ukr_t ukr_id, cntx_t* cntx ) +static void_fp bli_cntx_get_l3_nat_ukr_dt( num_t dt, l3ukr_t ukr_id, cntx_t* cntx ) { func_t* func = bli_cntx_get_l3_nat_ukrs( ukr_id, cntx ); @@ -266,7 +266,7 @@ static func_t* bli_cntx_get_l1f_kers( l1fkr_t ker_id, cntx_t* cntx ) return func; } -static void* bli_cntx_get_l1f_ker_dt( num_t dt, l1fkr_t ker_id, cntx_t* cntx ) +static void_fp bli_cntx_get_l1f_ker_dt( num_t dt, l1fkr_t ker_id, cntx_t* cntx ) { func_t* func = bli_cntx_get_l1f_kers( ker_id, cntx ); @@ -283,7 +283,7 @@ static func_t* bli_cntx_get_l1v_kers( l1vkr_t ker_id, cntx_t* cntx ) return func; } -static void* bli_cntx_get_l1v_ker_dt( num_t dt, l1vkr_t ker_id, cntx_t* cntx ) +static void_fp bli_cntx_get_l1v_ker_dt( num_t dt, l1vkr_t ker_id, cntx_t* cntx ) { func_t* func = bli_cntx_get_l1v_kers( ker_id, cntx ); @@ -309,9 +309,9 @@ static func_t* bli_cntx_get_packm_kers( l1mkr_t ker_id, cntx_t* cntx ) return func; } -static void* bli_cntx_get_packm_ker_dt( num_t dt, l1mkr_t ker_id, cntx_t* cntx ) +static void_fp bli_cntx_get_packm_ker_dt( num_t dt, l1mkr_t ker_id, cntx_t* cntx ) { - void* fp = NULL; + void_fp fp = NULL; // Only query the context for the packm func_t (and then extract the // datatype-specific function pointer) if the packm kernel being @@ -344,9 +344,9 @@ static func_t* bli_cntx_get_unpackm_kers( l1mkr_t ker_id, cntx_t* cntx ) return func; } -static void* bli_cntx_get_unpackm_ker_dt( num_t dt, l1mkr_t ker_id, cntx_t* cntx ) +static void_fp bli_cntx_get_unpackm_ker_dt( num_t dt, l1mkr_t ker_id, cntx_t* cntx ) { - void* fp = NULL; + void_fp fp = NULL; // Only query the context for the unpackm func_t (and then extract the // datatype-specific function pointer) if the unpackm kernel being @@ -513,7 +513,7 @@ static void bli_cntx_set_packm_ker( l1mkr_t ker_id, func_t* func, cntx_t* cntx ) funcs[ ker_id ] = *func; } -static void bli_cntx_set_packm_ker_dt( void* fp, num_t dt, l1mkr_t ker_id, cntx_t* cntx ) +static void bli_cntx_set_packm_ker_dt( void_fp fp, num_t dt, l1mkr_t ker_id, cntx_t* cntx ) { func_t* func = ( func_t* )bli_cntx_get_packm_kers( ker_id, cntx ); @@ -527,7 +527,7 @@ static void bli_cntx_set_unpackm_ker( l1mkr_t ker_id, func_t* func, cntx_t* cntx funcs[ ker_id ] = *func; } -static void bli_cntx_set_unpackm_ker_dt( void* fp, num_t dt, l1mkr_t ker_id, cntx_t* cntx ) +static void bli_cntx_set_unpackm_ker_dt( void_fp fp, num_t dt, l1mkr_t ker_id, cntx_t* cntx ) { func_t* func = ( func_t* )bli_cntx_get_unpackm_kers( ker_id, cntx ); diff --git a/frame/base/bli_func.c b/frame/base/bli_func.c index 435bd81de..d383cd0f2 100644 --- a/frame/base/bli_func.c +++ b/frame/base/bli_func.c @@ -37,10 +37,10 @@ func_t* bli_func_create ( - void* ptr_s, - void* ptr_d, - void* ptr_c, - void* ptr_z + void_fp ptr_s, + void_fp ptr_d, + void_fp ptr_c, + void_fp ptr_z ) { func_t* f; @@ -62,10 +62,10 @@ func_t* bli_func_create void bli_func_init ( func_t* f, - void* ptr_s, - void* ptr_d, - void* ptr_c, - void* ptr_z + void_fp ptr_s, + void_fp ptr_d, + void_fp ptr_c, + void_fp ptr_z ) { bli_func_set_dt( ptr_s, BLIS_FLOAT, f ); diff --git a/frame/base/bli_func.h b/frame/base/bli_func.h index 0f927ad81..a820d0b7e 100644 --- a/frame/base/bli_func.h +++ b/frame/base/bli_func.h @@ -36,7 +36,7 @@ // func_t query -static void* bli_func_get_dt +static void_fp bli_func_get_dt ( num_t dt, func_t* func @@ -49,7 +49,7 @@ static void* bli_func_get_dt static void bli_func_set_dt ( - void* fp, + void_fp fp, num_t dt, func_t* func ) @@ -63,7 +63,7 @@ static void bli_func_copy_dt num_t dt_dst, func_t* func_dst ) { - void* fp = bli_func_get_dt( dt_src, func_src ); + void_fp fp = bli_func_get_dt( dt_src, func_src ); bli_func_set_dt( fp, dt_dst, func_dst ); } @@ -72,19 +72,19 @@ static void bli_func_copy_dt func_t* bli_func_create ( - void* ptr_s, - void* ptr_d, - void* ptr_c, - void* ptr_z + void_fp ptr_s, + void_fp ptr_d, + void_fp ptr_c, + void_fp ptr_z ); void bli_func_init ( func_t* f, - void* ptr_s, - void* ptr_d, - void* ptr_c, - void* ptr_z + void_fp ptr_s, + void_fp ptr_d, + void_fp ptr_c, + void_fp ptr_z ); void bli_func_init_null diff --git a/frame/base/bli_gks.c b/frame/base/bli_gks.c index 80b239182..624163f13 100644 --- a/frame/base/bli_gks.c +++ b/frame/base/bli_gks.c @@ -41,11 +41,11 @@ static cntx_t** gks[ BLIS_NUM_ARCHS ]; // The array of function pointers holding the registered context initialization // functions for induced methods. -static void* cntx_ind_init[ BLIS_NUM_ARCHS ]; +static void_fp cntx_ind_init[ BLIS_NUM_ARCHS ]; // The array of function pointers holding the registered context initialization // functions for reference kernels. -static void* cntx_ref_init[ BLIS_NUM_ARCHS ]; +static void_fp cntx_ref_init[ BLIS_NUM_ARCHS ]; // Define a function pointer type for context initialization functions. typedef void (*nat_cntx_init_ft)( cntx_t* cntx ); @@ -240,7 +240,7 @@ void bli_gks_init_index( void ) // architecture id elements of the internal arrays to NULL. const size_t gks_size = sizeof( cntx_t* ) * BLIS_NUM_ARCHS; - const size_t fpa_size = sizeof( void* ) * BLIS_NUM_ARCHS; + const size_t fpa_size = sizeof( void_fp ) * BLIS_NUM_ARCHS; // Set every entry in gks and context init function pointer arrays to // zero/NULL. This is done so that later on we know which ones were @@ -297,10 +297,10 @@ cntx_t* bli_gks_lookup_ind_cntx void bli_gks_register_cntx ( - arch_t id, - void* nat_fp, - void* ref_fp, - void* ind_fp + arch_t id, + void_fp nat_fp, + void_fp ref_fp, + void_fp ind_fp ) { // This function is called by bli_gks_init() for each architecture that @@ -590,8 +590,8 @@ bool_t bli_gks_cntx_l3_nat_ukr_is_ref // Query each context for the micro-kernel function pointer for the // specified datatype. - void* ref_fp = bli_cntx_get_l3_nat_ukr_dt( dt, ukr_id, &ref_cntx ); - void* fp = bli_cntx_get_l3_nat_ukr_dt( dt, ukr_id, cntx ); + void_fp ref_fp = bli_cntx_get_l3_nat_ukr_dt( dt, ukr_id, &ref_cntx ); + void_fp fp = bli_cntx_get_l3_nat_ukr_dt( dt, ukr_id, cntx ); // Return the result. return fp == ref_fp; @@ -619,7 +619,7 @@ char* bli_gks_l3_ukr_impl_string( l3ukr_t ukr, ind_t method, num_t dt ) // then query the ukernel function pointer for the given datatype from // that context. cntx_t* cntx = bli_gks_query_ind_cntx( method, dt ); - void* fp = bli_cntx_get_l3_vir_ukr_dt( dt, ukr, cntx ); + void_fp fp = bli_cntx_get_l3_vir_ukr_dt( dt, ukr, cntx ); // Check whether the ukernel function pointer is NULL for the given // datatype. If it is NULL, return the string for not applicable. @@ -698,8 +698,8 @@ kimpl_t bli_gks_l3_ukr_impl_type( l3ukr_t ukr, ind_t method, num_t dt ) // Query the native ukernel func_t from both the native and reference // contexts. - void* nat_fp = bli_cntx_get_l3_nat_ukr_dt( dt, ukr, nat_cntx ); - void* ref_fp = bli_cntx_get_l3_nat_ukr_dt( dt, ukr, &ref_cntx_l ); + void_fp nat_fp = bli_cntx_get_l3_nat_ukr_dt( dt, ukr, nat_cntx ); + void_fp ref_fp = bli_cntx_get_l3_nat_ukr_dt( dt, ukr, &ref_cntx_l ); if ( nat_fp == ref_fp ) return BLIS_REFERENCE_UKERNEL; else return BLIS_OPTIMIZED_UKERNEL; diff --git a/frame/base/bli_gks.h b/frame/base/bli_gks.h index f680a573e..b84dcfc97 100644 --- a/frame/base/bli_gks.h +++ b/frame/base/bli_gks.h @@ -42,7 +42,7 @@ void bli_gks_init_index( void ); cntx_t* bli_gks_lookup_nat_cntx( arch_t id ); cntx_t* bli_gks_lookup_ind_cntx( arch_t id, ind_t ind ); -void bli_gks_register_cntx( arch_t id, void* nat_fp, void* ref_fp, void* ind_fp ); +void bli_gks_register_cntx( arch_t id, void_fp nat_fp, void_fp ref_fp, void_fp ind_fp ); BLIS_EXPORT_BLIS cntx_t* bli_gks_query_cntx( void ); BLIS_EXPORT_BLIS cntx_t* bli_gks_query_nat_cntx( void ); diff --git a/frame/include/bli_macro_defs.h b/frame/include/bli_macro_defs.h index adeca1355..907a5a26c 100644 --- a/frame/include/bli_macro_defs.h +++ b/frame/include/bli_macro_defs.h @@ -140,6 +140,9 @@ #define PASTEBLACHK_(op) bla_ ## op ## _check #define PASTEBLACHK(op) PASTEBLACHK_(op) +#define PASTECH0_(op) op +#define PASTECH0(op) PASTECH0_(op) + #define PASTECH_(ch,op) ch ## op #define PASTECH(ch,op) PASTECH_(ch,op) diff --git a/frame/include/bli_param_macro_defs.h b/frame/include/bli_param_macro_defs.h index 8273ab343..c567666e0 100644 --- a/frame/include/bli_param_macro_defs.h +++ b/frame/include/bli_param_macro_defs.h @@ -962,23 +962,12 @@ static guint_t bli_pack_schema_index( pack_t schema ) // Increment a pointer by an integer fraction: // p0 + (num/dem) // where p0 is a pointer to a datatype of size sizeof_p0. -static void* bli_ptr_inc_by_frac( void* p0, siz_t sizeof_p0, dim_t num, dim_t den ) +static void_fp bli_ptr_inc_by_frac( void_fp p0, siz_t sizeof_p0, dim_t num, dim_t den ) { - return ( void* ) + return ( void_fp ) ( ( char* )p0 + ( ( num * ( dim_t )sizeof_p0 ) / den ) ); } -static bool_t bli_is_null( void* p ) -{ - return ( bool_t ) - ( p == NULL ); -} - -static bool_t bli_is_nonnull( void* p ) -{ - return ( bool_t ) - ( p != NULL ); -} // Set dimensions, increments, effective uplo/diagoff, etc for ONE matrix diff --git a/frame/include/bli_type_defs.h b/frame/include/bli_type_defs.h index 605338963..4218625ef 100644 --- a/frame/include/bli_type_defs.h +++ b/frame/include/bli_type_defs.h @@ -197,6 +197,16 @@ typedef double f77_double; typedef scomplex f77_scomplex; typedef dcomplex f77_dcomplex; +// -- Void function pointer types -- + +// Note: This type should be used in any situation where the address of a +// *function* will be conveyed or stored prior to it being typecast back +// to the correct function type. It does not need to be used when conveying +// or storing the address of *data* (such as an array of float or double). + +//typedef void (*void_fp)( void ); +typedef void* void_fp; + // // -- BLIS info bit field offsets ---------------------------------------------- @@ -1017,7 +1027,7 @@ struct cntl_s // Basic fields (usually required). opid_t family; bszid_t bszid; - void* var_func; + void_fp var_func; struct cntl_s* sub_prenode; struct cntl_s* sub_node; @@ -1050,7 +1060,7 @@ typedef struct blksz_s typedef struct func_s { // Kernel function address. - void* ptr[BLIS_NUM_FP_TYPES]; + void_fp ptr[BLIS_NUM_FP_TYPES]; } func_t; diff --git a/frame/ind/bli_ind.c b/frame/ind/bli_ind.c index 41419c6ce..09393e611 100644 --- a/frame/ind/bli_ind.c +++ b/frame/ind/bli_ind.c @@ -168,9 +168,9 @@ bool_t bli_ind_oper_has_avail( opid_t oper, num_t dt ) } #endif -void* bli_ind_oper_get_avail( opid_t oper, num_t dt ) +void_fp bli_ind_oper_get_avail( opid_t oper, num_t dt ) { - void* func_p; + void_fp func_p; if ( bli_opid_is_level3( oper ) ) { diff --git a/frame/ind/bli_ind.h b/frame/ind/bli_ind.h index e0f1e9608..645829d8b 100644 --- a/frame/ind/bli_ind.h +++ b/frame/ind/bli_ind.h @@ -51,21 +51,21 @@ void bli_ind_init( void ); void bli_ind_finalize( void ); -BLIS_EXPORT_BLIS void bli_ind_enable( ind_t method ); -BLIS_EXPORT_BLIS void bli_ind_disable( ind_t method ); -BLIS_EXPORT_BLIS void bli_ind_disable_all( void ); +BLIS_EXPORT_BLIS void bli_ind_enable( ind_t method ); +BLIS_EXPORT_BLIS void bli_ind_disable( ind_t method ); +BLIS_EXPORT_BLIS void bli_ind_disable_all( void ); -BLIS_EXPORT_BLIS void bli_ind_enable_dt( ind_t method, num_t dt ); -BLIS_EXPORT_BLIS void bli_ind_disable_dt( ind_t method, num_t dt ); -BLIS_EXPORT_BLIS void bli_ind_disable_all_dt( num_t dt ); +BLIS_EXPORT_BLIS void bli_ind_enable_dt( ind_t method, num_t dt ); +BLIS_EXPORT_BLIS void bli_ind_disable_dt( ind_t method, num_t dt ); +BLIS_EXPORT_BLIS void bli_ind_disable_all_dt( num_t dt ); -BLIS_EXPORT_BLIS void bli_ind_oper_enable_only( opid_t oper, ind_t method, num_t dt ); +BLIS_EXPORT_BLIS void bli_ind_oper_enable_only( opid_t oper, ind_t method, num_t dt ); -BLIS_EXPORT_BLIS bool_t bli_ind_oper_is_impl( opid_t oper, ind_t method ); +BLIS_EXPORT_BLIS bool_t bli_ind_oper_is_impl( opid_t oper, ind_t method ); //bool_t bli_ind_oper_has_avail( opid_t oper, num_t dt ); -BLIS_EXPORT_BLIS void* bli_ind_oper_get_avail( opid_t oper, num_t dt ); -BLIS_EXPORT_BLIS ind_t bli_ind_oper_find_avail( opid_t oper, num_t dt ); -BLIS_EXPORT_BLIS char* bli_ind_oper_get_avail_impl_string( opid_t oper, num_t dt ); +BLIS_EXPORT_BLIS void_fp bli_ind_oper_get_avail( opid_t oper, num_t dt ); +BLIS_EXPORT_BLIS ind_t bli_ind_oper_find_avail( opid_t oper, num_t dt ); +BLIS_EXPORT_BLIS char* bli_ind_oper_get_avail_impl_string( opid_t oper, num_t dt ); char* bli_ind_get_impl_string( ind_t method ); num_t bli_ind_map_cdt_to_index( num_t dt ); diff --git a/frame/ind/bli_l3_ind.c b/frame/ind/bli_l3_ind.c index 2cb75cae8..02a7668b8 100644 --- a/frame/ind/bli_l3_ind.c +++ b/frame/ind/bli_l3_ind.c @@ -35,7 +35,7 @@ #include "blis.h" -static void* bli_l3_ind_oper_fp[BLIS_NUM_IND_METHODS][BLIS_NUM_LEVEL3_OPS] = +static void_fp bli_l3_ind_oper_fp[BLIS_NUM_IND_METHODS][BLIS_NUM_LEVEL3_OPS] = { /* gemm hemm herk her2k symm syrk, syr2k trmm3 trmm trsm */ /* 3mh */ { bli_gemm3mh, bli_hemm3mh, bli_herk3mh, bli_her2k3mh, bli_symm3mh, @@ -87,7 +87,7 @@ bool_t bli_l3_ind_oper_st[BLIS_NUM_IND_METHODS][BLIS_NUM_LEVEL3_OPS][2] = #undef GENFUNC #define GENFUNC( opname, optype ) \ \ -void* PASTEMAC(opname,ind_get_avail)( num_t dt ) \ +void_fp PASTEMAC(opname,ind_get_avail)( num_t dt ) \ { \ return bli_ind_oper_get_avail( optype, dt ); \ } @@ -114,8 +114,8 @@ GENFUNC( trsm, BLIS_TRSM ) #if 0 bool_t bli_l3_ind_oper_is_avail( opid_t oper, ind_t method, num_t dt ) { - void* func; - bool_t stat; + void_fp func; + bool_t stat; // If the datatype is real, it is never available. if ( !bli_is_complex( dt ) ) return FALSE; @@ -146,7 +146,7 @@ ind_t bli_l3_ind_oper_find_avail( opid_t oper, num_t dt ) // current operation and datatype. for ( im = 0; im < BLIS_NUM_IND_METHODS; ++im ) { - void* func = bli_l3_ind_oper_get_func( oper, im ); + void_fp func = bli_l3_ind_oper_get_func( oper, im ); bool_t stat = bli_l3_ind_oper_get_enable( oper, im, dt ); if ( func != NULL && @@ -256,7 +256,7 @@ bool_t bli_l3_ind_oper_get_enable( opid_t oper, ind_t method, num_t dt ) // ----------------------------------------------------------------------------- -void* bli_l3_ind_oper_get_func( opid_t oper, ind_t method ) +void_fp bli_l3_ind_oper_get_func( opid_t oper, ind_t method ) { return bli_l3_ind_oper_fp[ method ][ oper ]; } diff --git a/frame/ind/bli_l3_ind.h b/frame/ind/bli_l3_ind.h index 693d3a4c2..216eaedcb 100644 --- a/frame/ind/bli_l3_ind.h +++ b/frame/ind/bli_l3_ind.h @@ -40,7 +40,7 @@ #undef GENPROT #define GENPROT( opname ) \ \ -void* PASTEMAC(opname,ind_get_avail)( num_t dt ); +void_fp PASTEMAC(opname,ind_get_avail)( num_t dt ); /*bool_t PASTEMAC(opname,ind_has_avail)( num_t dt ); */ GENPROT( gemm ) @@ -58,17 +58,17 @@ GENPROT( trsm ) //bool_t bli_l3_ind_oper_is_avail( opid_t oper, ind_t method, num_t dt ); -ind_t bli_l3_ind_oper_find_avail( opid_t oper, num_t dt ); +ind_t bli_l3_ind_oper_find_avail( opid_t oper, num_t dt ); -void bli_l3_ind_set_enable_dt( ind_t method, num_t dt, bool_t status ); +void bli_l3_ind_set_enable_dt( ind_t method, num_t dt, bool_t status ); -void bli_l3_ind_oper_enable_only( opid_t oper, ind_t method, num_t dt ); -void bli_l3_ind_oper_set_enable_all( opid_t oper, num_t dt, bool_t status ); +void bli_l3_ind_oper_enable_only( opid_t oper, ind_t method, num_t dt ); +void bli_l3_ind_oper_set_enable_all( opid_t oper, num_t dt, bool_t status ); -void bli_l3_ind_oper_set_enable( opid_t oper, ind_t method, num_t dt, bool_t status ); -bool_t bli_l3_ind_oper_get_enable( opid_t oper, ind_t method, num_t dt ); +void bli_l3_ind_oper_set_enable( opid_t oper, ind_t method, num_t dt, bool_t status ); +bool_t bli_l3_ind_oper_get_enable( opid_t oper, ind_t method, num_t dt ); -void* bli_l3_ind_oper_get_func( opid_t oper, ind_t method ); +void_fp bli_l3_ind_oper_get_func( opid_t oper, ind_t method ); #endif diff --git a/frame/ind/cntx/bli_cntx_ind_stage.c b/frame/ind/cntx/bli_cntx_ind_stage.c index 671be681d..b5c15d5d7 100644 --- a/frame/ind/cntx/bli_cntx_ind_stage.c +++ b/frame/ind/cntx/bli_cntx_ind_stage.c @@ -36,7 +36,7 @@ typedef void (*cntx_stage_ft)( dim_t stage, cntx_t* cntx ); -static void* bli_cntx_ind_stage_fp[BLIS_NUM_IND_METHODS] = +static void_fp bli_cntx_ind_stage_fp[BLIS_NUM_IND_METHODS] = { /* 3mh */ bli_cntx_3mh_stage, /* 3m1 */ bli_cntx_3m1_stage, diff --git a/frame/util/bli_util_fpa.c b/frame/util/bli_util_fpa.c index b68f608eb..e46163e89 100644 --- a/frame/util/bli_util_fpa.c +++ b/frame/util/bli_util_fpa.c @@ -70,7 +70,12 @@ GENFRONT( sumsqv ) #undef GENFRONT #define GENFRONT( opname ) \ \ -GENARRAY_FPA( void*, opname ); \ +/* +GENARRAY_FPA( void_fp, opname ); \ +*/ \ +\ +GENARRAY_FPA( PASTECH(opname,_vft), \ + PASTECH0(opname) ); \ \ PASTECH(opname,_vft) \ PASTEMAC(opname,_qfp)( num_t dt ) \ diff --git a/frame/util/bli_util_oapi.c b/frame/util/bli_util_oapi.c index f9f9b4c93..128b1f92e 100644 --- a/frame/util/bli_util_oapi.c +++ b/frame/util/bli_util_oapi.c @@ -66,7 +66,7 @@ void PASTEMAC(opname,EX_SUF) \ PASTEMAC(opname,_check)( x, asum ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -108,7 +108,7 @@ void PASTEMAC(opname,EX_SUF) \ PASTEMAC(opname,_check)( a ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -152,7 +152,7 @@ void PASTEMAC(opname,EX_SUF) \ PASTEMAC(opname,_check)( x, norm ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -201,7 +201,7 @@ void PASTEMAC(opname,EX_SUF) \ PASTEMAC(opname,_check)( x, norm ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -257,7 +257,7 @@ void PASTEMAC(opname,EX_SUF) \ } \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH(opname,_vft) f = \ PASTEMAC(opname,_qfp)( dt ); \ \ @@ -325,7 +325,7 @@ void PASTEMAC(opname,EX_SUF) \ } \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH(opname,_vft) f = \ PASTEMAC(opname,_qfp)( dt ); \ \ @@ -401,7 +401,7 @@ void PASTEMAC(opname,EX_SUF) \ PASTEMAC(opname,_check)( x ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -445,7 +445,7 @@ void PASTEMAC(opname,EX_SUF) \ PASTEMAC(opname,_check)( x ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ @@ -492,7 +492,7 @@ void PASTEMAC(opname,EX_SUF) \ PASTEMAC(opname,_check)( x, scale, sumsq ); \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH2(opname,BLIS_TAPI_EX_SUF,_vft) f = \ PASTEMAC2(opname,BLIS_TAPI_EX_SUF,_qfp)( dt ); \ \ diff --git a/sandbox/ref99/cntl/blx_gemm_cntl.c b/sandbox/ref99/cntl/blx_gemm_cntl.c index b26096855..33c97716a 100644 --- a/sandbox/ref99/cntl/blx_gemm_cntl.c +++ b/sandbox/ref99/cntl/blx_gemm_cntl.c @@ -55,9 +55,9 @@ cntl_t* blx_gemmbp_cntl_create pack_t schema_b ) { - void* macro_kernel_fp; - void* packa_fp; - void* packb_fp; + void_fp macro_kernel_fp; + void_fp packa_fp; + void_fp packb_fp; macro_kernel_fp = blx_gemm_ker_var2; @@ -158,7 +158,7 @@ cntl_t* blx_gemm_cntl_create_node ( opid_t family, bszid_t bszid, - void* var_func, + void_fp var_func, cntl_t* sub_node ) { diff --git a/sandbox/ref99/cntl/blx_gemm_cntl.h b/sandbox/ref99/cntl/blx_gemm_cntl.h index 80c26b8ac..223e8c8a9 100644 --- a/sandbox/ref99/cntl/blx_gemm_cntl.h +++ b/sandbox/ref99/cntl/blx_gemm_cntl.h @@ -62,7 +62,7 @@ cntl_t* blx_gemm_cntl_create_node ( opid_t family, bszid_t bszid, - void* var_func, + void_fp var_func, cntl_t* sub_node ); diff --git a/sandbox/ref99/cntl/blx_packm_cntl.c b/sandbox/ref99/cntl/blx_packm_cntl.c index 85a7c8578..2c2ba66ce 100644 --- a/sandbox/ref99/cntl/blx_packm_cntl.c +++ b/sandbox/ref99/cntl/blx_packm_cntl.c @@ -36,8 +36,8 @@ cntl_t* blx_packm_cntl_create_node ( - void* var_func, - void* packm_var_func, + void_fp var_func, + void_fp packm_var_func, bszid_t bmid_m, bszid_t bmid_n, bool_t does_invert_diag, diff --git a/sandbox/ref99/cntl/blx_packm_cntl.h b/sandbox/ref99/cntl/blx_packm_cntl.h index fbba97e1c..8776b913c 100644 --- a/sandbox/ref99/cntl/blx_packm_cntl.h +++ b/sandbox/ref99/cntl/blx_packm_cntl.h @@ -34,8 +34,8 @@ cntl_t* blx_packm_cntl_create_node ( - void* var_func, - void* packm_var_func, + void_fp var_func, + void_fp packm_var_func, bszid_t bmid_m, bszid_t bmid_n, bool_t does_invert_diag, diff --git a/testsuite/src/test_amaxv.c b/testsuite/src/test_amaxv.c index 82bd161ea..ed2a821fe 100644 --- a/testsuite/src/test_amaxv.c +++ b/testsuite/src/test_amaxv.c @@ -362,7 +362,7 @@ void PASTEMAC0(opname) \ */ \ \ /* Query a type-specific function pointer, except one that uses - void* instead of typed pointers. */ \ + void* for function arguments instead of typed pointers. */ \ PASTECH(tname,_vft) f = \ PASTEMAC(opname,_qfp)( dt ); \ \ From 959d8d906a2fc976cb3c9e13c67687d7c3ebc083 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 2 Apr 2019 17:45:13 -0500 Subject: [PATCH 046/109] Minor update to docs/HardwareSupport.md document. Details: - Added more details and clarifying language to implications of 1m and the recycling of microkernels between microarchitectures. --- docs/HardwareSupport.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/HardwareSupport.md b/docs/HardwareSupport.md index 41036d51c..adba02f19 100644 --- a/docs/HardwareSupport.md +++ b/docs/HardwareSupport.md @@ -12,8 +12,8 @@ The following table lists architectures for which there exist optimized level-3 A few remarks / reminders: * Optimizing only the [gemm microkernel](KernelsHowTo.md#gemm-microkernel) will result in optimal performance for all [level-3 operations](BLISTypedAPI#level-3-operations) except `trsm` (which will typically achieve 60 - 80% of attainable peak performance). * The [trsm](BLISTypedAPI#trsm) operation needs the [gemmtrsm microkernel(s)](KernelsHowTo.md#gemmtrsm-microkernels), in addition to the aforementioned [gemm microkernel](KernelsHowTo.md#gemm-microkernel), in order reach optimal performance. - * Induced complex (1m) implementations are employed in all situations where the real domain [gemm microkernel](KernelsHowTo.md#gemm-microkernel) of the corresponding precision is available. Please see our [ACM TOMS article on the 1m method](https://github.com/flame/blis#citations) for more info on this topic. - * Some microarchitectures use the same sub-configuration. This is not a typo. For example, Haswell and Broadwell systems as well as "desktop" (non-server) versions of Skylake, Kabylake, and Coffeelake all use the `haswell` sub-configuration and the kernels registered therein. + * Induced complex (1m) implementations are employed in all situations where the real domain [gemm microkernel](KernelsHowTo.md#gemm-microkernel) of the corresponding precision is available, but the "native" complex domain gemm microkernel is unavailable. Note that the table below lists native kernels, so if a microarchitecture lists only `sd`, support for both `c` and `z` datatypes will be provided via the 1m method. (Note: most people cannot tell the difference between native and 1m-based performance.) Please see our [ACM TOMS article on the 1m method](https://github.com/flame/blis#citations) for more info on this topic. + * Some microarchitectures use the same sub-configuration. *This is not a typo.* For example, Haswell and Broadwell systems as well as "desktop" (non-server) versions of Skylake, Kaby Lake, and Coffee Lake all use the `haswell` sub-configuration and the kernels registered therein. Microkernels can be recycled in this manner because the key detail that determines level-3 performance outcomes is actually the vector ISA, not the microarchitecture. In the previous example, all of the microarchitectures listed support AVX2 (but not AVX-512), and therefore they can reuse the same microkernels. * Remember that you (usually) don't have to choose your sub-configuration manually! Instead, you can always request configure-time hardware detection via `./configure auto`. This will defer to internal logic (based on CPUID for x86_64 systems) that will attempt to choose the appropriate sub-configuration automatically. | Vendor/Microarchitecture | BLIS sub-configuration | `gemm` | `gemmtrsm` | @@ -26,7 +26,7 @@ A few remarks / reminders: | Intel Core2 (SSE3) | `penryn` | `sd` | `d` | | Intel Sandy/Ivy Bridge (AVX/FMA3) | `sandybridge` | `sdcz` | | | Intel Haswell, Broadwell (AVX/FMA3) | `haswell` | `sdcz` | `sd` | -| Intel Sky/Kaby/Coffeelake (AVX/FMA3) | `haswell` | `sdcz` | `sd` | +| Intel Sky/Kaby/CoffeeLake (AVX/FMA3) | `haswell` | `sdcz` | `sd` | | Intel Knights Landing (AVX-512/FMA3) | `knl` | `sd` | | | Intel SkylakeX (AVX-512/FMA3) | `skx` | `sd` | | | ARMv7 Cortex-A9 (NEON) | `cortex-a9` | `sd` | | From c5b447e7859ec94e8cfdd5a48f301ee4a4b70fb5 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 9 Apr 2019 12:20:19 -0500 Subject: [PATCH 047/109] Minor bugfix to flatten-headers.py. Details: - Fixed a minor bug in flatten-headers.py whereby the script, upon encountering a #include directive for the root header file, would erroneously recurse and inline the conents of that root header. The script has been modified to avoid recursion into any headers that share the same name as the root-level header that was passed into the script. (Note: this bug didn't actually manifest in BLIS, so it's merely a precaution for usage of flatten-headers.py in other contexts.) --- build/flatten-headers.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/build/flatten-headers.py b/build/flatten-headers.py index 9599278d2..9f3f1402e 100755 --- a/build/flatten-headers.py +++ b/build/flatten-headers.py @@ -244,10 +244,24 @@ def flatten_header( inputfile, header_dirpaths, cursp ): # directive. header_path = get_header_path( header, header_dirpaths ) - # If the header was found, we recurse. Otherwise, we output - # the #include directive with a comment indicating that it - # was skipped. - if header_path: + # First, check if the header is our root header (and if so, ignore it). + # Otherwise, if the header was found, we recurse. Otherwise, we output + # the #include directive with a comment indicating that it as skipped + if header == root_file_name: + + markl = result.group(1) + markr = result.group(3) + + echov2( "%sthis is the root header '%s'; commenting out / skipping." \ + % ( cursp, header ) ) + + # If the header found is our root header, then we cannot + # recurse into it lest we enter an infinite loop. Output the + # line but make sure it's commented out entirely. + ostring += "%s #include %c%s%c %c" \ + % ( skipstr, markl, header, markr, '\n' ) + + elif header_path: echov2( "%slocated file '%s'; recursing." \ % ( cursp, header_path ) ) @@ -327,6 +341,7 @@ strip_comments = None recursive_flag = None verbose_flag = None regex = None +root_file_name = None def main(): @@ -336,6 +351,7 @@ def main(): global recursive_flag global verbose_flag global regex + global root_file_name # Obtain the script name. path, script_name = os.path.split(sys.argv[0]) @@ -397,6 +413,10 @@ def main(): temp_dir = args[2] dir_list = args[3] + # Save the filename (basename) part of the input file (or root file) into a + # global variable that we can access later from within flatten_header(). + root_file_name = os.path.basename( inputfile ) + # Separate the directories into distinct strings. dir_list = dir_list.split() From 184ba1b3d571e2402b509bfe806af71ecc6113c0 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Thu, 11 Apr 2019 18:33:08 -0500 Subject: [PATCH 048/109] GNU-like handling of installation prefix et al. Details: - Changed the default installation prefix from $HOME/lib to /usr/local. - Modified the way configure internally handles the prefix, libdir, includedir, and sharedir (and also added an --exec-prefix option). The defaults to these variables are set as follows: prefix: /usr/local exec_prefix: ${prefix} libdir: ${exec_prefix}/lib includedir: ${prefix}/include sharedir: ${prefix}/share The key change, aside from the addition of exec_prefix and its use to define the default to libdir, is that the variables are substituted into config.mk with quoting that delays evaluation, meaning the substituted values may contain unevaluated references to other variables (namely, ${prefix} and ${exec_prefix}). This more closely follows GNU conventions, including those used by GNU autoconf, and also allows make to override any one of the variables *after* configure has already been run (e.g. during 'make install'). - Updates to build/config.mk.in pursuant to above changes. - Updates to output of 'configure --help' pursuant to above changes. - Updated docs/BuildSystem.md to reflect the new default installation prefix, as well as mention EXECPREFIX and SHAREDIR. - Changed the definitions of the UNINSTALL_OLD_* variables in the top-level Makefile to use $(wildcard ...) instead of 'find'. This was motivated by the new way of handling prefix and friends, which leads to the 'find' command being run on /usr/local (by default), which can take a while almost never yielding any benefit (since the user will very rarely use the uninstall-old targets). - Removed periods from the end of descriptive output statements (i.e., non-verbose output) since those statements often end with file or directory paths, which get confusing to read when puctuated by a period. - Trival change to 'make showconfig' output. - Removed my name from 'configure --help'. (Many have contributed to it over the years.) - In configure script, changed the default state of threading_model variable from 'no' to 'off' to match that of debug_type, where there are similarly more than two valid states. ('no' is still accepted if given via the --enable-debug= option, though it will be standardized to 'off' prior to config.mk being written out.) - Minor variable name change in flatten-headers.py that was intended for 32812ff. - CREDITS file update. --- CREDITS | 1 + Makefile | 110 +++++++++++++-------------- build/config.mk.in | 34 +++++++-- configure | 180 ++++++++++++++++++++++++-------------------- docs/BuildSystem.md | 12 +-- 5 files changed, 186 insertions(+), 151 deletions(-) diff --git a/CREDITS b/CREDITS index 634aced15..1b076816e 100644 --- a/CREDITS +++ b/CREDITS @@ -24,6 +24,7 @@ but many others have contributed code and feedback, including Krzysztof Drewniak @krzysz00 Marat Dukhan @Maratyszcza (Google) Victor Eijkhout @VictorEijkhout (Texas Advanced Computing Center) + Evgeny Epifanovsky @epifanovsky (Q-Chem) Isuru Fernando @isuruf Roman Gareev @gareevroman Richard Goldschmidt @SuperFluffy diff --git a/Makefile b/Makefile index 2d31feeb0..9cc81c9d1 100644 --- a/Makefile +++ b/Makefile @@ -385,23 +385,22 @@ ifeq ($(IS_CONFIGURED),yes) # named with three .so version numbers. UNINSTALL_OLD_LIBS := -UNINSTALL_OLD_LIBS += $(shell $(FIND) $(INSTALL_LIBDIR)/ -name "$(LIBBLIS_SO).?.?.?" 2> /dev/null | $(GREP) -v "$(LIBBLIS).$(LIBBLIS_SO_MMB_EXT)") +UNINSTALL_OLD_LIBS += $(filter-out $(INSTALL_LIBDIR)/$(LIBBLIS).$(LIBBLIS_SO_MMB_EXT),$(wildcard $(INSTALL_LIBDIR)/$(LIBBLIS_SO).?.?.?)) # These shell commands gather the filepaths to any library symlink in the # current LIBDIR that might be left over from an old installation. We start # with symlinks named using the .so major version number. -UNINSTALL_OLD_SYML := $(shell $(FIND) $(INSTALL_LIBDIR)/ -name "$(LIBBLIS_SO).?" 2> /dev/null | $(GREP) -v "$(LIBBLIS_SO).$(SO_MAJOR)") +UNINSTALL_OLD_SYML := $(filter-out $(INSTALL_LIBDIR)/$(LIBBLIS_SO).$(SO_MAJOR),$(wildcard $(INSTALL_LIBDIR)/$(LIBBLIS_SO).?)) # We also prepare to uninstall older-style symlinks whose names contain the # BLIS version number and configuration family. -UNINSTALL_OLD_SYML += $(shell $(FIND) $(INSTALL_LIBDIR)/ -name "$(LIBBLIS)-*.a" 2> /dev/null | $(GREP) -v "$(LIBBLIS)-$(VERS_CONF).a") - -UNINSTALL_OLD_SYML += $(shell $(FIND) $(INSTALL_LIBDIR)/ -name "$(LIBBLIS)-*.$(SHLIB_EXT)" 2> /dev/null | $(GREP) -v "$(LIBBLIS)-$(VERS_CONF).$(SHLIB_EXT)") +UNINSTALL_OLD_SYML += $(wildcard $(INSTALL_LIBDIR)/$(LIBBLIS)-*.a) +UNINSTALL_OLD_SYML += $(wildcard $(INSTALL_LIBDIR)/$(LIBBLIS)-*.$(SHLIB_EXT)) # This shell command grabs all files named "*.h" that are not blis.h or cblas.h # in the installation directory. We consider this set of headers to be "old" and # eligible for removal upon running of the uninstall-old-headers target. -UNINSTALL_OLD_HEADERS := $(shell $(FIND) $(INSTALL_INCDIR)/blis/ -name "*.h" 2> /dev/null | $(GREP) -v "$(BLIS_H)" | $(GREP) -v "$(CBLAS_H)") +UNINSTALL_OLD_HEADERS := $(filter-out $(BLIS_H),$(filter-out $(CBLAS_H),$(wildcard $(INSTALL_INCDIR)/blis/*.h))) endif # IS_CONFIGURED @@ -1020,23 +1019,24 @@ endif # ifeq ($(IS_WIN),no) # --- Query current configuration --- showconfig: check-env - @echo "configuration family: $(CONFIG_NAME)" - @echo "sub-configurations: $(CONFIG_LIST)" - @echo "requisite kernels: $(KERNEL_LIST)" - @echo "kernel-to-config map: $(KCONFIG_MAP)" - @echo "-----------------------" - @echo "BLIS version string: $(VERSION)" - @echo ".so major version: $(SO_MAJOR)" - @echo ".so minor.build vers: $(SO_MINORB)" - @echo "install libdir: $(INSTALL_LIBDIR)" - @echo "install includedir: $(INSTALL_INCDIR)" - @echo "debugging status: $(DEBUG_TYPE)" - @echo "multithreading status: $(THREADING_MODEL)" - @echo "enable BLAS API? $(MK_ENABLE_BLAS)" - @echo "enable CBLAS API? $(MK_ENABLE_CBLAS)" - @echo "build static library? $(MK_ENABLE_STATIC)" - @echo "build shared library? $(MK_ENABLE_SHARED)" - @echo "ARG_MAX hack enabled? $(ARG_MAX_HACK)" + @echo "configuration family: $(CONFIG_NAME)" + @echo "sub-configurations: $(CONFIG_LIST)" + @echo "requisite kernels sets: $(KERNEL_LIST)" + @echo "kernel-to-config map: $(KCONFIG_MAP)" + @echo "-------------------------" + @echo "BLIS version string: $(VERSION)" + @echo ".so major version: $(SO_MAJOR)" + @echo ".so minor.build vers: $(SO_MINORB)" + @echo "install libdir: $(INSTALL_LIBDIR)" + @echo "install includedir: $(INSTALL_INCDIR)" + @echo "install sharedir: $(INSTALL_SHAREDIR)" + @echo "debugging status: $(DEBUG_TYPE)" + @echo "multithreading status: $(THREADING_MODEL)" + @echo "enable BLAS API? $(MK_ENABLE_BLAS)" + @echo "enable CBLAS API? $(MK_ENABLE_CBLAS)" + @echo "build static library? $(MK_ENABLE_STATIC)" + @echo "build shared library? $(MK_ENABLE_SHARED)" + @echo "ARG_MAX hack enabled? $(ARG_MAX_HACK)" # --- Clean rules --- @@ -1052,16 +1052,16 @@ ifneq ($(SANDBOX),) - $(FIND) $(SANDBOX_FRAG_PATH) -name "$(FRAGMENT_MK)" | $(XARGS) $(RM_F) endif else - @echo "Removing makefile fragments from $(CONFIG_FRAG_PATH)." + @echo "Removing makefile fragments from $(CONFIG_FRAG_PATH)" @- $(FIND) $(CONFIG_FRAG_PATH) -name "$(FRAGMENT_MK)" | $(XARGS) $(RM_F) - @echo "Removing makefile fragments from $(FRAME_FRAG_PATH)." + @echo "Removing makefile fragments from $(FRAME_FRAG_PATH)" @- $(FIND) $(FRAME_FRAG_PATH) -name "$(FRAGMENT_MK)" | $(XARGS) $(RM_F) - @echo "Removing makefile fragments from $(REFKERN_FRAG_PATH)." + @echo "Removing makefile fragments from $(REFKERN_FRAG_PATH)" @- $(FIND) $(REFKERN_FRAG_PATH) -name "$(FRAGMENT_MK)" | $(XARGS) $(RM_F) - @echo "Removing makefile fragments from $(KERNELS_FRAG_PATH)." + @echo "Removing makefile fragments from $(KERNELS_FRAG_PATH)" @- $(FIND) $(KERNELS_FRAG_PATH) -name "$(FRAGMENT_MK)" | $(XARGS) $(RM_F) ifneq ($(SANDBOX),) - @echo "Removing makefile fragments from $(SANDBOX_FRAG_PATH)." + @echo "Removing makefile fragments from $(SANDBOX_FRAG_PATH)" @- $(FIND) $(SANDBOX_FRAG_PATH) -name "$(FRAGMENT_MK)" | $(XARGS) $(RM_F) endif endif @@ -1073,7 +1073,7 @@ ifeq ($(ENABLE_VERBOSE),yes) $(RM_F) $(BLIS_H_FLAT) $(RM_F) $(CBLAS_H_FLAT) else - @echo "Removing flattened header files from $(BASE_INC_PATH)." + @echo "Removing flattened header files from $(BASE_INC_PATH)" @$(RM_F) $(BLIS_H_FLAT) @$(RM_F) $(CBLAS_H_FLAT) endif @@ -1086,9 +1086,9 @@ ifeq ($(ENABLE_VERBOSE),yes) - $(RM_F) $(LIBBLIS_A_PATH) - $(RM_F) $(LIBBLIS_SO_PATH) else - @echo "Removing object files from $(BASE_OBJ_PATH)." + @echo "Removing object files from $(BASE_OBJ_PATH)" @- $(FIND) $(BASE_OBJ_PATH) -name "*.o" | $(XARGS) $(RM_F) - @echo "Removing libraries from $(BASE_LIB_PATH)." + @echo "Removing libraries from $(BASE_LIB_PATH)" @- $(RM_F) $(LIBBLIS_A_PATH) @- $(RM_F) $(LIBBLIS_SO_PATH) endif @@ -1110,13 +1110,13 @@ ifeq ($(ENABLE_VERBOSE),yes) - $(RM_F) $(BLASTEST_DRV_BIN_PATHS) - $(RM_F) $(addprefix out.,$(BLASTEST_DRV_BASES)) else - @echo "Removing object files from $(BASE_OBJ_BLASTEST_PATH)." + @echo "Removing object files from $(BASE_OBJ_BLASTEST_PATH)" @- $(RM_F) $(BLASTEST_F2C_OBJS) $(BLASTEST_DRV_OBJS) - @echo "Removing libf2c.a from $(BASE_OBJ_BLASTEST_PATH)." + @echo "Removing libf2c.a from $(BASE_OBJ_BLASTEST_PATH)" @- $(RM_F) $(BLASTEST_F2C_LIB) - @echo "Removing binaries from $(BASE_OBJ_BLASTEST_PATH)." + @echo "Removing binaries from $(BASE_OBJ_BLASTEST_PATH)" @- $(RM_F) $(BLASTEST_DRV_BIN_PATHS) - @echo "Removing driver output files 'out.*'." + @echo "Removing driver output files 'out.*'" @- $(RM_F) $(addprefix out.,$(BLASTEST_DRV_BASES)) endif # ENABLE_VERBOSE endif # IS_CONFIGURED @@ -1129,13 +1129,13 @@ ifeq ($(ENABLE_VERBOSE),yes) - $(RM_F) $(BLASTEST_DIR)/$(BLASTEST_F2C_LIB_NAME) - $(RM_F) $(addprefix $(BLASTEST_DIR)/out.,$(BLASTEST_DRV_BASES)) else - @echo "Removing object files from ./$(BLASTEST_DIR)/$(OBJ_DIR)." + @echo "Removing object files from ./$(BLASTEST_DIR)/$(OBJ_DIR)" @- $(FIND) $(BLASTEST_DIR)/$(OBJ_DIR) -name "*.o" | $(XARGS) $(RM_F) - @echo "Removing libf2c.a from ./$(BLASTEST_DIR)." + @echo "Removing libf2c.a from ./$(BLASTEST_DIR)" @- $(RM_F) $(BLASTEST_DIR)/$(BLASTEST_F2C_LIB_NAME) - @echo "Removing binaries from ./$(BLASTEST_DIR)." + @echo "Removing binaries from ./$(BLASTEST_DIR)" @- $(FIND) $(BLASTEST_DIR) -name "*.x" | $(XARGS) $(RM_F) - @echo "Removing driver output files 'out.*' from ./$(BLASTEST_DIR)." + @echo "Removing driver output files 'out.*' from ./$(BLASTEST_DIR)" @- $(RM_F) $(addprefix $(BLASTEST_DIR)/out.,$(BLASTEST_DRV_BASES)) endif # ENABLE_VERBOSE endif # IS_CONFIGURED @@ -1153,11 +1153,11 @@ ifeq ($(ENABLE_VERBOSE),yes) - $(RM_F) $(TESTSUITE_BIN) - $(RM_F) $(TESTSUITE_OUT_FILE) else - @echo "Removing object files from $(BASE_OBJ_TESTSUITE_PATH)." + @echo "Removing object files from $(BASE_OBJ_TESTSUITE_PATH)" @- $(RM_F) $(MK_TESTSUITE_OBJS) - @echo "Removing binary $(TESTSUITE_BIN)." + @echo "Removing binary $(TESTSUITE_BIN)" @- $(RM_F) $(TESTSUITE_BIN) - @echo "Removing $(TESTSUITE_OUT_FILE)." + @echo "Removing $(TESTSUITE_OUT_FILE)" @- $(RM_F) $(TESTSUITE_OUT_FILE) endif # ENABLE_VERBOSE endif # IS_CONFIGURED @@ -1168,9 +1168,9 @@ ifeq ($(ENABLE_VERBOSE),yes) - $(FIND) $(TESTSUITE_DIR)/$(OBJ_DIR) -name "*.o" | $(XARGS) $(RM_F) - $(RM_F) $(TESTSUITE_DIR)/$(TESTSUITE_BIN) else - @echo "Removing object files from $(TESTSUITE_DIR)/$(OBJ_DIR)." + @echo "Removing object files from $(TESTSUITE_DIR)/$(OBJ_DIR)" @- $(FIND) $(TESTSUITE_DIR)/$(OBJ_DIR) -name "*.o" | $(XARGS) $(RM_F) - @echo "Removing binary $(TESTSUITE_DIR)/$(TESTSUITE_BIN)." + @echo "Removing binary $(TESTSUITE_DIR)/$(TESTSUITE_BIN)" @- $(RM_F) $(TESTSUITE_DIR)/$(TESTSUITE_BIN) endif # ENABLE_VERBOSE endif # IS_CONFIGURED @@ -1184,15 +1184,15 @@ ifeq ($(ENABLE_VERBOSE),yes) - $(RM_RF) $(LIB_DIR) - $(RM_RF) $(INCLUDE_DIR) else - @echo "Removing $(BLIS_CONFIG_H)." + @echo "Removing $(BLIS_CONFIG_H)" @$(RM_F) $(BLIS_CONFIG_H) - @echo "Removing $(CONFIG_MK_FILE)." + @echo "Removing $(CONFIG_MK_FILE)" @- $(RM_F) $(CONFIG_MK_FILE) - @echo "Removing $(OBJ_DIR)." + @echo "Removing $(OBJ_DIR)" @- $(RM_RF) $(OBJ_DIR) - @echo "Removing $(LIB_DIR)." + @echo "Removing $(LIB_DIR)" @- $(RM_RF) $(LIB_DIR) - @echo "Removing $(INCLUDE_DIR)." + @echo "Removing $(INCLUDE_DIR)" @- $(RM_RF) $(INCLUDE_DIR) endif endif @@ -1201,7 +1201,7 @@ endif # --- CHANGELOG rules --- changelog: - @echo "Updating '$(DIST_PATH)/$(CHANGELOG)' via '$(GIT_LOG)'." + @echo "Updating '$(DIST_PATH)/$(CHANGELOG)' via '$(GIT_LOG)'" @$(GIT_LOG) > $(DIST_PATH)/$(CHANGELOG) @@ -1216,7 +1216,7 @@ uninstall-libs: check-env ifeq ($(ENABLE_VERBOSE),yes) - $(RM_F) $(MK_LIBS_INST) else - @echo "Uninstalling libraries $(notdir $(MK_LIBS_INST)) from $(dir $(firstword $(MK_LIBS_INST)))." + @echo "Uninstalling libraries $(notdir $(MK_LIBS_INST)) from $(dir $(firstword $(MK_LIBS_INST)))" @- $(RM_F) $(MK_LIBS_INST) endif @@ -1224,7 +1224,7 @@ uninstall-lib-symlinks: check-env ifeq ($(ENABLE_VERBOSE),yes) - $(RM_F) $(MK_LIBS_SYML) else - @echo "Uninstalling symlinks $(notdir $(MK_LIBS_SYML)) from $(dir $(firstword $(MK_LIBS_SYML)))." + @echo "Uninstalling symlinks $(notdir $(MK_LIBS_SYML)) from $(dir $(firstword $(MK_LIBS_SYML)))" @- $(RM_F) $(MK_LIBS_SYML) endif @@ -1232,7 +1232,7 @@ uninstall-headers: check-env ifeq ($(ENABLE_VERBOSE),yes) - $(RM_RF) $(MK_INCL_DIR_INST) else - @echo "Uninstalling directory '$(notdir $(MK_INCL_DIR_INST))' from $(dir $(MK_INCL_DIR_INST))." + @echo "Uninstalling directory '$(notdir $(MK_INCL_DIR_INST))' from $(dir $(MK_INCL_DIR_INST))" @- $(RM_RF) $(MK_INCL_DIR_INST) endif @@ -1240,7 +1240,7 @@ uninstall-share: check-env ifeq ($(ENABLE_VERBOSE),yes) - $(RM_RF) $(MK_SHARE_DIR_INST) else - @echo "Uninstalling directory '$(notdir $(MK_SHARE_DIR_INST))' from $(dir $(MK_SHARE_DIR_INST))." + @echo "Uninstalling directory '$(notdir $(MK_SHARE_DIR_INST))' from $(dir $(MK_SHARE_DIR_INST))" @- $(RM_RF) $(MK_SHARE_DIR_INST) endif @@ -1256,7 +1256,7 @@ $(UNINSTALL_OLD_LIBS) $(UNINSTALL_OLD_SYML) $(UNINSTALL_OLD_HEADERS): check-env ifeq ($(ENABLE_VERBOSE),yes) - $(RM_F) $@ else - @echo "Uninstalling $(@F) from $(@D)/." + @echo "Uninstalling $(@F) from $(@D)/" @- $(RM_F) $@ endif diff --git a/build/config.mk.in b/build/config.mk.in index 15704422d..0516ec97b 100644 --- a/build/config.mk.in +++ b/build/config.mk.in @@ -115,13 +115,33 @@ THREADING_MODEL := @threading_model@ # Whether the compiler supports "#pragma omp simd" via the -fopenmp-simd option. PRAGMA_OMP_SIMD := @pragma_omp_simd@ -# The install libdir, includedir, and shareddir values from configure tell -# us where to install the libraries, header files, and public makefile -# fragments, respectively. Notice that we support the use of DESTDIR so that -# advanced users may install to a temporary location. -INSTALL_LIBDIR := $(DESTDIR)@install_libdir@ -INSTALL_INCDIR := $(DESTDIR)@install_incdir@ -INSTALL_SHAREDIR := $(DESTDIR)@install_sharedir@ +# The installation prefix, exec_prefix, libdir, includedir, and shareddir +# values from configure tell us where to install the libraries, header files, +# and public makefile fragments. We must first assign each substituted +# @anchor@ to its own variable. Why? Because the subsitutions may contain +# unevaluated variable expressions. For example, '@libdir@' may be replaced +# with '${exec_prefix}/lib'. By assigning the anchors to variables first, and +# then assigning them to their final INSTALL_* variables, we allow prefix and +# exec_prefix to be used in the definitions of exec_prefix, libdir, +# includedir, and sharedir. +prefix := @prefix@ +exec_prefix := @exec_prefix@ +libdir := @libdir@ +includedir := @includedir@ +sharedir := @sharedir@ + +# Notice that we support the use of DESTDIR so that advanced users may install +# to a temporary location. +INSTALL_LIBDIR := $(DESTDIR)$(libdir) +INSTALL_INCDIR := $(DESTDIR)$(includedir) +INSTALL_SHAREDIR := $(DESTDIR)$(sharedir) + +#$(info prefix = $(prefix) ) +#$(info exec_prefix = $(exec_prefix) ) +#$(info libdir = $(libdir) ) +#$(info includedir = $(includedir) ) +#$(info sharedir = $(sharedir) ) +#$(error .) # Whether to output verbose command-line feedback as the Makefile is # processed. diff --git a/configure b/configure index dfdb7975c..778679aec 100755 --- a/configure +++ b/configure @@ -51,8 +51,6 @@ print_usage() #echo " " #echo " BLIS ${version}" echo " " - echo " Field G. Van Zee" - echo " " echo " Configure BLIS's build system for compilation using a specified" echo " configuration directory." echo " " @@ -72,30 +70,37 @@ print_usage() echo " " echo " -p PREFIX, --prefix=PREFIX" echo " " - echo " The path to which make will install all build products." - echo " If given, this option implies the following options:" - echo " --libdir=PREFIX/lib" - echo " --incdir=PREFIX/include" + echo " The common installation prefix for all files. If given," + echo " this option effectively implies:" + echo " --libdir=EXECPREFIX/lib" + echo " --includedir=PREFIX/include" echo " --sharedir=PREFIX/share" - echo " If not given, PREFIX defaults to \$(HOME)/blis. If PREFIX" + echo " where EXECPREFIX defaults to PREFIX. If this option is" + echo " not given, PREFIX defaults to '${prefix_def}'. If PREFIX" echo " refers to a directory that does not exist, it will be" echo " created." echo " " + echo " --exec-prefix=EXECPREFIX" + echo " " + echo " The installation prefix for libraries. Specifically, if" + echo " given, this option effectively implies:" + echo " --libdir=EXECPREFIX/lib" + echo " If not given, EXECPREFIX defaults to PREFIX, which may be" + echo " modified by the --prefix option. If EXECPREFIX refers to" + echo " a directory that does not exist, it will be created." + echo " " echo " --libdir=LIBDIR" echo " " - echo " The path to which make will install libraries. If given," - echo " LIBDIR will override the corresponding directory implied" - echo " by --prefix; if not not given, LIBDIR defaults to" - echo " PREFIX/lib. If LIBDIR refers to a directory that does" - echo " not exist, it will be created." + echo " The path to which make will install libraries. If not" + echo " given, LIBDIR defaults to PREFIX/lib. If LIBDIR refers to" + echo " a directory that does not exist, it will be created." echo " " echo " --includedir=INCDIR" echo " " echo " The path to which make will install development header" - echo " files. If given, INCDIR will override the corresponding" - echo " directory implied by --prefix; if not given, INCDIR" - echo " defaults to PREFIX/include. If INCDIR refers to a" - echo " directory that does not exist, it will be created." + echo " files. If not given, INCDIR defaults to PREFIX/include." + echo " If INCDIR refers to a directory that does not exist, it" + echo " will be created." echo " " echo " --sharedir=SHAREDIR" echo " " @@ -104,11 +109,9 @@ print_usage() echo " and LDFLAGS). These files allow certain BLIS makefiles," echo " such as those in the examples or testsuite directories, to" echo " operate on an installed copy of BLIS rather than a local" - echo " (and possibly uninstalled) copy. If given, SHAREDIR will" - echo " override the corresponding directory implied by --prefix;" - echo " if not given, SHAREDIR defaults to PREFIX/share. If" - echo " SHAREDIR refers to a directory that does not exist, it" - echo " will be created." + echo " (and possibly uninstalled) copy. If not given, SHAREDIR" + echo " defaults to PREFIX/share. If SHAREDIR refers to a" + echo " directory that does not exist, it will be created." echo " " echo " --enable-verbose-make, --disable-verbose-make" echo " " @@ -1762,21 +1765,33 @@ main() # -- configure options -- - # The user-given install prefix and a flag indicating it was given. - #install_prefix_def="${HOME}/blis" - install_prefix_user=${HOME}/blis # default to this directory. + # Define the default prefix so that the print_usage() function can + # output it in the --help text. + prefix_def='/usr/local' + + # The installation prefix, assigned its default value, and a flag to + # track whether or not it was given by the user. + prefix=${prefix_def} prefix_flag='' - # The user-given install libdir and a flag indicating it was given. - install_libdir_user='' + # The installation exec_prefix, assigned its default value, and a flag to + # track whether or not it was given by the user. + exec_prefix='${prefix}' + exec_prefix_flag='' + + # The installation libdir, assigned its default value, and a flag to + # track whether or not it was given by the user. + libdir='${exec_prefix}/lib' libdir_flag='' - # The user-given install includedir and a flag indicating it was given. - install_incdir_user='' - incdir_flag='' + # The installation includedir, assigned its default value, and a flag to + # track whether or not it was given by the user. + includedir='${prefix}/include' + includedir_flag='' - # The user-given install sharedir and a flag indicating it was given. - install_sharedir_user='' + # The installation sharedir, assigned its default value, and a flag to + # track whether or not it was given by the user. + sharedir='${prefix}/share' sharedir_flag='' # The preset value of CFLAGS and LDFLAGS (ie: compiler and linker flags @@ -1789,7 +1804,7 @@ main() debug_flag='' # The threading flag. - threading_model='no' + threading_model='off' # The method of assigning micropanels to threads in the JR and JR loops. thread_part_jrir='slab' @@ -1865,19 +1880,23 @@ main() ;; prefix=*) prefix_flag=1 - install_prefix_user=${OPTARG#*=} + prefix=${OPTARG#*=} + ;; + exec-prefix=*) + exec_prefix_flag=1 + exec_prefix=${OPTARG#*=} ;; libdir=*) libdir_flag=1 - install_libdir_user=${OPTARG#*=} + libdir=${OPTARG#*=} ;; includedir=*) - incdir_flag=1 - install_incdir_user=${OPTARG#*=} + includedir_flag=1 + includedir=${OPTARG#*=} ;; sharedir=*) sharedir_flag=1 - install_sharedir_user=${OPTARG#*=} + sharedir=${OPTARG#*=} ;; enable-debug) debug_flag=1 @@ -1920,12 +1939,12 @@ main() enable-threading=*) threading_model=${OPTARG#*=} ;; + disable-threading) + threading_model='off' + ;; thread-part-jrir=*) thread_part_jrir=${OPTARG#*=} ;; - disable-threading) - threading_model='no' - ;; enable-pba-pools) enable_pba_pools='yes' ;; @@ -2002,7 +2021,7 @@ main() ;; p) prefix_flag=1 - install_prefix_user=$OPTARG + prefix=$OPTARG ;; d) debug_flag=1 @@ -2497,54 +2516,49 @@ main() # -- Prepare variables for subsitution into template files ----------------- - # Parse the status of the install prefix and echo feedback. + # Parse the status of the prefix option and echo feedback. if [ -n "${prefix_flag}" ]; then - echo "${script_name}: detected --prefix='${install_prefix_user}'." + echo "${script_name}: detected --prefix='${prefix}'." else - echo "${script_name}: no install prefix option given; defaulting to '${install_prefix_user}'." + echo "${script_name}: no install prefix option given; defaulting to '${prefix}'." fi - # Set initial (candidate) values for the libdir and includedir using the - # install prefix that was determined above. - install_libdir=${install_prefix_user}/lib - install_incdir=${install_prefix_user}/include - install_sharedir=${install_prefix_user}/share + # Parse the status of the exec_prefix option and echo feedback. + if [ -n "${exec_prefix_flag}" ]; then + echo "${script_name}: detected --exec-prefix='${exec_prefix}'." + else + echo "${script_name}: no install exec_prefix option given; defaulting to PREFIX." + fi - # Set the install libdir, if it was specified. Note that this will override - # the default libdir implied by the install prefix, even if both options - # were given. + # Parse the status of the libdir option and echo feedback. if [ -n "${libdir_flag}" ]; then - echo "${script_name}: detected --libdir='${install_libdir_user}'." - install_libdir=${install_libdir_user} + echo "${script_name}: detected --libdir='${libdir}'." else - echo "${script_name}: no install libdir option given; defaulting to PREFIX/lib." + echo "${script_name}: no install libdir option given; defaulting to EXECPREFIX/lib." fi - # Set the install includedir, if it was specified. Note that this will - # override the default includedir implied by the install prefix, even if - # both options were given. - if [ -n "${incdir_flag}" ]; then - echo "${script_name}: detected --includedir='${install_incdir_user}'." - install_incdir=${install_incdir_user} + # Parse the status of the includedir option and echo feedback. + if [ -n "${includedir_flag}" ]; then + echo "${script_name}: detected --includedir='${includedir}'." else echo "${script_name}: no install includedir option given; defaulting to PREFIX/include." fi - # Set the install sharedir, if it was specified. Note that this will - # override the default sharedir implied by the install prefix, even if - # both options were given. + # Parse the status of the sharedir option and echo feedback. if [ -n "${sharedir_flag}" ]; then - echo "${script_name}: detected --sharedir='${install_sharedir_user}'." - install_sharedir=${install_sharedir_user} + echo "${script_name}: detected --sharedir='${sharedir}'." else echo "${script_name}: no install sharedir option given; defaulting to PREFIX/share." fi # Echo the installation directories that we settled on. echo "${script_name}: final installation directories:" - echo "${script_name}: libdir: ${install_libdir}" - echo "${script_name}: includedir: ${install_incdir}" - echo "${script_name}: sharedir: ${install_sharedir}" + echo "${script_name}: prefix: "${prefix} + echo "${script_name}: exec_prefix: "${exec_prefix} + echo "${script_name}: libdir: "${libdir} + echo "${script_name}: includedir: "${includedir} + echo "${script_name}: sharedir: "${sharedir} + echo "${script_name}: NOTE: the variables above can be overridden when running make." # Check if CFLAGS is non-empty. if [ -n "${CFLAGS}" ]; then @@ -2649,9 +2663,11 @@ main() enable_pthreads='yes' enable_pthreads_01=1 threading_model="pthreads" # Standardize the value. - elif [ "x${threading_model}" = "xno" ] || + elif [ "x${threading_model}" = "xoff" ] || + [ "x${threading_model}" = "xno" ] || [ "x${threading_model}" = "xnone" ]; then echo "${script_name}: threading is disabled." + threading_model="off" else echo "${script_name}: *** Unsupported threading model: ${threading_model}." exit 1 @@ -2813,13 +2829,15 @@ main() # Variables that may contain forward slashes, such as paths, need extra # escaping when used in sed commands. We insert those extra escape # characters here so that the sed commands below do the right thing. - os_name_esc=$(echo "${os_name}" | sed 's/\//\\\//g') - install_libdir_esc=$(echo "${install_libdir}" | sed 's/\//\\\//g') - install_incdir_esc=$(echo "${install_incdir}" | sed 's/\//\\\//g') - install_sharedir_esc=$(echo "${install_sharedir}" | sed 's/\//\\\//g') - dist_path_esc=$(echo "${dist_path}" | sed 's/\//\\\//g') - cc_esc=$(echo "${found_cc}" | sed 's/\//\\\//g') - cxx_esc=$(echo "${found_cxx}" | sed 's/\//\\\//g') + os_name_esc=$(echo "${os_name}" | sed 's/\//\\\//g') + prefix_esc=$(echo "${prefix}" | sed 's/\//\\\//g') + exec_prefix_esc=$(echo "${exec_prefix}" | sed 's/\//\\\//g') + libdir_esc=$(echo "${libdir}" | sed 's/\//\\\//g') + includedir_esc=$(echo "${includedir}" | sed 's/\//\\\//g') + sharedir_esc=$(echo "${sharedir}" | sed 's/\//\\\//g') + dist_path_esc=$(echo "${dist_path}" | sed 's/\//\\\//g') + cc_esc=$(echo "${found_cc}" | sed 's/\//\\\//g') + cxx_esc=$(echo "${found_cxx}" | sed 's/\//\\\//g') #sandbox_relpath_esc=$(echo "${sandbox_relpath}" | sed 's/\//\\\//g') # For RANLIB, if the variable is not set, we use a default value of @@ -2926,9 +2944,11 @@ main() | sed -e "s/@ldflags_preset@/${ldflags_preset_esc}/g" \ | sed -e "s/@debug_type@/${debug_type}/g" \ | sed -e "s/@threading_model@/${threading_model}/g" \ - | sed -e "s/@install_libdir@/${install_libdir_esc}/g" \ - | sed -e "s/@install_incdir@/${install_incdir_esc}/g" \ - | sed -e "s/@install_sharedir@/${install_sharedir_esc}/g" \ + | sed -e "s/@prefix@/${prefix_esc}/g" \ + | sed -e "s/@exec_prefix@/${exec_prefix_esc}/g" \ + | sed -e "s/@libdir@/${libdir_esc}/g" \ + | sed -e "s/@includedir@/${includedir_esc}/g" \ + | sed -e "s/@sharedir@/${sharedir_esc}/g" \ | sed -e "s/@enable_verbose@/${enable_verbose}/g" \ | sed -e "s/@configured_oot@/${configured_oot}/g" \ | sed -e "s/@enable_arg_max_hack@/${enable_arg_max_hack}/g" \ diff --git a/docs/BuildSystem.md b/docs/BuildSystem.md index 9d1730bf4..28137d8b3 100644 --- a/docs/BuildSystem.md +++ b/docs/BuildSystem.md @@ -90,7 +90,7 @@ However, as of this writing, only a limited number of architectures are detected Upon running configure, you will get output similar to the following. The exact output will depend on whether you cloned BLIS from a `git` repository or whether you obtained BLIS via a downloadable tarball from the [releases](https://github.com/flame/blis/releases) page. ``` -$ ./configure haswell +$ ./configure --prefix=$HOME/blis haswell configure: using 'gcc' compiler. configure: found gcc version 5.4.0 (maj: 5, min: 4, rev: 0). configure: checking for blacklisted configurations due to gcc 5.4.0. @@ -169,17 +169,11 @@ The installation prefix can be specified via the `--prefix=PREFIX` option: ``` $ ./configure --prefix=/usr ``` -This will cause libraries to eventually be installed (via `make install`) to `PREFIX/lib` and development headers to be installed to `PREFIX/include`. (The default value of `PREFIX` is `$(HOME)/blis`.) You can also specify the library install directory separately from the development header install directory with the `--libdir=LIBDIR` and `--includedir=INCDIR` options, respectively: +This will cause libraries to eventually be installed (via `make install`) to `PREFIX/lib` and development headers to be installed to `PREFIX/include`. (The default value of `PREFIX` is `/usr/local`.) You can also specify the library install directory separately from the development header install directory with the `--libdir=LIBDIR` and `--includedir=INCDIR` options, respectively: ``` $ ./configure --libdir=/usr/lib --includedir=/usr/include ``` -The `--libdir=LIBDIR` and `--includedir=INCDIR` options will override any `PREFIX` path, whether it was specified explicitly via `--prefix` or implicitly (via the default). That is, `LIBDIR` defaults to `PREFIX/lib` and `INCDIR` defaults to `PREFIX/include`, but each will be overriden by their respective `--libdir`/`--includedir` options. So, -``` -$ ./configure --libdir=/usr/lib - -``` -will configure BLIS to install libraries to `/usr/lib` and header files to the default location (`$HOME/blis/include`). -Also, note that `configure` will create any installation directories that do not already exist. +The `--libdir=LIBDIR` and `--includedir=INCDIR` options will override any path implied by `PREFIX`, whether it was specified explicitly via `--prefix` or implicitly (via the default). That is, `LIBDIR` defaults to `EXECPREFIX/lib` (where `EXECPREFIX`, set via `--exec-prefix=EXECPREFIX`, defaults to `PREFIX`) and `INCDIR` defaults to `PREFIX/include`, but `LIBDIR` and `INCDIR` will each be overriden by their respective `--libdir`/`--includedir` options. There is a third related option, `--sharedir=SHAREDIR`, where `SHAREDIR` defaults to `PREFIX/share`. This option specifies the installation directory for certain makefile fragments that contain variables determined by `configure` (e.g. `CC`, `CFLAGS`, `LDFLAGS`, etc.). These files allow certain BLIS makefiles, such as those in the `examples` or `testsuite` directories, to operate on an installed copy of BLIS rather than a local (and possibly uninstalled) copy. For a complete list of supported `configure` options and arguments, run `configure` with the `-h` option: ``` From f205eeab64779a3b76bfeb8e19b9b369b2313ea8 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 16 Apr 2019 12:50:01 -0500 Subject: [PATCH 049/109] Applied forgotten variable rename from 89a70cc. Details: - Somehow the variable name change (root_file_name -> root_inputname) in flatten-headers.py mentioned in the commit log entry for 89a70cc didn't make it into the actual commit. This commit applies that change. --- build/flatten-headers.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build/flatten-headers.py b/build/flatten-headers.py index 9f3f1402e..563725a7e 100755 --- a/build/flatten-headers.py +++ b/build/flatten-headers.py @@ -247,7 +247,7 @@ def flatten_header( inputfile, header_dirpaths, cursp ): # First, check if the header is our root header (and if so, ignore it). # Otherwise, if the header was found, we recurse. Otherwise, we output # the #include directive with a comment indicating that it as skipped - if header == root_file_name: + if header == root_inputfile: markl = result.group(1) markr = result.group(3) @@ -341,7 +341,7 @@ strip_comments = None recursive_flag = None verbose_flag = None regex = None -root_file_name = None +root_inputfile = None def main(): @@ -351,7 +351,7 @@ def main(): global recursive_flag global verbose_flag global regex - global root_file_name + global root_inputfile # Obtain the script name. path, script_name = os.path.split(sys.argv[0]) @@ -415,7 +415,7 @@ def main(): # Save the filename (basename) part of the input file (or root file) into a # global variable that we can access later from within flatten_header(). - root_file_name = os.path.basename( inputfile ) + root_inputfile = os.path.basename( inputfile ) # Separate the directories into distinct strings. dir_list = dir_list.split() From f73cef483e8b3ddfc7d57c5fa8230b12250d92e4 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Wed, 17 Apr 2019 13:34:44 -0500 Subject: [PATCH 050/109] Support row storage in Eigen gemm test/3 driver. Details: - Added preprocessor branches to test/3/test_gemm.c to explicitly support row-stored matrices. Column-stored matrices are also still supported (and is the default for now). (This is mainly residual work leftover from initial integration of Eigen into the test drivers, so if we ever want to test Eigen with row-stored matrices, the code will be ready to use, even if it is not yet integrated into the Makefile in test/3.) --- test/3/test_gemm.c | 71 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 59 insertions(+), 12 deletions(-) diff --git a/test/3/test_gemm.c b/test/3/test_gemm.c index 6289ee8b1..e7b6a9435 100644 --- a/test/3/test_gemm.c +++ b/test/3/test_gemm.c @@ -43,6 +43,9 @@ #include "blis.h" #endif +//#define COL_STORAGE +#define ROW_STORAGE + //#define PRINT int main( int argc, char** argv ) @@ -77,6 +80,7 @@ int main( int argc, char** argv ) ind = IND; +#if 1 p_begin = P_BEGIN; p_max = P_MAX; p_inc = P_INC; @@ -84,6 +88,15 @@ int main( int argc, char** argv ) m_input = -1; n_input = -1; k_input = -1; +#else + p_begin = 40; + p_max = 1000; + p_inc = 40; + + m_input = -1; + n_input = -1; + k_input = -1; +#endif // Supress compiler warnings about unused variable 'ind'. @@ -147,10 +160,17 @@ int main( int argc, char** argv ) bli_obj_create( dt, 1, 1, 0, 0, &alpha ); bli_obj_create( dt, 1, 1, 0, 0, &beta ); + #ifdef COL_STORAGE bli_obj_create( dt, m, k, 0, 0, &a ); bli_obj_create( dt, k, n, 0, 0, &b ); bli_obj_create( dt, m, n, 0, 0, &c ); bli_obj_create( dt, m, n, 0, 0, &c_save ); + #else + bli_obj_create( dt, m, k, k, 1, &a ); + bli_obj_create( dt, k, n, n, 1, &b ); + bli_obj_create( dt, m, n, n, 1, &c ); + bli_obj_create( dt, m, n, n, 1, &c_save ); + #endif bli_randm( &a ); bli_randm( &b ); @@ -178,30 +198,57 @@ int main( int argc, char** argv ) void* bp = bli_obj_buffer_at_off( &b ); void* cp = bli_obj_buffer_at_off( &c ); + #ifdef COL_STORAGE const int os_a = bli_obj_col_stride( &a ); const int os_b = bli_obj_col_stride( &b ); const int os_c = bli_obj_col_stride( &c ); + #else + const int os_a = bli_obj_row_stride( &a ); + const int os_b = bli_obj_row_stride( &b ); + const int os_c = bli_obj_row_stride( &c ); + #endif Stride stride_a( os_a, 1 ); Stride stride_b( os_b, 1 ); Stride stride_c( os_c, 1 ); + #ifdef COL_STORAGE + #if defined(IS_FLOAT) + typedef Matrix MatrixXf_; + #elif defined (IS_DOUBLE) + typedef Matrix MatrixXd_; + #elif defined (IS_SCOMPLEX) + typedef Matrix, Dynamic, Dynamic, ColMajor> MatrixXcf_; + #elif defined (IS_DCOMPLEX) + typedef Matrix, Dynamic, Dynamic, ColMajor> MatrixXcd_; + #endif + #else + #if defined(IS_FLOAT) + typedef Matrix MatrixXf_; + #elif defined (IS_DOUBLE) + typedef Matrix MatrixXd_; + #elif defined (IS_SCOMPLEX) + typedef Matrix, Dynamic, Dynamic, RowMajor> MatrixXcf_; + #elif defined (IS_DCOMPLEX) + typedef Matrix, Dynamic, Dynamic, RowMajor> MatrixXcd_; + #endif + #endif #if defined(IS_FLOAT) - Map > A( ( float* )ap, m, k, stride_a ); - Map > B( ( float* )bp, k, n, stride_b ); - Map > C( ( float* )cp, m, n, stride_c ); + Map > A( ( float* )ap, m, k, stride_a ); + Map > B( ( float* )bp, k, n, stride_b ); + Map > C( ( float* )cp, m, n, stride_c ); #elif defined (IS_DOUBLE) - Map > A( ( double* )ap, m, k, stride_a ); - Map > B( ( double* )bp, k, n, stride_b ); - Map > C( ( double* )cp, m, n, stride_c ); + Map > A( ( double* )ap, m, k, stride_a ); + Map > B( ( double* )bp, k, n, stride_b ); + Map > C( ( double* )cp, m, n, stride_c ); #elif defined (IS_SCOMPLEX) - Map > A( ( std::complex* )ap, m, k, stride_a ); - Map > B( ( std::complex* )bp, k, n, stride_b ); - Map > C( ( std::complex* )cp, m, n, stride_c ); + Map > A( ( std::complex* )ap, m, k, stride_a ); + Map > B( ( std::complex* )bp, k, n, stride_b ); + Map > C( ( std::complex* )cp, m, n, stride_c ); #elif defined (IS_DCOMPLEX) - Map > A( ( std::complex* )ap, m, k, stride_a ); - Map > B( ( std::complex* )bp, k, n, stride_b ); - Map > C( ( std::complex* )cp, m, n, stride_c ); + Map > A( ( std::complex* )ap, m, k, stride_a ); + Map > B( ( std::complex* )bp, k, n, stride_b ); + Map > C( ( std::complex* )cp, m, n, stride_c ); #endif #endif From e253bfcda4f9c4caaf6a3d7ad2c0f929d35ed937 Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Sat, 27 Apr 2019 22:56:02 +0000 Subject: [PATCH 051/109] make unix friendly archives on appveyor (#310) --- .appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.appveyor.yml b/.appveyor.yml index efc98f555..87aee9c97 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -39,7 +39,7 @@ build_script: - bash -lc "cd /c/projects/blis && ./configure %CONFIGURE_OPTS% --enable-threading=%THREADING% --enable-arg-max-hack --prefix=/c/blis %CONFIG%" - bash -lc "cd /c/projects/blis && mingw32-make -j4 V=1" - bash -lc "cd /c/projects/blis && mingw32-make install" -- ps: Compress-Archive -Path C:\blis -DestinationPath C:\blis.zip +- 7z a C:\blis.zip C:\blis - ps: Push-AppveyorArtifact C:\blis.zip test_script: From 4f086198558240c331797d4f510763fb3618e947 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Sat, 27 Apr 2019 18:44:50 -0500 Subject: [PATCH 052/109] Implemented gemm on skinny/unpacked matrices. Details: - Implemented a new sub-framework within BLIS to support the management of code and kernels that specifically target matrix problems for which at least one dimension is deemed to be small, which can result in long and skinny matrix operands that are ill-suited for the conventional level-3 implementations in BLIS. The new framework tackles the problem in two ways. First the stripped-down algorithmic loops forgo the packing that is famously performed in the classic code path. That is, the computation is performed by a new family of kernels tailored specifically for operating on the source matrices as-is (unpacked). Second, these new kernels will typically (and in the case of haswell and zen, do in fact) include separate assembly sub-kernels for handling of edge cases, which helps smooth performance when performing problems whose m and n dimension are not naturally multiples of the register blocksizes. In a reference to the sub-framework's purpose of supporting skinny/unpacked level-3 operations, the "sup" operation suffix (e.g. gemmsup) is typically used to denote a separate namespace for related code and kernels. NOTE: Since the sup framework does not perform any packing, it targets row- and column-stored matrices A, B, and C. For now, if any matrix has non-unit strides in both dimensions, the problem is computed by the conventional implementation. - Implemented the default sup handler as a front-end to two variants. bli_gemmsup_ref_var2() provides a block-panel variant (in which the 2nd loop around the microkernel iterates over n and the 1st loop iterates over m), while bli_gemmsup_ref_var1() provides a panel-block variant (2nd loop over m and 1st loop over n). However, these variants are not used by default and provided for reference only. Instead, the default sup handler calls _var2m() and _var1n(), which are similar to _var2() and _var1(), respectively, except that they defer to the sup kernel itself to iterate over the m and n dimension, respectively. In other words, these variants rely not on microkernels, but on so-called "millikernels" that iterate along m and k, or n and k. The benefit of using millikernels is a reduction of function call and related (local integer typecast) overhead as well as the ability for the kernel to know which micropanel (A or B) will change during the next iteration of the 1st loop, which allows it to focus its prefetching on that micropanel. (In _var2m()'s millikernel, the upanel of A changes while the same upanel of B is reused. In _var1n()'s, the upanel of B changes while the upanel of A is reused.) - Added a new configure option, --[en|dis]able-sup-handling, which is enabled by default. However, the default thresholds at which the default sup handler is activated are set to zero for each of the m, n, and k dimensions, which effectively disables the implementation. (The default sup handler only accepts the problem if at least one dimension is smaller than or equal to its corresponding threshold. If all dimensions are larger than their thresholds, the problem is rejected by the sup front-end and control is passed back to the conventional implementation, which proceeds normally.) - Added support to the cntx_t structure to track new fields related to the sup framework, most notably: - sup thresholds: the thresholds at which the sup handler is called. - sup handlers: the address of the function to call to implement the level-3 skinny/unpacked matrix implementation. - sup blocksizes: the register and cache blocksizes used by the sup implementation (which may be the same or different from those used by the conventional packm-based approach). - sup kernels: the kernels that the handler will use in implementing the sup functionality. - sup kernel prefs: the IO preference of the sup kernels, which may differ from the preferences of the conventional gemm microkernels' IO preferences. - Added a bool_t to the rntm_t structure that indicates whether sup handling should be enabled/disabled. This allows per-call control of whether the sup implementation is used, which is useful for test drivers that wish to switch between the conventional and sup codes without having to link to different copies of BLIS. The corresponding accessor functions for this new bool_t are defined in bli_rntm.h. - Implemented several row-preferential gemmsup kernels in a new directory, kernels/haswell/3/sup. These kernels include two general implementation types--'rd' and 'rv'--for the 6x8 base shape, with two specialized millikernels that embed the 1st loop within the kernel itself. - Added ref_kernels/3/bli_gemmsup_ref.c, which provides reference gemmsup microkernels. NOTE: These microkernels, unlike the current crop of conventional (pack-based) microkernels, do not use constant loop bounds. Additionally, their inner loop iterates over the k dimension. - Defined new typedef enums: - stor3_t: captures the effective storage combination of the level-3 problem. Valid values are BLIS_RRR, BLIS_RRC, BLIS_RCR, etc. A special value of BLIS_XXX is used to denote an arbitrary combination which, in practice, means that at least one of the operands is stored according to general stride. - threshid_t: captures each of the three dimension thresholds. - Changed bli_adjust_strides() in bli_obj.c so that bli_obj_create() can be passed "-1, -1" as a lazy request for row storage. (Note that "0, 0" is still accepted as a lazy request for column storage.) - Added support for various instructions to bli_x86_asm_macros.h, including imul, vhaddps/pd, and other instructions related to integer vectors. - Disabled the older small matrix handling code inserted by AMD in bli_gemm_front.c, since the sup framework introduced in this commit is intended to provide a more generalized solution. - Added test/sup directory, which contains standalone performance test drivers, a Makefile, a runme.sh script, and an 'octave' directory containing scripts compatible with GNU Octave. (They also may work with matlab, but if not, they are probably close to working.) - Reinterpret the storage combination string (sc_str) in the various level-3 testsuite modules (e.g. src/test_gemm.c) so that the order of each matrix storage char is "cab" rather than "abc". - Comment updates in level-3 BLAS API wrappers in frame/compat. --- build/bli_config.h.in | 6 + config/haswell/bli_cntx_init_haswell.c | 62 + config/haswell/bli_family_haswell.h | 9 + config/zen/bli_cntx_init_zen.c | 60 + config/zen/bli_family_zen.h | 12 + configure | 25 + frame/3/bli_l3.h | 19 +- frame/3/bli_l3_oapi.c | 67 +- frame/3/bli_l3_sup.c | 123 + frame/3/bli_l3_sup.h | 45 + frame/3/bli_l3_sup_ft_ker.h | 68 + frame/3/bli_l3_sup_ker.h | 56 + frame/3/bli_l3_sup_ker_prot.h | 56 + frame/3/bli_l3_sup_oft.h | 62 + frame/3/bli_l3_sup_ref.c | 209 + frame/3/bli_l3_sup_ref.h | 45 + frame/3/bli_l3_sup_var12.c | 735 + frame/3/bli_l3_sup_var1n2m.c | 803 ++ frame/3/bli_l3_sup_vars.h | 92 + frame/3/gemm/bli_gemm_front.c | 2 + frame/3/old/bli_l3_sup_edge.h | 141 + frame/base/bli_cntx.c | 590 +- frame/base/bli_cntx.h | 203 +- frame/base/bli_obj.c | 48 +- frame/base/bli_rntm.h | 50 +- frame/compat/bla_hemm.c | 4 +- frame/compat/bla_her2k.c | 4 +- frame/compat/bla_herk.c | 4 +- frame/compat/bla_symm.c | 4 +- frame/compat/bla_syr2k.c | 4 +- frame/compat/bla_syrk.c | 4 +- frame/compat/bla_trmm.c | 4 +- frame/compat/bla_trsm.c | 4 +- frame/include/bli_obj_macro_defs.h | 65 +- frame/include/bli_param_macro_defs.h | 91 + frame/include/bli_type_defs.h | 96 + frame/include/bli_x86_asm_macros.h | 47 +- frame/include/blis.h | 1 + .../3/sup/bli_gemmsup_rd_haswell_asm_d6x8.c | 4565 +++++++ .../3/sup/bli_gemmsup_rd_haswell_asm_d6x8m.c | 1901 +++ .../3/sup/bli_gemmsup_rd_haswell_asm_d6x8n.c | 2402 ++++ .../3/sup/bli_gemmsup_rv_haswell_asm_d6x8.c | 11047 ++++++++++++++++ .../3/sup/bli_gemmsup_rv_haswell_asm_d6x8m.c | 3265 +++++ .../3/sup/bli_gemmsup_rv_haswell_asm_d6x8n.c | 4117 ++++++ .../sup/old/bli_gemmsup_rd_haswell_asm_d6x8.c | 5249 ++++++++ .../old/bli_gemmsup_rd_haswell_asm_d6x8m.c | 5543 ++++++++ .../bli_gemmsup_rd_haswell_asm_d6x8m.c.newji | 5628 ++++++++ ...bli_gemmsup_rd_haswell_asm_d6x8m.c.worksij | 5634 ++++++++ .../old/bli_gemmsup_rd_haswell_asm_d6x8n.c | 5836 ++++++++ kernels/haswell/bli_kernels_haswell.h | 87 +- ref_kernels/3/bli_gemmsup_ref.c | 562 + ref_kernels/bli_cntx_ref.c | 130 +- test/sup/Makefile | 446 + test/sup/octave/gen_opsupnames.m | 35 + test/sup/octave/plot_l3sup_perf.m | 232 + test/sup/octave/plot_panel_trxsh.m | 140 + test/sup/octave/runme.m | 4 + test/sup/runme.sh | 129 + test/sup/test_gemm.c | 566 + testsuite/src/test_gemm.c | 28 +- testsuite/src/test_hemm.c | 8 +- testsuite/src/test_her2k.c | 8 +- testsuite/src/test_herk.c | 6 +- testsuite/src/test_symm.c | 8 +- testsuite/src/test_syr2k.c | 8 +- testsuite/src/test_syrk.c | 6 +- testsuite/src/test_trmm.c | 6 +- testsuite/src/test_trmm3.c | 8 +- testsuite/src/test_trsm.c | 6 +- 69 files changed, 61375 insertions(+), 155 deletions(-) create mode 100644 frame/3/bli_l3_sup.c create mode 100644 frame/3/bli_l3_sup.h create mode 100644 frame/3/bli_l3_sup_ft_ker.h create mode 100644 frame/3/bli_l3_sup_ker.h create mode 100644 frame/3/bli_l3_sup_ker_prot.h create mode 100644 frame/3/bli_l3_sup_oft.h create mode 100644 frame/3/bli_l3_sup_ref.c create mode 100644 frame/3/bli_l3_sup_ref.h create mode 100644 frame/3/bli_l3_sup_var12.c create mode 100644 frame/3/bli_l3_sup_var1n2m.c create mode 100644 frame/3/bli_l3_sup_vars.h create mode 100644 frame/3/old/bli_l3_sup_edge.h create mode 100644 kernels/haswell/3/sup/bli_gemmsup_rd_haswell_asm_d6x8.c create mode 100644 kernels/haswell/3/sup/bli_gemmsup_rd_haswell_asm_d6x8m.c create mode 100644 kernels/haswell/3/sup/bli_gemmsup_rd_haswell_asm_d6x8n.c create mode 100644 kernels/haswell/3/sup/bli_gemmsup_rv_haswell_asm_d6x8.c create mode 100644 kernels/haswell/3/sup/bli_gemmsup_rv_haswell_asm_d6x8m.c create mode 100644 kernels/haswell/3/sup/bli_gemmsup_rv_haswell_asm_d6x8n.c create mode 100644 kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8.c create mode 100644 kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8m.c create mode 100644 kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8m.c.newji create mode 100644 kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8m.c.worksij create mode 100644 kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8n.c create mode 100644 ref_kernels/3/bli_gemmsup_ref.c create mode 100644 test/sup/Makefile create mode 100644 test/sup/octave/gen_opsupnames.m create mode 100644 test/sup/octave/plot_l3sup_perf.m create mode 100644 test/sup/octave/plot_panel_trxsh.m create mode 100644 test/sup/octave/runme.m create mode 100755 test/sup/runme.sh create mode 100644 test/sup/test_gemm.c diff --git a/build/bli_config.h.in b/build/bli_config.h.in index d785211dc..1bb2ef28b 100644 --- a/build/bli_config.h.in +++ b/build/bli_config.h.in @@ -135,6 +135,12 @@ #endif #endif +#if @enable_sup_handling@ +#define BLIS_ENABLE_SUP_HANDLING +#else +#define BLIS_DISABLE_SUP_HANDLING +#endif + #if @enable_memkind@ #define BLIS_ENABLE_MEMKIND #else diff --git a/config/haswell/bli_cntx_init_haswell.c b/config/haswell/bli_cntx_init_haswell.c index 0682e6933..879fa660d 100644 --- a/config/haswell/bli_cntx_init_haswell.c +++ b/config/haswell/bli_cntx_init_haswell.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -34,9 +35,12 @@ #include "blis.h" +//GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref ) + void bli_cntx_init_haswell( cntx_t* cntx ) { blksz_t blkszs[ BLIS_NUM_BLKSZS ]; + blksz_t thresh[ BLIS_NUM_THRESH ]; // Set default kernel blocksizes and functions. bli_cntx_init_haswell_ref( cntx ); @@ -69,6 +73,7 @@ void bli_cntx_init_haswell( cntx_t* cntx ) cntx ); + // Update the context with optimized level-1f kernels. bli_cntx_set_l1f_kers ( 4, @@ -144,5 +149,62 @@ void bli_cntx_init_haswell( cntx_t* cntx ) BLIS_DF, &blkszs[ BLIS_DF ], BLIS_DF, cntx ); + + // ------------------------------------------------------------------------- + + // Initialize sup thresholds with architecture-appropriate values. + // s d c z + bli_blksz_init_easy( &thresh[ BLIS_MT ], -1, 80, -1, -1 ); + bli_blksz_init_easy( &thresh[ BLIS_NT ], -1, 100, -1, -1 ); + bli_blksz_init_easy( &thresh[ BLIS_KT ], -1, 120, -1, -1 ); + + // Initialize the context with the sup thresholds. + bli_cntx_set_l3_sup_thresh + ( + 3, + BLIS_MT, &thresh[ BLIS_MT ], + BLIS_NT, &thresh[ BLIS_NT ], + BLIS_KT, &thresh[ BLIS_KT ], + cntx + ); + + // Update the context with optimized small/unpacked gemm kernels. + bli_cntx_set_l3_sup_kers + ( + 8, + //BLIS_RCR, BLIS_DOUBLE, bli_dgemmsup_r_haswell_ref, + BLIS_RRR, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8m, TRUE, + BLIS_RRC, BLIS_DOUBLE, bli_dgemmsup_rd_haswell_asm_6x8m, TRUE, + BLIS_RCR, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8m, TRUE, + BLIS_RCC, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8n, TRUE, + BLIS_CRR, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8m, TRUE, + BLIS_CRC, BLIS_DOUBLE, bli_dgemmsup_rd_haswell_asm_6x8n, TRUE, + BLIS_CCR, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8n, TRUE, + BLIS_CCC, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8n, TRUE, + cntx + ); + + // Initialize level-3 sup blocksize objects with architecture-specific + // values. + // s d c z + bli_blksz_init ( &blkszs[ BLIS_MR ], -1, 6, -1, -1, + -1, 9, -1, -1 ); + bli_blksz_init_easy( &blkszs[ BLIS_NR ], -1, 8, -1, -1 ); + bli_blksz_init_easy( &blkszs[ BLIS_MC ], -1, 72, -1, -1 ); + bli_blksz_init_easy( &blkszs[ BLIS_KC ], -1, 256, -1, -1 ); + bli_blksz_init_easy( &blkszs[ BLIS_NC ], -1, 4080, -1, -1 ); + + // Update the context with the current architecture's register and cache + // blocksizes for small/unpacked level-3 problems. + bli_cntx_set_l3_sup_blkszs + ( + 5, + BLIS_NC, &blkszs[ BLIS_NC ], + BLIS_KC, &blkszs[ BLIS_KC ], + BLIS_MC, &blkszs[ BLIS_MC ], + BLIS_NR, &blkszs[ BLIS_NR ], + BLIS_MR, &blkszs[ BLIS_MR ], + cntx + ); } diff --git a/config/haswell/bli_family_haswell.h b/config/haswell/bli_family_haswell.h index dc75f01b2..9ac5f1e38 100644 --- a/config/haswell/bli_family_haswell.h +++ b/config/haswell/bli_family_haswell.h @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -35,6 +36,14 @@ //#ifndef BLIS_FAMILY_H //#define BLIS_FAMILY_H +// Allow the sup implementation to combine some small edge case iterations in +// the 2nd loop of the panel-block algorithm (MR) and/or the 2nd loop of the +// block-panel algorithm (NR) with the last full iteration that precedes it. +// NOTE: These cpp macros need to be explicitly set to an integer since they +// are used at compile-time to create unconditional branches or dead code +// regions. +#define BLIS_ENABLE_SUP_MR_EXT 1 +#define BLIS_ENABLE_SUP_NR_EXT 0 #if 0 diff --git a/config/zen/bli_cntx_init_zen.c b/config/zen/bli_cntx_init_zen.c index a96deadc1..84f43bf32 100644 --- a/config/zen/bli_cntx_init_zen.c +++ b/config/zen/bli_cntx_init_zen.c @@ -35,9 +35,12 @@ #include "blis.h" +//GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref ) + void bli_cntx_init_zen( cntx_t* cntx ) { blksz_t blkszs[ BLIS_NUM_BLKSZS ]; + blksz_t thresh[ BLIS_NUM_THRESH ]; // Set default kernel blocksizes and functions. bli_cntx_init_zen_ref( cntx ); @@ -170,5 +173,62 @@ void bli_cntx_init_zen( cntx_t* cntx ) BLIS_DF, &blkszs[ BLIS_DF ], BLIS_DF, cntx ); + + // ------------------------------------------------------------------------- + + // Initialize sup thresholds with architecture-appropriate values. + // s d c z + bli_blksz_init_easy( &thresh[ BLIS_MT ], -1, 80, -1, -1 ); + bli_blksz_init_easy( &thresh[ BLIS_NT ], -1, 100, -1, -1 ); + bli_blksz_init_easy( &thresh[ BLIS_KT ], -1, 120, -1, -1 ); + + // Initialize the context with the sup thresholds. + bli_cntx_set_l3_sup_thresh + ( + 3, + BLIS_MT, &thresh[ BLIS_MT ], + BLIS_NT, &thresh[ BLIS_NT ], + BLIS_KT, &thresh[ BLIS_KT ], + cntx + ); + + // Update the context with optimized small/unpacked gemm kernels. + bli_cntx_set_l3_sup_kers + ( + 8, + //BLIS_RCR, BLIS_DOUBLE, bli_dgemmsup_r_haswell_ref, + BLIS_RRR, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8m, TRUE, + BLIS_RRC, BLIS_DOUBLE, bli_dgemmsup_rd_haswell_asm_6x8m, TRUE, + BLIS_RCR, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8m, TRUE, + BLIS_RCC, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8n, TRUE, + BLIS_CRR, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8m, TRUE, + BLIS_CRC, BLIS_DOUBLE, bli_dgemmsup_rd_haswell_asm_6x8n, TRUE, + BLIS_CCR, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8n, TRUE, + BLIS_CCC, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8n, TRUE, + cntx + ); + + // Initialize level-3 sup blocksize objects with architecture-specific + // values. + // s d c z + bli_blksz_init ( &blkszs[ BLIS_MR ], -1, 6, -1, -1, + -1, 9, -1, -1 ); + bli_blksz_init_easy( &blkszs[ BLIS_NR ], -1, 8, -1, -1 ); + bli_blksz_init_easy( &blkszs[ BLIS_MC ], -1, 72, -1, -1 ); + bli_blksz_init_easy( &blkszs[ BLIS_KC ], -1, 256, -1, -1 ); + bli_blksz_init_easy( &blkszs[ BLIS_NC ], -1, 4080, -1, -1 ); + + // Update the context with the current architecture's register and cache + // blocksizes for small/unpacked level-3 problems. + bli_cntx_set_l3_sup_blkszs + ( + 5, + BLIS_NC, &blkszs[ BLIS_NC ], + BLIS_KC, &blkszs[ BLIS_KC ], + BLIS_MC, &blkszs[ BLIS_MC ], + BLIS_NR, &blkszs[ BLIS_NR ], + BLIS_MR, &blkszs[ BLIS_MR ], + cntx + ); } diff --git a/config/zen/bli_family_zen.h b/config/zen/bli_family_zen.h index 3f41a53bb..ee00d6841 100644 --- a/config/zen/bli_family_zen.h +++ b/config/zen/bli_family_zen.h @@ -52,6 +52,7 @@ #define BLIS_SMALL_M_RECT_MATRIX_THRES 160 #define BLIS_SMALL_K_RECT_MATRIX_THRES 128 +<<<<<<< HEAD #define BLIS_SMALL_MATRIX_THRES_TRSM 32768 //128(128+128) => m*(m+n) #define BLIS_SMALL_MATRIX_A_THRES_TRSM 128 #define BLIS_SMALL_MATRIX_A_THRES_M_SYRK 96 @@ -64,6 +65,17 @@ #define D_BLIS_SMALL_MATRIX_THRES_TRSM_ALXB_NAPLES 90 #define D_BLIS_SMALL_MATRIX_THRES_TRSM_DIM_RATIO 22 +======= +// Allow the sup implementation to combine some small edge case iterations in +// the 2nd loop of the panel-block algorithm (MR) and/or the 2nd loop of the +// block-panel algorithm (NR) with the last full iteration that precedes it. +// NOTE: These cpp macros need to be explicitly set to an integer since they +// are used at compile-time to create unconditional branches or dead code +// regions. +#define BLIS_ENABLE_SUP_MR_EXT 1 +#define BLIS_ENABLE_SUP_NR_EXT 0 + +>>>>>>> Implemented gemm on skinny/unpacked matrices. //#endif diff --git a/configure b/configure index 778679aec..291d5e666 100755 --- a/configure +++ b/configure @@ -242,6 +242,16 @@ print_usage() echo " only be enabled when mixed domain/precision support is" echo " enabled." echo " " + echo " --disable-sup-handling, --enable-sup-handling" + echo " " + echo " Disable (enabled by default) handling of small/skinny" + echo " matrix problems via separate code branches. When disabled," + echo " these small/skinny level-3 operations will be performed by" + echo " the conventional implementation, which is optimized for" + echo " medium and large problems. Note that what qualifies as" + echo " \"small\" depends on thresholds that may vary by sub-" + echo " configuration." + echo " " echo " -s NAME --enable-sandbox=NAME" echo " " echo " Enable a separate sandbox implementation of gemm. This" @@ -1828,6 +1838,7 @@ main() enable_cblas='no' enable_mixed_dt='yes' enable_mixed_dt_extra_mem='yes' + enable_sup_handling='yes' enable_memkind='' # The default memkind value is determined later on. force_version='no' @@ -2000,6 +2011,12 @@ main() disable-mixed-dt-extra-mem) enable_mixed_dt_extra_mem='no' ;; + enable-sup-handling) + enable_sup_handling='yes' + ;; + disable-sup-handling) + enable_sup_handling='no' + ;; with-memkind) enable_memkind='yes' ;; @@ -2778,6 +2795,13 @@ main() enable_mixed_dt_extra_mem_01=0 enable_mixed_dt_01=0 fi + if [ "x${enable_sup_handling}" = "xyes" ]; then + echo "${script_name}: small matrix handling is enabled." + enable_sup_handling_01=1 + else + echo "${script_name}: small matrix handling is disabled." + enable_sup_handling_01=0 + fi # Report integer sizes. if [ "x${int_type_size}" = "x32" ]; then @@ -2986,6 +3010,7 @@ main() | sed -e "s/@enable_cblas@/${enable_cblas_01}/g" \ | sed -e "s/@enable_mixed_dt@/${enable_mixed_dt_01}/g" \ | sed -e "s/@enable_mixed_dt_extra_mem@/${enable_mixed_dt_extra_mem_01}/g" \ + | sed -e "s/@enable_sup_handling@/${enable_sup_handling_01}/g" \ | sed -e "s/@enable_memkind@/${enable_memkind_01}/g" \ | sed -e "s/@enable_pragma_omp_simd@/${enable_pragma_omp_simd_01}/g" \ | sed -e "s/@enable_sandbox@/${enable_sandbox_01}/g" \ diff --git a/frame/3/bli_l3.h b/frame/3/bli_l3.h index 7f2879c02..e60af306b 100644 --- a/frame/3/bli_l3.h +++ b/frame/3/bli_l3.h @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -60,14 +61,28 @@ #include "bli_tapi_ba.h" #include "bli_l3_tapi.h" -// Prototype microkernel wrapper APIs +// Define function types for small/unpacked handlers/kernels. +#include "bli_l3_sup_oft.h" +#include "bli_l3_sup_ft_ker.h" + +// Define static edge case logic for use in small/unpacked kernels. +//#include "bli_l3_sup_edge.h" + +// Prototype object API to small/unpacked matrix dispatcher. +#include "bli_l3_sup.h" + +// Prototype reference implementation of small/unpacked matrix handler. +#include "bli_l3_sup_ref.h" +#include "bli_l3_sup_vars.h" + +// Prototype microkernel wrapper APIs. #include "bli_l3_ukr_oapi.h" #include "bli_l3_ukr_tapi.h" // Generate function pointer arrays for tapi microkernel functions. #include "bli_l3_ukr_fpa.h" -// Operation-specific headers +// Operation-specific headers. #include "bli_gemm.h" #include "bli_hemm.h" #include "bli_herk.h" diff --git a/frame/3/bli_l3_oapi.c b/frame/3/bli_l3_oapi.c index d9ba27369..29eca1bf1 100644 --- a/frame/3/bli_l3_oapi.c +++ b/frame/3/bli_l3_oapi.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -56,13 +57,30 @@ void PASTEMAC(opname,EX_SUF) \ bli_init_once(); \ \ BLIS_OAPI_EX_DECLS \ +\ + /* If the rntm is non-NULL, it may indicate that we should forgo sup + handling altogether. */ \ + bool_t enable_sup = TRUE; \ + if ( rntm != NULL ) enable_sup = bli_rntm_l3_sup( rntm ); \ +\ + if ( enable_sup ) \ + { \ + /* Execute the small/unpacked oapi handler. If it finds that the problem + does not fall within the thresholds that define "small", or for some + other reason decides not to use the small/unpacked implementation, + the function returns with BLIS_FAILURE, which causes execution to + proceed towards the conventional implementation. */ \ + err_t result = PASTEMAC(opname,sup)( alpha, a, b, beta, c, cntx, rntm ); \ + if ( result == BLIS_SUCCESS ) return; \ + } \ \ /* Only proceed with an induced method if each of the operands have a complex storage datatype. NOTE: Allowing precisions to vary while using 1m, which is what we do here, is unique to gemm; other level-3 - operations use 1m only if all storage datatypes are equal (including - the computation datatype). If any operands are real, skip the induced - method chooser function and proceed directly with native execution. */ \ + operations use 1m only if all storage datatypes are equal (and they + ignore the computation precision). If any operands are real, skip the + induced method chooser function and proceed directly with native + execution. */ \ if ( bli_obj_is_complex( c ) && \ bli_obj_is_complex( a ) && \ bli_obj_is_complex( b ) ) \ @@ -81,6 +99,49 @@ void PASTEMAC(opname,EX_SUF) \ } GENFRONT( gemm ) + + +#undef GENFRONT +#define GENFRONT( opname ) \ +\ +void PASTEMAC(opname,EX_SUF) \ + ( \ + obj_t* alpha, \ + obj_t* a, \ + obj_t* b, \ + obj_t* beta, \ + obj_t* c \ + BLIS_OAPI_EX_PARAMS \ + ) \ +{ \ + bli_init_once(); \ +\ + BLIS_OAPI_EX_DECLS \ +\ + /* Only proceed with an induced method if each of the operands have a + complex storage datatype. NOTE: Allowing precisions to vary while + using 1m, which is what we do here, is unique to gemm; other level-3 + operations use 1m only if all storage datatypes are equal (and they + ignore the computation precision). If any operands are real, skip the + induced method chooser function and proceed directly with native + execution. */ \ + if ( bli_obj_is_complex( c ) && \ + bli_obj_is_complex( a ) && \ + bli_obj_is_complex( b ) ) \ + { \ + /* Invoke the operation's "ind" function--its induced method front-end. + For complex problems, it calls the highest priority induced method + that is available (ie: implemented and enabled), and if none are + enabled, it calls native execution. (For real problems, it calls + the operation's native execution interface.) */ \ + PASTEMAC(opname,ind)( alpha, a, b, beta, c, cntx, rntm ); \ + } \ + else \ + { \ + PASTEMAC(opname,nat)( alpha, a, b, beta, c, cntx, rntm ); \ + } \ +} + GENFRONT( her2k ) GENFRONT( syr2k ) diff --git a/frame/3/bli_l3_sup.c b/frame/3/bli_l3_sup.c new file mode 100644 index 000000000..006a74658 --- /dev/null +++ b/frame/3/bli_l3_sup.c @@ -0,0 +1,123 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" + +err_t bli_gemmsup + ( + obj_t* alpha, + obj_t* a, + obj_t* b, + obj_t* beta, + obj_t* c, + cntx_t* cntx, + rntm_t* rntm + ) +{ + // Return early if small matrix handling is disabled at configure-time. + #ifdef BLIS_DISABLE_SM_HANDLING + return BLIS_FAILURE; + #endif + + // Return early if this is a mixed-datatype computation. + if ( bli_obj_dt( c ) != bli_obj_dt( a ) || + bli_obj_dt( c ) != bli_obj_dt( b ) || + bli_obj_comp_prec( c ) != bli_obj_prec( c ) ) return BLIS_FAILURE; + + // Obtain a valid (native) context from the gks if necessary. + // NOTE: This must be done before calling the _check() function, since + // that function assumes the context pointer is valid. + if ( cntx == NULL ) cntx = bli_gks_query_cntx(); + +#if 0 + // Initialize a local runtime with global settings if necessary. Note + // that in the case that a runtime is passed in, we make a local copy. + rntm_t rntm_l; + if ( rntm == NULL ) { bli_thread_init_rntm( &rntm_l ); rntm = &rntm_l; } + else { rntm_l = *rntm; rntm = &rntm_l; } +#endif + + // Return early if a microkernel preference-induced transposition would + // have been performed and shifted the dimensions outside of the space + // of sup-handled problems. + if ( bli_cntx_l3_vir_ukr_dislikes_storage_of( c, BLIS_GEMM_UKR, cntx ) ) + { + const num_t dt = bli_obj_dt( c ); + const dim_t m = bli_obj_length( c ); + const dim_t n = bli_obj_width( c ); + const dim_t k = bli_obj_width_after_trans( a ); + + // Pass in m and n reversed, which simulates a transposition of the + // entire operation pursuant to the microkernel storage preference. + if ( !bli_cntx_l3_sup_thresh_is_met( dt, n, m, k, cntx ) ) + return BLIS_FAILURE; + } + else // ukr_prefers_storage_of( c, ... ) + { + const num_t dt = bli_obj_dt( c ); + const dim_t m = bli_obj_length( c ); + const dim_t n = bli_obj_width( c ); + const dim_t k = bli_obj_width_after_trans( a ); + + if ( !bli_cntx_l3_sup_thresh_is_met( dt, m, n, k, cntx ) ) + return BLIS_FAILURE; + } + + // We've now ruled out the following two possibilities: + // - the ukernel prefers the operation as-is, and the sup thresholds are + // unsatisfied. + // - the ukernel prefers a transposed operation, and the sup thresholds are + // unsatisfied after taking into account the transposition. + // This implies that the sup thresholds (at least one of them) are met. + // and the small/unpacked handler should be called. + // NOTE: The sup handler is free to enforce a stricter threshold regime + // if it so chooses, in which case it can/should return BLIS_FAILURE. + + // Query the small/unpacked handler from the context and invoke it. + gemmsup_oft gemmsup_fp = bli_cntx_get_l3_sup_handler( BLIS_GEMM, cntx ); + + return + gemmsup_fp + ( + alpha, + a, + b, + beta, + c, + cntx, + rntm + ); +} + + diff --git a/frame/3/bli_l3_sup.h b/frame/3/bli_l3_sup.h new file mode 100644 index 000000000..f0a3a559b --- /dev/null +++ b/frame/3/bli_l3_sup.h @@ -0,0 +1,45 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +err_t bli_gemmsup + ( + obj_t* alpha, + obj_t* a, + obj_t* b, + obj_t* beta, + obj_t* c, + cntx_t* cntx, + rntm_t* rntm + ); + diff --git a/frame/3/bli_l3_sup_ft_ker.h b/frame/3/bli_l3_sup_ft_ker.h new file mode 100644 index 000000000..5bb2218f3 --- /dev/null +++ b/frame/3/bli_l3_sup_ft_ker.h @@ -0,0 +1,68 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#ifndef BLIS_L3_SUP_FT_KER_H +#define BLIS_L3_SUP_FT_KER_H + + +// +// -- Level-3 small/unpacked kernel function types ----------------------------- +// + +// gemmsup + +#undef GENTDEF +#define GENTDEF( ctype, ch, opname, tsuf ) \ +\ +typedef void (*PASTECH3(ch,opname,_ker,tsuf)) \ + ( \ + conj_t conja, \ + conj_t conjb, \ + dim_t m, \ + dim_t n, \ + dim_t k, \ + ctype* restrict alpha, \ + ctype* restrict a, inc_t rs_a, inc_t cs_a, \ + ctype* restrict b, inc_t rs_b, inc_t cs_b, \ + ctype* restrict beta, \ + ctype* restrict c, inc_t rs_c, inc_t cs_c, \ + auxinfo_t* restrict data, \ + cntx_t* restrict cntx \ + ); + +INSERT_GENTDEF( gemmsup ) + + +#endif + diff --git a/frame/3/bli_l3_sup_ker.h b/frame/3/bli_l3_sup_ker.h new file mode 100644 index 000000000..6c77fffe0 --- /dev/null +++ b/frame/3/bli_l3_sup_ker.h @@ -0,0 +1,56 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +// +// Define template prototypes for level-3 kernels on small/unpacked matrices. +// + +// Note: Instead of defining function prototype macro templates and then +// instantiating those macros to define the individual function prototypes, +// we simply alias the official operations' prototypes as defined in +// bli_l3_ker_prot.h. + +#undef GENTPROT +#define GENTPROT GEMMSUP_KER_PROT + +INSERT_GENTPROT_BASIC0( gemmsup_rv_ukr_name ) +INSERT_GENTPROT_BASIC0( gemmsup_rg_ukr_name ) +INSERT_GENTPROT_BASIC0( gemmsup_cv_ukr_name ) +INSERT_GENTPROT_BASIC0( gemmsup_cg_ukr_name ) + +INSERT_GENTPROT_BASIC0( gemmsup_rd_ukr_name ) +INSERT_GENTPROT_BASIC0( gemmsup_cd_ukr_name ) + +INSERT_GENTPROT_BASIC0( gemmsup_gx_ukr_name ) + diff --git a/frame/3/bli_l3_sup_ker_prot.h b/frame/3/bli_l3_sup_ker_prot.h new file mode 100644 index 000000000..899a47d3f --- /dev/null +++ b/frame/3/bli_l3_sup_ker_prot.h @@ -0,0 +1,56 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +// +// Define template prototypes for level-3 kernels on small/unpacked matrices. +// + +#define GEMMSUP_KER_PROT( ctype, ch, opname ) \ +\ +void PASTEMAC(ch,opname) \ + ( \ + conj_t conja, \ + conj_t conjb, \ + dim_t m, \ + dim_t n, \ + dim_t k, \ + ctype* restrict alpha, \ + ctype* restrict a, inc_t rs_a, inc_t cs_a, \ + ctype* restrict b, inc_t rs_b, inc_t cs_b, \ + ctype* restrict beta, \ + ctype* restrict c, inc_t rs_c, inc_t cs_c, \ + auxinfo_t* restrict data, \ + cntx_t* restrict cntx \ + ); + diff --git a/frame/3/bli_l3_sup_oft.h b/frame/3/bli_l3_sup_oft.h new file mode 100644 index 000000000..a06d28789 --- /dev/null +++ b/frame/3/bli_l3_sup_oft.h @@ -0,0 +1,62 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#ifndef BLIS_L3_SUP_OFT_H +#define BLIS_L3_SUP_OFT_H + + +// +// -- Level-3 small/unpacked object function types ----------------------------- +// + +// gemm + +#undef GENTDEF +#define GENTDEF( opname ) \ +\ +typedef err_t (*PASTECH(opname,_oft)) \ +( \ + obj_t* alpha, \ + obj_t* a, \ + obj_t* b, \ + obj_t* beta, \ + obj_t* c, \ + cntx_t* cntx, \ + rntm_t* rntm \ +); + +GENTDEF( gemmsup ) + +#endif + diff --git a/frame/3/bli_l3_sup_ref.c b/frame/3/bli_l3_sup_ref.c new file mode 100644 index 000000000..bf4494077 --- /dev/null +++ b/frame/3/bli_l3_sup_ref.c @@ -0,0 +1,209 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" + +err_t bli_gemmsup_ref + ( + obj_t* alpha, + obj_t* a, + obj_t* b, + obj_t* beta, + obj_t* c, + cntx_t* cntx, + rntm_t* rntm + ) +{ + // Check parameters. + if ( bli_error_checking_is_enabled() ) + bli_gemm_check( alpha, a, b, beta, c, cntx ); + +#if 0 + // FGVZ: The datatype-specific variant is now responsible for checking for + // alpha == 0.0. + + // If alpha is zero, scale by beta and return. + if ( bli_obj_equals( alpha, &BLIS_ZERO ) ) + { + bli_scalm( beta, c ); + return BLIS_SUCCESS; + } +#endif + +#if 0 + // FGVZ: Will this be needed for constructing thrinfo_t's (recall: the + // sba needs to be attached to the rntm; see below)? Or will those nodes + // just be created "locally," in an exposed manner? + + // Parse and interpret the contents of the rntm_t object to properly + // set the ways of parallelism for each loop, and then make any + // additional modifications necessary for the current operation. + bli_rntm_set_ways_for_op + ( + BLIS_GEMM, + BLIS_LEFT, // ignored for gemm/hemm/symm + bli_obj_length( &c_local ), + bli_obj_width( &c_local ), + bli_obj_width( &a_local ), + rntm + ); + + // FGVZ: the sba needs to be attached to the rntm. But it needs + // to be done in the thread region, since it needs a thread id. + //bli_sba_rntm_set_pool( tid, array, rntm_p ); +#endif + +#if 0 + // FGVZ: The datatype-specific variant is now responsible for inducing a + // transposition, if needed. + + // Induce transpositions on A and/or B if either object is marked for + // transposition. We can induce "fast" transpositions since they objects + // are guaranteed to not have structure or be packed. + if ( bli_obj_has_trans( a ) ) + { + bli_obj_induce_fast_trans( a ); + bli_obj_toggle_trans( a ); + } + if ( bli_obj_has_trans( b ) ) + { + bli_obj_induce_fast_trans( b ); + bli_obj_toggle_trans( b ); + } +#endif + +#if 0 + //bli_gemmsup_ref_var2 + //bli_gemmsup_ref_var1 + #if 0 + bli_gemmsup_ref_var1n + #else + #endif + const stor3_t stor_id = bli_obj_stor3_from_strides( c, a, b ); + const bool_t is_rrr_rrc_rcr_crr = ( stor_id == BLIS_RRR || + stor_id == BLIS_RRC || + stor_id == BLIS_RCR || + stor_id == BLIS_CRR ); + if ( is_rrr_rrc_rcr_crr ) + { + bli_gemmsup_ref_var2m + ( + BLIS_NO_TRANSPOSE, alpha, a, b, beta, c, stor_id, cntx, rntm + ); + } + else + { + bli_gemmsup_ref_var2m + ( + BLIS_TRANSPOSE, alpha, a, b, beta, c, stor_id, cntx, rntm + ); + } +#else + const stor3_t stor_id = bli_obj_stor3_from_strides( c, a, b ); + + // Don't use the small/unpacked implementation if one of the matrices + // uses general stride. + if ( stor_id == BLIS_XXX ) return BLIS_FAILURE; + + const bool_t is_rrr_rrc_rcr_crr = ( stor_id == BLIS_RRR || + stor_id == BLIS_RRC || + stor_id == BLIS_RCR || + stor_id == BLIS_CRR ); + const bool_t is_rcc_crc_ccr_ccc = !is_rrr_rrc_rcr_crr; + + const num_t dt = bli_obj_dt( c ); + const bool_t row_pref = bli_cntx_l3_sup_ker_prefers_rows_dt( dt, stor_id, cntx ); + + const bool_t is_primary = ( row_pref ? is_rrr_rrc_rcr_crr + : is_rcc_crc_ccr_ccc ); + + if ( is_primary ) + { + // This branch handles: + // - rrr rrc rcr crr for row-preferential kernels + // - rcc crc ccr ccc for column-preferential kernels + + const dim_t m = bli_obj_length( c ); + const dim_t n = bli_obj_width( c ); + const dim_t NR = bli_cntx_get_blksz_def_dt( dt, BLIS_NR, cntx ); \ + const dim_t MR = bli_cntx_get_blksz_def_dt( dt, BLIS_MR, cntx ); \ + const dim_t mu = m / MR; + const dim_t nu = n / NR; + + if ( mu >= nu ) + { + // block-panel macrokernel; m -> mc, mr; n -> nc, nr: var2() + bli_gemmsup_ref_var2m( BLIS_NO_TRANSPOSE, + alpha, a, b, beta, c, stor_id, cntx, rntm ); + } + else // if ( mu < nu ) + { + // panel-block macrokernel; m -> nc*,mr; n -> mc*,nr: var1() + bli_gemmsup_ref_var1n( BLIS_NO_TRANSPOSE, + alpha, a, b, beta, c, stor_id, cntx, rntm ); + } + } + else + { + // This branch handles: + // - rrr rrc rcr crr for column-preferential kernels + // - rcc crc ccr ccc for row-preferential kernels + + const dim_t mt = bli_obj_width( c ); + const dim_t nt = bli_obj_length( c ); + const dim_t NR = bli_cntx_get_blksz_def_dt( dt, BLIS_NR, cntx ); \ + const dim_t MR = bli_cntx_get_blksz_def_dt( dt, BLIS_MR, cntx ); \ + const dim_t mu = mt / MR; + const dim_t nu = nt / NR; + + if ( mu >= nu ) + { + // panel-block macrokernel; m -> nc, nr; n -> mc, mr: var2() + trans + bli_gemmsup_ref_var2m( BLIS_TRANSPOSE, + alpha, a, b, beta, c, stor_id, cntx, rntm ); + } + else // if ( mu < nu ) + { + // block-panel macrokernel; m -> mc*,nr; n -> nc*,mr: var1() + trans + bli_gemmsup_ref_var1n( BLIS_TRANSPOSE, + alpha, a, b, beta, c, stor_id, cntx, rntm ); + } + // *requires nudging of mc,nc up to be a multiple of nr,mr. + } +#endif + + // Return success so that the caller knows that we computed the solution. + return BLIS_SUCCESS; +} + diff --git a/frame/3/bli_l3_sup_ref.h b/frame/3/bli_l3_sup_ref.h new file mode 100644 index 000000000..5d400a985 --- /dev/null +++ b/frame/3/bli_l3_sup_ref.h @@ -0,0 +1,45 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +err_t bli_gemmsup_ref + ( + obj_t* alpha, + obj_t* a, + obj_t* b, + obj_t* beta, + obj_t* c, + cntx_t* cntx, + rntm_t* rntm + ); + diff --git a/frame/3/bli_l3_sup_var12.c b/frame/3/bli_l3_sup_var12.c new file mode 100644 index 000000000..106ad86e4 --- /dev/null +++ b/frame/3/bli_l3_sup_var12.c @@ -0,0 +1,735 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" + +#define FUNCPTR_T gemmsup_fp + +typedef void (*FUNCPTR_T) + ( + conj_t conja, + conj_t conjb, + dim_t m, + dim_t n, + dim_t k, + void* restrict alpha, + void* restrict a, inc_t rs_a, inc_t cs_a, + void* restrict b, inc_t rs_b, inc_t cs_b, + void* restrict beta, + void* restrict c, inc_t rs_c, inc_t cs_c, + stor3_t eff_id, + cntx_t* restrict cntx, + rntm_t* restrict rntm + ); + +#if 0 +// +// -- var2 --------------------------------------------------------------------- +// + +static FUNCPTR_T GENARRAY(ftypes_var2,gemmsup_ref_var2); + +void bli_gemmsup_ref_var2 + ( + trans_t trans, + obj_t* alpha, + obj_t* a, + obj_t* b, + obj_t* beta, + obj_t* c, + stor3_t eff_id, + cntx_t* cntx, + rntm_t* rntm + ) +{ +#if 0 + obj_t at, bt; + + bli_obj_alias_to( a, &at ); + bli_obj_alias_to( b, &bt ); + + // Induce transpositions on A and/or B if either object is marked for + // transposition. We can induce "fast" transpositions since they objects + // are guaranteed to not have structure or be packed. + if ( bli_obj_has_trans( &at ) ) { bli_obj_induce_fast_trans( &at ); } + if ( bli_obj_has_trans( &bt ) ) { bli_obj_induce_fast_trans( &bt ); } + + const num_t dt_exec = bli_obj_dt( c ); + + const conj_t conja = bli_obj_conj_status( a ); + const conj_t conjb = bli_obj_conj_status( b ); + + const dim_t m = bli_obj_length( c ); + const dim_t n = bli_obj_width( c ); + + const dim_t k = bli_obj_width( &at ); + + void* restrict buf_a = bli_obj_buffer_at_off( &at ); + const inc_t rs_a = bli_obj_row_stride( &at ); + const inc_t cs_a = bli_obj_col_stride( &at ); + + void* restrict buf_b = bli_obj_buffer_at_off( &bt ); + const inc_t rs_b = bli_obj_row_stride( &bt ); + const inc_t cs_b = bli_obj_col_stride( &bt ); + + void* restrict buf_c = bli_obj_buffer_at_off( c ); + const inc_t rs_c = bli_obj_row_stride( c ); + const inc_t cs_c = bli_obj_col_stride( c ); + + void* restrict buf_alpha = bli_obj_buffer_for_1x1( dt_exec, alpha ); + void* restrict buf_beta = bli_obj_buffer_for_1x1( dt_exec, beta ); + +#else + + const num_t dt_exec = bli_obj_dt( c ); + + const conj_t conja = bli_obj_conj_status( a ); + const conj_t conjb = bli_obj_conj_status( b ); + + const dim_t m = bli_obj_length( c ); + const dim_t n = bli_obj_width( c ); + dim_t k; + + void* restrict buf_a = bli_obj_buffer_at_off( a ); + inc_t rs_a; + inc_t cs_a; + + void* restrict buf_b = bli_obj_buffer_at_off( b ); + inc_t rs_b; + inc_t cs_b; + + if ( bli_obj_has_notrans( a ) ) + { + k = bli_obj_width( a ); + + rs_a = bli_obj_row_stride( a ); + cs_a = bli_obj_col_stride( a ); + } + else // if ( bli_obj_has_trans( a ) ) + { + // Assign the variables with an implicit transposition. + k = bli_obj_length( a ); + + rs_a = bli_obj_col_stride( a ); + cs_a = bli_obj_row_stride( a ); + } + + if ( bli_obj_has_notrans( b ) ) + { + rs_b = bli_obj_row_stride( b ); + cs_b = bli_obj_col_stride( b ); + } + else // if ( bli_obj_has_trans( b ) ) + { + // Assign the variables with an implicit transposition. + rs_b = bli_obj_col_stride( b ); + cs_b = bli_obj_row_stride( b ); + } + + void* restrict buf_c = bli_obj_buffer_at_off( c ); + const inc_t rs_c = bli_obj_row_stride( c ); + const inc_t cs_c = bli_obj_col_stride( c ); + + void* restrict buf_alpha = bli_obj_buffer_for_1x1( dt_exec, alpha ); + void* restrict buf_beta = bli_obj_buffer_for_1x1( dt_exec, beta ); + +#endif + + // Index into the type combination array to extract the correct + // function pointer. + FUNCPTR_T f = ftypes_var2[dt_exec]; + + // Invoke the function. + f + ( + conja, + conjb, + m, + n, + k, + buf_alpha, + buf_a, rs_a, cs_a, + buf_b, rs_b, cs_b, + buf_beta, + buf_c, rs_c, cs_c, + eff_id, + cntx, + rntm + ); +} + + +#undef GENTFUNC +#define GENTFUNC( ctype, ch, varname ) \ +\ +void PASTEMAC(ch,varname) \ + ( \ + conj_t conja, \ + conj_t conjb, \ + dim_t m, \ + dim_t n, \ + dim_t k, \ + void* restrict alpha, \ + void* restrict a, inc_t rs_a, inc_t cs_a, \ + void* restrict b, inc_t rs_b, inc_t cs_b, \ + void* restrict beta, \ + void* restrict c, inc_t rs_c, inc_t cs_c, \ + stor3_t eff_id, \ + cntx_t* restrict cntx, \ + rntm_t* restrict rntm \ + ) \ +{ \ + /* If any dimension is zero, return immediately. */ \ + if ( bli_zero_dim3( m, n, k ) ) return; \ +\ + /* If alpha is zero, scale by beta and return. */ \ + if ( PASTEMAC(ch,eq0)( *(( ctype* )alpha) ) ) \ + { \ + PASTEMAC(ch,scalm) \ + ( \ + BLIS_NO_CONJUGATE, \ + 0, \ + BLIS_NONUNIT_DIAG, \ + BLIS_DENSE, \ + m, n, \ + beta, \ + c, rs_c, cs_c \ + ); \ + return; \ + } \ +\ + const num_t dt = PASTEMAC(ch,type); \ +\ + /* Query the context for various blocksizes. */ \ + const dim_t NC = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_NC, cntx ); \ + const dim_t KC = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_KC, cntx ); \ + const dim_t MC = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_MC, cntx ); \ + const dim_t NR = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_NR, cntx ); \ + const dim_t MR = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_MR, cntx ); \ +\ + /* Compute partitioning step values for each matrix of each loop. */ \ + const inc_t jcstep_c = cs_c * NC; \ + const inc_t jcstep_b = cs_b * NC; \ +\ + const inc_t pcstep_a = cs_a * KC; \ + const inc_t pcstep_b = rs_b * KC; \ +\ + const inc_t icstep_c = rs_c * MC; \ + const inc_t icstep_a = rs_a * MC; \ +\ + const inc_t jrstep_c = cs_c * NR; \ + const inc_t jrstep_b = cs_b * NR; \ +\ + const inc_t irstep_c = rs_c * MR; \ + const inc_t irstep_a = rs_a * MR; \ +\ + /* Query a stor3_t enum value to characterize the problem. + Examples: BLIS_RRR, BLIS_RRC, BLIS_RCR, BLIS_RCC, etc. + NOTE: If any matrix is general-stored, we use the all-purpose sup + microkernel corresponding to the stor3_t enum value BLIS_XXX. */ \ + const stor3_t stor_id = bli_stor3_from_strides( rs_c, cs_c, \ + rs_a, cs_a, rs_b, cs_b ); \ +\ + /* Query the context for the sup microkernel address and cast it to its + function pointer type. */ \ + PASTECH(ch,gemmsup_ker_ft) \ + gemmsup_ker = bli_cntx_get_l3_sup_ker_dt( dt, stor_id, cntx ); \ +\ + ctype* restrict a_00 = a; \ + ctype* restrict b_00 = b; \ + ctype* restrict c_00 = c; \ + ctype* restrict alpha_cast = alpha; \ + ctype* restrict beta_cast = beta; \ +\ + ctype* restrict one = PASTEMAC(ch,1); \ +\ + auxinfo_t aux; \ +\ + /* Compute number of primary and leftover components of the outer + dimensions. + NOTE: Functionally speaking, we compute jc_iter as: + jc_iter = n / NC; if ( jc_left ) ++jc_iter; + However, this is implemented as: + jc_iter = ( n + NC - 1 ) / NC; + This avoids a branch at the cost of two additional integer instructions. + The pc_iter, mc_iter, nr_iter, and mr_iter variables are computed in + similar manner. */ \ + const dim_t jc_iter = ( n + NC - 1 ) / NC; \ + const dim_t jc_left = n % NC; \ +\ + const dim_t pc_iter = ( k + KC - 1 ) / KC; \ + const dim_t pc_left = k % KC; \ +\ + const dim_t ic_iter = ( m + MC - 1 ) / MC; \ + const dim_t ic_left = m % MC; \ +\ + const dim_t jc_inc = 1; \ + const dim_t pc_inc = 1; \ + const dim_t ic_inc = 1; \ + const dim_t jr_inc = 1; \ + const dim_t ir_inc = 1; \ +\ + /* Loop over the n dimension (NC rows/columns at a time). */ \ + for ( dim_t jj = 0; jj < jc_iter; jj += jc_inc ) \ + { \ + const dim_t nc_cur = ( bli_is_not_edge_f( jj, jc_iter, jc_left ) ? NC : jc_left ); \ +\ + ctype* restrict b_jc = b_00 + jj * jcstep_b; \ + ctype* restrict c_jc = c_00 + jj * jcstep_c; \ +\ + const dim_t jr_iter = ( nc_cur + NR - 1 ) / NR; \ + const dim_t jr_left = nc_cur % NR; \ +\ + /* Loop over the k dimension (KC rows/columns at a time). */ \ + for ( dim_t pp = 0; pp < pc_iter; pp += pc_inc ) \ + { \ + const dim_t kc_cur = ( bli_is_not_edge_f( pp, pc_iter, pc_left ) ? KC : pc_left ); \ +\ + ctype* restrict a_pc = a_00 + pp * pcstep_a; \ + ctype* restrict b_pc = b_jc + pp * pcstep_b; \ +\ + /* Only apply beta to the first iteration of the pc loop. */ \ + ctype* restrict beta_use = ( pp == 0 ? beta_cast : one ); \ +\ + /* Loop over the m dimension (MC rows at a time). */ \ + for ( dim_t ii = 0; ii < ic_iter; ii += ic_inc ) \ + { \ + const dim_t mc_cur = ( bli_is_not_edge_f( ii, ic_iter, ic_left ) ? MC : ic_left ); \ +\ + ctype* restrict a_ic = a_pc + ii * icstep_a; \ + ctype* restrict c_ic = c_jc + ii * icstep_c; \ +\ + const dim_t ir_iter = ( mc_cur + MR - 1 ) / MR; \ + const dim_t ir_left = mc_cur % MR; \ +\ + /* Loop over the n dimension (NR columns at a time). */ \ + for ( dim_t j = 0; j < jr_iter; j += jr_inc ) \ + { \ + const dim_t nr_cur = ( bli_is_not_edge_f( j, jr_iter, jr_left ) ? NR : jr_left ); \ +\ + ctype* restrict b_jr = b_pc + j * jrstep_b; \ + ctype* restrict c_jr = c_ic + j * jrstep_c; \ +\ +/* + ctype* restrict b2 = b_jr; \ +*/ \ +\ + /* Loop over the m dimension (MR rows at a time). */ \ + for ( dim_t i = 0; i < ir_iter; i += ir_inc ) \ + { \ + const dim_t mr_cur = ( bli_is_not_edge_f( i, ir_iter, ir_left ) ? MR : ir_left ); \ +\ + ctype* restrict a_ir = a_ic + i * irstep_a; \ + ctype* restrict c_ir = c_jr + i * irstep_c; \ +\ + /* Save addresses of next panels of A and B to the auxinfo_t + object. */ \ +/* + ctype* restrict a2 = bli_gemm_get_next_a_upanel( a_ir, irstep_a, ir_inc ); \ + if ( bli_is_last_iter( i, ir_iter, 0, 1 ) ) \ + { \ + a2 = a_00; \ + b2 = bli_gemm_get_next_b_upanel( b_jr, jrstep_b, jr_inc ); \ + if ( bli_is_last_iter( j, jr_iter, 0, 1 ) ) \ + b2 = b_00; \ + } \ +\ + bli_auxinfo_set_next_a( a2, &aux ); \ + bli_auxinfo_set_next_b( b2, &aux ); \ +*/ \ +\ + /* Invoke the gemmsup micro-kernel. */ \ + gemmsup_ker \ + ( \ + conja, \ + conjb, \ + mr_cur, \ + nr_cur, \ + kc_cur, \ + alpha_cast, \ + a_ir, rs_a, cs_a, \ + b_jr, rs_b, cs_b, \ + beta_use, \ + c_ir, rs_c, cs_c, \ + &aux, \ + cntx \ + ); \ + } \ + } \ + } \ + } \ + } \ +\ +/* +PASTEMAC(ch,fprintm)( stdout, "gemmsup_ref_var2: b1", kc_cur, nr_cur, b_jr, rs_b, cs_b, "%4.1f", "" ); \ +PASTEMAC(ch,fprintm)( stdout, "gemmsup_ref_var2: a1", mr_cur, kc_cur, a_ir, rs_a, cs_a, "%4.1f", "" ); \ +PASTEMAC(ch,fprintm)( stdout, "gemmsup_ref_var2: c ", mr_cur, nr_cur, c_ir, rs_c, cs_c, "%4.1f", "" ); \ +*/ \ +} + +INSERT_GENTFUNC_BASIC0( gemmsup_ref_var2 ) + + +// +// -- var1 --------------------------------------------------------------------- +// + +static FUNCPTR_T GENARRAY(ftypes_var1,gemmsup_ref_var1); + +void bli_gemmsup_ref_var1 + ( + trans_t trans, + obj_t* alpha, + obj_t* a, + obj_t* b, + obj_t* beta, + obj_t* c, + stor3_t eff_id, + cntx_t* cntx, + rntm_t* rntm + ) +{ +#if 0 + obj_t at, bt; + + bli_obj_alias_to( a, &at ); + bli_obj_alias_to( b, &bt ); + + // Induce transpositions on A and/or B if either object is marked for + // transposition. We can induce "fast" transpositions since they objects + // are guaranteed to not have structure or be packed. + if ( bli_obj_has_trans( &at ) ) { bli_obj_induce_fast_trans( &at ); } + if ( bli_obj_has_trans( &bt ) ) { bli_obj_induce_fast_trans( &bt ); } + + const num_t dt_exec = bli_obj_dt( c ); + + const conj_t conja = bli_obj_conj_status( a ); + const conj_t conjb = bli_obj_conj_status( b ); + + const dim_t m = bli_obj_length( c ); + const dim_t n = bli_obj_width( c ); + + const dim_t k = bli_obj_width( &at ); + + void* restrict buf_a = bli_obj_buffer_at_off( &at ); + const inc_t rs_a = bli_obj_row_stride( &at ); + const inc_t cs_a = bli_obj_col_stride( &at ); + + void* restrict buf_b = bli_obj_buffer_at_off( &bt ); + const inc_t rs_b = bli_obj_row_stride( &bt ); + const inc_t cs_b = bli_obj_col_stride( &bt ); + + void* restrict buf_c = bli_obj_buffer_at_off( c ); + const inc_t rs_c = bli_obj_row_stride( c ); + const inc_t cs_c = bli_obj_col_stride( c ); + + void* restrict buf_alpha = bli_obj_buffer_for_1x1( dt_exec, alpha ); + void* restrict buf_beta = bli_obj_buffer_for_1x1( dt_exec, beta ); + +#else + + const num_t dt_exec = bli_obj_dt( c ); + + const conj_t conja = bli_obj_conj_status( a ); + const conj_t conjb = bli_obj_conj_status( b ); + + const dim_t m = bli_obj_length( c ); + const dim_t n = bli_obj_width( c ); + dim_t k; + + void* restrict buf_a = bli_obj_buffer_at_off( a ); + inc_t rs_a; + inc_t cs_a; + + void* restrict buf_b = bli_obj_buffer_at_off( b ); + inc_t rs_b; + inc_t cs_b; + + if ( bli_obj_has_notrans( a ) ) + { + k = bli_obj_width( a ); + + rs_a = bli_obj_row_stride( a ); + cs_a = bli_obj_col_stride( a ); + } + else // if ( bli_obj_has_trans( a ) ) + { + // Assign the variables with an implicit transposition. + k = bli_obj_length( a ); + + rs_a = bli_obj_col_stride( a ); + cs_a = bli_obj_row_stride( a ); + } + + if ( bli_obj_has_notrans( b ) ) + { + rs_b = bli_obj_row_stride( b ); + cs_b = bli_obj_col_stride( b ); + } + else // if ( bli_obj_has_trans( b ) ) + { + // Assign the variables with an implicit transposition. + rs_b = bli_obj_col_stride( b ); + cs_b = bli_obj_row_stride( b ); + } + + void* restrict buf_c = bli_obj_buffer_at_off( c ); + const inc_t rs_c = bli_obj_row_stride( c ); + const inc_t cs_c = bli_obj_col_stride( c ); + + void* restrict buf_alpha = bli_obj_buffer_for_1x1( dt_exec, alpha ); + void* restrict buf_beta = bli_obj_buffer_for_1x1( dt_exec, beta ); + +#endif + + // Index into the type combination array to extract the correct + // function pointer. + FUNCPTR_T f = ftypes_var1[dt_exec]; + + // Invoke the function. + f + ( + conja, + conjb, + m, + n, + k, + buf_alpha, + buf_a, rs_a, cs_a, + buf_b, rs_b, cs_b, + buf_beta, + buf_c, rs_c, cs_c, + eff_id, + cntx, + rntm + ); +} + + +#undef GENTFUNC +#define GENTFUNC( ctype, ch, varname ) \ +\ +void PASTEMAC(ch,varname) \ + ( \ + conj_t conja, \ + conj_t conjb, \ + dim_t m, \ + dim_t n, \ + dim_t k, \ + void* restrict alpha, \ + void* restrict a, inc_t rs_a, inc_t cs_a, \ + void* restrict b, inc_t rs_b, inc_t cs_b, \ + void* restrict beta, \ + void* restrict c, inc_t rs_c, inc_t cs_c, \ + stor3_t eff_id, \ + cntx_t* restrict cntx, \ + rntm_t* restrict rntm \ + ) \ +{ \ + /* If any dimension is zero, return immediately. */ \ + if ( bli_zero_dim3( m, n, k ) ) return; \ +\ + /* If alpha is zero, scale by beta and return. */ \ + if ( PASTEMAC(ch,eq0)( *(( ctype* )alpha) ) ) \ + { \ + PASTEMAC(ch,scalm) \ + ( \ + BLIS_NO_CONJUGATE, \ + 0, \ + BLIS_NONUNIT_DIAG, \ + BLIS_DENSE, \ + m, n, \ + beta, \ + c, rs_c, cs_c \ + ); \ + return; \ + } \ +\ + const num_t dt = PASTEMAC(ch,type); \ +\ + /* Query the context for various blocksizes. */ \ + const dim_t NC0 = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_NC, cntx ); \ + const dim_t KC = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_KC, cntx ); \ + const dim_t MC0 = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_MC, cntx ); \ + const dim_t NR = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_NR, cntx ); \ + const dim_t MR = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_MR, cntx ); \ +\ + /* Nudge NC up to a multiple of MR and MC up to a multiple of NR. */ \ + const dim_t NC = bli_align_dim_to_mult( NC0, MR ); \ + const dim_t MC = bli_align_dim_to_mult( MC0, NR ); \ +\ + /* Compute partitioning step values for each matrix of each loop. */ \ + const inc_t jcstep_c = rs_c * NC; \ + const inc_t jcstep_a = rs_a * NC; \ +\ + const inc_t pcstep_a = cs_a * KC; \ + const inc_t pcstep_b = rs_b * KC; \ +\ + const inc_t icstep_c = cs_c * MC; \ + const inc_t icstep_b = cs_b * MC; \ +\ + const inc_t jrstep_c = rs_c * MR; \ + const inc_t jrstep_a = rs_a * MR; \ +\ + const inc_t irstep_c = cs_c * NR; \ + const inc_t irstep_b = cs_b * NR; \ +\ + /* Query a stor3_t enum value to characterize the problem. + Examples: BLIS_RRR, BLIS_RRC, BLIS_RCR, BLIS_RCC, etc. + NOTE: If any matrix is general-stored, we use the all-purpose sup + microkernel corresponding to the stor3_t enum value BLIS_XXX. */ \ + const stor3_t stor_id = bli_stor3_from_strides( rs_c, cs_c, \ + rs_a, cs_a, rs_b, cs_b ); \ +\ + /* Query the context for the sup microkernel address and cast it to its + function pointer type. */ \ + PASTECH(ch,gemmsup_ker_ft) \ + gemmsup_ker = bli_cntx_get_l3_sup_ker_dt( dt, stor_id, cntx ); \ +\ + ctype* restrict a_00 = a; \ + ctype* restrict b_00 = b; \ + ctype* restrict c_00 = c; \ + ctype* restrict alpha_cast = alpha; \ + ctype* restrict beta_cast = beta; \ +\ + ctype* restrict one = PASTEMAC(ch,1); \ +\ + auxinfo_t aux; \ +\ + /* Compute number of primary and leftover components of the outer + dimensions. + NOTE: Functionally speaking, we compute jc_iter as: + jc_iter = m / NC; if ( jc_left ) ++jc_iter; + However, this is implemented as: + jc_iter = ( m + NC - 1 ) / NC; + This avoids a branch at the cost of two additional integer instructions. + The pc_iter, mc_iter, nr_iter, and mr_iter variables are computed in + similar manner. */ \ + const dim_t jc_iter = ( m + NC - 1 ) / NC; \ + const dim_t jc_left = m % NC; \ +\ + const dim_t pc_iter = ( k + KC - 1 ) / KC; \ + const dim_t pc_left = k % KC; \ +\ + const dim_t ic_iter = ( n + MC - 1 ) / MC; \ + const dim_t ic_left = n % MC; \ +\ + const dim_t jc_inc = 1; \ + const dim_t pc_inc = 1; \ + const dim_t ic_inc = 1; \ + const dim_t jr_inc = 1; \ + const dim_t ir_inc = 1; \ +\ + /* Loop over the m dimension (NC rows/columns at a time). */ \ + for ( dim_t jj = 0; jj < jc_iter; jj += jc_inc ) \ + { \ + const dim_t nc_cur = ( bli_is_not_edge_f( jj, jc_iter, jc_left ) ? NC : jc_left ); \ +\ + ctype* restrict a_jc = a_00 + jj * jcstep_a; \ + ctype* restrict c_jc = c_00 + jj * jcstep_c; \ +\ + const dim_t jr_iter = ( nc_cur + MR - 1 ) / MR; \ + const dim_t jr_left = nc_cur % MR; \ +\ + /* Loop over the k dimension (KC rows/columns at a time). */ \ + for ( dim_t pp = 0; pp < pc_iter; pp += pc_inc ) \ + { \ + const dim_t kc_cur = ( bli_is_not_edge_f( pp, pc_iter, pc_left ) ? KC : pc_left ); \ +\ + ctype* restrict a_pc = a_jc + pp * pcstep_a; \ + ctype* restrict b_pc = b_00 + pp * pcstep_b; \ +\ + /* Only apply beta to the first iteration of the pc loop. */ \ + ctype* restrict beta_use = ( pp == 0 ? beta_cast : one ); \ +\ + /* Loop over the n dimension (MC rows at a time). */ \ + for ( dim_t ii = 0; ii < ic_iter; ii += ic_inc ) \ + { \ + const dim_t mc_cur = ( bli_is_not_edge_f( ii, ic_iter, ic_left ) ? MC : ic_left ); \ +\ + ctype* restrict b_ic = b_pc + ii * icstep_b; \ + ctype* restrict c_ic = c_jc + ii * icstep_c; \ +\ + const dim_t ir_iter = ( mc_cur + NR - 1 ) / NR; \ + const dim_t ir_left = mc_cur % NR; \ +\ + /* Loop over the m dimension (NR columns at a time). */ \ + for ( dim_t j = 0; j < jr_iter; j += jr_inc ) \ + { \ + const dim_t nr_cur = ( bli_is_not_edge_f( j, jr_iter, jr_left ) ? NR : jr_left ); \ +\ + ctype* restrict a_jr = a_pc + j * jrstep_a; \ + ctype* restrict c_jr = c_ic + j * jrstep_c; \ +\ + /* Loop over the n dimension (MR rows at a time). */ \ + for ( dim_t i = 0; i < ir_iter; i += ir_inc ) \ + { \ + const dim_t mr_cur = ( bli_is_not_edge_f( i, ir_iter, ir_left ) ? MR : ir_left ); \ +\ + ctype* restrict b_ir = b_ic + i * irstep_b; \ + ctype* restrict c_ir = c_jr + i * irstep_c; \ +\ + /* Invoke the gemmsup micro-kernel. */ \ + gemmsup_ker \ + ( \ + conja, \ + conjb, \ + mr_cur, \ + nr_cur, \ + kc_cur, \ + alpha_cast, \ + a_jr, rs_a, cs_a, \ + b_ir, rs_b, cs_b, \ + beta_use, \ + c_ir, rs_c, cs_c, \ + &aux, \ + cntx \ + ); \ + } \ + } \ + } \ + } \ + } \ +\ +/* +PASTEMAC(ch,fprintm)( stdout, "gemmsup_ref_var2: b1", kc_cur, nr_cur, b_jr, rs_b, cs_b, "%4.1f", "" ); \ +PASTEMAC(ch,fprintm)( stdout, "gemmsup_ref_var2: a1", mr_cur, kc_cur, a_ir, rs_a, cs_a, "%4.1f", "" ); \ +PASTEMAC(ch,fprintm)( stdout, "gemmsup_ref_var2: c ", mr_cur, nr_cur, c_ir, rs_c, cs_c, "%4.1f", "" ); \ +*/ \ +} + +INSERT_GENTFUNC_BASIC0( gemmsup_ref_var1 ) +#endif + + diff --git a/frame/3/bli_l3_sup_var1n2m.c b/frame/3/bli_l3_sup_var1n2m.c new file mode 100644 index 000000000..c994f0067 --- /dev/null +++ b/frame/3/bli_l3_sup_var1n2m.c @@ -0,0 +1,803 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" + +#define FUNCPTR_T gemmsup_fp + +typedef void (*FUNCPTR_T) + ( + conj_t conja, + conj_t conjb, + dim_t m, + dim_t n, + dim_t k, + void* restrict alpha, + void* restrict a, inc_t rs_a, inc_t cs_a, + void* restrict b, inc_t rs_b, inc_t cs_b, + void* restrict beta, + void* restrict c, inc_t rs_c, inc_t cs_c, + stor3_t eff_id, + cntx_t* restrict cntx, + rntm_t* restrict rntm + ); + +// +// -- var1n -------------------------------------------------------------------- +// + +static FUNCPTR_T GENARRAY(ftypes_var1n,gemmsup_ref_var1n); + +void bli_gemmsup_ref_var1n + ( + trans_t trans, + obj_t* alpha, + obj_t* a, + obj_t* b, + obj_t* beta, + obj_t* c, + stor3_t eff_id, + cntx_t* cntx, + rntm_t* rntm + ) +{ +#if 0 + obj_t at, bt; + + bli_obj_alias_to( a, &at ); + bli_obj_alias_to( b, &bt ); + + // Induce transpositions on A and/or B if either object is marked for + // transposition. We can induce "fast" transpositions since they objects + // are guaranteed to not have structure or be packed. + if ( bli_obj_has_trans( &at ) ) { bli_obj_induce_fast_trans( &at ); } + if ( bli_obj_has_trans( &bt ) ) { bli_obj_induce_fast_trans( &bt ); } + + const num_t dt_exec = bli_obj_dt( c ); + + const conj_t conja = bli_obj_conj_status( a ); + const conj_t conjb = bli_obj_conj_status( b ); + + const dim_t m = bli_obj_length( c ); + const dim_t n = bli_obj_width( c ); + + const dim_t k = bli_obj_width( &at ); + + void* restrict buf_a = bli_obj_buffer_at_off( &at ); + const inc_t rs_a = bli_obj_row_stride( &at ); + const inc_t cs_a = bli_obj_col_stride( &at ); + + void* restrict buf_b = bli_obj_buffer_at_off( &bt ); + const inc_t rs_b = bli_obj_row_stride( &bt ); + const inc_t cs_b = bli_obj_col_stride( &bt ); + + void* restrict buf_c = bli_obj_buffer_at_off( c ); + const inc_t rs_c = bli_obj_row_stride( c ); + const inc_t cs_c = bli_obj_col_stride( c ); + + void* restrict buf_alpha = bli_obj_buffer_for_1x1( dt_exec, alpha ); + void* restrict buf_beta = bli_obj_buffer_for_1x1( dt_exec, beta ); + +#else + + const num_t dt_exec = bli_obj_dt( c ); + + const conj_t conja = bli_obj_conj_status( a ); + const conj_t conjb = bli_obj_conj_status( b ); + + const dim_t m = bli_obj_length( c ); + const dim_t n = bli_obj_width( c ); + dim_t k; + + void* restrict buf_a = bli_obj_buffer_at_off( a ); + inc_t rs_a; + inc_t cs_a; + + void* restrict buf_b = bli_obj_buffer_at_off( b ); + inc_t rs_b; + inc_t cs_b; + + if ( bli_obj_has_notrans( a ) ) + { + k = bli_obj_width( a ); + + rs_a = bli_obj_row_stride( a ); + cs_a = bli_obj_col_stride( a ); + } + else // if ( bli_obj_has_trans( a ) ) + { + // Assign the variables with an implicit transposition. + k = bli_obj_length( a ); + + rs_a = bli_obj_col_stride( a ); + cs_a = bli_obj_row_stride( a ); + } + + if ( bli_obj_has_notrans( b ) ) + { + rs_b = bli_obj_row_stride( b ); + cs_b = bli_obj_col_stride( b ); + } + else // if ( bli_obj_has_trans( b ) ) + { + // Assign the variables with an implicit transposition. + rs_b = bli_obj_col_stride( b ); + cs_b = bli_obj_row_stride( b ); + } + + void* restrict buf_c = bli_obj_buffer_at_off( c ); + const inc_t rs_c = bli_obj_row_stride( c ); + const inc_t cs_c = bli_obj_col_stride( c ); + + void* restrict buf_alpha = bli_obj_buffer_for_1x1( dt_exec, alpha ); + void* restrict buf_beta = bli_obj_buffer_for_1x1( dt_exec, beta ); + +#endif + + // Index into the type combination array to extract the correct + // function pointer. + FUNCPTR_T f = ftypes_var1n[dt_exec]; + + if ( bli_is_notrans( trans ) ) + { + // Invoke the function. + f + ( + conja, + conjb, + m, + n, + k, + buf_alpha, + buf_a, rs_a, cs_a, + buf_b, rs_b, cs_b, + buf_beta, + buf_c, rs_c, cs_c, + eff_id, + cntx, + rntm + ); + } + else + { + // Invoke the function (transposing the operation). + f + ( + conjb, // swap the conj values. + conja, + n, // swap the m and n dimensions. + m, + k, + buf_alpha, + buf_b, cs_b, rs_b, // swap the positions of A and B. + buf_a, cs_a, rs_a, // swap the strides of A and B. + buf_beta, + buf_c, cs_c, rs_c, // swap the strides of C. + bli_stor3_trans( eff_id ), // transpose the stor3_t id. + cntx, + rntm + ); + } +} + + +#undef GENTFUNC +#define GENTFUNC( ctype, ch, varname ) \ +\ +void PASTEMAC(ch,varname) \ + ( \ + conj_t conja, \ + conj_t conjb, \ + dim_t m, \ + dim_t n, \ + dim_t k, \ + void* restrict alpha, \ + void* restrict a, inc_t rs_a, inc_t cs_a, \ + void* restrict b, inc_t rs_b, inc_t cs_b, \ + void* restrict beta, \ + void* restrict c, inc_t rs_c, inc_t cs_c, \ + stor3_t stor_id, \ + cntx_t* restrict cntx, \ + rntm_t* restrict rntm \ + ) \ +{ \ + /* If any dimension is zero, return immediately. */ \ + if ( bli_zero_dim3( m, n, k ) ) return; \ +\ + /* If alpha is zero, scale by beta and return. */ \ + if ( PASTEMAC(ch,eq0)( *(( ctype* )alpha) ) ) \ + { \ + PASTEMAC(ch,scalm) \ + ( \ + BLIS_NO_CONJUGATE, \ + 0, \ + BLIS_NONUNIT_DIAG, \ + BLIS_DENSE, \ + m, n, \ + beta, \ + c, rs_c, cs_c \ + ); \ + return; \ + } \ +\ + const num_t dt = PASTEMAC(ch,type); \ +\ + /* This transposition of the stor3_t id value is inherent to variant 1. + The reason: we assume that variant 2 is the "main" variant. The + consequence of this is that we assume that the millikernels that + iterate over m are registered to the kernel group associated with + the kernel preference. So, regardless of whether the mkernels are + row- or column-preferential, millikernels that iterate over n are + always placed in the slots for the opposite kernel group. */ \ + stor_id = bli_stor3_trans( stor_id ); \ +\ + /* Query the context for various blocksizes. */ \ + const dim_t NR = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_NR, cntx ); \ + const dim_t MR = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_MR, cntx ); \ + const dim_t NC0 = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_NC, cntx ); \ + const dim_t MC0 = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_MC, cntx ); \ + const dim_t KC0 = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_KC, cntx ); \ +\ + dim_t KC; \ + if ( FALSE ) KC = KC0; \ + else if ( stor_id == BLIS_RRC || \ + stor_id == BLIS_CRC ) KC = KC0; \ + else if ( m <= MR && n <= NR ) KC = KC0; \ + else if ( m <= 2*MR && n <= 2*NR ) KC = KC0 / 2; \ + else if ( m <= 3*MR && n <= 3*NR ) KC = (( KC0 / 3 ) / 4 ) * 4; \ + else if ( m <= 4*MR && n <= 4*NR ) KC = KC0 / 4; \ + else KC = (( KC0 / 5 ) / 4 ) * 4; \ +\ + /* Nudge NC up to a multiple of MR and MC up to a multiple of NR. */ \ + const dim_t NC = bli_align_dim_to_mult( NC0, MR ); \ + const dim_t MC = bli_align_dim_to_mult( MC0, NR ); \ +\ + /* Query the maximum blocksize for MR, which implies a maximum blocksize + extension for the final iteration. */ \ + const dim_t MRM = bli_cntx_get_l3_sup_blksz_max_dt( dt, BLIS_MR, cntx ); \ + const dim_t MRE = MRM - MR; \ +\ + /* Compute partitioning step values for each matrix of each loop. */ \ + const inc_t jcstep_c = rs_c * NC; \ + const inc_t jcstep_a = rs_a * NC; \ +\ + const inc_t pcstep_a = cs_a * KC; \ + const inc_t pcstep_b = rs_b * KC; \ +\ + const inc_t icstep_c = cs_c * MC; \ + const inc_t icstep_b = cs_b * MC; \ +\ + const inc_t jrstep_c = rs_c * MR; \ + const inc_t jrstep_a = rs_a * MR; \ +\ + /* + const inc_t irstep_c = cs_c * NR; \ + const inc_t irstep_b = cs_b * NR; \ + */ \ +\ + /* Query the context for the sup microkernel address and cast it to its + function pointer type. */ \ + PASTECH(ch,gemmsup_ker_ft) \ + gemmsup_ker = bli_cntx_get_l3_sup_ker_dt( dt, stor_id, cntx ); \ +\ + ctype* restrict a_00 = a; \ + ctype* restrict b_00 = b; \ + ctype* restrict c_00 = c; \ + ctype* restrict alpha_cast = alpha; \ + ctype* restrict beta_cast = beta; \ +\ + ctype* restrict one = PASTEMAC(ch,1); \ +\ + auxinfo_t aux; \ +\ + /* Compute number of primary and leftover components of the outer + dimensions. + NOTE: Functionally speaking, we compute jc_iter as: + jc_iter = m / NC; if ( jc_left ) ++jc_iter; + However, this is implemented as: + jc_iter = ( m + NC - 1 ) / NC; + This avoids a branch at the cost of two additional integer instructions. + The pc_iter, mc_iter, nr_iter, and mr_iter variables are computed in + similar manner. */ \ + const dim_t jc_iter = ( m + NC - 1 ) / NC; \ + const dim_t jc_left = m % NC; \ +\ + const dim_t pc_iter = ( k + KC - 1 ) / KC; \ + const dim_t pc_left = k % KC; \ +\ + const dim_t ic_iter = ( n + MC - 1 ) / MC; \ + const dim_t ic_left = n % MC; \ +\ + const dim_t jc_inc = 1; \ + const dim_t pc_inc = 1; \ + const dim_t ic_inc = 1; \ + const dim_t jr_inc = 1; \ + /* + const dim_t ir_inc = 1; \ + */ \ +\ + /* Loop over the m dimension (NC rows/columns at a time). */ \ + for ( dim_t jj = 0; jj < jc_iter; jj += jc_inc ) \ + { \ + const dim_t nc_cur = ( bli_is_not_edge_f( jj, jc_iter, jc_left ) ? NC : jc_left ); \ +\ + ctype* restrict a_jc = a_00 + jj * jcstep_a; \ + ctype* restrict c_jc = c_00 + jj * jcstep_c; \ +\ + dim_t jr_iter = ( nc_cur + MR - 1 ) / MR; \ + dim_t jr_left = nc_cur % MR; \ +\ + /* An optimization: allow the last jr iteration to contain up to MRX + rows of C and A. (If MRX > MR, the mkernel has agreed to handle + these cases.) Note that this prevents us from declaring jr_iter and + jr_left as const. */ \ + if ( BLIS_ENABLE_SUP_MR_EXT ) \ + if ( MRE != 0 && 1 < jr_iter && jr_left != 0 && jr_left <= MRE ) \ + { \ + jr_iter--; jr_left += MR; \ + } \ +\ + /* Loop over the k dimension (KC rows/columns at a time). */ \ + for ( dim_t pp = 0; pp < pc_iter; pp += pc_inc ) \ + { \ + const dim_t kc_cur = ( bli_is_not_edge_f( pp, pc_iter, pc_left ) ? KC : pc_left ); \ +\ + ctype* restrict a_pc = a_jc + pp * pcstep_a; \ + ctype* restrict b_pc = b_00 + pp * pcstep_b; \ +\ + /* Only apply beta to the first iteration of the pc loop. */ \ + ctype* restrict beta_use = ( pp == 0 ? beta_cast : one ); \ +\ + /* Loop over the n dimension (MC rows at a time). */ \ + for ( dim_t ii = 0; ii < ic_iter; ii += ic_inc ) \ + { \ + const dim_t mc_cur = ( bli_is_not_edge_f( ii, ic_iter, ic_left ) ? MC : ic_left ); \ +\ + ctype* restrict b_ic = b_pc + ii * icstep_b; \ + ctype* restrict c_ic = c_jc + ii * icstep_c; \ +\ + /* + const dim_t ir_iter = ( mc_cur + NR - 1 ) / NR; \ + const dim_t ir_left = mc_cur % NR; \ + */ \ +\ + /* Loop over the m dimension (NR columns at a time). */ \ + for ( dim_t j = 0; j < jr_iter; j += jr_inc ) \ + { \ + const dim_t nr_cur = ( bli_is_not_edge_f( j, jr_iter, jr_left ) ? MR : jr_left ); \ +\ + ctype* restrict a_jr = a_pc + j * jrstep_a; \ + ctype* restrict c_jr = c_ic + j * jrstep_c; \ +\ + /* Loop over the n dimension (MR rows at a time). */ \ + { \ + /* Invoke the gemmsup millikernel. */ \ + gemmsup_ker \ + ( \ + conja, \ + conjb, \ + nr_cur, /* Notice: nr_cur <= MR. */ \ + mc_cur, /* Recall: mc_cur partitions the n dimension! */ \ + kc_cur, \ + alpha_cast, \ + a_jr, rs_a, cs_a, \ + b_ic, rs_b, cs_b, \ + beta_use, \ + c_jr, rs_c, cs_c, \ + &aux, \ + cntx \ + ); \ + } \ + } \ + } \ + } \ + } \ +\ +/* +PASTEMAC(ch,fprintm)( stdout, "gemmsup_ref_var2: b1", kc_cur, nr_cur, b_jr, rs_b, cs_b, "%4.1f", "" ); \ +PASTEMAC(ch,fprintm)( stdout, "gemmsup_ref_var2: a1", mr_cur, kc_cur, a_ir, rs_a, cs_a, "%4.1f", "" ); \ +PASTEMAC(ch,fprintm)( stdout, "gemmsup_ref_var2: c ", mr_cur, nr_cur, c_ir, rs_c, cs_c, "%4.1f", "" ); \ +*/ \ +} + +INSERT_GENTFUNC_BASIC0( gemmsup_ref_var1n ) + + +// +// -- var2m -------------------------------------------------------------------- +// + +static FUNCPTR_T GENARRAY(ftypes_var2m,gemmsup_ref_var2m); + +void bli_gemmsup_ref_var2m + ( + trans_t trans, + obj_t* alpha, + obj_t* a, + obj_t* b, + obj_t* beta, + obj_t* c, + stor3_t eff_id, + cntx_t* cntx, + rntm_t* rntm + ) +{ +#if 0 + obj_t at, bt; + + bli_obj_alias_to( a, &at ); + bli_obj_alias_to( b, &bt ); + + // Induce transpositions on A and/or B if either object is marked for + // transposition. We can induce "fast" transpositions since they objects + // are guaranteed to not have structure or be packed. + if ( bli_obj_has_trans( &at ) ) { bli_obj_induce_fast_trans( &at ); } + if ( bli_obj_has_trans( &bt ) ) { bli_obj_induce_fast_trans( &bt ); } + + const num_t dt_exec = bli_obj_dt( c ); + + const conj_t conja = bli_obj_conj_status( a ); + const conj_t conjb = bli_obj_conj_status( b ); + + const dim_t m = bli_obj_length( c ); + const dim_t n = bli_obj_width( c ); + + const dim_t k = bli_obj_width( &at ); + + void* restrict buf_a = bli_obj_buffer_at_off( &at ); + const inc_t rs_a = bli_obj_row_stride( &at ); + const inc_t cs_a = bli_obj_col_stride( &at ); + + void* restrict buf_b = bli_obj_buffer_at_off( &bt ); + const inc_t rs_b = bli_obj_row_stride( &bt ); + const inc_t cs_b = bli_obj_col_stride( &bt ); + + void* restrict buf_c = bli_obj_buffer_at_off( c ); + const inc_t rs_c = bli_obj_row_stride( c ); + const inc_t cs_c = bli_obj_col_stride( c ); + + void* restrict buf_alpha = bli_obj_buffer_for_1x1( dt_exec, alpha ); + void* restrict buf_beta = bli_obj_buffer_for_1x1( dt_exec, beta ); + +#else + const num_t dt_exec = bli_obj_dt( c ); + + const conj_t conja = bli_obj_conj_status( a ); + const conj_t conjb = bli_obj_conj_status( b ); + + const dim_t m = bli_obj_length( c ); + const dim_t n = bli_obj_width( c ); + dim_t k; + + void* restrict buf_a = bli_obj_buffer_at_off( a ); + inc_t rs_a; + inc_t cs_a; + + void* restrict buf_b = bli_obj_buffer_at_off( b ); + inc_t rs_b; + inc_t cs_b; + + if ( bli_obj_has_notrans( a ) ) + { + k = bli_obj_width( a ); + + rs_a = bli_obj_row_stride( a ); + cs_a = bli_obj_col_stride( a ); + } + else // if ( bli_obj_has_trans( a ) ) + { + // Assign the variables with an implicit transposition. + k = bli_obj_length( a ); + + rs_a = bli_obj_col_stride( a ); + cs_a = bli_obj_row_stride( a ); + } + + if ( bli_obj_has_notrans( b ) ) + { + rs_b = bli_obj_row_stride( b ); + cs_b = bli_obj_col_stride( b ); + } + else // if ( bli_obj_has_trans( b ) ) + { + // Assign the variables with an implicit transposition. + rs_b = bli_obj_col_stride( b ); + cs_b = bli_obj_row_stride( b ); + } + + void* restrict buf_c = bli_obj_buffer_at_off( c ); + const inc_t rs_c = bli_obj_row_stride( c ); + const inc_t cs_c = bli_obj_col_stride( c ); + + void* restrict buf_alpha = bli_obj_buffer_for_1x1( dt_exec, alpha ); + void* restrict buf_beta = bli_obj_buffer_for_1x1( dt_exec, beta ); + +#endif + + // Index into the type combination array to extract the correct + // function pointer. + FUNCPTR_T f = ftypes_var2m[dt_exec]; + + if ( bli_is_notrans( trans ) ) + { + // Invoke the function. + f + ( + conja, + conjb, + m, + n, + k, + buf_alpha, + buf_a, rs_a, cs_a, + buf_b, rs_b, cs_b, + buf_beta, + buf_c, rs_c, cs_c, + eff_id, + cntx, + rntm + ); + } + else + { + // Invoke the function (transposing the operation). + f + ( + conjb, // swap the conj values. + conja, + n, // swap the m and n dimensions. + m, + k, + buf_alpha, + buf_b, cs_b, rs_b, // swap the positions of A and B. + buf_a, cs_a, rs_a, // swap the strides of A and B. + buf_beta, + buf_c, cs_c, rs_c, // swap the strides of C. + bli_stor3_trans( eff_id ), // transpose the stor3_t id. + cntx, + rntm + ); + } +} + + +#undef GENTFUNC +#define GENTFUNC( ctype, ch, varname ) \ +\ +void PASTEMAC(ch,varname) \ + ( \ + conj_t conja, \ + conj_t conjb, \ + dim_t m, \ + dim_t n, \ + dim_t k, \ + void* restrict alpha, \ + void* restrict a, inc_t rs_a, inc_t cs_a, \ + void* restrict b, inc_t rs_b, inc_t cs_b, \ + void* restrict beta, \ + void* restrict c, inc_t rs_c, inc_t cs_c, \ + stor3_t stor_id, \ + cntx_t* restrict cntx, \ + rntm_t* restrict rntm \ + ) \ +{ \ + /* If any dimension is zero, return immediately. */ \ + if ( bli_zero_dim3( m, n, k ) ) return; \ +\ + /* If alpha is zero, scale by beta and return. */ \ + if ( PASTEMAC(ch,eq0)( *(( ctype* )alpha) ) ) \ + { \ + PASTEMAC(ch,scalm) \ + ( \ + BLIS_NO_CONJUGATE, \ + 0, \ + BLIS_NONUNIT_DIAG, \ + BLIS_DENSE, \ + m, n, \ + beta, \ + c, rs_c, cs_c \ + ); \ + return; \ + } \ +\ + const num_t dt = PASTEMAC(ch,type); \ +\ + /* Query the context for various blocksizes. */ \ + const dim_t NR = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_NR, cntx ); \ + const dim_t MR = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_MR, cntx ); \ + const dim_t NC = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_NC, cntx ); \ + const dim_t MC = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_MC, cntx ); \ + const dim_t KC0 = bli_cntx_get_l3_sup_blksz_def_dt( dt, BLIS_KC, cntx ); \ +\ + dim_t KC; \ + if ( stor_id == BLIS_RRR || \ + stor_id == BLIS_CCC ) KC = KC0; \ + else if ( stor_id == BLIS_RRC || \ + stor_id == BLIS_CRC ) KC = KC0; \ + else if ( m <= MR && n <= NR ) KC = KC0; \ + else if ( m <= 2*MR && n <= 2*NR ) KC = KC0 / 2; \ + else if ( m <= 3*MR && n <= 3*NR ) KC = (( KC0 / 3 ) / 4 ) * 4; \ + else if ( m <= 4*MR && n <= 4*NR ) KC = KC0 / 4; \ + else KC = (( KC0 / 5 ) / 4 ) * 4; \ +\ + /* Query the maximum blocksize for NR, which implies a maximum blocksize + extension for the final iteration. */ \ + const dim_t NRM = bli_cntx_get_l3_sup_blksz_max_dt( dt, BLIS_NR, cntx ); \ + const dim_t NRE = NRM - NR; \ +\ + /* Compute partitioning step values for each matrix of each loop. */ \ + const inc_t jcstep_c = cs_c * NC; \ + const inc_t jcstep_b = cs_b * NC; \ +\ + const inc_t pcstep_a = cs_a * KC; \ + const inc_t pcstep_b = rs_b * KC; \ +\ + const inc_t icstep_c = rs_c * MC; \ + const inc_t icstep_a = rs_a * MC; \ +\ + const inc_t jrstep_c = cs_c * NR; \ + const inc_t jrstep_b = cs_b * NR; \ +\ + /* + const inc_t irstep_c = rs_c * MR; \ + const inc_t irstep_a = rs_a * MR; \ + */ \ +\ + /* Query the context for the sup microkernel address and cast it to its + function pointer type. */ \ + PASTECH(ch,gemmsup_ker_ft) \ + gemmsup_ker = bli_cntx_get_l3_sup_ker_dt( dt, stor_id, cntx ); \ +\ + ctype* restrict a_00 = a; \ + ctype* restrict b_00 = b; \ + ctype* restrict c_00 = c; \ + ctype* restrict alpha_cast = alpha; \ + ctype* restrict beta_cast = beta; \ +\ + ctype* restrict one = PASTEMAC(ch,1); \ +\ + auxinfo_t aux; \ +\ + /* Compute number of primary and leftover components of the outer + dimensions. + NOTE: Functionally speaking, we compute jc_iter as: + jc_iter = n / NC; if ( jc_left ) ++jc_iter; + However, this is implemented as: + jc_iter = ( n + NC - 1 ) / NC; + This avoids a branch at the cost of two additional integer instructions. + The pc_iter, mc_iter, nr_iter, and mr_iter variables are computed in + similar manner. */ \ + const dim_t jc_iter = ( n + NC - 1 ) / NC; \ + const dim_t jc_left = n % NC; \ +\ + const dim_t pc_iter = ( k + KC - 1 ) / KC; \ + const dim_t pc_left = k % KC; \ +\ + const dim_t ic_iter = ( m + MC - 1 ) / MC; \ + const dim_t ic_left = m % MC; \ +\ + const dim_t jc_inc = 1; \ + const dim_t pc_inc = 1; \ + const dim_t ic_inc = 1; \ + const dim_t jr_inc = 1; \ + /* + const dim_t ir_inc = 1; \ + */ \ +\ + /* Loop over the n dimension (NC rows/columns at a time). */ \ + for ( dim_t jj = 0; jj < jc_iter; jj += jc_inc ) \ + { \ + const dim_t nc_cur = ( bli_is_not_edge_f( jj, jc_iter, jc_left ) ? NC : jc_left ); \ +\ + ctype* restrict b_jc = b_00 + jj * jcstep_b; \ + ctype* restrict c_jc = c_00 + jj * jcstep_c; \ +\ + dim_t jr_iter = ( nc_cur + NR - 1 ) / NR; \ + dim_t jr_left = nc_cur % NR; \ +\ + /* An optimization: allow the last jr iteration to contain up to NRX + columns of C and B. (If NRX > NR, the mkernel has agreed to handle + these cases.) Note that this prevents us from declaring jr_iter and + jr_left as const. */ \ + if ( BLIS_ENABLE_SUP_NR_EXT ) \ + if ( NRE != 0 && 1 < jr_iter && jr_left != 0 && jr_left <= NRE ) \ + { \ + jr_iter--; jr_left += NR; \ + } \ +\ + /* Loop over the k dimension (KC rows/columns at a time). */ \ + for ( dim_t pp = 0; pp < pc_iter; pp += pc_inc ) \ + { \ + const dim_t kc_cur = ( bli_is_not_edge_f( pp, pc_iter, pc_left ) ? KC : pc_left ); \ +\ + ctype* restrict a_pc = a_00 + pp * pcstep_a; \ + ctype* restrict b_pc = b_jc + pp * pcstep_b; \ +\ + /* Only apply beta to the first iteration of the pc loop. */ \ + ctype* restrict beta_use = ( pp == 0 ? beta_cast : one ); \ +\ + /* Loop over the m dimension (MC rows at a time). */ \ + for ( dim_t ii = 0; ii < ic_iter; ii += ic_inc ) \ + { \ + const dim_t mc_cur = ( bli_is_not_edge_f( ii, ic_iter, ic_left ) ? MC : ic_left ); \ +\ + ctype* restrict a_ic = a_pc + ii * icstep_a; \ + ctype* restrict c_ic = c_jc + ii * icstep_c; \ +\ + /* + const dim_t ir_iter = ( mc_cur + MR - 1 ) / MR; \ + const dim_t ir_left = mc_cur % MR; \ + */ \ +\ + /* Loop over the n dimension (NR columns at a time). */ \ + for ( dim_t j = 0; j < jr_iter; j += jr_inc ) \ + { \ + const dim_t nr_cur = ( bli_is_not_edge_f( j, jr_iter, jr_left ) ? NR : jr_left ); \ +\ + ctype* restrict b_jr = b_pc + j * jrstep_b; \ + ctype* restrict c_jr = c_ic + j * jrstep_c; \ +\ + /* Loop over the m dimension (MR rows at a time). */ \ + { \ + /* Invoke the gemmsup millikernel. */ \ + gemmsup_ker \ + ( \ + conja, \ + conjb, \ + mc_cur, \ + nr_cur, \ + kc_cur, \ + alpha_cast, \ + a_ic, rs_a, cs_a, \ + b_jr, rs_b, cs_b, \ + beta_use, \ + c_jr, rs_c, cs_c, \ + &aux, \ + cntx \ + ); \ + } \ + } \ + } \ + } \ + } \ +\ +/* +PASTEMAC(ch,fprintm)( stdout, "gemmsup_ref_var2: b1", kc_cur, nr_cur, b_jr, rs_b, cs_b, "%4.1f", "" ); \ +PASTEMAC(ch,fprintm)( stdout, "gemmsup_ref_var2: a1", mr_cur, kc_cur, a_ir, rs_a, cs_a, "%4.1f", "" ); \ +PASTEMAC(ch,fprintm)( stdout, "gemmsup_ref_var2: c ", mr_cur, nr_cur, c_ir, rs_c, cs_c, "%4.1f", "" ); \ +*/ \ +} + +INSERT_GENTFUNC_BASIC0( gemmsup_ref_var2m ) + diff --git a/frame/3/bli_l3_sup_vars.h b/frame/3/bli_l3_sup_vars.h new file mode 100644 index 000000000..bc1d2b3ef --- /dev/null +++ b/frame/3/bli_l3_sup_vars.h @@ -0,0 +1,92 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + + +// +// Prototype object-based interfaces. +// + +#undef GENPROT +#define GENPROT( opname ) \ +\ +void PASTEMAC0(opname) \ + ( \ + trans_t trans, \ + obj_t* alpha, \ + obj_t* a, \ + obj_t* b, \ + obj_t* beta, \ + obj_t* c, \ + stor3_t eff_id, \ + cntx_t* cntx, \ + rntm_t* rntm \ + ); + +GENPROT( gemmsup_ref_var1 ) +GENPROT( gemmsup_ref_var2 ) + +GENPROT( gemmsup_ref_var1n ) +GENPROT( gemmsup_ref_var2m ) + + +// +// Prototype BLAS-like interfaces with void pointer operands. +// + +#undef GENTPROT +#define GENTPROT( ctype, ch, varname ) \ +\ +void PASTEMAC(ch,varname) \ + ( \ + conj_t conja, \ + conj_t conjb, \ + dim_t m, \ + dim_t n, \ + dim_t k, \ + void* restrict alpha, \ + void* restrict a, inc_t rs_a, inc_t cs_a, \ + void* restrict b, inc_t rs_b, inc_t cs_b, \ + void* restrict beta, \ + void* restrict c, inc_t rs_c, inc_t cs_c, \ + stor3_t eff_id, \ + cntx_t* restrict cntx, \ + rntm_t* restrict rntm \ + ); + +INSERT_GENTPROT_BASIC0( gemmsup_ref_var1 ) +INSERT_GENTPROT_BASIC0( gemmsup_ref_var2 ) + +INSERT_GENTPROT_BASIC0( gemmsup_ref_var1n ) +INSERT_GENTPROT_BASIC0( gemmsup_ref_var2m ) + diff --git a/frame/3/gemm/bli_gemm_front.c b/frame/3/gemm/bli_gemm_front.c index 20928e198..f70dd036e 100644 --- a/frame/3/gemm/bli_gemm_front.c +++ b/frame/3/gemm/bli_gemm_front.c @@ -54,6 +54,7 @@ void bli_gemm_front obj_t c_local; +#if 0 #ifdef BLIS_ENABLE_SMALL_MATRIX // Only handle small problems separately for homogeneous datatypes. if ( bli_obj_dt( a ) == bli_obj_dt( b ) && @@ -62,6 +63,7 @@ void bli_gemm_front gint_t status = bli_gemm_small( alpha, a, b, beta, c, cntx, cntl ); if ( status == BLIS_SUCCESS ) return; } +#endif #endif // Check parameters. diff --git a/frame/3/old/bli_l3_sup_edge.h b/frame/3/old/bli_l3_sup_edge.h new file mode 100644 index 000000000..06f3bb18b --- /dev/null +++ b/frame/3/old/bli_l3_sup_edge.h @@ -0,0 +1,141 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +static +void bli_dgemmsup_ker_edge_dispatcher + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx, + const dim_t num_mr, + const dim_t num_nr, + dim_t* restrict mrs, + dim_t* restrict nrs, + dgemmsup_ker_ft* kmap + ) +{ + #if 1 + + // outer loop = mr; inner loop = nr + + dim_t n_left = n0; + double* restrict cj = c; + double* restrict bj = b; + + for ( dim_t j = 0; n_left != 0; ++j ) + { + const dim_t nr_cur = nrs[ j ]; + + if ( nr_cur <= n_left ) + { + dim_t m_left = m0; + double* restrict cij = cj; + double* restrict ai = a; + + for ( dim_t i = 0; m_left != 0; ++i ) + { + const dim_t mr_cur = mrs[ i ]; + + if ( mr_cur <= m_left ) + { + dgemmsup_ker_ft ker_fp = kmap[ i*num_nr + j*1 ]; + + ker_fp + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + } + + cj += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + } + + #else + + // outer loop = nr; inner loop = mr + + dim_t m_left = m0; + double* restrict ci = c; + double* restrict ai = a; + + for ( dim_t i = 0; m_left != 0; ++i ) + { + const dim_t mr_cur = mrs[ i ]; + + if ( mr_cur <= m_left ) + { + dim_t n_left = n0; + double* restrict cij = ci; + double* restrict bj = b; + + for ( dim_t j = 0; n_left != 0; ++j ) + { + const dim_t nr_cur = nrs[ j ]; + + if ( nr_cur <= n_left ) + { + dgemmsup_ker_ft ker_fp = kmap[ i*num_nr + j*1 ]; + + ker_fp + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + + } + } + + ci += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + } + #endif +} + diff --git a/frame/base/bli_cntx.c b/frame/base/bli_cntx.c index a3b789592..b612518b8 100644 --- a/frame/base/bli_cntx.c +++ b/frame/base/bli_cntx.c @@ -48,9 +48,8 @@ void bli_cntx_set_blkszs( ind_t method, dim_t n_bs, ... ) // This function can be called from the bli_cntx_init_*() function for // a particular architecture if the kernel developer wishes to use // non-default blocksizes. It should be called after - // bli_cntx_init_defaults() so that default blocksizes remain - // for any datatypes / register blocksizes that were not targed for - // optimization. + // bli_cntx_init_defaults() so that the context begins with default + // blocksizes across all datatypes. /* Example prototypes: @@ -76,49 +75,36 @@ void bli_cntx_set_blkszs( ind_t method, dim_t n_bs, ... ) cntx_t* cntx ); */ + va_list args; dim_t i; - bszid_t* bszids; - blksz_t** blkszs; - bszid_t* bmults; - double* dsclrs; - double* msclrs; - - cntx_t* cntx; - - blksz_t* cntx_blkszs; - bszid_t* cntx_bmults; - - // Allocate some temporary local arrays. - + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_blkszs(): " ); + #endif + bszid_t* bszids = bli_malloc_intl( n_bs * sizeof( bszid_t ) ); #ifdef BLIS_ENABLE_MEM_TRACING printf( "bli_cntx_set_blkszs(): " ); #endif - bszids = bli_malloc_intl( n_bs * sizeof( bszid_t ) ); + blksz_t** blkszs = bli_malloc_intl( n_bs * sizeof( blksz_t* ) ); #ifdef BLIS_ENABLE_MEM_TRACING printf( "bli_cntx_set_blkszs(): " ); #endif - blkszs = bli_malloc_intl( n_bs * sizeof( blksz_t* ) ); + bszid_t* bmults = bli_malloc_intl( n_bs * sizeof( bszid_t ) ); #ifdef BLIS_ENABLE_MEM_TRACING printf( "bli_cntx_set_blkszs(): " ); #endif - bmults = bli_malloc_intl( n_bs * sizeof( bszid_t ) ); + double* dsclrs = bli_malloc_intl( n_bs * sizeof( double ) ); #ifdef BLIS_ENABLE_MEM_TRACING printf( "bli_cntx_set_blkszs(): " ); #endif - dsclrs = bli_malloc_intl( n_bs * sizeof( double ) ); - - #ifdef BLIS_ENABLE_MEM_TRACING - printf( "bli_cntx_set_blkszs(): " ); - #endif - msclrs = bli_malloc_intl( n_bs * sizeof( double ) ); + double* msclrs = bli_malloc_intl( n_bs * sizeof( double ) ); // -- Begin variable argument section -- @@ -175,7 +161,7 @@ void bli_cntx_set_blkszs( ind_t method, dim_t n_bs, ... ) } // The last argument should be the context pointer. - cntx = ( cntx_t* )va_arg( args, cntx_t* ); + cntx_t* cntx = ( cntx_t* )va_arg( args, cntx_t* ); // Shutdown variable argument environment and clean up stack. va_end( args ); @@ -188,8 +174,9 @@ void bli_cntx_set_blkszs( ind_t method, dim_t n_bs, ... ) // Query the context for the addresses of: // - the blocksize object array // - the blocksize multiple array - cntx_blkszs = bli_cntx_blkszs_buf( cntx ); - cntx_bmults = bli_cntx_bmults_buf( cntx ); + + blksz_t* cntx_blkszs = bli_cntx_blkszs_buf( cntx ); + bszid_t* cntx_bmults = bli_cntx_bmults_buf( cntx ); // Now that we have the context address, we want to copy the values // from the temporary buffers into the corresponding buffers in the @@ -353,15 +340,10 @@ void bli_cntx_set_ind_blkszs( ind_t method, dim_t n_bs, ... ) NOTE: This function modifies an existing context that is presumed to have been initialized for native execution. */ + va_list args; dim_t i; - bszid_t* bszids; - double* dsclrs; - double* msclrs; - - cntx_t* cntx; - // Return early if called with BLIS_NAT. if ( method == BLIS_NAT ) return; @@ -370,17 +352,17 @@ void bli_cntx_set_ind_blkszs( ind_t method, dim_t n_bs, ... ) #ifdef BLIS_ENABLE_MEM_TRACING printf( "bli_cntx_set_ind_blkszs(): " ); #endif - bszids = bli_malloc_intl( n_bs * sizeof( bszid_t ) ); + bszid_t* bszids = bli_malloc_intl( n_bs * sizeof( bszid_t ) ); #ifdef BLIS_ENABLE_MEM_TRACING printf( "bli_cntx_set_ind_blkszs(): " ); #endif - dsclrs = bli_malloc_intl( n_bs * sizeof( double ) ); + double* dsclrs = bli_malloc_intl( n_bs * sizeof( double ) ); #ifdef BLIS_ENABLE_MEM_TRACING printf( "bli_cntx_set_ind_blkszs(): " ); #endif - msclrs = bli_malloc_intl( n_bs * sizeof( double ) ); + double* msclrs = bli_malloc_intl( n_bs * sizeof( double ) ); // -- Begin variable argument section -- @@ -408,7 +390,7 @@ void bli_cntx_set_ind_blkszs( ind_t method, dim_t n_bs, ... ) } // The last argument should be the context pointer. - cntx = ( cntx_t* )va_arg( args, cntx_t* ); + cntx_t* cntx = ( cntx_t* )va_arg( args, cntx_t* ); // Shutdown variable argument environment and clean up stack. va_end( args ); @@ -523,9 +505,8 @@ void bli_cntx_set_l3_nat_ukrs( dim_t n_ukrs, ... ) // This function can be called from the bli_cntx_init_*() function for // a particular architecture if the kernel developer wishes to use // non-default level-3 microkernels. It should be called after - // bli_cntx_init_defaults() so that default functions are still called - // for any datatypes / register blocksizes that were not targed for - // optimization. + // bli_cntx_init_defaults() so that the context begins with default + // microkernels across all datatypes. /* Example prototypes: @@ -539,6 +520,7 @@ void bli_cntx_set_l3_nat_ukrs( dim_t n_ukrs, ... ) cntx_t* cntx ); */ + va_list args; dim_t i; @@ -623,8 +605,8 @@ void bli_cntx_set_l3_nat_ukrs( dim_t n_ukrs, ... ) // Process each blocksize id tuple provided. for ( i = 0; i < n_ukrs; ++i ) { - // Read the current blocksize id, blksz_t* pointer, blocksize - // multiple id, and blocksize scalar. + // Read the current ukernel id, ukernel datatype, ukernel function + // pointer, and ukernel preference. const l3ukr_t ukr_id = ukr_ids[ i ]; const num_t ukr_dt = ukr_dts[ i ]; void_fp ukr_fp = ukr_fps[ i ]; @@ -672,14 +654,499 @@ void bli_cntx_set_l3_nat_ukrs( dim_t n_ukrs, ... ) // ----------------------------------------------------------------------------- +void bli_cntx_set_l3_sup_thresh( dim_t n_thresh, ... ) +{ + // This function can be called from the bli_cntx_init_*() function for + // a particular architecture if the kernel developer wishes to use + // non-default thresholds for small/unpacked matrix handling. It should + // be called after bli_cntx_init_defaults() so that the context begins + // with default thresholds. + + /* Example prototypes: + + void bli_cntx_set_l3_sup_thresh + ( + dim_t n_thresh, + threshid_t th0_id, blksz_t* blksz0, + threshid_t th1_id, blksz_t* blksz1, + ... + cntx_t* cntx + ); + + */ + + va_list args; + dim_t i; + + // Allocate some temporary local arrays. + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_l3_sup_thresh(): " ); + #endif + threshid_t* threshids = bli_malloc_intl( n_thresh * sizeof( threshid_t ) ); + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_l3_sup_thresh(): " ); + #endif + blksz_t** threshs = bli_malloc_intl( n_thresh * sizeof( blksz_t* ) ); + + // -- Begin variable argument section -- + + // Initialize variable argument environment. + va_start( args, n_thresh ); + + // Process n_thresh tuples. + for ( i = 0; i < n_thresh; ++i ) + { + // Here, we query the variable argument list for: + // - the threshid_t of the threshold we're about to process, + // - the address of the blksz_t object, + threshid_t th_id = ( threshid_t )va_arg( args, threshid_t ); + blksz_t* thresh = ( blksz_t* )va_arg( args, blksz_t* ); + + // Store the values in our temporary arrays. + threshids[ i ] = th_id; + threshs[ i ] = thresh; + } + + // The last argument should be the context pointer. + cntx_t* cntx = ( cntx_t* )va_arg( args, cntx_t* ); + + // Shutdown variable argument environment and clean up stack. + va_end( args ); + + // -- End variable argument section -- + + // Query the context for the addresses of: + // - the threshold array + blksz_t* cntx_threshs = bli_cntx_l3_sup_thresh_buf( cntx ); + + // Now that we have the context address, we want to copy the values + // from the temporary buffers into the corresponding buffers in the + // context. Notice that the blksz_t* pointers were saved, rather than + // the objects themselves, but we copy the contents of the objects + // when copying into the context. + + // Process each blocksize id tuple provided. + for ( i = 0; i < n_thresh; ++i ) + { + // Read the current blocksize id, blksz_t* pointer, blocksize + // multiple id, and blocksize scalar. + threshid_t th_id = threshids[ i ]; + blksz_t* thresh = threshs[ i ]; + + blksz_t* cntx_thresh = &cntx_threshs[ th_id ]; + + // Copy the blksz_t object contents into the appropriate + // location within the context's blksz_t array. + //cntx_threshs[ th_id ] = *thresh; + //bli_blksz_copy( thresh, cntx_thresh ); + bli_blksz_copy_if_pos( thresh, cntx_thresh ); + } + + // Free the temporary local arrays. + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_l3_sup_thresh(): " ); + #endif + bli_free_intl( threshs ); + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_l3_sup_thresh(): " ); + #endif + bli_free_intl( threshids ); +} + +// ----------------------------------------------------------------------------- + +void bli_cntx_set_l3_sup_handlers( dim_t n_ops, ... ) +{ + // This function can be called from the bli_cntx_init_*() function for + // a particular architecture if the kernel developer wishes to use + // non-default level-3 operation handler for small/unpacked matrices. It + // should be called after bli_cntx_init_defaults() so that the context + // begins with default sup handlers across all datatypes. + + /* Example prototypes: + + void bli_cntx_set_l3_sup_handlers + ( + dim_t n_ops, + opid_t op0_id, void* handler0_fp, + opid_t op1_id, void* handler1_fp, + opid_t op2_id, void* handler2_fp, + ... + cntx_t* cntx + ); + */ + + va_list args; + dim_t i; + + // Allocate some temporary local arrays. + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_l3_sup_handlers(): " ); + #endif + opid_t* op_ids = bli_malloc_intl( n_ops * sizeof( opid_t ) ); + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_l3_sup_handlers(): " ); + #endif + void** op_fps = bli_malloc_intl( n_ops * sizeof( void* ) ); + + // -- Begin variable argument section -- + + // Initialize variable argument environment. + va_start( args, n_ops ); + + // Process n_ukrs tuples. + for ( i = 0; i < n_ops; ++i ) + { + // Here, we query the variable argument list for: + // - the opid_t of the operation we're about to process, + // - the sup handler function pointer + // that we need to store to the context. + const opid_t op_id = ( opid_t )va_arg( args, opid_t ); + void* op_fp = ( void* )va_arg( args, void* ); + + // Store the values in our temporary arrays. + op_ids[ i ] = op_id; + op_fps[ i ] = op_fp; + } + + // The last argument should be the context pointer. + cntx_t* cntx = ( cntx_t* )va_arg( args, cntx_t* ); + + // Shutdown variable argument environment and clean up stack. + va_end( args ); + + // -- End variable argument section -- + + // Query the context for the addresses of: + // - the l3 small/unpacked handlers array + void** cntx_l3_sup_handlers = bli_cntx_l3_sup_handlers_buf( cntx ); + + // Now that we have the context address, we want to copy the values + // from the temporary buffers into the corresponding buffers in the + // context. + + // Process each operation id tuple provided. + for ( i = 0; i < n_ops; ++i ) + { + // Read the current ukernel id, ukernel datatype, and ukernel function + // pointer. + const opid_t op_id = op_ids[ i ]; + void* op_fp = op_fps[ i ]; + + // Store the sup handler function pointer into the slot for the + // specified operation id. + cntx_l3_sup_handlers[ op_id ] = op_fp; + } + + // Free the temporary local arrays. + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_l3_sup_handlers(): " ); + #endif + bli_free_intl( op_ids ); + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_l3_sup_handlers(): " ); + #endif + bli_free_intl( op_fps ); +} + +// ----------------------------------------------------------------------------- + +void bli_cntx_set_l3_sup_blkszs( dim_t n_bs, ... ) +{ + // This function can be called from the bli_cntx_init_*() function for + // a particular architecture if the kernel developer wishes to use + // non-default l3 sup blocksizes. It should be called after + // bli_cntx_init_defaults() so that the context begins with default + // blocksizes across all datatypes. + + /* Example prototypes: + + void bli_cntx_set_blkszs + ( + dim_t n_bs, + bszid_t bs0_id, blksz_t* blksz0, + bszid_t bs1_id, blksz_t* blksz1, + bszid_t bs2_id, blksz_t* blksz2, + ... + cntx_t* cntx + ); + */ + + va_list args; + dim_t i; + + // Allocate some temporary local arrays. + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_blkszs(): " ); + #endif + bszid_t* bszids = bli_malloc_intl( n_bs * sizeof( bszid_t ) ); + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_blkszs(): " ); + #endif + blksz_t** blkszs = bli_malloc_intl( n_bs * sizeof( blksz_t* ) ); + + // -- Begin variable argument section -- + + // Initialize variable argument environment. + va_start( args, n_bs ); + + // Process n_bs tuples. + for ( i = 0; i < n_bs; ++i ) + { + // Here, we query the variable argument list for: + // - the bszid_t of the blocksize we're about to process, + // - the address of the blksz_t object. + bszid_t bs_id = ( bszid_t )va_arg( args, bszid_t ); + blksz_t* blksz = ( blksz_t* )va_arg( args, blksz_t* ); + + // Store the values in our temporary arrays. + bszids[ i ] = bs_id; + blkszs[ i ] = blksz; + } + + // The last argument should be the context pointer. + cntx_t* cntx = ( cntx_t* )va_arg( args, cntx_t* ); + + // Shutdown variable argument environment and clean up stack. + va_end( args ); + + // -- End variable argument section -- + + // Query the context for the addresses of: + // - the blocksize object array + blksz_t* cntx_l3_sup_blkszs = bli_cntx_l3_sup_blkszs_buf( cntx ); + + // Now that we have the context address, we want to copy the values + // from the temporary buffers into the corresponding buffers in the + // context. Notice that the blksz_t* pointers were saved, rather than + // the objects themselves, but we copy the contents of the objects + // when copying into the context. + + // Process each blocksize id tuple provided. + for ( i = 0; i < n_bs; ++i ) + { + // Read the current blocksize id, blksz_t* pointer, blocksize + // multiple id, and blocksize scalar. + bszid_t bs_id = bszids[ i ]; + blksz_t* blksz = blkszs[ i ]; + + blksz_t* cntx_l3_sup_blksz = &cntx_l3_sup_blkszs[ bs_id ]; + + // Copy the blksz_t object contents into the appropriate + // location within the context's blksz_t array. + //cntx_l3_sup_blkszs[ bs_id ] = *blksz; + //bli_blksz_copy( blksz, cntx_l3_sup_blksz ); + bli_blksz_copy_if_pos( blksz, cntx_l3_sup_blksz ); + } + + // Free the temporary local arrays. + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_blkszs(): " ); + #endif + bli_free_intl( blkszs ); + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_blkszs(): " ); + #endif + bli_free_intl( bszids ); +} + +// ----------------------------------------------------------------------------- + +void bli_cntx_set_l3_sup_kers( dim_t n_ukrs, ... ) +{ + // This function can be called from the bli_cntx_init_*() function for + // a particular architecture if the kernel developer wishes to use + // non-default level-3 microkernels for small/unpacked matrices. It + // should be called after bli_cntx_init_defaults() so that the context + // begins with default sup micro/millikernels across all datatypes. + + /* Example prototypes: + + void bli_cntx_set_l3_sup_kers + ( + dim_t n_ukrs, + stor3_t stor_id0, num_t dt0, void* ukr0_fp, bool_t pref0, + stor3_t stor_id1, num_t dt1, void* ukr1_fp, bool_t pref1, + stor3_t stor_id2, num_t dt2, void* ukr2_fp, bool_t pref2, + ... + cntx_t* cntx + ); + */ + + va_list args; + dim_t i; + + // Allocate some temporary local arrays. + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_l3_sup_kers(): " ); + #endif + stor3_t* st3_ids = bli_malloc_intl( n_ukrs * sizeof( stor3_t ) ); + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_l3_sup_kers(): " ); + #endif + num_t* ukr_dts = bli_malloc_intl( n_ukrs * sizeof( num_t ) ); + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_l3_sup_kers(): " ); + #endif + void** ukr_fps = bli_malloc_intl( n_ukrs * sizeof( void* ) ); + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_l3_sup_kers(): " ); + #endif + bool_t* ukr_prefs = bli_malloc_intl( n_ukrs * sizeof( bool_t ) ); + + // -- Begin variable argument section -- + + // Initialize variable argument environment. + va_start( args, n_ukrs ); + + // Process n_ukrs tuples. + for ( i = 0; i < n_ukrs; ++i ) + { + // Here, we query the variable argument list for: + // - the stor3_t storage case being assigned to the kernel we're + // about to process, + // - the datatype of the kernel, + // - the kernel function pointer, and + // - the kernel function storage preference + // that we need to store to the context. + const stor3_t st3_id = ( stor3_t )va_arg( args, stor3_t ); + const num_t ukr_dt = ( num_t )va_arg( args, num_t ); + void* ukr_fp = ( void* )va_arg( args, void* ); + const bool_t ukr_pref = ( bool_t )va_arg( args, int ); + + // Store the values in our temporary arrays. + st3_ids[ i ] = st3_id; + ukr_dts[ i ] = ukr_dt; + ukr_fps[ i ] = ukr_fp; + ukr_prefs[ i ] = ukr_pref; + } + + // The last argument should be the context pointer. + cntx_t* cntx = ( cntx_t* )va_arg( args, cntx_t* ); + + // Shutdown variable argument environment and clean up stack. + va_end( args ); + + // -- End variable argument section -- + + // Query the context for the addresses of: + // - the l3 small/unpacked ukernel func_t array + // - the l3 small/unpacked ukernel preferences array + func_t* cntx_l3_sup_kers = bli_cntx_l3_sup_kers_buf( cntx ); + mbool_t* cntx_l3_sup_kers_prefs = bli_cntx_l3_sup_kers_prefs_buf( cntx ); + + // Now that we have the context address, we want to copy the values + // from the temporary buffers into the corresponding buffers in the + // context. + +#if 0 + dim_t sup_map[ BLIS_NUM_LEVEL3_SUP_UKRS ][2]; + + // Create the small/unpacked ukernel mappings: + // - rv -> rrr 0, rcr 2 + // - rg -> rrc 1, rcc 3 + // - cv -> ccr 6, ccc 7 + // - cg -> crr 4, crc 5 + // - rd -> rrc 1 + // - cd -> crc 5 + // - rc -> rcc 3 + // - cr -> crr 4 + // - gx -> xxx 8 + // NOTE: We only need to set one slot in the context l3_sup_kers array + // for the general-stride/generic ukernel type, but since the loop below + // needs to be set up to set two slots to accommodate the RV, RG, CV, and + // CG, ukernel types, we will just be okay with the GX ukernel being set + // redundantly. (The RD, CD, CR, and RC ukernel types are set redundantly + // for the same reason.) + sup_map[ BLIS_GEMMSUP_RV_UKR ][0] = BLIS_RRR; + sup_map[ BLIS_GEMMSUP_RV_UKR ][1] = BLIS_RCR; + sup_map[ BLIS_GEMMSUP_RG_UKR ][0] = BLIS_RRC; + sup_map[ BLIS_GEMMSUP_RG_UKR ][1] = BLIS_RCC; + sup_map[ BLIS_GEMMSUP_CV_UKR ][0] = BLIS_CCR; + sup_map[ BLIS_GEMMSUP_CV_UKR ][1] = BLIS_CCC; + sup_map[ BLIS_GEMMSUP_CG_UKR ][0] = BLIS_CRR; + sup_map[ BLIS_GEMMSUP_CG_UKR ][1] = BLIS_CRC; + + sup_map[ BLIS_GEMMSUP_RD_UKR ][0] = BLIS_RRC; + sup_map[ BLIS_GEMMSUP_RD_UKR ][1] = BLIS_RRC; + sup_map[ BLIS_GEMMSUP_CD_UKR ][0] = BLIS_CRC; + sup_map[ BLIS_GEMMSUP_CD_UKR ][1] = BLIS_CRC; + + sup_map[ BLIS_GEMMSUP_RC_UKR ][0] = BLIS_RCC; + sup_map[ BLIS_GEMMSUP_RC_UKR ][1] = BLIS_RCC; + sup_map[ BLIS_GEMMSUP_CR_UKR ][0] = BLIS_CRR; + sup_map[ BLIS_GEMMSUP_CR_UKR ][1] = BLIS_CRR; + + sup_map[ BLIS_GEMMSUP_GX_UKR ][0] = BLIS_XXX; + sup_map[ BLIS_GEMMSUP_GX_UKR ][1] = BLIS_XXX; +#endif + + // Process each blocksize id tuple provided. + for ( i = 0; i < n_ukrs; ++i ) + { + // Read the current stor3_t id, ukernel datatype, ukernel function + // pointer, and ukernel preference. + const stor3_t st3_id = st3_ids[ i ]; + const num_t ukr_dt = ukr_dts[ i ]; + void* ukr_fp = ukr_fps[ i ]; + const bool_t ukr_pref = ukr_prefs[ i ]; + + // Index to the func_t and mbool_t for the current stor3_t id + // being processed. + func_t* ukrs = &cntx_l3_sup_kers[ st3_id ]; + mbool_t* prefs = &cntx_l3_sup_kers_prefs[ st3_id ]; + + // Store the ukernel function pointer and preference values into + // the stor3_t location in the context. + bli_func_set_dt( ukr_fp, ukr_dt, ukrs ); + bli_mbool_set_dt( ukr_pref, ukr_dt, prefs ); + } + + // Free the temporary local arrays. + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_l3_sup_kers(): " ); + #endif + bli_free_intl( st3_ids ); + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_l3_sup_kers(): " ); + #endif + bli_free_intl( ukr_dts ); + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_l3_sup_kers(): " ); + #endif + bli_free_intl( ukr_fps ); + + #ifdef BLIS_ENABLE_MEM_TRACING + printf( "bli_cntx_set_l3_sup_kers(): " ); + #endif + bli_free_intl( ukr_prefs ); +} + +// ----------------------------------------------------------------------------- + void bli_cntx_set_l1f_kers( dim_t n_kers, ... ) { // This function can be called from the bli_cntx_init_*() function for // a particular architecture if the kernel developer wishes to use // non-default level-1f kernels. It should be called after - // bli_cntx_init_defaults() so that default functions are still called - // for any datatypes / register blocksizes that were not targed for - // optimization. + // bli_cntx_init_defaults() so that the context begins with default l1f + // kernels across all datatypes. /* Example prototypes: @@ -693,6 +1160,7 @@ void bli_cntx_set_l1f_kers( dim_t n_kers, ... ) cntx_t* cntx ); */ + va_list args; dim_t i; @@ -755,8 +1223,8 @@ void bli_cntx_set_l1f_kers( dim_t n_kers, ... ) // Process each blocksize id tuple provided. for ( i = 0; i < n_kers; ++i ) { - // Read the current blocksize id, blksz_t* pointer, blocksize - // multiple id, and blocksize scalar. + // Read the current kernel id, kernel datatype, and kernel function + // pointer. const l1fkr_t ker_id = ker_ids[ i ]; const num_t ker_dt = ker_dts[ i ]; void_fp ker_fp = ker_fps[ i ]; @@ -795,9 +1263,8 @@ void bli_cntx_set_l1v_kers( dim_t n_kers, ... ) // This function can be called from the bli_cntx_init_*() function for // a particular architecture if the kernel developer wishes to use // non-default level-1v kernels. It should be called after - // bli_cntx_init_defaults() so that default functions are still called - // for any datatypes / register blocksizes that were not targed for - // optimization. + // bli_cntx_init_defaults() so that the context begins with default l1v + // kernels across all datatypes. /* Example prototypes: @@ -811,6 +1278,7 @@ void bli_cntx_set_l1v_kers( dim_t n_kers, ... ) cntx_t* cntx ); */ + va_list args; dim_t i; @@ -873,8 +1341,8 @@ void bli_cntx_set_l1v_kers( dim_t n_kers, ... ) // Process each blocksize id tuple provided. for ( i = 0; i < n_kers; ++i ) { - // Read the current blocksize id, blksz_t* pointer, blocksize - // multiple id, and blocksize scalar. + // Read the current kernel id, kernel datatype, and kernel function + // pointer. const l1vkr_t ker_id = ker_ids[ i ]; const num_t ker_dt = ker_dts[ i ]; void_fp ker_fp = ker_fps[ i ]; @@ -913,9 +1381,8 @@ void bli_cntx_set_packm_kers( dim_t n_kers, ... ) // This function can be called from the bli_cntx_init_*() function for // a particular architecture if the kernel developer wishes to use // non-default packing kernels. It should be called after - // bli_cntx_init_defaults() so that default functions are still called - // for any datatypes / register blocksizes that were not targed for - // optimization. + // bli_cntx_init_defaults() so that the context begins with default packm + // kernels across all datatypes. /* Example prototypes: @@ -929,6 +1396,7 @@ void bli_cntx_set_packm_kers( dim_t n_kers, ... ) cntx_t* cntx ); */ + va_list args; dim_t i; @@ -991,8 +1459,8 @@ void bli_cntx_set_packm_kers( dim_t n_kers, ... ) // Process each blocksize id tuple provided. for ( i = 0; i < n_kers; ++i ) { - // Read the current blocksize id, blksz_t* pointer, blocksize - // multiple id, and blocksize scalar. + // Read the current kernel id, kernel datatype, and kernel function + // pointer. const l1mkr_t ker_id = ker_ids[ i ]; const num_t ker_dt = ker_dts[ i ]; void_fp ker_fp = ker_fps[ i ]; @@ -1061,11 +1529,11 @@ void bli_cntx_print( cntx_t* cntx ) ); } - for ( i = 0; i < BLIS_NUM_LEVEL3_UKRS; ++i ) + for ( i = 0; i < BLIS_NUM_3OP_RC_COMBOS; ++i ) { - func_t* ukr = bli_cntx_get_l3_nat_ukrs( i, cntx ); + func_t* ukr = bli_cntx_get_l3_sup_kers( i, cntx ); - printf( "l3 nat ukr %2lu: %16p %16p %16p %16p\n", + printf( "l3 sup ukr %2lu: %16p %16p %16p %16p\n", ( unsigned long )i, bli_func_get_dt( BLIS_FLOAT, ukr ), bli_func_get_dt( BLIS_DOUBLE, ukr ), diff --git a/frame/base/bli_cntx.h b/frame/base/bli_cntx.h index cc4f7f7fb..a09cc8bd1 100644 --- a/frame/base/bli_cntx.h +++ b/frame/base/bli_cntx.h @@ -6,6 +6,7 @@ Copyright (C) 2014, The University of Texas at Austin Copyright (C) 2016, Hewlett Packard Enterprise Development LP + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -49,6 +50,12 @@ typedef struct cntx_s func_t* l3_nat_ukrs; mbool_t* l3_nat_ukrs_prefs; + blksz_t* l3_sup_thresh; + void** l3_sup_handlers; + blksz_t* l3_sup_blkszs; + func_t* l3_sup_kers; + mbool_t* l3_sup_kers_prefs; + func_t* l1f_kers; func_t* l1v_kers; @@ -89,6 +96,26 @@ static mbool_t* bli_cntx_l3_nat_ukrs_prefs_buf( cntx_t* cntx ) { return cntx->l3_nat_ukrs_prefs; } +static blksz_t* bli_cntx_l3_sup_thresh_buf( cntx_t* cntx ) +{ + return cntx->l3_sup_thresh; +} +static void** bli_cntx_l3_sup_handlers_buf( cntx_t* cntx ) +{ + return cntx->l3_sup_handlers; +} +static blksz_t* bli_cntx_l3_sup_blkszs_buf( cntx_t* cntx ) +{ + return cntx->l3_sup_blkszs; +} +static func_t* bli_cntx_l3_sup_kers_buf( cntx_t* cntx ) +{ + return cntx->l3_sup_kers; +} +static mbool_t* bli_cntx_l3_sup_kers_prefs_buf( cntx_t* cntx ) +{ + return cntx->l3_sup_kers_prefs; +} static func_t* bli_cntx_l1f_kers_buf( cntx_t* cntx ) { return cntx->l1f_kers; @@ -258,6 +285,108 @@ static bool_t bli_cntx_get_l3_nat_ukr_prefs_dt( num_t dt, l3ukr_t ukr_id, cntx_t // ----------------------------------------------------------------------------- +static blksz_t* bli_cntx_get_l3_sup_thresh( threshid_t thresh_id, cntx_t* cntx ) +{ + blksz_t* threshs = bli_cntx_l3_sup_thresh_buf( cntx ); + blksz_t* thresh = &threshs[ thresh_id ]; + + // Return the address of the blksz_t identified by thresh_id. + return thresh; +} + +static dim_t bli_cntx_get_l3_sup_thresh_dt( num_t dt, threshid_t thresh_id, cntx_t* cntx ) +{ + blksz_t* threshs = bli_cntx_get_l3_sup_thresh( thresh_id, cntx ); + dim_t thresh_dt = bli_blksz_get_def( dt, threshs ); + + // Return the main (default) threshold value for the datatype given. + return thresh_dt; +} + +static bool_t bli_cntx_l3_sup_thresh_is_met( num_t dt, dim_t m, dim_t n, dim_t k, cntx_t* cntx ) +{ + if ( m <= bli_cntx_get_l3_sup_thresh_dt( dt, BLIS_MT, cntx ) ) return TRUE; + if ( n <= bli_cntx_get_l3_sup_thresh_dt( dt, BLIS_NT, cntx ) ) return TRUE; + if ( k <= bli_cntx_get_l3_sup_thresh_dt( dt, BLIS_KT, cntx ) ) return TRUE; + + return FALSE; +} + +// ----------------------------------------------------------------------------- + +static void* bli_cntx_get_l3_sup_handler( opid_t op, cntx_t* cntx ) +{ + void** funcs = bli_cntx_l3_sup_handlers_buf( cntx ); + void* func = funcs[ op ]; + + return func; +} + +// ----------------------------------------------------------------------------- + +static blksz_t* bli_cntx_get_l3_sup_blksz( bszid_t bs_id, cntx_t* cntx ) +{ + blksz_t* blkszs = bli_cntx_l3_sup_blkszs_buf( cntx ); + blksz_t* blksz = &blkszs[ bs_id ]; + + // Return the address of the blksz_t identified by bs_id. + return blksz; +} + +static dim_t bli_cntx_get_l3_sup_blksz_def_dt( num_t dt, bszid_t bs_id, cntx_t* cntx ) +{ + blksz_t* blksz = bli_cntx_get_l3_sup_blksz( bs_id, cntx ); + dim_t bs_dt = bli_blksz_get_def( dt, blksz ); + + // Return the main (default) blocksize value for the datatype given. + return bs_dt; +} + +static dim_t bli_cntx_get_l3_sup_blksz_max_dt( num_t dt, bszid_t bs_id, cntx_t* cntx ) +{ + blksz_t* blksz = bli_cntx_get_l3_sup_blksz( bs_id, cntx ); + dim_t bs_dt = bli_blksz_get_max( dt, blksz ); + + // Return the auxiliary (maximum) blocksize value for the datatype given. + return bs_dt; +} + +// ----------------------------------------------------------------------------- + +static func_t* bli_cntx_get_l3_sup_kers( stor3_t stor_id, cntx_t* cntx ) +{ + func_t* funcs = bli_cntx_l3_sup_kers_buf( cntx ); + func_t* func = &funcs[ stor_id ]; + + return func; +} + +static void* bli_cntx_get_l3_sup_ker_dt( num_t dt, stor3_t stor_id, cntx_t* cntx ) +{ + func_t* func = bli_cntx_get_l3_sup_kers( stor_id, cntx ); + + return bli_func_get_dt( dt, func ); +} + +// ----------------------------------------------------------------------------- + +static mbool_t* bli_cntx_get_l3_sup_ker_prefs( stor3_t stor_id, cntx_t* cntx ) +{ + mbool_t* mbools = bli_cntx_l3_sup_kers_prefs_buf( cntx ); + mbool_t* mbool = &mbools[ stor_id ]; + + return mbool; +} + +static bool_t bli_cntx_get_l3_sup_ker_prefs_dt( num_t dt, stor3_t stor_id, cntx_t* cntx ) +{ + mbool_t* mbool = bli_cntx_get_l3_sup_ker_prefs( stor_id, cntx ); + + return bli_mbool_get_dt( dt, mbool ); +} + +// ----------------------------------------------------------------------------- + static func_t* bli_cntx_get_l1f_kers( l1fkr_t ker_id, cntx_t* cntx ) { func_t* funcs = bli_cntx_l1f_kers_buf( cntx ); @@ -366,7 +495,7 @@ static void_fp bli_cntx_get_unpackm_ker_dt( num_t dt, l1mkr_t ker_id, cntx_t* cn static bool_t bli_cntx_l3_nat_ukr_prefers_rows_dt( num_t dt, l3ukr_t ukr_id, cntx_t* cntx ) { - bool_t prefs = bli_cntx_get_l3_nat_ukr_prefs_dt( dt, ukr_id, cntx ); + const bool_t prefs = bli_cntx_get_l3_nat_ukr_prefs_dt( dt, ukr_id, cntx ); // A ukernel preference of TRUE means the ukernel prefers row storage. return ( bool_t ) @@ -375,7 +504,7 @@ static bool_t bli_cntx_l3_nat_ukr_prefers_rows_dt( num_t dt, l3ukr_t ukr_id, cnt static bool_t bli_cntx_l3_nat_ukr_prefers_cols_dt( num_t dt, l3ukr_t ukr_id, cntx_t* cntx ) { - bool_t prefs = bli_cntx_get_l3_nat_ukr_prefs_dt( dt, ukr_id, cntx ); + const bool_t prefs = bli_cntx_get_l3_nat_ukr_prefs_dt( dt, ukr_id, cntx ); // A ukernel preference of FALSE means the ukernel prefers column storage. return ( bool_t ) @@ -458,10 +587,58 @@ static bool_t bli_cntx_l3_vir_ukr_dislikes_storage_of( obj_t* obj, l3ukr_t ukr_i // ----------------------------------------------------------------------------- +static bool_t bli_cntx_l3_sup_ker_prefers_rows_dt( num_t dt, stor3_t stor_id, cntx_t* cntx ) +{ + const bool_t prefs = bli_cntx_get_l3_sup_ker_prefs_dt( dt, stor_id, cntx ); + + // A ukernel preference of TRUE means the ukernel prefers row storage. + return ( bool_t ) + ( prefs == TRUE ); +} + +static bool_t bli_cntx_l3_sup_ker_prefers_cols_dt( num_t dt, stor3_t stor_id, cntx_t* cntx ) +{ + const bool_t prefs = bli_cntx_get_l3_sup_ker_prefs_dt( dt, stor_id, cntx ); + + // A ukernel preference of FALSE means the ukernel prefers column storage. + return ( bool_t ) + ( prefs == FALSE ); +} + +#if 0 +// NOTE: These static functions aren't needed yet. + +static bool_t bli_cntx_l3_sup_ker_prefers_storage_of( obj_t* obj, stor3_t stor_id, cntx_t* cntx ) +{ + const num_t dt = bli_obj_dt( obj ); + const bool_t ukr_prefers_rows + = bli_cntx_l3_sup_ker_prefers_rows_dt( dt, stor_id, cntx ); + const bool_t ukr_prefers_cols + = bli_cntx_l3_sup_ker_prefers_cols_dt( dt, stor_id, cntx ); + bool_t r_val = FALSE; + + if ( bli_obj_is_row_stored( obj ) && ukr_prefers_rows ) r_val = TRUE; + else if ( bli_obj_is_col_stored( obj ) && ukr_prefers_cols ) r_val = TRUE; + + return r_val; +} + +static bool_t bli_cntx_l3_sup_ker_dislikes_storage_of( obj_t* obj, stor3_t stor_id, cntx_t* cntx ) +{ + return ( bool_t ) + !bli_cntx_l3_sup_ker_prefers_storage_of( obj, stor_id, cntx ); +} +#endif + +// ----------------------------------------------------------------------------- + // // -- cntx_t modification (complex) -------------------------------------------- // +// NOTE: The framework does not use any of the following functions. We provide +// them in order to facilitate creating/modifying custom contexts. + static void bli_cntx_set_blksz( bszid_t bs_id, blksz_t* blksz, bszid_t mult_id, cntx_t* cntx ) { blksz_t* blkszs = bli_cntx_blkszs_buf( cntx ); @@ -538,18 +715,24 @@ static void bli_cntx_set_unpackm_ker_dt( void_fp fp, num_t dt, l1mkr_t ker_id, c // Function prototypes -BLIS_EXPORT_BLIS void bli_cntx_clear( cntx_t* cntx ); +BLIS_EXPORT_BLIS void bli_cntx_clear( cntx_t* cntx ); -BLIS_EXPORT_BLIS void bli_cntx_set_blkszs( ind_t method, dim_t n_bs, ... ); +BLIS_EXPORT_BLIS void bli_cntx_set_blkszs( ind_t method, dim_t n_bs, ... ); -BLIS_EXPORT_BLIS void bli_cntx_set_ind_blkszs( ind_t method, dim_t n_bs, ... ); +BLIS_EXPORT_BLIS void bli_cntx_set_ind_blkszs( ind_t method, dim_t n_bs, ... ); -BLIS_EXPORT_BLIS void bli_cntx_set_l3_nat_ukrs( dim_t n_ukrs, ... ); -BLIS_EXPORT_BLIS void bli_cntx_set_l1f_kers( dim_t n_kers, ... ); -BLIS_EXPORT_BLIS void bli_cntx_set_l1v_kers( dim_t n_kers, ... ); -BLIS_EXPORT_BLIS void bli_cntx_set_packm_kers( dim_t n_kers, ... ); +BLIS_EXPORT_BLIS void bli_cntx_set_l3_nat_ukrs( dim_t n_ukrs, ... ); -BLIS_EXPORT_BLIS void bli_cntx_print( cntx_t* cntx ); +BLIS_EXPORT_BLIS void bli_cntx_set_l3_sup_thresh( dim_t n_thresh, ... ); +BLIS_EXPORT_BLIS void bli_cntx_set_l3_sup_handlers( dim_t n_ops, ... ); +BLIS_EXPORT_BLIS void bli_cntx_set_l3_sup_blkszs( dim_t n_bs, ... ); +BLIS_EXPORT_BLIS void bli_cntx_set_l3_sup_kers( dim_t n_ukrs, ... ); + +BLIS_EXPORT_BLIS void bli_cntx_set_l1f_kers( dim_t n_kers, ... ); +BLIS_EXPORT_BLIS void bli_cntx_set_l1v_kers( dim_t n_kers, ... ); +BLIS_EXPORT_BLIS void bli_cntx_set_packm_kers( dim_t n_kers, ... ); + +BLIS_EXPORT_BLIS void bli_cntx_print( cntx_t* cntx ); #endif diff --git a/frame/base/bli_obj.c b/frame/base/bli_obj.c index 2a9b3786e..f2b59e180 100644 --- a/frame/base/bli_obj.c +++ b/frame/base/bli_obj.c @@ -405,7 +405,8 @@ void bli_adjust_strides // matrix). if ( m == 0 || n == 0 ) return; - // Interpret rs = cs = 0 as request for column storage. + // Interpret rs = cs = 0 as request for column storage and -1 as a request + // for row storage. if ( *rs == 0 && *cs == 0 && ( *is == 0 || *is == 1 ) ) { // First we handle the 1x1 scalar case explicitly. @@ -414,8 +415,9 @@ void bli_adjust_strides *rs = 1; *cs = 1; } - // We use column-major storage, except when m == 1, because we don't - // want both strides to be unit. + // We use column-major storage, except when m == 1, in which case we + // use what amounts to row-major storage because we don't want both + // strides to be unit. else if ( m == 1 && n > 1 ) { *rs = n; @@ -445,6 +447,46 @@ void bli_adjust_strides BLIS_HEAP_STRIDE_ALIGN_SIZE ); } } + else if ( *rs == -1 && *cs == -1 && ( *is == 0 || *is == 1 ) ) + { + // First we handle the 1x1 scalar case explicitly. + if ( m == 1 && n == 1 ) + { + *rs = 1; + *cs = 1; + } + // We use row-major storage, except when n == 1, in which case we + // use what amounts to column-major storage because we don't want both + // strides to be unit. + else if ( n == 1 && m > 1 ) + { + *rs = 1; + *cs = m; + } + else + { + *rs = n; + *cs = 1; + } + + // Use default complex storage. + *is = 1; + + // Align the strides depending on the tilt of the matrix. Note that + // scalars are neither row nor column tilted. Also note that alignment + // is only done for rs = cs = -1, and any user-supplied row and column + // strides are preserved. + if ( bli_is_col_tilted( m, n, *rs, *cs ) ) + { + *cs = bli_align_dim_to_size( *cs, elem_size, + BLIS_HEAP_STRIDE_ALIGN_SIZE ); + } + else if ( bli_is_row_tilted( m, n, *rs, *cs ) ) + { + *rs = bli_align_dim_to_size( *rs, elem_size, + BLIS_HEAP_STRIDE_ALIGN_SIZE ); + } + } else if ( *rs == 1 && *cs == 1 ) { // If both strides are unit, this is probably a "lazy" request for a diff --git a/frame/base/bli_rntm.h b/frame/base/bli_rntm.h index 8b922132d..c07686414 100644 --- a/frame/base/bli_rntm.h +++ b/frame/base/bli_rntm.h @@ -45,6 +45,13 @@ typedef struct rntm_s { dim_t num_threads; dim_t* thrloop; + + pool_t* sba_pool; + + membrk_t* membrk; + + bool_t l3_sup; + } rntm_t; */ @@ -87,6 +94,11 @@ static dim_t bli_rntm_pr_ways( rntm_t* rntm ) return bli_rntm_ways_for( BLIS_KR, rntm ); } +static bool_t bli_rntm_l3_sup( rntm_t* rntm ) +{ + return rntm->l3_sup; +} + // // -- rntm_t query (internal use only) ----------------------------------------- // @@ -175,6 +187,22 @@ static void bli_rntm_set_membrk( membrk_t* membrk, rntm_t* rntm ) rntm->membrk = membrk; } +static void bli_rntm_set_l3_sup( bool_t l3_sup, rntm_t* rntm ) +{ + // Set the bool_t indicating whether level-3 sup handling is enabled. + rntm->l3_sup = l3_sup; +} + +static void bli_rntm_enable_l3_sup( rntm_t* rntm ) +{ + bli_rntm_set_l3_sup( TRUE, rntm ); +} + +static void bli_rntm_disable_l3_sup( rntm_t* rntm ) +{ + bli_rntm_set_l3_sup( FALSE, rntm ); +} + static void bli_rntm_clear_num_threads_only( rntm_t* rntm ) { bli_rntm_set_num_threads_only( -1, rntm ); @@ -187,6 +215,14 @@ static void bli_rntm_clear_sba_pool( rntm_t* rntm ) { bli_rntm_set_sba_pool( NULL, rntm ); } +static void bli_rntm_clear_membrk( rntm_t* rntm ) +{ + bli_rntm_set_membrk( NULL, rntm ); +} +static void bli_rntm_clear_l3_sup( rntm_t* rntm ) +{ + bli_rntm_set_l3_sup( 1, rntm ); +} // // -- rntm_t modification (public API) ----------------------------------------- @@ -223,9 +259,14 @@ static void bli_rntm_set_ways( dim_t jc, dim_t pc, dim_t ic, dim_t jr, dim_t ir, // of the public "set" accessors, each of which guarantees that the rntm_t // will be in a good state upon return. -#define BLIS_RNTM_INITIALIZER { .num_threads = -1, \ - .thrloop = { -1, -1, -1, -1, -1, -1 }, \ - .sba_pool = NULL } \ +#define BLIS_RNTM_INITIALIZER \ + { \ + .num_threads = -1, \ + .thrloop = { -1, -1, -1, -1, -1, -1 }, \ + .sba_pool = NULL, \ + .membrk = NULL, \ + .l3_sup = 1 \ + } \ static void bli_rntm_init( rntm_t* rntm ) { @@ -233,6 +274,9 @@ static void bli_rntm_init( rntm_t* rntm ) bli_rntm_clear_ways_only( rntm ); bli_rntm_clear_sba_pool( rntm ); + bli_rntm_clear_membrk( rntm ); + + bli_rntm_clear_l3_sup( rntm ); } // ----------------------------------------------------------------------------- diff --git a/frame/compat/bla_hemm.c b/frame/compat/bla_hemm.c index 79ccd9a2c..6bfb13e18 100644 --- a/frame/compat/bla_hemm.c +++ b/frame/compat/bla_hemm.c @@ -86,7 +86,7 @@ void PASTEF77(ch,blasname) \ bli_param_map_netlib_to_blis_side( *side, &blis_side ); \ bli_param_map_netlib_to_blis_uplo( *uploa, &blis_uploa ); \ \ - /* Convert/typecast negative values of m and n to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *n, n0 ); \ \ @@ -163,7 +163,7 @@ void PASTEF77(ch,blasname) \ bli_param_map_netlib_to_blis_side( *side, &blis_side ); \ bli_param_map_netlib_to_blis_uplo( *uploa, &blis_uploa ); \ \ - /* Convert/typecast negative values of m and n to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *n, n0 ); \ \ diff --git a/frame/compat/bla_her2k.c b/frame/compat/bla_her2k.c index 566cd41fb..df5121975 100644 --- a/frame/compat/bla_her2k.c +++ b/frame/compat/bla_her2k.c @@ -86,7 +86,7 @@ void PASTEF77(ch,blasname) \ bli_param_map_netlib_to_blis_uplo( *uploc, &blis_uploc ); \ bli_param_map_netlib_to_blis_trans( *transa, &blis_transa ); \ \ - /* Convert/typecast negative values of m and k to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *k, k0 ); \ \ @@ -179,7 +179,7 @@ void PASTEF77(ch,blasname) \ bli_param_map_netlib_to_blis_uplo( *uploc, &blis_uploc ); \ bli_param_map_netlib_to_blis_trans( *transa, &blis_transa ); \ \ - /* Convert/typecast negative values of m and k to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *k, k0 ); \ \ diff --git a/frame/compat/bla_herk.c b/frame/compat/bla_herk.c index c919be9d7..d9c47f5af 100644 --- a/frame/compat/bla_herk.c +++ b/frame/compat/bla_herk.c @@ -83,7 +83,7 @@ void PASTEF77(ch,blasname) \ bli_param_map_netlib_to_blis_uplo( *uploc, &blis_uploc ); \ bli_param_map_netlib_to_blis_trans( *transa, &blis_transa ); \ \ - /* Convert/typecast negative values of m and k to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *k, k0 ); \ \ @@ -170,7 +170,7 @@ void PASTEF77(ch,blasname) \ bli_param_map_netlib_to_blis_uplo( *uploc, &blis_uploc ); \ bli_param_map_netlib_to_blis_trans( *transa, &blis_transa ); \ \ - /* Convert/typecast negative values of m and k to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *k, k0 ); \ \ diff --git a/frame/compat/bla_symm.c b/frame/compat/bla_symm.c index 3711b34c9..b4f0b66d0 100644 --- a/frame/compat/bla_symm.c +++ b/frame/compat/bla_symm.c @@ -86,7 +86,7 @@ void PASTEF77(ch,blasname) \ bli_param_map_netlib_to_blis_side( *side, &blis_side ); \ bli_param_map_netlib_to_blis_uplo( *uploa, &blis_uploa ); \ \ - /* Convert/typecast negative values of m and n to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *n, n0 ); \ \ @@ -163,7 +163,7 @@ void PASTEF77(ch,blasname) \ bli_param_map_netlib_to_blis_side( *side, &blis_side ); \ bli_param_map_netlib_to_blis_uplo( *uploa, &blis_uploa ); \ \ - /* Convert/typecast negative values of m and n to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *n, n0 ); \ \ diff --git a/frame/compat/bla_syr2k.c b/frame/compat/bla_syr2k.c index a977820a6..35cfca9a3 100644 --- a/frame/compat/bla_syr2k.c +++ b/frame/compat/bla_syr2k.c @@ -95,7 +95,7 @@ void PASTEF77(ch,blasname) \ blis_transa = BLIS_TRANSPOSE; \ } \ \ - /* Convert/typecast negative values of m and k to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *k, k0 ); \ \ @@ -180,7 +180,7 @@ void PASTEF77(ch,blasname) \ blis_transa = BLIS_TRANSPOSE; \ } \ \ - /* Convert/typecast negative values of m and k to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *k, k0 ); \ \ diff --git a/frame/compat/bla_syrk.c b/frame/compat/bla_syrk.c index 5bc2d356a..82ce2f166 100644 --- a/frame/compat/bla_syrk.c +++ b/frame/compat/bla_syrk.c @@ -92,7 +92,7 @@ void PASTEF77(ch,blasname) \ blis_transa = BLIS_TRANSPOSE; \ } \ \ - /* Convert/typecast negative values of m and k to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *k, k0 ); \ \ @@ -171,7 +171,7 @@ void PASTEF77(ch,blasname) \ blis_transa = BLIS_TRANSPOSE; \ } \ \ - /* Convert/typecast negative values of m and k to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *k, k0 ); \ \ diff --git a/frame/compat/bla_trmm.c b/frame/compat/bla_trmm.c index 7ca20da74..ce099dc59 100644 --- a/frame/compat/bla_trmm.c +++ b/frame/compat/bla_trmm.c @@ -90,7 +90,7 @@ void PASTEF77(ch,blasname) \ bli_param_map_netlib_to_blis_trans( *transa, &blis_transa ); \ bli_param_map_netlib_to_blis_diag( *diaga, &blis_diaga ); \ \ - /* Convert/typecast negative values of m and n to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *n, n0 ); \ \ @@ -168,7 +168,7 @@ void PASTEF77(ch,blasname) \ bli_param_map_netlib_to_blis_trans( *transa, &blis_transa ); \ bli_param_map_netlib_to_blis_diag( *diaga, &blis_diaga ); \ \ - /* Convert/typecast negative values of m and n to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *n, n0 ); \ \ diff --git a/frame/compat/bla_trsm.c b/frame/compat/bla_trsm.c index 0e1c2e329..c0d8e4b3e 100644 --- a/frame/compat/bla_trsm.c +++ b/frame/compat/bla_trsm.c @@ -90,7 +90,7 @@ void PASTEF77(ch,blasname) \ bli_param_map_netlib_to_blis_trans( *transa, &blis_transa ); \ bli_param_map_netlib_to_blis_diag( *diaga, &blis_diaga ); \ \ - /* Convert/typecast negative values of m and n to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *n, n0 ); \ \ @@ -168,7 +168,7 @@ void PASTEF77(ch,blasname) \ bli_param_map_netlib_to_blis_trans( *transa, &blis_transa ); \ bli_param_map_netlib_to_blis_diag( *diaga, &blis_diaga ); \ \ - /* Convert/typecast negative values of m and n to zero. */ \ + /* Typecast BLAS integers to BLIS integers. */ \ bli_convert_blas_dim1( *m, m0 ); \ bli_convert_blas_dim1( *n, n0 ); \ \ diff --git a/frame/include/bli_obj_macro_defs.h b/frame/include/bli_obj_macro_defs.h index 788ac0a75..ccfcf096b 100644 --- a/frame/include/bli_obj_macro_defs.h +++ b/frame/include/bli_obj_macro_defs.h @@ -1128,6 +1128,44 @@ static void bli_obj_set_panel_stride( inc_t ps, obj_t* obj ) obj->ps = ps; } +// stor3_t-related + +static stor3_t bli_obj_stor3_from_strides( obj_t* c, obj_t* a, obj_t* b ) +{ + const inc_t rs_c = bli_obj_row_stride( c ); + const inc_t cs_c = bli_obj_col_stride( c ); + + inc_t rs_a, cs_a; + inc_t rs_b, cs_b; + + if ( bli_obj_has_notrans( a ) ) + { + rs_a = bli_obj_row_stride( a ); + cs_a = bli_obj_col_stride( a ); + } + else + { + rs_a = bli_obj_col_stride( a ); + cs_a = bli_obj_row_stride( a ); + } + + if ( bli_obj_has_notrans( b ) ) + { + rs_b = bli_obj_row_stride( b ); + cs_b = bli_obj_col_stride( b ); + } + else + { + rs_b = bli_obj_col_stride( b ); + cs_b = bli_obj_row_stride( b ); + } + + return bli_stor3_from_strides( rs_c, cs_c, + rs_a, cs_a, + rs_b, cs_b ); +} + + // -- Initialization-related macros -- // Finish the initialization started by the matrix-specific static initializer @@ -1419,7 +1457,32 @@ static void bli_obj_induce_trans( obj_t* obj ) bli_obj_set_panel_dims( n_panel, m_panel, obj ); // Note that this macro DOES NOT touch the transposition bit! If - // the calling code is using this macro to handle an object whose + // the calling code is using this function to handle an object whose + // transposition bit is set prior to computation, that code needs + // to manually clear or toggle the bit, via + // bli_obj_set_onlytrans() or bli_obj_toggle_trans(), + // respectively. +} + +static void bli_obj_induce_fast_trans( obj_t* obj ) +{ + // NOTE: This function is only used in situations where the matrices + // are guaranteed to not have structure or be packed. + + // Induce transposition among basic fields. + dim_t m = bli_obj_length( obj ); + dim_t n = bli_obj_width( obj ); + inc_t rs = bli_obj_row_stride( obj ); + inc_t cs = bli_obj_col_stride( obj ); + dim_t offm = bli_obj_row_off( obj ); + dim_t offn = bli_obj_col_off( obj ); + + bli_obj_set_dims( n, m, obj ); + bli_obj_set_strides( cs, rs, obj ); + bli_obj_set_offs( offn, offm, obj ); + + // Note that this macro DOES NOT touch the transposition bit! If + // the calling code is using this function to handle an object whose // transposition bit is set prior to computation, that code needs // to manually clear or toggle the bit, via // bli_obj_set_onlytrans() or bli_obj_toggle_trans(), diff --git a/frame/include/bli_param_macro_defs.h b/frame/include/bli_param_macro_defs.h index c567666e0..cc1737e91 100644 --- a/frame/include/bli_param_macro_defs.h +++ b/frame/include/bli_param_macro_defs.h @@ -789,6 +789,97 @@ static void bli_toggle_dim( mdim_t* mdim ) } +// stor3_t-related + +static stor3_t bli_stor3_from_strides( inc_t rs_c, inc_t cs_c, + inc_t rs_a, inc_t cs_a, + inc_t rs_b, inc_t cs_b ) +{ + // If any matrix is general-stored, return the stor3_t id for the + // general-purpose sup microkernel. + if ( bli_is_gen_stored( rs_c, cs_c ) || + bli_is_gen_stored( rs_a, cs_a ) || + bli_is_gen_stored( rs_b, cs_b ) ) return BLIS_XXX; + + // Otherwise, compute and return the stor3_t id as follows. + const bool_t c_is_col = bli_is_col_stored( rs_c, cs_c ); + const bool_t a_is_col = bli_is_col_stored( rs_a, cs_a ); + const bool_t b_is_col = bli_is_col_stored( rs_b, cs_b ); + + return ( stor3_t )( 4 * c_is_col + + 2 * a_is_col + + 1 * b_is_col ); +} + +static stor3_t bli_stor3_trans( stor3_t id ) +{ +#if 1 + stor3_t map[ BLIS_NUM_3OP_RC_COMBOS ] + = + { + ( stor3_t )7, // BLIS_RRR = 0 -> BLIS_CCC = 7 + ( stor3_t )5, // BLIS_RRC = 1 -> BLIS_CRC = 5 + ( stor3_t )6, // BLIS_RCR = 2 -> BLIS_CCR = 6 + ( stor3_t )4, // BLIS_RCC = 3 -> BLIS_CRR = 4 + ( stor3_t )3, // BLIS_CRR = 4 -> BLIS_RCC = 3 + ( stor3_t )1, // BLIS_CRC = 5 -> BLIS_RRC = 1 + ( stor3_t )2, // BLIS_CCR = 6 -> BLIS_RCR = 2 + ( stor3_t )0, // BLIS_CCC = 7 -> BLIS_RRR = 0 + }; + + return map[id]; +#else + return ( ( id & 0x4 ) ^ 0x4 ) | // flip c bit + ( ( ( id & 0x1 ) ^ 0x1 ) << 1 ) | // flip b bit and move to a position + ( ( ( id & 0x2 ) ^ 0x2 ) >> 1 ); // flip a bit and move to b position +#endif +} + +static stor3_t bli_stor3_transa( stor3_t id ) +{ +#if 0 + stor3_t map[ BLIS_NUM_3OP_RC_COMBOS ] + = + { + ( stor3_t )1, // BLIS_RRR = 0 -> BLIS_RRC = 1 + ( stor3_t )0, // BLIS_RRC = 1 -> BLIS_RRR = 0 + ( stor3_t )3, // BLIS_RCR = 2 -> BLIS_RCC = 3 + ( stor3_t )2, // BLIS_RCC = 3 -> BLIS_RCR = 2 + ( stor3_t )5, // BLIS_CRR = 4 -> BLIS_CRC = 5 + ( stor3_t )4, // BLIS_CRC = 5 -> BLIS_CRR = 4 + ( stor3_t )7, // BLIS_CCR = 6 -> BLIS_CCC = 7 + ( stor3_t )6, // BLIS_CCC = 7 -> BLIS_CCR = 6 + }; + + return map[id]; +#else + return ( stor3_t )( id ^ 0x1 ); +#endif +} + +static stor3_t bli_stor3_transb( stor3_t id ) +{ +#if 0 + stor3_t map[ BLIS_NUM_3OP_RC_COMBOS ] + = + { + ( stor3_t )2, // BLIS_RRR = 0 -> BLIS_RCR = 2 + ( stor3_t )3, // BLIS_RRC = 1 -> BLIS_RCC = 3 + ( stor3_t )0, // BLIS_RCR = 2 -> BLIS_RRR = 0 + ( stor3_t )1, // BLIS_RCC = 3 -> BLIS_RRC = 1 + ( stor3_t )6, // BLIS_CRR = 4 -> BLIS_CCR = 6 + ( stor3_t )7, // BLIS_CRC = 5 -> BLIS_CCC = 7 + ( stor3_t )4, // BLIS_CCR = 6 -> BLIS_CRR = 4 + ( stor3_t )5, // BLIS_CCC = 7 -> BLIS_CRC = 5 + }; + + return map[id]; +#else + return ( stor3_t )( id ^ 0x2 ); +#endif +} + + // index-related diff --git a/frame/include/bli_type_defs.h b/frame/include/bli_type_defs.h index 4218625ef..ea06a11ec 100644 --- a/frame/include/bli_type_defs.h +++ b/frame/include/bli_type_defs.h @@ -811,6 +811,80 @@ typedef enum #define BLIS_NUM_UKR_IMPL_TYPES 4 +#if 0 +typedef enum +{ + // RV = row-stored, contiguous vector-loading + // RG = row-stored, non-contiguous gather-loading + // CV = column-stored, contiguous vector-loading + // CG = column-stored, non-contiguous gather-loading + + // RD = row-stored, dot-based + // CD = col-stored, dot-based + + // RC = row-stored, column-times-column + // CR = column-stored, row-times-row + + // GX = general-stored generic implementation + + BLIS_GEMMSUP_RV_UKR = 0, + BLIS_GEMMSUP_RG_UKR, + BLIS_GEMMSUP_CV_UKR, + BLIS_GEMMSUP_CG_UKR, + + BLIS_GEMMSUP_RD_UKR, + BLIS_GEMMSUP_CD_UKR, + + BLIS_GEMMSUP_RC_UKR, + BLIS_GEMMSUP_CR_UKR, + + BLIS_GEMMSUP_GX_UKR, +} l3sup_t; + +#define BLIS_NUM_LEVEL3_SUP_UKRS 9 +#endif + + +typedef enum +{ + // 3-operand storage combinations + BLIS_RRR = 0, + BLIS_RRC, // 1 + BLIS_RCR, // 2 + BLIS_RCC, // 3 + BLIS_CRR, // 4 + BLIS_CRC, // 5 + BLIS_CCR, // 6 + BLIS_CCC, // 7 + BLIS_XXX, // 8 + +#if 0 + BLIS_RRG, + BLIS_RCG, + BLIS_RGR, + BLIS_RGC, + BLIS_RGG, + BLIS_CRG, + BLIS_CCG, + BLIS_CGR, + BLIS_CGC, + BLIS_CGG, + BLIS_GRR, + BLIS_GRC, + BLIS_GRG, + BLIS_GCR, + BLIS_GCC, + BLIS_GCG, + BLIS_GGR, + BLIS_GGC, + BLIS_GGG, +#endif +} stor3_t; + +#define BLIS_NUM_3OP_RC_COMBOS 9 +//#define BLIS_NUM_3OP_RCG_COMBOS 27 + + #if 0 typedef enum { @@ -887,6 +961,19 @@ typedef enum #define BLIS_NUM_BLKSZS 11 +// -- Threshold ID type -- + +typedef enum +{ + BLIS_MT = 0, // level-3 small/unpacked matrix threshold in m dimension + BLIS_NT, // level-3 small/unpacked matrix threshold in n dimension + BLIS_KT // level-3 small/unpacked matrix threshold in k dimension + +} threshid_t; + +#define BLIS_NUM_THRESH 3 + + // -- Architecture ID type -- // NOTE: This typedef enum must be kept up-to-date with the arch_t @@ -1327,6 +1414,12 @@ typedef struct cntx_s func_t l3_nat_ukrs[ BLIS_NUM_LEVEL3_UKRS ]; mbool_t l3_nat_ukrs_prefs[ BLIS_NUM_LEVEL3_UKRS ]; + blksz_t l3_sup_thresh[ BLIS_NUM_THRESH ]; + void* l3_sup_handlers[ BLIS_NUM_LEVEL3_OPS ]; + blksz_t l3_sup_blkszs[ BLIS_NUM_BLKSZS ]; + func_t l3_sup_kers[ BLIS_NUM_3OP_RC_COMBOS ]; + mbool_t l3_sup_kers_prefs[ BLIS_NUM_3OP_RC_COMBOS ]; + func_t l1f_kers[ BLIS_NUM_LEVEL1F_KERS ]; func_t l1v_kers[ BLIS_NUM_LEVEL1V_KERS ]; @@ -1357,6 +1450,9 @@ typedef struct rntm_s // The packing block allocator, which is attached in the l3 thread decorator. membrk_t* membrk; + // A switch to enable/disable small/unpacked matrix handling in level-3 ops. + bool_t l3_sup; + } rntm_t; diff --git a/frame/include/bli_x86_asm_macros.h b/frame/include/bli_x86_asm_macros.h index d329a2c3a..eca0b6959 100644 --- a/frame/include/bli_x86_asm_macros.h +++ b/frame/include/bli_x86_asm_macros.h @@ -5,6 +5,7 @@ libraries. Copyright (C) 2018, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -643,6 +644,7 @@ #define XOR(_0, _1) INSTR_(xor, _0, _1) #define ADD(_0, _1) INSTR_(add, _0, _1) #define SUB(_0, _1) INSTR_(sub, _0, _1) +#define IMUL(_0, _1) INSTR_(imul, _0, _1) #define SAL(...) INSTR_(sal, __VA_ARGS__) #define SAR(...) INSTR_(sar, __VA_ARGS__) #define SHLX(_0, _1, _2) INSTR_(shlx, _0, _1, _2) @@ -656,6 +658,7 @@ #define xor(_0, _1) XOR(_0, _1) #define add(_0, _1) ADD(_0, _1) #define sub(_0, _1) SUB(_0, _1) +#define imul(_0, _1) IMUL(_0, _1) #define sal(...) SAL(__VA_ARGS__) #define sar(...) SAR(__VA_ARGS__) #define shlx(_0, _1, _2) SHLX(_0, _1, _2) @@ -780,13 +783,13 @@ #define VPBROADCASTQ(_0, _1) INSTR_(vpbroadcastq, _0, _1) #define VBROADCASTF128(_0, _1) INSTR_(vbroadcastf128, _0, _1) #define VBROADCASTF64X4(_0, _1) INSTR_(vbroadcastf64x4, _0, _1) -#define VGATHERDPS(_0, _1) INSTR_(vgatherdps, _0, _1) +#define VGATHERDPS(...) INSTR_(vgatherdps, __VA_ARGS__) #define VSCATTERDPS(_0, _1) INSTR_(vscatterdps, _0, _1) -#define VGATHERDPD(_0, _1) INSTR_(vgatherdpd, _0, _1) +#define VGATHERDPD(...) INSTR_(vgatherdpd, __VA_ARGS__) #define VSCATTERDPD(_0, _1) INSTR_(vscatterdpd, _0, _1) -#define VGATHERQPS(_0, _1) INSTR_(vgatherqps, _0, _1) +#define VGATHERQPS(...) INSTR_(vgatherqps, __VA_ARGS__) #define VSCATTERQPS(_0, _1) INSTR_(vscatterqps, _0, _1) -#define VGATHERQPD(_0, _1) INSTR_(vgatherqpd, _0, _1) +#define VGATHERQPD(...) INSTR_(vgatherqpd, __VA_ARGS__) #define VSCATTERQPD(_0, _1) INSTR_(vscatterqpd, _0, _1) #define vmovddup(_0, _1) VMOVDDUP(_0, _1) @@ -809,19 +812,41 @@ #define vmovdqa64(_0, _1) VMOVDQA64(_0, _1) #define vbroadcastss(_0, _1) VBROADCASTSS(_0, _1) #define vbroadcastsd(_0, _1) VBROADCASTSD(_0, _1) -#define vpbraodcastd(_0, _1) VPBROADCASTD(_0, _1) +#define vpbroadcastd(_0, _1) VPBROADCASTD(_0, _1) #define vpbroadcastq(_0, _1) VPBROADCASTQ(_0, _1) #define vbroadcastf128(_0, _1) VBROADCASTF128(_0, _1) #define vbroadcastf64x4(_0, _1) VBROADCASTF64X4(_0, _1) -#define vgatherdps(_0, _1) VGATHERDPS(_0, _1) +#define vgatherdps(...) VGATHERDPS(__VA_ARGS__) #define vscatterdps(_0, _1) VSCATTERDPS(_0, _1) -#define vgatherdpd(_0, _1) VGATHERDPD(_0, _1) +#define vgatherdpd(...) VGATHERDPD(__VA_ARGS__) #define vscatterdpd(_0, _1) VSCATTERDPD(_0, _1) -#define vgatherqps(_0, _1) VGATHERQPS(_0, _1) +#define vgatherqps(...) VGATHERQPS(__VA_ARGS__) #define vscatterqps(_0, _1) VSCATTERQPS(_0, _1) -#define vgatherqpd(_0, _1) VGATHERQPD(_0, _1) +#define vgatherqpd(...) VGATHERQPD(__VA_ARGS__) #define vscatterqpd(_0, _1) VSCATTERQPD(_0, _1) +// Vector comparisons + +#define VPCMPEQB(_0, _1, _2) INSTR_(vpcmpeqb, _0, _1, _2) +#define VPCMPEQW(_0, _1, _2) INSTR_(vpcmpeqw, _0, _1, _2) +#define VPCMPEQD(_0, _1, _2) INSTR_(vpcmpeqd, _0, _1, _2) + +#define vpcmpeqb(_0, _1, _2) VPCMPEQB(_0, _1, _2) +#define vpcmpeqw(_0, _1, _2) VPCMPEQW(_0, _1, _2) +#define vpcmpeqd(_0, _1, _2) VPCMPEQD(_0, _1, _2) + +// Vector integer math + +#define VPADDB(_0, _1, _2) INSTR_(vpaddb, _0, _1, _2) +#define VPADDW(_0, _1, _2) INSTR_(vpaddw, _0, _1, _2) +#define VPADDD(_0, _1, _2) INSTR_(vpaddd, _0, _1, _2) +#define VPADDQ(_0, _1, _2) INSTR_(vpaddq, _0, _1, _2) + +#define vpaddb(_0, _1, _2) VPADDB(_0, _1, _2) +#define vpaddw(_0, _1, _2) VPADDW(_0, _1, _2) +#define vpaddd(_0, _1, _2) VPADDD(_0, _1, _2) +#define vpaddq(_0, _1, _2) VPADDQ(_0, _1, _2) + // Vector math #define ADDPS(_0, _1) INSTR_(addps, _0, _1) @@ -852,6 +877,8 @@ #define VADDSUBPS(_0, _1, _2) INSTR_(vaddsubps, _0, _1, _2) #define VADDSUBPD(_0, _1, _2) INSTR_(vaddsubpd, _0, _1, _2) +#define VHADDPD(_0, _1, _2) INSTR_(vhaddpd, _0, _1, _2) +#define VHADDPS(_0, _1, _2) INSTR_(vhaddps, _0, _1, _2) #define VUCOMISS(_0, _1) INSTR_(vucomiss, _0, _1) #define VUCOMISD(_0, _1) INSTR_(vucomisd, _0, _1) #define VCOMISS(_0, _1) INSTR_(vcomiss, _0, _1) @@ -974,6 +1001,8 @@ #define vaddsubps(_0, _1, _2) VADDSUBPS(_0, _1, _2) #define vaddsubpd(_0, _1, _2) VADDSUBPD(_0, _1, _2) +#define vhaddpd(_0, _1, _2) VHADDPD(_0, _1, _2) +#define vhaddps(_0, _1, _2) VHADDPS(_0, _1, _2) #define vucomiss(_0, _1) VUCOMISS(_0, _1) #define vucomisd(_0, _1) VUCOMISD(_0, _1) #define vcomiss(_0, _1) VCOMISS(_0, _1) diff --git a/frame/include/blis.h b/frame/include/blis.h index 95f9bc5b0..00789c231 100644 --- a/frame/include/blis.h +++ b/frame/include/blis.h @@ -88,6 +88,7 @@ extern "C" { #include "bli_l1f_ker_prot.h" #include "bli_l1m_ker_prot.h" #include "bli_l3_ukr_prot.h" +#include "bli_l3_sup_ker_prot.h" #include "bli_arch_config_pre.h" #include "bli_arch_config.h" diff --git a/kernels/haswell/3/sup/bli_gemmsup_rd_haswell_asm_d6x8.c b/kernels/haswell/3/sup/bli_gemmsup_rd_haswell_asm_d6x8.c new file mode 100644 index 000000000..1b80af8b7 --- /dev/null +++ b/kernels/haswell/3/sup/bli_gemmsup_rd_haswell_asm_d6x8.c @@ -0,0 +1,4565 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" + +#define BLIS_ASM_SYNTAX_ATT +#include "bli_x86_asm_macros.h" + +/* + rrc: + -------- ------ | | | | | | | | + -------- ------ | | | | | | | | + -------- += ------ ... | | | | | | | | + -------- ------ | | | | | | | | + -------- ------ : + -------- ------ : + + Assumptions: + - C is row-stored and B is column-stored; + - A is row-stored; + - m0 and n0 are at most MR and NR, respectively. + Therefore, this (r)ow-preferential microkernel is well-suited for + a dot-product-based accumulation that performs vector loads from + both A and B. +*/ + +// Prototype reference microkernels. +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref ) + +#if 0 +// Define parameters and variables for edge case kernel map. +#define NUM_MR 4 +#define NUM_NR 4 +#define FUNCPTR_T dgemmsup_ker_ft + +static dim_t mrs[NUM_MR] = { 6, 3, 2, 1 }; +static dim_t nrs[NUM_NR] = { 8, 4, 2, 1 }; +static FUNCPTR_T kmap[NUM_MR][NUM_NR] = +{ /* 8 4 2 1 */ +/* 6 */ { bli_dgemmsup_rd_haswell_asm_6x8m, bli_dgemmsup_rd_haswell_asm_6x4m, bli_dgemmsup_rd_haswell_asm_6x2m, bli_dgemmsup_r_haswell_ref_6x1 }, +/* 3 */ { bli_dgemmsup_rd_haswell_asm_3x8m, bli_dgemmsup_rd_haswell_asm_3x4m, bli_dgemmsup_rd_haswell_asm_3x2m, bli_dgemmsup_r_haswell_ref_3x1 }, +/* 2 */ { bli_dgemmsup_rd_haswell_asm_2x8m, bli_dgemmsup_rd_haswell_asm_2x4m, bli_dgemmsup_rd_haswell_asm_2x2m, bli_dgemmsup_r_haswell_ref_2x1 }, +/* 1 */ { bli_dgemmsup_rd_haswell_asm_1x8m, bli_dgemmsup_rd_haswell_asm_1x4m, bli_dgemmsup_rd_haswell_asm_1x2m, bli_dgemmsup_r_haswell_ref_1x1 } +}; +#endif + + +void bli_dgemmsup_rd_haswell_asm_6x8 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + uint64_t n_left = n0 % 8; + + // First check whether this is a edge case in the n dimension. If so, + // dispatch other 6x?m kernels, as needed. + if ( n_left ) + { + double* restrict cij = c; + double* restrict bj = b; + double* restrict ai = a; + + if ( 4 <= n_left ) + { + const dim_t nr_cur = 4; + + bli_dgemmsup_rd_haswell_asm_6x4 + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_6x2 + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 0 + const dim_t nr_cur = 1; + + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_NO_TRANSPOSE, conjb, m0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, + beta, cij, rs_c0, cntx, NULL + ); +#endif + } + return; + } + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t m_iter = m0 / 3; + uint64_t m_left = m0 % 3; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + //mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + lea(mem(r8, r8, 2), r10) // r10 = 3*rs_a + + + //mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + + + mov(var(a), r14) // load address of a + mov(var(c), r12) // load address of c + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r12, rsi, 1), r12) // r12 = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(rdx, rsi, 1), rdx) // rbx = b + 4*jj*cs_b; + + + + mov(var(m_iter), r9) // ii = m_iter; + + label(.DLOOP3X4I) // LOOP OVER ii = [ m_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem(r12), rcx) // rcx = c_iijj; + lea(mem(r14), rax) // rax = a_ii; + lea(mem(rdx), rbx) // rbx = b_jj; + + +#if 1 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + lea(mem(r8, r8, 4), rdi) // rdi = 5*rs_a + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 0 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 0 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + +#if 0 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 2), r12) // + lea(mem(r12, rdi, 1), r12) // c_ii = r12 += 3*rs_c + + lea(mem(r14, r8, 2), r14) // + lea(mem(r14, r8, 1), r14) // a_ii = r14 += 3*rs_a + + dec(r9) // ii -= 1; + jne(.DLOOP3X4I) // iterate again if ii != 0. + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 8; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict bj = b; + double* restrict ai = a + i_edge*rs_a; + + if ( 2 == m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x8 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + //cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x8 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rd_haswell_asm_2x8 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = unused + // r15 = n dim index jj + // r10 = unused + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) +#endif + + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r12, rsi, 1), rcx) // rcx = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(rdx, rsi, 1), rbx) // rbx = b + 4*jj*cs_b; + + lea(mem(r14), rax) // rax = a; + + +#if 0 + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c +#else + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c +#endif + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x8 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm13, ymm13, ymm13) +#endif + + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r12, rsi, 1), rcx) // rcx = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(rdx, rsi, 1), rbx) // rbx = b + 4*jj*cs_b; + + lea(mem(r14), rax) // rax = a; + + +#if 0 + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c +#else + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c +#endif + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_6x4 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t m_iter = m0 / 3; + uint64_t m_left = m0 % 3; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + lea(mem(r8, r8, 2), r10) // r10 = 3*rs_a + + + mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + + mov(var(m_iter), r9) // ii = m_iter; + + label(.DLOOP3X4I) // LOOP OVER ii = [ m_iter .. 1 0 ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem(r12), rcx) // rcx = c + 3*ii*rs_c; + lea(mem(r14), rax) // rax = a + 3*ii*rs_a; + lea(mem(rdx), rbx) // rbx = b; + + +#if 1 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + lea(mem(r8, r8, 4), rdi) // rdi = 5*rs_a + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 0 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 0 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 2), r12) // + lea(mem(r12, rdi, 1), r12) // c_ii = r12 += 3*rs_c + + lea(mem(r14, r8, 2), r14) // + lea(mem(r14, r8, 1), r14) // a_ii = r14 += 3*rs_a + + dec(r9) // ii -= 1; + jne(.DLOOP3X4I) // iterate again if ii != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 4; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict bj = b; + double* restrict ai = a + i_edge*rs_a; + + if ( 2 == m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x4 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + //cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x4 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rd_haswell_asm_2x4 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x4 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | | | + -------- -- -- -- ... | | | | + -------- += -- -- -- | | | | + -------- | | | | + -------- : + -------- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm13, ymm13, ymm13) +#endif + + mov(var(a), rax) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), rcx) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_6x2 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t m_iter = m0 / 6; + uint64_t m_left = m0 % 6; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + + mov(var(m_iter), r9) // ii = m_iter; + + label(.DLOOP3X4I) // LOOP OVER ii = [ m_iter ... 1 0 ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem(r12), rcx) // rcx = c + 6*ii*rs_c; + lea(mem(r14), rax) // rax = a + 6*ii*rs_a; + lea(mem(rdx), rbx) // rbx = b; + + + lea(mem(rcx, rdi, 2), r10) // + lea(mem(r10, rdi, 1), r10) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 1*8)) // prefetch c + 2*rs_c + prefetch(0, mem(r10, 1*8)) // prefetch c + 3*rs_c + prefetch(0, mem(r10, rdi, 1, 1*8)) // prefetch c + 4*rs_c + prefetch(0, mem(r10, rdi, 2, 1*8)) // prefetch c + 5*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovsd(mem(rax, r8, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovsd(mem(rax, r13, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rax, r8, 4), xmm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovsd(mem(rax, r15, 1), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + // ymm8 ymm9 + // ymm10 ymm11 + // ymm12 ymm13 + // ymm14 ymm15 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + vhaddpd( ymm9, ymm8, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm8 ) + + vhaddpd( ymm11, ymm10, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm10 ) + + vhaddpd( ymm13, ymm12, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm12 ) + + vhaddpd( ymm15, ymm14, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm14 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + // xmm8 = sum(ymm8) sum(ymm9) + // xmm10 = sum(ymm10) sum(ymm11) + // xmm12 = sum(ymm12) sum(ymm13) + // xmm14 = sum(ymm14) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + vmulpd(xmm0, xmm10, xmm10) + vmulpd(xmm0, xmm12, xmm12) + vmulpd(xmm0, xmm14, xmm14) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm10) + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm12) + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm14) + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 4), r12) // + lea(mem(r12, rdi, 2), r12) // c_ii = r12 += 6*rs_c + + lea(mem(r14, r8, 4), r14) // + lea(mem(r14, r8, 2), r14) // a_ii = r14 += 6*rs_a + + dec(r9) // ii -= 1; + jne(.DLOOP3X4I) // iterate again if ii != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 2; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict bj = b; + double* restrict ai = a + i_edge*rs_a; + + if ( 3 <= m_left ) + { + const dim_t mr_cur = 3; + + bli_dgemmsup_rd_haswell_asm_3x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 2 <= m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rd_haswell_asm_3x2 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | + -------- -- -- -- ... | | + -------- += -- -- -- | | + -------- -- -- -- | | + -------- -- -- -- : + -------- -- -- -- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovsd(mem(rax, r8, 2), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + // ymm8 ymm9 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + vhaddpd( ymm9, ymm8, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm8 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + // xmm8 = sum(ymm8) sum(ymm9) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm8, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_2x2 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | + -------- -- -- -- ... | | + -------- += -- -- -- | | + -------- -- -- -- | | + -------- -- -- -- : + -------- -- -- -- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x2 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | + -------- -- -- -- ... | | + -------- += -- -- -- | | + -------- -- -- -- | | + -------- -- -- -- : + -------- -- -- -- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) +#endif + + mov(var(a), rax) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + // xmm4 = sum(ymm4) sum(ymm5) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + diff --git a/kernels/haswell/3/sup/bli_gemmsup_rd_haswell_asm_d6x8m.c b/kernels/haswell/3/sup/bli_gemmsup_rd_haswell_asm_d6x8m.c new file mode 100644 index 000000000..be7ad8d9c --- /dev/null +++ b/kernels/haswell/3/sup/bli_gemmsup_rd_haswell_asm_d6x8m.c @@ -0,0 +1,1901 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" + +#define BLIS_ASM_SYNTAX_ATT +#include "bli_x86_asm_macros.h" + +/* + rrc: + -------- ------ | | | | | | | | + -------- ------ | | | | | | | | + -------- += ------ ... | | | | | | | | + -------- ------ | | | | | | | | + -------- ------ : + -------- ------ : + + Assumptions: + - C is row-stored and B is column-stored; + - A is row-stored; + - m0 and n0 are at most MR and NR, respectively. + Therefore, this (r)ow-preferential microkernel is well-suited for + a dot-product-based accumulation that performs vector loads from + both A and B. +*/ + +// Prototype reference microkernels. +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref ) + +#if 0 +// Define parameters and variables for edge case kernel map. +#define NUM_MR 4 +#define NUM_NR 4 +#define FUNCPTR_T dgemmsup_ker_ft + +static dim_t mrs[NUM_MR] = { 6, 3, 2, 1 }; +static dim_t nrs[NUM_NR] = { 8, 4, 2, 1 }; +static FUNCPTR_T kmap[NUM_MR][NUM_NR] = +{ /* 8 4 2 1 */ +/* 6 */ { bli_dgemmsup_rd_haswell_asm_6x8m, bli_dgemmsup_rd_haswell_asm_6x4m, bli_dgemmsup_rd_haswell_asm_6x2m, bli_dgemmsup_r_haswell_ref_6x1 }, +/* 3 */ { bli_dgemmsup_rd_haswell_asm_3x8m, bli_dgemmsup_rd_haswell_asm_3x4m, bli_dgemmsup_rd_haswell_asm_3x2m, bli_dgemmsup_r_haswell_ref_3x1 }, +/* 2 */ { bli_dgemmsup_rd_haswell_asm_2x8m, bli_dgemmsup_rd_haswell_asm_2x4m, bli_dgemmsup_rd_haswell_asm_2x2m, bli_dgemmsup_r_haswell_ref_2x1 }, +/* 1 */ { bli_dgemmsup_rd_haswell_asm_1x8m, bli_dgemmsup_rd_haswell_asm_1x4m, bli_dgemmsup_rd_haswell_asm_1x2m, bli_dgemmsup_r_haswell_ref_1x1 } +}; +#endif + + +void bli_dgemmsup_rd_haswell_asm_6x8m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + uint64_t n_left = n0 % 8; + + // First check whether this is a edge case in the n dimension. If so, + // dispatch other 6x?m kernels, as needed. + if ( n_left ) + { + double* restrict cij = c; + double* restrict bj = b; + double* restrict ai = a; + + if ( 4 <= n_left ) + { + const dim_t nr_cur = 4; + + bli_dgemmsup_rd_haswell_asm_6x4m + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_6x2m + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 0 + const dim_t nr_cur = 1; + + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_NO_TRANSPOSE, conjb, m0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, + beta, cij, rs_c0, cntx, NULL + ); +#endif + } + return; + } + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t m_iter = m0 / 3; + uint64_t m_left = m0 % 3; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + //mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + lea(mem(r8, r8, 2), r10) // r10 = 3*rs_a + + + //mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + + + mov(var(a), r14) // load address of a + mov(var(c), r12) // load address of c + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r12, rsi, 1), r12) // r12 = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(rdx, rsi, 1), rdx) // rbx = b + 4*jj*cs_b; + + + + mov(var(m_iter), r9) // ii = m_iter; + + label(.DLOOP3X4I) // LOOP OVER ii = [ m_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem(r12), rcx) // rcx = c_iijj; + lea(mem(r14), rax) // rax = a_ii; + lea(mem(rdx), rbx) // rbx = b_jj; + + +#if 0 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + lea(mem(r8, r8, 4), rdi) // rdi = 5*rs_a + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 2), r12) // + lea(mem(r12, rdi, 1), r12) // c_ii = r12 += 3*rs_c + + lea(mem(r14, r8, 2), r14) // + lea(mem(r14, r8, 1), r14) // a_ii = r14 += 3*rs_a + + dec(r9) // ii -= 1; + jne(.DLOOP3X4I) // iterate again if ii != 0. + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 8; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict bj = b; + double* restrict ai = a + i_edge*rs_a; + + if ( 2 == m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x8 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + //cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x8 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rd_haswell_asm_6x4m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t m_iter = m0 / 3; + uint64_t m_left = m0 % 3; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + lea(mem(r8, r8, 2), r10) // r10 = 3*rs_a + + + mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + // r10 = unused + + mov(var(m_iter), r9) // ii = m_iter; + + label(.DLOOP3X4I) // LOOP OVER ii = [ m_iter .. 1 0 ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem(r12), rcx) // rcx = c + 3*ii*rs_c; + lea(mem(r14), rax) // rax = a + 3*ii*rs_a; + lea(mem(rdx), rbx) // rbx = b; + + +#if 0 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + lea(mem(r8, r8, 4), rdi) // rdi = 5*rs_a + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 2), r12) // + lea(mem(r12, rdi, 1), r12) // c_ii = r12 += 3*rs_c + + lea(mem(r14, r8, 2), r14) // + lea(mem(r14, r8, 1), r14) // a_ii = r14 += 3*rs_a + + dec(r9) // ii -= 1; + jne(.DLOOP3X4I) // iterate again if ii != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 4; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict bj = b; + double* restrict ai = a + i_edge*rs_a; + + if ( 2 == m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x4 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + //cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x4 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rd_haswell_asm_6x2m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t m_iter = m0 / 6; + uint64_t m_left = m0 % 6; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + + mov(var(m_iter), r9) // ii = m_iter; + + label(.DLOOP3X4I) // LOOP OVER ii = [ m_iter ... 1 0 ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem(r12), rcx) // rcx = c + 6*ii*rs_c; + lea(mem(r14), rax) // rax = a + 6*ii*rs_a; + lea(mem(rdx), rbx) // rbx = b; + + + lea(mem(rcx, rdi, 2), r10) // + lea(mem(r10, rdi, 1), r10) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 1*8)) // prefetch c + 2*rs_c + prefetch(0, mem(r10, 1*8)) // prefetch c + 3*rs_c + prefetch(0, mem(r10, rdi, 1, 1*8)) // prefetch c + 4*rs_c + prefetch(0, mem(r10, rdi, 2, 1*8)) // prefetch c + 5*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovsd(mem(rax, r8, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovsd(mem(rax, r13, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rax, r8, 4), xmm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovsd(mem(rax, r15, 1), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + // ymm8 ymm9 + // ymm10 ymm11 + // ymm12 ymm13 + // ymm14 ymm15 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + vhaddpd( ymm9, ymm8, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm8 ) + + vhaddpd( ymm11, ymm10, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm10 ) + + vhaddpd( ymm13, ymm12, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm12 ) + + vhaddpd( ymm15, ymm14, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm14 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + // xmm8 = sum(ymm8) sum(ymm9) + // xmm10 = sum(ymm10) sum(ymm11) + // xmm12 = sum(ymm12) sum(ymm13) + // xmm14 = sum(ymm14) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + vmulpd(xmm0, xmm10, xmm10) + vmulpd(xmm0, xmm12, xmm12) + vmulpd(xmm0, xmm14, xmm14) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm10) + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm12) + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm14) + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 4), r12) // + lea(mem(r12, rdi, 2), r12) // c_ii = r12 += 6*rs_c + + lea(mem(r14, r8, 4), r14) // + lea(mem(r14, r8, 2), r14) // a_ii = r14 += 6*rs_a + + dec(r9) // ii -= 1; + jne(.DLOOP3X4I) // iterate again if ii != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 2; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict bj = b; + double* restrict ai = a + i_edge*rs_a; + + if ( 3 <= m_left ) + { + const dim_t mr_cur = 3; + + bli_dgemmsup_rd_haswell_asm_3x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 2 <= m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + diff --git a/kernels/haswell/3/sup/bli_gemmsup_rd_haswell_asm_d6x8n.c b/kernels/haswell/3/sup/bli_gemmsup_rd_haswell_asm_d6x8n.c new file mode 100644 index 000000000..9012e921b --- /dev/null +++ b/kernels/haswell/3/sup/bli_gemmsup_rd_haswell_asm_d6x8n.c @@ -0,0 +1,2402 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" + +#define BLIS_ASM_SYNTAX_ATT +#include "bli_x86_asm_macros.h" + +/* + rrc: + -------- ------ | | | | | | | | + -------- ------ | | | | | | | | + -------- += ------ ... | | | | | | | | + -------- ------ | | | | | | | | + -------- ------ : + -------- ------ : + + Assumptions: + - C is row-stored and B is column-stored; + - A is row-stored; + - m0 and n0 are at most MR and NR, respectively. + Therefore, this (r)ow-preferential microkernel is well-suited for + a dot-product-based accumulation that performs vector loads from + both A and B. +*/ + +// Prototype reference microkernels. +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref ) + +#if 0 +// Define parameters and variables for edge case kernel map. +#define NUM_MR 4 +#define NUM_NR 4 +#define FUNCPTR_T dgemmsup_ker_ft + +static dim_t mrs[NUM_MR] = { 6, 3, 2, 1 }; +static dim_t nrs[NUM_NR] = { 8, 4, 2, 1 }; +static FUNCPTR_T kmap[NUM_MR][NUM_NR] = +{ /* 8 4 2 1 */ +/* 6 */ { bli_dgemmsup_rd_haswell_asm_6x8n, bli_dgemmsup_rd_haswell_asm_6x4n, bli_dgemmsup_rd_haswell_asm_6x2n, bli_dgemmsup_r_haswell_ref_6x1 }, +/* 3 */ { bli_dgemmsup_rd_haswell_asm_3x8n, bli_dgemmsup_rd_haswell_asm_3x4n, bli_dgemmsup_rd_haswell_asm_3x2n, bli_dgemmsup_r_haswell_ref_3x1 }, +/* 2 */ { bli_dgemmsup_rd_haswell_asm_2x8n, bli_dgemmsup_rd_haswell_asm_2x4n, bli_dgemmsup_rd_haswell_asm_2x2n, bli_dgemmsup_r_haswell_ref_2x1 }, +/* 1 */ { bli_dgemmsup_rd_haswell_asm_1x8n, bli_dgemmsup_rd_haswell_asm_1x4n, bli_dgemmsup_rd_haswell_asm_1x2n, bli_dgemmsup_r_haswell_ref_1x1 } +}; +#endif + + +void bli_dgemmsup_rd_haswell_asm_6x8n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + uint64_t m_left = m0 % 6; + + // First check whether this is a edge case in the n dimension. If so, + // dispatch other ?x8m kernels, as needed. + if ( m_left ) + { + double* restrict cij = c; + double* restrict bj = b; + double* restrict ai = a; + +#if 1 + // We add special handling for slightly inflated MR blocksizes + // at edge cases, up to a maximum of 9. + if ( 6 < m0 ) + { + dgemmsup_ker_ft ker_fp1 = NULL; + dgemmsup_ker_ft ker_fp2 = NULL; + dim_t mr1, mr2; + + if ( m0 == 7 ) + { + mr1 = 6; mr2 = 1; + ker_fp1 = bli_dgemmsup_rd_haswell_asm_6x8n; + ker_fp2 = bli_dgemmsup_rd_haswell_asm_1x8n; + } + else if ( m0 == 8 ) + { + mr1 = 6; mr2 = 2; + ker_fp1 = bli_dgemmsup_rd_haswell_asm_6x8n; + ker_fp2 = bli_dgemmsup_rd_haswell_asm_2x8n; + } + else // if ( m0 == 9 ) + { + mr1 = 6; mr2 = 3; + ker_fp1 = bli_dgemmsup_rd_haswell_asm_6x8n; + ker_fp2 = bli_dgemmsup_rd_haswell_asm_3x8n; + } + + ker_fp1 + ( + conja, conjb, mr1, n0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr1*rs_c0; ai += mr1*rs_a0; + + ker_fp2 + ( + conja, conjb, mr2, n0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + + return; + } +#endif + + if ( 3 <= m_left ) + { + const dim_t mr_cur = 3; + + bli_dgemmsup_rd_haswell_asm_3x8n + ( + conja, conjb, mr_cur, n0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 2 <= m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x8n + ( + conja, conjb, mr_cur, n0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { +#if 0 + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x8n + ( + conja, conjb, mr_cur, n0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_TRANSPOSE, conja, k0, n0, + alpha, bj, rs_b0, cs_b0, ai, cs_a0, + beta, cij, cs_c0, cntx, NULL + ); +#endif + } + return; + } + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t n_iter = n0 / 4; + uint64_t n_left = n0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( n_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rdx) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + //mov(var(b), r14) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + //mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // rdx = rax = a + // r14 = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + + mov(imm(0), r9) // ii = 0; + + label(.DLOOP3X4I) // LOOP OVER ii = [ 0 1 ... ] + + + + mov(var(b), r14) // load address of b + mov(var(c), r12) // load address of c + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + lea(mem( , r9, 1), rsi) // rsi = r9 = 3*ii; + imul(rdi, rsi) // rsi *= rs_c + lea(mem(r12, rsi, 1), r12) // r12 = c + 3*ii*rs_c; + + lea(mem( , r9, 1), rsi) // rsi = r9 = 3*ii; + imul(r8, rsi) // rsi *= rs_a; + lea(mem(rdx, rsi, 1), rdx) // rax = a + 3*ii*rs_a; + + + + mov(var(n_iter), r15) // jj = n_iter; + + label(.DLOOP3X4J) // LOOP OVER jj = [ n_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + lea(mem(r12), rcx) // rcx = c_iijj; + lea(mem(rdx), rax) // rax = a_ii; + lea(mem(r14), rbx) // rbx = b_jj; + + +#if 1 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + lea(mem(r11, r11, 2), rdi) // rdi = 3*cs_b + lea(mem(rbx, r11, 4), r10) // r10 = rbx + 4*cs_b + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 0 + prefetch(0, mem(r10, 0*8)) // prefetch rbx + 4*cs_b + prefetch(0, mem(r10, r11, 1, 0*8)) // prefetch rbx + 5*cs_b + prefetch(0, mem(r10, r11, 2, 0*8)) // prefetch rbx + 6*cs_b + prefetch(0, mem(r10, r13, 1, 0*8)) // prefetch rbx + 7*cs_b + add(imm(8*8), r10) // r10 += 8*rs_b = 8*8; +#else + prefetch(0, mem(r10, 0*8)) // prefetch rbx + 4*cs_b + prefetch(0, mem(r10, r11, 1, 0*8)) // prefetch rbx + 5*cs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + +#if 1 + prefetch(0, mem(r10, r11, 2, 0*8)) // prefetch rbx + 6*cs_b + prefetch(0, mem(r10, r13, 1, 0*8)) // prefetch rbx + 7*cs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(r10, 8*8)) // prefetch rbx + 4*cs_b + 8*rs_b + prefetch(0, mem(r10, r11, 1, 8*8)) // prefetch rbx + 5*cs_b + 8*rs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + +#if 1 + prefetch(0, mem(r10, r11, 2, 8*8)) // prefetch rbx + 6*cs_b + 8*rs_b + prefetch(0, mem(r10, r13, 1, 8*8)) // prefetch rbx + 7*cs_b + 8*rs_b + add(imm(16*8), r10) // r10 += 8*rs_b = 8*8; +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4*8), r12) // c_jj = r12 += 4*cs_c + + lea(mem(r14, r11, 4), r14) // b_jj = r14 += 4*cs_b + + dec(r15) // jj -= 1; + jne(.DLOOP3X4J) // iterate again if jj != 0. + + + + add(imm(3), r9) // ii += 3; + cmp(imm(3), r9) // compare ii to 3 + jle(.DLOOP3X4I) // if ii <= 3, jump to beginning + // of ii loop; otherwise, loop ends. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [n_iter] "m" (n_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( n_left ) + { + const dim_t mr_cur = 6; + const dim_t j_edge = n0 - ( dim_t )n_left; + + double* restrict cij = c + j_edge*cs_c; + double* restrict ai = a; + double* restrict bj = b + j_edge*cs_b; + + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_6x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 0 + const dim_t nr_cur = 1; + + //bli_dgemmsup_rd_haswell_asm_6x1n + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_NO_TRANSPOSE, conjb, mr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, + beta, cij, rs_c0, cntx, NULL + ); +#endif + } + } +} + +void bli_dgemmsup_rd_haswell_asm_3x8n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t n_iter = n0 / 4; + uint64_t n_left = n0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( n_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rdx) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // rdx = rax = a + // r14 = rbx = b + // r9 = unused + // r15 = n dim index jj + + mov(var(n_iter), r15) // jj = n_iter; + + label(.DLOOP3X4J) // LOOP OVER jj = [ n_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + lea(mem(r12), rcx) // rcx = c_iijj; + lea(mem(rdx), rax) // rax = a_ii; + lea(mem(r14), rbx) // rbx = b_jj; + + +#if 1 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + lea(mem(r11, r11, 2), rdi) // rdi = 3*cs_b + lea(mem(rbx, r11, 4), r10) // r10 = rbx + 4*cs_b + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 0 + prefetch(0, mem(r10, 0*8)) // prefetch rbx + 4*cs_b + prefetch(0, mem(r10, r11, 1, 0*8)) // prefetch rbx + 5*cs_b + prefetch(0, mem(r10, r11, 2, 0*8)) // prefetch rbx + 6*cs_b + prefetch(0, mem(r10, r13, 1, 0*8)) // prefetch rbx + 7*cs_b + add(imm(8*8), r10) // r10 += 8*rs_b = 8*8; +#else + prefetch(0, mem(r10, 0*8)) // prefetch rbx + 4*cs_b + prefetch(0, mem(r10, r11, 1, 0*8)) // prefetch rbx + 5*cs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + +#if 1 + prefetch(0, mem(r10, r11, 2, 0*8)) // prefetch rbx + 6*cs_b + prefetch(0, mem(r10, r13, 1, 0*8)) // prefetch rbx + 7*cs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(r10, 8*8)) // prefetch rbx + 4*cs_b + 8*rs_b + prefetch(0, mem(r10, r11, 1, 8*8)) // prefetch rbx + 5*cs_b + 8*rs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + +#if 1 + prefetch(0, mem(r10, r11, 2, 8*8)) // prefetch rbx + 6*cs_b + 8*rs_b + prefetch(0, mem(r10, r13, 1, 8*8)) // prefetch rbx + 7*cs_b + 8*rs_b + add(imm(16*8), r10) // r10 += 8*rs_b = 8*8; +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4*8), r12) // c_jj = r12 += 4*cs_c + + lea(mem(r14, r11, 4), r14) // b_jj = r14 += 4*cs_b + + dec(r15) // jj -= 1; + jne(.DLOOP3X4J) // iterate again if jj != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [n_iter] "m" (n_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( n_left ) + { + const dim_t mr_cur = 3; + const dim_t j_edge = n0 - ( dim_t )n_left; + + double* restrict cij = c + j_edge*cs_c; + double* restrict ai = a; + double* restrict bj = b + j_edge*cs_b; + + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_3x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 0 + const dim_t nr_cur = 1; + + bli_dgemmsup_r_haswell_ref_3x1 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_NO_TRANSPOSE, conjb, mr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, + beta, cij, rs_c0, cntx, NULL + ); +#endif + } + } +} + +void bli_dgemmsup_rd_haswell_asm_2x8n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t n_iter = n0 / 4; + uint64_t n_left = n0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( n_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rdx) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // rdx = rax = a + // r14 = rbx = b + // r9 = unused + // r15 = n dim index jj + + mov(var(n_iter), r15) // jj = n_iter; + + label(.DLOOP3X4J) // LOOP OVER jj = [ n_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) +#endif + + lea(mem(r12), rcx) // rcx = c_iijj; + lea(mem(rdx), rax) // rax = a_ii; + lea(mem(r14), rbx) // rbx = b_jj; + + +#if 1 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c +#endif + lea(mem(r11, r11, 2), rdi) // rdi = 3*cs_b + lea(mem(rbx, r11, 4), r10) // r10 = rbx + 4*cs_b + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 0 + prefetch(0, mem(r10, 0*8)) // prefetch rbx + 4*cs_b + prefetch(0, mem(r10, r11, 1, 0*8)) // prefetch rbx + 5*cs_b + prefetch(0, mem(r10, r11, 2, 0*8)) // prefetch rbx + 6*cs_b + prefetch(0, mem(r10, r13, 1, 0*8)) // prefetch rbx + 7*cs_b + add(imm(8*8), r10) // r10 += 8*rs_b = 8*8; +#else + prefetch(0, mem(r10, 0*8)) // prefetch rbx + 4*cs_b + prefetch(0, mem(r10, r11, 1, 0*8)) // prefetch rbx + 5*cs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 1 + +#if 1 + prefetch(0, mem(r10, r11, 2, 0*8)) // prefetch rbx + 6*cs_b + prefetch(0, mem(r10, r13, 1, 0*8)) // prefetch rbx + 7*cs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(r10, 8*8)) // prefetch rbx + 4*cs_b + 8*rs_b + prefetch(0, mem(r10, r11, 1, 8*8)) // prefetch rbx + 5*cs_b + 8*rs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 3 + +#if 1 + prefetch(0, mem(r10, r11, 2, 8*8)) // prefetch rbx + 6*cs_b + 8*rs_b + prefetch(0, mem(r10, r13, 1, 8*8)) // prefetch rbx + 7*cs_b + 8*rs_b + add(imm(16*8), r10) // r10 += 8*rs_b = 8*8; +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4*8), r12) // c_jj = r12 += 4*cs_c + + lea(mem(r14, r11, 4), r14) // b_jj = r14 += 4*cs_b + + dec(r15) // jj -= 1; + jne(.DLOOP3X4J) // iterate again if jj != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [n_iter] "m" (n_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( n_left ) + { + const dim_t mr_cur = 2; + const dim_t j_edge = n0 - ( dim_t )n_left; + + double* restrict cij = c + j_edge*cs_c; + double* restrict ai = a; + double* restrict bj = b + j_edge*cs_b; + + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 0 + const dim_t nr_cur = 1; + + bli_dgemmsup_r_haswell_ref_2x1 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_NO_TRANSPOSE, conjb, mr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, + beta, cij, rs_c0, cntx, NULL + ); +#endif + } + } +} + +void bli_dgemmsup_rd_haswell_asm_1x8n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t n_iter = n0 / 4; + uint64_t n_left = n0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( n_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rdx) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // rdx = rax = a + // r14 = rbx = b + // r9 = unused + // r15 = n dim index jj + + mov(var(n_iter), r15) // jj = n_iter; + + label(.DLOOP3X4J) // LOOP OVER jj = [ n_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm13, ymm13, ymm13) +#endif + + lea(mem(r12), rcx) // rcx = c_iijj; + lea(mem(rdx), rax) // rax = a_ii; + lea(mem(r14), rbx) // rbx = b_jj; + + +#if 1 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c +#endif + lea(mem(r11, r11, 2), rdi) // rdi = 3*cs_b + lea(mem(rbx, r11, 4), r10) // r10 = rbx + 4*cs_b + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 0 + prefetch(0, mem(r10, 0*8)) // prefetch rbx + 4*cs_b + prefetch(0, mem(r10, r11, 1, 0*8)) // prefetch rbx + 5*cs_b + prefetch(0, mem(r10, r11, 2, 0*8)) // prefetch rbx + 6*cs_b + prefetch(0, mem(r10, r13, 1, 0*8)) // prefetch rbx + 7*cs_b + add(imm(8*8), r10) // r10 += 8*rs_b = 8*8; +#else + prefetch(0, mem(r10, 0*8)) // prefetch rbx + 4*cs_b + prefetch(0, mem(r10, r11, 1, 0*8)) // prefetch rbx + 5*cs_b +#endif + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 1 + +#if 1 + prefetch(0, mem(r10, r11, 2, 0*8)) // prefetch rbx + 6*cs_b + prefetch(0, mem(r10, r13, 1, 0*8)) // prefetch rbx + 7*cs_b +#endif + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(r10, 8*8)) // prefetch rbx + 4*cs_b + 8*rs_b + prefetch(0, mem(r10, r11, 1, 8*8)) // prefetch rbx + 5*cs_b + 8*rs_b +#endif + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 3 + +#if 1 + prefetch(0, mem(r10, r11, 2, 8*8)) // prefetch rbx + 6*cs_b + 8*rs_b + prefetch(0, mem(r10, r13, 1, 8*8)) // prefetch rbx + 7*cs_b + 8*rs_b + add(imm(16*8), r10) // r10 += 8*rs_b = 8*8; +#endif + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4*8), r12) // c_jj = r12 += 4*cs_c + + lea(mem(r14, r11, 4), r14) // b_jj = r14 += 4*cs_b + + dec(r15) // jj -= 1; + jne(.DLOOP3X4J) // iterate again if jj != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [n_iter] "m" (n_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( n_left ) + { + const dim_t mr_cur = 1; + const dim_t j_edge = n0 - ( dim_t )n_left; + + double* restrict cij = c + j_edge*cs_c; + double* restrict ai = a; + double* restrict bj = b + j_edge*cs_b; + + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_1x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 0 + const dim_t nr_cur = 1; + + bli_dgemmsup_r_haswell_ref_1x1 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_ddotxv_ex + ( + conja, conjb, k0, + alpha, ai, cs_a0, bj, rs_b0, + beta, cij, cntx, NULL + ); +#endif + } + } +} + diff --git a/kernels/haswell/3/sup/bli_gemmsup_rv_haswell_asm_d6x8.c b/kernels/haswell/3/sup/bli_gemmsup_rv_haswell_asm_d6x8.c new file mode 100644 index 000000000..ebe396317 --- /dev/null +++ b/kernels/haswell/3/sup/bli_gemmsup_rv_haswell_asm_d6x8.c @@ -0,0 +1,11047 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" + +#define BLIS_ASM_SYNTAX_ATT +#include "bli_x86_asm_macros.h" + +/* + rrr: + -------- ------ -------- + -------- ------ -------- + -------- += ------ ... -------- + -------- ------ -------- + -------- ------ : + -------- ------ : + + rcr: + -------- | | | | -------- + -------- | | | | -------- + -------- += | | | | ... -------- + -------- | | | | -------- + -------- | | | | : + -------- | | | | : + + Assumptions: + - B is row-stored; + - A is row- or column-stored; + - m0 and n0 are at most MR and NR, respectively. + Therefore, this (r)ow-preferential kernel is well-suited for contiguous + (v)ector loads on B and single-element broadcasts from A. + + NOTE: These kernels explicitly support column-oriented IO, implemented + via an in-register transpose. And thus they also support the crr and + ccr cases, though only crr is ever utilized (because ccr is handled by + transposing the operation and executing rcr, which does not incur the + cost of the in-register transpose). + + crr: + | | | | | | | | ------ -------- + | | | | | | | | ------ -------- + | | | | | | | | += ------ ... -------- + | | | | | | | | ------ -------- + | | | | | | | | ------ : + | | | | | | | | ------ : +*/ + +// Prototype reference microkernels. +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref ) + +// Define parameters and variables for edge case kernel map. +#define NUM_MR 4 +#define NUM_NR 4 +#define FUNCPTR_T dgemmsup_ker_ft + +static dim_t mrs[NUM_MR] = { 6, 4, 2, 1 }; +static dim_t nrs[NUM_NR] = { 8, 4, 2, 1 }; +static FUNCPTR_T kmap[NUM_MR][NUM_NR] = +{ /* 8 4 2 1 */ +/* 6 */ { bli_dgemmsup_rv_haswell_asm_6x8, bli_dgemmsup_rv_haswell_asm_6x4, bli_dgemmsup_rv_haswell_asm_6x2, bli_dgemmsup_r_haswell_ref_6x1 }, +/* 4 */ { bli_dgemmsup_rv_haswell_asm_4x8, bli_dgemmsup_rv_haswell_asm_4x4, bli_dgemmsup_rv_haswell_asm_4x2, bli_dgemmsup_r_haswell_ref_4x1 }, +/* 2 */ { bli_dgemmsup_rv_haswell_asm_2x8, bli_dgemmsup_rv_haswell_asm_2x4, bli_dgemmsup_rv_haswell_asm_2x2, bli_dgemmsup_r_haswell_ref_2x1 }, +/* 1 */ { bli_dgemmsup_rv_haswell_asm_1x8, bli_dgemmsup_rv_haswell_asm_1x4, bli_dgemmsup_rv_haswell_asm_1x2, bli_dgemmsup_r_haswell_ref_1x1 }, +}; + + +void bli_dgemmsup_rv_haswell_asm_6x8 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + // Use a reference kernel if this is an edge case in the m or n + // dimensions. + if ( m0 < 6 || n0 < 8 ) + { +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + dim_t n_left = n0; + double* restrict cj = c; + double* restrict bj = b; + + // Iterate across columns (corresponding to elements of nrs) until + // n_left is zero. + for ( dim_t j = 0; n_left != 0; ++j ) + { + const dim_t nr_cur = nrs[ j ]; + + // Once we find the value of nrs that is less than (or equal to) + // n_left, we use the kernels in that column. + if ( nr_cur <= n_left ) + { + dim_t m_left = m0; + double* restrict cij = cj; + double* restrict ai = a; + + // Iterate down the current column (corresponding to elements + // of mrs) until m_left is zero. + for ( dim_t i = 0; m_left != 0; ++i ) + { + const dim_t mr_cur = mrs[ i ]; + + // Once we find the value of mrs that is less than (or equal + // to) m_left, we select that kernel. + if ( mr_cur <= m_left ) + { + FUNCPTR_T ker_fp = kmap[i][j]; + + //printf( "executing %d x %d sup kernel.\n", (int)mr_cur, (int)nr_cur ); + + // Call the kernel using current mrs and nrs values. + ker_fp + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + + // Advance C and A pointers by the mrs and nrs we just + // used, and decrement m_left. + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + } + + // Advance C and B pointers by the mrs and nrs we just used, and + // decrement n_left. + cj += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + } + + return; + } + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 7*8)) // prefetch c + 4*rs_c + prefetch(0, mem(rdx, rdi, 2, 7*8)) // prefetch c + 5*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 7*8)) // prefetch c + 4*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 4*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 4*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 4*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 4*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 4*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 4*8)) // prefetch c + 5*cs_c + lea(mem(rdx, rsi, 2), rdx) // rdx = c + 5*cs_c; + prefetch(0, mem(rdx, rsi, 1, 4*8)) // prefetch c + 6*cs_c + prefetch(0, mem(rdx, rsi, 2, 4*8)) // prefetch c + 7*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + +#if 1 + lea(mem(rax, r9, 8), rdx) // + lea(mem(rdx, r9, 8), rdx) // rdx = a + 16*cs_a; +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + prefetch(0, mem(rdx, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + +#if 0 + prefetch(0, mem(rdx, r9, 1, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(rdx, r9, 2, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + +#if 1 + lea(mem(rdx, r9, 4), rdx) // a_prefetch += 4*cs_a; +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(ymm0, ymm7, ymm7) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(ymm0, ymm9, ymm9) + vmulpd(ymm0, ymm10, ymm10) + vmulpd(ymm0, ymm11, ymm11) + vmulpd(ymm0, ymm12, ymm12) + vmulpd(ymm0, ymm13, ymm13) + vmulpd(ymm0, ymm14, ymm14) + vmulpd(ymm0, ymm15, ymm15) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm5) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm7) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm9) + vmovupd(ymm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm10) + vmovupd(ymm10, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm11) + vmovupd(ymm11, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm12) + vmovupd(ymm12, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm13) + vmovupd(ymm13, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm14) + vmovupd(ymm14, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm15) + vmovupd(ymm15, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm8) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm10) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm7) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm9) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm11) + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + vmovupd(ymm9, mem(rcx, rsi, 2)) + vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm15, ymm13, ymm0) + vunpckhpd(ymm15, ymm13, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm6, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm8, mem(rcx)) + vmovupd(ymm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm10, mem(rcx)) + vmovupd(ymm11, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm12, mem(rcx)) + vmovupd(ymm13, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm14, mem(rcx)) + vmovupd(ymm15, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + vmovupd(ymm9, mem(rcx, rsi, 2)) + vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm15, ymm13, ymm0) + vunpckhpd(ymm15, ymm13, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_5x8 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 7*8)) // prefetch c + 4*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 4*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 4*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 4*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 4*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 4*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 4*8)) // prefetch c + 5*cs_c + lea(mem(rdx, rsi, 2), rdx) // rdx = c + 5*cs_c; + prefetch(0, mem(rdx, rsi, 1, 4*8)) // prefetch c + 6*cs_c + prefetch(0, mem(rdx, rsi, 2, 4*8)) // prefetch c + 7*cs_c + + label(.DPOSTPFETCH) // done prefetching c + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(ymm0, ymm7, ymm7) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(ymm0, ymm9, ymm9) + vmulpd(ymm0, ymm10, ymm10) + vmulpd(ymm0, ymm11, ymm11) + vmulpd(ymm0, ymm12, ymm12) + vmulpd(ymm0, ymm13, ymm13) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm5) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm7) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm9) + vmovupd(ymm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm10) + vmovupd(ymm10, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm11) + vmovupd(ymm11, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm12) + vmovupd(ymm12, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm13) + vmovupd(ymm13, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm8) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm10) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + +#if 0 + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) +#else + vmovlpd(mem(rdx), xmm0, xmm0) + vmovhpd(mem(rdx, rsi, 1), xmm0, xmm0) + vmovlpd(mem(rdx, rsi, 2), xmm1, xmm1) + vmovhpd(mem(rdx, rax, 1), xmm1, xmm1) + vperm2f128(imm(0x20), ymm1, ymm0, ymm0) + + vfmadd213pd(ymm12, ymm3, ymm0) + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rdx)) + vmovhpd(xmm0, mem(rdx, rsi, 1)) + vmovlpd(xmm1, mem(rdx, rsi, 2)) + vmovhpd(xmm1, mem(rdx, rax, 1)) +#endif + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm7) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm9) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm11) + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + vmovupd(ymm9, mem(rcx, rsi, 2)) + vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + +#if 0 + vunpcklpd(ymm15, ymm13, ymm0) + vunpckhpd(ymm15, ymm13, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) +#else + vmovlpd(mem(rdx), xmm0, xmm0) + vmovhpd(mem(rdx, rsi, 1), xmm0, xmm0) + vmovlpd(mem(rdx, rsi, 2), xmm1, xmm1) + vmovhpd(mem(rdx, rax, 1), xmm1, xmm1) + vperm2f128(imm(0x20), ymm1, ymm0, ymm0) + + vfmadd213pd(ymm13, ymm3, ymm0) + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rdx)) + vmovhpd(xmm0, mem(rdx, rsi, 1)) + vmovlpd(xmm1, mem(rdx, rsi, 2)) + vmovhpd(xmm1, mem(rdx, rax, 1)) +#endif + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm6, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm8, mem(rcx)) + vmovupd(ymm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm10, mem(rcx)) + vmovupd(ymm11, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm12, mem(rcx)) + vmovupd(ymm13, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + +#if 0 + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) +#else + vmovupd(ymm12, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + vmovlpd(xmm1, mem(rcx, rsi, 2)) + vmovhpd(xmm1, mem(rcx, rax, 1)) +#endif + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + vmovupd(ymm9, mem(rcx, rsi, 2)) + vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + +#if 0 + vunpcklpd(ymm15, ymm13, ymm0) + vunpckhpd(ymm15, ymm13, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) +#else + vmovupd(ymm13, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rdx)) + vmovhpd(xmm0, mem(rdx, rsi, 1)) + vmovlpd(xmm1, mem(rdx, rsi, 2)) + vmovhpd(xmm1, mem(rdx, rax, 1)) +#endif + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_4x8 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 3*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 3*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 3*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 3*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 3*8)) // prefetch c + 5*cs_c + lea(mem(rdx, rsi, 2), rdx) // rdx = c + 5*cs_c; + prefetch(0, mem(rdx, rsi, 1, 3*8)) // prefetch c + 6*cs_c + prefetch(0, mem(rdx, rsi, 2, 3*8)) // prefetch c + 7*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(ymm0, ymm7, ymm7) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(ymm0, ymm9, ymm9) + vmulpd(ymm0, ymm10, ymm10) + vmulpd(ymm0, ymm11, ymm11) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + //lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm5) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm7) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm9) + vmovupd(ymm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm10) + vmovupd(ymm10, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm11) + vmovupd(ymm11, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm8) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm10) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm7) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm9) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm11) + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + vmovupd(ymm9, mem(rcx, rsi, 2)) + vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + vmovupd(ymm8, mem(rcx)) + vmovupd(ymm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + vmovupd(ymm10, mem(rcx)) + vmovupd(ymm11, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + vmovupd(ymm9, mem(rcx, rsi, 2)) + vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_3x8 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 2*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 2*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 2*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 2*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 2*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 2*8)) // prefetch c + 5*cs_c + lea(mem(rdx, rsi, 2), rdx) // rdx = c + 5*cs_c; + prefetch(0, mem(rdx, rsi, 1, 2*8)) // prefetch c + 6*cs_c + prefetch(0, mem(rdx, rsi, 2, 2*8)) // prefetch c + 7*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(ymm0, ymm7, ymm7) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(ymm0, ymm9, ymm9) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 2), rdx) // load address of c + 2*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm5) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm7) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm9) + vmovupd(ymm9, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vextractf128(imm(0x1), ymm4, xmm12) + vextractf128(imm(0x1), ymm6, xmm13) + vextractf128(imm(0x1), ymm8, xmm14) + vextractf128(imm(0x1), ymm10, xmm15) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vfmadd231pd(mem(rcx, rsi, 1), xmm3, xmm6) + vfmadd231pd(mem(rcx, rsi, 2), xmm3, xmm8) + vfmadd231pd(mem(rcx, rax, 1), xmm3, xmm10) + vmovupd(xmm4, mem(rcx)) + vmovupd(xmm6, mem(rcx, rsi, 1)) + vmovupd(xmm8, mem(rcx, rsi, 2)) + vmovupd(xmm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + vfmadd231sd(mem(rdx), xmm3, xmm12) + vfmadd231sd(mem(rdx, rsi, 1), xmm3, xmm13) + vfmadd231sd(mem(rdx, rsi, 2), xmm3, xmm14) + vfmadd231sd(mem(rdx, rax, 1), xmm3, xmm15) + vmovsd(xmm12, mem(rdx)) + vmovsd(xmm13, mem(rdx, rsi, 1)) + vmovsd(xmm14, mem(rdx, rsi, 2)) + vmovsd(xmm15, mem(rdx, rax, 1)) + + lea(mem(rdx, rsi, 4), rdx) + + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vextractf128(imm(0x1), ymm5, xmm12) + vextractf128(imm(0x1), ymm7, xmm13) + vextractf128(imm(0x1), ymm9, xmm14) + vextractf128(imm(0x1), ymm11, xmm15) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), xmm3, xmm5) + vfmadd231pd(mem(rcx, rsi, 1), xmm3, xmm7) + vfmadd231pd(mem(rcx, rsi, 2), xmm3, xmm9) + vfmadd231pd(mem(rcx, rax, 1), xmm3, xmm11) + vmovupd(xmm5, mem(rcx)) + vmovupd(xmm7, mem(rcx, rsi, 1)) + vmovupd(xmm9, mem(rcx, rsi, 2)) + vmovupd(xmm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vfmadd231sd(mem(rdx), xmm3, xmm12) + vfmadd231sd(mem(rdx, rsi, 1), xmm3, xmm13) + vfmadd231sd(mem(rdx, rsi, 2), xmm3, xmm14) + vfmadd231sd(mem(rdx, rax, 1), xmm3, xmm15) + vmovsd(xmm12, mem(rdx)) + vmovsd(xmm13, mem(rdx, rsi, 1)) + vmovsd(xmm14, mem(rdx, rsi, 2)) + vmovsd(xmm15, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + vmovupd(ymm8, mem(rcx)) + vmovupd(ymm9, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vextractf128(imm(0x1), ymm4, xmm12) + vextractf128(imm(0x1), ymm6, xmm13) + vextractf128(imm(0x1), ymm8, xmm14) + vextractf128(imm(0x1), ymm10, xmm15) + + vmovupd(xmm4, mem(rcx)) + vmovupd(xmm6, mem(rcx, rsi, 1)) + vmovupd(xmm8, mem(rcx, rsi, 2)) + vmovupd(xmm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + vmovsd(xmm12, mem(rdx)) + vmovsd(xmm13, mem(rdx, rsi, 1)) + vmovsd(xmm14, mem(rdx, rsi, 2)) + vmovsd(xmm15, mem(rdx, rax, 1)) + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vextractf128(imm(0x1), ymm5, xmm12) + vextractf128(imm(0x1), ymm7, xmm13) + vextractf128(imm(0x1), ymm9, xmm14) + vextractf128(imm(0x1), ymm11, xmm15) + + vmovupd(xmm5, mem(rcx)) + vmovupd(xmm7, mem(rcx, rsi, 1)) + vmovupd(xmm9, mem(rcx, rsi, 2)) + vmovupd(xmm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vmovsd(xmm12, mem(rdx)) + vmovsd(xmm13, mem(rdx, rsi, 1)) + vmovsd(xmm14, mem(rdx, rsi, 2)) + vmovsd(xmm15, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_2x8 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 1*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 1*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 1*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 1*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 1*8)) // prefetch c + 5*cs_c + lea(mem(rdx, rsi, 2), rdx) // rdx = c + 5*cs_c; + prefetch(0, mem(rdx, rsi, 1, 1*8)) // prefetch c + 6*cs_c + prefetch(0, mem(rdx, rsi, 2, 1*8)) // prefetch c + 7*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(ymm0, ymm7, ymm7) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + //lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm5) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm7) + vmovupd(ymm7, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rcx), xmm3, xmm0) + vfmadd231pd(mem(rcx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rcx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rcx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rcx)) + vmovupd(xmm1, mem(rcx, rsi, 1)) + vmovupd(xmm2, mem(rcx, rsi, 2)) + vmovupd(xmm4, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rcx), xmm3, xmm0) + vfmadd231pd(mem(rcx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rcx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rcx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rcx)) + vmovupd(xmm1, mem(rcx, rsi, 1)) + vmovupd(xmm2, mem(rcx, rsi, 2)) + vmovupd(xmm4, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rcx)) + vmovupd(xmm1, mem(rcx, rsi, 1)) + vmovupd(xmm2, mem(rcx, rsi, 2)) + vmovupd(xmm4, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rcx)) + vmovupd(xmm1, mem(rcx, rsi, 1)) + vmovupd(xmm2, mem(rcx, rsi, 2)) + vmovupd(xmm4, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_1x8 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 0*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 0*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 0*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 0*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 0*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 0*8)) // prefetch c + 5*cs_c + lea(mem(rdx, rsi, 2), rdx) // rdx = c + 5*cs_c; + prefetch(0, mem(rdx, rsi, 1, 0*8)) // prefetch c + 6*cs_c + prefetch(0, mem(rdx, rsi, 2, 0*8)) // prefetch c + 7*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + //lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm5) + vmovupd(ymm5, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vmovlpd(mem(rcx), xmm0, xmm0) + vmovhpd(mem(rcx, rsi, 1), xmm0, xmm0) + vmovlpd(mem(rcx, rsi, 2), xmm1, xmm1) + vmovhpd(mem(rcx, rax, 1), xmm1, xmm1) + vperm2f128(imm(0x20), ymm1, ymm0, ymm0) + + vfmadd213pd(ymm4, ymm3, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + vmovlpd(xmm1, mem(rcx, rsi, 2)) + vmovhpd(xmm1, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vmovlpd(mem(rcx), xmm0, xmm0) + vmovhpd(mem(rcx, rsi, 1), xmm0, xmm0) + vmovlpd(mem(rcx, rsi, 2), xmm1, xmm1) + vmovhpd(mem(rcx, rax, 1), xmm1, xmm1) + vperm2f128(imm(0x20), ymm1, ymm0, ymm0) + + vfmadd213pd(ymm5, ymm3, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + vmovlpd(xmm1, mem(rcx, rsi, 2)) + vmovhpd(xmm1, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm5, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vmovupd(ymm4, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + vmovlpd(xmm1, mem(rcx, rsi, 2)) + vmovhpd(xmm1, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vmovupd(ymm5, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + vmovlpd(xmm1, mem(rcx, rsi, 2)) + vmovhpd(xmm1, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_6x6 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 5*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 5*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 5*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 5*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 5*8)) // prefetch c + 4*rs_c + prefetch(0, mem(rdx, rdi, 2, 5*8)) // prefetch c + 5*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 5*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 5*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 5*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 5*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 5*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 5*8)) // prefetch c + 5*cs_c + + label(.DPOSTPFETCH) // done prefetching c + + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(xmm0, xmm5, xmm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(xmm0, xmm7, xmm7) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(xmm0, xmm9, xmm9) + vmulpd(ymm0, ymm10, ymm10) + vmulpd(xmm0, xmm11, xmm11) + vmulpd(ymm0, ymm12, ymm12) + vmulpd(xmm0, xmm13, xmm13) + vmulpd(ymm0, ymm14, ymm14) + vmulpd(xmm0, xmm15, xmm15) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm5) + vmovupd(xmm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm7) + vmovupd(xmm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm9) + vmovupd(xmm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm10) + vmovupd(ymm10, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm11) + vmovupd(xmm11, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm12) + vmovupd(ymm12, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm13) + vmovupd(xmm13, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm14) + vmovupd(ymm14, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm15) + vmovupd(xmm15, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm8) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm10) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + //vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + //vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm7) + //vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm9) + //vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm11) + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + //vmovupd(ymm9, mem(rcx, rsi, 2)) + //vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm15, ymm13, ymm0) + vunpckhpd(ymm15, ymm13, ymm1) + //vextractf128(imm(0x1), ymm0, xmm2) + //vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + //vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + //vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + //vmovupd(xmm2, mem(rdx, rsi, 2)) + //vmovupd(xmm4, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(xmm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm6, mem(rcx)) + vmovupd(xmm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm8, mem(rcx)) + vmovupd(xmm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm10, mem(rcx)) + vmovupd(xmm11, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm12, mem(rcx)) + vmovupd(xmm13, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm14, mem(rcx)) + vmovupd(xmm15, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + //vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + //vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + //vmovupd(ymm9, mem(rcx, rsi, 2)) + //vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm15, ymm13, ymm0) + vunpckhpd(ymm15, ymm13, ymm1) + //vextractf128(imm(0x1), ymm0, xmm2) + //vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + //vmovupd(xmm2, mem(rdx, rsi, 2)) + //vmovupd(xmm4, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_5x6 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 5*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 5*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 5*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 5*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 5*8)) // prefetch c + 4*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 4*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 4*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 4*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 4*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 4*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 4*8)) // prefetch c + 5*cs_c + + label(.DPOSTPFETCH) // done prefetching c + + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(xmm0, xmm5, xmm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(xmm0, xmm7, xmm7) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(xmm0, xmm9, xmm9) + vmulpd(ymm0, ymm10, ymm10) + vmulpd(xmm0, xmm11, xmm11) + vmulpd(ymm0, ymm12, ymm12) + vmulpd(xmm0, xmm13, xmm13) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm5) + vmovupd(xmm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm7) + vmovupd(xmm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm9) + vmovupd(xmm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm10) + vmovupd(ymm10, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm11) + vmovupd(xmm11, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm12) + vmovupd(ymm12, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm13) + vmovupd(xmm13, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm8) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm10) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + +#if 0 + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) +#else + vmovlpd(mem(rdx), xmm0, xmm0) + vmovhpd(mem(rdx, rsi, 1), xmm0, xmm0) + vmovlpd(mem(rdx, rsi, 2), xmm1, xmm1) + vmovhpd(mem(rdx, rax, 1), xmm1, xmm1) + vperm2f128(imm(0x20), ymm1, ymm0, ymm0) + + vfmadd213pd(ymm12, ymm3, ymm0) + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rdx)) + vmovhpd(xmm0, mem(rdx, rsi, 1)) + vmovlpd(xmm1, mem(rdx, rsi, 2)) + vmovhpd(xmm1, mem(rdx, rax, 1)) +#endif + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + //vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + //vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm7) + //vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm9) + //vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm11) + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + //vmovupd(ymm9, mem(rcx, rsi, 2)) + //vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + +#if 0 + vunpcklpd(ymm15, ymm13, ymm0) + vunpckhpd(ymm15, ymm13, ymm1) + //vextractf128(imm(0x1), ymm0, xmm2) + //vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + //vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + //vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + //vmovupd(xmm2, mem(rdx, rsi, 2)) + //vmovupd(xmm4, mem(rdx, rax, 1)) +#else + vmovlpd(mem(rdx), xmm0, xmm0) + vmovhpd(mem(rdx, rsi, 1), xmm0, xmm0) + //vmovlpd(mem(rdx, rsi, 2), xmm1, xmm1) + //vmovhpd(mem(rdx, rax, 1), xmm1, xmm1) + //vperm2f128(imm(0x20), ymm1, ymm0, ymm0) + + vfmadd213pd(xmm13, xmm3, xmm0) + //vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rdx)) + vmovhpd(xmm0, mem(rdx, rsi, 1)) + //vmovlpd(xmm1, mem(rdx, rsi, 2)) + //vmovhpd(xmm1, mem(rdx, rax, 1)) +#endif + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(xmm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm6, mem(rcx)) + vmovupd(xmm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm8, mem(rcx)) + vmovupd(xmm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm10, mem(rcx)) + vmovupd(xmm11, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm12, mem(rcx)) + vmovupd(xmm13, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + +#if 0 + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) +#else + vmovupd(ymm12, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rdx)) + vmovhpd(xmm0, mem(rdx, rsi, 1)) + vmovlpd(xmm1, mem(rdx, rsi, 2)) + vmovhpd(xmm1, mem(rdx, rax, 1)) +#endif + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + //vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + //vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + //vmovupd(ymm9, mem(rcx, rsi, 2)) + //vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + +#if 0 + vunpcklpd(ymm15, ymm13, ymm0) + vunpckhpd(ymm15, ymm13, ymm1) + //vextractf128(imm(0x1), ymm0, xmm2) + //vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + //vmovupd(xmm2, mem(rdx, rsi, 2)) + //vmovupd(xmm4, mem(rdx, rax, 1)) +#else + vmovupd(ymm13, ymm0) + + //vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rdx)) + vmovhpd(xmm0, mem(rdx, rsi, 1)) + //vmovlpd(xmm1, mem(rdx, rsi, 2)) + //vmovhpd(xmm1, mem(rdx, rax, 1)) +#endif + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_4x6 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 5*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 5*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 5*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 5*8)) // prefetch c + 3*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 3*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 3*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 3*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 3*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 3*8)) // prefetch c + 5*cs_c + + label(.DPOSTPFETCH) // done prefetching c + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(xmm0, xmm5, xmm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(xmm0, xmm7, xmm7) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(xmm0, xmm9, xmm9) + vmulpd(ymm0, ymm10, ymm10) + vmulpd(xmm0, xmm11, xmm11) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + //lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm5) + vmovupd(xmm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm7) + vmovupd(xmm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm9) + vmovupd(xmm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm10) + vmovupd(ymm10, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm11) + vmovupd(xmm11, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm8) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm10) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + //vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + //vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm7) + //vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm9) + //vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm11) + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + //vmovupd(ymm9, mem(rcx, rsi, 2)) + //vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(xmm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm6, mem(rcx)) + vmovupd(xmm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm8, mem(rcx)) + vmovupd(xmm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm10, mem(rcx)) + vmovupd(xmm11, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + //vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + //vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + //vmovupd(ymm9, mem(rcx, rsi, 2)) + //vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_3x6 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 5*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 5*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 5*8)) // prefetch c + 2*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 2*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 2*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 2*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 2*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 2*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 2*8)) // prefetch c + 5*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(xmm0, xmm5, xmm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(xmm0, xmm7, xmm7) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(xmm0, xmm9, xmm9) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 2), rdx) // load address of c + 2*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm5) + vmovupd(xmm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm7) + vmovupd(xmm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm9) + vmovupd(xmm9, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vextractf128(imm(0x1), ymm4, xmm12) + vextractf128(imm(0x1), ymm6, xmm13) + vextractf128(imm(0x1), ymm8, xmm14) + vextractf128(imm(0x1), ymm10, xmm15) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vfmadd231pd(mem(rcx, rsi, 1), xmm3, xmm6) + vfmadd231pd(mem(rcx, rsi, 2), xmm3, xmm8) + vfmadd231pd(mem(rcx, rax, 1), xmm3, xmm10) + vmovupd(xmm4, mem(rcx)) + vmovupd(xmm6, mem(rcx, rsi, 1)) + vmovupd(xmm8, mem(rcx, rsi, 2)) + vmovupd(xmm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + vfmadd231sd(mem(rdx), xmm3, xmm12) + vfmadd231sd(mem(rdx, rsi, 1), xmm3, xmm13) + vfmadd231sd(mem(rdx, rsi, 2), xmm3, xmm14) + vfmadd231sd(mem(rdx, rax, 1), xmm3, xmm15) + vmovsd(xmm12, mem(rdx)) + vmovsd(xmm13, mem(rdx, rsi, 1)) + vmovsd(xmm14, mem(rdx, rsi, 2)) + vmovsd(xmm15, mem(rdx, rax, 1)) + + lea(mem(rdx, rsi, 4), rdx) + + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vextractf128(imm(0x1), ymm5, xmm12) + vextractf128(imm(0x1), ymm7, xmm13) + //vextractf128(imm(0x1), ymm9, xmm14) + //vextractf128(imm(0x1), ymm11, xmm15) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), xmm3, xmm5) + vfmadd231pd(mem(rcx, rsi, 1), xmm3, xmm7) + vfmadd231pd(mem(rcx, rsi, 2), xmm3, xmm9) + vfmadd231pd(mem(rcx, rax, 1), xmm3, xmm11) + vmovupd(xmm5, mem(rcx)) + vmovupd(xmm7, mem(rcx, rsi, 1)) + //vmovupd(xmm9, mem(rcx, rsi, 2)) + //vmovupd(xmm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vfmadd231sd(mem(rdx), xmm3, xmm12) + vfmadd231sd(mem(rdx, rsi, 1), xmm3, xmm13) + //vfmadd231sd(mem(rdx, rsi, 2), xmm3, xmm14) + //vfmadd231sd(mem(rdx, rax, 1), xmm3, xmm15) + vmovsd(xmm12, mem(rdx)) + vmovsd(xmm13, mem(rdx, rsi, 1)) + //vmovsd(xmm14, mem(rdx, rsi, 2)) + //vmovsd(xmm15, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(xmm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + vmovupd(xmm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + vmovupd(ymm8, mem(rcx)) + vmovupd(xmm9, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vextractf128(imm(0x1), ymm4, xmm12) + vextractf128(imm(0x1), ymm6, xmm13) + vextractf128(imm(0x1), ymm8, xmm14) + vextractf128(imm(0x1), ymm10, xmm15) + + vmovupd(xmm4, mem(rcx)) + vmovupd(xmm6, mem(rcx, rsi, 1)) + vmovupd(xmm8, mem(rcx, rsi, 2)) + vmovupd(xmm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + vmovsd(xmm12, mem(rdx)) + vmovsd(xmm13, mem(rdx, rsi, 1)) + vmovsd(xmm14, mem(rdx, rsi, 2)) + vmovsd(xmm15, mem(rdx, rax, 1)) + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vextractf128(imm(0x1), ymm5, xmm12) + vextractf128(imm(0x1), ymm7, xmm13) + //vextractf128(imm(0x1), ymm9, xmm14) + //vextractf128(imm(0x1), ymm11, xmm15) + + vmovupd(xmm5, mem(rcx)) + vmovupd(xmm7, mem(rcx, rsi, 1)) + //vmovupd(xmm9, mem(rcx, rsi, 2)) + //vmovupd(xmm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vmovsd(xmm12, mem(rdx)) + vmovsd(xmm13, mem(rdx, rsi, 1)) + //vmovsd(xmm14, mem(rdx, rsi, 2)) + //vmovsd(xmm15, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_2x6 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 5*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 5*8)) // prefetch c + 1*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 1*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 1*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 1*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 1*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 1*8)) // prefetch c + 5*cs_c + + label(.DPOSTPFETCH) // done prefetching c + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(xmm0, xmm5, xmm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(xmm0, xmm7, xmm7) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + //lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm5) + vmovupd(xmm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm7) + vmovupd(xmm7, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vfmadd231pd(mem(rcx, rsi, 1), xmm3, xmm6) + vfmadd231pd(mem(rcx, rsi, 2), xmm3, xmm8) + vfmadd231pd(mem(rcx, rax, 1), xmm3, xmm10) + vmovupd(xmm4, mem(rcx)) + vmovupd(xmm6, mem(rcx, rsi, 1)) + vmovupd(xmm8, mem(rcx, rsi, 2)) + vmovupd(xmm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + //vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + //vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), xmm3, xmm5) + vfmadd231pd(mem(rcx, rsi, 1), xmm3, xmm7) + //vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm9) + //vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm11) + vmovupd(xmm5, mem(rcx)) + vmovupd(xmm7, mem(rcx, rsi, 1)) + //vmovupd(ymm9, mem(rcx, rsi, 2)) + //vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(xmm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm6, mem(rcx)) + vmovupd(xmm7, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vmovupd(xmm4, mem(rcx)) + vmovupd(xmm6, mem(rcx, rsi, 1)) + vmovupd(xmm8, mem(rcx, rsi, 2)) + vmovupd(xmm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + //vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + //vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vmovupd(xmm5, mem(rcx)) + vmovupd(xmm7, mem(rcx, rsi, 1)) + //vmovupd(ymm9, mem(rcx, rsi, 2)) + //vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_1x6 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + +#if 1 + prefetch(0, mem(rcx, 5*8)) // prefetch c + 0*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 5*8)) // prefetch c + 0*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 0*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 0*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 0*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 0*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 0*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 0*8)) // prefetch c + 5*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(xmm0, xmm5, xmm5) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + //lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm5) + vmovupd(xmm5, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vmovlpd(mem(rcx), xmm0, xmm0) + vmovhpd(mem(rcx, rsi, 1), xmm0, xmm0) + vmovlpd(mem(rcx, rsi, 2), xmm1, xmm1) + vmovhpd(mem(rcx, rax, 1), xmm1, xmm1) + vperm2f128(imm(0x20), ymm1, ymm0, ymm0) + + vfmadd213pd(ymm4, ymm3, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + vmovlpd(xmm1, mem(rcx, rsi, 2)) + vmovhpd(xmm1, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vmovlpd(mem(rcx), xmm0, xmm0) + vmovhpd(mem(rcx, rsi, 1), xmm0, xmm0) + //vmovlpd(mem(rcx, rsi, 2), xmm1, xmm1) + //vmovhpd(mem(rcx, rax, 1), xmm1, xmm1) + //vperm2f128(imm(0x20), ymm1, ymm0, ymm0) + + vfmadd213pd(xmm5, xmm3, xmm0) + + //vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + //vmovlpd(xmm1, mem(rcx, rsi, 2)) + //vmovhpd(xmm1, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(xmm5, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vmovupd(ymm4, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + vmovlpd(xmm1, mem(rcx, rsi, 2)) + vmovhpd(xmm1, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vmovupd(xmm5, xmm0) + + //vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + //vmovlpd(xmm1, mem(rcx, rsi, 2)) + //vmovhpd(xmm1, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_6x4 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 7*8)) // prefetch c + 4*rs_c + prefetch(0, mem(rdx, rdi, 2, 7*8)) // prefetch c + 5*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 3*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 3*8)) // prefetch c + 4*rs_c + prefetch(0, mem(rdx, rdi, 2, 3*8)) // prefetch c + 5*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 5*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 5*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 5*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 5*8)) // prefetch c + 3*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm0, ymm3, ymm14) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm0, ymm3, ymm14) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm0, ymm3, ymm14) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm0, ymm3, ymm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm0, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm6, ymm6) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(ymm0, ymm10, ymm10) + vmulpd(ymm0, ymm12, ymm12) + vmulpd(ymm0, ymm14, ymm14) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm10) + vmovupd(ymm10, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm12) + vmovupd(ymm12, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm14) + vmovupd(ymm14, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm8) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm10) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + add(rdi, rcx) + + + vmovupd(ymm8, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm10, mem(rcx)) + add(rdi, rcx) + + + vmovupd(ymm12, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm14, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_5x4 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 7*8)) // prefetch c + 4*rs_c + prefetch(0, mem(rdx, rdi, 2, 7*8)) // prefetch c + 5*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 3*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 3*8)) // prefetch c + 4*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 4*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 4*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 4*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 4*8)) // prefetch c + 3*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + +#if 0 + lea(mem(rax, r9, 8), rdx) // use rdx for prefetching b. + lea(mem(rdx, r9, 8), rdx) // rdx = b + 16*rs_b; +#else + #if 1 + mov(r9, rsi) // rsi = rs_b; + sal(imm(5), rsi) // rsi = 16*rs_b; + lea(mem(rax, rsi, 1), rdx) // rdx = b + 16*rs_b; + #endif +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm6, ymm6) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(ymm0, ymm10, ymm10) + vmulpd(ymm0, ymm12, ymm12) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm10) + vmovupd(ymm10, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm12) + vmovupd(ymm12, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm8) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm10) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + +#if 0 + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) +#else + vmovlpd(mem(rdx), xmm0, xmm0) + vmovhpd(mem(rdx, rsi, 1), xmm0, xmm0) + vmovlpd(mem(rdx, rsi, 2), xmm1, xmm1) + vmovhpd(mem(rdx, rax, 1), xmm1, xmm1) + vperm2f128(imm(0x20), ymm1, ymm0, ymm0) + + vfmadd213pd(ymm12, ymm3, ymm0) + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rdx)) + vmovhpd(xmm0, mem(rdx, rsi, 1)) + vmovlpd(xmm1, mem(rdx, rsi, 2)) + vmovhpd(xmm1, mem(rdx, rax, 1)) +#endif + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + add(rdi, rcx) + + + vmovupd(ymm8, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm10, mem(rcx)) + add(rdi, rcx) + + + vmovupd(ymm12, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + +#if 0 + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) +#else + vmovupd(ymm12, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rdx)) + vmovhpd(xmm0, mem(rdx, rsi, 1)) + vmovlpd(xmm1, mem(rdx, rsi, 2)) + vmovhpd(xmm1, mem(rdx, rax, 1)) +#endif + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_4x4 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 3*8)) // prefetch c + 3*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 3*8)) // prefetch c + 3*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 3*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 3*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 3*8)) // prefetch c + 3*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm6, ymm6) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(ymm0, ymm10, ymm10) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + //lea(mem(rcx, rdi, 4), r14) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm10) + vmovupd(ymm10, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm8) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm10) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + add(rdi, rcx) + + + vmovupd(ymm8, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm10, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_3x4 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 2*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 2*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 2*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 2*8)) // prefetch c + 3*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm6, ymm6) + vmulpd(ymm0, ymm8, ymm8) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 2), rdx) // load address of c + 2*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vextractf128(imm(0x1), ymm4, xmm12) + vextractf128(imm(0x1), ymm6, xmm13) + vextractf128(imm(0x1), ymm8, xmm14) + vextractf128(imm(0x1), ymm10, xmm15) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vfmadd231pd(mem(rcx, rsi, 1), xmm3, xmm6) + vfmadd231pd(mem(rcx, rsi, 2), xmm3, xmm8) + vfmadd231pd(mem(rcx, rax, 1), xmm3, xmm10) + vmovupd(xmm4, mem(rcx)) + vmovupd(xmm6, mem(rcx, rsi, 1)) + vmovupd(xmm8, mem(rcx, rsi, 2)) + vmovupd(xmm10, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vfmadd231sd(mem(rdx), xmm3, xmm12) + vfmadd231sd(mem(rdx, rsi, 1), xmm3, xmm13) + vfmadd231sd(mem(rdx, rsi, 2), xmm3, xmm14) + vfmadd231sd(mem(rdx, rax, 1), xmm3, xmm15) + vmovsd(xmm12, mem(rdx)) + vmovsd(xmm13, mem(rdx, rsi, 1)) + vmovsd(xmm14, mem(rdx, rsi, 2)) + vmovsd(xmm15, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm8, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vextractf128(imm(0x1), ymm4, xmm12) + vextractf128(imm(0x1), ymm6, xmm13) + vextractf128(imm(0x1), ymm8, xmm14) + vextractf128(imm(0x1), ymm10, xmm15) + + vmovupd(xmm4, mem(rcx)) + vmovupd(xmm6, mem(rcx, rsi, 1)) + vmovupd(xmm8, mem(rcx, rsi, 2)) + vmovupd(xmm10, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vmovsd(xmm12, mem(rdx)) + vmovsd(xmm13, mem(rdx, rsi, 1)) + vmovsd(xmm14, mem(rdx, rsi, 2)) + vmovsd(xmm15, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_2x4 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 1*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 1*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 1*8)) // prefetch c + 3*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm6, ymm6) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + //lea(mem(rcx, rdi, 4), r14) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rcx), xmm3, xmm0) + vfmadd231pd(mem(rcx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rcx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rcx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rcx)) + vmovupd(xmm1, mem(rcx, rsi, 1)) + vmovupd(xmm2, mem(rcx, rsi, 2)) + vmovupd(xmm4, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rcx)) + vmovupd(xmm1, mem(rcx, rsi, 1)) + vmovupd(xmm2, mem(rcx, rsi, 2)) + vmovupd(xmm4, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_1x4 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 0*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 0*8)) // prefetch c + 1*cs_c + prefetch(0, mem(rcx, rsi, 2, 0*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 0*8)) // prefetch c + 3*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + //lea(mem(rcx, rdi, 4), r14) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vmovlpd(mem(rcx), xmm0, xmm0) + vmovhpd(mem(rcx, rsi, 1), xmm0, xmm0) + vmovlpd(mem(rcx, rsi, 2), xmm1, xmm1) + vmovhpd(mem(rcx, rax, 1), xmm1, xmm1) + vperm2f128(imm(0x20), ymm1, ymm0, ymm0) + + vfmadd213pd(ymm4, ymm3, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + vmovlpd(xmm1, mem(rcx, rsi, 2)) + vmovhpd(xmm1, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vmovupd(ymm4, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + vmovlpd(xmm1, mem(rcx, rsi, 2)) + vmovhpd(xmm1, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_6x2 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 7*8)) // prefetch c + 4*rs_c + prefetch(0, mem(rdx, rdi, 2, 7*8)) // prefetch c + 5*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 1*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 1*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 1*8)) // prefetch c + 4*rs_c + prefetch(0, mem(rdx, rdi, 2, 1*8)) // prefetch c + 5*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + //lea(mem(rcx, rsi, 2), rdx) // + //lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 5*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 5*8)) // prefetch c + 1*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm12) + vfmadd231pd(xmm0, xmm3, xmm14) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm12) + vfmadd231pd(xmm0, xmm3, xmm14) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm12) + vfmadd231pd(xmm0, xmm3, xmm14) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm12) + vfmadd231pd(xmm0, xmm3, xmm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm12) + vfmadd231pd(xmm0, xmm3, xmm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + vmulpd(xmm0, xmm10, xmm10) + vmulpd(xmm0, xmm12, xmm12) + vmulpd(xmm0, xmm14, xmm14) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + //lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm10) + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm12) + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm14) + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(xmm6, xmm4, xmm0) + vunpckhpd(xmm6, xmm4, xmm1) + vunpcklpd(xmm10, xmm8, xmm2) + vunpckhpd(xmm10, xmm8, xmm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(xmm14, xmm12, xmm0) + vunpckhpd(xmm14, xmm12, xmm1) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(xmm6, xmm4, xmm0) + vunpckhpd(xmm6, xmm4, xmm1) + vunpcklpd(xmm10, xmm8, xmm2) + vunpckhpd(xmm10, xmm8, xmm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(xmm14, xmm12, xmm0) + vunpckhpd(xmm14, xmm12, xmm1) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_5x2 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 7*8)) // prefetch c + 4*rs_c + prefetch(0, mem(rdx, rdi, 2, 7*8)) // prefetch c + 5*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 1*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 1*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 1*8)) // prefetch c + 4*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + prefetch(0, mem(rcx, 4*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 4*8)) // prefetch c + 1*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm12) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm12) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm12) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm12) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm12) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + vmulpd(xmm0, xmm10, xmm10) + vmulpd(xmm0, xmm12, xmm12) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + //lea(mem(rsi, rsi, 2), rax) // r13 = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm10) + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm12) + vmovupd(xmm12, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(xmm6, xmm4, xmm0) + vunpckhpd(xmm6, xmm4, xmm1) + vunpcklpd(xmm10, xmm8, xmm2) + vunpckhpd(xmm10, xmm8, xmm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + +#if 0 + vunpcklpd(xmm14, xmm12, xmm0) + vunpckhpd(xmm14, xmm12, xmm1) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) +#else + vmovlpd(mem(rdx), xmm0, xmm0) + vmovhpd(mem(rdx, rsi, 1), xmm0, xmm0) + + vfmadd213pd(xmm12, xmm3, xmm0) + vmovlpd(xmm0, mem(rdx)) + vmovhpd(xmm0, mem(rdx, rsi, 1)) +#endif + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + + vmovupd(xmm12, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(xmm6, xmm4, xmm0) + vunpckhpd(xmm6, xmm4, xmm1) + vunpcklpd(xmm10, xmm8, xmm2) + vunpckhpd(xmm10, xmm8, xmm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + +#if 0 + vunpcklpd(xmm14, xmm12, xmm0) + vunpckhpd(xmm14, xmm12, xmm1) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) +#else + vmovupd(xmm12, xmm0) + + vmovlpd(xmm0, mem(rdx)) + vmovhpd(xmm0, mem(rdx, rsi, 1)) +#endif + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_4x2 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 1*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 1*8)) // prefetch c + 3*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(rcx, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 3*8)) // prefetch c + 1*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + vmulpd(xmm0, xmm10, xmm10) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + //lea(mem(rcx, rdi, 4), r14) // load address of c + 4*rs_c; + + //lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm10) + vmovupd(xmm10, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(xmm6, xmm4, xmm0) + vunpckhpd(xmm6, xmm4, xmm1) + vunpcklpd(xmm10, xmm8, xmm2) + vunpckhpd(xmm10, xmm8, xmm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm10, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(xmm6, xmm4, xmm0) + vunpckhpd(xmm6, xmm4, xmm1) + vunpcklpd(xmm10, xmm8, xmm2) + vunpckhpd(xmm10, xmm8, xmm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_3x2 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 1*8)) // prefetch c + 2*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + //lea(mem(rcx, rsi, 2), rdx) // + //lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 2*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 2*8)) // prefetch c + 1*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm8) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm8) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm8) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm8) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm8) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 2), rdx) // load address of c + 2*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + //vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + //vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vextractf128(imm(0x1), ymm4, xmm12) + vextractf128(imm(0x1), ymm6, xmm13) + //vextractf128(imm(0x1), ymm8, xmm14) + //vextractf128(imm(0x1), ymm10, xmm15) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vfmadd231pd(mem(rcx, rsi, 1), xmm3, xmm6) + //vfmadd231pd(mem(rcx, rsi, 2), xmm3, xmm8) + //vfmadd231pd(mem(rcx, rax, 1), xmm3, xmm10) + vmovupd(xmm4, mem(rcx)) + vmovupd(xmm6, mem(rcx, rsi, 1)) + //vmovupd(xmm8, mem(rcx, rsi, 2)) + //vmovupd(xmm10, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vfmadd231sd(mem(rdx), xmm3, xmm12) + vfmadd231sd(mem(rdx, rsi, 1), xmm3, xmm13) + //vfmadd231sd(mem(rdx, rsi, 2), xmm3, xmm14) + //vfmadd231sd(mem(rdx, rax, 1), xmm3, xmm15) + vmovsd(xmm12, mem(rdx)) + vmovsd(xmm13, mem(rdx, rsi, 1)) + //vmovsd(xmm14, mem(rdx, rsi, 2)) + //vmovsd(xmm15, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm8, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + //vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + //vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vextractf128(imm(0x1), ymm4, xmm12) + vextractf128(imm(0x1), ymm6, xmm13) + //vextractf128(imm(0x1), ymm8, xmm14) + //vextractf128(imm(0x1), ymm10, xmm15) + + vmovupd(xmm4, mem(rcx)) + vmovupd(xmm6, mem(rcx, rsi, 1)) + //vmovupd(xmm8, mem(rcx, rsi, 2)) + //vmovupd(xmm10, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vmovsd(xmm12, mem(rdx)) + vmovsd(xmm13, mem(rdx, rsi, 1)) + //vmovsd(xmm14, mem(rdx, rsi, 2)) + //vmovsd(xmm15, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_2x2 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + //lea(mem(rcx, rsi, 2), rdx) // + //lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 1*8)) // prefetch c + 1*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + //lea(mem(rcx, rdi, 4), r14) // load address of c + 4*rs_c; + + //lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(xmm6, xmm4, xmm0) + vunpckhpd(xmm6, xmm4, xmm1) + + vfmadd231pd(mem(rcx), xmm3, xmm0) + vfmadd231pd(mem(rcx, rsi, 1), xmm3, xmm1) + vmovupd(xmm0, mem(rcx)) + vmovupd(xmm1, mem(rcx, rsi, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(xmm6, xmm4, xmm0) + vunpckhpd(xmm6, xmm4, xmm1) + + vmovupd(xmm0, mem(rcx)) + vmovupd(xmm1, mem(rcx, rsi, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rv_haswell_asm_1x2 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + //lea(mem(rcx, rsi, 2), rdx) // + //lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(rcx, 0*8)) // prefetch c + 0*cs_c + prefetch(0, mem(rcx, rsi, 1, 0*8)) // prefetch c + 1*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm4) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm4) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm4) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm4) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm4) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + //lea(mem(rcx, rdi, 4), r14) // load address of c + 4*rs_c; + + //lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vmovlpd(mem(rcx), xmm0, xmm0) + vmovhpd(mem(rcx, rsi, 1), xmm0, xmm0) + + vfmadd213pd(xmm4, xmm3, xmm0) + + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vmovlpd(xmm4, mem(rcx)) + vmovhpd(xmm4, mem(rcx, rsi, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +// ----------------------------------------------------------------------------- + +// NOTE: Normally, for any "?x1" kernel, we would call the reference kernel. +// However, at least one other subconfiguration (zen) uses this kernel set, so +// we need to be able to call a set of "?x1" kernels that we know will actually +// exist regardless of which subconfiguration these kernels were used by. Thus, +// the compromise employed here is to inline the reference kernel so it gets +// compiled as part of the haswell kernel set, and hence can unconditionally be +// called by other kernels within that kernel set. + +#undef GENTFUNC +#define GENTFUNC( ctype, ch, opname, mdim ) \ +\ +void PASTEMAC(ch,opname) \ + ( \ + conj_t conja, \ + conj_t conjb, \ + dim_t m, \ + dim_t n, \ + dim_t k, \ + ctype* restrict alpha, \ + ctype* restrict a, inc_t rs_a, inc_t cs_a, \ + ctype* restrict b, inc_t rs_b, inc_t cs_b, \ + ctype* restrict beta, \ + ctype* restrict c, inc_t rs_c, inc_t cs_c, \ + auxinfo_t* restrict data, \ + cntx_t* restrict cntx \ + ) \ +{ \ + for ( dim_t i = 0; i < mdim; ++i ) \ + { \ + ctype* restrict ci = &c[ i*rs_c ]; \ + ctype* restrict ai = &a[ i*rs_a ]; \ +\ + /* for ( dim_t j = 0; j < 1; ++j ) */ \ + { \ + ctype* restrict cij = ci /*[ j*cs_c ]*/ ; \ + ctype* restrict bj = b /*[ j*cs_b ]*/ ; \ + ctype ab; \ +\ + PASTEMAC(ch,set0s)( ab ); \ +\ + /* Perform a dot product to update the (i,j) element of c. */ \ + for ( dim_t l = 0; l < k; ++l ) \ + { \ + ctype* restrict aij = &ai[ l*cs_a ]; \ + ctype* restrict bij = &bj[ l*rs_b ]; \ +\ + PASTEMAC(ch,dots)( *aij, *bij, ab ); \ + } \ +\ + /* If beta is one, add ab into c. If beta is zero, overwrite c + with the result in ab. Otherwise, scale by beta and accumulate + ab to c. */ \ + if ( PASTEMAC(ch,eq1)( *beta ) ) \ + { \ + PASTEMAC(ch,axpys)( *alpha, ab, *cij ); \ + } \ + else if ( PASTEMAC(d,eq0)( *beta ) ) \ + { \ + PASTEMAC(ch,scal2s)( *alpha, ab, *cij ); \ + } \ + else \ + { \ + PASTEMAC(ch,axpbys)( *alpha, ab, *beta, *cij ); \ + } \ + } \ + } \ +} + +GENTFUNC( double, d, gemmsup_r_haswell_ref_6x1, 6 ) +GENTFUNC( double, d, gemmsup_r_haswell_ref_5x1, 5 ) +GENTFUNC( double, d, gemmsup_r_haswell_ref_4x1, 4 ) +GENTFUNC( double, d, gemmsup_r_haswell_ref_3x1, 3 ) +GENTFUNC( double, d, gemmsup_r_haswell_ref_2x1, 2 ) +GENTFUNC( double, d, gemmsup_r_haswell_ref_1x1, 1 ) + diff --git a/kernels/haswell/3/sup/bli_gemmsup_rv_haswell_asm_d6x8m.c b/kernels/haswell/3/sup/bli_gemmsup_rv_haswell_asm_d6x8m.c new file mode 100644 index 000000000..24df267f0 --- /dev/null +++ b/kernels/haswell/3/sup/bli_gemmsup_rv_haswell_asm_d6x8m.c @@ -0,0 +1,3265 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" + +#define BLIS_ASM_SYNTAX_ATT +#include "bli_x86_asm_macros.h" + +/* + rrr: + -------- ------ -------- + -------- ------ -------- + -------- += ------ ... -------- + -------- ------ -------- + -------- ------ : + -------- ------ : + + rcr: + -------- | | | | -------- + -------- | | | | -------- + -------- += | | | | ... -------- + -------- | | | | -------- + -------- | | | | : + -------- | | | | : + + Assumptions: + - B is row-stored; + - A is row- or column-stored; + - m0 and n0 are at most MR and NR, respectively. + Therefore, this (r)ow-preferential kernel is well-suited for contiguous + (v)ector loads on B and single-element broadcasts from A. + + NOTE: These kernels explicitly support column-oriented IO, implemented + via an in-register transpose. And thus they also support the crr and + ccr cases, though only crr is ever utilized (because ccr is handled by + transposing the operation and executing rcr, which does not incur the + cost of the in-register transpose). + + crr: + | | | | | | | | ------ -------- + | | | | | | | | ------ -------- + | | | | | | | | += ------ ... -------- + | | | | | | | | ------ -------- + | | | | | | | | ------ : + | | | | | | | | ------ : +*/ + +// Prototype reference microkernels. +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref ) + +#if 0 +// Define parameters and variables for edge case kernel map. +#define NUM_MR 4 +#define NUM_NR 4 +#define FUNCPTR_T dgemmsup_ker_ft + +static dim_t mrs[NUM_MR] = { 6, 4, 2, 1 }; +static dim_t nrs[NUM_NR] = { 8, 4, 2, 1 }; +static FUNCPTR_T kmap[NUM_MR][NUM_NR] = +{ /* 8 4 2 1 */ +/* 6 */ { bli_dgemmsup_rv_haswell_asm_6x8m, bli_dgemmsup_rv_haswell_asm_6x4m, bli_dgemmsup_rv_haswell_asm_6x2m, bli_dgemmsup_r_haswell_ref_6x1 }, +/* 4 */ { bli_dgemmsup_rv_haswell_asm_4x8m, bli_dgemmsup_rv_haswell_asm_4x4m, bli_dgemmsup_rv_haswell_asm_4x2m, bli_dgemmsup_r_haswell_ref_4x1 }, +/* 2 */ { bli_dgemmsup_rv_haswell_asm_2x8m, bli_dgemmsup_rv_haswell_asm_2x4m, bli_dgemmsup_rv_haswell_asm_2x2m, bli_dgemmsup_r_haswell_ref_2x1 }, +/* 1 */ { bli_dgemmsup_rv_haswell_asm_1x8m, bli_dgemmsup_rv_haswell_asm_1x4m, bli_dgemmsup_rv_haswell_asm_1x2m, bli_dgemmsup_r_haswell_ref_1x1 }, +}; +#endif + + +void bli_dgemmsup_rv_haswell_asm_6x8m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + uint64_t n_left = n0 % 8; + + // First check whether this is a edge case in the n dimension. If so, + // dispatch other 6x?m kernels, as needed. + if ( n_left ) + { + double* restrict cij = c; + double* restrict bj = b; + double* restrict ai = a; + + if ( 6 <= n_left ) + { + const dim_t nr_cur = 6; + + bli_dgemmsup_rv_haswell_asm_6x6m + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 4 <= n_left ) + { + const dim_t nr_cur = 4; + + bli_dgemmsup_rv_haswell_asm_6x4m + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rv_haswell_asm_6x2m + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 0 + const dim_t nr_cur = 1; + + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_NO_TRANSPOSE, conjb, m0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, + beta, cij, rs_c0, cntx, NULL + ); +#endif + } + return; + } + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t m_iter = m0 / 6; + uint64_t m_left = m0 % 6; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + //mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + // During preamble and loops: + // r12 = rcx = c + // r14 = rax = a + // read rbx from var(b) near beginning of loop + // r11 = m dim index ii + + mov(var(m_iter), r11) // ii = m_iter; + + label(.DLOOP6X8I) // LOOP OVER ii = [ m_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + mov(var(b), rbx) // load address of b. + //mov(r12, rcx) // reset rcx to current utile of c. + mov(r14, rax) // reset rax to current upanel of a. + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(r12, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(r12, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(r12, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(r12, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 7*8)) // prefetch c + 4*rs_c + prefetch(0, mem(rdx, rdi, 2, 7*8)) // prefetch c + 5*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(r12, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(r12, 5*8)) // prefetch c + 0*cs_c + prefetch(0, mem(r12, rsi, 1, 5*8)) // prefetch c + 1*cs_c + prefetch(0, mem(r12, rsi, 2, 5*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 5*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 5*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 5*8)) // prefetch c + 5*cs_c + lea(mem(rdx, rsi, 2), rdx) // rdx = c + 5*cs_c; + prefetch(0, mem(rdx, rsi, 1, 5*8)) // prefetch c + 6*cs_c + prefetch(0, mem(rdx, rsi, 2, 5*8)) // prefetch c + 7*cs_c + + label(.DPOSTPFETCH) // done prefetching c + + +#if 1 + lea(mem(r9, r9, 2), rcx) // rcx = 3*cs_a; + + lea(mem(rax, r8, 4), rdx) // use rdx for prefetching lines + lea(mem(rdx, r8, 2), rdx) // from next upanel of a. +#else + lea(mem(rax, r9, 8), rdx) // use rdx for prefetching a. + lea(mem(rdx, r9, 8), rdx) // rdx = a + 16*cs_a; + //mov(r9, rsi) // rsi = cs_a; + //sal(imm(4), rsi) // rsi = 16*cs_a; + //lea(mem(rax, rsi, 1), rdx) // rdx = a + 16*cs_a; +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + prefetch(0, mem(rdx, 5*8)) + //prefetch(0, mem(rax, 5*8)) +#else + prefetch(0, mem(rdx, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + +#if 1 + prefetch(0, mem(rdx, r9, 1, 5*8)) + //prefetch(0, mem(rax, 5*8)) +#else +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(rdx, r9, 2, 5*8)) + //prefetch(0, mem(rax, 5*8)) +#else + prefetch(0, mem(rdx, r9, 2, 5*8)) + //prefetch(0, mem(rdx, r9, 2)) + //lea(mem(rdx, r9, 4), rdx) // rdx += 4*cs_a; +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + +#if 1 + prefetch(0, mem(rdx, rcx, 1, 5*8)) + lea(mem(rdx, r9, 4), rdx) // a_prefetch += 4*cs_a; + //prefetch(0, mem(rax, 5*8)) +#else + lea(mem(rdx, r9, 4), rdx) // a_prefetch += 4*cs_a; +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(r12, rcx) // reset rcx to current utile of c. + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(ymm0, ymm7, ymm7) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(ymm0, ymm9, ymm9) + vmulpd(ymm0, ymm10, ymm10) + vmulpd(ymm0, ymm11, ymm11) + vmulpd(ymm0, ymm12, ymm12) + vmulpd(ymm0, ymm13, ymm13) + vmulpd(ymm0, ymm14, ymm14) + vmulpd(ymm0, ymm15, ymm15) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm5) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm7) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm9) + vmovupd(ymm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm10) + vmovupd(ymm10, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm11) + vmovupd(ymm11, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm12) + vmovupd(ymm12, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm13) + vmovupd(ymm13, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm14) + vmovupd(ymm14, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm15) + vmovupd(ymm15, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm8) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm10) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm7) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm9) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm11) + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + vmovupd(ymm9, mem(rcx, rsi, 2)) + vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm15, ymm13, ymm0) + vunpckhpd(ymm15, ymm13, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm6, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm8, mem(rcx)) + vmovupd(ymm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm10, mem(rcx)) + vmovupd(ymm11, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm12, mem(rcx)) + vmovupd(ymm13, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm14, mem(rcx)) + vmovupd(ymm15, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + vmovupd(ymm9, mem(rcx, rsi, 2)) + vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm15, ymm13, ymm0) + vunpckhpd(ymm15, ymm13, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 4), r12) // + lea(mem(r12, rdi, 2), r12) // c_ii = r12 += 6*rs_c + + lea(mem(r14, r8, 4), r14) // + lea(mem(r14, r8, 2), r14) // a_ii = r14 += 6*rs_a + + dec(r11) // ii -= 1; + jne(.DLOOP6X8I) // iterate again if ii != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 8; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict ai = a + i_edge*rs_a; + double* restrict bj = b; + +#if 0 + // We add special handling for slightly inflated MR blocksizes + // at edge cases, up to a maximum of 9. + if ( 6 < m_left ) + { + dgemmsup_ker_ft ker_fp1 = NULL; + dgemmsup_ker_ft ker_fp2 = NULL; + dim_t mr1, mr2; + + if ( m_left == 7 ) + { + mr1 = 4; mr2 = 3; + ker_fp1 = bli_dgemmsup_rv_haswell_asm_4x8; + ker_fp2 = bli_dgemmsup_rv_haswell_asm_3x8; + } + else if ( m_left == 8 ) + { + mr1 = 4; mr2 = 4; + ker_fp1 = bli_dgemmsup_rv_haswell_asm_4x8; + ker_fp2 = bli_dgemmsup_rv_haswell_asm_4x8; + } + else // if ( m_left == 9 ) + { + mr1 = 4; mr2 = 5; + ker_fp1 = bli_dgemmsup_rv_haswell_asm_4x8; + ker_fp2 = bli_dgemmsup_rv_haswell_asm_5x8; + } + + ker_fp1 + ( + conja, conjb, mr1, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr1*rs_c0; ai += mr1*rs_a0; + + ker_fp2 + ( + conja, conjb, mr2, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + + return; + } +#endif + +#if 1 + dgemmsup_ker_ft ker_fps[6] = + { + NULL, + bli_dgemmsup_rv_haswell_asm_1x8, + bli_dgemmsup_rv_haswell_asm_2x8, + bli_dgemmsup_rv_haswell_asm_3x8, + bli_dgemmsup_rv_haswell_asm_4x8, + bli_dgemmsup_rv_haswell_asm_5x8 + }; + + dgemmsup_ker_ft ker_fp = ker_fps[ m_left ]; + + ker_fp + ( + conja, conjb, m_left, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + + return; +#else + if ( 5 <= m_left ) + { + const dim_t mr_cur = 5; + + bli_dgemmsup_rv_haswell_asm_5x8 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 4 <= m_left ) + { + const dim_t mr_cur = 4; + + bli_dgemmsup_rv_haswell_asm_4x8 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 3 <= m_left ) + { + const dim_t mr_cur = 3; + + bli_dgemmsup_rv_haswell_asm_3x8 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 2 <= m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rv_haswell_asm_2x8 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rv_haswell_asm_1x8 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } +#endif + } +} + +void bli_dgemmsup_rv_haswell_asm_6x6m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t m_iter = m0 / 6; + uint64_t m_left = m0 % 6; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + //mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + // During preamble and loops: + // r12 = rcx = c + // r14 = rax = a + // read rbx from var(b) near beginning of loop + // r11 = m dim index ii + + mov(var(m_iter), r11) // ii = m_iter; + + label(.DLOOP6X8I) // LOOP OVER ii = [ m_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm1, ymm1, ymm1) // zero ymm1 since we only use the lower + vxorpd(ymm4, ymm4, ymm4) // half (xmm1), and nans/infs may slow us + vxorpd(ymm5, ymm5, ymm5) // down. + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + mov(var(b), rbx) // load address of b. + //mov(r12, rcx) // reset rcx to current utile of c. + mov(r14, rax) // reset rax to current upanel of a. + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(r12, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(r12, 5*8)) // prefetch c + 0*rs_c + prefetch(0, mem(r12, rdi, 1, 5*8)) // prefetch c + 1*rs_c + prefetch(0, mem(r12, rdi, 2, 5*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 5*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 5*8)) // prefetch c + 4*rs_c + prefetch(0, mem(rdx, rdi, 2, 5*8)) // prefetch c + 5*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(r12, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(r12, 5*8)) // prefetch c + 0*cs_c + prefetch(0, mem(r12, rsi, 1, 5*8)) // prefetch c + 1*cs_c + prefetch(0, mem(r12, rsi, 2, 5*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 5*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 5*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 5*8)) // prefetch c + 5*cs_c + + label(.DPOSTPFETCH) // done prefetching c + + +#if 1 + lea(mem(r9, r9, 2), rcx) // rcx = 3*cs_a; + + lea(mem(rax, r8, 4), rdx) // use rdx for prefetching lines + lea(mem(rdx, r8, 2), rdx) // from next upanel of a. +#else + lea(mem(rax, r9, 8), rdx) // use rdx for prefetching a. + lea(mem(rdx, r9, 8), rdx) // rdx = a + 16*cs_a; + //mov(r9, rsi) // rsi = cs_a; + //sal(imm(4), rsi) // rsi = 16*cs_a; + //lea(mem(rax, rsi, 1), rdx) // rdx = a + 16*cs_a; +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + prefetch(0, mem(rdx, 5*8)) + //prefetch(0, mem(rax, 5*8)) +#else + prefetch(0, mem(rdx, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + +#if 1 + prefetch(0, mem(rdx, r9, 1, 5*8)) + //prefetch(0, mem(rax, 5*8)) +#else +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(rdx, r9, 2, 5*8)) + //prefetch(0, mem(rax, 5*8)) +#else + prefetch(0, mem(rdx, r9, 2, 5*8)) + //prefetch(0, mem(rdx, r9, 2)) + //lea(mem(rdx, r9, 4), rdx) // rdx += 4*cs_a; +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + +#if 1 + prefetch(0, mem(rdx, rcx, 1, 5*8)) + lea(mem(rdx, r9, 4), rdx) // a_prefetch += 4*cs_a; + //prefetch(0, mem(rax, 5*8)) +#else + lea(mem(rdx, r9, 4), rdx) // a_prefetch += 4*cs_a; +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), xmm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(r12, rcx) // reset rcx to current utile of c. + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(xmm0, xmm5, xmm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(xmm0, xmm7, xmm7) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(xmm0, xmm9, xmm9) + vmulpd(ymm0, ymm10, ymm10) + vmulpd(xmm0, xmm11, xmm11) + vmulpd(ymm0, ymm12, ymm12) + vmulpd(xmm0, xmm13, xmm13) + vmulpd(ymm0, ymm14, ymm14) + vmulpd(xmm0, xmm15, xmm15) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm5) + vmovupd(xmm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm7) + vmovupd(xmm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm9) + vmovupd(xmm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm10) + vmovupd(ymm10, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm11) + vmovupd(xmm11, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm12) + vmovupd(ymm12, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm13) + vmovupd(xmm13, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm14) + vmovupd(ymm14, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), xmm3, xmm15) + vmovupd(xmm15, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm8) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm10) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + //vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + //vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm7) + //vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm9) + //vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm11) + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + //vmovupd(ymm9, mem(rcx, rsi, 2)) + //vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm15, ymm13, ymm0) + vunpckhpd(ymm15, ymm13, ymm1) + //vextractf128(imm(0x1), ymm0, xmm2) + //vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + //vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + //vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + //vmovupd(xmm2, mem(rdx, rsi, 2)) + //vmovupd(xmm4, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(xmm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm6, mem(rcx)) + vmovupd(xmm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm8, mem(rcx)) + vmovupd(xmm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm10, mem(rcx)) + vmovupd(xmm11, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm12, mem(rcx)) + vmovupd(xmm13, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm14, mem(rcx)) + vmovupd(xmm15, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + //vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + //vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + //vmovupd(ymm9, mem(rcx, rsi, 2)) + //vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm15, ymm13, ymm0) + vunpckhpd(ymm15, ymm13, ymm1) + //vextractf128(imm(0x1), ymm0, xmm2) + //vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + //vmovupd(xmm2, mem(rdx, rsi, 2)) + //vmovupd(xmm4, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 4), r12) // + lea(mem(r12, rdi, 2), r12) // c_ii = r12 += 6*rs_c + + lea(mem(r14, r8, 4), r14) // + lea(mem(r14, r8, 2), r14) // a_ii = r14 += 6*rs_a + + dec(r11) // ii -= 1; + jne(.DLOOP6X8I) // iterate again if ii != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 6; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict ai = a + i_edge*rs_a; + double* restrict bj = b; + +#if 0 + // We add special handling for slightly inflated MR blocksizes + // at edge cases, up to a maximum of 9. + if ( 6 < m_left ) + { + dgemmsup_ker_ft ker_fp1 = NULL; + dgemmsup_ker_ft ker_fp2 = NULL; + dim_t mr1, mr2; + + if ( m_left == 7 ) + { + mr1 = 4; mr2 = 3; + ker_fp1 = bli_dgemmsup_rv_haswell_asm_4x6; + ker_fp2 = bli_dgemmsup_rv_haswell_asm_3x6; + } + else if ( m_left == 8 ) + { + mr1 = 4; mr2 = 4; + ker_fp1 = bli_dgemmsup_rv_haswell_asm_4x6; + ker_fp2 = bli_dgemmsup_rv_haswell_asm_4x6; + } + else // if ( m_left == 9 ) + { + mr1 = 4; mr2 = 5; + ker_fp1 = bli_dgemmsup_rv_haswell_asm_4x6; + ker_fp2 = bli_dgemmsup_rv_haswell_asm_5x6; + } + + ker_fp1 + ( + conja, conjb, mr1, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr1*rs_c0; ai += mr1*rs_a0; + + ker_fp2 + ( + conja, conjb, mr2, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + + return; + } +#endif + +#if 1 + dgemmsup_ker_ft ker_fps[6] = + { + NULL, + bli_dgemmsup_rv_haswell_asm_1x6, + bli_dgemmsup_rv_haswell_asm_2x6, + bli_dgemmsup_rv_haswell_asm_3x6, + bli_dgemmsup_rv_haswell_asm_4x6, + bli_dgemmsup_rv_haswell_asm_5x6 + }; + + dgemmsup_ker_ft ker_fp = ker_fps[ m_left ]; + + ker_fp + ( + conja, conjb, m_left, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + + return; +#else + if ( 5 <= m_left ) + { + const dim_t mr_cur = 5; + + bli_dgemmsup_rv_haswell_asm_5x6 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 4 <= m_left ) + { + const dim_t mr_cur = 4; + + bli_dgemmsup_rv_haswell_asm_4x6 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 3 <= m_left ) + { + const dim_t mr_cur = 3; + + bli_dgemmsup_rv_haswell_asm_3x6 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 2 <= m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rv_haswell_asm_2x6 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rv_haswell_asm_1x6 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } +#endif + } +} + +void bli_dgemmsup_rv_haswell_asm_6x4m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t m_iter = m0 / 6; + uint64_t m_left = m0 % 6; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + //mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + // During preamble and loops: + // r12 = rcx = c + // r14 = rax = a + // read rbx from var(b) near beginning of loop + // r11 = m dim index ii + + mov(var(m_iter), r11) // ii = m_iter; + + label(.DLOOP6X4I) // LOOP OVER ii = [ m_iter ... 1 0 ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm14, ymm14, ymm14) +#endif + + mov(var(b), rbx) // load address of b. + //mov(r12, rcx) // reset rcx to current utile of c. + mov(r14, rax) + + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 7*8)) // prefetch c + 4*rs_c + prefetch(0, mem(rdx, rdi, 2, 7*8)) // prefetch c + 5*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(r12, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(r12, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(r12, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(r12, rdi, 2, 3*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 3*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 3*8)) // prefetch c + 4*rs_c + prefetch(0, mem(rdx, rdi, 2, 3*8)) // prefetch c + 5*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(r12, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(r12, 5*8)) // prefetch c + 0*cs_c + prefetch(0, mem(r12, rsi, 1, 5*8)) // prefetch c + 1*cs_c + prefetch(0, mem(r12, rsi, 2, 5*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 5*8)) // prefetch c + 3*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + + +#if 1 + lea(mem(r9, r9, 2), rcx) // rcx = 3*cs_a; + + lea(mem(rax, r8, 4), rdx) // use rdx for prefetching lines + lea(mem(rdx, r8, 2), rdx) // from next upanel of a. + + //lea(mem(rax, r9, 8), rdx) // use rdx for prefetching a. + //lea(mem(rdx, r9, 8), rdx) // rdx = a + 16*cs_a; +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + prefetch(0, mem(rdx, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm0, ymm3, ymm14) + + + // ---------------------------------- iteration 1 + +#if 1 + prefetch(0, mem(rdx, r9, 1, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm0, ymm3, ymm14) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(rdx, r9, 2, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm0, ymm3, ymm14) + + + // ---------------------------------- iteration 3 + +#if 1 + prefetch(0, mem(rdx, rcx, 1, 5*8)) + lea(mem(rdx, r9, 4), rdx) // rdx += 4*cs_a; +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm0, ymm3, ymm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + +#if 1 + prefetch(0, mem(rdx, 5*8)) + add(r9, rdx) // rdx += cs_a; +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm0, ymm3, ymm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm0, ymm3, ymm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm0, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(r12, rcx) // reset rcx to current utile of c. + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm6, ymm6) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(ymm0, ymm10, ymm10) + vmulpd(ymm0, ymm12, ymm12) + vmulpd(ymm0, ymm14, ymm14) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm10) + vmovupd(ymm10, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm12) + vmovupd(ymm12, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm14) + vmovupd(ymm14, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm8) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm10) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + add(rdi, rcx) + + + vmovupd(ymm8, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm10, mem(rcx)) + add(rdi, rcx) + + + vmovupd(ymm12, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm14, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 4), r12) // + lea(mem(r12, rdi, 2), r12) // c_ii = r12 += 6*rs_c + + lea(mem(r14, r8, 4), r14) // + lea(mem(r14, r8, 2), r14) // a_ii = r14 += 6*rs_a + + dec(r11) // ii -= 1; + jne(.DLOOP6X4I) // iterate again if ii != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 4; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict ai = a + i_edge*rs_a; + double* restrict bj = b; + +#if 0 + // We add special handling for slightly inflated MR blocksizes + // at edge cases, up to a maximum of 9. + if ( 6 < m_left ) + { + dgemmsup_ker_ft ker_fp1 = NULL; + dgemmsup_ker_ft ker_fp2 = NULL; + dim_t mr1, mr2; + + if ( m_left == 7 ) + { + mr1 = 4; mr2 = 3; + ker_fp1 = bli_dgemmsup_rv_haswell_asm_4x4; + ker_fp2 = bli_dgemmsup_rv_haswell_asm_3x4; + } + else if ( m_left == 8 ) + { + mr1 = 4; mr2 = 4; + ker_fp1 = bli_dgemmsup_rv_haswell_asm_4x4; + ker_fp2 = bli_dgemmsup_rv_haswell_asm_4x4; + } + else // if ( m_left == 9 ) + { + mr1 = 4; mr2 = 5; + ker_fp1 = bli_dgemmsup_rv_haswell_asm_4x4; + ker_fp2 = bli_dgemmsup_rv_haswell_asm_5x4; + } + + ker_fp1 + ( + conja, conjb, mr1, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr1*rs_c0; ai += mr1*rs_a0; + + ker_fp2 + ( + conja, conjb, mr2, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + + return; + } +#endif + +#if 1 + dgemmsup_ker_ft ker_fps[6] = + { + NULL, + bli_dgemmsup_rv_haswell_asm_1x4, + bli_dgemmsup_rv_haswell_asm_2x4, + bli_dgemmsup_rv_haswell_asm_3x4, + bli_dgemmsup_rv_haswell_asm_4x4, + bli_dgemmsup_rv_haswell_asm_5x4 + }; + + dgemmsup_ker_ft ker_fp = ker_fps[ m_left ]; + + ker_fp + ( + conja, conjb, m_left, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + + return; +#else + if ( 5 <= m_left ) + { + const dim_t mr_cur = 5; + + bli_dgemmsup_rv_haswell_asm_5x4 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 4 <= m_left ) + { + const dim_t mr_cur = 4; + + bli_dgemmsup_rv_haswell_asm_4x4 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 3 <= m_left ) + { + const dim_t mr_cur = 3; + + bli_dgemmsup_rv_haswell_asm_3x4 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 2 <= m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rv_haswell_asm_2x4 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rv_haswell_asm_1x4 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } +#endif + } +} + +void bli_dgemmsup_rv_haswell_asm_6x2m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t m_iter = m0 / 6; + uint64_t m_left = m0 % 6; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + //mov(var(b), rbx) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + // During preamble and loops: + // r12 = rcx = c + // r14 = rax = a + // read rbx from var(b) near beginning of loop + // r11 = m dim index ii + + mov(var(m_iter), r11) // ii = m_iter; + + label(.DLOOP6X2I) // LOOP OVER ii = [ m_iter ... 1 0 ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(xmm4, xmm4, xmm4) + vxorpd(xmm6, xmm6, xmm6) + vxorpd(xmm8, xmm8, xmm8) + vxorpd(xmm10, xmm10, xmm10) + vxorpd(xmm12, xmm12, xmm12) + vxorpd(xmm14, xmm14, xmm14) +#endif + + mov(var(b), rbx) // load address of b. + //mov(r12, rcx) // reset rcx to current utile of c. + mov(r14, rax) + + +#if 0 + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 7*8)) // prefetch c + 4*rs_c + prefetch(0, mem(rdx, rdi, 2, 7*8)) // prefetch c + 5*rs_c +#else + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(r12, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(r12, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(r12, rdi, 1, 1*8)) // prefetch c + 1*rs_c + prefetch(0, mem(r12, rdi, 2, 1*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 1*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 1*8)) // prefetch c + 4*rs_c + prefetch(0, mem(rdx, rdi, 2, 1*8)) // prefetch c + 5*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + prefetch(0, mem(r12, 5*8)) // prefetch c + 0*cs_c + prefetch(0, mem(r12, rsi, 1, 5*8)) // prefetch c + 1*cs_c + + label(.DPOSTPFETCH) // done prefetching c +#endif + + +#if 1 + lea(mem(r9, r9, 2), rcx) // rcx = 3*cs_a; + + lea(mem(rax, r8, 4), rdx) // use rdx for prefetching lines + lea(mem(rdx, r8, 2), rdx) // from next upanel of a. + + //lea(mem(rax, r9, 8), rdx) // use rdx for prefetching a. + //lea(mem(rdx, r9, 8), rdx) // rdx = a + 16*cs_a; +#endif + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + prefetch(0, mem(rdx, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm12) + vfmadd231pd(xmm0, xmm3, xmm14) + + + // ---------------------------------- iteration 1 + +#if 1 + prefetch(0, mem(rdx, r9, 1, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm12) + vfmadd231pd(xmm0, xmm3, xmm14) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(rdx, r9, 2, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm12) + vfmadd231pd(xmm0, xmm3, xmm14) + + + // ---------------------------------- iteration 3 + +#if 1 + prefetch(0, mem(rdx, rcx, 1, 5*8)) + lea(mem(rdx, r9, 4), rdx) // rdx += 4*cs_a; +#endif + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm12) + vfmadd231pd(xmm0, xmm3, xmm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + +#if 1 + prefetch(0, mem(rdx, 5*8)) + add(r9, rdx) // rdx += cs_a; +#endif + + vmovupd(mem(rbx, 0*32), xmm0) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm4) + vfmadd231pd(xmm0, xmm3, xmm6) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(xmm0, xmm2, xmm8) + vfmadd231pd(xmm0, xmm3, xmm10) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(xmm0, xmm2, xmm12) + vfmadd231pd(xmm0, xmm3, xmm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(r12, rcx) // reset rcx to current utile of c. + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + vmulpd(xmm0, xmm10, xmm10) + vmulpd(xmm0, xmm12, xmm12) + vmulpd(xmm0, xmm14, xmm14) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + //lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm10) + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm12) + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), xmm3, xmm14) + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(xmm6, xmm4, xmm0) + vunpckhpd(xmm6, xmm4, xmm1) + vunpcklpd(xmm10, xmm8, xmm2) + vunpckhpd(xmm10, xmm8, xmm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(xmm14, xmm12, xmm0) + vunpckhpd(xmm14, xmm12, xmm1) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(xmm6, xmm4, xmm0) + vunpckhpd(xmm6, xmm4, xmm1) + vunpcklpd(xmm10, xmm8, xmm2) + vunpckhpd(xmm10, xmm8, xmm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(xmm14, xmm12, xmm0) + vunpckhpd(xmm14, xmm12, xmm1) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 4), r12) // + lea(mem(r12, rdi, 2), r12) // c_ii = r12 += 6*rs_c + + lea(mem(r14, r8, 4), r14) // + lea(mem(r14, r8, 2), r14) // a_ii = r14 += 6*rs_a + + dec(r11) // ii -= 1; + jne(.DLOOP6X2I) // iterate again if ii != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 2; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict ai = a + i_edge*rs_a; + double* restrict bj = b; + +#if 0 + // We add special handling for slightly inflated MR blocksizes + // at edge cases, up to a maximum of 9. + if ( 6 < m_left ) + { + dgemmsup_ker_ft ker_fp1 = NULL; + dgemmsup_ker_ft ker_fp2 = NULL; + dim_t mr1, mr2; + + if ( m_left == 7 ) + { + mr1 = 4; mr2 = 3; + ker_fp1 = bli_dgemmsup_rv_haswell_asm_4x2; + ker_fp2 = bli_dgemmsup_rv_haswell_asm_3x2; + } + else if ( m_left == 8 ) + { + mr1 = 4; mr2 = 4; + ker_fp1 = bli_dgemmsup_rv_haswell_asm_4x2; + ker_fp2 = bli_dgemmsup_rv_haswell_asm_4x2; + } + else // if ( m_left == 9 ) + { + mr1 = 4; mr2 = 5; + ker_fp1 = bli_dgemmsup_rv_haswell_asm_4x2; + ker_fp2 = bli_dgemmsup_rv_haswell_asm_5x2; + } + + ker_fp1 + ( + conja, conjb, mr1, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr1*rs_c0; ai += mr1*rs_a0; + + ker_fp2 + ( + conja, conjb, mr2, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + + return; + } +#endif + +#if 1 + dgemmsup_ker_ft ker_fps[6] = + { + NULL, + bli_dgemmsup_rv_haswell_asm_1x2, + bli_dgemmsup_rv_haswell_asm_2x2, + bli_dgemmsup_rv_haswell_asm_3x2, + bli_dgemmsup_rv_haswell_asm_4x2, + bli_dgemmsup_rv_haswell_asm_5x2 + }; + + dgemmsup_ker_ft ker_fp = ker_fps[ m_left ]; + + ker_fp + ( + conja, conjb, m_left, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + + return; +#else + if ( 5 <= m_left ) + { + const dim_t mr_cur = 5; + + bli_dgemmsup_rv_haswell_asm_5x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 4 <= m_left ) + { + const dim_t mr_cur = 4; + + bli_dgemmsup_rv_haswell_asm_4x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 3 <= m_left ) + { + const dim_t mr_cur = 3; + + bli_dgemmsup_rv_haswell_asm_3x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 2 <= m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rv_haswell_asm_2x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rv_haswell_asm_1x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } +#endif + } +} + diff --git a/kernels/haswell/3/sup/bli_gemmsup_rv_haswell_asm_d6x8n.c b/kernels/haswell/3/sup/bli_gemmsup_rv_haswell_asm_d6x8n.c new file mode 100644 index 000000000..7ff39dac7 --- /dev/null +++ b/kernels/haswell/3/sup/bli_gemmsup_rv_haswell_asm_d6x8n.c @@ -0,0 +1,4117 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" + +#define BLIS_ASM_SYNTAX_ATT +#include "bli_x86_asm_macros.h" + +/* + rrr: + -------- ------ -------- + -------- ------ -------- + -------- += ------ ... -------- + -------- ------ -------- + -------- ------ : + -------- ------ : + + rcr: + -------- | | | | -------- + -------- | | | | -------- + -------- += | | | | ... -------- + -------- | | | | -------- + -------- | | | | : + -------- | | | | : + + Assumptions: + - B is row-stored; + - A is row- or column-stored; + - m0 and n0 are at most MR and NR, respectively. + Therefore, this (r)ow-preferential kernel is well-suited for contiguous + (v)ector loads on B and single-element broadcasts from A. + + NOTE: These kernels explicitly support column-oriented IO, implemented + via an in-register transpose. And thus they also support the crr and + ccr cases, though only crr is ever utilized (because ccr is handled by + transposing the operation and executing rcr, which does not incur the + cost of the in-register transpose). + + crr: + | | | | | | | | ------ -------- + | | | | | | | | ------ -------- + | | | | | | | | += ------ ... -------- + | | | | | | | | ------ -------- + | | | | | | | | ------ : + | | | | | | | | ------ : +*/ + +// Prototype reference microkernels. +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref ) + +#if 0 +// Define parameters and variables for edge case kernel map. +#define NUM_MR 4 +#define NUM_NR 4 +#define FUNCPTR_T dgemmsup_ker_ft + +static dim_t mrs[NUM_MR] = { 6, 4, 2, 1 }; +static dim_t nrs[NUM_NR] = { 8, 4, 2, 1 }; +static FUNCPTR_T kmap[NUM_MR][NUM_NR] = +{ /* 8 4 2 1 */ +/* 6 */ { bli_dgemmsup_rv_haswell_asm_6x8n, bli_dgemmsup_rv_haswell_asm_6x4n, bli_dgemmsup_rv_haswell_asm_6x2n, bli_dgemmsup_r_haswell_ref_6x1 }, +/* 4 */ { bli_dgemmsup_rv_haswell_asm_4x8n, bli_dgemmsup_rv_haswell_asm_4x4n, bli_dgemmsup_rv_haswell_asm_4x2n, bli_dgemmsup_r_haswell_ref_4x1 }, +/* 2 */ { bli_dgemmsup_rv_haswell_asm_2x8n, bli_dgemmsup_rv_haswell_asm_2x4n, bli_dgemmsup_rv_haswell_asm_2x2n, bli_dgemmsup_r_haswell_ref_2x1 }, +/* 1 */ { bli_dgemmsup_rv_haswell_asm_1x8n, bli_dgemmsup_rv_haswell_asm_1x4n, bli_dgemmsup_rv_haswell_asm_1x2n, bli_dgemmsup_r_haswell_ref_1x1 }, +}; +#endif + + +void bli_dgemmsup_rv_haswell_asm_6x8n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + uint64_t m_left = m0 % 6; + +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); return; +#endif + +//printf( "rv_6x8n: %d %d %d\n", (int)m0, (int)n0, (int)k0 ); + // First check whether this is a edge case in the m dimension. If so, + // dispatch other ?x8m kernels, as needed. + if ( m_left ) + { + double* restrict cij = c; + double* restrict bj = b; + double* restrict ai = a; + +#if 1 + // We add special handling for slightly inflated MR blocksizes + // at edge cases, up to a maximum of 9. + if ( 6 < m0 ) + { + dgemmsup_ker_ft ker_fp1 = NULL; + dgemmsup_ker_ft ker_fp2 = NULL; + dim_t mr1, mr2; + + if ( m0 == 7 ) + { + mr1 = 4; mr2 = 3; + ker_fp1 = bli_dgemmsup_rv_haswell_asm_4x8n; + ker_fp2 = bli_dgemmsup_rv_haswell_asm_3x8n; + } + else if ( m0 == 8 ) + { + mr1 = 4; mr2 = 4; + ker_fp1 = bli_dgemmsup_rv_haswell_asm_4x8n; + ker_fp2 = bli_dgemmsup_rv_haswell_asm_4x8n; + } + else // if ( m0 == 9 ) + { + mr1 = 4; mr2 = 5; + ker_fp1 = bli_dgemmsup_rv_haswell_asm_4x8n; + ker_fp2 = bli_dgemmsup_rv_haswell_asm_5x8n; + } + + ker_fp1 + ( + conja, conjb, mr1, n0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr1*rs_c0; ai += mr1*rs_a0; + + ker_fp2 + ( + conja, conjb, mr2, n0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + + return; + } +#endif + +#if 1 + dgemmsup_ker_ft ker_fps[6] = + { + NULL, + bli_dgemmsup_rv_haswell_asm_1x8n, + bli_dgemmsup_rv_haswell_asm_2x8n, + bli_dgemmsup_rv_haswell_asm_3x8n, + bli_dgemmsup_rv_haswell_asm_4x8n, + bli_dgemmsup_rv_haswell_asm_5x8n + }; + + dgemmsup_ker_ft ker_fp = ker_fps[ m_left ]; + + ker_fp + ( + conja, conjb, m_left, n0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + + return; +#else + if ( 5 <= m_left ) + { + const dim_t mr_cur = 5; + + bli_dgemmsup_rv_haswell_asm_5x8n + ( + conja, conjb, mr_cur, n0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 4 <= m_left ) + { + const dim_t mr_cur = 4; + + bli_dgemmsup_rv_haswell_asm_4x8n + ( + conja, conjb, mr_cur, n0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 3 <= m_left ) + { + const dim_t mr_cur = 3; + + bli_dgemmsup_rv_haswell_asm_3x8n + ( + conja, conjb, mr_cur, n0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 2 <= m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rv_haswell_asm_2x8n + ( + conja, conjb, mr_cur, n0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { +#if 1 + const dim_t mr_cur = 1; + + bli_dgemmsup_rv_haswell_asm_1x8n + ( + conja, conjb, mr_cur, n0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_TRANSPOSE, conja, k0, n0, + alpha, bj, rs_b0, cs_b0, ai, cs_a0, + beta, cij, cs_c0, cntx, NULL + ); +#endif + } + return; +#endif + } + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t n_iter = n0 / 8; + uint64_t n_left = n0 % 8; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( n_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + //mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + // During preamble and loops: + // r12 = rcx = c + // r14 = rbx = b + // read rax from var(a) near beginning of loop + // r11 = m dim index ii + + mov(var(n_iter), r11) // jj = n_iter; + + label(.DLOOP6X8J) // LOOP OVER jj = [ n_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + mov(var(a), rax) // load address of a. + //mov(r12, rcx) // reset rcx to current utile of c. + mov(r14, rbx) // reset rbx to current upanel of b. + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(r12, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(r12, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(r12, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(r12, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 7*8)) // prefetch c + 4*rs_c + prefetch(0, mem(rdx, rdi, 2, 7*8)) // prefetch c + 5*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(r12, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(r12, 5*8)) // prefetch c + 0*cs_c + prefetch(0, mem(r12, rsi, 1, 5*8)) // prefetch c + 1*cs_c + prefetch(0, mem(r12, rsi, 2, 5*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 5*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 5*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 5*8)) // prefetch c + 5*cs_c + lea(mem(rdx, rsi, 2), rdx) // rdx = c + 5*cs_c; + prefetch(0, mem(rdx, rsi, 1, 5*8)) // prefetch c + 6*cs_c + prefetch(0, mem(rdx, rsi, 2, 5*8)) // prefetch c + 7*cs_c + + label(.DPOSTPFETCH) // done prefetching c + +#if 1 + // use byte offsets from rbx to + // prefetch lines from next upanel + // of b. +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + //prefetch(0, mem(rdx, 11*8)) // prefetch line of next upanel of b + prefetch(0, mem(rbx, 11*8)) // prefetch line of next upanel of b +#else + prefetch(0, mem(rdx, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + +#if 1 + //prefetch(0, mem(rdx, r10, 1, 11*8)) + prefetch(0, mem(rbx, 11*8)) +#else + prefetch(0, mem(rdx, r10, 1, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 1 + //prefetch(0, mem(rdx, r10, 2, 11*8)) + prefetch(0, mem(rbx, 11*8)) +#else + prefetch(0, mem(rdx, r10, 2, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + +#if 1 + //prefetch(0, mem(rdx, rcx, 1, 11*8)) + prefetch(0, mem(rbx, 11*8)) + //prefetch(0, mem(rdx, r9, 1, 7*8)) + //lea(mem(rdx, r10, 4), rdx) // a_prefetch += 4*cs_a; +#else + prefetch(0, mem(rdx, rcx, 1, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + +#if 1 + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + vbroadcastsd(mem(rax, r15, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(r12, rcx) // reset rcx to current utile of c. + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(ymm0, ymm7, ymm7) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(ymm0, ymm9, ymm9) + vmulpd(ymm0, ymm10, ymm10) + vmulpd(ymm0, ymm11, ymm11) + vmulpd(ymm0, ymm12, ymm12) + vmulpd(ymm0, ymm13, ymm13) + vmulpd(ymm0, ymm14, ymm14) + vmulpd(ymm0, ymm15, ymm15) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm5) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm7) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm9) + vmovupd(ymm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm10) + vmovupd(ymm10, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm11) + vmovupd(ymm11, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm12) + vmovupd(ymm12, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm13) + vmovupd(ymm13, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm14) + vmovupd(ymm14, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm15) + vmovupd(ymm15, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm8) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm10) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm7) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm9) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm11) + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + vmovupd(ymm9, mem(rcx, rsi, 2)) + vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm15, ymm13, ymm0) + vunpckhpd(ymm15, ymm13, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm6, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm8, mem(rcx)) + vmovupd(ymm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm10, mem(rcx)) + vmovupd(ymm11, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm12, mem(rcx)) + vmovupd(ymm13, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm14, mem(rcx)) + vmovupd(ymm15, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + vmovupd(ymm9, mem(rcx, rsi, 2)) + vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vunpcklpd(ymm15, ymm13, ymm0) + vunpckhpd(ymm15, ymm13, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rsi, 8), r12) // c_jj = r12 += 8*cs_c + + add(imm(8*8), r14) // b_jj = r14 += 8*cs_b + + dec(r11) // jj -= 1; + jne(.DLOOP6X8J) // iterate again if jj != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [n_iter] "m" (n_iter), + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( n_left ) + { + const dim_t mr_cur = 6; + const dim_t j_edge = n0 - ( dim_t )n_left; + + double* restrict cij = c + j_edge*cs_c; + double* restrict ai = a; + double* restrict bj = b + j_edge*cs_b; + + if ( 4 <= n_left ) + { + const dim_t nr_cur = 4; + + bli_dgemmsup_rv_haswell_asm_6x4 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rv_haswell_asm_6x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 1 + const dim_t nr_cur = 1; + + bli_dgemmsup_r_haswell_ref_6x1 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_NO_TRANSPOSE, conjb, m0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, + beta, cij, rs_c0, cntx, NULL + ); +#endif + } + } +} + +void bli_dgemmsup_rv_haswell_asm_5x8n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t n_iter = n0 / 8; + uint64_t n_left = n0 % 8; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( n_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + //mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + // During preamble and loops: + // r12 = rcx = c + // r14 = rbx = b + // read rax from var(a) near beginning of loop + // r11 = m dim index ii + + mov(var(n_iter), r11) // jj = n_iter; + + label(.DLOOP6X8J) // LOOP OVER jj = [ n_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + //vxorpd(ymm14, ymm14, ymm14) + //vxorpd(ymm15, ymm15, ymm15) +#endif + + mov(var(a), rax) // load address of a. + //mov(r12, rcx) // reset rcx to current utile of c. + mov(r14, rbx) // reset rbx to current upanel of b. + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(r12, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(r12, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(r12, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(r12, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 7*8)) // prefetch c + 4*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(r12, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(r12, 4*8)) // prefetch c + 0*cs_c + prefetch(0, mem(r12, rsi, 1, 4*8)) // prefetch c + 1*cs_c + prefetch(0, mem(r12, rsi, 2, 4*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 4*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 4*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 4*8)) // prefetch c + 5*cs_c + lea(mem(rdx, rsi, 2), rdx) // rdx = c + 5*cs_c; + prefetch(0, mem(rdx, rsi, 1, 4*8)) // prefetch c + 6*cs_c + prefetch(0, mem(rdx, rsi, 2, 4*8)) // prefetch c + 7*cs_c + + label(.DPOSTPFETCH) // done prefetching c + +#if 1 + + // use byte offsets from rbx to + // prefetch lines from next upanel + // of b. +#else + lea(mem(r10, r10, 2), rcx) // rcx = 3*rs_b; + lea(mem(rbx, r10, 8), rdx) // use rdx for prefetching b. + lea(mem(rdx, r10, 8), rdx) // rdx = b + 16*rs_b; + + #if 0 + mov(r9, rsi) // rsi = rs_b; + sal(imm(5), rsi) // rsi = 16*rs_b; + lea(mem(rax, rsi, 1), rdx) // rdx = b + 16*rs_b; + #endif +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + //prefetch(0, mem(rdx, 11*8)) // prefetch line of next upanel of b + prefetch(0, mem(rbx, 11*8)) // prefetch line of next upanel of b +#else + prefetch(0, mem(rdx, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + + + // ---------------------------------- iteration 1 + +#if 1 + //prefetch(0, mem(rdx, r10, 1, 11*8)) + prefetch(0, mem(rbx, 11*8)) +#else + prefetch(0, mem(rdx, r10, 1, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + + + // ---------------------------------- iteration 2 + +#if 1 + //prefetch(0, mem(rdx, r10, 2, 11*8)) + prefetch(0, mem(rbx, 11*8)) +#else + prefetch(0, mem(rdx, r10, 2, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + + + // ---------------------------------- iteration 3 + +#if 1 + //prefetch(0, mem(rdx, rcx, 1, 11*8)) + prefetch(0, mem(rbx, 11*8)) + //prefetch(0, mem(rdx, r9, 1, 7*8)) + //lea(mem(rdx, r10, 4), rdx) // a_prefetch += 4*cs_a; +#else + prefetch(0, mem(rdx, rcx, 1, 5*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + +#if 1 + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vbroadcastsd(mem(rax, r8, 4), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm12) + vfmadd231pd(ymm1, ymm2, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(r12, rcx) // reset rcx to current utile of c. + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(ymm0, ymm7, ymm7) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(ymm0, ymm9, ymm9) + vmulpd(ymm0, ymm10, ymm10) + vmulpd(ymm0, ymm11, ymm11) + vmulpd(ymm0, ymm12, ymm12) + vmulpd(ymm0, ymm13, ymm13) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm5) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm7) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm9) + vmovupd(ymm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm10) + vmovupd(ymm10, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm11) + vmovupd(ymm11, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm12) + vmovupd(ymm12, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm13) + vmovupd(ymm13, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm8) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm10) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + +#if 0 + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) +#else + vmovlpd(mem(rdx), xmm0, xmm0) + vmovhpd(mem(rdx, rsi, 1), xmm0, xmm0) + vmovlpd(mem(rdx, rsi, 2), xmm1, xmm1) + vmovhpd(mem(rdx, rax, 1), xmm1, xmm1) + vperm2f128(imm(0x20), ymm1, ymm0, ymm0) + + vfmadd213pd(ymm12, ymm3, ymm0) + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rdx)) + vmovhpd(xmm0, mem(rdx, rsi, 1)) + vmovlpd(xmm1, mem(rdx, rsi, 2)) + vmovhpd(xmm1, mem(rdx, rax, 1)) +#endif + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm7) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm9) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm11) + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + vmovupd(ymm9, mem(rcx, rsi, 2)) + vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + +#if 0 + vunpcklpd(ymm15, ymm13, ymm0) + vunpckhpd(ymm15, ymm13, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rdx), xmm3, xmm0) + vfmadd231pd(mem(rdx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rdx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rdx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) +#else + vmovlpd(mem(rdx), xmm0, xmm0) + vmovhpd(mem(rdx, rsi, 1), xmm0, xmm0) + vmovlpd(mem(rdx, rsi, 2), xmm1, xmm1) + vmovhpd(mem(rdx, rax, 1), xmm1, xmm1) + vperm2f128(imm(0x20), ymm1, ymm0, ymm0) + + vfmadd213pd(ymm13, ymm3, ymm0) + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rdx)) + vmovhpd(xmm0, mem(rdx, rsi, 1)) + vmovlpd(xmm1, mem(rdx, rsi, 2)) + vmovhpd(xmm1, mem(rdx, rax, 1)) +#endif + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm6, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm8, mem(rcx)) + vmovupd(ymm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm10, mem(rcx)) + vmovupd(ymm11, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vmovupd(ymm12, mem(rcx)) + vmovupd(ymm13, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + +#if 0 + vunpcklpd(ymm14, ymm12, ymm0) + vunpckhpd(ymm14, ymm12, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) +#else + vmovupd(ymm12, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + vmovlpd(xmm1, mem(rcx, rsi, 2)) + vmovhpd(xmm1, mem(rcx, rax, 1)) +#endif + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + vmovupd(ymm9, mem(rcx, rsi, 2)) + vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + +#if 0 + vunpcklpd(ymm15, ymm13, ymm0) + vunpckhpd(ymm15, ymm13, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rdx)) + vmovupd(xmm1, mem(rdx, rsi, 1)) + vmovupd(xmm2, mem(rdx, rsi, 2)) + vmovupd(xmm4, mem(rdx, rax, 1)) +#else + vmovupd(ymm13, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rdx)) + vmovhpd(xmm0, mem(rdx, rsi, 1)) + vmovlpd(xmm1, mem(rdx, rsi, 2)) + vmovhpd(xmm1, mem(rdx, rax, 1)) +#endif + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rsi, 8), r12) // c_jj = r12 += 8*cs_c + + add(imm(8*8), r14) // b_jj = r14 += 8*cs_b + + dec(r11) // jj -= 1; + jne(.DLOOP6X8J) // iterate again if jj != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [n_iter] "m" (n_iter), + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( n_left ) + { + const dim_t mr_cur = 5; + const dim_t j_edge = n0 - ( dim_t )n_left; + + double* restrict cij = c + j_edge*cs_c; + double* restrict ai = a; + double* restrict bj = b + j_edge*cs_b; + + if ( 4 <= n_left ) + { + const dim_t nr_cur = 4; + + bli_dgemmsup_rv_haswell_asm_5x4 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rv_haswell_asm_5x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 1 + const dim_t nr_cur = 1; + + bli_dgemmsup_r_haswell_ref_5x1 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_NO_TRANSPOSE, conjb, m0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, + beta, cij, rs_c0, cntx, NULL + ); +#endif + } + } +} + +void bli_dgemmsup_rv_haswell_asm_4x8n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t n_iter = n0 / 8; + uint64_t n_left = n0 % 8; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( n_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + //mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + // During preamble and loops: + // r12 = rcx = c + // r14 = rbx = b + // read rax from var(a) near beginning of loop + // r11 = m dim index ii + + mov(var(n_iter), r11) // jj = n_iter; + + label(.DLOOP4X8J) // LOOP OVER jj = [ n_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) +#endif + + mov(var(a), rax) // load address of a. + //mov(r12, rcx) // reset rcx to current utile of c. + mov(r14, rbx) // reset rbx to current upanel of b. + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + lea(mem(r12, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(r12, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(r12, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(r12, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(r12, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(r12, 3*8)) // prefetch c + 0*cs_c + prefetch(0, mem(r12, rsi, 1, 3*8)) // prefetch c + 1*cs_c + prefetch(0, mem(r12, rsi, 2, 3*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 3*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 3*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 3*8)) // prefetch c + 5*cs_c + lea(mem(rdx, rsi, 2), rdx) // rdx = c + 5*cs_c; + prefetch(0, mem(rdx, rsi, 1, 3*8)) // prefetch c + 6*cs_c + prefetch(0, mem(rdx, rsi, 2, 3*8)) // prefetch c + 7*cs_c + + label(.DPOSTPFETCH) // done prefetching c + +#if 1 + //lea(mem(r10, r10, 2), rcx) // rcx = 3*rs_b; + + // use byte offsets from rbx to + // prefetch lines from next upanel + // of b. +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + //prefetch(0, mem(rdx, 11*8)) // prefetch line of next upanel of b + prefetch(0, mem(rbx, 11*8)) // prefetch line of next upanel of b +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + + // ---------------------------------- iteration 1 + +#if 1 + //prefetch(0, mem(rdx, r10, 1, 11*8)) + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + + // ---------------------------------- iteration 2 + +#if 1 + //prefetch(0, mem(rdx, r10, 2, 11*8)) + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + + // ---------------------------------- iteration 3 + +#if 1 + //prefetch(0, mem(rdx, rcx, 1, 11*8)) + //lea(mem(rdx, r10, 4), rdx) // a_prefetch += 4*cs_a; + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + +#if 1 + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + vbroadcastsd(mem(rax, r13, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(r12, rcx) // reset rcx to current utile of c. + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(ymm0, ymm7, ymm7) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(ymm0, ymm9, ymm9) + vmulpd(ymm0, ymm10, ymm10) + vmulpd(ymm0, ymm11, ymm11) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + //lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm5) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm7) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm9) + vmovupd(ymm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm10) + vmovupd(ymm10, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm11) + vmovupd(ymm11, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm6) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm8) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm10) + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vfmadd231pd(mem(rcx, rsi, 1), ymm3, ymm7) + vfmadd231pd(mem(rcx, rsi, 2), ymm3, ymm9) + vfmadd231pd(mem(rcx, rax, 1), ymm3, ymm11) + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + vmovupd(ymm9, mem(rcx, rsi, 2)) + vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + vmovupd(ymm8, mem(rcx)) + vmovupd(ymm9, mem(rcx, rsi, 4)) + add(rdi, rcx) + + vmovupd(ymm10, mem(rcx)) + vmovupd(ymm11, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm6, mem(rcx, rsi, 1)) + vmovupd(ymm8, mem(rcx, rsi, 2)) + vmovupd(ymm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vmovupd(ymm5, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 1)) + vmovupd(ymm9, mem(rcx, rsi, 2)) + vmovupd(ymm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rsi, 8), r12) // c_jj = r12 += 8*cs_c + + add(imm(8*8), r14) // b_jj = r14 += 8*cs_b + + dec(r11) // jj -= 1; + jne(.DLOOP4X8J) // iterate again if jj != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [n_iter] "m" (n_iter), + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( n_left ) + { + const dim_t mr_cur = 4; + const dim_t j_edge = n0 - ( dim_t )n_left; + + double* restrict cij = c + j_edge*cs_c; + double* restrict ai = a; + double* restrict bj = b + j_edge*cs_b; + + if ( 4 <= n_left ) + { + const dim_t nr_cur = 4; + + bli_dgemmsup_rv_haswell_asm_4x4 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rv_haswell_asm_4x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { + const dim_t nr_cur = 1; + + bli_dgemmsup_r_haswell_ref_4x1 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rv_haswell_asm_3x8n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t n_iter = n0 / 8; + uint64_t n_left = n0 % 8; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( n_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + //mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + // During preamble and loops: + // r12 = rcx = c + // r14 = rbx = b + // read rax from var(a) near beginning of loop + // r11 = m dim index ii + + mov(var(n_iter), r11) // jj = n_iter; + + label(.DLOOP4X8J) // LOOP OVER jj = [ n_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + mov(var(a), rax) // load address of a. + //mov(r12, rcx) // reset rcx to current utile of c. + mov(r14, rbx) // reset rbx to current upanel of b. + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + //lea(mem(r12, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(r12, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(r12, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(r12, rdi, 2, 7*8)) // prefetch c + 2*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(r12, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(r12, 2*8)) // prefetch c + 0*cs_c + prefetch(0, mem(r12, rsi, 1, 2*8)) // prefetch c + 1*cs_c + prefetch(0, mem(r12, rsi, 2, 2*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 2*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 2*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 2*8)) // prefetch c + 5*cs_c + lea(mem(rdx, rsi, 2), rdx) // rdx = c + 5*cs_c; + prefetch(0, mem(rdx, rsi, 1, 2*8)) // prefetch c + 6*cs_c + prefetch(0, mem(rdx, rsi, 2, 2*8)) // prefetch c + 7*cs_c + + label(.DPOSTPFETCH) // done prefetching c + +#if 1 + //lea(mem(r10, r10, 2), rcx) // rcx = 3*rs_b; + + // use byte offsets from rbx to + // prefetch lines from next upanel + // of b. +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + //prefetch(0, mem(rdx, 11*8)) // prefetch line of next upanel of b + prefetch(0, mem(rbx, 11*8)) // prefetch line of next upanel of b +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + + + // ---------------------------------- iteration 1 + +#if 1 + //prefetch(0, mem(rdx, r10, 1, 11*8)) + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + + + // ---------------------------------- iteration 2 + +#if 1 + //prefetch(0, mem(rdx, r10, 2, 11*8)) + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + + + // ---------------------------------- iteration 3 + +#if 1 + //prefetch(0, mem(rdx, rcx, 1, 11*8)) + //lea(mem(rdx, r10, 4), rdx) // a_prefetch += 4*cs_a; + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + +#if 1 + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vbroadcastsd(mem(rax, r8, 2), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm8) + vfmadd231pd(ymm1, ymm2, ymm9) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(r12, rcx) // reset rcx to current utile of c. + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(ymm0, ymm7, ymm7) + vmulpd(ymm0, ymm8, ymm8) + vmulpd(ymm0, ymm9, ymm9) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + lea(mem(rcx, rdi, 2), rdx) // load address of c + 2*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm5) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm7) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm8) + vmovupd(ymm8, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm9) + vmovupd(ymm9, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vextractf128(imm(0x1), ymm4, xmm12) + vextractf128(imm(0x1), ymm6, xmm13) + vextractf128(imm(0x1), ymm8, xmm14) + vextractf128(imm(0x1), ymm10, xmm15) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vfmadd231pd(mem(rcx, rsi, 1), xmm3, xmm6) + vfmadd231pd(mem(rcx, rsi, 2), xmm3, xmm8) + vfmadd231pd(mem(rcx, rax, 1), xmm3, xmm10) + vmovupd(xmm4, mem(rcx)) + vmovupd(xmm6, mem(rcx, rsi, 1)) + vmovupd(xmm8, mem(rcx, rsi, 2)) + vmovupd(xmm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + vfmadd231sd(mem(rdx), xmm3, xmm12) + vfmadd231sd(mem(rdx, rsi, 1), xmm3, xmm13) + vfmadd231sd(mem(rdx, rsi, 2), xmm3, xmm14) + vfmadd231sd(mem(rdx, rax, 1), xmm3, xmm15) + vmovsd(xmm12, mem(rdx)) + vmovsd(xmm13, mem(rdx, rsi, 1)) + vmovsd(xmm14, mem(rdx, rsi, 2)) + vmovsd(xmm15, mem(rdx, rax, 1)) + + lea(mem(rdx, rsi, 4), rdx) + + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vextractf128(imm(0x1), ymm5, xmm12) + vextractf128(imm(0x1), ymm7, xmm13) + vextractf128(imm(0x1), ymm9, xmm14) + vextractf128(imm(0x1), ymm11, xmm15) + + vbroadcastsd(mem(rbx), ymm3) + + vfmadd231pd(mem(rcx), xmm3, xmm5) + vfmadd231pd(mem(rcx, rsi, 1), xmm3, xmm7) + vfmadd231pd(mem(rcx, rsi, 2), xmm3, xmm9) + vfmadd231pd(mem(rcx, rax, 1), xmm3, xmm11) + vmovupd(xmm5, mem(rcx)) + vmovupd(xmm7, mem(rcx, rsi, 1)) + vmovupd(xmm9, mem(rcx, rsi, 2)) + vmovupd(xmm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vfmadd231sd(mem(rdx), xmm3, xmm12) + vfmadd231sd(mem(rdx, rsi, 1), xmm3, xmm13) + vfmadd231sd(mem(rdx, rsi, 2), xmm3, xmm14) + vfmadd231sd(mem(rdx, rax, 1), xmm3, xmm15) + vmovsd(xmm12, mem(rdx)) + vmovsd(xmm13, mem(rdx, rsi, 1)) + vmovsd(xmm14, mem(rdx, rsi, 2)) + vmovsd(xmm15, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 4)) + add(rdi, rcx) + + vmovupd(ymm8, mem(rcx)) + vmovupd(ymm9, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vunpcklpd(ymm10, ymm8, ymm2) + vunpckhpd(ymm10, ymm8, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm4) + vinsertf128(imm(0x1), xmm3, ymm1, ymm6) + vperm2f128(imm(0x31), ymm2, ymm0, ymm8) + vperm2f128(imm(0x31), ymm3, ymm1, ymm10) + + vextractf128(imm(0x1), ymm4, xmm12) + vextractf128(imm(0x1), ymm6, xmm13) + vextractf128(imm(0x1), ymm8, xmm14) + vextractf128(imm(0x1), ymm10, xmm15) + + vmovupd(xmm4, mem(rcx)) + vmovupd(xmm6, mem(rcx, rsi, 1)) + vmovupd(xmm8, mem(rcx, rsi, 2)) + vmovupd(xmm10, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + vmovsd(xmm12, mem(rdx)) + vmovsd(xmm13, mem(rdx, rsi, 1)) + vmovsd(xmm14, mem(rdx, rsi, 2)) + vmovsd(xmm15, mem(rdx, rax, 1)) + + lea(mem(rdx, rsi, 4), rdx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vunpcklpd(ymm11, ymm9, ymm2) + vunpckhpd(ymm11, ymm9, ymm3) + vinsertf128(imm(0x1), xmm2, ymm0, ymm5) + vinsertf128(imm(0x1), xmm3, ymm1, ymm7) + vperm2f128(imm(0x31), ymm2, ymm0, ymm9) + vperm2f128(imm(0x31), ymm3, ymm1, ymm11) + + vextractf128(imm(0x1), ymm5, xmm12) + vextractf128(imm(0x1), ymm7, xmm13) + vextractf128(imm(0x1), ymm9, xmm14) + vextractf128(imm(0x1), ymm11, xmm15) + + vmovupd(xmm5, mem(rcx)) + vmovupd(xmm7, mem(rcx, rsi, 1)) + vmovupd(xmm9, mem(rcx, rsi, 2)) + vmovupd(xmm11, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + vmovsd(xmm12, mem(rdx)) + vmovsd(xmm13, mem(rdx, rsi, 1)) + vmovsd(xmm14, mem(rdx, rsi, 2)) + vmovsd(xmm15, mem(rdx, rax, 1)) + + //lea(mem(rdx, rsi, 4), rdx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rsi, 8), r12) // c_jj = r12 += 8*cs_c + + add(imm(8*8), r14) // b_jj = r14 += 8*cs_b + + dec(r11) // jj -= 1; + jne(.DLOOP4X8J) // iterate again if jj != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [n_iter] "m" (n_iter), + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( n_left ) + { + const dim_t mr_cur = 3; + const dim_t j_edge = n0 - ( dim_t )n_left; + + double* restrict cij = c + j_edge*cs_c; + double* restrict ai = a; + double* restrict bj = b + j_edge*cs_b; + + if ( 4 <= n_left ) + { + const dim_t nr_cur = 4; + + bli_dgemmsup_rv_haswell_asm_3x4 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rv_haswell_asm_3x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { + const dim_t nr_cur = 1; + + bli_dgemmsup_r_haswell_ref_3x1 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rv_haswell_asm_2x8n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t n_iter = n0 / 8; + uint64_t n_left = n0 % 8; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( n_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + //mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + // During preamble and loops: + // r12 = rcx = c + // r14 = rbx = b + // read rax from var(a) near beginning of loop + // r11 = m dim index ii + + mov(var(n_iter), r11) // jj = n_iter; + + label(.DLOOP2X8J) // LOOP OVER jj = [ n_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) +#endif + + mov(var(a), rax) // load address of a. + //mov(r12, rcx) // reset rcx to current utile of c. + mov(r14, rbx) // reset rbx to current upanel of b. + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + //lea(mem(r12, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(r12, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(r12, rdi, 1, 7*8)) // prefetch c + 1*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(r12, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(r12, 1*8)) // prefetch c + 0*cs_c + prefetch(0, mem(r12, rsi, 1, 1*8)) // prefetch c + 1*cs_c + prefetch(0, mem(r12, rsi, 2, 1*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 1*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 1*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 1*8)) // prefetch c + 5*cs_c + lea(mem(rdx, rsi, 2), rdx) // rdx = c + 5*cs_c; + prefetch(0, mem(rdx, rsi, 1, 1*8)) // prefetch c + 6*cs_c + prefetch(0, mem(rdx, rsi, 2, 1*8)) // prefetch c + 7*cs_c + + label(.DPOSTPFETCH) // done prefetching c + +#if 1 + //lea(mem(r10, r10, 2), rcx) // rcx = 3*rs_b; + + // use byte offsets from rbx to + // prefetch lines from next upanel + // of b. +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + //prefetch(0, mem(rdx, 11*8)) // prefetch line of next upanel of b + prefetch(0, mem(rbx, 11*8)) // prefetch line of next upanel of b +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 1 + +#if 1 + //prefetch(0, mem(rdx, r10, 1, 11*8)) + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 2 + +#if 1 + //prefetch(0, mem(rdx, r10, 2, 11*8)) + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 3 + +#if 1 + //prefetch(0, mem(rdx, rcx, 1, 11*8)) + //lea(mem(rdx, r10, 4), rdx) // a_prefetch += 4*cs_a; + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + +#if 1 + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + vbroadcastsd(mem(rax, r8, 1), ymm3) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(r12, rcx) // reset rcx to current utile of c. + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + vmulpd(ymm0, ymm7, ymm7) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + //lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm5) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm7) + vmovupd(ymm7, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rcx), xmm3, xmm0) + vfmadd231pd(mem(rcx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rcx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rcx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rcx)) + vmovupd(xmm1, mem(rcx, rsi, 1)) + vmovupd(xmm2, mem(rcx, rsi, 2)) + vmovupd(xmm4, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vfmadd231pd(mem(rcx), xmm3, xmm0) + vfmadd231pd(mem(rcx, rsi, 1), xmm3, xmm1) + vfmadd231pd(mem(rcx, rsi, 2), xmm3, xmm2) + vfmadd231pd(mem(rcx, rax, 1), xmm3, xmm4) + vmovupd(xmm0, mem(rcx)) + vmovupd(xmm1, mem(rcx, rsi, 1)) + vmovupd(xmm2, mem(rcx, rsi, 2)) + vmovupd(xmm4, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm5, mem(rcx, rsi, 4)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + vmovupd(ymm7, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vunpcklpd(ymm6, ymm4, ymm0) + vunpckhpd(ymm6, ymm4, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rcx)) + vmovupd(xmm1, mem(rcx, rsi, 1)) + vmovupd(xmm2, mem(rcx, rsi, 2)) + vmovupd(xmm4, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vunpcklpd(ymm7, ymm5, ymm0) + vunpckhpd(ymm7, ymm5, ymm1) + vextractf128(imm(0x1), ymm0, xmm2) + vextractf128(imm(0x1), ymm1, xmm4) + + vmovupd(xmm0, mem(rcx)) + vmovupd(xmm1, mem(rcx, rsi, 1)) + vmovupd(xmm2, mem(rcx, rsi, 2)) + vmovupd(xmm4, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rsi, 8), r12) // c_jj = r12 += 8*cs_c + + add(imm(8*8), r14) // b_jj = r14 += 8*cs_b + + dec(r11) // jj -= 1; + jne(.DLOOP2X8J) // iterate again if jj != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [n_iter] "m" (n_iter), + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( n_left ) + { + const dim_t mr_cur = 2; + const dim_t j_edge = n0 - ( dim_t )n_left; + + double* restrict cij = c + j_edge*cs_c; + double* restrict ai = a; + double* restrict bj = b + j_edge*cs_b; + + if ( 4 <= n_left ) + { + const dim_t nr_cur = 4; + + bli_dgemmsup_rv_haswell_asm_2x4 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rv_haswell_asm_2x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { + const dim_t nr_cur = 1; + + bli_dgemmsup_r_haswell_ref_2x1 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rv_haswell_asm_1x8n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter = k0 / 4; + uint64_t k_left = k0 % 4; + + uint64_t n_iter = n0 / 8; + uint64_t n_left = n0 % 8; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( n_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + //mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + mov(var(rs_b), r10) // load rs_b + //mov(var(cs_b), r11) // load cs_b + lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + //lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + // NOTE: We cannot pre-load elements of a or b + // because it could eventually, in the last + // unrolled iter or the cleanup loop, result + // in reading beyond the bounds allocated mem + // (the likely result: a segmentation fault). + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + // During preamble and loops: + // r12 = rcx = c + // r14 = rbx = b + // read rax from var(a) near beginning of loop + // r11 = m dim index ii + + mov(var(n_iter), r11) // jj = n_iter; + + label(.DLOOP1X8J) // LOOP OVER jj = [ n_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) +#endif + + mov(var(a), rax) // load address of a. + //mov(r12, rcx) // reset rcx to current utile of c. + mov(r14, rbx) // reset rbx to current upanel of b. + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLPFETCH) // jump to column storage case + label(.DROWPFETCH) // row-stored prefetching on c + + //lea(mem(r12, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(r12, 7*8)) // prefetch c + 0*rs_c + + jmp(.DPOSTPFETCH) // jump to end of prefetching c + label(.DCOLPFETCH) // column-stored prefetching c + + mov(var(cs_c), rsi) // load cs_c to rsi (temporarily) + lea(mem(, rsi, 8), rsi) // cs_c *= sizeof(double) + lea(mem(r12, rsi, 2), rdx) // + lea(mem(rdx, rsi, 1), rdx) // rdx = c + 3*cs_c; + prefetch(0, mem(r12, 0*8)) // prefetch c + 0*cs_c + prefetch(0, mem(r12, rsi, 1, 0*8)) // prefetch c + 1*cs_c + prefetch(0, mem(r12, rsi, 2, 0*8)) // prefetch c + 2*cs_c + prefetch(0, mem(rdx, 1*8)) // prefetch c + 3*cs_c + prefetch(0, mem(rdx, rsi, 1, 0*8)) // prefetch c + 4*cs_c + prefetch(0, mem(rdx, rsi, 2, 0*8)) // prefetch c + 5*cs_c + lea(mem(rdx, rsi, 2), rdx) // rdx = c + 5*cs_c; + prefetch(0, mem(rdx, rsi, 1, 0*8)) // prefetch c + 6*cs_c + prefetch(0, mem(rdx, rsi, 2, 0*8)) // prefetch c + 7*cs_c + + label(.DPOSTPFETCH) // done prefetching c + +#if 1 + //lea(mem(r10, r10, 2), rcx) // rcx = 3*rs_b; + + // use byte offsets from rbx to + // prefetch lines from next upanel + // of b. +#endif + + + + + mov(var(k_iter), rsi) // i = k_iter; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT) // if i == 0, jump to code that + // contains the k_left loop. + + + label(.DLOOPKITER) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + //prefetch(0, mem(rdx, 11*8)) // prefetch line of next upanel of b + prefetch(0, mem(rbx, 11*8)) // prefetch line of next upanel of b +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + + + // ---------------------------------- iteration 1 + +#if 1 + //prefetch(0, mem(rdx, r10, 1, 11*8)) + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + + + // ---------------------------------- iteration 2 + +#if 1 + //prefetch(0, mem(rdx, r10, 2, 11*8)) + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + + + // ---------------------------------- iteration 3 + +#if 1 + //prefetch(0, mem(rdx, rcx, 1, 11*8)) + //lea(mem(rdx, r10, 4), rdx) // a_prefetch += 4*cs_a; + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER) // iterate again if i != 0. + + + + + + + label(.DCONSIDKLEFT) + + mov(var(k_left), rsi) // i = k_left; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left loop. + + + label(.DLOOPKLEFT) // EDGE LOOP + +#if 1 + prefetch(0, mem(rbx, 11*8)) +#endif + + vmovupd(mem(rbx, 0*32), ymm0) + vmovupd(mem(rbx, 1*32), ymm1) + add(r10, rbx) // b += rs_b; + + vbroadcastsd(mem(rax ), ymm2) + add(r9, rax) // a += cs_a; + vfmadd231pd(ymm0, ymm2, ymm4) + vfmadd231pd(ymm1, ymm2, ymm5) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT) // iterate again if i != 0. + + + + label(.DPOSTACCUM) + + + + mov(r12, rcx) // reset rcx to current utile of c. + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + //lea(mem(rcx, rsi, 4), rdx) // load address of c + 4*cs_c; + //lea(mem(rcx, rdi, 4), rdx) // load address of c + 4*rs_c; + + lea(mem(rsi, rsi, 2), rax) // rax = 3*cs_c; + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORED) // jump to column storage case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + + vfmadd231pd(mem(rcx, rsi, 4), ymm3, ymm5) + vmovupd(ymm5, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORED) + + + vmovlpd(mem(rcx), xmm0, xmm0) + vmovhpd(mem(rcx, rsi, 1), xmm0, xmm0) + vmovlpd(mem(rcx, rsi, 2), xmm1, xmm1) + vmovhpd(mem(rcx, rax, 1), xmm1, xmm1) + vperm2f128(imm(0x20), ymm1, ymm0, ymm0) + + vfmadd213pd(ymm4, ymm3, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + vmovlpd(xmm1, mem(rcx, rsi, 2)) + vmovhpd(xmm1, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vmovlpd(mem(rcx), xmm0, xmm0) + vmovhpd(mem(rcx, rsi, 1), xmm0, xmm0) + vmovlpd(mem(rcx, rsi, 2), xmm1, xmm1) + vmovhpd(mem(rcx, rax, 1), xmm1, xmm1) + vperm2f128(imm(0x20), ymm1, ymm0, ymm0) + + vfmadd213pd(ymm5, ymm3, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + vmovlpd(xmm1, mem(rcx, rsi, 2)) + vmovhpd(xmm1, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + cmp(imm(8), rdi) // set ZF if (8*rs_c) == 8. + jz(.DCOLSTORBZ) // jump to column storage case + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + vmovupd(ymm5, mem(rcx, rsi, 4)) + //add(rdi, rcx) + + + jmp(.DDONE) // jump to end. + + + + label(.DCOLSTORBZ) + + + vmovupd(ymm4, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + vmovlpd(xmm1, mem(rcx, rsi, 2)) + vmovhpd(xmm1, mem(rcx, rax, 1)) + + lea(mem(rcx, rsi, 4), rcx) + + + vmovupd(ymm5, ymm0) + + vextractf128(imm(1), ymm0, xmm1) + vmovlpd(xmm0, mem(rcx)) + vmovhpd(xmm0, mem(rcx, rsi, 1)) + vmovlpd(xmm1, mem(rcx, rsi, 2)) + vmovhpd(xmm1, mem(rcx, rax, 1)) + + //lea(mem(rcx, rsi, 4), rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rsi, 8), r12) // c_jj = r12 += 8*cs_c + + add(imm(8*8), r14) // b_jj = r14 += 8*cs_b + + dec(r11) // jj -= 1; + jne(.DLOOP1X8J) // iterate again if jj != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [n_iter] "m" (n_iter), + [k_iter] "m" (k_iter), + [k_left] "m" (k_left), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( n_left ) + { + const dim_t mr_cur = 1; + const dim_t j_edge = n0 - ( dim_t )n_left; + + double* restrict cij = c + j_edge*cs_c; + double* restrict ai = a; + double* restrict bj = b + j_edge*cs_b; + + if ( 4 <= n_left ) + { + const dim_t nr_cur = 4; + + bli_dgemmsup_rv_haswell_asm_1x4 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rv_haswell_asm_1x2 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 1 + const dim_t nr_cur = 1; + + bli_dgemmsup_r_haswell_ref_1x1 + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_ddotxv_ex + ( + conja, conjb, k0, + alpha, ai, cs_a0, bj, rs_b0, + beta, cij, cntx, NULL + ); +#endif + } + } +} + diff --git a/kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8.c b/kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8.c new file mode 100644 index 000000000..c5addd9cf --- /dev/null +++ b/kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8.c @@ -0,0 +1,5249 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" + +#define BLIS_ASM_SYNTAX_ATT +#include "bli_x86_asm_macros.h" + +/* + rrc: + -------- ------ | | | | | | | | + -------- ------ | | | | | | | | + -------- += ------ ... | | | | | | | | + -------- ------ | | | | | | | | + -------- ------ : + -------- ------ : + + Assumptions: + - C is row-stored and B is column-stored; + - A is row-stored; + - m0 and n0 are at most MR and NR, respectively. + Therefore, this (r)ow-preferential microkernel is well-suited for + a dot-product-based accumulation that performs vector loads from + both A and B. +*/ + +// Prototype reference microkernels. +GEMMSUP_KER_PROT( float, s, gemmsup_r_haswell_ref ) +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref ) +GEMMSUP_KER_PROT( scomplex, c, gemmsup_r_haswell_ref ) +GEMMSUP_KER_PROT( dcomplex, z, gemmsup_r_haswell_ref ) + +// Define parameters and variables for edge case kernel map. +#define NUM_MR 4 +#define NUM_NR 4 +#define FUNCPTR_T dgemmsup_ker_ft + +static dim_t mrs[NUM_MR] = { 6, 3, 2, 1 }; +static dim_t nrs[NUM_NR] = { 8, 4, 2, 1 }; +static FUNCPTR_T kmap[NUM_MR][NUM_NR] = +{ /* 8 4 2 1 */ +/* 6 */ { bli_dgemmsup_rd_haswell_asm_6x8, bli_dgemmsup_rd_haswell_asm_6x4, bli_dgemmsup_rd_haswell_asm_6x2, bli_dgemmsup_r_haswell_ref }, +/* 3 */ { bli_dgemmsup_rd_haswell_asm_3x8, bli_dgemmsup_rd_haswell_asm_3x4, bli_dgemmsup_rd_haswell_asm_3x2, bli_dgemmsup_r_haswell_ref }, +/* 2 */ { bli_dgemmsup_rd_haswell_asm_2x8, bli_dgemmsup_rd_haswell_asm_2x4, bli_dgemmsup_rd_haswell_asm_2x2, bli_dgemmsup_r_haswell_ref }, +/* 1 */ { bli_dgemmsup_rd_haswell_asm_1x8, bli_dgemmsup_rd_haswell_asm_1x4, bli_dgemmsup_rd_haswell_asm_1x2, bli_dgemmsup_r_haswell_ref } +}; + + +void bli_dgemmsup_rd_haswell_asm_6x8 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + // Use a reference kernel if this is an edge case in the m or n + // dimensions. + if ( m0 < 6 || n0 < 8 ) + { + dim_t n_left = n0; + double* restrict cj = c; + double* restrict bj = b; + + // Iterate across columns (corresponding to elements of nrs) until + // n_left is zero. + for ( dim_t j = 0; n_left != 0; ++j ) + { + const dim_t nr_cur = nrs[ j ]; + + // Once we find the value of nrs that is less than (or equal to) + // n_left, we use the kernels in that column. + if ( nr_cur <= n_left ) + { + dim_t m_left = m0; + double* restrict cij = cj; + double* restrict ai = a; + + // Iterate down the current column (corresponding to elements + // of mrs) until m_left is zero. + for ( dim_t i = 0; m_left != 0; ++i ) + { + const dim_t mr_cur = mrs[ i ]; + + // Once we find the value of mrs that is less than (or equal + // to) m_left, we select that kernel. + if ( mr_cur <= m_left ) + { + FUNCPTR_T ker_fp = kmap[i][j]; + + //printf( "executing %d x %d sup kernel.\n", (int)mr_cur, (int)nr_cur ); + + // Call the kernel using current mrs and nrs values. + ker_fp + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + + // Advance C and A pointers by the mrs and nrs we just + // used, and decrement m_left. + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + } + + // Advance C and B pointers by the mrs and nrs we just used, and + // decrement n_left. + cj += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + } + + return; + } + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r12) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r10) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r10 = rcx = c + // r12 = rax = a + // r14 = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + +#if 1 + mov(imm(0), r9) // ii = 0; + + label(.DLOOP3X4I) // LOOP OVER ii = [ 0 1 ... ] + + + + lea(mem( , r9, 1), rsi) // rsi = r9 = 3*ii; + imul(rdi, rsi) // rsi *= rs_c; + lea(mem(r10, rsi, 1), rdx) // rdx = c_jj + 3*ii*rs_c; + + lea(mem( , r9, 1), rsi) // rsi = r9 = 3*ii; + imul(r8, rsi) // rsi *= rs_a; + lea(mem(r12, rsi, 1), r12) // rax = a + 3*ii*rs_a; + + + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + vzeroall() // zero all xmm/ymm registers. + + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(rdx, rsi, 1), rcx) // rcx = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(r14, rsi, 1), rbx) // rbx = b + 4*jj*cs_b; + + lea(mem( , r12, 1), rax) // rax = a_ii; +#endif + +#if 0 + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c +#else + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + +#if 1 + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + add(imm(3), r9) // ii += 3; + cmp(imm(3), r9) // compare ii to 3 + jle(.DLOOP3X4I) // if ii <= 3, jump to beginning +#endif + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_3x8 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r12) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r10) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r10 = rcx = c + // r12 = rax = a + // r14 = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + + + vzeroall() // zero all xmm/ymm registers. + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r10, rsi, 1), rcx) // rcx = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(r14, rsi, 1), rbx) // rbx = b + 4*jj*cs_b; + + lea(mem( , r12, 1), rax) // rax = a; + + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_2x8 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r12) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r10) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r10 = rcx = c + // r12 = rax = a + // r14 = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + + + vzeroall() // zero all xmm/ymm registers. + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r10, rsi, 1), rcx) // rcx = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(r14, rsi, 1), rbx) // rbx = b + 4*jj*cs_b; + + lea(mem( , r12, 1), rax) // rax = a; + + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x8 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r12) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r10) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r10 = rcx = c + // r12 = rax = a + // r14 = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + + + vzeroall() // zero all xmm/ymm registers. + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r10, rsi, 1), rcx) // rcx = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(r14, rsi, 1), rbx) // rbx = b + 4*jj*cs_b; + + lea(mem( , r12, 1), rax) // rax = a; + + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + + + + + + + mov(var(cs_c), rsi) // load cs_c + lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_6x4 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r12) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r10) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r10 = rcx = c + // r12 = rax = a + // r14 = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + + mov(imm(0), r9) // ii = 0; + + label(.DLOOP3X4I) // LOOP OVER ii = [ 0 1 ... ] + + + + vzeroall() // zero all xmm/ymm registers. + + lea(mem( , r9, 1), rsi) // rsi = r9 = 3*ii; + imul(rdi, rsi) // rsi *= rs_c; + lea(mem(r10, rsi, 1), rcx) // rcx = c + 3*ii*rs_c; + + lea(mem( , r9, 1), rsi) // rsi = r9 = 3*ii; + imul(r8, rsi) // rsi *= rs_a; + lea(mem(r12, rsi, 1), rax) // rax = a + 3*ii*rs_a; + + lea(mem( , r14, 1), rbx) // rbx = b; + + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(3), r9) // ii += 3; + cmp(imm(3), r9) // compare ii to 3 + jle(.DLOOP3X4I) // if ii <= 3, jump to beginning + // of ii loop; otherwise, loop ends. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_3x4 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_2x4 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x4 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | | | + -------- -- -- -- ... | | | | + -------- += -- -- -- | | | | + -------- | | | | + -------- : + -------- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_6x2 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | + -------- -- -- -- ... | | + -------- += -- -- -- | | + -------- -- -- -- | | + -------- -- -- -- : + -------- -- -- -- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + lea(mem(rcx, rdi, 2), rdx) // + lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + prefetch(0, mem(rdx, 7*8)) // prefetch c + 3*rs_c + prefetch(0, mem(rdx, rdi, 1, 7*8)) // prefetch c + 4*rs_c + prefetch(0, mem(rdx, rdi, 2, 7*8)) // prefetch c + 5*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovsd(mem(rax, r8, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovsd(mem(rax, r13, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rax, r8, 4), xmm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovsd(mem(rax, r15, 1), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + // ymm8 ymm9 + // ymm10 ymm11 + // ymm12 ymm13 + // ymm14 ymm15 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + vhaddpd( ymm9, ymm8, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm8 ) + + vhaddpd( ymm11, ymm10, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm10 ) + + vhaddpd( ymm13, ymm12, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm12 ) + + vhaddpd( ymm15, ymm14, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm14 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + // xmm8 = sum(ymm8) sum(ymm9) + // xmm10 = sum(ymm10) sum(ymm11) + // xmm12 = sum(ymm12) sum(ymm13) + // xmm14 = sum(ymm14) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + vmulpd(xmm0, xmm10, xmm10) + vmulpd(xmm0, xmm12, xmm12) + vmulpd(xmm0, xmm14, xmm14) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm10) + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm12) + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm14) + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_3x2 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | + -------- -- -- -- ... | | + -------- += -- -- -- | | + -------- -- -- -- | | + -------- -- -- -- : + -------- -- -- -- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovsd(mem(rax, r8, 2), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + // ymm8 ymm9 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + vhaddpd( ymm9, ymm8, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm8 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + // xmm8 = sum(ymm8) sum(ymm9) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm8, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_2x2 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | + -------- -- -- -- ... | | + -------- += -- -- -- | | + -------- -- -- -- | | + -------- -- -- -- : + -------- -- -- -- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x2 + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | + -------- -- -- -- ... | | + -------- += -- -- -- | | + -------- -- -- -- | | + -------- -- -- -- : + -------- -- -- -- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + + vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + // xmm4 = sum(ymm4) sum(ymm5) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + diff --git a/kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8m.c b/kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8m.c new file mode 100644 index 000000000..55ae6d0f9 --- /dev/null +++ b/kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8m.c @@ -0,0 +1,5543 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" + +#define BLIS_ASM_SYNTAX_ATT +#include "bli_x86_asm_macros.h" + +/* + rrc: + -------- ------ | | | | | | | | + -------- ------ | | | | | | | | + -------- += ------ ... | | | | | | | | + -------- ------ | | | | | | | | + -------- ------ : + -------- ------ : + + Assumptions: + - C is row-stored and B is column-stored; + - A is row-stored; + - m0 and n0 are at most MR and NR, respectively. + Therefore, this (r)ow-preferential microkernel is well-suited for + a dot-product-based accumulation that performs vector loads from + both A and B. +*/ + +// Prototype reference microkernels. +GEMMSUP_KER_PROT( float, s, gemmsup_r_haswell_ref ) +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref ) +GEMMSUP_KER_PROT( scomplex, c, gemmsup_r_haswell_ref ) +GEMMSUP_KER_PROT( dcomplex, z, gemmsup_r_haswell_ref ) + +// Define parameters and variables for edge case kernel map. +#define NUM_MR 4 +#define NUM_NR 4 +#define FUNCPTR_T dgemmsup_ker_ft + +#if 0 +static dim_t mrs[NUM_MR] = { 6, 3, 2, 1 }; +static dim_t nrs[NUM_NR] = { 8, 4, 2, 1 }; +static FUNCPTR_T kmap[NUM_MR][NUM_NR] = +{ /* 8 4 2 1 */ +/* 6 */ { bli_dgemmsup_rd_haswell_asm_6x8m, bli_dgemmsup_rd_haswell_asm_6x4m, bli_dgemmsup_rd_haswell_asm_6x2m, bli_dgemmsup_r_haswell_ref }, +/* 3 */ { bli_dgemmsup_rd_haswell_asm_3x8m, bli_dgemmsup_rd_haswell_asm_3x4m, bli_dgemmsup_rd_haswell_asm_3x2m, bli_dgemmsup_r_haswell_ref }, +/* 2 */ { bli_dgemmsup_rd_haswell_asm_2x8m, bli_dgemmsup_rd_haswell_asm_2x4m, bli_dgemmsup_rd_haswell_asm_2x2m, bli_dgemmsup_r_haswell_ref }, +/* 1 */ { bli_dgemmsup_rd_haswell_asm_1x8m, bli_dgemmsup_rd_haswell_asm_1x4m, bli_dgemmsup_rd_haswell_asm_1x2m, bli_dgemmsup_r_haswell_ref } +}; +#endif + + +void bli_dgemmsup_rd_haswell_asm_6x8m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + uint64_t n_left = n0 % 8; + + // First check whether this is a edge case in the n dimension. If so, + // dispatch other 6x?m kernels, as needed. + if ( n_left ) + { + double* restrict cij = c; + double* restrict bj = b; + double* restrict ai = a; + + if ( 4 <= n_left ) + { + const dim_t nr_cur = 4; + + bli_dgemmsup_rd_haswell_asm_6x4m + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_6x2m + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 0 + const dim_t nr_cur = 1; + + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_NO_TRANSPOSE, conjb, m0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, + beta, cij, rs_c0, cntx, NULL + ); +#endif + } + return; + } + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t m_iter = m0 / 3; + uint64_t m_left = m0 % 3; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + //mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + lea(mem(r8, r8, 2), r10) // r10 = 3*rs_a + + + //mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + + + mov(var(a), r14) // load address of a + mov(var(c), r12) // load address of c + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r12, rsi, 1), r12) // r12 = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(rdx, rsi, 1), rdx) // rbx = b + 4*jj*cs_b; + + + + mov(var(m_iter), r9) // ii = m_iter; + + label(.DLOOP3X4I) // LOOP OVER ii = [ m_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem(r12), rcx) // rcx = c_iijj; + lea(mem(r14), rax) // rax = a_ii; + lea(mem(rdx), rbx) // rbx = b_jj; + + +#if 0 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + lea(mem(r8, r8, 4), rdi) // rdi = 5*rs_a + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 2), r12) // + lea(mem(r12, rdi, 1), r12) // c_ii = r12 += 3*rs_c + + lea(mem(r14, r8, 2), r14) // + lea(mem(r14, r8, 1), r14) // a_ii = r14 += 3*rs_a + + dec(r9) // ii -= 1; + jne(.DLOOP3X4I) // iterate again if ii != 0. + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 8; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict bj = b; + double* restrict ai = a + i_edge*rs_a; + + if ( 2 == m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x8m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + //cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x8m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rd_haswell_asm_3x8m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = unused + // r15 = n dim index jj + // r10 = unused + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r12, rsi, 1), rcx) // rcx = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(rdx, rsi, 1), rbx) // rbx = b + 4*jj*cs_b; + + lea(mem(r14), rax) // rax = a; + + +#if 0 + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c +#else + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_2x8m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = unused + // r15 = n dim index jj + // r10 = unused + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) +#endif + + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r12, rsi, 1), rcx) // rcx = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(rdx, rsi, 1), rbx) // rbx = b + 4*jj*cs_b; + + lea(mem(r14), rax) // rax = a; + + +#if 0 + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c +#else + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c +#endif + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x8m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm13, ymm13, ymm13) +#endif + + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r12, rsi, 1), rcx) // rcx = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(rdx, rsi, 1), rbx) // rbx = b + 4*jj*cs_b; + + lea(mem(r14), rax) // rax = a; + + +#if 0 + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c +#else + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c +#endif + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_6x4m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t m_iter = m0 / 3; + uint64_t m_left = m0 % 3; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + lea(mem(r8, r8, 2), r10) // r10 = 3*rs_a + + + mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + // r10 = unused + + mov(var(m_iter), r9) // ii = m_iter; + + label(.DLOOP3X4I) // LOOP OVER ii = [ m_iter .. 1 0 ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem(r12), rcx) // rcx = c + 3*ii*rs_c; + lea(mem(r14), rax) // rax = a + 3*ii*rs_a; + lea(mem(rdx), rbx) // rbx = b; + + +#if 0 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + lea(mem(r8, r8, 4), rdi) // rdi = 5*rs_a + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 2), r12) // + lea(mem(r12, rdi, 1), r12) // c_ii = r12 += 3*rs_c + + lea(mem(r14, r8, 2), r14) // + lea(mem(r14, r8, 1), r14) // a_ii = r14 += 3*rs_a + + dec(r9) // ii -= 1; + jne(.DLOOP3X4I) // iterate again if ii != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 4; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict bj = b; + double* restrict ai = a + i_edge*rs_a; + + if ( 2 == m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x4m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + //cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x4m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rd_haswell_asm_3x4m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_2x4m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x4m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | | | + -------- -- -- -- ... | | | | + -------- += -- -- -- | | | | + -------- | | | | + -------- : + -------- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm13, ymm13, ymm13) +#endif + + mov(var(a), rax) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), rcx) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_6x2m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t m_iter = m0 / 6; + uint64_t m_left = m0 % 6; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + + mov(var(m_iter), r9) // ii = m_iter; + + label(.DLOOP3X4I) // LOOP OVER ii = [ m_iter ... 1 0 ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem(r12), rcx) // rcx = c + 6*ii*rs_c; + lea(mem(r14), rax) // rax = a + 6*ii*rs_a; + lea(mem(rdx), rbx) // rbx = b; + + + lea(mem(rcx, rdi, 2), r10) // + lea(mem(r10, rdi, 1), r10) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 1*8)) // prefetch c + 2*rs_c + prefetch(0, mem(r10, 1*8)) // prefetch c + 3*rs_c + prefetch(0, mem(r10, rdi, 1, 1*8)) // prefetch c + 4*rs_c + prefetch(0, mem(r10, rdi, 2, 1*8)) // prefetch c + 5*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovsd(mem(rax, r8, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovsd(mem(rax, r13, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rax, r8, 4), xmm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovsd(mem(rax, r15, 1), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + // ymm8 ymm9 + // ymm10 ymm11 + // ymm12 ymm13 + // ymm14 ymm15 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + vhaddpd( ymm9, ymm8, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm8 ) + + vhaddpd( ymm11, ymm10, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm10 ) + + vhaddpd( ymm13, ymm12, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm12 ) + + vhaddpd( ymm15, ymm14, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm14 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + // xmm8 = sum(ymm8) sum(ymm9) + // xmm10 = sum(ymm10) sum(ymm11) + // xmm12 = sum(ymm12) sum(ymm13) + // xmm14 = sum(ymm14) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + vmulpd(xmm0, xmm10, xmm10) + vmulpd(xmm0, xmm12, xmm12) + vmulpd(xmm0, xmm14, xmm14) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm10) + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm12) + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm14) + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 4), r12) // + lea(mem(r12, rdi, 2), r12) // c_ii = r12 += 6*rs_c + + lea(mem(r14, r8, 4), r14) // + lea(mem(r14, r8, 2), r14) // a_ii = r14 += 6*rs_a + + dec(r9) // ii -= 1; + jne(.DLOOP3X4I) // iterate again if ii != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 2; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict bj = b; + double* restrict ai = a + i_edge*rs_a; + + if ( 3 <= m_left ) + { + const dim_t mr_cur = 3; + + bli_dgemmsup_rd_haswell_asm_3x2m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 2 <= m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x2m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x2m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rd_haswell_asm_3x2m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 1*8)) // prefetch c + 2*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovsd(mem(rax, r8, 2), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + // ymm8 ymm9 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + vhaddpd( ymm9, ymm8, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm8 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + // xmm8 = sum(ymm8) sum(ymm9) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm8, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_2x2m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | + -------- -- -- -- ... | | + -------- += -- -- -- | | + -------- -- -- -- | | + -------- -- -- -- : + -------- -- -- -- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x2m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | + -------- -- -- -- ... | | + -------- += -- -- -- | | + -------- -- -- -- | | + -------- -- -- -- : + -------- -- -- -- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) +#endif + + mov(var(a), rax) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + // xmm4 = sum(ymm4) sum(ymm5) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + diff --git a/kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8m.c.newji b/kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8m.c.newji new file mode 100644 index 000000000..c1cb37214 --- /dev/null +++ b/kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8m.c.newji @@ -0,0 +1,5628 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" + +#define BLIS_ASM_SYNTAX_ATT +#include "bli_x86_asm_macros.h" + +/* + rrc: + -------- ------ | | | | | | | | + -------- ------ | | | | | | | | + -------- += ------ ... | | | | | | | | + -------- ------ | | | | | | | | + -------- ------ : + -------- ------ : + + Assumptions: + - C is row-stored and B is column-stored; + - A is row-stored; + - m0 and n0 are at most MR and NR, respectively. + Therefore, this (r)ow-preferential microkernel is well-suited for + a dot-product-based accumulation that performs vector loads from + both A and B. +*/ + +// Prototype reference microkernels. +GEMMSUP_KER_PROT( float, s, gemmsup_r_haswell_ref ) +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref ) +GEMMSUP_KER_PROT( scomplex, c, gemmsup_r_haswell_ref ) +GEMMSUP_KER_PROT( dcomplex, z, gemmsup_r_haswell_ref ) + +// Define parameters and variables for edge case kernel map. +#define NUM_MR 4 +#define NUM_NR 4 +#define FUNCPTR_T dgemmsup_ker_ft + +#if 0 +static dim_t mrs[NUM_MR] = { 6, 3, 2, 1 }; +static dim_t nrs[NUM_NR] = { 8, 4, 2, 1 }; +static FUNCPTR_T kmap[NUM_MR][NUM_NR] = +{ /* 8 4 2 1 */ +/* 6 */ { bli_dgemmsup_rd_haswell_asm_6x8m, bli_dgemmsup_rd_haswell_asm_6x4m, bli_dgemmsup_rd_haswell_asm_6x2m, bli_dgemmsup_r_haswell_ref }, +/* 3 */ { bli_dgemmsup_rd_haswell_asm_3x8m, bli_dgemmsup_rd_haswell_asm_3x4m, bli_dgemmsup_rd_haswell_asm_3x2m, bli_dgemmsup_r_haswell_ref }, +/* 2 */ { bli_dgemmsup_rd_haswell_asm_2x8m, bli_dgemmsup_rd_haswell_asm_2x4m, bli_dgemmsup_rd_haswell_asm_2x2m, bli_dgemmsup_r_haswell_ref }, +/* 1 */ { bli_dgemmsup_rd_haswell_asm_1x8m, bli_dgemmsup_rd_haswell_asm_1x4m, bli_dgemmsup_rd_haswell_asm_1x2m, bli_dgemmsup_r_haswell_ref } +}; +#endif + + +void bli_dgemmsup_rd_haswell_asm_6x8m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + uint64_t n_left = n0 % 8; + + // First check whether this is a edge case in the n dimension. If so, + // dispatch other 6x?m kernels, as needed. + if ( n_left ) + { + double* restrict cij = c; + double* restrict bj = b; + double* restrict ai = a; + + if ( 4 <= n_left ) + { + const dim_t nr_cur = 4; + + bli_dgemmsup_rd_haswell_asm_6x4m + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_6x2m + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 0 + const dim_t nr_cur = 1; + + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_NO_TRANSPOSE, conjb, m0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, + beta, cij, rs_c0, cntx, NULL + ); +#endif + } + return; + } + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t m_iter = m0 / 3; + uint64_t m_left = m0 % 3; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + //mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + lea(mem(r8, r8, 2), r10) // r10 = 3*rs_a + + + //mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + // r10 = unused + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + + + mov(var(a), r14) // load address of a + mov(var(c), r12) // load address of c + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r12, rsi, 1), r12) // r12 = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(rdx, rsi, 1), rdx) // rbx = b + 4*jj*cs_b; + + + + mov(var(m_iter), r9) // ii = m_iter; + + label(.DLOOP3X4I) // LOOP OVER ii = [ m_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem(r12), rcx) // rcx = c_iijj; + lea(mem(r14), rax) // rax = a_ii; + lea(mem(rdx), rbx) // rbx = b_jj; + + +#if 0 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + lea(mem(r8, r8, 4), rdi) // rdi = 5*rs_a + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 2), r12) // + lea(mem(r12, rdi, 1), r12) // c_ii = r12 += 3*rs_c + + lea(mem(r14, r8, 2), r14) // + lea(mem(r14, r8, 1), r14) // a_ii = r14 += 3*rs_a + + dec(r9) // ii -= 1; + jne(.DLOOP3X4I) // iterate again if ii != 0. + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 8; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict bj = b; + double* restrict ai = a + i_edge*rs_a; + + if ( 2 == m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x8m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + //cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x8m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rd_haswell_asm_3x8m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = unused + // r15 = n dim index jj + // r10 = unused + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r12, rsi, 1), rcx) // rcx = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(rdx, rsi, 1), rbx) // rbx = b + 4*jj*cs_b; + + lea(mem(r14), rax) // rax = a; + + +#if 0 + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c +#else + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_2x8m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = unused + // r15 = n dim index jj + // r10 = unused + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) +#endif + + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r12, rsi, 1), rcx) // rcx = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(rdx, rsi, 1), rbx) // rbx = b + 4*jj*cs_b; + + lea(mem(r14), rax) // rax = a; + + +#if 0 + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c +#else + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c +#endif + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x8m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm13, ymm13, ymm13) +#endif + + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r12, rsi, 1), rcx) // rcx = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(rdx, rsi, 1), rbx) // rbx = b + 4*jj*cs_b; + + lea(mem(r14), rax) // rax = a; + + +#if 0 + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c +#else + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c +#endif + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_6x4m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t m_iter = m0 / 3; + uint64_t m_left = m0 % 3; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + // r10 = unused + + mov(var(m_iter), r9) // ii = m_iter; + + label(.DLOOP3X4I) // LOOP OVER ii = [ m_iter .. 1 0 ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem(r12), rcx) // rcx = c + 3*ii*rs_c; + lea(mem(r14), rax) // rax = a + 3*ii*rs_a; + lea(mem(rdx), rbx) // rbx = b; + + +#if 0 + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c +#else + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 2), r12) // + lea(mem(r12, rdi, 1), r12) // c_ii = r12 += 3*rs_c + + lea(mem(r14, r8, 2), r14) // + lea(mem(r14, r8, 1), r14) // a_ii = r14 += 3*rs_a + + dec(r9) // ii -= 1; + jne(.DLOOP3X4I) // iterate again if ii != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 4; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict bj = b; + double* restrict ai = a + i_edge*rs_a; + + if ( 2 == m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x4m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + //cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x4m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rd_haswell_asm_3x4m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_2x4m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x4m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | | | + -------- -- -- -- ... | | | | + -------- += -- -- -- | | | | + -------- | | | | + -------- : + -------- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm13, ymm13, ymm13) +#endif + + mov(var(a), rax) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), rcx) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_6x2m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t m_iter = m0 / 6; + uint64_t m_left = m0 % 6; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + + mov(var(m_iter), r9) // ii = m_iter; + + label(.DLOOP3X4I) // LOOP OVER ii = [ m_iter ... 1 0 ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem(r12), rcx) // rcx = c + 6*ii*rs_c; + lea(mem(r14), rax) // rax = a + 6*ii*rs_a; + lea(mem(rdx), rbx) // rbx = b; + + + lea(mem(rcx, rdi, 2), r10) // + lea(mem(r10, rdi, 1), r10) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c + prefetch(0, mem(r10, 3*8)) // prefetch c + 3*rs_c + prefetch(0, mem(r10, rdi, 1, 3*8)) // prefetch c + 4*rs_c + prefetch(0, mem(r10, rdi, 2, 3*8)) // prefetch c + 5*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovsd(mem(rax, r8, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovsd(mem(rax, r13, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rax, r8, 4), xmm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovsd(mem(rax, r15, 1), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + // ymm8 ymm9 + // ymm10 ymm11 + // ymm12 ymm13 + // ymm14 ymm15 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + vhaddpd( ymm9, ymm8, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm8 ) + + vhaddpd( ymm11, ymm10, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm10 ) + + vhaddpd( ymm13, ymm12, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm12 ) + + vhaddpd( ymm15, ymm14, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm14 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + // xmm8 = sum(ymm8) sum(ymm9) + // xmm10 = sum(ymm10) sum(ymm11) + // xmm12 = sum(ymm12) sum(ymm13) + // xmm14 = sum(ymm14) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + vmulpd(xmm0, xmm10, xmm10) + vmulpd(xmm0, xmm12, xmm12) + vmulpd(xmm0, xmm14, xmm14) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm10) + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm12) + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm14) + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 4), r12) // + lea(mem(r12, rdi, 2), r12) // c_ii = r12 += 6*rs_c + + lea(mem(r14, r8, 4), r14) // + lea(mem(r14, r8, 2), r14) // a_ii = r14 += 6*rs_a + + dec(r9) // ii -= 1; + jne(.DLOOP3X4I) // iterate again if ii != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 2; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict bj = b; + double* restrict ai = a + i_edge*rs_a; + + if ( 3 <= m_left ) + { + const dim_t mr_cur = 3; + + bli_dgemmsup_rd_haswell_asm_3x2m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 2 <= m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x2m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x2m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rd_haswell_asm_3x2m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 1*8)) // prefetch c + 2*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovsd(mem(rax, r8, 2), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + // ymm8 ymm9 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + vhaddpd( ymm9, ymm8, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm8 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + // xmm8 = sum(ymm8) sum(ymm9) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm8, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_2x2m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | + -------- -- -- -- ... | | + -------- += -- -- -- | | + -------- -- -- -- | | + -------- -- -- -- : + -------- -- -- -- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x2m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | + -------- -- -- -- ... | | + -------- += -- -- -- | | + -------- -- -- -- | | + -------- -- -- -- : + -------- -- -- -- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) +#endif + + mov(var(a), rax) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + // xmm4 = sum(ymm4) sum(ymm5) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + diff --git a/kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8m.c.worksij b/kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8m.c.worksij new file mode 100644 index 000000000..fd1c2ae65 --- /dev/null +++ b/kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8m.c.worksij @@ -0,0 +1,5634 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" + +#define BLIS_ASM_SYNTAX_ATT +#include "bli_x86_asm_macros.h" + +/* + rrc: + -------- ------ | | | | | | | | + -------- ------ | | | | | | | | + -------- += ------ ... | | | | | | | | + -------- ------ | | | | | | | | + -------- ------ : + -------- ------ : + + Assumptions: + - C is row-stored and B is column-stored; + - A is row-stored; + - m0 and n0 are at most MR and NR, respectively. + Therefore, this (r)ow-preferential microkernel is well-suited for + a dot-product-based accumulation that performs vector loads from + both A and B. +*/ + +// Prototype reference microkernels. +GEMMSUP_KER_PROT( float, s, gemmsup_r_haswell_ref ) +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref ) +GEMMSUP_KER_PROT( scomplex, c, gemmsup_r_haswell_ref ) +GEMMSUP_KER_PROT( dcomplex, z, gemmsup_r_haswell_ref ) + +// Define parameters and variables for edge case kernel map. +#define NUM_MR 4 +#define NUM_NR 4 +#define FUNCPTR_T dgemmsup_ker_ft + +#if 0 +static dim_t mrs[NUM_MR] = { 6, 3, 2, 1 }; +static dim_t nrs[NUM_NR] = { 8, 4, 2, 1 }; +static FUNCPTR_T kmap[NUM_MR][NUM_NR] = +{ /* 8 4 2 1 */ +/* 6 */ { bli_dgemmsup_rd_haswell_asm_6x8m, bli_dgemmsup_rd_haswell_asm_6x4m, bli_dgemmsup_rd_haswell_asm_6x2m, bli_dgemmsup_r_haswell_ref }, +/* 3 */ { bli_dgemmsup_rd_haswell_asm_3x8m, bli_dgemmsup_rd_haswell_asm_3x4m, bli_dgemmsup_rd_haswell_asm_3x2m, bli_dgemmsup_r_haswell_ref }, +/* 2 */ { bli_dgemmsup_rd_haswell_asm_2x8m, bli_dgemmsup_rd_haswell_asm_2x4m, bli_dgemmsup_rd_haswell_asm_2x2m, bli_dgemmsup_r_haswell_ref }, +/* 1 */ { bli_dgemmsup_rd_haswell_asm_1x8m, bli_dgemmsup_rd_haswell_asm_1x4m, bli_dgemmsup_rd_haswell_asm_1x2m, bli_dgemmsup_r_haswell_ref } +}; +#endif + + +void bli_dgemmsup_rd_haswell_asm_6x8m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ + uint64_t n_left = n0 % 8; + + // First check whether this is a edge case in the n dimension. If so, + // dispatch other 6x?m kernels, as needed. + if ( n_left ) + { + double* restrict cij = c; + double* restrict bj = b; + double* restrict ai = a; + + if ( 4 <= n_left ) + { + const dim_t nr_cur = 4; + + bli_dgemmsup_rd_haswell_asm_6x4m + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_6x2m + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 0 + const dim_t nr_cur = 1; + + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_NO_TRANSPOSE, conjb, m0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, + beta, cij, rs_c0, cntx, NULL + ); +#endif + } + return; + } + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t m_iter = m0 / 3; + uint64_t m_left = m0 % 3; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + lea(mem(r8, r8, 2), r10) // r10 = 3*rs_a + + + mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + + mov(var(m_iter), r9) // ii = m_iter; + + label(.DLOOP3X4I) // LOOP OVER ii = [ m_iter ... 1 0 ] + + + + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r12, rsi, 1), rcx) // rcx = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(rdx, rsi, 1), rbx) // rbx = b + 4*jj*cs_b; + + lea(mem(r14), rax) // rax = a_ii; + + +#if 0 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + lea(mem(r8, r8, 4), rdi) // rdi = 5*rs_a + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + lea(mem(r12, rdi, 2), r12) // + lea(mem(r12, rdi, 1), r12) // c_ii = r12 += 3*rs_c + + lea(mem(r14, r8, 2), r14) // + lea(mem(r14, r8, 1), r14) // a_ii = r14 += 3*rs_a + + dec(r9) // ii -= 1; + jne(.DLOOP3X4I) // iterate again if ii != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 8; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict bj = b; + double* restrict ai = a + i_edge*rs_a; + + if ( 2 == m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x8m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + //cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x8m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rd_haswell_asm_3x8m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = unused + // r15 = n dim index jj + // r10 = unused + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r12, rsi, 1), rcx) // rcx = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(rdx, rsi, 1), rbx) // rbx = b + 4*jj*cs_b; + + lea(mem(r14), rax) // rax = a; + + +#if 0 + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 7*8)) // prefetch c + 2*rs_c +#else + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_2x8m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = unused + // r15 = n dim index jj + // r10 = unused + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) +#endif + + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r12, rsi, 1), rcx) // rcx = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(rdx, rsi, 1), rbx) // rbx = b + 4*jj*cs_b; + + lea(mem(r14), rax) // rax = a; + + +#if 0 + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 7*8)) // prefetch c + 1*rs_c +#else + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c +#endif + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x8m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + + mov(imm(0), r15) // jj = 0; + + label(.DLOOP3X4J) // LOOP OVER jj = [ 0 1 ... ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm13, ymm13, ymm13) +#endif + + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(imm(1*8), rsi) // rsi *= cs_c = 1*8 + lea(mem(r12, rsi, 1), rcx) // rcx = c + 4*jj*cs_c; + + lea(mem( , r15, 1), rsi) // rsi = r15 = 4*jj; + imul(r11, rsi) // rsi *= cs_b; + lea(mem(rdx, rsi, 1), rbx) // rbx = b + 4*jj*cs_b; + + lea(mem(r14), rax) // rax = a; + + +#if 0 + prefetch(0, mem(rcx, 7*8)) // prefetch c + 0*rs_c +#else + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c +#endif + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4), r15) // jj += 4; + cmp(imm(4), r15) // compare jj to 4 + jle(.DLOOP3X4J) // if jj <= 4, jump to beginning + // of jj loop; otherwise, loop ends. + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_6x4m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t m_iter = m0 / 3; + uint64_t m_left = m0 % 3; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + lea(mem(r8, r8, 2), r10) // r10 = 3*rs_a + + + mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + // r10 = unused + + mov(var(m_iter), r9) // ii = m_iter; + + label(.DLOOP3X4I) // LOOP OVER ii = [ m_iter .. 1 0 ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem(r12), rcx) // rcx = c + 3*ii*rs_c; + lea(mem(r14), rax) // rax = a + 3*ii*rs_a; + lea(mem(rdx), rbx) // rbx = b; + + +#if 0 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + lea(mem(r8, r8, 4), rdi) // rdi = 5*rs_a + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 2), r12) // + lea(mem(r12, rdi, 1), r12) // c_ii = r12 += 3*rs_c + + lea(mem(r14, r8, 2), r14) // + lea(mem(r14, r8, 1), r14) // a_ii = r14 += 3*rs_a + + dec(r9) // ii -= 1; + jne(.DLOOP3X4I) // iterate again if ii != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 4; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict bj = b; + double* restrict ai = a + i_edge*rs_a; + + if ( 2 == m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x4m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + //cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x4m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rd_haswell_asm_3x4m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_2x4m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x4m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | | | + -------- -- -- -- ... | | | | + -------- += -- -- -- | | | | + -------- | | | | + -------- : + -------- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm13, ymm13, ymm13) +#endif + + mov(var(a), rax) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), rcx) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_6x2m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t m_iter = m0 / 6; + uint64_t m_left = m0 % 6; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + + mov(var(m_iter), r9) // ii = m_iter; + + label(.DLOOP3X4I) // LOOP OVER ii = [ m_iter ... 1 0 ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem(r12), rcx) // rcx = c + 6*ii*rs_c; + lea(mem(r14), rax) // rax = a + 6*ii*rs_a; + lea(mem(rdx), rbx) // rbx = b; + + + lea(mem(rcx, rdi, 2), r10) // + lea(mem(r10, rdi, 1), r10) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c + prefetch(0, mem(r10, 3*8)) // prefetch c + 3*rs_c + prefetch(0, mem(r10, rdi, 1, 3*8)) // prefetch c + 4*rs_c + prefetch(0, mem(r10, rdi, 2, 3*8)) // prefetch c + 5*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovsd(mem(rax, r8, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovsd(mem(rax, r13, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rax, r8, 4), xmm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovsd(mem(rax, r15, 1), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + // ymm8 ymm9 + // ymm10 ymm11 + // ymm12 ymm13 + // ymm14 ymm15 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + vhaddpd( ymm9, ymm8, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm8 ) + + vhaddpd( ymm11, ymm10, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm10 ) + + vhaddpd( ymm13, ymm12, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm12 ) + + vhaddpd( ymm15, ymm14, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm14 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + // xmm8 = sum(ymm8) sum(ymm9) + // xmm10 = sum(ymm10) sum(ymm11) + // xmm12 = sum(ymm12) sum(ymm13) + // xmm14 = sum(ymm14) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + vmulpd(xmm0, xmm10, xmm10) + vmulpd(xmm0, xmm12, xmm12) + vmulpd(xmm0, xmm14, xmm14) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm10) + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm12) + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm14) + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 4), r12) // + lea(mem(r12, rdi, 2), r12) // c_ii = r12 += 6*rs_c + + lea(mem(r14, r8, 4), r14) // + lea(mem(r14, r8, 2), r14) // a_ii = r14 += 6*rs_a + + dec(r9) // ii -= 1; + jne(.DLOOP3X4I) // iterate again if ii != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 2; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict bj = b; + double* restrict ai = a + i_edge*rs_a; + + if ( 3 <= m_left ) + { + const dim_t mr_cur = 3; + + bli_dgemmsup_rd_haswell_asm_3x2m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 2 <= m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x2m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x2m + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rd_haswell_asm_3x2m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 1*8)) // prefetch c + 2*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovsd(mem(rax, r8, 2), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + // ymm8 ymm9 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + vhaddpd( ymm9, ymm8, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm8 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + // xmm8 = sum(ymm8) sum(ymm9) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm8, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_2x2m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | + -------- -- -- -- ... | | + -------- += -- -- -- | | + -------- -- -- -- | | + -------- -- -- -- : + -------- -- -- -- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x2m + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | + -------- -- -- -- ... | | + -------- += -- -- -- | | + -------- -- -- -- | | + -------- -- -- -- : + -------- -- -- -- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) +#endif + + mov(var(a), rax) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + // xmm4 = sum(ymm4) sum(ymm5) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + diff --git a/kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8n.c b/kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8n.c new file mode 100644 index 000000000..a23764f8d --- /dev/null +++ b/kernels/haswell/3/sup/old/bli_gemmsup_rd_haswell_asm_d6x8n.c @@ -0,0 +1,5836 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" + +#define BLIS_ASM_SYNTAX_ATT +#include "bli_x86_asm_macros.h" + +/* + rrc: + -------- ------ | | | | | | | | + -------- ------ | | | | | | | | + -------- += ------ ... | | | | | | | | + -------- ------ | | | | | | | | + -------- ------ : + -------- ------ : + + Assumptions: + - C is row-stored and B is column-stored; + - A is row-stored; + - m0 and n0 are at most MR and NR, respectively. + Therefore, this (r)ow-preferential microkernel is well-suited for + a dot-product-based accumulation that performs vector loads from + both A and B. +*/ + +// Prototype reference microkernels. +GEMMSUP_KER_PROT( float, s, gemmsup_r_haswell_ref ) +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref ) +GEMMSUP_KER_PROT( scomplex, c, gemmsup_r_haswell_ref ) +GEMMSUP_KER_PROT( dcomplex, z, gemmsup_r_haswell_ref ) + +// Define parameters and variables for edge case kernel map. +#define NUM_MR 4 +#define NUM_NR 4 +#define FUNCPTR_T dgemmsup_ker_ft + +#if 0 +static dim_t mrs[NUM_MR] = { 6, 3, 2, 1 }; +static dim_t nrs[NUM_NR] = { 8, 4, 2, 1 }; +static FUNCPTR_T kmap[NUM_MR][NUM_NR] = +{ /* 8 4 2 1 */ +/* 6 */ { bli_dgemmsup_rd_haswell_asm_6x8n, bli_dgemmsup_rd_haswell_asm_6x4n, bli_dgemmsup_rd_haswell_asm_6x2n, bli_dgemmsup_r_haswell_ref }, +/* 3 */ { bli_dgemmsup_rd_haswell_asm_3x8n, bli_dgemmsup_rd_haswell_asm_3x4n, bli_dgemmsup_rd_haswell_asm_3x2n, bli_dgemmsup_r_haswell_ref }, +/* 2 */ { bli_dgemmsup_rd_haswell_asm_2x8n, bli_dgemmsup_rd_haswell_asm_2x4n, bli_dgemmsup_rd_haswell_asm_2x2n, bli_dgemmsup_r_haswell_ref }, +/* 1 */ { bli_dgemmsup_rd_haswell_asm_1x8n, bli_dgemmsup_rd_haswell_asm_1x4n, bli_dgemmsup_rd_haswell_asm_1x2n, bli_dgemmsup_r_haswell_ref } +}; +#endif + + +void bli_dgemmsup_rd_haswell_asm_6x8n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); return; +#endif + uint64_t m_left = m0 % 6; + + // First check whether this is a edge case in the n dimension. If so, + // dispatch other ?x8m kernels, as needed. + if ( m_left ) + { + double* restrict cij = c; + double* restrict bj = b; + double* restrict ai = a; + + if ( 3 <= m_left ) + { + const dim_t mr_cur = 3; + + bli_dgemmsup_rd_haswell_asm_3x8n + ( + conja, conjb, mr_cur, n0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 2 <= m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x8n + ( + conja, conjb, mr_cur, n0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { +#if 0 + const dim_t mr_cur = 1; + + //bli_dgemmsup_r_haswell_ref + bli_dgemmsup_rd_haswell_asm_1x8n + ( + conja, conjb, mr_cur, n0, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_TRANSPOSE, conja, k0, n0, + alpha, bj, rs_b0, cs_b0, ai, cs_a0, + beta, cij, cs_c0, cntx, NULL + ); +#endif + } + return; + } + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t n_iter = n0 / 4; + uint64_t n_left = n0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( n_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rdx) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + //mov(var(b), r14) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + //mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // rdx = rax = a + // r14 = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + + mov(imm(0), r9) // ii = 0; + + label(.DLOOP3X4I) // LOOP OVER ii = [ 0 1 ... ] + + + + mov(var(b), r14) // load address of b + mov(var(c), r12) // load address of c + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + lea(mem( , r9, 1), rsi) // rsi = r9 = 3*ii; + imul(rdi, rsi) // rsi *= rs_c + lea(mem(r12, rsi, 1), r12) // r12 = c + 3*ii*rs_c; + + lea(mem( , r9, 1), rsi) // rsi = r9 = 3*ii; + imul(r8, rsi) // rsi *= rs_a; + lea(mem(rdx, rsi, 1), rdx) // rax = a + 3*ii*rs_a; + + + + mov(var(n_iter), r15) // jj = n_iter; + + label(.DLOOP3X4J) // LOOP OVER jj = [ n_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + lea(mem(r12), rcx) // rcx = c_iijj; + lea(mem(rdx), rax) // rax = a_ii; + lea(mem(r14), rbx) // rbx = b_jj; + + +#if 1 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + lea(mem(r11, r11, 2), rdi) // rdi = 3*cs_b + lea(mem(rbx, r11, 4), r10) // r10 = rbx + 4*cs_b + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 0 + prefetch(0, mem(r10, 0*8)) // prefetch rbx + 4*cs_b + prefetch(0, mem(r10, r11, 1, 0*8)) // prefetch rbx + 5*cs_b + prefetch(0, mem(r10, r11, 2, 0*8)) // prefetch rbx + 6*cs_b + prefetch(0, mem(r10, r13, 1, 0*8)) // prefetch rbx + 7*cs_b + add(imm(8*8), r10) // r10 += 8*rs_b = 8*8; +#else + prefetch(0, mem(r10, 0*8)) // prefetch rbx + 4*cs_b + prefetch(0, mem(r10, r11, 1, 0*8)) // prefetch rbx + 5*cs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + +#if 1 + prefetch(0, mem(r10, r11, 2, 0*8)) // prefetch rbx + 6*cs_b + prefetch(0, mem(r10, r13, 1, 0*8)) // prefetch rbx + 7*cs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(r10, 8*8)) // prefetch rbx + 4*cs_b + 8*rs_b + prefetch(0, mem(r10, r11, 1, 8*8)) // prefetch rbx + 5*cs_b + 8*rs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + +#if 1 + prefetch(0, mem(r10, r11, 2, 8*8)) // prefetch rbx + 6*cs_b + 8*rs_b + prefetch(0, mem(r10, r13, 1, 8*8)) // prefetch rbx + 7*cs_b + 8*rs_b + add(imm(16*8), r10) // r10 += 8*rs_b = 8*8; +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4*8), r12) // c_jj = r12 += 4*cs_c + + lea(mem(r14, r11, 4), r14) // b_jj = r14 += 4*cs_b + + dec(r15) // jj -= 1; + jne(.DLOOP3X4J) // iterate again if jj != 0. + + + + add(imm(3), r9) // ii += 3; + cmp(imm(3), r9) // compare ii to 3 + jle(.DLOOP3X4I) // if ii <= 3, jump to beginning + // of ii loop; otherwise, loop ends. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [n_iter] "m" (n_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( n_left ) + { + const dim_t mr_cur = 6; + const dim_t j_edge = n0 - ( dim_t )n_left; + + double* restrict cij = c + j_edge*cs_c; + double* restrict ai = a; + double* restrict bj = b + j_edge*cs_b; + + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_6x2n + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 0 + const dim_t nr_cur = 1; + + //bli_dgemmsup_rd_haswell_asm_6x1n + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_NO_TRANSPOSE, conjb, mr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, + beta, cij, rs_c0, cntx, NULL + ); +#endif + } + } +} + +void bli_dgemmsup_rd_haswell_asm_3x8n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t n_iter = n0 / 4; + uint64_t n_left = n0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( n_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rdx) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // rdx = rax = a + // r14 = rbx = b + // r9 = unused + // r15 = n dim index jj + + mov(var(n_iter), r15) // jj = n_iter; + + label(.DLOOP3X4J) // LOOP OVER jj = [ n_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + lea(mem(r12), rcx) // rcx = c_iijj; + lea(mem(rdx), rax) // rax = a_ii; + lea(mem(r14), rbx) // rbx = b_jj; + + +#if 1 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + lea(mem(r11, r11, 2), rdi) // rdi = 3*cs_b + lea(mem(rbx, r11, 4), r10) // r10 = rbx + 4*cs_b + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 0 + prefetch(0, mem(r10, 0*8)) // prefetch rbx + 4*cs_b + prefetch(0, mem(r10, r11, 1, 0*8)) // prefetch rbx + 5*cs_b + prefetch(0, mem(r10, r11, 2, 0*8)) // prefetch rbx + 6*cs_b + prefetch(0, mem(r10, r13, 1, 0*8)) // prefetch rbx + 7*cs_b + add(imm(8*8), r10) // r10 += 8*rs_b = 8*8; +#else + prefetch(0, mem(r10, 0*8)) // prefetch rbx + 4*cs_b + prefetch(0, mem(r10, r11, 1, 0*8)) // prefetch rbx + 5*cs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + +#if 1 + prefetch(0, mem(r10, r11, 2, 0*8)) // prefetch rbx + 6*cs_b + prefetch(0, mem(r10, r13, 1, 0*8)) // prefetch rbx + 7*cs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(r10, 8*8)) // prefetch rbx + 4*cs_b + 8*rs_b + prefetch(0, mem(r10, r11, 1, 8*8)) // prefetch rbx + 5*cs_b + 8*rs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + +#if 1 + prefetch(0, mem(r10, r11, 2, 8*8)) // prefetch rbx + 6*cs_b + 8*rs_b + prefetch(0, mem(r10, r13, 1, 8*8)) // prefetch rbx + 7*cs_b + 8*rs_b + add(imm(16*8), r10) // r10 += 8*rs_b = 8*8; +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4*8), r12) // c_jj = r12 += 4*cs_c + + lea(mem(r14, r11, 4), r14) // b_jj = r14 += 4*cs_b + + dec(r15) // jj -= 1; + jne(.DLOOP3X4J) // iterate again if jj != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [n_iter] "m" (n_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( n_left ) + { + const dim_t mr_cur = 3; + const dim_t j_edge = n0 - ( dim_t )n_left; + + double* restrict cij = c + j_edge*cs_c; + double* restrict ai = a; + double* restrict bj = b + j_edge*cs_b; + + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_3x2n + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 0 + const dim_t nr_cur = 1; + + //bli_dgemmsup_rd_haswell_asm_3x1n + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_NO_TRANSPOSE, conjb, mr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, + beta, cij, rs_c0, cntx, NULL + ); +#endif + } + } +} + +void bli_dgemmsup_rd_haswell_asm_2x8n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t n_iter = n0 / 4; + uint64_t n_left = n0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( n_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rdx) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // rdx = rax = a + // r14 = rbx = b + // r9 = unused + // r15 = n dim index jj + + mov(var(n_iter), r15) // jj = n_iter; + + label(.DLOOP3X4J) // LOOP OVER jj = [ n_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) +#endif + + lea(mem(r12), rcx) // rcx = c_iijj; + lea(mem(rdx), rax) // rax = a_ii; + lea(mem(r14), rbx) // rbx = b_jj; + + +#if 1 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c +#endif + lea(mem(r11, r11, 2), rdi) // rdi = 3*cs_b + lea(mem(rbx, r11, 4), r10) // r10 = rbx + 4*cs_b + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 0 + prefetch(0, mem(r10, 0*8)) // prefetch rbx + 4*cs_b + prefetch(0, mem(r10, r11, 1, 0*8)) // prefetch rbx + 5*cs_b + prefetch(0, mem(r10, r11, 2, 0*8)) // prefetch rbx + 6*cs_b + prefetch(0, mem(r10, r13, 1, 0*8)) // prefetch rbx + 7*cs_b + add(imm(8*8), r10) // r10 += 8*rs_b = 8*8; +#else + prefetch(0, mem(r10, 0*8)) // prefetch rbx + 4*cs_b + prefetch(0, mem(r10, r11, 1, 0*8)) // prefetch rbx + 5*cs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 1 + +#if 1 + prefetch(0, mem(r10, r11, 2, 0*8)) // prefetch rbx + 6*cs_b + prefetch(0, mem(r10, r13, 1, 0*8)) // prefetch rbx + 7*cs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(r10, 8*8)) // prefetch rbx + 4*cs_b + 8*rs_b + prefetch(0, mem(r10, r11, 1, 8*8)) // prefetch rbx + 5*cs_b + 8*rs_b +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 3 + +#if 1 + prefetch(0, mem(r10, r11, 2, 8*8)) // prefetch rbx + 6*cs_b + 8*rs_b + prefetch(0, mem(r10, r13, 1, 8*8)) // prefetch rbx + 7*cs_b + 8*rs_b + add(imm(16*8), r10) // r10 += 8*rs_b = 8*8; +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4*8), r12) // c_jj = r12 += 4*cs_c + + lea(mem(r14, r11, 4), r14) // b_jj = r14 += 4*cs_b + + dec(r15) // jj -= 1; + jne(.DLOOP3X4J) // iterate again if jj != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [n_iter] "m" (n_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( n_left ) + { + const dim_t mr_cur = 2; + const dim_t j_edge = n0 - ( dim_t )n_left; + + double* restrict cij = c + j_edge*cs_c; + double* restrict ai = a; + double* restrict bj = b + j_edge*cs_b; + + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x2n + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 0 + const dim_t nr_cur = 1; + + //bli_dgemmsup_rd_haswell_asm_2x1n + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_dgemv_ex + ( + BLIS_NO_TRANSPOSE, conjb, mr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, + beta, cij, rs_c0, cntx, NULL + ); +#endif + } + } +} + +void bli_dgemmsup_rd_haswell_asm_1x8n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t n_iter = n0 / 4; + uint64_t n_left = n0 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( n_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rdx) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), r14) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // rdx = rax = a + // r14 = rbx = b + // r9 = unused + // r15 = n dim index jj + + mov(var(n_iter), r15) // jj = n_iter; + + label(.DLOOP3X4J) // LOOP OVER jj = [ n_iter ... 1 0 ] + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm13, ymm13, ymm13) +#endif + + lea(mem(r12), rcx) // rcx = c_iijj; + lea(mem(rdx), rax) // rax = a_ii; + lea(mem(r14), rbx) // rbx = b_jj; + + +#if 1 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c +#endif + lea(mem(r11, r11, 2), rdi) // rdi = 3*cs_b + lea(mem(rbx, r11, 4), r10) // r10 = rbx + 4*cs_b + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 0 + prefetch(0, mem(r10, 0*8)) // prefetch rbx + 4*cs_b + prefetch(0, mem(r10, r11, 1, 0*8)) // prefetch rbx + 5*cs_b + prefetch(0, mem(r10, r11, 2, 0*8)) // prefetch rbx + 6*cs_b + prefetch(0, mem(r10, r13, 1, 0*8)) // prefetch rbx + 7*cs_b + add(imm(8*8), r10) // r10 += 8*rs_b = 8*8; +#else + prefetch(0, mem(r10, 0*8)) // prefetch rbx + 4*cs_b + prefetch(0, mem(r10, r11, 1, 0*8)) // prefetch rbx + 5*cs_b +#endif + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 1 + +#if 1 + prefetch(0, mem(r10, r11, 2, 0*8)) // prefetch rbx + 6*cs_b + prefetch(0, mem(r10, r13, 1, 0*8)) // prefetch rbx + 7*cs_b +#endif + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(r10, 8*8)) // prefetch rbx + 4*cs_b + 8*rs_b + prefetch(0, mem(r10, r11, 1, 8*8)) // prefetch rbx + 5*cs_b + 8*rs_b +#endif + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 3 + +#if 1 + prefetch(0, mem(r10, r11, 2, 8*8)) // prefetch rbx + 6*cs_b + 8*rs_b + prefetch(0, mem(r10, r13, 1, 8*8)) // prefetch rbx + 7*cs_b + 8*rs_b + add(imm(16*8), r10) // r10 += 8*rs_b = 8*8; +#endif + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + add(imm(4*8), r12) // c_jj = r12 += 4*cs_c + + lea(mem(r14, r11, 4), r14) // b_jj = r14 += 4*cs_b + + dec(r15) // jj -= 1; + jne(.DLOOP3X4J) // iterate again if jj != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [n_iter] "m" (n_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( n_left ) + { + const dim_t mr_cur = 1; + const dim_t j_edge = n0 - ( dim_t )n_left; + + double* restrict cij = c + j_edge*cs_c; + double* restrict ai = a; + double* restrict bj = b + j_edge*cs_b; + + if ( 2 <= n_left ) + { + const dim_t nr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_1x2n + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + cij += nr_cur*cs_c0; bj += nr_cur*cs_b0; n_left -= nr_cur; + } + if ( 1 == n_left ) + { +#if 0 + const dim_t nr_cur = 1; + + //bli_dgemmsup_rd_haswell_asm_1x1n + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); +#else + bli_ddotxv_ex + ( + conja, conjb, k0, + alpha, ai, cs_a0, bj, rs_b0, + beta, cij, cntx, NULL + ); +#endif + } + } +} + +void bli_dgemmsup_rd_haswell_asm_6x4n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t m_iter = m0 / 3; + uint64_t m_left = m0 % 3; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + if ( m_iter == 0 ) goto consider_edge_cases; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), r14) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rdx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + lea(mem(r8, r8, 2), r10) // r10 = 3*rs_a + + + mov(var(c), r12) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + + // r12 = rcx = c + // r14 = rax = a + // rdx = rbx = b + // r9 = m dim index ii + // r15 = n dim index jj + // r10 = unused + + mov(var(m_iter), r9) // ii = m_iter; + + label(.DLOOP3X4I) // LOOP OVER ii = [ m_iter .. 1 0 ] + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem(r12), rcx) // rcx = c + 3*ii*rs_c; + lea(mem(r14), rax) // rax = a + 3*ii*rs_a; + lea(mem(rdx), rbx) // rbx = b; + + +#if 0 + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c +#endif + lea(mem(r8, r8, 4), rdi) // rdi = 5*rs_a + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + +#if 1 + prefetch(0, mem(rax, r10, 1, 0*8)) // prefetch rax + 3*cs_a + prefetch(0, mem(rax, r8, 4, 0*8)) // prefetch rax + 4*cs_a + prefetch(0, mem(rax, rdi, 1, 0*8)) // prefetch rax + 5*cs_a +#endif + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + + lea(mem(r12, rdi, 2), r12) // + lea(mem(r12, rdi, 1), r12) // c_ii = r12 += 3*rs_c + + lea(mem(r14, r8, 2), r14) // + lea(mem(r14, r8, 1), r14) // a_ii = r14 += 3*rs_a + + dec(r9) // ii -= 1; + jne(.DLOOP3X4I) // iterate again if ii != 0. + + + + + label(.DRETURN) + + + + end_asm( + : // output operands (none) + : // input operands + [m_iter] "m" (m_iter), + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) + + consider_edge_cases: + + // Handle edge cases in the m dimension, if they exist. + if ( m_left ) + { + const dim_t nr_cur = 4; + const dim_t i_edge = m0 - ( dim_t )m_left; + + double* restrict cij = c + i_edge*rs_c; + double* restrict bj = b; + double* restrict ai = a + i_edge*rs_a; + + if ( 2 == m_left ) + { + const dim_t mr_cur = 2; + + bli_dgemmsup_rd_haswell_asm_2x4n + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + //cij += mr_cur*rs_c0; ai += mr_cur*rs_a0; m_left -= mr_cur; + } + if ( 1 == m_left ) + { + const dim_t mr_cur = 1; + + bli_dgemmsup_rd_haswell_asm_1x4n + ( + conja, conjb, mr_cur, nr_cur, k0, + alpha, ai, rs_a0, cs_a0, bj, rs_b0, cs_b0, + beta, cij, rs_c0, cs_c0, data, cntx + ); + } + } +} + +void bli_dgemmsup_rd_haswell_asm_3x4n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 3*8)) // prefetch c + 2*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + vmovupd(mem(rax, r8, 2), ymm2) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + vmovsd(mem(rax, r8, 2), xmm2) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + vfmadd231pd(ymm2, ymm3, ymm6) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + vfmadd231pd(ymm2, ymm3, ymm9) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + vfmadd231pd(ymm2, ymm3, ymm12) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + vfmadd231pd(ymm2, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + // ymm6 ymm9 ymm12 ymm15 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + + vhaddpd( ymm9, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm15, ymm12, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm6 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + // ymm6 = sum(ymm6) sum(ymm9) sum(ymm12) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + vmulpd(ymm0, ymm6, ymm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm6) + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_2x4n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 3*8)) // prefetch c + 1*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + vmovupd(mem(rax, r8, 1), ymm1) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + vmovsd(mem(rax, r8, 1), xmm1) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + vfmadd231pd(ymm1, ymm3, ymm8) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + vfmadd231pd(ymm1, ymm3, ymm14) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + // ymm5 ymm8 ymm11 ymm14 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + + vhaddpd( ymm8, ymm5, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) + + vhaddpd( ymm14, ymm11, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm5 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + // ymm5 = sum(ymm5) sum(ymm8) sum(ymm11) sum(ymm14) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + vmulpd(ymm0, ymm5, ymm5) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), ymm3, ymm5) + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(ymm5, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x4n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | | | + -------- -- -- -- ... | | | | + -------- += -- -- -- | | | | + -------- | | | | + -------- : + -------- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm13, ymm13, ymm13) +#endif + + mov(var(a), rax) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), rcx) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 3*8)) // prefetch c + 0*rs_c + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rax ), ymm0) + add(imm(4*8), rax) // a += 4*cs_b = 4*8; + + vmovupd(mem(rbx ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovupd(mem(rbx, r11, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovupd(mem(rbx, r11, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovupd(mem(rbx, r13, 1), ymm3) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rax ), xmm0) + add(imm(1*8), rax) // a += 1*cs_b = 1*8; + + vmovsd(mem(rbx ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + + vmovsd(mem(rbx, r11, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm7) + + vmovsd(mem(rbx, r11, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + + vmovsd(mem(rbx, r13, 1), xmm3) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + vfmadd231pd(ymm0, ymm3, ymm13) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + + + // ymm4 ymm7 ymm10 ymm13 + + vhaddpd( ymm7, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm0 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm7) + + vhaddpd( ymm13, ymm10, ymm2 ) + vextractf128(imm(1), ymm2, xmm1 ) + vaddpd( xmm2, xmm1, xmm2 ) // xmm2[0] = sum(ymm10); xmm2[1] = sum(ymm13) + + vperm2f128(imm(0x20), ymm2, ymm0, ymm4 ) + + // ymm4 = sum(ymm4) sum(ymm7) sum(ymm10) sum(ymm13) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(ymm0, ymm4, ymm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), ymm3, ymm4) + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(ymm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_6x2n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + + //vzeroall() // zero all xmm/ymm registers. + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) + vxorpd(ymm10, ymm10, ymm10) + vxorpd(ymm11, ymm11, ymm11) + vxorpd(ymm12, ymm12, ymm12) + vxorpd(ymm13, ymm13, ymm13) + vxorpd(ymm14, ymm14, ymm14) + vxorpd(ymm15, ymm15, ymm15) +#endif + + + lea(mem(rcx, rdi, 2), r10) // + lea(mem(r10, rdi, 1), r10) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 1*8)) // prefetch c + 2*rs_c + prefetch(0, mem(r10, 1*8)) // prefetch c + 3*rs_c + prefetch(0, mem(r10, rdi, 1, 1*8)) // prefetch c + 4*rs_c + prefetch(0, mem(r10, rdi, 2, 1*8)) // prefetch c + 5*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovupd(mem(rax, r13, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovupd(mem(rax, r8, 4), ymm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovupd(mem(rax, r15, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovsd(mem(rax, r8, 2), xmm3) + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + vmovsd(mem(rax, r13, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm10) + vfmadd231pd(ymm1, ymm3, ymm11) + + vmovsd(mem(rax, r8, 4), xmm3) + vfmadd231pd(ymm0, ymm3, ymm12) + vfmadd231pd(ymm1, ymm3, ymm13) + + vmovsd(mem(rax, r15, 1), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm14) + vfmadd231pd(ymm1, ymm3, ymm15) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + // ymm8 ymm9 + // ymm10 ymm11 + // ymm12 ymm13 + // ymm14 ymm15 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + vhaddpd( ymm9, ymm8, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm8 ) + + vhaddpd( ymm11, ymm10, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm10 ) + + vhaddpd( ymm13, ymm12, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm12 ) + + vhaddpd( ymm15, ymm14, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm14 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + // xmm8 = sum(ymm8) sum(ymm9) + // xmm10 = sum(ymm10) sum(ymm11) + // xmm12 = sum(ymm12) sum(ymm13) + // xmm14 = sum(ymm14) sum(ymm15) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + vmulpd(xmm0, xmm10, xmm10) + vmulpd(xmm0, xmm12, xmm12) + vmulpd(xmm0, xmm14, xmm14) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm10) + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm12) + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm14) + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm8, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm10, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm12, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm14, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_3x2n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) + vxorpd(ymm8, ymm8, ymm8) + vxorpd(ymm9, ymm9, ymm9) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + prefetch(0, mem(rcx, rdi, 2, 1*8)) // prefetch c + 2*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovupd(mem(rax, r8, 2), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + vmovsd(mem(rax, r8, 2), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm8) + vfmadd231pd(ymm1, ymm3, ymm9) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + // ymm8 ymm9 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + vhaddpd( ymm9, ymm8, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm8 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + // xmm8 = sum(ymm8) sum(ymm9) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + vmulpd(xmm0, xmm8, xmm8) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm8) + vmovupd(xmm8, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm8, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_2x2n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | + -------- -- -- -- ... | | + -------- += -- -- -- | | + -------- -- -- -- | | + -------- -- -- -- : + -------- -- -- -- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) + vxorpd(ymm6, ymm6, ymm6) + vxorpd(ymm7, ymm7, ymm7) +#endif + + mov(var(a), rax) // load address of a. + mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + mov(var(rs_c), rdi) // load rs_c + lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + prefetch(0, mem(rcx, rdi, 1, 1*8)) // prefetch c + 1*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovupd(mem(rax, r8, 1), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + vmovsd(mem(rax, r8, 1), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm6) + vfmadd231pd(ymm1, ymm3, ymm7) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + // ymm6 ymm7 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + vhaddpd( ymm7, ymm6, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm6 ) + + // xmm4 = sum(ymm4) sum(ymm5) + // xmm6 = sum(ymm6) sum(ymm7) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + vmulpd(xmm0, xmm6, xmm6) + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vfmadd231pd(mem(rcx), xmm3, xmm6) + vmovupd(xmm6, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + add(rdi, rcx) + + vmovupd(xmm6, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + +void bli_dgemmsup_rd_haswell_asm_1x2n + ( + conj_t conja, + conj_t conjb, + dim_t m0, + dim_t n0, + dim_t k0, + double* restrict alpha, + double* restrict a, inc_t rs_a0, inc_t cs_a0, + double* restrict b, inc_t rs_b0, inc_t cs_b0, + double* restrict beta, + double* restrict c, inc_t rs_c0, inc_t cs_c0, + auxinfo_t* restrict data, + cntx_t* restrict cntx + ) +{ +#if 0 + bli_dgemmsup_r_haswell_ref + ( + conja, conjb, m0, n0, k0, + alpha, a, rs_a0, cs_a0, b, rs_b0, cs_b0, + beta, c, rs_c0, cs_c0, data, cntx + ); + return; +#endif + //void* a_next = bli_auxinfo_next_a( data ); + //void* b_next = bli_auxinfo_next_b( data ); + + // Typecast local copies of integers in case dim_t and inc_t are a + // different size than is expected by load instructions. + uint64_t k_iter16 = k0 / 16; + uint64_t k_left16 = k0 % 16; + uint64_t k_iter4 = k_left16 / 4; + uint64_t k_left1 = k_left16 % 4; + + uint64_t rs_a = rs_a0; + uint64_t cs_a = cs_a0; + uint64_t rs_b = rs_b0; + uint64_t cs_b = cs_b0; + uint64_t rs_c = rs_c0; + uint64_t cs_c = cs_c0; + +/* + rrc: + -------- -- -- -- | | + -------- -- -- -- ... | | + -------- += -- -- -- | | + -------- -- -- -- | | + -------- -- -- -- : + -------- -- -- -- : +*/ + // ------------------------------------------------------------------------- + + begin_asm() + +#if 0 + vzeroall() // zero all xmm/ymm registers. +#else + // skylake can execute 3 vxorpd ipc with + // a latency of 1 cycle, while vzeroall + // has a latency of 12 cycles. + vxorpd(ymm4, ymm4, ymm4) + vxorpd(ymm5, ymm5, ymm5) +#endif + + mov(var(a), rax) // load address of a. + //mov(var(rs_a), r8) // load rs_a + //mov(var(cs_a), r9) // load cs_a + //lea(mem(, r8, 8), r8) // rs_a *= sizeof(double) + //lea(mem(, r9, 8), r9) // cs_a *= sizeof(double) + + //lea(mem(r8, r8, 2), r13) // r13 = 3*rs_a + //lea(mem(r8, r8, 4), r15) // r15 = 5*rs_a + + mov(var(b), rbx) // load address of b. + //mov(var(rs_b), r10) // load rs_b + mov(var(cs_b), r11) // load cs_b + //lea(mem(, r10, 8), r10) // rs_b *= sizeof(double) + lea(mem(, r11, 8), r11) // cs_b *= sizeof(double) + + //lea(mem(r11, r11, 2), r13) // r13 = 3*cs_b + + // initialize loop by pre-loading + // a column of a. + + mov(var(c), rcx) // load address of c + //mov(var(rs_c), rdi) // load rs_c + //lea(mem(, rdi, 8), rdi) // rs_c *= sizeof(double) + + //lea(mem(rcx, rdi, 2), rdx) // + //lea(mem(rdx, rdi, 1), rdx) // rdx = c + 3*rs_c; + prefetch(0, mem(rcx, 1*8)) // prefetch c + 0*rs_c + + + + + mov(var(k_iter16), rsi) // i = k_iter16; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKITER4) // if i == 0, jump to code that + // contains the k_iter4 loop. + + + label(.DLOOPKITER16) // MAIN LOOP + + + // ---------------------------------- iteration 0 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 1 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 2 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + // ---------------------------------- iteration 3 + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER16) // iterate again if i != 0. + + + + + + + label(.DCONSIDKITER4) + + mov(var(k_iter4), rsi) // i = k_iter4; + test(rsi, rsi) // check i via logical AND. + je(.DCONSIDKLEFT1) // if i == 0, jump to code that + // considers k_left1 loop. + // else, we prepare to enter k_iter4 loop. + + + label(.DLOOPKITER4) // EDGE LOOP (ymm) + + vmovupd(mem(rbx ), ymm0) + vmovupd(mem(rbx, r11, 1), ymm1) + add(imm(4*8), rbx) // b += 4*rs_b = 4*8; + + vmovupd(mem(rax ), ymm3) + add(imm(4*8), rax) // a += 4*cs_a = 4*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + dec(rsi) // i -= 1; + jne(.DLOOPKITER4) // iterate again if i != 0. + + + + + label(.DCONSIDKLEFT1) + + mov(var(k_left1), rsi) // i = k_left1; + test(rsi, rsi) // check i via logical AND. + je(.DPOSTACCUM) // if i == 0, we're done; jump to end. + // else, we prepare to enter k_left1 loop. + + + + + label(.DLOOPKLEFT1) // EDGE LOOP (scalar) + // NOTE: We must use ymm registers here bc + // using the xmm registers would zero out the + // high bits of the destination registers, + // which would destory intermediate results. + + vmovsd(mem(rbx ), xmm0) + vmovsd(mem(rbx, r11, 1), xmm1) + add(imm(1*8), rbx) // b += 1*rs_b = 1*8; + + vmovsd(mem(rax ), xmm3) + add(imm(1*8), rax) // a += 1*cs_a = 1*8; + vfmadd231pd(ymm0, ymm3, ymm4) + vfmadd231pd(ymm1, ymm3, ymm5) + + + dec(rsi) // i -= 1; + jne(.DLOOPKLEFT1) // iterate again if i != 0. + + + + + + + + label(.DPOSTACCUM) + + // ymm4 ymm5 + + vhaddpd( ymm5, ymm4, ymm0 ) + vextractf128(imm(1), ymm0, xmm1 ) + vaddpd( xmm0, xmm1, xmm4 ) // xmm0[0] = sum(ymm4); xmm0[1] = sum(ymm5) + + // xmm4 = sum(ymm4) sum(ymm5) + + + + mov(var(alpha), rax) // load address of alpha + mov(var(beta), rbx) // load address of beta + vbroadcastsd(mem(rax), ymm0) // load alpha and duplicate + vbroadcastsd(mem(rbx), ymm3) // load beta and duplicate + + vmulpd(xmm0, xmm4, xmm4) // scale by alpha + + + + + + + //mov(var(cs_c), rsi) // load cs_c + //lea(mem(, rsi, 8), rsi) // rsi = cs_c * sizeof(double) + + + + // now avoid loading C if beta == 0 + + vxorpd(ymm0, ymm0, ymm0) // set ymm0 to zero. + vucomisd(xmm0, xmm3) // set ZF if beta == 0. + je(.DBETAZERO) // if ZF = 1, jump to beta == 0 case + + + + label(.DROWSTORED) + + + vfmadd231pd(mem(rcx), xmm3, xmm4) + vmovupd(xmm4, mem(rcx)) + //add(rdi, rcx) + + + + jmp(.DDONE) // jump to end. + + + + + label(.DBETAZERO) + + + + label(.DROWSTORBZ) + + + vmovupd(xmm4, mem(rcx)) + //add(rdi, rcx) + + + + + label(.DDONE) + + + + end_asm( + : // output operands (none) + : // input operands + [k_iter16] "m" (k_iter16), + [k_iter4] "m" (k_iter4), + [k_left1] "m" (k_left1), + [a] "m" (a), + [rs_a] "m" (rs_a), + [cs_a] "m" (cs_a), + [b] "m" (b), + [rs_b] "m" (rs_b), + [cs_b] "m" (cs_b), + [alpha] "m" (alpha), + [beta] "m" (beta), + [c] "m" (c), + [rs_c] "m" (rs_c), + [cs_c] "m" (cs_c)/*, + [a_next] "m" (a_next), + [b_next] "m" (b_next)*/ + : // register clobber list + "rax", "rbx", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "memory" + ) +} + diff --git a/kernels/haswell/bli_kernels_haswell.h b/kernels/haswell/bli_kernels_haswell.h index 53d434dff..df49a77dd 100644 --- a/kernels/haswell/bli_kernels_haswell.h +++ b/kernels/haswell/bli_kernels_haswell.h @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -32,7 +33,7 @@ */ -// -- level-3 -- +// -- level-3 ------------------------------------------------------------------ // gemm (asm d6x8) GEMM_UKR_PROT( float, s, gemm_haswell_asm_6x16 ) @@ -61,3 +62,87 @@ GEMMTRSM_UKR_PROT( double, d, gemmtrsm_u_haswell_asm_6x8 ) //GEMM_UKR_PROT( scomplex, c, gemm_haswell_asm_8x3 ) //GEMM_UKR_PROT( dcomplex, z, gemm_haswell_asm_4x3 ) + +// -- level-3 sup -------------------------------------------------------------- + +// gemmsup_rv + +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_6x8 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_5x8 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_4x8 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_3x8 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_2x8 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_1x8 ) + +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_6x6 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_5x6 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_4x6 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_3x6 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_2x6 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_1x6 ) + +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_6x4 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_5x4 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_4x4 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_3x4 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_2x4 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_1x4 ) + +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_6x2 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_5x2 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_4x2 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_3x2 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_2x2 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_1x2 ) + +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref_6x1 ) +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref_5x1 ) +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref_4x1 ) +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref_3x1 ) +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref_2x1 ) +GEMMSUP_KER_PROT( double, d, gemmsup_r_haswell_ref_1x1 ) + +// gemmsup_rv (mkernel in m dim) + +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_6x8m ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_6x6m ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_6x4m ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_6x2m ) + +// gemmsup_rv (mkernel in n dim) + +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_6x8n ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_5x8n ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_4x8n ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_3x8n ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_2x8n ) +GEMMSUP_KER_PROT( double, d, gemmsup_rv_haswell_asm_1x8n ) + +// gemmsup_rd + +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_6x8 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_2x8 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_1x8 ) + +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_6x4 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_2x4 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_1x4 ) + +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_6x2 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_3x2 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_2x2 ) +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_1x2 ) + +// gemmsup_rd (mkernel in m dim) + +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_6x8m ) +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_6x4m ) +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_6x2m ) + +// gemmsup_rd (mkernel in n dim) + +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_6x8n ) +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_3x8n ) +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_2x8n ) +GEMMSUP_KER_PROT( double, d, gemmsup_rd_haswell_asm_1x8n ) + diff --git a/ref_kernels/3/bli_gemmsup_ref.c b/ref_kernels/3/bli_gemmsup_ref.c new file mode 100644 index 000000000..dc09267fa --- /dev/null +++ b/ref_kernels/3/bli_gemmsup_ref.c @@ -0,0 +1,562 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name(s) of the copyright holder(s) nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" + +// +// -- Row storage case --------------------------------------------------------- +// + +#undef GENTFUNC +#define GENTFUNC( ctype, ch, opname, arch, suf ) \ +\ +void PASTEMAC3(ch,opname,arch,suf) \ + ( \ + conj_t conja, \ + conj_t conjb, \ + dim_t m, \ + dim_t n, \ + dim_t k, \ + ctype* restrict alpha, \ + ctype* restrict a, inc_t rs_a, inc_t cs_a, \ + ctype* restrict b, inc_t rs_b, inc_t cs_b, \ + ctype* restrict beta, \ + ctype* restrict c, inc_t rs_c, inc_t cs_c, \ + auxinfo_t* restrict data, \ + cntx_t* restrict cntx \ + ) \ +{ \ + /* NOTE: This microkernel can actually handle arbitrarily large + values of m, n, and k. */ \ +\ + /* Traverse c by rows. */ \ + for ( dim_t i = 0; i < m; ++i ) \ + { \ + ctype* restrict ci = &c[ i*rs_c ]; \ + ctype* restrict ai = &a[ i*rs_a ]; \ +\ + for ( dim_t j = 0; j < n; ++j ) \ + { \ + ctype* restrict cij = &ci[ j*cs_c ]; \ + ctype* restrict bj = &b [ j*cs_b ]; \ + ctype ab; \ +\ + PASTEMAC(ch,set0s)( ab ); \ +\ + /* Perform a dot product to update the (i,j) element of c. */ \ + for ( dim_t l = 0; l < k; ++l ) \ + { \ + ctype* restrict aij = &ai[ l*cs_a ]; \ + ctype* restrict bij = &bj[ l*rs_b ]; \ +\ + PASTEMAC(ch,dots)( *aij, *bij, ab ); \ + } \ +\ + /* If beta is one, add ab into c. If beta is zero, overwrite c + with the result in ab. Otherwise, scale by beta and accumulate + ab to c. */ \ + if ( PASTEMAC(ch,eq1)( *beta ) ) \ + { \ + PASTEMAC(ch,axpys)( *alpha, ab, *cij ); \ + } \ + else if ( PASTEMAC(ch,eq0)( *beta ) ) \ + { \ + PASTEMAC(ch,scal2s)( *alpha, ab, *cij ); \ + } \ + else \ + { \ + PASTEMAC(ch,axpbys)( *alpha, ab, *beta, *cij ); \ + } \ + } \ + } \ +} + +INSERT_GENTFUNC_BASIC2( gemmsup_r, BLIS_CNAME_INFIX, BLIS_REF_SUFFIX ) + +// +// -- Column storage case ------------------------------------------------------ +// + +#undef GENTFUNC +#define GENTFUNC( ctype, ch, opname, arch, suf ) \ +\ +void PASTEMAC3(ch,opname,arch,suf) \ + ( \ + conj_t conja, \ + conj_t conjb, \ + dim_t m, \ + dim_t n, \ + dim_t k, \ + ctype* restrict alpha, \ + ctype* restrict a, inc_t rs_a, inc_t cs_a, \ + ctype* restrict b, inc_t rs_b, inc_t cs_b, \ + ctype* restrict beta, \ + ctype* restrict c, inc_t rs_c, inc_t cs_c, \ + auxinfo_t* restrict data, \ + cntx_t* restrict cntx \ + ) \ +{ \ + /* NOTE: This microkernel can actually handle arbitrarily large + values of m, n, and k. */ \ +\ + /* Traverse c by columns. */ \ + for ( dim_t j = 0; j < n; ++j ) \ + { \ + ctype* restrict cj = &c[ j*cs_c ]; \ + ctype* restrict bj = &b[ j*cs_b ]; \ +\ + for ( dim_t i = 0; i < m; ++i ) \ + { \ + ctype* restrict cij = &cj[ i*rs_c ]; \ + ctype* restrict ai = &a [ i*rs_a ]; \ + ctype ab; \ +\ + PASTEMAC(ch,set0s)( ab ); \ +\ + /* Perform a dot product to update the (i,j) element of c. */ \ + for ( dim_t l = 0; l < k; ++l ) \ + { \ + ctype* restrict aij = &ai[ l*cs_a ]; \ + ctype* restrict bij = &bj[ l*rs_b ]; \ +\ + PASTEMAC(ch,dots)( *aij, *bij, ab ); \ + } \ +\ + /* If beta is one, add ab into c. If beta is zero, overwrite c + with the result in ab. Otherwise, scale by beta and accumulate + ab to c. */ \ + if ( PASTEMAC(ch,eq1)( *beta ) ) \ + { \ + PASTEMAC(ch,axpys)( *alpha, ab, *cij ); \ + } \ + else if ( PASTEMAC(ch,eq0)( *beta ) ) \ + { \ + PASTEMAC(ch,scal2s)( *alpha, ab, *cij ); \ + } \ + else \ + { \ + PASTEMAC(ch,axpbys)( *alpha, ab, *beta, *cij ); \ + } \ + } \ + } \ +} + +INSERT_GENTFUNC_BASIC2( gemmsup_c, BLIS_CNAME_INFIX, BLIS_REF_SUFFIX ) + +// +// -- General storage case ----------------------------------------------------- +// + +INSERT_GENTFUNC_BASIC2( gemmsup_g, BLIS_CNAME_INFIX, BLIS_REF_SUFFIX ) + + + + + + + + +#if 0 + +// +// -- Row storage case --------------------------------------------------------- +// + +#undef GENTFUNC +#define GENTFUNC( ctype, ch, opname, arch, suf ) \ +\ +void PASTEMAC3(ch,opname,arch,suf) \ + ( \ + conj_t conja, \ + conj_t conjb, \ + dim_t m, \ + dim_t n, \ + dim_t k, \ + ctype* restrict alpha, \ + ctype* restrict a, inc_t rs_a, inc_t cs_a, \ + ctype* restrict b, inc_t rs_b, inc_t cs_b, \ + ctype* restrict beta, \ + ctype* restrict c, inc_t rs_c, inc_t cs_c, \ + auxinfo_t* restrict data, \ + cntx_t* restrict cntx \ + ) \ +{ \ + const dim_t mn = m * n; \ +\ + ctype ab[ BLIS_STACK_BUF_MAX_SIZE \ + / sizeof( ctype ) ] \ + __attribute__((aligned(BLIS_STACK_BUF_ALIGN_SIZE))); \ + const inc_t rs_ab = n; \ + const inc_t cs_ab = 1; \ +\ +\ + /* Assumptions: m <= mr, n <= nr so that the temporary array ab is + sufficiently large enough to hold the m x n microtile. + + The ability to handle m < mr and n < nr is being provided so that + optimized ukernels can call one of these reference implementations + for their edge cases, if they choose. When they do so, they will + need to call the function directly, by its configuration-mangled + name, since it will have been overwritten in the context when + the optimized ukernel functions are registered. */ \ +\ +\ + /* Initialize the accumulator elements in ab to zero. */ \ + for ( dim_t i = 0; i < mn; ++i ) \ + { \ + PASTEMAC(ch,set0s)( ab[i] ); \ + } \ +\ + /* Perform a series of k rank-1 updates into ab. */ \ + for ( dim_t l = 0; l < k; ++l ) \ + { \ + /* Traverse ab by rows; assume cs_ab = 1. */ \ + for ( dim_t i = 0; i < m; ++i ) \ + { \ + for ( dim_t j = 0; j < n; ++j ) \ + { \ + PASTEMAC(ch,dots) \ + ( \ + a[ i*rs_a ], \ + b[ j*cs_b ], \ + ab[ i*rs_ab + j*cs_ab ] \ + ); \ + } \ + } \ +\ + a += cs_a; \ + b += rs_b; \ + } \ +\ + /* Scale the result in ab by alpha. */ \ + for ( dim_t i = 0; i < mn; ++i ) \ + { \ + PASTEMAC(ch,scals)( *alpha, ab[i] ); \ + } \ +\ +\ + /* If beta is one, add ab into c. If beta is zero, overwrite c with the + result in ab. Otherwise, scale by beta and accumulate ab to c. */ \ + if ( PASTEMAC(ch,eq1)( *beta ) ) \ + { \ + /* Traverse ab and c by rows; assume cs_a = cs_a = 1. */ \ + for ( dim_t i = 0; i < m; ++i ) \ + for ( dim_t j = 0; j < n; ++j ) \ + { \ + PASTEMAC(ch,adds) \ + ( \ + ab[ i*rs_ab + j*1 ], \ + c[ i*rs_c + j*1 ] \ + ) \ + } \ + } \ + else if ( PASTEMAC(ch,eq0)( *beta ) ) \ + { \ +\ + /* Traverse ab and c by rows; assume cs_a = cs_a = 1. */ \ + for ( dim_t i = 0; i < m; ++i ) \ + for ( dim_t j = 0; j < n; ++j ) \ + { \ + PASTEMAC(ch,copys) \ + ( \ + ab[ i*rs_ab + j*1 ], \ + c[ i*rs_c + j*1 ] \ + ) \ + } \ + } \ + else /* beta != 0 && beta != 1 */ \ + { \ + /* Traverse ab and c by rows; assume cs_a = cs_a = 1. */ \ + for ( dim_t i = 0; i < m; ++i ) \ + for ( dim_t j = 0; j < n; ++j ) \ + { \ + PASTEMAC(ch,xpbys) \ + ( \ + ab[ i*rs_ab + j*1 ], \ + *beta, \ + c[ i*rs_c + j*1 ] \ + ) \ + } \ + } \ +} + +INSERT_GENTFUNC_BASIC2( gemmsup_r, BLIS_CNAME_INFIX, BLIS_REF_SUFFIX ) + +// +// -- Column storage case ------------------------------------------------------ +// + +#undef GENTFUNC +#define GENTFUNC( ctype, ch, opname, arch, suf ) \ +\ +void PASTEMAC3(ch,opname,arch,suf) \ + ( \ + conj_t conja, \ + conj_t conjb, \ + dim_t m, \ + dim_t n, \ + dim_t k, \ + ctype* restrict alpha, \ + ctype* restrict a, inc_t rs_a, inc_t cs_a, \ + ctype* restrict b, inc_t rs_b, inc_t cs_b, \ + ctype* restrict beta, \ + ctype* restrict c, inc_t rs_c, inc_t cs_c, \ + auxinfo_t* restrict data, \ + cntx_t* restrict cntx \ + ) \ +{ \ + const dim_t mn = m * n; \ +\ + ctype ab[ BLIS_STACK_BUF_MAX_SIZE \ + / sizeof( ctype ) ] \ + __attribute__((aligned(BLIS_STACK_BUF_ALIGN_SIZE))); \ + const inc_t rs_ab = 1; \ + const inc_t cs_ab = m; \ +\ +\ + /* Assumptions: m <= mr, n <= nr so that the temporary array ab is + sufficiently large enough to hold the m x n microtile. + + The ability to handle m < mr and n < nr is being provided so that + optimized ukernels can call one of these reference implementations + for their edge cases, if they choose. When they do so, they will + need to call the function directly, by its configuration-mangled + name, since it will have been overwritten in the context when + the optimized ukernel functions are registered. */ \ +\ +\ + /* Initialize the accumulator elements in ab to zero. */ \ + for ( dim_t i = 0; i < mn; ++i ) \ + { \ + PASTEMAC(ch,set0s)( ab[i] ); \ + } \ +\ + /* Perform a series of k rank-1 updates into ab. */ \ + for ( dim_t l = 0; l < k; ++l ) \ + { \ + /* Traverse ab by columns; assume rs_ab = 1. */ \ + for ( dim_t j = 0; j < n; ++j ) \ + { \ + for ( dim_t i = 0; i < m; ++i ) \ + { \ + PASTEMAC(ch,dots) \ + ( \ + a[ i*rs_a ], \ + b[ j*cs_b ], \ + ab[ i*rs_ab + j*cs_ab ] \ + ); \ + } \ + } \ +\ + a += cs_a; \ + b += rs_b; \ + } \ +\ + /* Scale the result in ab by alpha. */ \ + for ( dim_t i = 0; i < mn; ++i ) \ + { \ + PASTEMAC(ch,scals)( *alpha, ab[i] ); \ + } \ +\ +\ + /* If beta is one, add ab into c. If beta is zero, overwrite c with the + result in ab. Otherwise, scale by beta and accumulate ab to c. */ \ + if ( PASTEMAC(ch,eq1)( *beta ) ) \ + { \ + /* Traverse ab and c by columns; assume rs_a = rs_a = 1. */ \ + for ( dim_t j = 0; j < n; ++j ) \ + for ( dim_t i = 0; i < m; ++i ) \ + { \ + PASTEMAC(ch,adds) \ + ( \ + ab[ i*1 + j*cs_ab ], \ + c[ i*1 + j*cs_c ] \ + ) \ + } \ + } \ + else if ( PASTEMAC(ch,eq0)( *beta ) ) \ + { \ + /* Traverse ab and c by columns; assume rs_a = rs_a = 1. */ \ + for ( dim_t j = 0; j < n; ++j ) \ + for ( dim_t i = 0; i < m; ++i ) \ + { \ + PASTEMAC(ch,copys) \ + ( \ + ab[ i*1 + j*cs_ab ], \ + c[ i*1 + j*cs_c ] \ + ) \ + } \ + } \ + else /* beta != 0 && beta != 1 */ \ + { \ + /* Traverse ab and c by columns; assume rs_a = rs_a = 1. */ \ + for ( dim_t j = 0; j < n; ++j ) \ + for ( dim_t i = 0; i < m; ++i ) \ + { \ + PASTEMAC(ch,xpbys) \ + ( \ + ab[ i*1 + j*cs_ab ], \ + *beta, \ + c[ i*1 + j*cs_c ] \ + ) \ + } \ + } \ +} + +INSERT_GENTFUNC_BASIC2( gemmsup_c, BLIS_CNAME_INFIX, BLIS_REF_SUFFIX ) + +// +// -- General storage case ----------------------------------------------------- +// + +#undef GENTFUNC +#define GENTFUNC( ctype, ch, opname, arch, suf ) \ +\ +void PASTEMAC3(ch,opname,arch,suf) \ + ( \ + conj_t conja, \ + conj_t conjb, \ + dim_t m, \ + dim_t n, \ + dim_t k, \ + ctype* restrict alpha, \ + ctype* restrict a, inc_t rs_a, inc_t cs_a, \ + ctype* restrict b, inc_t rs_b, inc_t cs_b, \ + ctype* restrict beta, \ + ctype* restrict c, inc_t rs_c, inc_t cs_c, \ + auxinfo_t* restrict data, \ + cntx_t* restrict cntx \ + ) \ +{ \ + const dim_t mn = m * n; \ +\ + ctype ab[ BLIS_STACK_BUF_MAX_SIZE \ + / sizeof( ctype ) ] \ + __attribute__((aligned(BLIS_STACK_BUF_ALIGN_SIZE))); \ + const inc_t rs_ab = 1; \ + const inc_t cs_ab = m; \ +\ +\ + /* Assumptions: m <= mr, n <= nr so that the temporary array ab is + sufficiently large enough to hold the m x n microtile. + + The ability to handle m < mr and n < nr is being provided so that + optimized ukernels can call one of these reference implementations + for their edge cases, if they choose. When they do so, they will + need to call the function directly, by its configuration-mangled + name, since it will have been overwritten in the context when + the optimized ukernel functions are registered. */ \ +\ +\ + /* Initialize the accumulator elements in ab to zero. */ \ + for ( dim_t i = 0; i < mn; ++i ) \ + { \ + PASTEMAC(ch,set0s)( ab[i] ); \ + } \ +\ + /* Perform a series of k rank-1 updates into ab. */ \ + for ( dim_t l = 0; l < k; ++l ) \ + { \ + /* General storage: doesn't matter how we traverse ab. */ \ + for ( dim_t j = 0; j < n; ++j ) \ + { \ + for ( dim_t i = 0; i < m; ++i ) \ + { \ + PASTEMAC(ch,dots) \ + ( \ + a[ i*rs_a ], \ + b[ j*cs_b ], \ + ab[ i*rs_ab + j*cs_ab ] \ + ); \ + } \ + } \ +\ + a += cs_a; \ + b += rs_b; \ + } \ +\ + /* Scale the result in ab by alpha. */ \ + for ( dim_t i = 0; i < mn; ++i ) \ + { \ + PASTEMAC(ch,scals)( *alpha, ab[i] ); \ + } \ +\ +\ + /* If beta is one, add ab into c. If beta is zero, overwrite c with the + result in ab. Otherwise, scale by beta and accumulate ab to c. */ \ + if ( PASTEMAC(ch,eq1)( *beta ) ) \ + { \ + /* General storage: doesn't matter how we traverse ab and c. */ \ + for ( dim_t j = 0; j < n; ++j ) \ + for ( dim_t i = 0; i < m; ++i ) \ + { \ + PASTEMAC(ch,adds) \ + ( \ + ab[ i*rs_ab + j*cs_ab ], \ + c[ i*rs_c + j*cs_c ] \ + ) \ + } \ + } \ + else if ( PASTEMAC(ch,eq0)( *beta ) ) \ + { \ + /* General storage: doesn't matter how we traverse ab and c. */ \ + for ( dim_t j = 0; j < n; ++j ) \ + for ( dim_t i = 0; i < m; ++i ) \ + { \ + PASTEMAC(ch,copys) \ + ( \ + ab[ i*rs_ab + j*cs_ab ], \ + c[ i*rs_c + j*cs_c ] \ + ) \ + } \ + } \ + else /* beta != 0 && beta != 1 */ \ + { \ + /* General storage: doesn't matter how we traverse ab and c. */ \ + for ( dim_t j = 0; j < n; ++j ) \ + for ( dim_t i = 0; i < m; ++i ) \ + { \ + PASTEMAC(ch,xpbys) \ + ( \ + ab[ i*rs_ab + j*cs_ab ], \ + *beta, \ + c[ i*rs_c + j*cs_c ] \ + ) \ + } \ + } \ +} + +INSERT_GENTFUNC_BASIC2( gemmsup_g, BLIS_CNAME_INFIX, BLIS_REF_SUFFIX ) + +#endif diff --git a/ref_kernels/bli_cntx_ref.c b/ref_kernels/bli_cntx_ref.c index d97c89bea..f07305841 100644 --- a/ref_kernels/bli_cntx_ref.c +++ b/ref_kernels/bli_cntx_ref.c @@ -124,6 +124,26 @@ // template. #include "bli_l3_ind_ukr.h" +// -- Level-3 small/unpacked micro-kernel prototype definitions ---------------- + +// NOTE: This results in redundant prototypes for gemmsup_r and gemmsup_c +// kernels, but since they will be identical the compiler won't complain. + +#undef gemmsup_rv_ukr_name +#define gemmsup_rv_ukr_name GENARNAME(gemmsup_r) +#undef gemmsup_rg_ukr_name +#define gemmsup_rg_ukr_name GENARNAME(gemmsup_r) +#undef gemmsup_cv_ukr_name +#define gemmsup_cv_ukr_name GENARNAME(gemmsup_c) +#undef gemmsup_cg_ukr_name +#define gemmsup_cg_ukr_name GENARNAME(gemmsup_c) + +#undef gemmsup_gx_ukr_name +#define gemmsup_gx_ukr_name GENARNAME(gemmsup_g) + +// Include the small/unpacked kernel API template. +#include "bli_l3_sup_ker.h" + // -- Level-1m (packm/unpackm) kernel prototype redefinitions ------------------ #undef packm_2xk_ker_name @@ -295,14 +315,24 @@ // -- Macros to help concisely instantiate bli_func_init() --------------------- #define gen_func_init_co( func_p, opname ) \ -\ +{ \ bli_func_init( func_p, NULL, NULL, \ - PASTEMAC(c,opname), PASTEMAC(z,opname) ) + PASTEMAC(c,opname), PASTEMAC(z,opname) ); \ +} #define gen_func_init( func_p, opname ) \ -\ +{ \ bli_func_init( func_p, PASTEMAC(s,opname), PASTEMAC(d,opname), \ - PASTEMAC(c,opname), PASTEMAC(z,opname) ) + PASTEMAC(c,opname), PASTEMAC(z,opname) ); \ +} + +#define gen_sup_func_init( func0_p, func1_p, opname ) \ +{ \ + bli_func_init( func0_p, PASTEMAC(s,opname), PASTEMAC(d,opname), \ + PASTEMAC(c,opname), PASTEMAC(z,opname) ); \ + bli_func_init( func1_p, PASTEMAC(s,opname), PASTEMAC(d,opname), \ + PASTEMAC(c,opname), PASTEMAC(z,opname) ); \ +} @@ -314,9 +344,11 @@ void GENBARNAME(cntx_init) ) { blksz_t blkszs[ BLIS_NUM_BLKSZS ]; + blksz_t thresh[ BLIS_NUM_THRESH ]; func_t* funcs; mbool_t* mbools; dim_t i; + void** vfuncs; // -- Clear the context ---------------------------------------------------- @@ -363,6 +395,11 @@ void GENBARNAME(cntx_init) funcs = bli_cntx_l3_vir_ukrs_buf( cntx ); + // NOTE: We set the virtual micro-kernel slots to contain the addresses + // of the native micro-kernels. In general, the ukernels in the virtual + // ukernel slots are always called, and if the function called happens to + // be a virtual micro-kernel, it will then know to find its native + // ukernel in the native ukernel slots. gen_func_init( &funcs[ BLIS_GEMM_UKR ], gemm_ukr_name ); gen_func_init( &funcs[ BLIS_GEMMTRSM_L_UKR ], gemmtrsm_l_ukr_name ); gen_func_init( &funcs[ BLIS_GEMMTRSM_U_UKR ], gemmtrsm_u_ukr_name ); @@ -388,6 +425,91 @@ void GENBARNAME(cntx_init) bli_mbool_init( &mbools[ BLIS_TRSM_U_UKR ], FALSE, FALSE, FALSE, FALSE ); + // -- Set level-3 small/unpacked thresholds -------------------------------- + + // NOTE: The default thresholds are set very low so that the sup framework + // only actives for exceedingly small dimensions. If a sub-configuration + // registers optimized sup kernels, then that sub-configuration should also + // register new (probably larger) thresholds that are almost surely more + // appropriate that these default values. + // s d c z + bli_blksz_init_easy( &thresh[ BLIS_MT ], 10, 10, 10, 10 ); + bli_blksz_init_easy( &thresh[ BLIS_NT ], 10, 10, 10, 10 ); + bli_blksz_init_easy( &thresh[ BLIS_KT ], 10, 10, 10, 10 ); + + // Initialize the context with the default thresholds. + bli_cntx_set_l3_sup_thresh + ( + 3, + BLIS_MT, &thresh[ BLIS_MT ], + BLIS_NT, &thresh[ BLIS_NT ], + BLIS_KT, &thresh[ BLIS_KT ], + cntx + ); + + + // -- Set level-3 small/unpacked handlers ---------------------------------- + + vfuncs = bli_cntx_l3_sup_handlers_buf( cntx ); + + // Initialize all of the function pointers to NULL; + for ( i = 0; i < BLIS_NUM_LEVEL3_OPS; ++i ) vfuncs[ i ] = NULL; + + // The level-3 sup handlers are oapi-based, so we only set one slot per + // operation. + + // Set the gemm slot to the default gemm sup handler. + vfuncs[ BLIS_GEMM ] = bli_gemmsup_ref; + + + // -- Set level-3 small/unpacked micro-kernels and preferences ------------- + + funcs = bli_cntx_l3_sup_kers_buf( cntx ); + mbools = bli_cntx_l3_sup_kers_prefs_buf( cntx ); + +#if 0 + // Adhere to the small/unpacked ukernel mappings: + // - rv -> rrr, rcr + // - rg -> rrc, rcc + // - cv -> ccr, ccc + // - cg -> crr, crc + gen_sup_func_init( &funcs[ BLIS_RRR ], + &funcs[ BLIS_RCR ], gemmsup_rv_ukr_name ); + gen_sup_func_init( &funcs[ BLIS_RRC ], + &funcs[ BLIS_RCC ], gemmsup_rg_ukr_name ); + gen_sup_func_init( &funcs[ BLIS_CCR ], + &funcs[ BLIS_CCC ], gemmsup_cv_ukr_name ); + gen_sup_func_init( &funcs[ BLIS_CRR ], + &funcs[ BLIS_CRC ], gemmsup_cg_ukr_name ); +#endif + gen_func_init( &funcs[ BLIS_RRR ], gemmsup_rv_ukr_name ); + gen_func_init( &funcs[ BLIS_RRC ], gemmsup_rv_ukr_name ); + gen_func_init( &funcs[ BLIS_RCR ], gemmsup_rv_ukr_name ); + gen_func_init( &funcs[ BLIS_RCC ], gemmsup_rv_ukr_name ); + gen_func_init( &funcs[ BLIS_CRR ], gemmsup_cv_ukr_name ); + gen_func_init( &funcs[ BLIS_CRC ], gemmsup_cv_ukr_name ); + gen_func_init( &funcs[ BLIS_CCR ], gemmsup_cv_ukr_name ); + gen_func_init( &funcs[ BLIS_CCC ], gemmsup_cv_ukr_name ); + + // Register the general-stride/generic ukernel to the "catch-all" slot + // associated with the BLIS_XXX enum value. This slot will be queried if + // *any* operand is stored with general stride. + gen_func_init( &funcs[ BLIS_XXX ], gemmsup_gx_ukr_name ); + + + // Set the l3 sup ukernel storage preferences. + bli_mbool_init( &mbools[ BLIS_RRR ], TRUE, TRUE, TRUE, TRUE ); + bli_mbool_init( &mbools[ BLIS_RRC ], TRUE, TRUE, TRUE, TRUE ); + bli_mbool_init( &mbools[ BLIS_RCR ], TRUE, TRUE, TRUE, TRUE ); + bli_mbool_init( &mbools[ BLIS_RCC ], TRUE, TRUE, TRUE, TRUE ); + bli_mbool_init( &mbools[ BLIS_CRR ], FALSE, FALSE, FALSE, FALSE ); + bli_mbool_init( &mbools[ BLIS_CRC ], FALSE, FALSE, FALSE, FALSE ); + bli_mbool_init( &mbools[ BLIS_CCR ], FALSE, FALSE, FALSE, FALSE ); + bli_mbool_init( &mbools[ BLIS_CCC ], FALSE, FALSE, FALSE, FALSE ); + + bli_mbool_init( &mbools[ BLIS_XXX ], FALSE, FALSE, FALSE, FALSE ); + + // -- Set level-1f kernels ------------------------------------------------- funcs = bli_cntx_l1f_kers_buf( cntx ); diff --git a/test/sup/Makefile b/test/sup/Makefile new file mode 100644 index 000000000..52f60a637 --- /dev/null +++ b/test/sup/Makefile @@ -0,0 +1,446 @@ +#!/bin/bash +# +# BLIS +# An object-based framework for developing high-performance BLAS-like +# libraries. +# +# Copyright (C) 2014, The University of Texas at Austin +# Copyright (C) 2019, Advanced Micro Devices, Inc. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# - Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# - Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# - Neither the name(s) of the copyright holder(s) nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# + +# +# Makefile +# +# Field G. Van Zee +# +# Makefile for standalone BLIS test drivers. +# + +# +# --- Makefile PHONY target definitions ---------------------------------------- +# + +.PHONY: all all-st all-mt \ + blis blis-st blis-mt \ + clean cleanx + + + +# +# --- Determine makefile fragment location ------------------------------------- +# + +# Comments: +# - DIST_PATH is assumed to not exist if BLIS_INSTALL_PATH is given. +# - We must use recursively expanded assignment for LIB_PATH and INC_PATH in +# the second case because CONFIG_NAME is not yet set. +ifneq ($(strip $(BLIS_INSTALL_PATH)),) +LIB_PATH := $(BLIS_INSTALL_PATH)/lib +INC_PATH := $(BLIS_INSTALL_PATH)/include/blis +SHARE_PATH := $(BLIS_INSTALL_PATH)/share/blis +else +DIST_PATH := ../.. +LIB_PATH = ../../lib/$(CONFIG_NAME) +INC_PATH = ../../include/$(CONFIG_NAME) +SHARE_PATH := ../.. +endif + + + +# +# --- Include common makefile definitions -------------------------------------- +# + +# Include the common makefile fragment. +-include $(SHARE_PATH)/common.mk + + + +# +# --- BLAS and LAPACK implementations ------------------------------------------ +# + +# BLIS library and header path. This is simply wherever it was installed. +#BLIS_LIB_PATH := $(INSTALL_PREFIX)/lib +#BLIS_INC_PATH := $(INSTALL_PREFIX)/include/blis + +# BLIS library. +#BLIS_LIB := $(BLIS_LIB_PATH)/libblis.a + +# BLAS library path(s). This is where the BLAS libraries reside. +HOME_LIB_PATH := $(HOME)/flame/lib +MKL_LIB_PATH := $(HOME)/intel/mkl/lib/intel64 + +# OpenBLAS +OPENBLAS_LIB := $(HOME_LIB_PATH)/libopenblas.a +OPENBLASP_LIB := $(HOME_LIB_PATH)/libopenblasp.a + +# ATLAS +ATLAS_LIB := $(HOME_LIB_PATH)/libf77blas.a \ + $(HOME_LIB_PATH)/libatlas.a + +# Eigen +EIGEN_INC := $(HOME)/flame/eigen/include/eigen3 +EIGEN_LIB := $(HOME_LIB_PATH)/libeigen_blas_static.a +EIGENP_LIB := $(EIGEN_LIB) + +# MKL +MKL_LIB := -L$(MKL_LIB_PATH) \ + -lmkl_intel_lp64 \ + -lmkl_core \ + -lmkl_sequential \ + -lpthread -lm -ldl +MKLP_LIB := -L$(MKL_LIB_PATH) \ + -lmkl_intel_lp64 \ + -lmkl_core \ + -lmkl_gnu_thread \ + -lpthread -lm -ldl -fopenmp + #-L$(ICC_LIB_PATH) \ + #-lgomp + +VENDOR_LIB := $(MKL_LIB) +VENDORP_LIB := $(MKLP_LIB) + + +# +# --- Problem size definitions ------------------------------------------------- +# + +# Single core +PS_BEGIN := 16 +PS_MAX := 800 +PS_INC := 16 + +# Multicore +P1_BEGIN := 120 +P1_MAX := 6000 +P1_INC := 120 + + +# +# --- General build definitions ------------------------------------------------ +# + +TEST_SRC_PATH := . +TEST_OBJ_PATH := . + +# Gather all local object files. +TEST_OBJS := $(sort $(patsubst $(TEST_SRC_PATH)/%.c, \ + $(TEST_OBJ_PATH)/%.o, \ + $(wildcard $(TEST_SRC_PATH)/*.c))) + +# Override the value of CINCFLAGS so that the value of CFLAGS returned by +# get-frame-cflags-for() is not cluttered up with include paths needed only +# while building BLIS. +CINCFLAGS := -I$(INC_PATH) + +# Use the "framework" CFLAGS for the configuration family. +CFLAGS := $(call get-user-cflags-for,$(CONFIG_NAME)) + +# Add local header paths to CFLAGS. +CFLAGS += -I$(TEST_SRC_PATH) + +# Locate the libblis library to which we will link. +LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) + +# Define a set of CFLAGS for use with C++ and Eigen. +CXXFLAGS := $(subst -std=c99,-std=c++11,$(CFLAGS)) +CXXFLAGS += -I$(EIGEN_INC) + +# Create a copy of CXXFLAGS without -fopenmp in order to disable multithreading. +CXXFLAGS_ST := -march=native $(subst -fopenmp,,$(CXXFLAGS)) +CXXFLAGS_MT := -march=native $(CXXFLAGS) + +# Single or multithreaded string +STR_ST := -DTHR_STR=\"st\" +STR_MT := -DTHR_STR=\"mt\" + +# Number of trials per problem size. +N_TRIALS := -DN_TRIALS=3 + +# Problem size specification +PDEF_ST := -DP_BEGIN=$(PS_BEGIN) \ + -DP_MAX=$(PS_MAX) \ + -DP_INC=$(PS_INC) + +PDEF_MT := -DP_BEGIN=$(P1_BEGIN) \ + -DP_MAX=$(P1_MAX) \ + -DP_INC=$(P1_INC) + +ifeq ($(E),1) +ERRCHK := -DERROR_CHECK +else +ERRCHK := -DNO_ERROR_CHECK +endif + +# Enumerate possible datatypes and computation precisions. +#dts := s d c z +DTS := d + +TRANS := n_n \ + n_t \ + t_n \ + t_t + +STORS := r_r_r \ + r_r_c \ + r_c_r \ + r_c_c \ + c_r_r \ + c_r_c \ + c_c_r \ + c_c_c + +SHAPES := l_l_s \ + l_s_l \ + s_l_l \ + s_s_l \ + s_l_s \ + l_s_s + +SMS := 6 +SNS := 8 +SKS := 4 + + +# +# --- Function definitions ----------------------------------------------------- +# + +# A function to strip the underscores from a list of strings. +stripu = $(subst _,,$(1)) + +# Various functions that help us construct the datatype combinations and then +# extract the needed datatype strings and C preprocessor define flags. +get-1of2 = $(word 1,$(subst _, ,$(1))) +get-2of2 = $(word 2,$(subst _, ,$(1))) + +get-1of3 = $(word 1,$(subst _, ,$(1))) +get-2of3 = $(word 2,$(subst _, ,$(1))) +get-3of3 = $(word 3,$(subst _, ,$(1))) + +# Datatype defs. +get-dt-cpp = $(strip \ + $(if $(findstring s,$(1)),-DDT=BLIS_FLOAT -DIS_FLOAT,\ + $(if $(findstring d,$(1)),-DDT=BLIS_DOUBLE -DIS_DOUBLE,\ + $(if $(findstring c,$(1)),-DDT=BLIS_SCOMPLEX -DIS_SCOMPLEX,\ + -DDT=BLIS_DCOMPLEX -DIS_DCOMPLEX)))) + +# Transpose defs. +get-tra-defs-a = $(strip $(subst n,-DTRANSA=BLIS_NO_TRANSPOSE -DA_NOTRANS, \ + $(subst t,-DTRANSA=BLIS_TRANSPOSE -DA_TRANS,$(call get-1of2,$(1))))) +get-tra-defs-b = $(strip $(subst n,-DTRANSB=BLIS_NO_TRANSPOSE -DB_NOTRANS, \ + $(subst t,-DTRANSB=BLIS_TRANSPOSE -DB_TRANS,$(call get-2of2,$(1))))) +get-tra-defs = $(call get-tra-defs-a,$(1)) $(call get-tra-defs-b,$(1)) + +# Storage defs. +get-sto-uch-a = $(strip $(subst r,R, \ + $(subst c,C,$(call get-1of3,$(1))))) +get-sto-uch-b = $(strip $(subst r,R, \ + $(subst c,C,$(call get-2of3,$(1))))) +get-sto-uch-c = $(strip $(subst r,R, \ + $(subst c,C,$(call get-3of3,$(1))))) +get-sto-defs = $(strip \ + -DSTOR3=BLIS_$(call get-sto-uch-a,$(1))$(call get-sto-uch-b,$(1))$(call get-sto-uch-c,$(1)) \ + -DA_STOR_$(call get-sto-uch-a,$(1)) \ + -DB_STOR_$(call get-sto-uch-b,$(1)) \ + -DC_STOR_$(call get-sto-uch-c,$(1))) + +# Dimension defs. +get-shape-defs-cm = $(if $(findstring l,$(1)),-DM_DIM=-1,-DM_DIM=$(2)) +get-shape-defs-cn = $(if $(findstring l,$(1)),-DN_DIM=-1,-DN_DIM=$(2)) +get-shape-defs-ck = $(if $(findstring l,$(1)),-DK_DIM=-1,-DK_DIM=$(2)) +get-shape-defs-m = $(call get-shape-defs-cm,$(call get-1of3,$(1)),$(2)) +get-shape-defs-n = $(call get-shape-defs-cn,$(call get-2of3,$(1)),$(2)) +get-shape-defs-k = $(call get-shape-defs-ck,$(call get-3of3,$(1)),$(2)) + +# arguments: 1: shape (w/ underscores) 2: smallm 3: smalln 4: smallk +get-shape-defs = $(strip $(call get-shape-defs-m,$(1),$(2)) \ + $(call get-shape-defs-n,$(1),$(3)) \ + $(call get-shape-defs-k,$(1),$(4))) + +#$(error l_l_s 6 8 4 = $(call get-shape-defs,l_l_s,6,8,4)) + +# Shape-dimension string. +get-shape-str-ch = $(if $(findstring l,$(1)),p,$(2)) +get-shape-str-m = $(call get-shape-str-ch,$(call get-1of3,$(1)),$(2)) +get-shape-str-n = $(call get-shape-str-ch,$(call get-2of3,$(1)),$(2)) +get-shape-str-k = $(call get-shape-str-ch,$(call get-3of3,$(1)),$(2)) + +# arguments: 1: shape (w/ underscores) 2: smallm 3: smalln 4: smallk +get-shape-dim-str = m$(call get-shape-str-m,$(1),$(2))n$(call get-shape-str-n,$(1),$(3))k$(call get-shape-str-k,$(1),$(4)) + +# Implementation defs. +# Define a function to return the appropriate -DSTR= and -D[BLIS|BLAS] flags. +get-imp-defs = $(strip $(subst blissup,-DSTR=\"$(1)\" -DBLIS -DSUP, \ + $(subst blislpab,-DSTR=\"$(1)\" -DBLIS, \ + $(subst eigen,-DSTR=\"$(1)\" -DEIGEN, \ + $(subst openblas,-DSTR=\"$(1)\" -DCBLAS, \ + $(subst vendor,-DSTR=\"$(1)\" -DCBLAS,$(1))))))) + +TRANS0 = $(call stripu,$(TRANS)) +STORS0 = $(call stripu,$(STORS)) + +# Limit BLAS and Eigen to only using all row-stored, or all column-stored matrices. +BSTORS0 = rrr ccc +ESTORS0 = rrr ccc + + +# +# --- Object and binary file definitons ---------------------------------------- +# + +get-st-objs = $(foreach dt,$(1),$(foreach tr,$(2),$(foreach st,$(3),$(foreach sh,$(4),$(foreach sm,$(5),$(foreach sn,$(6),$(foreach sk,$(7),test_$(dt)gemm_$(tr)_$(st)_$(call get-shape-dim-str,$(sh),$(sm),$(sn),$(sk))_$(8)_st.o))))))) + +# Build a list of object files and binaries for each single-threaded +# implementation using the get-st-objs() function defined above. +BLISSUP_ST_OBJS := $(call get-st-objs,$(DTS),$(TRANS0),$(STORS0),$(SHAPES),$(SMS),$(SNS),$(SKS),blissup) +BLISSUP_ST_BINS := $(patsubst %.o,%.x,$(BLISSUP_ST_OBJS)) + +BLISLPAB_ST_OBJS := $(call get-st-objs,$(DTS),$(TRANS0),$(STORS0),$(SHAPES),$(SMS),$(SNS),$(SKS),blislpab) +BLISLPAB_ST_BINS := $(patsubst %.o,%.x,$(BLISLPAB_ST_OBJS)) + +EIGEN_ST_OBJS := $(call get-st-objs,$(DTS),$(TRANS0),$(ESTORS0),$(SHAPES),$(SMS),$(SNS),$(SKS),eigen) +EIGEN_ST_BINS := $(patsubst %.o,%.x,$(EIGEN_ST_OBJS)) + +OPENBLAS_ST_OBJS := $(call get-st-objs,$(DTS),$(TRANS0),$(BSTORS0),$(SHAPES),$(SMS),$(SNS),$(SKS),openblas) +OPENBLAS_ST_BINS := $(patsubst %.o,%.x,$(OPENBLAS_ST_OBJS)) + +VENDOR_ST_OBJS := $(call get-st-objs,$(DTS),$(TRANS0),$(BSTORS0),$(SHAPES),$(SMS),$(SNS),$(SKS),vendor) +VENDOR_ST_BINS := $(patsubst %.o,%.x,$(VENDOR_ST_OBJS)) + +#$(error "objs = $(EIGEN_ST_BINS)" ) + +# Mark the object files as intermediate so that make will remove them +# automatically after building the binaries on which they depend. +.INTERMEDIATE: $(BLISSUP_ST_OBJS) \ + $(BLISLPAB_ST_OBJS) \ + $(EIGEN_ST_OBJS) \ + $(OPENBLAS_ST_OBJS) \ + $(VENDOR_ST_OBJS) + + +# +# --- Targets/rules ------------------------------------------------------------ +# + +all: st + +blissup: blissup-st +blislpab: blislpab-st +eigen: eigen-st +openblas: openblas-st +vendor: vendor-st + +st: blissup-st blislpab-st eigen-st openblas-st vendor-st +blis: blissup-st blislpab-st + +blissup-st: $(BLISSUP_ST_BINS) +blislpab-st: $(BLISLPAB_ST_BINS) +eigen-st: $(EIGEN_ST_BINS) +openblas-st: $(OPENBLAS_ST_BINS) +vendor-st: $(VENDOR_ST_BINS) + + +# --Object file rules -- + +# Define the implementations for which we will instantiate compilation rules. +BIMPLS := blissup blislpab openblas vendor +EIMPLS := eigen + +# 1 2 3 4 567 8 +# test_dgemm_nn_rrr_mpn6kp_blissup_st.x + +# Define the function that will be used to instantiate compilation rules +# for the various implementations. +define make-st-rule +test_$(1)gemm_$(call stripu,$(2))_$(call stripu,$(3))_$(call get-shape-dim-str,$(4),$(5),$(6),$(7))_$(8)_st.o: test_gemm.c Makefile + $(CC) $(CFLAGS) $(ERRCHK) $(N_TRIALS) $(PDEF_ST) $(call get-dt-cpp,$(1)) $(call get-tra-defs,$(2)) $(call get-sto-defs,$(3)) $(call get-shape-defs,$(4),$(5),$(6),$(7)) $(call get-imp-defs,$(8)) $(STR_ST) -c $$< -o $$@ +endef + +# Instantiate the rule function make-st-rule() for each BLIS/BLAS/CBLAS +# implementation. +$(foreach dt,$(DTS), \ +$(foreach tr,$(TRANS), \ +$(foreach st,$(STORS), \ +$(foreach sh,$(SHAPES), \ +$(foreach sm,$(SMS), \ +$(foreach sn,$(SNS), \ +$(foreach sk,$(SKS), \ +$(foreach impl,$(BIMPLS), \ +$(eval $(call make-st-rule,$(dt),$(tr),$(st),$(sh),$(sm),$(sn),$(sk),$(impl))))))))))) + +# Define the function that will be used to instantiate compilation rules +# for the various implementations. +define make-eigst-rule +test_$(1)gemm_$(call stripu,$(2))_$(call stripu,$(3))_$(call get-shape-dim-str,$(4),$(5),$(6),$(7))_$(8)_st.o: test_gemm.c Makefile + $(CXX) $(CXXFLAGS_ST) $(ERRCHK) $(N_TRIALS) $(PDEF_ST) $(call get-dt-cpp,$(1)) $(call get-tra-defs,$(2)) $(call get-sto-defs,$(3)) $(call get-shape-defs,$(4),$(5),$(6),$(7)) $(call get-imp-defs,$(8)) $(STR_ST) -c $$< -o $$@ +endef + +# Instantiate the rule function make-st-rule() for each Eigen implementation. +$(foreach dt,$(DTS), \ +$(foreach tr,$(TRANS), \ +$(foreach st,$(STORS), \ +$(foreach sh,$(SHAPES), \ +$(foreach sm,$(SMS), \ +$(foreach sn,$(SNS), \ +$(foreach sk,$(SKS), \ +$(foreach impl,$(EIMPLS), \ +$(eval $(call make-eigst-rule,$(dt),$(tr),$(st),$(sh),$(sm),$(sn),$(sk),$(impl))))))))))) + + +# -- Executable file rules -- + +# NOTE: For the BLAS test drivers, we place the BLAS libraries before BLIS +# on the link command line in case BLIS was configured with the BLAS +# compatibility layer. This prevents BLIS from inadvertently getting called +# for the BLAS routines we are trying to test with. + +test_%_blissup_st.x: test_%_blissup_st.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_blislpab_st.x: test_%_blislpab_st.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_eigen_st.x: test_%_eigen_st.o $(LIBBLIS_LINK) + $(CXX) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_openblas_st.x: test_%_openblas_st.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(OPENBLAS_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_vendor_st.x: test_%_vendor_st.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(VENDOR_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + + +# -- Clean rules -- + +clean: cleanx + +cleanx: + - $(RM_F) *.x + diff --git a/test/sup/octave/gen_opsupnames.m b/test/sup/octave/gen_opsupnames.m new file mode 100644 index 000000000..dd7c6ca04 --- /dev/null +++ b/test/sup/octave/gen_opsupnames.m @@ -0,0 +1,35 @@ +function [ r_val1, r_val2 ] = gen_opsupnames( ops, stor, smalldims ) + +nops = size( ops, 1 ); + +smallm = smalldims( 1 ); +smalln = smalldims( 2 ); +smallk = smalldims( 3 ); + +i = 1; + +for io = 1:nops + + op = ops( io, : ); + + opsupnames( i+0, : ) = sprintf( '%s_%s_m%dnpkp', op, stor, smallm ); + opsupnames( i+1, : ) = sprintf( '%s_%s_mpn%dkp', op, stor, smalln ); + opsupnames( i+2, : ) = sprintf( '%s_%s_mpnpk%d', op, stor, smallk ); + opsupnames( i+3, : ) = sprintf( '%s_%s_mpn%dk%d', op, stor, smalln, smallk ); + opsupnames( i+4, : ) = sprintf( '%s_%s_m%dnpk%d', op, stor, smallm, smallk ); + opsupnames( i+5, : ) = sprintf( '%s_%s_m%dn%dkp', op, stor, smallm, smalln ); + + opnames( i+0, : ) = sprintf( '%s', op ); + opnames( i+1, : ) = sprintf( '%s', op ); + opnames( i+2, : ) = sprintf( '%s', op ); + opnames( i+3, : ) = sprintf( '%s', op ); + opnames( i+4, : ) = sprintf( '%s', op ); + opnames( i+5, : ) = sprintf( '%s', op ); + + i = i + 6; +end + +r_val1 = opsupnames; +r_val2 = opnames; + +end diff --git a/test/sup/octave/plot_l3sup_perf.m b/test/sup/octave/plot_l3sup_perf.m new file mode 100644 index 000000000..8d692c64d --- /dev/null +++ b/test/sup/octave/plot_l3sup_perf.m @@ -0,0 +1,232 @@ +function r_val = plot_l3sup_perf( opname, ... + data_blissup, ... + data_blislpab, ... + data_eigen, ... + data_open, ... + data_vend, vend_str, ... + nth, ... + rows, cols, ... + cfreq, ... + dfps, ... + theid ) +if ... %mod(theid-1,cols) == 2 || ... + ... %mod(theid-1,cols) == 3 || ... + ... %mod(theid-1,cols) == 4 || ... + 0 == 1 ... %theid >= 19 + show_plot = 0; +else + show_plot = 1; +end + +legend_plot_id = 11; + +if 1 +ax1 = subplot( rows, cols, theid ); +hold( ax1, 'on' ); +end + +% Set line properties. +color_blissup = 'k'; lines_blissup = '-'; markr_blissup = ''; +color_blislpab = 'k'; lines_blislpab = ':'; markr_blislpab = ''; +color_eigen = 'm'; lines_eigen = '-.'; markr_eigen = 'o'; +color_open = 'r'; lines_open = '--'; markr_open = 'o'; +color_vend = 'b'; lines_vend = '-.'; markr_vend = '.'; + +% Compute the peak performance in terms of the number of double flops +% executable per cycle and the clock rate. +if opname(1) == 's' || opname(1) == 'c' + flopspercycle = dfps * 2; +else + flopspercycle = dfps; +end +max_perf_core = (flopspercycle * cfreq) * 1; + +% Escape underscores in the title. +title_opname = strrep( opname, '_', '\_' ); + +% Print the title to a string. +titlename = '%s'; +titlename = sprintf( titlename, title_opname ); + +% Set the legend strings. +blissup_legend = sprintf( 'BLIS sup' ); +blislpab_legend = sprintf( 'BLIS conv' ); +eigen_legend = sprintf( 'Eigen' ); +open_legend = sprintf( 'OpenBLAS' ); +%vend_legend = sprintf( 'MKL' ); +%vend_legend = sprintf( 'ARMPL' ); +vend_legend = vend_str; + +% Set axes range values. +y_scale = 1.00; +x_begin = 0; +%x_end is set below. +y_begin = 0; +y_end = max_perf_core * y_scale; + +% Set axes names. +if nth == 1 + yaxisname = 'GFLOPS'; +else + yaxisname = 'GFLOPS/core'; +end + + +%flopscol = 4; +flopscol = size( data_blissup, 2 ); +msize = 5; +if 1 +fontsize = 11; +else +fontsize = 16; +end +linesize = 0.5; +legend_loc = 'southeast'; + +% -------------------------------------------------------------------- + +% Automatically detect a column with the increasing problem size. +% Then set the maximum x-axis value. +for psize_col = 1:3 + if data_blissup( 1, psize_col ) ~= data_blissup( 2, psize_col ) + break; + end +end +x_end = data_blissup( size( data_blissup, 1 ), psize_col ); + +x_axis( :, 1 ) = data_blissup( :, psize_col ); + +data_peak( 1, 1:2 ) = [ 0 max_perf_core ]; +data_peak( 2, 1:2 ) = [ x_end max_perf_core ]; + +if show_plot == 1 +blissup_ln = line( x_axis( :, 1 ), data_blissup( :, flopscol ) / nth, ... + 'Color',color_blissup, 'LineStyle',lines_blissup, ... + 'LineWidth',linesize ); +blislpab_ln = line( x_axis( :, 1 ), data_blislpab( :, flopscol ) / nth, ... + 'Color',color_blislpab, 'LineStyle',lines_blislpab, ... + 'LineWidth',linesize ); +eigen_ln = line( x_axis( :, 1 ), data_eigen( :, flopscol ) / nth, ... + 'Color',color_eigen, 'LineStyle',lines_eigen, ... + 'LineWidth',linesize ); +open_ln = line( x_axis( :, 1 ), data_open( :, flopscol ) / nth, ... + 'Color',color_open, 'LineStyle',lines_open, ... + 'LineWidth',linesize ); +vend_ln = line( x_axis( :, 1 ), data_vend( :, flopscol ) / nth, ... + 'Color',color_vend, 'LineStyle',lines_vend, ... + 'LineWidth',linesize ); +else +if theid == legend_plot_id +blissup_ln = line( nan, nan, ... + 'Color',color_blissup, 'LineStyle',lines_blissup, ... + 'LineWidth',linesize ); +blislpab_ln = line( nan, nan, ... + 'Color',color_blislpab, 'LineStyle',lines_blislpab, ... + 'LineWidth',linesize ); +eigen_ln = line( nan, nan, ... + 'Color',color_eigen, 'LineStyle',lines_eigen, ... + 'LineWidth',linesize ); +open_ln = line( nan, nan, ... + 'Color',color_open, 'LineStyle',lines_open, ... + 'LineWidth',linesize ); +vend_ln = line( nan, nan, ... + 'Color',color_vend, 'LineStyle',lines_vend, ... + 'LineWidth',linesize ); +end +end + + +xlim( ax1, [x_begin x_end] ); +ylim( ax1, [y_begin y_end] ); + +if 6000 <= x_end && x_end < 10000 + x_tick2 = x_end - 2000; + x_tick1 = x_tick2/2; + xticks( ax1, [ x_tick1 x_tick2 ] ); +elseif 4000 <= x_end && x_end < 6000 + x_tick2 = x_end - 1000; + x_tick1 = x_tick2/2; + xticks( ax1, [ x_tick1 x_tick2 ] ); +elseif 2000 <= x_end && x_end < 3000 + x_tick2 = x_end - 400; + x_tick1 = x_tick2/2; + xticks( ax1, [ x_tick1 x_tick2 ] ); +elseif 500 <= x_end && x_end < 1000 + x_tick3 = x_end*(3/4); + x_tick2 = x_end*(2/4); + x_tick1 = x_end*(1/4); + xticks( ax1, [ x_tick1 x_tick2 x_tick3 ] ); +end + +if show_plot == 1 || theid == legend_plot_id +if rows == 4 && cols == 6 + if nth == 1 && theid == legend_plot_id + leg = legend( ... + [ ... + blissup_ln ... + blislpab_ln ... + eigen_ln ... + open_ln ... + vend_ln ... + ], ... + blissup_legend, ... + blislpab_legend, ... + eigen_legend, ... + open_legend, ... + vend_legend, ... + 'Location', legend_loc ); + set( leg,'Box','off' ); + set( leg,'Color','none' ); + set( leg,'FontSize',fontsize ); %-3 ); + set( leg,'Units','inches' ); + % xpos ypos + set( leg,'Position',[11.32 6.36 1.15 0.7 ] ); % (1,4tl) + elseif nth > 1 && theid == legend_plot_id + end +end +end + +set( ax1,'FontSize',fontsize ); +set( ax1,'TitleFontSizeMultiplier',1.0 ); % default is 1.1. +box( ax1, 'on' ); + +titl = title( titlename ); +set( titl, 'FontWeight', 'normal' ); % default font style is now 'bold'. + +if 1 == 1 +tpos = get( titl, 'Position' ); % default is to align across whole figure, not box. +tpos(1) = tpos(1) + -40; +set( titl, 'Position', tpos ); % here we nudge it back to centered with box. +end + +if theid > (rows-1)*cols +%xlab = xlabel( ax1,xaxisname ); +%tpos = get( xlab, 'Position' ) +%tpos(2) = tpos(2) + 10; +%set( xlab, 'Position', tpos ); +if theid == rows*cols - 5 +xlab = xlabel( ax1, 'm = 6; n = k' ); +elseif theid == rows*cols - 4 +xlab = xlabel( ax1, 'n = 8; m = k' ); +elseif theid == rows*cols - 3 +xlab = xlabel( ax1, 'k = 4; m = n' ); +elseif theid == rows*cols - 2 +xlab = xlabel( ax1, 'm; n = 8, k = 4' ); +elseif theid == rows*cols - 1 +xlab = xlabel( ax1, 'n; m = 6, k = 4' ); +elseif theid == rows*cols - 0 +xlab = xlabel( ax1, 'k; m = 6, n = 8' ); +end + +if mod(theid-1,cols) == 0 +ylab = ylabel( ax1,yaxisname ); +end + +%export_fig( filename, colorflag, '-pdf', '-m2', '-painters', '-transparent' ); +%saveas( fig, filename_png ); + +%hold( ax1, 'off' ); + +r_val = 0; + +end diff --git a/test/sup/octave/plot_panel_trxsh.m b/test/sup/octave/plot_panel_trxsh.m new file mode 100644 index 000000000..65f84b44a --- /dev/null +++ b/test/sup/octave/plot_panel_trxsh.m @@ -0,0 +1,140 @@ +function r_val = plot_panel_trxsh ... + ( + cfreq, ... + dflopspercycle, ... + nth, ... + thr_str, ... + dt_ch, ... + stor_str, ... + smalldims, ... + dirpath, ... + arch_str, ... + vend_str + ) + +%cfreq = 1.8; +%dflopspercycle = 32; + +% Create filename "templates" for the files that contain the performance +% results. +filetemp_blissup = '%s/output_%s_%s_blissup.m'; +filetemp_blislpab = '%s/output_%s_%s_blislpab.m'; +filetemp_eigen = '%s/output_%s_%s_eigen.m'; +filetemp_open = '%s/output_%s_%s_openblas.m'; +filetemp_vend = '%s/output_%s_%s_vendor.m'; + +% Create a variable name "template" for the variables contained in the +% files outlined above. +vartemp = 'data_%s_%s_%s( :, : )'; + +% Define the datatypes and operations we will be plotting. +oproot = sprintf( '%cgemm', dt_ch ); +ops( 1, : ) = sprintf( '%s_nn', oproot ); +ops( 2, : ) = sprintf( '%s_nt', oproot ); +ops( 3, : ) = sprintf( '%s_tn', oproot ); +ops( 4, : ) = sprintf( '%s_tt', oproot ); + +% Generate datatype-specific operation names from the set of operations +% and datatypes. +[ opsupnames, opnames ] = gen_opsupnames( ops, stor_str, smalldims ); +n_opsupnames = size( opsupnames, 1 ); + +%opsupnames +%opnames +%return + +if 1 == 1 + %fig = figure('Position', [100, 100, 2400, 1500]); + fig = figure('Position', [100, 100, 1600, 1000]); + orient( fig, 'portrait' ); + set(gcf,'PaperUnits', 'inches'); + if 0 == 1 % matlab + set(gcf,'PaperSize', [11 15.0]); + set(gcf,'PaperPosition', [0 0 11 15.0]); + set(gcf,'PaperPositionMode','manual'); + else % octave 4.x + set(gcf,'PaperSize', [10 15.0]); + set(gcf,'PaperPositionMode','auto'); + end + set(gcf,'PaperOrientation','landscape'); +end + + +% Iterate over the list of datatype-specific operation names. +for opi = 1:n_opsupnames +%for opi = 1:1 + + % Grab the current datatype combination. + opsupname = opsupnames( opi, : ); + opname = opnames( opi, : ); + + str = sprintf( 'Plotting %2d: %s', opi, opsupname ); disp(str); + + % Construct filenames for the data files from templates. + file_blissup = sprintf( filetemp_blissup, dirpath, thr_str, opsupname ); + file_blislpab = sprintf( filetemp_blislpab, dirpath, thr_str, opsupname ); + file_eigen = sprintf( filetemp_eigen, dirpath, thr_str, opsupname ); + file_open = sprintf( filetemp_open, dirpath, thr_str, opsupname ); + file_vend = sprintf( filetemp_vend, dirpath, thr_str, opsupname ); + + % Load the data files. + %str = sprintf( ' Loading %s', file_blissup ); disp(str); + run( file_blissup ) + %str = sprintf( ' Loading %s', file_blislpab ); disp(str); + run( file_blislpab ) + %str = sprintf( ' Loading %s', file_eigen ); disp(str); + run( file_eigen ) + %str = sprintf( ' Loading %s', file_open ); disp(str); + run( file_open ) + %str = sprintf( ' Loading %s', file_vend ); disp(str); + run( file_vend ) + + % Construct variable names for the variables in the data files. + var_blissup = sprintf( vartemp, thr_str, opname, 'blissup' ); + var_blislpab = sprintf( vartemp, thr_str, opname, 'blislpab' ); + var_eigen = sprintf( vartemp, thr_str, opname, 'eigen' ); + var_open = sprintf( vartemp, thr_str, opname, 'openblas' ); + var_vend = sprintf( vartemp, thr_str, opname, 'vendor' ); + + % Use eval() to instantiate the variable names constructed above, + % copying each to a simplified name. + data_blissup = eval( var_blissup ); % e.g. data_st_sgemm_blissup( :, : ); + data_blislpab = eval( var_blislpab ); % e.g. data_st_sgemm_blislpab( :, : ); + data_eigen = eval( var_eigen ); % e.g. data_st_sgemm_eigen( :, : ); + data_open = eval( var_open ); % e.g. data_st_sgemm_openblas( :, : ); + data_vend = eval( var_vend ); % e.g. data_st_sgemm_vendor( :, : ); + + %str = sprintf( ' Reading %s', var_blissup ); disp(str); + %str = sprintf( ' Reading %s', var_blislpab ); disp(str); + %str = sprintf( ' Reading %s', var_eigen ); disp(str); + %str = sprintf( ' Reading %s', var_open ); disp(str); + %str = sprintf( ' Reading %s', var_vend ); disp(str); + + % Plot one result in an m x n grid of plots, via the subplot() + % function. + if 1 == 1 + plot_l3sup_perf( opsupname, ... + data_blissup, ... + data_blislpab, ... + data_eigen, ... + data_open, ... + data_vend, vend_str, ... + nth, ... + 4, 6, ... + cfreq, ... + dflopspercycle, ... + opi ); + end + +end + +% Construct the name of the file to which we will output the graph. +outfile = sprintf( 'fig_%s_%s_%s_nt%d.pdf', oproot, stor_str, arch_str, nth ); + +% Output the graph to pdf format. +%print(gcf, 'gemm_md','-fillpage','-dpdf'); +%print(gcf, outfile,'-bestfit','-dpdf'); +if 1 == 1 +print(gcf, outfile); +end + diff --git a/test/sup/octave/runme.m b/test/sup/octave/runme.m new file mode 100644 index 000000000..30c2643be --- /dev/null +++ b/test/sup/octave/runme.m @@ -0,0 +1,4 @@ + +% has +plot_panel_trxsh(3.5,16,1,'st','d','ccc',[ 6 8 4 ],'../results','has','MKL'); close; clear all; +plot_panel_trxsh(3.5,16,1,'st','d','rrr',[ 6 8 4 ],'../results7','has','MKL'); close; clear all; diff --git a/test/sup/runme.sh b/test/sup/runme.sh new file mode 100755 index 000000000..2c4ef081a --- /dev/null +++ b/test/sup/runme.sh @@ -0,0 +1,129 @@ +#!/bin/bash + +# File pefixes. +exec_root="test" +out_root="output" + +# Placeholder until we add multithreading. +nt=1 + +# Delay between test cases. +delay=0.02 + +# Threadedness to test. +threads="st" + +# Datatypes to test. +#dts="d s" +dts="d" + +# Operations to test. +ops="gemm" + +# Transpose combintions to test. +trans="nn nt tn tt" + +# Storage combinations to test. +stors="rrr rrc rcr rcc crr crc ccr ccc" +stors="rrr ccc" + +# Problem shapes to test. +shapes="sll lsl lls lss sls ssl" + +# FGVZ: figure out how to probe what's in the directory and +# execute everything that's there? +sms="6" +sns="8" +sks="4" + +# Implementations to test. +#impls="vendor blissup blislpab openblas eigen" +#impls="vendor openblas eigen" +#impls="blislpab blissup" +#mpls="openblas eigen vendor" +#mpls="eigen" +impls="blissup" +#impls="vendor blissup openblas blislpab eigen" + +# Example: test_dgemm_nn_rrc_m6npkp_blissup_st.x + +for th in ${threads}; do + + for dt in ${dts}; do + + for op in ${ops}; do + + for tr in ${trans}; do + + for st in ${stors}; do + + for sh in ${shapes}; do + + for sm in ${sms}; do + + for sn in ${sns}; do + + for sk in ${sks}; do + + for im in ${impls}; do + + # Limit execution of non-BLIS implementations to + # rrr/ccc storage cases. + if [ "${im:0:4}" != "blis" ] && \ + [ "${st}" != "rrr" ] && \ + [ "${st}" != "ccc" ]; then + continue; + fi + + # Extract the shape chars for m, n, k. + chm=${sh:0:1} + chn=${sh:1:1} + chk=${sh:2:1} + + # Construct the shape substring (e.g. m6npkp) + shstr="" + + if [ ${chm} = "s" ]; then + shstr="${shstr}m${sm}" + else + shstr="${shstr}mp" + fi + + if [ ${chn} = "s" ]; then + shstr="${shstr}n${sn}" + else + shstr="${shstr}np" + fi + + if [ ${chk} = "s" ]; then + shstr="${shstr}k${sk}" + else + shstr="${shstr}kp" + fi + + # Ex: test_dgemm_nn_rrc_m6npkp_blissup_st.x + + # Construct the name of the test executable. + exec_name="${exec_root}_${dt}${op}_${tr}_${st}_${shstr}_${im}_${th}.x" + + # Construct the name of the output file. + out_file="${out_root}_${th}_${dt}${op}_${tr}_${st}_${shstr}_${im}.m" + + echo "Running (nt = ${nt}) ./${exec_name} > ${out_file}" + + # Run executable. + ./${exec_name} > ${out_file} + + sleep ${delay} + + done + done + done + done + done + done + done + done + done +done + diff --git a/test/sup/test_gemm.c b/test/sup/test_gemm.c new file mode 100644 index 000000000..311e8552a --- /dev/null +++ b/test/sup/test_gemm.c @@ -0,0 +1,566 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2019, Advanced Micro Devices, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of The University of Texas nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include +#ifdef EIGEN + #define BLIS_DISABLE_BLAS_DEFS + #include "blis.h" + #include + //#include + using namespace Eigen; +#else + #include "blis.h" +#endif + +//#define PRINT + +int main( int argc, char** argv ) +{ + + bli_init(); + +#ifndef ERROR_CHECK + bli_error_checking_level_set( BLIS_NO_ERROR_CHECKING ); +#endif + + + dim_t n_trials = N_TRIALS; + + num_t dt = DT; + +#if 1 + dim_t p_begin = P_BEGIN; + dim_t p_max = P_MAX; + dim_t p_inc = P_INC; +#else + dim_t p_begin = 4; + dim_t p_max = 40; + dim_t p_inc = 4; +#endif + +#if 1 + dim_t m_input = M_DIM; + dim_t n_input = N_DIM; + dim_t k_input = K_DIM; +#else + p_begin = p_inc = 32; + dim_t m_input = 6; + dim_t n_input = -1; + dim_t k_input = -1; +#endif + +#if 1 + trans_t transa = TRANSA; + trans_t transb = TRANSB; +#else + trans_t transa = BLIS_NO_TRANSPOSE; + trans_t transb = BLIS_NO_TRANSPOSE; +#endif + +#if 1 + stor3_t sc = STOR3; +#else + stor3_t sc = BLIS_RRR; +#endif + + + inc_t rs_c, cs_c; + inc_t rs_a, cs_a; + inc_t rs_b, cs_b; + + if ( sc == BLIS_RRR ) { rs_c = cs_c = -1; rs_a = cs_a = -1; rs_b = cs_b = -1; } + else if ( sc == BLIS_RRC ) { rs_c = cs_c = -1; rs_a = cs_a = -1; rs_b = cs_b = 0; } + else if ( sc == BLIS_RCR ) { rs_c = cs_c = -1; rs_a = cs_a = 0; rs_b = cs_b = -1; } + else if ( sc == BLIS_RCC ) { rs_c = cs_c = -1; rs_a = cs_a = 0; rs_b = cs_b = 0; } + else if ( sc == BLIS_CRR ) { rs_c = cs_c = 0; rs_a = cs_a = -1; rs_b = cs_b = -1; } + else if ( sc == BLIS_CRC ) { rs_c = cs_c = 0; rs_a = cs_a = -1; rs_b = cs_b = 0; } + else if ( sc == BLIS_CCR ) { rs_c = cs_c = 0; rs_a = cs_a = 0; rs_b = cs_b = -1; } + else if ( sc == BLIS_CCC ) { rs_c = cs_c = 0; rs_a = cs_a = 0; rs_b = cs_b = 0; } + else { bli_abort(); } + + f77_int cbla_storage; + + if ( sc == BLIS_RRR ) cbla_storage = CblasRowMajor; + else if ( sc == BLIS_CCC ) cbla_storage = CblasColMajor; + else cbla_storage = -1; + + ( void )cbla_storage; + + + char dt_ch; + + // Choose the char corresponding to the requested datatype. + if ( bli_is_float( dt ) ) dt_ch = 's'; + else if ( bli_is_double( dt ) ) dt_ch = 'd'; + else if ( bli_is_scomplex( dt ) ) dt_ch = 'c'; + else dt_ch = 'z'; + + f77_char f77_transa; + f77_char f77_transb; + char transal, transbl; + + bli_param_map_blis_to_netlib_trans( transa, &f77_transa ); + bli_param_map_blis_to_netlib_trans( transb, &f77_transb ); + + transal = tolower( f77_transa ); + transbl = tolower( f77_transb ); + + f77_int cbla_transa = ( transal == 'n' ? CblasNoTrans : CblasTrans ); + f77_int cbla_transb = ( transbl == 'n' ? CblasNoTrans : CblasTrans ); + + ( void )cbla_transa; + ( void )cbla_transb; + + dim_t p; + + // Begin with initializing the last entry to zero so that + // matlab allocates space for the entire array once up-front. + for ( p = p_begin; p + p_inc <= p_max; p += p_inc ) ; + + printf( "data_%s_%cgemm_%c%c_%s", THR_STR, dt_ch, + transal, transbl, STR ); + printf( "( %2lu, 1:4 ) = [ %4lu %4lu %4lu %7.2f ];\n", + ( unsigned long )(p - p_begin + 1)/p_inc + 1, + ( unsigned long )0, + ( unsigned long )0, + ( unsigned long )0, 0.0 ); + + + for ( p = p_begin; p <= p_max; p += p_inc ) + { + obj_t a, b, c; + obj_t c_save; + obj_t alpha, beta; + dim_t m, n, k; + + if ( m_input < 0 ) m = p / ( dim_t )abs(m_input); + else m = ( dim_t ) m_input; + if ( n_input < 0 ) n = p / ( dim_t )abs(n_input); + else n = ( dim_t ) n_input; + if ( k_input < 0 ) k = p / ( dim_t )abs(k_input); + else k = ( dim_t ) k_input; + + bli_obj_create( dt, 1, 1, 0, 0, &alpha ); + bli_obj_create( dt, 1, 1, 0, 0, &beta ); + + bli_obj_create( dt, m, n, rs_c, cs_c, &c ); + bli_obj_create( dt, m, n, rs_c, cs_c, &c_save ); + + if ( bli_does_notrans( transa ) ) + bli_obj_create( dt, m, k, rs_a, cs_a, &a ); + else + bli_obj_create( dt, k, m, rs_a, cs_a, &a ); + + if ( bli_does_notrans( transb ) ) + bli_obj_create( dt, k, n, rs_b, cs_b, &b ); + else + bli_obj_create( dt, n, k, rs_b, cs_b, &b ); + + bli_randm( &a ); + bli_randm( &b ); + bli_randm( &c ); + + bli_obj_set_conjtrans( transa, &a ); + bli_obj_set_conjtrans( transb, &b ); + + bli_setsc( (2.0/1.0), 0.0, &alpha ); + bli_setsc( (1.0/1.0), 0.0, &beta ); + + bli_copym( &c, &c_save ); + +#ifdef EIGEN + double alpha_r, alpha_i; + + bli_getsc( &alpha, &alpha_r, &alpha_i ); + + void* ap = bli_obj_buffer_at_off( &a ); + void* bp = bli_obj_buffer_at_off( &b ); + void* cp = bli_obj_buffer_at_off( &c ); + + const int os_a = ( bli_obj_is_col_stored( &a ) ? bli_obj_col_stride( &a ) + : bli_obj_row_stride( &a ) ); + const int os_b = ( bli_obj_is_col_stored( &b ) ? bli_obj_col_stride( &b ) + : bli_obj_row_stride( &b ) ); + const int os_c = ( bli_obj_is_col_stored( &c ) ? bli_obj_col_stride( &c ) + : bli_obj_row_stride( &c ) ); + + Stride stride_a( os_a, 1 ); + Stride stride_b( os_b, 1 ); + Stride stride_c( os_c, 1 ); + + #if defined(IS_FLOAT) + #elif defined (IS_DOUBLE) + #ifdef A_STOR_R + typedef Matrix MatrixXd_A; + #else + typedef Matrix MatrixXd_A; + #endif + #ifdef B_STOR_R + typedef Matrix MatrixXd_B; + #else + typedef Matrix MatrixXd_B; + #endif + #ifdef C_STOR_R + typedef Matrix MatrixXd_C; + #else + typedef Matrix MatrixXd_C; + #endif + + #ifdef A_NOTRANS // A is not transposed + Map > A( ( double* )ap, m, k, stride_a ); + #else // A is transposed + Map > A( ( double* )ap, k, m, stride_a ); + #endif + + #ifdef B_NOTRANS // B is not transposed + Map > B( ( double* )bp, k, n, stride_b ); + #else // B is transposed + Map > B( ( double* )bp, n, k, stride_b ); + #endif + + Map > C( ( double* )cp, m, n, stride_c ); + #endif +#endif + + + double dtime_save = DBL_MAX; + + for ( dim_t r = 0; r < n_trials; ++r ) + { + bli_copym( &c_save, &c ); + + + double dtime = bli_clock(); + + +#ifdef EIGEN + + #ifdef A_NOTRANS + #ifdef B_NOTRANS + C.noalias() += alpha_r * A * B; + #else // B_TRANS + C.noalias() += alpha_r * A * B.transpose(); + #endif + #else // A_TRANS + #ifdef B_NOTRANS + C.noalias() += alpha_r * A.transpose() * B; + #else // B_TRANS + C.noalias() += alpha_r * A.transpose() * B.transpose(); + #endif + #endif + +#endif +#ifdef BLIS + #ifdef SUP + // Allow sup. + bli_gemm( &alpha, + &a, + &b, + &beta, + &c ); + #else + // Disable sup and use the expert interface. + rntm_t rntm = BLIS_RNTM_INITIALIZER; + bli_rntm_disable_l3_sup( &rntm ); + + bli_gemm_ex( &alpha, + &a, + &b, + &beta, + &c, NULL, &rntm ); + #endif +#endif +#ifdef BLAS + if ( bli_is_float( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + float* alphap = ( float* )bli_obj_buffer( &alpha ); + float* ap = ( float* )bli_obj_buffer( &a ); + float* bp = ( float* )bli_obj_buffer( &b ); + float* betap = ( float* )bli_obj_buffer( &beta ); + float* cp = ( float* )bli_obj_buffer( &c ); + + sgemm_( &f77_transa, + &f77_transb, + &mm, + &nn, + &kk, + alphap, + ap, &lda, + bp, &ldb, + betap, + cp, &ldc ); + } + else if ( bli_is_double( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + double* alphap = ( double* )bli_obj_buffer( &alpha ); + double* ap = ( double* )bli_obj_buffer( &a ); + double* bp = ( double* )bli_obj_buffer( &b ); + double* betap = ( double* )bli_obj_buffer( &beta ); + double* cp = ( double* )bli_obj_buffer( &c ); + + dgemm_( &f77_transa, + &f77_transb, + &mm, + &nn, + &kk, + alphap, + ap, &lda, + bp, &ldb, + betap, + cp, &ldc ); + } + else if ( bli_is_scomplex( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + scomplex* alphap = ( scomplex* )bli_obj_buffer( &alpha ); + scomplex* ap = ( scomplex* )bli_obj_buffer( &a ); + scomplex* bp = ( scomplex* )bli_obj_buffer( &b ); + scomplex* betap = ( scomplex* )bli_obj_buffer( &beta ); + scomplex* cp = ( scomplex* )bli_obj_buffer( &c ); + + cgemm_( &f77_transa, + &f77_transb, + &mm, + &nn, + &kk, + alphap, + ap, &lda, + bp, &ldb, + betap, + cp, &ldc ); + } + else if ( bli_is_dcomplex( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + dcomplex* alphap = ( dcomplex* )bli_obj_buffer( &alpha ); + dcomplex* ap = ( dcomplex* )bli_obj_buffer( &a ); + dcomplex* bp = ( dcomplex* )bli_obj_buffer( &b ); + dcomplex* betap = ( dcomplex* )bli_obj_buffer( &beta ); + dcomplex* cp = ( dcomplex* )bli_obj_buffer( &c ); + + zgemm_( &f77_transa, + &f77_transb, + &mm, + &nn, + &kk, + alphap, + ap, &lda, + bp, &ldb, + betap, + cp, &ldc ); + } +#endif +#ifdef CBLAS + if ( bli_is_float( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + #ifdef C_STOR_R + f77_int lda = bli_obj_row_stride( &a ); + f77_int ldb = bli_obj_row_stride( &b ); + f77_int ldc = bli_obj_row_stride( &c ); + #else + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + #endif + float* alphap = bli_obj_buffer( &alpha ); + float* ap = bli_obj_buffer( &a ); + float* bp = bli_obj_buffer( &b ); + float* betap = bli_obj_buffer( &beta ); + float* cp = bli_obj_buffer( &c ); + + cblas_sgemm( cbla_storage, + cbla_transa, + cbla_transb, + mm, + nn, + kk, + *alphap, + ap, lda, + bp, ldb, + *betap, + cp, ldc ); + } + else if ( bli_is_double( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + #ifdef C_STOR_R + f77_int lda = bli_obj_row_stride( &a ); + f77_int ldb = bli_obj_row_stride( &b ); + f77_int ldc = bli_obj_row_stride( &c ); + #else + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + #endif + double* alphap = bli_obj_buffer( &alpha ); + double* ap = bli_obj_buffer( &a ); + double* bp = bli_obj_buffer( &b ); + double* betap = bli_obj_buffer( &beta ); + double* cp = bli_obj_buffer( &c ); + + cblas_dgemm( cbla_storage, + cbla_transa, + cbla_transb, + mm, + nn, + kk, + *alphap, + ap, lda, + bp, ldb, + *betap, + cp, ldc ); + } + else if ( bli_is_scomplex( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + #ifdef C_STOR_R + f77_int lda = bli_obj_row_stride( &a ); + f77_int ldb = bli_obj_row_stride( &b ); + f77_int ldc = bli_obj_row_stride( &c ); + #else + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + #endif + scomplex* alphap = bli_obj_buffer( &alpha ); + scomplex* ap = bli_obj_buffer( &a ); + scomplex* bp = bli_obj_buffer( &b ); + scomplex* betap = bli_obj_buffer( &beta ); + scomplex* cp = bli_obj_buffer( &c ); + + cblas_cgemm( cbla_storage, + cbla_transa, + cbla_transb, + mm, + nn, + kk, + alphap, + ap, lda, + bp, ldb, + betap, + cp, ldc ); + } + else if ( bli_is_dcomplex( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + #ifdef C_STOR_R + f77_int lda = bli_obj_row_stride( &a ); + f77_int ldb = bli_obj_row_stride( &b ); + f77_int ldc = bli_obj_row_stride( &c ); + #else + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + #endif + dcomplex* alphap = bli_obj_buffer( &alpha ); + dcomplex* ap = bli_obj_buffer( &a ); + dcomplex* bp = bli_obj_buffer( &b ); + dcomplex* betap = bli_obj_buffer( &beta ); + dcomplex* cp = bli_obj_buffer( &c ); + + cblas_zgemm( cbla_storage, + cbla_transa, + cbla_transb, + mm, + nn, + kk, + alphap, + ap, lda, + bp, ldb, + betap, + cp, ldc ); + } +#endif + + dtime_save = bli_clock_min_diff( dtime_save, dtime ); + } + + double gflops = ( 2.0 * m * k * n ) / ( dtime_save * 1.0e9 ); + + if ( bli_is_complex( dt ) ) gflops *= 4.0; + + printf( "data_%s_%cgemm_%c%c_%s", THR_STR, dt_ch, + transal, transbl, STR ); + printf( "( %2lu, 1:4 ) = [ %4lu %4lu %4lu %7.2f ];\n", + ( unsigned long )(p - p_begin + 1)/p_inc + 1, + ( unsigned long )m, + ( unsigned long )n, + ( unsigned long )k, gflops ); + + bli_obj_free( &alpha ); + bli_obj_free( &beta ); + + bli_obj_free( &a ); + bli_obj_free( &b ); + bli_obj_free( &c ); + bli_obj_free( &c_save ); + } + + //bli_finalize(); + + return 0; +} + diff --git a/testsuite/src/test_gemm.c b/testsuite/src/test_gemm.c index 2ec117464..935f5031a 100644 --- a/testsuite/src/test_gemm.c +++ b/testsuite/src/test_gemm.c @@ -236,11 +236,11 @@ void libblis_test_gemm_experiment libblis_test_mobj_create( params, datatype, transa, sc_str[1], m, k, &a ); libblis_test_mobj_create( params, datatype, transb, - sc_str[1], k, n, &b ); + sc_str[2], k, n, &b ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[2], m, n, &c ); + sc_str[0], m, n, &c ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[2], m, n, &c_save ); + sc_str[0], m, n, &c_save ); // Set alpha and beta. if ( bli_obj_is_real( &c ) ) @@ -259,6 +259,9 @@ void libblis_test_gemm_experiment libblis_test_mobj_randomize( params, TRUE, &b ); libblis_test_mobj_randomize( params, TRUE, &c ); bli_copym( &c, &c_save ); +//bli_setm( &BLIS_ONE, &a ); +//bli_setsc( 1.0, 0.0, &alpha ); +//bli_setsc( 0.0, 0.0, &beta ); // Apply the parameters. bli_obj_set_conjtrans( transa, &a ); @@ -349,13 +352,13 @@ void libblis_test_gemm_md // Create test operands (vectors and/or matrices). libblis_test_mobj_create( params, dt_a, transa, - sc_str[0], m, k, &a ); + sc_str[1], m, k, &a ); libblis_test_mobj_create( params, dt_b, transb, - sc_str[1], k, n, &b ); + sc_str[2], k, n, &b ); libblis_test_mobj_create( params, dt_c, BLIS_NO_TRANSPOSE, - sc_str[2], m, n, &c ); + sc_str[0], m, n, &c ); libblis_test_mobj_create( params, dt_c, BLIS_NO_TRANSPOSE, - sc_str[2], m, n, &c_save ); + sc_str[0], m, n, &c_save ); // For mixed-precision, set the computation precision of C. if ( params->mixed_precision ) @@ -449,15 +452,20 @@ void libblis_test_gemm_impl { case BLIS_TEST_SEQ_FRONT_END: #if 0 +//bli_printm( "alpha", alpha, "%5.2f", "" ); +//bli_printm( "beta", beta, "%5.2f", "" ); bli_printm( "a", a, "%5.2f", "" ); bli_printm( "b", b, "%5.2f", "" ); bli_printm( "c", c, "%5.2f", "" ); -bli_printm( "alpha", alpha, "%5.2f", "" ); -bli_printm( "beta", beta, "%5.2f", "" ); #endif +//if ( bli_obj_length( b ) == 16 && +// bli_obj_stor3_from_strides( c, a, b ) == BLIS_CRR ) +//bli_printm( "c before", c, "%6.3f", "" ); bli_gemm( alpha, a, b, beta, c ); #if 0 -bli_printm( "c after", c, "%5.2f", "" ); +if ( bli_obj_length( c ) == 12 && + bli_obj_stor3_from_strides( c, a, b ) == BLIS_RRR ) +bli_printm( "c after", c, "%6.3f", "" ); #endif break; diff --git a/testsuite/src/test_hemm.c b/testsuite/src/test_hemm.c index 8768af8c7..8eeb2ad34 100644 --- a/testsuite/src/test_hemm.c +++ b/testsuite/src/test_hemm.c @@ -202,13 +202,13 @@ void libblis_test_hemm_experiment // Create test operands (vectors and/or matrices). bli_set_dim_with_side( side, m, n, &mn_side ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[0], mn_side, mn_side, &a ); + sc_str[1], mn_side, mn_side, &a ); libblis_test_mobj_create( params, datatype, transb, - sc_str[1], m, n, &b ); + sc_str[2], m, n, &b ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[2], m, n, &c ); + sc_str[0], m, n, &c ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[2], m, n, &c_save ); + sc_str[0], m, n, &c_save ); // Set alpha and beta. if ( bli_obj_is_real( &c ) ) diff --git a/testsuite/src/test_her2k.c b/testsuite/src/test_her2k.c index c5cf5dbeb..717bbdd34 100644 --- a/testsuite/src/test_her2k.c +++ b/testsuite/src/test_her2k.c @@ -195,13 +195,13 @@ void libblis_test_her2k_experiment // Create test operands (vectors and/or matrices). libblis_test_mobj_create( params, datatype, transa, - sc_str[0], m, k, &a ); + sc_str[1], m, k, &a ); libblis_test_mobj_create( params, datatype, transb, - sc_str[1], m, k, &b ); + sc_str[2], m, k, &b ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[2], m, m, &c ); + sc_str[0], m, m, &c ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[2], m, m, &c_save ); + sc_str[0], m, m, &c_save ); // Set alpha and beta. if ( bli_obj_is_real( &c ) ) diff --git a/testsuite/src/test_herk.c b/testsuite/src/test_herk.c index af192f06b..9b557e022 100644 --- a/testsuite/src/test_herk.c +++ b/testsuite/src/test_herk.c @@ -192,11 +192,11 @@ void libblis_test_herk_experiment // Create test operands (vectors and/or matrices). libblis_test_mobj_create( params, datatype, transa, - sc_str[0], m, k, &a ); + sc_str[1], m, k, &a ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[1], m, m, &c ); + sc_str[0], m, m, &c ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[1], m, m, &c_save ); + sc_str[0], m, m, &c_save ); // Set alpha and beta. if ( bli_obj_is_real( &c ) ) diff --git a/testsuite/src/test_symm.c b/testsuite/src/test_symm.c index ded4bb143..6e1f7938a 100644 --- a/testsuite/src/test_symm.c +++ b/testsuite/src/test_symm.c @@ -202,13 +202,13 @@ void libblis_test_symm_experiment // Create test operands (vectors and/or matrices). bli_set_dim_with_side( side, m, n, &mn_side ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[0], mn_side, mn_side, &a ); + sc_str[1], mn_side, mn_side, &a ); libblis_test_mobj_create( params, datatype, transb, - sc_str[1], m, n, &b ); + sc_str[2], m, n, &b ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[2], m, n, &c ); + sc_str[0], m, n, &c ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[2], m, n, &c_save ); + sc_str[0], m, n, &c_save ); // Set alpha and beta. if ( bli_obj_is_real( &c ) ) diff --git a/testsuite/src/test_syr2k.c b/testsuite/src/test_syr2k.c index 69dfbda7a..4ed2957eb 100644 --- a/testsuite/src/test_syr2k.c +++ b/testsuite/src/test_syr2k.c @@ -195,13 +195,13 @@ void libblis_test_syr2k_experiment // Create test operands (vectors and/or matrices). libblis_test_mobj_create( params, datatype, transa, - sc_str[0], m, k, &a ); + sc_str[1], m, k, &a ); libblis_test_mobj_create( params, datatype, transb, - sc_str[1], m, k, &b ); + sc_str[2], m, k, &b ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[2], m, m, &c ); + sc_str[0], m, m, &c ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[2], m, m, &c_save ); + sc_str[0], m, m, &c_save ); // Set alpha and beta. if ( bli_obj_is_real( &c ) ) diff --git a/testsuite/src/test_syrk.c b/testsuite/src/test_syrk.c index a21bb7af5..9be08484e 100644 --- a/testsuite/src/test_syrk.c +++ b/testsuite/src/test_syrk.c @@ -192,11 +192,11 @@ void libblis_test_syrk_experiment // Create test operands (vectors and/or matrices). libblis_test_mobj_create( params, datatype, transa, - sc_str[0], m, k, &a ); + sc_str[1], m, k, &a ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[1], m, m, &c ); + sc_str[0], m, m, &c ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[1], m, m, &c_save ); + sc_str[0], m, m, &c_save ); // Set alpha and beta. if ( bli_obj_is_real( &c ) ) diff --git a/testsuite/src/test_trmm.c b/testsuite/src/test_trmm.c index 02505e630..965c85669 100644 --- a/testsuite/src/test_trmm.c +++ b/testsuite/src/test_trmm.c @@ -197,11 +197,11 @@ void libblis_test_trmm_experiment // Create test operands (vectors and/or matrices). bli_set_dim_with_side( side, m, n, &mn_side ); libblis_test_mobj_create( params, datatype, transa, - sc_str[0], mn_side, mn_side, &a ); + sc_str[1], mn_side, mn_side, &a ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[1], m, n, &b ); + sc_str[0], m, n, &b ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[1], m, n, &b_save ); + sc_str[0], m, n, &b_save ); // Set alpha and beta. if ( bli_obj_is_real( &b ) ) diff --git a/testsuite/src/test_trmm3.c b/testsuite/src/test_trmm3.c index bd3937d3b..7eccec83b 100644 --- a/testsuite/src/test_trmm3.c +++ b/testsuite/src/test_trmm3.c @@ -204,13 +204,13 @@ void libblis_test_trmm3_experiment // Create test operands (vectors and/or matrices). bli_set_dim_with_side( side, m, n, &mn_side ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[0], mn_side, mn_side, &a ); + sc_str[1], mn_side, mn_side, &a ); libblis_test_mobj_create( params, datatype, transb, - sc_str[1], m, n, &b ); + sc_str[2], m, n, &b ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[2], m, n, &c ); + sc_str[0], m, n, &c ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[2], m, n, &c_save ); + sc_str[0], m, n, &c_save ); // Set alpha and beta. if ( bli_obj_is_real( &c ) ) diff --git a/testsuite/src/test_trsm.c b/testsuite/src/test_trsm.c index 1c90edef5..01d2d53a4 100644 --- a/testsuite/src/test_trsm.c +++ b/testsuite/src/test_trsm.c @@ -197,11 +197,11 @@ void libblis_test_trsm_experiment // Create test operands (vectors and/or matrices). bli_set_dim_with_side( side, m, n, &mn_side ); libblis_test_mobj_create( params, datatype, transa, - sc_str[0], mn_side, mn_side, &a ); + sc_str[1], mn_side, mn_side, &a ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[1], m, n, &b ); + sc_str[0], m, n, &b ); libblis_test_mobj_create( params, datatype, BLIS_NO_TRANSPOSE, - sc_str[1], m, n, &b_save ); + sc_str[0], m, n, &b_save ); // Set alpha. if ( bli_obj_is_real( &b ) ) From 7d54fc5eb56514ac08e8d5d5c703451d68c0b9f1 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Sat, 27 Apr 2019 18:53:33 -0500 Subject: [PATCH 053/109] Fixed typo in --disable-sup-handling macro guard. Details: - Fixed an incorrectly-named macro guard that is intended to allow disabling of the sup framework via the configure option --disable-sup-handling. In this case, the preprocessor macro, BLIS_DISABLE_SUP_HANDLING, was still named by its name from an older uncommitted version of the code (BLIS_DISABLE_SM_HANDLING). --- frame/3/bli_l3_sup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frame/3/bli_l3_sup.c b/frame/3/bli_l3_sup.c index 006a74658..cb0d555d4 100644 --- a/frame/3/bli_l3_sup.c +++ b/frame/3/bli_l3_sup.c @@ -46,7 +46,7 @@ err_t bli_gemmsup ) { // Return early if small matrix handling is disabled at configure-time. - #ifdef BLIS_DISABLE_SM_HANDLING + #ifdef BLIS_DISABLE_SUP_HANDLING return BLIS_FAILURE; #endif From 5c4bb0cc24802eac8b4c072519e883143eaf427c Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Sat, 27 Apr 2019 19:38:11 -0500 Subject: [PATCH 054/109] Ceased use of BLIS_ENABLE_SUP_MR/NR_EXT macros. Details: - Removed already limited use of the BLIS_ENABLE_SUP_MR_EXT and BLIS_ENABLE_SUP_NR_EXT macros in bli_gemmsup_ref_var1n() and bli_gemmsup_ref_var2m(). Their purpose was merely to avoid a long conditional that would determine whether to allow the last iteration to be merged with the second-to-last iteration. Functionally, the macros were not needed, and they ended up causing problems when building configuration families such as intel64 and x86_64. --- config/haswell/bli_family_haswell.h | 9 --------- config/zen/bli_family_zen.h | 3 --- frame/3/bli_l3_sup_var1n2m.c | 4 ++-- 3 files changed, 2 insertions(+), 14 deletions(-) diff --git a/config/haswell/bli_family_haswell.h b/config/haswell/bli_family_haswell.h index 9ac5f1e38..58154692a 100644 --- a/config/haswell/bli_family_haswell.h +++ b/config/haswell/bli_family_haswell.h @@ -36,15 +36,6 @@ //#ifndef BLIS_FAMILY_H //#define BLIS_FAMILY_H -// Allow the sup implementation to combine some small edge case iterations in -// the 2nd loop of the panel-block algorithm (MR) and/or the 2nd loop of the -// block-panel algorithm (NR) with the last full iteration that precedes it. -// NOTE: These cpp macros need to be explicitly set to an integer since they -// are used at compile-time to create unconditional branches or dead code -// regions. -#define BLIS_ENABLE_SUP_MR_EXT 1 -#define BLIS_ENABLE_SUP_NR_EXT 0 - #if 0 // -- LEVEL-3 MICRO-KERNEL CONSTANTS AND DEFINITIONS --------------------------- diff --git a/config/zen/bli_family_zen.h b/config/zen/bli_family_zen.h index ee00d6841..6d19f7790 100644 --- a/config/zen/bli_family_zen.h +++ b/config/zen/bli_family_zen.h @@ -52,7 +52,6 @@ #define BLIS_SMALL_M_RECT_MATRIX_THRES 160 #define BLIS_SMALL_K_RECT_MATRIX_THRES 128 -<<<<<<< HEAD #define BLIS_SMALL_MATRIX_THRES_TRSM 32768 //128(128+128) => m*(m+n) #define BLIS_SMALL_MATRIX_A_THRES_TRSM 128 #define BLIS_SMALL_MATRIX_A_THRES_M_SYRK 96 @@ -65,7 +64,6 @@ #define D_BLIS_SMALL_MATRIX_THRES_TRSM_ALXB_NAPLES 90 #define D_BLIS_SMALL_MATRIX_THRES_TRSM_DIM_RATIO 22 -======= // Allow the sup implementation to combine some small edge case iterations in // the 2nd loop of the panel-block algorithm (MR) and/or the 2nd loop of the // block-panel algorithm (NR) with the last full iteration that precedes it. @@ -75,7 +73,6 @@ #define BLIS_ENABLE_SUP_MR_EXT 1 #define BLIS_ENABLE_SUP_NR_EXT 0 ->>>>>>> Implemented gemm on skinny/unpacked matrices. //#endif diff --git a/frame/3/bli_l3_sup_var1n2m.c b/frame/3/bli_l3_sup_var1n2m.c index c994f0067..2c841c6e4 100644 --- a/frame/3/bli_l3_sup_var1n2m.c +++ b/frame/3/bli_l3_sup_var1n2m.c @@ -362,7 +362,7 @@ void PASTEMAC(ch,varname) \ rows of C and A. (If MRX > MR, the mkernel has agreed to handle these cases.) Note that this prevents us from declaring jr_iter and jr_left as const. */ \ - if ( BLIS_ENABLE_SUP_MR_EXT ) \ + if ( 1 ) \ if ( MRE != 0 && 1 < jr_iter && jr_left != 0 && jr_left <= MRE ) \ { \ jr_iter--; jr_left += MR; \ @@ -730,7 +730,7 @@ void PASTEMAC(ch,varname) \ columns of C and B. (If NRX > NR, the mkernel has agreed to handle these cases.) Note that this prevents us from declaring jr_iter and jr_left as const. */ \ - if ( BLIS_ENABLE_SUP_NR_EXT ) \ + if ( 1 ) \ if ( NRE != 0 && 1 < jr_iter && jr_left != 0 && jr_left <= NRE ) \ { \ jr_iter--; jr_left += NR; \ From 20391abca2179b556923581c65793ff856c296ca Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Sat, 27 Apr 2019 21:27:32 -0500 Subject: [PATCH 055/109] Minor bugfixes in sup dgemm implementation. Details: - Fixed an obscure but in the bli_dgemmsup_rv_haswell_asm_5x8n() kernel that only affected the beta == 0, column-storage output case. Thanks to the BLAS test drivers for catching this bug. - Previously, bli_gemmsup_ref_var1n() and _var2m() were returning if k = 0, when the correct action would be to scale by beta (and then return). Thanks to the BLAS test drivers to catching this bug. - Changed the sup threshold behavior such that the sup implementation only kicks in if a matrix dimension is strictly less than (rather than less than or equal to) the threshold in question. - Initialize all thresholds to zero (instead of 10) by default in ref_kernels/bli_cntx_ref.c. This, combined with the above change to threshold testing means that calls to BLIS or BLAS with one or more matrix dimensions of zero will no longer trigger the sup implementation. - Added disabled debugging output to frame/3/bli_l3_sup.c (for future use, perhaps). --- frame/3/bli_l3_sup.c | 13 +++++++++++++ frame/3/bli_l3_sup_var1n2m.c | 16 ++++++++-------- frame/base/bli_cntx.h | 6 +++--- .../3/sup/bli_gemmsup_rv_haswell_asm_d6x8n.c | 8 ++++---- ref_kernels/bli_cntx_ref.c | 6 +++--- 5 files changed, 31 insertions(+), 18 deletions(-) diff --git a/frame/3/bli_l3_sup.c b/frame/3/bli_l3_sup.c index cb0d555d4..05aaf7bcb 100644 --- a/frame/3/bli_l3_sup.c +++ b/frame/3/bli_l3_sup.c @@ -94,6 +94,19 @@ err_t bli_gemmsup return BLIS_FAILURE; } +#if 0 +const num_t dt = bli_obj_dt( c ); +const dim_t m = bli_obj_length( c ); +const dim_t n = bli_obj_width( c ); +const dim_t k = bli_obj_width_after_trans( a ); +const dim_t tm = bli_cntx_get_l3_sup_thresh_dt( dt, BLIS_MT, cntx ); +const dim_t tn = bli_cntx_get_l3_sup_thresh_dt( dt, BLIS_NT, cntx ); +const dim_t tk = bli_cntx_get_l3_sup_thresh_dt( dt, BLIS_KT, cntx ); + +printf( "dims: %d %d %d (threshs: %d %d %d)\n", + (int)m, (int)n, (int)k, (int)tm, (int)tn, (int)tk ); +#endif + // We've now ruled out the following two possibilities: // - the ukernel prefers the operation as-is, and the sup thresholds are // unsatisfied. diff --git a/frame/3/bli_l3_sup_var1n2m.c b/frame/3/bli_l3_sup_var1n2m.c index 2c841c6e4..df4c42526 100644 --- a/frame/3/bli_l3_sup_var1n2m.c +++ b/frame/3/bli_l3_sup_var1n2m.c @@ -232,11 +232,11 @@ void PASTEMAC(ch,varname) \ rntm_t* restrict rntm \ ) \ { \ - /* If any dimension is zero, return immediately. */ \ - if ( bli_zero_dim3( m, n, k ) ) return; \ + /* If m or n is zero, return immediately. */ \ + if ( bli_zero_dim2( m, n ) ) return; \ \ - /* If alpha is zero, scale by beta and return. */ \ - if ( PASTEMAC(ch,eq0)( *(( ctype* )alpha) ) ) \ + /* If k < 1 or alpha is zero, scale by beta and return. */ \ + if ( k < 1 || PASTEMAC(ch,eq0)( *(( ctype* )alpha) ) ) \ { \ PASTEMAC(ch,scalm) \ ( \ @@ -612,11 +612,11 @@ void PASTEMAC(ch,varname) \ rntm_t* restrict rntm \ ) \ { \ - /* If any dimension is zero, return immediately. */ \ - if ( bli_zero_dim3( m, n, k ) ) return; \ + /* If m or n is zero, return immediately. */ \ + if ( bli_zero_dim2( m, n ) ) return; \ \ - /* If alpha is zero, scale by beta and return. */ \ - if ( PASTEMAC(ch,eq0)( *(( ctype* )alpha) ) ) \ + /* If k < 1 or alpha is zero, scale by beta and return. */ \ + if ( k < 1 || PASTEMAC(ch,eq0)( *(( ctype* )alpha) ) ) \ { \ PASTEMAC(ch,scalm) \ ( \ diff --git a/frame/base/bli_cntx.h b/frame/base/bli_cntx.h index a09cc8bd1..818534b1e 100644 --- a/frame/base/bli_cntx.h +++ b/frame/base/bli_cntx.h @@ -305,9 +305,9 @@ static dim_t bli_cntx_get_l3_sup_thresh_dt( num_t dt, threshid_t thresh_id, cntx static bool_t bli_cntx_l3_sup_thresh_is_met( num_t dt, dim_t m, dim_t n, dim_t k, cntx_t* cntx ) { - if ( m <= bli_cntx_get_l3_sup_thresh_dt( dt, BLIS_MT, cntx ) ) return TRUE; - if ( n <= bli_cntx_get_l3_sup_thresh_dt( dt, BLIS_NT, cntx ) ) return TRUE; - if ( k <= bli_cntx_get_l3_sup_thresh_dt( dt, BLIS_KT, cntx ) ) return TRUE; + if ( m < bli_cntx_get_l3_sup_thresh_dt( dt, BLIS_MT, cntx ) ) return TRUE; + if ( n < bli_cntx_get_l3_sup_thresh_dt( dt, BLIS_NT, cntx ) ) return TRUE; + if ( k < bli_cntx_get_l3_sup_thresh_dt( dt, BLIS_KT, cntx ) ) return TRUE; return FALSE; } diff --git a/kernels/haswell/3/sup/bli_gemmsup_rv_haswell_asm_d6x8n.c b/kernels/haswell/3/sup/bli_gemmsup_rv_haswell_asm_d6x8n.c index 7ff39dac7..abce959a2 100644 --- a/kernels/haswell/3/sup/bli_gemmsup_rv_haswell_asm_d6x8n.c +++ b/kernels/haswell/3/sup/bli_gemmsup_rv_haswell_asm_d6x8n.c @@ -1660,10 +1660,10 @@ void bli_dgemmsup_rv_haswell_asm_5x8n vmovupd(ymm12, ymm0) vextractf128(imm(1), ymm0, xmm1) - vmovlpd(xmm0, mem(rcx)) - vmovhpd(xmm0, mem(rcx, rsi, 1)) - vmovlpd(xmm1, mem(rcx, rsi, 2)) - vmovhpd(xmm1, mem(rcx, rax, 1)) + vmovlpd(xmm0, mem(rdx)) + vmovhpd(xmm0, mem(rdx, rsi, 1)) + vmovlpd(xmm1, mem(rdx, rsi, 2)) + vmovhpd(xmm1, mem(rdx, rax, 1)) #endif lea(mem(rdx, rsi, 4), rdx) diff --git a/ref_kernels/bli_cntx_ref.c b/ref_kernels/bli_cntx_ref.c index f07305841..36cdd52dc 100644 --- a/ref_kernels/bli_cntx_ref.c +++ b/ref_kernels/bli_cntx_ref.c @@ -433,9 +433,9 @@ void GENBARNAME(cntx_init) // register new (probably larger) thresholds that are almost surely more // appropriate that these default values. // s d c z - bli_blksz_init_easy( &thresh[ BLIS_MT ], 10, 10, 10, 10 ); - bli_blksz_init_easy( &thresh[ BLIS_NT ], 10, 10, 10, 10 ); - bli_blksz_init_easy( &thresh[ BLIS_KT ], 10, 10, 10, 10 ); + bli_blksz_init_easy( &thresh[ BLIS_MT ], 0, 0, 0, 0 ); + bli_blksz_init_easy( &thresh[ BLIS_NT ], 0, 0, 0, 0 ); + bli_blksz_init_easy( &thresh[ BLIS_KT ], 0, 0, 0, 0 ); // Initialize the context with the default thresholds. bli_cntx_set_l3_sup_thresh From e394c7459cb8e9ab3166b72cb37f96f559b2981f Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Wed, 1 May 2019 19:13:00 -0500 Subject: [PATCH 056/109] Define _POSIX_C_SOURCE in bli_system.h. Details: - Added #ifndef _POSIX_C_SOURCE #define _POSIX_C_SOURCE 200809L #endif to bli_system.h so that an application that uses BLIS (specifically, an application that #includes blis.h) does not need to remember to #define the macro itself (either on the command line or in the code that includes blis.h) in order to activate things like the pthreads. Thanks to Christos Psarras for reporting this issue and suggesting this fix. - Commented out #include in bli_system.h, since I don't think this header is used/needed anymore. - Comment update to function macro for bli_?normiv_unb_var1() in frame/util/bli_util_unb_var1.c. --- frame/include/bli_system.h | 9 ++++++++- frame/util/bli_util_unb_var1.c | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/frame/include/bli_system.h b/frame/include/bli_system.h index 084999ab5..d91df6803 100644 --- a/frame/include/bli_system.h +++ b/frame/include/bli_system.h @@ -36,6 +36,12 @@ #ifndef BLIS_SYSTEM_H #define BLIS_SYSTEM_H +// NOTE: If not yet defined, we define _POSIX_C_SOURCE to make sure that +// various parts of POSIX are defined and made available. +#ifndef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 200809L +#endif + #include #include #include @@ -111,7 +117,8 @@ #elif BLIS_OS_OSX #include #else - #include + //#include + #include #endif diff --git a/frame/util/bli_util_unb_var1.c b/frame/util/bli_util_unb_var1.c index 32197819a..a12cdbd5c 100644 --- a/frame/util/bli_util_unb_var1.c +++ b/frame/util/bli_util_unb_var1.c @@ -466,7 +466,7 @@ void PASTEMAC(ch,varname) \ /* If the absolute value of the current element exceeds that of the previous largest, save it and its index. If NaN is encountered, then treat it the same as if it were a valid - value that was smaller than any previously seen. This + value that was larger than any previously seen. This behavior mimics that of LAPACK's ?lange(). */ \ if ( abs_chi1_max < abs_chi1 || bli_isnan( abs_chi1 ) ) \ { \ From cd8e74a69fe3a0d5e53354c4a3df22529a08d1d7 Mon Sep 17 00:00:00 2001 From: Jeff Hammond Date: Tue, 14 May 2019 15:52:30 -0400 Subject: [PATCH 057/109] add info about CXX in configure (#311) --- configure | 1 + 1 file changed, 1 insertion(+) diff --git a/configure b/configure index 291d5e666..057aef15c 100755 --- a/configure +++ b/configure @@ -308,6 +308,7 @@ print_usage() echo " Environment Variables:" echo " " echo " CC Specifies the C compiler to use." + echo " CXX Specifies the C++ compiler to use (sandbox only)." echo " RANLIB Specifies the ranlib executable to use." echo " AR Specifies the archiver to use." echo " CFLAGS Specifies additional compiler flags to use (prepended)." From fb305d0837518b06f47e4376d505e242dc0efb1d Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Thu, 23 May 2019 12:51:17 -0500 Subject: [PATCH 058/109] Minor build system housekeeping. Details: - Commented out redundant setting of LIBBLIS_LINK within all driver- level Makefiles. This variable is already set within common.mk, and so the only time it should be overridden is if the user wants to link to a different copy of libblis. - Very minor changes to build/gen-make-frags/gen-make-frag.sh. - Whitespace and inconsequential quoting change to configure. - Moved top-level 'windows' directory into a new 'attic' directory. --- {windows => attic/windows}/Makefile | 0 {windows => attic/windows}/build/bli_kernel.h | 0 {windows => attic/windows}/build/config.mk.in | 0 {windows => attic/windows}/build/defs.mk | 0 .../windows}/build/gather-src-for-windows.py | 0 .../windows}/build/gen-check-rev-file.py | 0 .../windows}/build/gen-config-file.py | 0 {windows => attic/windows}/build/ignore_list | 0 .../windows}/build/ignore_list.windows | 0 {windows => attic/windows}/build/leaf_list | 0 .../windows}/build/nmake-help.cmd | 0 {windows => attic/windows}/configure.cmd | 0 {windows => attic/windows}/gendll.cmd | 0 {windows => attic/windows}/linkargs.txt | 0 {windows => attic/windows}/linkargs64.txt | 0 {windows => attic/windows}/revision | 0 {windows => attic/windows}/vc110.pdb | Bin blastest/Makefile | 2 +- build/gen-make-frags/gen-make-frag.sh | 3 +- configure | 6 +- examples/oapi/Makefile | 2 +- examples/tapi/Makefile | 2 +- mpi_test/Makefile | 2 +- test/3/Makefile | 2 +- test/Makefile | 2 +- test/exec_sizes/Makefile | 2 +- test/mixeddt/Makefile | 2 +- test/studies/skx/Makefile | 2 +- test/studies/thunderx2/Makefile | 2 +- test/thread_ranges/Makefile | 2 +- testsuite/Makefile | 2 +- windows/build/bli_config.h | 141 ------------------ 32 files changed, 17 insertions(+), 157 deletions(-) rename {windows => attic/windows}/Makefile (100%) rename {windows => attic/windows}/build/bli_kernel.h (100%) rename {windows => attic/windows}/build/config.mk.in (100%) rename {windows => attic/windows}/build/defs.mk (100%) rename {windows => attic/windows}/build/gather-src-for-windows.py (100%) rename {windows => attic/windows}/build/gen-check-rev-file.py (100%) rename {windows => attic/windows}/build/gen-config-file.py (100%) rename {windows => attic/windows}/build/ignore_list (100%) rename {windows => attic/windows}/build/ignore_list.windows (100%) rename {windows => attic/windows}/build/leaf_list (100%) rename {windows => attic/windows}/build/nmake-help.cmd (100%) rename {windows => attic/windows}/configure.cmd (100%) rename {windows => attic/windows}/gendll.cmd (100%) rename {windows => attic/windows}/linkargs.txt (100%) rename {windows => attic/windows}/linkargs64.txt (100%) rename {windows => attic/windows}/revision (100%) rename {windows => attic/windows}/vc110.pdb (100%) delete mode 100644 windows/build/bli_config.h diff --git a/windows/Makefile b/attic/windows/Makefile similarity index 100% rename from windows/Makefile rename to attic/windows/Makefile diff --git a/windows/build/bli_kernel.h b/attic/windows/build/bli_kernel.h similarity index 100% rename from windows/build/bli_kernel.h rename to attic/windows/build/bli_kernel.h diff --git a/windows/build/config.mk.in b/attic/windows/build/config.mk.in similarity index 100% rename from windows/build/config.mk.in rename to attic/windows/build/config.mk.in diff --git a/windows/build/defs.mk b/attic/windows/build/defs.mk similarity index 100% rename from windows/build/defs.mk rename to attic/windows/build/defs.mk diff --git a/windows/build/gather-src-for-windows.py b/attic/windows/build/gather-src-for-windows.py similarity index 100% rename from windows/build/gather-src-for-windows.py rename to attic/windows/build/gather-src-for-windows.py diff --git a/windows/build/gen-check-rev-file.py b/attic/windows/build/gen-check-rev-file.py similarity index 100% rename from windows/build/gen-check-rev-file.py rename to attic/windows/build/gen-check-rev-file.py diff --git a/windows/build/gen-config-file.py b/attic/windows/build/gen-config-file.py similarity index 100% rename from windows/build/gen-config-file.py rename to attic/windows/build/gen-config-file.py diff --git a/windows/build/ignore_list b/attic/windows/build/ignore_list similarity index 100% rename from windows/build/ignore_list rename to attic/windows/build/ignore_list diff --git a/windows/build/ignore_list.windows b/attic/windows/build/ignore_list.windows similarity index 100% rename from windows/build/ignore_list.windows rename to attic/windows/build/ignore_list.windows diff --git a/windows/build/leaf_list b/attic/windows/build/leaf_list similarity index 100% rename from windows/build/leaf_list rename to attic/windows/build/leaf_list diff --git a/windows/build/nmake-help.cmd b/attic/windows/build/nmake-help.cmd similarity index 100% rename from windows/build/nmake-help.cmd rename to attic/windows/build/nmake-help.cmd diff --git a/windows/configure.cmd b/attic/windows/configure.cmd similarity index 100% rename from windows/configure.cmd rename to attic/windows/configure.cmd diff --git a/windows/gendll.cmd b/attic/windows/gendll.cmd similarity index 100% rename from windows/gendll.cmd rename to attic/windows/gendll.cmd diff --git a/windows/linkargs.txt b/attic/windows/linkargs.txt similarity index 100% rename from windows/linkargs.txt rename to attic/windows/linkargs.txt diff --git a/windows/linkargs64.txt b/attic/windows/linkargs64.txt similarity index 100% rename from windows/linkargs64.txt rename to attic/windows/linkargs64.txt diff --git a/windows/revision b/attic/windows/revision similarity index 100% rename from windows/revision rename to attic/windows/revision diff --git a/windows/vc110.pdb b/attic/windows/vc110.pdb similarity index 100% rename from windows/vc110.pdb rename to attic/windows/vc110.pdb diff --git a/blastest/Makefile b/blastest/Makefile index 4659fcfee..b4b40a714 100644 --- a/blastest/Makefile +++ b/blastest/Makefile @@ -136,7 +136,7 @@ CFLAGS += -Wno-maybe-uninitialized -Wno-parentheses -Wfatal-errors \ -I$(INC_PATH) -DHAVE_BLIS_H # Locate the libblis library to which we will link. -LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) +#LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) # Override the location of the check-blastest.sh script. #BLASTEST_CHECK := ./check-blastest.sh diff --git a/build/gen-make-frags/gen-make-frag.sh b/build/gen-make-frags/gen-make-frag.sh index 4d8cb408d..e411fa8d9 100755 --- a/build/gen-make-frags/gen-make-frag.sh +++ b/build/gen-make-frags/gen-make-frag.sh @@ -417,8 +417,9 @@ main() # The arguments to this function. They'll get assigned meaningful # values after getopts. - mkfile_frag_tmpl_path="" root_dir="" + frag_dir="" + mkfile_frag_tmpl_path="" suffix_file="" ignore_file="" diff --git a/configure b/configure index 057aef15c..0ea625c90 100755 --- a/configure +++ b/configure @@ -308,7 +308,7 @@ print_usage() echo " Environment Variables:" echo " " echo " CC Specifies the C compiler to use." - echo " CXX Specifies the C++ compiler to use (sandbox only)." + echo " CXX Specifies the C++ compiler to use (sandbox only)." echo " RANLIB Specifies the ranlib executable to use." echo " AR Specifies the archiver to use." echo " CFLAGS Specifies additional compiler flags to use (prepended)." @@ -2919,13 +2919,13 @@ main() # -- Determine whether we are performing an out-of-tree build -------------- - if [ ${dist_path} != "./" ]; then + if [ "${dist_path}" != "./" ]; then # At this point, we know the user did not run "./configure". But we # have not yet ruled out "/configure" or some # equivalent # that uses relative paths. To further rule out these possibilities, # we create a dummy file in the current build directory. - touch ./${dummy_file} + touch "./${dummy_file}" # If the dummy file we just created in the current directory does not # appear in the source distribution path, then we are in a different diff --git a/examples/oapi/Makefile b/examples/oapi/Makefile index 64dbf20dd..f12ca227b 100644 --- a/examples/oapi/Makefile +++ b/examples/oapi/Makefile @@ -114,7 +114,7 @@ CFLAGS := $(call get-user-cflags-for,$(CONFIG_NAME)) CFLAGS += -I$(TEST_SRC_PATH) # Locate the libblis library to which we will link. -LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) +#LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) # Binary executable name. TEST_BINS := 00obj_basic.x \ diff --git a/examples/tapi/Makefile b/examples/tapi/Makefile index 1de4acc13..83330d38b 100644 --- a/examples/tapi/Makefile +++ b/examples/tapi/Makefile @@ -102,7 +102,7 @@ CFLAGS := $(call get-user-cflags-for,$(CONFIG_NAME)) CFLAGS += -I$(TEST_SRC_PATH) # Locate the libblis library to which we will link. -LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) +#LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) # Binary executable name. TEST_BINS := 00level1v.x \ diff --git a/mpi_test/Makefile b/mpi_test/Makefile index 8bf871b99..00ca01e47 100644 --- a/mpi_test/Makefile +++ b/mpi_test/Makefile @@ -134,7 +134,7 @@ CFLAGS := $(call get-user-cflags-for,$(CONFIG_NAME)) CFLAGS += -I$(TEST_SRC_PATH) # Locate the libblis library to which we will link. -LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) +#LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) diff --git a/test/3/Makefile b/test/3/Makefile index a781d0053..8f9f198d5 100644 --- a/test/3/Makefile +++ b/test/3/Makefile @@ -169,7 +169,7 @@ CFLAGS := $(call get-user-cflags-for,$(CONFIG_NAME)) CFLAGS += -I$(TEST_SRC_PATH) # Locate the libblis library to which we will link. -LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) +#LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) # Define a set of CFLAGS for use with C++ and Eigen. CXXFLAGS := $(subst -std=c99,-std=c++11,$(CFLAGS)) diff --git a/test/Makefile b/test/Makefile index 53d1f9803..732ef0dd0 100644 --- a/test/Makefile +++ b/test/Makefile @@ -150,7 +150,7 @@ CFLAGS := $(call get-user-cflags-for,$(CONFIG_NAME)) CFLAGS += -I$(TEST_SRC_PATH) # Locate the libblis library to which we will link. -LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) +#LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) diff --git a/test/exec_sizes/Makefile b/test/exec_sizes/Makefile index ca8486353..eefc89918 100644 --- a/test/exec_sizes/Makefile +++ b/test/exec_sizes/Makefile @@ -143,7 +143,7 @@ CFLAGS := $(call get-user-cflags-for,$(CONFIG_NAME)) CFLAGS += -I$(TEST_SRC_PATH) # Locate the libblis library to which we will link. -LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) +#LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) diff --git a/test/mixeddt/Makefile b/test/mixeddt/Makefile index 7ae4cb934..87568825a 100644 --- a/test/mixeddt/Makefile +++ b/test/mixeddt/Makefile @@ -127,7 +127,7 @@ CFLAGS := $(call get-user-cflags-for,$(CONFIG_NAME)) CFLAGS += -I$(TEST_SRC_PATH) # Locate the libblis library to which we will link. -LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) +#LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) # Which library? diff --git a/test/studies/skx/Makefile b/test/studies/skx/Makefile index 29134a4ff..18a82c0ea 100644 --- a/test/studies/skx/Makefile +++ b/test/studies/skx/Makefile @@ -168,7 +168,7 @@ CFLAGS := $(call get-user-cflags-for,$(CONFIG_NAME)) CFLAGS += -g -I$(TEST_SRC_PATH) # Locate the libblis library to which we will link. -LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) +#LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) # Datatype diff --git a/test/studies/thunderx2/Makefile b/test/studies/thunderx2/Makefile index c812161d4..ba45ebbe4 100644 --- a/test/studies/thunderx2/Makefile +++ b/test/studies/thunderx2/Makefile @@ -158,7 +158,7 @@ CFLAGS := $(call get-frame-cflags-for,$(CONFIG_NAME)) CFLAGS += -g -I$(TEST_SRC_PATH) # Locate the libblis library to which we will link. -lIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) +#LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) # Datatype diff --git a/test/thread_ranges/Makefile b/test/thread_ranges/Makefile index 2ed155be1..5af2ce533 100644 --- a/test/thread_ranges/Makefile +++ b/test/thread_ranges/Makefile @@ -104,7 +104,7 @@ CFLAGS := $(call get-user-cflags-for,$(CONFIG_NAME)) CFLAGS += -I$(TEST_SRC_PATH) # Locate the libblis library to which we will link. -LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) +#LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) # Datatype diff --git a/testsuite/Makefile b/testsuite/Makefile index 1e97cdcf4..57c1c748d 100644 --- a/testsuite/Makefile +++ b/testsuite/Makefile @@ -103,7 +103,7 @@ CFLAGS := $(call get-user-cflags-for,$(CONFIG_NAME)) CFLAGS += -I$(TEST_SRC_PATH) # Locate the libblis library to which we will link. -LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) +#LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) # Binary executable name. TESTSUITE_BIN := test_libblis.x diff --git a/windows/build/bli_config.h b/windows/build/bli_config.h deleted file mode 100644 index aced5d1b7..000000000 --- a/windows/build/bli_config.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - - BLIS - An object-based framework for developing high-performance BLAS-like - libraries. - - Copyright (C) 2014, The University of Texas at Austin - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name(s) of the copyright holder(s) nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifndef BLIS_CONFIG_H -#define BLIS_CONFIG_H - - -// -- OPERATING SYSTEM --------------------------------------------------------- - - - -// -- FLOATING-POINT PROPERTIES ------------------------------------------------ - -#define BLIS_NUM_FP_TYPES 4 -#define BLIS_MAX_TYPE_SIZE sizeof(dcomplex) - -// Enable use of built-in C99 "float complex" and "double complex" types and -// associated overloaded operations and functions? Disabling results in -// scomplex and dcomplex being defined in terms of simple structs. -//#define BLIS_ENABLE_C99_COMPLEX - - - -// -- MULTITHREADING ----------------------------------------------------------- - -// The maximum number of BLIS threads that will run concurrently. -#define BLIS_MAX_NUM_THREADS 24 - - - -// -- MEMORY ALLOCATION -------------------------------------------------------- - -// -- Contiguous (static) memory allocator -- - -// The number of MC x KC, KC x NC, and MC x NC blocks to reserve in the -// contiguous memory pools. -#define BLIS_NUM_MC_X_KC_BLOCKS BLIS_MAX_NUM_THREADS -#define BLIS_NUM_KC_X_NC_BLOCKS 1 -#define BLIS_NUM_MC_X_NC_BLOCKS 1 - -// The maximum preload byte offset is used to pad the end of the contiguous -// memory pools so that the micro-kernel, when computing with the end of the -// last block, can exceed the bounds of the usable portion of the memory -// region without causing a segmentation fault. -#define BLIS_MAX_PRELOAD_BYTE_OFFSET 128 - -// -- Memory alignment -- - -// It is sometimes useful to define the various memory alignments in terms -// of some other characteristics of the system, such as the cache line size -// and the page size. -#define BLIS_CACHE_LINE_SIZE 64 -#define BLIS_PAGE_SIZE 4096 - -// Alignment size used to align local stack buffers within macro-kernel -// functions. -#define BLIS_STACK_BUF_ALIGN_SIZE 16 - -// Alignment size used when allocating memory dynamically from the operating -// system (eg: posix_memalign()). To disable heap alignment and just use -// malloc() instead, set this to 1. -#define BLIS_HEAP_ADDR_ALIGN_SIZE 16 - -// Alignment size used when sizing leading dimensions of dynamically -// allocated memory. -#define BLIS_HEAP_STRIDE_ALIGN_SIZE BLIS_CACHE_LINE_SIZE - -// Alignment size used when allocating entire blocks of contiguous memory -// from the contiguous memory allocator. -#define BLIS_CONTIG_ADDR_ALIGN_SIZE BLIS_PAGE_SIZE - - - -// -- MIXED DATATYPE SUPPORT --------------------------------------------------- - -// Basic (homogeneous) datatype support always enabled. - -// Enable mixed domain operations? -//#define BLIS_ENABLE_MIXED_DOMAIN_SUPPORT - -// Enable extra mixed precision operations? -//#define BLIS_ENABLE_MIXED_PRECISION_SUPPORT - - - -// -- MISCELLANEOUS OPTIONS ---------------------------------------------------- - -// Stay initialized after auto-initialization, unless and until the user -// explicitly calls bli_finalize(). -#define BLIS_ENABLE_STAY_AUTO_INITIALIZED - - - -// -- BLAS-to-BLIS COMPATIBILITY LAYER ----------------------------------------- - -// Enable the BLAS compatibility layer? -#define BLIS_ENABLE_BLAS2BLIS - -// Enable 64-bit integers in the BLAS compatibility layer? If disabled, -// these integers will be defined as 32-bit. -#define BLIS_ENABLE_BLAS2BLIS_INT64 - -// Fortran-77 name-mangling macros. -#define PASTEF770(name) name ## _ -#define PASTEF77(ch1,name) ch1 ## name ## _ -#define PASTEF772(ch1,ch2,name) ch1 ## ch2 ## name ## _ - - -#endif - From d488d7acb656c751842e2f102ac66d38344e1a00 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Thu, 23 May 2019 13:00:53 -0500 Subject: [PATCH 059/109] Increased MT sup threshold for double to 180. Details: - Increased the double-precision real MT threshold (which controls whether the sup implementation kicks for smaller m dimension values) from 80 to 180, and this change was made for both haswell and zen subconfigurations. This is less about the m dimension in particular and more about facilitating a smoother performance transition when m = n = k. --- config/haswell/bli_cntx_init_haswell.c | 2 +- config/zen/bli_cntx_init_zen.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/haswell/bli_cntx_init_haswell.c b/config/haswell/bli_cntx_init_haswell.c index 879fa660d..cd646c737 100644 --- a/config/haswell/bli_cntx_init_haswell.c +++ b/config/haswell/bli_cntx_init_haswell.c @@ -154,7 +154,7 @@ void bli_cntx_init_haswell( cntx_t* cntx ) // Initialize sup thresholds with architecture-appropriate values. // s d c z - bli_blksz_init_easy( &thresh[ BLIS_MT ], -1, 80, -1, -1 ); + bli_blksz_init_easy( &thresh[ BLIS_MT ], -1, 180, -1, -1 ); bli_blksz_init_easy( &thresh[ BLIS_NT ], -1, 100, -1, -1 ); bli_blksz_init_easy( &thresh[ BLIS_KT ], -1, 120, -1, -1 ); diff --git a/config/zen/bli_cntx_init_zen.c b/config/zen/bli_cntx_init_zen.c index 84f43bf32..0d76dff4d 100644 --- a/config/zen/bli_cntx_init_zen.c +++ b/config/zen/bli_cntx_init_zen.c @@ -178,7 +178,7 @@ void bli_cntx_init_zen( cntx_t* cntx ) // Initialize sup thresholds with architecture-appropriate values. // s d c z - bli_blksz_init_easy( &thresh[ BLIS_MT ], -1, 80, -1, -1 ); + bli_blksz_init_easy( &thresh[ BLIS_MT ], -1, 180, -1, -1 ); bli_blksz_init_easy( &thresh[ BLIS_NT ], -1, 100, -1, -1 ); bli_blksz_init_easy( &thresh[ BLIS_KT ], -1, 120, -1, -1 ); From 73970bf124f7924800f2d6bbde0cdb4c62292787 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Thu, 23 May 2019 14:59:53 -0500 Subject: [PATCH 060/109] Added BLIS theading info to Performance.md. Details: - Documented the BLIS environment variables that were set (e.g. BLIS_JC_NT, BLIS_IC_NT, BLIS_JR_NT) for each machine and threading configuration in order to achieve the parallelism reported on in docs/Performance.md. --- docs/Performance.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/Performance.md b/docs/Performance.md index 2d9d198e6..1e4d1b009 100644 --- a/docs/Performance.md +++ b/docs/Performance.md @@ -131,6 +131,9 @@ size of interest so that we can better assist you. * BLIS 075143df (0.5.1-39) * configured with `./configure -t openmp thunderx2` (single- and multithreaded) * sub-configuration exercised: `thunderx2` + * Requested single-threaded execution (the default) by setting no environment variables + * Requested threading via `export BLIS_JC_NT=4 BLIS_IC_NT=7` (multithreaded, 28 cores) + * Requested threading via `export BLIS_JC_NT=8 BLIS_IC_NT=7` (multithreaded, 56 cores) * OpenBLAS 52d3f7a * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=56` (multithreaded, 56 cores) @@ -188,6 +191,9 @@ size of interest so that we can better assist you. * BLIS 9f1dbe5 (0.5.1-54) * configured with `./configure -t openmp auto` (single- and multithreaded) * sub-configuration exercised: `skx` + * Requested single-threaded execution (the default) by setting no environment variables + * Requested threading via `export BLIS_JC_NT=2 BLIS_IC_NT=13` (multithreaded, 26 cores) + * Requested threading via `export BLIS_JC_NT=4 BLIS_IC_NT=13` (multithreaded, 52 cores) * OpenBLAS 0.3.5 * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=52` (multithreaded, 52 cores) @@ -257,6 +263,9 @@ size of interest so that we can better assist you. * BLIS 075143df (0.5.1-39) * configured with `./configure -t openmp auto` (single- and multithreaded) * sub-configuration exercised: `haswell` + * Requested single-threaded execution (the default) by setting no environment variables + * Requested threading via `export BLIS_JC_NT=2 BLIS_IC_NT=3 BLIS_JR_NT=2` (multithreaded, 12 cores) + * Requested threading via `export BLIS_JC_NT=4 BLIS_IC_NT=3 BLIS_JR_NT=2` (multithreaded, 24 cores) * OpenBLAS 0.3.5 * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=24` (multithreaded, 24 cores) @@ -324,6 +333,9 @@ size of interest so that we can better assist you. * BLIS 9f1dbe5 (0.5.1-54) * configured with `./configure -t openmp auto` (single- and multithreaded) * sub-configuration exercised: `zen` + * Requested single-threaded execution (the default) by setting no environment variables + * Requested threading via `export BLIS_JC_NT=1 BLIS_IC_NT=8 BLIS_JR_NT=4` (multithreaded, 32 cores) + * Requested threading via `export BLIS_JC_NT=2 BLIS_IC_NT=8 BLIS_JR_NT=4` (multithreaded, 64 cores) * OpenBLAS 0.3.5 * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=64` (multithreaded, 64 cores) From defe789b8cae395dbe0c407f0debccac85e86d75 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Thu, 23 May 2019 17:34:36 -0500 Subject: [PATCH 061/109] Minor rewording of language around mt env. vars. --- docs/Performance.md | 90 ++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/docs/Performance.md b/docs/Performance.md index 1e4d1b009..65d89efd7 100644 --- a/docs/Performance.md +++ b/docs/Performance.md @@ -131,19 +131,19 @@ size of interest so that we can better assist you. * BLIS 075143df (0.5.1-39) * configured with `./configure -t openmp thunderx2` (single- and multithreaded) * sub-configuration exercised: `thunderx2` - * Requested single-threaded execution (the default) by setting no environment variables - * Requested threading via `export BLIS_JC_NT=4 BLIS_IC_NT=7` (multithreaded, 28 cores) - * Requested threading via `export BLIS_JC_NT=8 BLIS_IC_NT=7` (multithreaded, 56 cores) + * Single-threaded (1 core) execution requested via no change in environment variables + * Multithreaded (28 core) execution requested via `export BLIS_JC_NT=4 BLIS_IC_NT=7` + * Multithreaded (56 core) execution requested via `export BLIS_JC_NT=8 BLIS_IC_NT=7` * OpenBLAS 52d3f7a * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=56` (multithreaded, 56 cores) - * Requested threading via `export OPENBLAS_NUM_THREADS=1` (single-threaded) - * Requested threading via `export OPENBLAS_NUM_THREADS=28` (multithreaded, 28 cores) - * Requested threading via `export OPENBLAS_NUM_THREADS=56` (multithreaded, 56 cores) + * Single-threaded (1 core) execution requested via `export OPENBLAS_NUM_THREADS=1` + * Multithreaded (28 core) execution requested via `export OPENBLAS_NUM_THREADS=28` + * Multithreaded (56 core) execution requested via `export OPENBLAS_NUM_THREADS=56` * ARMPL 18.4 - * Requested threading via `export OMP_NUM_THREADS=1` (single-threaded) - * Requested threading via `export OMP_NUM_THREADS=28` (multithreaded, 28 cores) - * Requested threading via `export OMP_NUM_THREADS=56` (multithreaded, 56 cores) + * Single-threaded (1 core) execution requested via `export OMP_NUM_THREADS=1` + * Multithreaded (28 core) execution requested via `export OMP_NUM_THREADS=28` + * Multithreaded (56 core) execution requested via `export OMP_NUM_THREADS=56` * Affinity: * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 55"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` environment variable was unset. * Frequency throttling (via `cpupower`): @@ -191,28 +191,28 @@ size of interest so that we can better assist you. * BLIS 9f1dbe5 (0.5.1-54) * configured with `./configure -t openmp auto` (single- and multithreaded) * sub-configuration exercised: `skx` - * Requested single-threaded execution (the default) by setting no environment variables - * Requested threading via `export BLIS_JC_NT=2 BLIS_IC_NT=13` (multithreaded, 26 cores) - * Requested threading via `export BLIS_JC_NT=4 BLIS_IC_NT=13` (multithreaded, 52 cores) + * Single-threaded (1 core) execution requested via no change in environment variables + * Multithreaded (26 core) execution requested via `export BLIS_JC_NT=2 BLIS_IC_NT=13` + * Multithreaded (52 core) execution requested via `export BLIS_JC_NT=4 BLIS_IC_NT=13` * OpenBLAS 0.3.5 * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=52` (multithreaded, 52 cores) - * Requested threading via `export OPENBLAS_NUM_THREADS=1` (single-threaded) - * Requested threading via `export OPENBLAS_NUM_THREADS=26` (multithreaded, 26 cores) - * Requested threading via `export OPENBLAS_NUM_THREADS=52` (multithreaded, 52 cores) + * Single-threaded (1 core) execution requested via `export OPENBLAS_NUM_THREADS=1` + * Multithreaded (26 core) execution requested via `export OPENBLAS_NUM_THREADS=26` + * Multithreaded (52 core) execution requested via `export OPENBLAS_NUM_THREADS=52` * Eigen 3.3.90 * Obtained via the [Eigen git mirror](https://github.com/eigenteam/eigen-git-mirror) (March 27, 2019) * Prior to compilation, modified top-level `CMakeLists.txt` to ensure that `-march=native` was added to `CXX_FLAGS` variable (h/t Sameer Agarwal). * configured and built BLAS library via `mkdir build; cd build; cmake ..; make blas` * The `gemm` implementation was pulled in at compile-time via Eigen headers; other operations were linked to Eigen's BLAS library. - * Requested threading via `export OMP_NUM_THREADS=1` (single-threaded) - * Requested threading via `export OMP_NUM_THREADS=26` (multithreaded, 26 cores) - * Requested threading via `export OMP_NUM_THREADS=52` (multithreaded, 52 cores) + * Single-threaded (1 core) execution requested via `export OMP_NUM_THREADS=1` + * Multithreaded (26 core) execution requested via `export OMP_NUM_THREADS=26` + * Multithreaded (52 core) execution requested via `export OMP_NUM_THREADS=52` * **NOTE**: This version of Eigen does not provide multithreaded implementations of `symm`/`hemm`, `syrk`/`herk`, `trmm`, or `trsm`, and therefore those curves are omitted from the multithreaded graphs. * MKL 2019 update 1 - * Requested threading via `export MKL_NUM_THREADS=1` (single-threaded) - * Requested threading via `export MKL_NUM_THREADS=26` (multithreaded, 26 cores) - * Requested threading via `export MKL_NUM_THREADS=52` (multithreaded, 52 cores) + * Single-threaded (1 core) execution requested via `export MKL_NUM_THREADS=1` + * Multithreaded (26 core) execution requested via `export MKL_NUM_THREADS=26` + * Multithreaded (52 core) execution requested via `export MKL_NUM_THREADS=52` * Affinity: * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 51"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` environment variable was unset. * Frequency throttling (via `cpupower`): @@ -263,28 +263,28 @@ size of interest so that we can better assist you. * BLIS 075143df (0.5.1-39) * configured with `./configure -t openmp auto` (single- and multithreaded) * sub-configuration exercised: `haswell` - * Requested single-threaded execution (the default) by setting no environment variables - * Requested threading via `export BLIS_JC_NT=2 BLIS_IC_NT=3 BLIS_JR_NT=2` (multithreaded, 12 cores) - * Requested threading via `export BLIS_JC_NT=4 BLIS_IC_NT=3 BLIS_JR_NT=2` (multithreaded, 24 cores) + * Single-threaded (1 core) execution requested via no change in environment variables + * Multithreaded (12 core) execution requested via `export BLIS_JC_NT=2 BLIS_IC_NT=3 BLIS_JR_NT=2` + * Multithreaded (24 core) execution requested via `export BLIS_JC_NT=4 BLIS_IC_NT=3 BLIS_JR_NT=2` * OpenBLAS 0.3.5 * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=24` (multithreaded, 24 cores) - * Requested threading via `export OPENBLAS_NUM_THREADS=1` (single-threaded) - * Requested threading via `export OPENBLAS_NUM_THREADS=12` (multithreaded, 12 cores) - * Requested threading via `export OPENBLAS_NUM_THREADS=24` (multithreaded, 24 cores) + * Single-threaded (1 core) execution requested via `export OPENBLAS_NUM_THREADS=1` + * Multithreaded (12 core) execution requested via `export OPENBLAS_NUM_THREADS=12` + * Multithreaded (24 core) execution requested via `export OPENBLAS_NUM_THREADS=24` * Eigen 3.3.90 * Obtained via the [Eigen git mirror](https://github.com/eigenteam/eigen-git-mirror) (March 27, 2019) * Prior to compilation, modified top-level `CMakeLists.txt` to ensure that `-march=native` was added to `CXX_FLAGS` variable (h/t Sameer Agarwal). * configured and built BLAS library via `mkdir build; cd build; cmake ..; make blas` * The `gemm` implementation was pulled in at compile-time via Eigen headers; other operations were linked to Eigen's BLAS library. - * Requested threading via `export OMP_NUM_THREADS=1` (single-threaded) - * Requested threading via `export OMP_NUM_THREADS=12` (multithreaded, 12 cores) - * Requested threading via `export OMP_NUM_THREADS=24` (multithreaded, 24 cores) + * Single-threaded (1 core) execution requested via `export OMP_NUM_THREADS=1` + * Multithreaded (12 core) execution requested via `export OMP_NUM_THREADS=12` + * Multithreaded (24 core) execution requested via `export OMP_NUM_THREADS=24` * **NOTE**: This version of Eigen does not provide multithreaded implementations of `symm`/`hemm`, `syrk`/`herk`, `trmm`, or `trsm`, and therefore those curves are omitted from the multithreaded graphs. * MKL 2018 update 2 - * Requested threading via `export MKL_NUM_THREADS=1` (single-threaded) - * Requested threading via `export MKL_NUM_THREADS=12` (multithreaded, 12 cores) - * Requested threading via `export MKL_NUM_THREADS=24` (multithreaded, 24 cores) + * Single-threaded (1 core) execution requested via `export MKL_NUM_THREADS=1` + * Multithreaded (12 core) execution requested via `export MKL_NUM_THREADS=12` + * Multithreaded (24 core) execution requested via `export MKL_NUM_THREADS=24` * Affinity: * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 23"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` environment variable was unset. * Frequency throttling (via `cpupower`): @@ -333,28 +333,28 @@ size of interest so that we can better assist you. * BLIS 9f1dbe5 (0.5.1-54) * configured with `./configure -t openmp auto` (single- and multithreaded) * sub-configuration exercised: `zen` - * Requested single-threaded execution (the default) by setting no environment variables - * Requested threading via `export BLIS_JC_NT=1 BLIS_IC_NT=8 BLIS_JR_NT=4` (multithreaded, 32 cores) - * Requested threading via `export BLIS_JC_NT=2 BLIS_IC_NT=8 BLIS_JR_NT=4` (multithreaded, 64 cores) + * Single-threaded (1 core) execution requested via no change in environment variables + * Multithreaded (32 core) execution requested via `export BLIS_JC_NT=1 BLIS_IC_NT=8 BLIS_JR_NT=4` + * Multithreaded (64 core) execution requested via `export BLIS_JC_NT=2 BLIS_IC_NT=8 BLIS_JR_NT=4` * OpenBLAS 0.3.5 * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=64` (multithreaded, 64 cores) - * Requested threading via `export OPENBLAS_NUM_THREADS=1` (single-threaded) - * Requested threading via `export OPENBLAS_NUM_THREADS=32` (multithreaded, 32 cores) - * Requested threading via `export OPENBLAS_NUM_THREADS=64` (multithreaded, 64 cores) + * Single-threaded (1 core) execution requested via `export OPENBLAS_NUM_THREADS=1` + * Multithreaded (32 core) execution requested via `export OPENBLAS_NUM_THREADS=32` + * Multithreaded (64 core) execution requested via `export OPENBLAS_NUM_THREADS=64` * Eigen 3.3.90 * Obtained via the [Eigen git mirror](https://github.com/eigenteam/eigen-git-mirror) (March 27, 2019) * Prior to compilation, modified top-level `CMakeLists.txt` to ensure that `-march=native` was added to `CXX_FLAGS` variable (h/t Sameer Agarwal). * configured and built BLAS library via `mkdir build; cd build; cmake ..; make blas` * The `gemm` implementation was pulled in at compile-time via Eigen headers; other operations were linked to Eigen's BLAS library. - * Requested threading via `export OMP_NUM_THREADS=1` (single-threaded) - * Requested threading via `export OMP_NUM_THREADS=32` (multithreaded, 32 cores) - * Requested threading via `export OMP_NUM_THREADS=64` (multithreaded, 64 cores) + * Single-threaded (1 core) execution requested via `export OMP_NUM_THREADS=1` + * Multithreaded (32 core) execution requested via `export OMP_NUM_THREADS=32` + * Multithreaded (64 core) execution requested via `export OMP_NUM_THREADS=64` * **NOTE**: This version of Eigen does not provide multithreaded implementations of `symm`/`hemm`, `syrk`/`herk`, `trmm`, or `trsm`, and therefore those curves are omitted from the multithreaded graphs. * MKL 2019 update 1 - * Requested threading via `export MKL_NUM_THREADS=1` (single-threaded) - * Requested threading via `export MKL_NUM_THREADS=32` (multithreaded, 32 cores) - * Requested threading via `export MKL_NUM_THREADS=64` (multithreaded, 64 cores) + * Single-threaded (1 core) execution requested via `export MKL_NUM_THREADS=1` + * Multithreaded (32 core) execution requested via `export MKL_NUM_THREADS=32` + * Multithreaded (64 core) execution requested via `export MKL_NUM_THREADS=64` * Affinity: * Thread affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 63"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` environment variable was unset. * Frequency throttling (via `cpupower`): From c90a1a8dcaa2556bf8b2ebf430de61713eb1b895 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 28 May 2019 12:49:44 -0500 Subject: [PATCH 062/109] Inadvertantly hidden xerbla_() in blastest (#313). Details: - Attempted a fix to issue #313, which reports that when building only a shared library (ie: static library build is disabled), running the BLAS test drivers can fail because those drivers provide their own local version of xerbla_() as a clever (albeit still rather hackish) way of checking the error codes that result from the individual tests. This local xerbla_() function is never found at link-time because the BLAS test drivers' Makefile imports BLIS compilation flags via the get-user-cflags-for() function, which currently conveys the -fvisibility=hidden flag, which hides symbols unless they are explicitly annotated for export. The -fvisibility=hidden flag was only ever intended for use when building BLIS (not for applications), and so the attempted solution here is to omit the symbol export flag(s) from get-user-cflags-for() by storing the symbol export flag(s) to a new BULID_SYMFLAGS variable instead of appending it to the subconfigurations' CMISCFLAGS variable (which is returned by every get-*-cflags-for() function). Thanks to M. Zhou for reporting this issue and also to Isuru Fernando for suggesting the fix. - Renamed BUILD_FLAGS to BUILD_CPPFLAGS to harmonize with the newly created BUILD_SYMFLAGS. - Fixed typo in entry for --export-shared flag in 'configure --help' text. --- common.mk | 58 +++++++++++++++++++++++++++++++++---------------------- configure | 14 +++++++------- 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/common.mk b/common.mk index 5513098a5..999df774b 100644 --- a/common.mk +++ b/common.mk @@ -118,7 +118,8 @@ get-noopt-cxxflags-for = $(strip $(CFLAGS_PRESET) \ get-refinit-cflags-for = $(strip $(call load-var-for,COPTFLAGS,$(1)) \ $(call get-noopt-cflags-for,$(1)) \ -DBLIS_CNAME=$(1) \ - $(BUILD_FLAGS) \ + $(BUILD_CPPFLAGS) \ + $(BUILD_SYMFLAGS) \ ) get-refkern-cflags-for = $(strip $(call load-var-for,CROPTFLAGS,$(1)) \ @@ -126,23 +127,27 @@ get-refkern-cflags-for = $(strip $(call load-var-for,CROPTFLAGS,$(1)) \ $(call get-noopt-cflags-for,$(1)) \ $(COMPSIMDFLAGS) \ -DBLIS_CNAME=$(1) \ - $(BUILD_FLAGS) \ + $(BUILD_CPPFLAGS) \ + $(BUILD_SYMFLAGS) \ ) get-config-cflags-for = $(strip $(call load-var-for,COPTFLAGS,$(1)) \ $(call get-noopt-cflags-for,$(1)) \ - $(BUILD_FLAGS) \ + $(BUILD_CPPFLAGS) \ + $(BUILD_SYMFLAGS) \ ) get-frame-cflags-for = $(strip $(call load-var-for,COPTFLAGS,$(1)) \ $(call get-noopt-cflags-for,$(1)) \ - $(BUILD_FLAGS) \ + $(BUILD_CPPFLAGS) \ + $(BUILD_SYMFLAGS) \ ) get-kernel-cflags-for = $(strip $(call load-var-for,CKOPTFLAGS,$(1)) \ $(call load-var-for,CKVECFLAGS,$(1)) \ $(call get-noopt-cflags-for,$(1)) \ - $(BUILD_FLAGS) \ + $(BUILD_CPPFLAGS) \ + $(BUILD_SYMFLAGS) \ ) # When compiling sandboxes, we use flags similar to those of general framework @@ -153,19 +158,24 @@ get-kernel-cflags-for = $(strip $(call load-var-for,CKOPTFLAGS,$(1)) \ get-sandbox-c99flags-for = $(strip $(call load-var-for,COPTFLAGS,$(1)) \ $(call get-noopt-cflags-for,$(1)) \ $(CSBOXINCFLAGS) \ - $(BUILD_FLAGS) \ + $(BUILD_CPPFLAGS) \ + $(BUILD_SYMFLAGS) \ ) get-sandbox-cxxflags-for = $(strip $(call load-var-for,COPTFLAGS,$(1)) \ $(call get-noopt-cxxflags-for,$(1)) \ $(CSBOXINCFLAGS) \ - $(BUILD_FLAGS) \ + $(BUILD_CPPFLAGS) \ + $(BUILD_SYMFLAGS) \ ) # Define a separate function that will return appropriate flags for use by # applications that want to use the same basic flags as those used when BLIS -# was compiled. (This is the same as get-frame-cflags-for(), except that it -# omits the BUILD_FLAGS, which are exclusively for use when BLIS is being -# compiled.) +# was compiled. (NOTE: This is the same as the $(get-frame-cflags-for ...) +# function, except that it omits two variables that contain flags exclusively +# for use when BLIS is being compiled/built: BUILD_CPPFLAGS, which contains a +# cpp macro that confirms that BLIS is being built; and BUILD_SYMFLAGS, which +# contains symbol export flags that are only needed when a shared library is +# being compiled/linked.) get-user-cflags-for = $(strip $(call load-var-for,COPTFLAGS,$(1)) \ $(call get-noopt-cflags-for,$(1)) \ ) @@ -627,22 +637,26 @@ $(foreach c, $(CONFIG_LIST_FAM), $(eval $(call append-var-for,CPICFLAGS,$(c)))) # --- Symbol exporting flags (shared libraries only) --- +# NOTE: These flags are only applied when building BLIS and not used by +# applications that import BLIS compilation flags via the +# $(get-user-cflags-for ...) function. + # Determine default export behavior / visibility of symbols for gcc. ifeq ($(CC_VENDOR),gcc) ifeq ($(IS_WIN),yes) ifeq ($(EXPORT_SHARED),all) -CMISCFLAGS := -Wl,--export-all-symbols, -Wl,--enable-auto-import +BUILD_SYMFLAGS := -Wl,--export-all-symbols, -Wl,--enable-auto-import else # ifeq ($(EXPORT_SHARED),public) -CMISCFLAGS := -Wl,--exclude-all-symbols +BUILD_SYMFLAGS := -Wl,--exclude-all-symbols endif else # ifeq ($(IS_WIN),no) ifeq ($(EXPORT_SHARED),all) # Export all symbols by default. -CMISCFLAGS := -fvisibility=default +BUILD_SYMFLAGS := -fvisibility=default else # ifeq ($(EXPORT_SHARED),public) # Hide all symbols by default and export only those that have been annotated # as needing to be exported. -CMISCFLAGS := -fvisibility=hidden +BUILD_SYMFLAGS := -fvisibility=hidden endif endif endif @@ -653,11 +667,11 @@ endif ifeq ($(CC_VENDOR),icc) ifeq ($(EXPORT_SHARED),all) # Export all symbols by default. -CMISCFLAGS := -fvisibility=default +BUILD_SYMFLAGS := -fvisibility=default else # ifeq ($(EXPORT_SHARED),public) # Hide all symbols by default and export only those that have been annotated # as needing to be exported. -CMISCFLAGS := -fvisibility=hidden +BUILD_SYMFLAGS := -fvisibility=hidden endif endif @@ -667,27 +681,25 @@ ifeq ($(IS_WIN),yes) ifeq ($(EXPORT_SHARED),all) # NOTE: clang on Windows does not appear to support exporting all symbols # by default, and therefore we ignore the value of EXPORT_SHARED. -CMISCFLAGS := +BUILD_SYMFLAGS := else # ifeq ($(EXPORT_SHARED),public) # NOTE: The default behavior of clang on Windows is to hide all symbols # and only export functions and other declarations that have beenannotated # as needing to be exported. -CMISCFLAGS := +BUILD_SYMFLAGS := endif else # ifeq ($(IS_WIN),no) ifeq ($(EXPORT_SHARED),all) # Export all symbols by default. -CMISCFLAGS := -fvisibility=default +BUILD_SYMFLAGS := -fvisibility=default else # ifeq ($(EXPORT_SHARED),public) # Hide all symbols by default and export only those that have been annotated # as needing to be exported. -CMISCFLAGS := -fvisibility=hidden +BUILD_SYMFLAGS := -fvisibility=hidden endif endif endif -$(foreach c, $(CONFIG_LIST_FAM), $(eval $(call append-var-for,CMISCFLAGS,$(c)))) - # --- Language flags --- # Enable C99. @@ -1026,7 +1038,7 @@ VERS_DEF := -DBLIS_VERSION_STRING=\"$(VERSION)\" # Define a C preprocessor flag that is *only* defined when BLIS is being # compiled. (In other words, an application that #includes blis.h will not # get this cpp macro.) -BUILD_FLAGS := -DBLIS_IS_BUILDING_LIBRARY +BUILD_CPPFLAGS := -DBLIS_IS_BUILDING_LIBRARY diff --git a/configure b/configure index 0ea625c90..1db3dfa0c 100755 --- a/configure +++ b/configure @@ -152,13 +152,13 @@ print_usage() echo " functions and variables that belong to public APIs are" echo " exported in shared libraries. However, the user may" echo " instead export all symbols in BLIS, even those that were" - echo " intended for internal use only. Note Note that the public" - echo " APIs encompass all functions that almost any user would" - echo " ever want to call, including the BLAS/CBLAS compatibility" - echo " APIs as well as the basic and expert interfaces to the" - echo " typed and object APIs that are unique to BLIS. Also note" - echo " that changing this option to 'all' will have no effect in" - echo " some environments, such as when compiling with clang on" + echo " intended for internal use only. Note that the public APIs" + echo " encompass all functions that almost any user would ever" + echo " want to call, including the BLAS/CBLAS compatibility APIs" + echo " as well as the basic and expert interfaces to the typed" + echo " and object APIs that are unique to BLIS. Also note that" + echo " changing this option to 'all' will have no effect in some" + echo " environments, such as when compiling with clang on" echo " Windows." echo " " echo " -t MODEL, --enable-threading[=MODEL], --disable-threading" From 5e03ca6fc70779c31e32c93f7a7f880747222590 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Fri, 31 May 2019 17:30:51 -0500 Subject: [PATCH 063/109] Increased MT sup threshold for double to 201. Details: - Fine-tuned the double-precision real MT threshold (which controls whether the sup implementation kicks for smaller m dimension values) from 180 to 201 for haswell and 180 to 256 for zen. - Updated octave scripts in test/sup/octave to include a seventh column to display performance for m = n = k. --- config/haswell/bli_cntx_init_haswell.c | 2 +- config/zen/bli_cntx_init_zen.c | 2 +- test/sup/octave/gen_opsupnames.m | 4 ++- test/sup/octave/plot_l3sup_perf.m | 39 +++++++++++++++----------- test/sup/octave/plot_panel_trxsh.m | 18 ++++++++---- 5 files changed, 40 insertions(+), 25 deletions(-) diff --git a/config/haswell/bli_cntx_init_haswell.c b/config/haswell/bli_cntx_init_haswell.c index cd646c737..ea839e4ee 100644 --- a/config/haswell/bli_cntx_init_haswell.c +++ b/config/haswell/bli_cntx_init_haswell.c @@ -154,7 +154,7 @@ void bli_cntx_init_haswell( cntx_t* cntx ) // Initialize sup thresholds with architecture-appropriate values. // s d c z - bli_blksz_init_easy( &thresh[ BLIS_MT ], -1, 180, -1, -1 ); + bli_blksz_init_easy( &thresh[ BLIS_MT ], -1, 201, -1, -1 ); bli_blksz_init_easy( &thresh[ BLIS_NT ], -1, 100, -1, -1 ); bli_blksz_init_easy( &thresh[ BLIS_KT ], -1, 120, -1, -1 ); diff --git a/config/zen/bli_cntx_init_zen.c b/config/zen/bli_cntx_init_zen.c index 0d76dff4d..8a46bede2 100644 --- a/config/zen/bli_cntx_init_zen.c +++ b/config/zen/bli_cntx_init_zen.c @@ -178,7 +178,7 @@ void bli_cntx_init_zen( cntx_t* cntx ) // Initialize sup thresholds with architecture-appropriate values. // s d c z - bli_blksz_init_easy( &thresh[ BLIS_MT ], -1, 180, -1, -1 ); + bli_blksz_init_easy( &thresh[ BLIS_MT ], -1, 256, -1, -1 ); bli_blksz_init_easy( &thresh[ BLIS_NT ], -1, 100, -1, -1 ); bli_blksz_init_easy( &thresh[ BLIS_KT ], -1, 120, -1, -1 ); diff --git a/test/sup/octave/gen_opsupnames.m b/test/sup/octave/gen_opsupnames.m index dd7c6ca04..a1a226a76 100644 --- a/test/sup/octave/gen_opsupnames.m +++ b/test/sup/octave/gen_opsupnames.m @@ -18,6 +18,7 @@ for io = 1:nops opsupnames( i+3, : ) = sprintf( '%s_%s_mpn%dk%d', op, stor, smalln, smallk ); opsupnames( i+4, : ) = sprintf( '%s_%s_m%dnpk%d', op, stor, smallm, smallk ); opsupnames( i+5, : ) = sprintf( '%s_%s_m%dn%dkp', op, stor, smallm, smalln ); + opsupnames( i+6, : ) = sprintf( '%s_%s_mpnpkp', op, stor ); opnames( i+0, : ) = sprintf( '%s', op ); opnames( i+1, : ) = sprintf( '%s', op ); @@ -25,8 +26,9 @@ for io = 1:nops opnames( i+3, : ) = sprintf( '%s', op ); opnames( i+4, : ) = sprintf( '%s', op ); opnames( i+5, : ) = sprintf( '%s', op ); + opnames( i+6, : ) = sprintf( '%s', op ); - i = i + 6; + i = i + 7; end r_val1 = opsupnames; diff --git a/test/sup/octave/plot_l3sup_perf.m b/test/sup/octave/plot_l3sup_perf.m index 8d692c64d..ad8155382 100644 --- a/test/sup/octave/plot_l3sup_perf.m +++ b/test/sup/octave/plot_l3sup_perf.m @@ -18,7 +18,8 @@ else show_plot = 1; end -legend_plot_id = 11; +%legend_plot_id = 11; +legend_plot_id = 1*cols + 1*5; if 1 ax1 = subplot( rows, cols, theid ); @@ -96,8 +97,8 @@ x_end = data_blissup( size( data_blissup, 1 ), psize_col ); x_axis( :, 1 ) = data_blissup( :, psize_col ); -data_peak( 1, 1:2 ) = [ 0 max_perf_core ]; -data_peak( 2, 1:2 ) = [ x_end max_perf_core ]; +%data_peak( 1, 1:2 ) = [ 0 max_perf_core ]; +%data_peak( 2, 1:2 ) = [ x_end max_perf_core ]; if show_plot == 1 blissup_ln = line( x_axis( :, 1 ), data_blissup( :, flopscol ) / nth, ... @@ -159,7 +160,7 @@ elseif 500 <= x_end && x_end < 1000 end if show_plot == 1 || theid == legend_plot_id -if rows == 4 && cols == 6 +if rows == 4 && cols == 7 if nth == 1 && theid == legend_plot_id leg = legend( ... [ ... @@ -180,7 +181,8 @@ if rows == 4 && cols == 6 set( leg,'FontSize',fontsize ); %-3 ); set( leg,'Units','inches' ); % xpos ypos - set( leg,'Position',[11.32 6.36 1.15 0.7 ] ); % (1,4tl) + %set( leg,'Position',[11.32 6.36 1.15 0.7 ] ); % (1,4tl) + set( leg,'Position',[11.92 6.54 1.15 0.7 ] ); % (1,4tl) elseif nth > 1 && theid == legend_plot_id end end @@ -204,18 +206,21 @@ if theid > (rows-1)*cols %tpos = get( xlab, 'Position' ) %tpos(2) = tpos(2) + 10; %set( xlab, 'Position', tpos ); -if theid == rows*cols - 5 -xlab = xlabel( ax1, 'm = 6; n = k' ); -elseif theid == rows*cols - 4 -xlab = xlabel( ax1, 'n = 8; m = k' ); -elseif theid == rows*cols - 3 -xlab = xlabel( ax1, 'k = 4; m = n' ); -elseif theid == rows*cols - 2 -xlab = xlabel( ax1, 'm; n = 8, k = 4' ); -elseif theid == rows*cols - 1 -xlab = xlabel( ax1, 'n; m = 6, k = 4' ); -elseif theid == rows*cols - 0 -xlab = xlabel( ax1, 'k; m = 6, n = 8' ); + if theid == rows*cols - 6 + xlab = xlabel( ax1, 'm = 6; n = k' ); + elseif theid == rows*cols - 5 + xlab = xlabel( ax1, 'n = 8; m = k' ); + elseif theid == rows*cols - 4 + xlab = xlabel( ax1, 'k = 4; m = n' ); + elseif theid == rows*cols - 3 + xlab = xlabel( ax1, 'm; n = 8, k = 4' ); + elseif theid == rows*cols - 2 + xlab = xlabel( ax1, 'n; m = 6, k = 4' ); + elseif theid == rows*cols - 1 + xlab = xlabel( ax1, 'k; m = 6, n = 8' ); + elseif theid == rows*cols - 0 + xlab = xlabel( ax1, 'm = n = k' ); + end end if mod(theid-1,cols) == 0 diff --git a/test/sup/octave/plot_panel_trxsh.m b/test/sup/octave/plot_panel_trxsh.m index 65f84b44a..7c8e4ba4b 100644 --- a/test/sup/octave/plot_panel_trxsh.m +++ b/test/sup/octave/plot_panel_trxsh.m @@ -45,15 +45,15 @@ n_opsupnames = size( opsupnames, 1 ); if 1 == 1 %fig = figure('Position', [100, 100, 2400, 1500]); - fig = figure('Position', [100, 100, 1600, 1000]); + fig = figure('Position', [100, 100, 1860, 1000]); orient( fig, 'portrait' ); set(gcf,'PaperUnits', 'inches'); if 0 == 1 % matlab - set(gcf,'PaperSize', [11 15.0]); - set(gcf,'PaperPosition', [0 0 11 15.0]); + set(gcf,'PaperSize', [11 17.5]); + set(gcf,'PaperPosition', [0 0 11 17.5]); set(gcf,'PaperPositionMode','manual'); else % octave 4.x - set(gcf,'PaperSize', [10 15.0]); + set(gcf,'PaperSize', [10 17.5]); set(gcf,'PaperPositionMode','auto'); end set(gcf,'PaperOrientation','landscape'); @@ -120,10 +120,18 @@ for opi = 1:n_opsupnames data_open, ... data_vend, vend_str, ... nth, ... - 4, 6, ... + 4, 7, ... cfreq, ... dflopspercycle, ... opi ); + + clear data_st_?gemm_* + clear data_blissup; + clear data_blislpab; + clear data_eigen; + clear data_open; + clear data_vend; + end end From 55e7b045c3b5673b59cfca7527e2db89a0db9813 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Mon, 3 Jun 2019 16:53:19 -0500 Subject: [PATCH 064/109] Added sup performance graphs/document to 'docs'. Details: - Added a new markdown document, docs/PerformanceSmall.md, which publishes new performance graphs for Kaby Lake and Epyc showcasing the new BLIS sup (small/skinny/unpacked) framework logic and kernels. For now, only single-threaded dgemm performance is shown. - Reorganized graphs in docs/graphs into docs/graphs/large, with new graphs being placed in docs/graphs/sup. - Updates to scripts in test/sup/octave, mostly to allow decent output in both GNU octave and Matlab. - Updated README.md to mention and refer to the new PerformanceSmall.md document. --- README.md | 16 ++ docs/Performance.md | 54 ++--- docs/PerformanceSmall.md | 219 ++++++++++++++++++ .../l3_perf_epyc_jc1ic8jr4_nt32.pdf | Bin .../l3_perf_epyc_jc1ic8jr4_nt32.png | Bin .../l3_perf_epyc_jc2ic8jr4_nt64.pdf | Bin .../l3_perf_epyc_jc2ic8jr4_nt64.png | Bin docs/graphs/{ => large}/l3_perf_epyc_nt1.pdf | Bin docs/graphs/{ => large}/l3_perf_epyc_nt1.png | Bin .../l3_perf_has_jc2ic3jr2_nt12.pdf | Bin .../l3_perf_has_jc2ic3jr2_nt12.png | Bin .../l3_perf_has_jc4ic3jr2_nt24.pdf | Bin .../l3_perf_has_jc4ic3jr2_nt24.png | Bin docs/graphs/{ => large}/l3_perf_has_nt1.pdf | Bin docs/graphs/{ => large}/l3_perf_has_nt1.png | Bin .../{ => large}/l3_perf_skx_jc2ic13_nt26.pdf | Bin .../{ => large}/l3_perf_skx_jc2ic13_nt26.png | Bin .../{ => large}/l3_perf_skx_jc4ic13_nt52.pdf | Bin .../{ => large}/l3_perf_skx_jc4ic13_nt52.png | Bin docs/graphs/{ => large}/l3_perf_skx_nt1.pdf | Bin docs/graphs/{ => large}/l3_perf_skx_nt1.png | Bin .../{ => large}/l3_perf_tx2_jc4ic7_nt28.pdf | Bin .../{ => large}/l3_perf_tx2_jc4ic7_nt28.png | Bin .../{ => large}/l3_perf_tx2_jc8ic7_nt56.pdf | Bin .../{ => large}/l3_perf_tx2_jc8ic7_nt56.png | Bin docs/graphs/{ => large}/l3_perf_tx2_nt1.pdf | Bin docs/graphs/{ => large}/l3_perf_tx2_nt1.png | Bin docs/graphs/sup/dgemm_ccc_epyc_nt1.pdf | Bin 0 -> 166829 bytes docs/graphs/sup/dgemm_ccc_epyc_nt1.png | Bin 0 -> 154203 bytes docs/graphs/sup/dgemm_ccc_kbl_nt1.pdf | Bin 0 -> 187521 bytes docs/graphs/sup/dgemm_ccc_kbl_nt1.png | Bin 0 -> 178844 bytes docs/graphs/sup/dgemm_rrr_epyc_nt1.pdf | Bin 0 -> 166784 bytes docs/graphs/sup/dgemm_rrr_epyc_nt1.png | Bin 0 -> 155098 bytes docs/graphs/sup/dgemm_rrr_kbl_nt1.pdf | Bin 0 -> 188174 bytes docs/graphs/sup/dgemm_rrr_kbl_nt1.png | Bin 0 -> 188468 bytes test/sup/octave/plot_l3sup_perf.m | 11 +- test/sup/octave/plot_panel_trxsh.m | 25 +- test/sup/octave/runme.m | 10 +- 38 files changed, 292 insertions(+), 43 deletions(-) create mode 100644 docs/PerformanceSmall.md rename docs/graphs/{ => large}/l3_perf_epyc_jc1ic8jr4_nt32.pdf (100%) rename docs/graphs/{ => large}/l3_perf_epyc_jc1ic8jr4_nt32.png (100%) rename docs/graphs/{ => large}/l3_perf_epyc_jc2ic8jr4_nt64.pdf (100%) rename docs/graphs/{ => large}/l3_perf_epyc_jc2ic8jr4_nt64.png (100%) rename docs/graphs/{ => large}/l3_perf_epyc_nt1.pdf (100%) rename docs/graphs/{ => large}/l3_perf_epyc_nt1.png (100%) rename docs/graphs/{ => large}/l3_perf_has_jc2ic3jr2_nt12.pdf (100%) rename docs/graphs/{ => large}/l3_perf_has_jc2ic3jr2_nt12.png (100%) rename docs/graphs/{ => large}/l3_perf_has_jc4ic3jr2_nt24.pdf (100%) rename docs/graphs/{ => large}/l3_perf_has_jc4ic3jr2_nt24.png (100%) rename docs/graphs/{ => large}/l3_perf_has_nt1.pdf (100%) rename docs/graphs/{ => large}/l3_perf_has_nt1.png (100%) rename docs/graphs/{ => large}/l3_perf_skx_jc2ic13_nt26.pdf (100%) rename docs/graphs/{ => large}/l3_perf_skx_jc2ic13_nt26.png (100%) rename docs/graphs/{ => large}/l3_perf_skx_jc4ic13_nt52.pdf (100%) rename docs/graphs/{ => large}/l3_perf_skx_jc4ic13_nt52.png (100%) rename docs/graphs/{ => large}/l3_perf_skx_nt1.pdf (100%) rename docs/graphs/{ => large}/l3_perf_skx_nt1.png (100%) rename docs/graphs/{ => large}/l3_perf_tx2_jc4ic7_nt28.pdf (100%) rename docs/graphs/{ => large}/l3_perf_tx2_jc4ic7_nt28.png (100%) rename docs/graphs/{ => large}/l3_perf_tx2_jc8ic7_nt56.pdf (100%) rename docs/graphs/{ => large}/l3_perf_tx2_jc8ic7_nt56.png (100%) rename docs/graphs/{ => large}/l3_perf_tx2_nt1.pdf (100%) rename docs/graphs/{ => large}/l3_perf_tx2_nt1.png (100%) create mode 100644 docs/graphs/sup/dgemm_ccc_epyc_nt1.pdf create mode 100644 docs/graphs/sup/dgemm_ccc_epyc_nt1.png create mode 100644 docs/graphs/sup/dgemm_ccc_kbl_nt1.pdf create mode 100644 docs/graphs/sup/dgemm_ccc_kbl_nt1.png create mode 100644 docs/graphs/sup/dgemm_rrr_epyc_nt1.pdf create mode 100644 docs/graphs/sup/dgemm_rrr_epyc_nt1.png create mode 100644 docs/graphs/sup/dgemm_rrr_kbl_nt1.pdf create mode 100644 docs/graphs/sup/dgemm_rrr_kbl_nt1.png diff --git a/README.md b/README.md index 7653f3d24..ffcf9dfcc 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,17 @@ and [other educational projects](http://www.ulaff.net/) (such as MOOCs). What's New ---------- + * **Small/skinny matrix support for dgemm now available!** Thanks to funding +from AMD, we have dramatically accelerated `gemm` for double-precision real +matrix problems where one or two dimensions is exceedingly small. A natural +byproduct of this optimization is that the traditional case of small _m = n = k_ +(i.e. square matrices) is also accelerated, even though it was not targeted +specifically. And though only `dgemm` was optimized for now, support for other +datatypes, other operations, and/or multithreading may be implemented in the +future. We've also added a new [PerformanceSmall](docs/PerformanceSmall.md) +document to showcase the improvement in performance when some matrix dimensions +are small. + * **Performance comparisons now available!** We recently measured the performance of various level-3 operations on a variety of hardware architectures, as implemented within BLIS and other BLAS libraries for all four of the standard @@ -329,6 +340,11 @@ measured performance of a representative set of level-3 operations on a variety of hardware architectures, as implemented within BLIS and other BLAS libraries for all four of the standard floating-point datatypes. + * **[PerformanceSmall](docs/PerformanceSmall.md).** This document reports +empirically measured performance of `gemm` on select hardware architectures +within BLIS and other BLAS libraries when performing matrix problems where one +or two dimensions is exceedingly small. + * **[Release Notes](docs/ReleaseNotes.md).** This document tracks a summary of changes included with each new version of BLIS, along with contributor credits for key features. diff --git a/docs/Performance.md b/docs/Performance.md index 65d89efd7..d18d1a192 100644 --- a/docs/Performance.md +++ b/docs/Performance.md @@ -21,11 +21,13 @@ # Introduction This document showcases performance results for a representative sample of -level-3 operations with BLIS and BLAS for several hardware architectures. +level-3 operations on large matrices with BLIS and BLAS for several hardware +architectures. # General information -Generally speaking, we publish three "panels" for each type of hardware, +Generally speaking, for level-3 operations on large matrices, we publish three +"panels" for each type of hardware, each of which reports one of: single-threaded performance, multithreaded performance on a single socket, or multithreaded performance on two sockets. Each panel will consist of a 4x5 grid of graphs, with each row representing @@ -155,18 +157,18 @@ size of interest so that we can better assist you. #### pdf -* [ThunderX2 single-threaded](graphs/l3_perf_tx2_nt1.pdf) -* [ThunderX2 multithreaded (28 cores)](graphs/l3_perf_tx2_jc4ic7_nt28.pdf) -* [ThunderX2 multithreaded (56 cores)](graphs/l3_perf_tx2_jc8ic7_nt56.pdf) +* [ThunderX2 single-threaded](graphs/large/l3_perf_tx2_nt1.pdf) +* [ThunderX2 multithreaded (28 cores)](graphs/large/l3_perf_tx2_jc4ic7_nt28.pdf) +* [ThunderX2 multithreaded (56 cores)](graphs/large/l3_perf_tx2_jc8ic7_nt56.pdf) #### png (inline) * **ThunderX2 single-threaded** -![single-threaded](graphs/l3_perf_tx2_nt1.png) +![single-threaded](graphs/large/l3_perf_tx2_nt1.png) * **ThunderX2 multithreaded (28 cores)** -![multithreaded (28 cores)](graphs/l3_perf_tx2_jc4ic7_nt28.png) +![multithreaded (28 cores)](graphs/large/l3_perf_tx2_jc4ic7_nt28.png) * **ThunderX2 multithreaded (56 cores)** -![multithreaded (56 cores)](graphs/l3_perf_tx2_jc8ic7_nt56.png) +![multithreaded (56 cores)](graphs/large/l3_perf_tx2_jc8ic7_nt56.png) --- @@ -227,18 +229,18 @@ size of interest so that we can better assist you. #### pdf -* [SkylakeX single-threaded](graphs/l3_perf_skx_nt1.pdf) -* [SkylakeX multithreaded (26 cores)](graphs/l3_perf_skx_jc2ic13_nt26.pdf) -* [SkylakeX multithreaded (52 cores)](graphs/l3_perf_skx_jc4ic13_nt52.pdf) +* [SkylakeX single-threaded](graphs/large/l3_perf_skx_nt1.pdf) +* [SkylakeX multithreaded (26 cores)](graphs/large/l3_perf_skx_jc2ic13_nt26.pdf) +* [SkylakeX multithreaded (52 cores)](graphs/large/l3_perf_skx_jc4ic13_nt52.pdf) #### png (inline) * **SkylakeX single-threaded** -![single-threaded](graphs/l3_perf_skx_nt1.png) +![single-threaded](graphs/large/l3_perf_skx_nt1.png) * **SkylakeX multithreaded (26 cores)** -![multithreaded (26 cores)](graphs/l3_perf_skx_jc2ic13_nt26.png) +![multithreaded (26 cores)](graphs/large/l3_perf_skx_jc2ic13_nt26.png) * **SkylakeX multithreaded (52 cores)** -![multithreaded (52 cores)](graphs/l3_perf_skx_jc4ic13_nt52.png) +![multithreaded (52 cores)](graphs/large/l3_perf_skx_jc4ic13_nt52.png) --- @@ -296,18 +298,18 @@ size of interest so that we can better assist you. #### pdf -* [Haswell single-threaded](graphs/l3_perf_has_nt1.pdf) -* [Haswell multithreaded (12 cores)](graphs/l3_perf_has_jc2ic3jr2_nt12.pdf) -* [Haswell multithreaded (24 cores)](graphs/l3_perf_has_jc4ic3jr2_nt24.pdf) +* [Haswell single-threaded](graphs/large/l3_perf_has_nt1.pdf) +* [Haswell multithreaded (12 cores)](graphs/large/l3_perf_has_jc2ic3jr2_nt12.pdf) +* [Haswell multithreaded (24 cores)](graphs/large/l3_perf_has_jc4ic3jr2_nt24.pdf) #### png (inline) * **Haswell single-threaded** -![single-threaded](graphs/l3_perf_has_nt1.png) +![single-threaded](graphs/large/l3_perf_has_nt1.png) * **Haswell multithreaded (12 cores)** -![multithreaded (12 cores)](graphs/l3_perf_has_jc2ic3jr2_nt12.png) +![multithreaded (12 cores)](graphs/large/l3_perf_has_jc2ic3jr2_nt12.png) * **Haswell multithreaded (24 cores)** -![multithreaded (24 cores)](graphs/l3_perf_has_jc4ic3jr2_nt24.png) +![multithreaded (24 cores)](graphs/large/l3_perf_has_jc4ic3jr2_nt24.png) --- @@ -369,18 +371,18 @@ size of interest so that we can better assist you. #### pdf -* [Epyc single-threaded](graphs/l3_perf_epyc_nt1.pdf) -* [Epyc multithreaded (32 cores)](graphs/l3_perf_epyc_jc1ic8jr4_nt32.pdf) -* [Epyc multithreaded (64 cores)](graphs/l3_perf_epyc_jc2ic8jr4_nt64.pdf) +* [Epyc single-threaded](graphs/large/l3_perf_epyc_nt1.pdf) +* [Epyc multithreaded (32 cores)](graphs/large/l3_perf_epyc_jc1ic8jr4_nt32.pdf) +* [Epyc multithreaded (64 cores)](graphs/large/l3_perf_epyc_jc2ic8jr4_nt64.pdf) #### png (inline) * **Epyc single-threaded** -![single-threaded](graphs/l3_perf_epyc_nt1.png) +![single-threaded](graphs/large/l3_perf_epyc_nt1.png) * **Epyc multithreaded (32 cores)** -![multithreaded (32 cores)](graphs/l3_perf_epyc_jc1ic8jr4_nt32.png) +![multithreaded (32 cores)](graphs/large/l3_perf_epyc_jc1ic8jr4_nt32.png) * **Epyc multithreaded (64 cores)** -![multithreaded (64 cores)](graphs/l3_perf_epyc_jc2ic8jr4_nt64.png) +![multithreaded (64 cores)](graphs/large/l3_perf_epyc_jc2ic8jr4_nt64.png) --- diff --git a/docs/PerformanceSmall.md b/docs/PerformanceSmall.md new file mode 100644 index 000000000..50d99e498 --- /dev/null +++ b/docs/PerformanceSmall.md @@ -0,0 +1,219 @@ +# Contents + +* **[Contents](Performance.md#contents)** +* **[Introduction](Performance.md#introduction)** +* **[General information](Performance.md#general-information)** +* **[Level-3 performance](Performance.md#level-3-performance)** + * **[Kaby Lake](Performance.md#kaby-lake)** + * **[Experiment details](Performance.md#kaby-lake-experiment-details)** + * **[Results](Performance.md#kaby-lake-results)** + * **[Epyc](Performance.md#epyc)** + * **[Experiment details](Performance.md#epyc-experiment-details)** + * **[Results](Performance.md#epyc-results)** +* **[Feedback](Performance.md#feedback)** + +# Introduction + +This document showcases performance results for the level-3 `gemm` operation +on small matrices with BLIS and BLAS for select hardware architectures. + +# General information + +Generally speaking, for level-3 operations on small matrices, we publish +two "panels" for each type of hardware, one that reflects performance on +row-stored matrices and another for column-stored matrices. +Each panel will consist of a 4x7 grid of graphs, with each row representing +a different transposition case (`nn`, `nt`, `tn`, `tt`) +complex) and each column representing a different shape scenario, usually +with one or two matrix dimensions bound to a fixed size for all problem +sizes tested. +Each of the 28 graphs within a panel will contain an x-axis that reports +problem size, with one, two, or all three matrix dimensions equal to the +problem size (e.g. _m_ = 6; _n_ = _k_, also encoded as `m6npkp`). +The y-axis will report in units GFLOPS (billions of floating-point operations +per second) on a single core. + +It's also worth pointing out that the top of each graph (e.g. the maximum +y-axis value depicted) _always_ corresponds to the theoretical peak performance +under the conditions associated with that graph. +Theoretical peak performance, in units of GFLOPS, is calculated as the +product of: +1. the maximum sustainable clock rate in GHz; and +2. the maximum number of floating-point operations (flops) that can be +executed per cycle. + +Note that the maximum sustainable clock rate may change depending on the +conditions. +For example, on some systems the maximum clock rate is higher when only one +core is active (e.g. single-threaded performance) versus when all cores are +active (e.g. multithreaded performance). +The maximum number of flops executable per cycle (per core) is generally +computed as the product of: +1. the maximum number of fused multiply-add (FMA) vector instructions that +can be issued per cycle (per core); +2. the maximum number of elements that can be stored within a single vector +register (for the datatype in question); and +3. 2.0, since an FMA instruction fuses two operations (a multiply and an add). + +The problem size range, represented on the x-axis, is usually sampled in +increments of 4 up to 800 for the cases where one or two dimensions is small +(and constant) +and up to 400 in the case where all dimensions (m, n, and k) are bound to the +problem size (i.e., square matrices). + +Note that the constant small matrix dimensions were chosen to be _very_ +small--in the neighborhood of 8--intentionally to showcase what happens when +at least one of the matrices is abnormally "skinny." Typically, organizations +and individuals only publish performance with square matrices, which can miss +the problem sizes of interest to many applications. Here, in addition to square +matrices (shown in the seventh column), we also show six other scenarios where +one or two `gemm` dimensions (of m, n, and k) is small. + +The legend in each graph contains two entries for BLIS, corresponding to the +two black lines, one solid and one dotted. The dotted line ("BLIS conv") +represents the conventional implementation that targets large matrices. This +was the only implementation available in BLIS prior to the addition to the +small/skinny matrix support. The solid line ("BLIS sup") makes use of the +new small/skinny matrix implementation for certain small problems. Whenever +these results differ by any significant amount (beyond noise), it denotes a +problem size for which BLIS employed the new small/skinny implementation. +Put another way, the delta between these two lines represents the performance +improvement between BLIS's previous status quo and the new regime. + +Finally, each point along each curve represents the best of three trials. + +# Interpretation + +In general, the the curves associated with higher-performing implementations +will appear higher in the graphs than lower-performing implementations. +Ideally, an implementation will climb in performance (as a function of problem +size) as quickly as possible and asymptotically approach some high fraction of +peak performance. + +When corresponding with us, via email or when opening an +[issue](https://github.com/flame/blis/issues) on github, we kindly ask that +you specify as closely as possible (though a range is fine) your problem +size of interest so that we can better assist you. + +# Level-3 performance + +## Kaby Lake + +### Kaby Lake experiment details + +* Location: undisclosed +* Processor model: Intel Core i5-7500 (Kaby Lake) +* Core topology: one socket, 4 cores total +* SMT status: unavailable +* Max clock rate: 3.8GHz (single-core) +* Max vector register length: 256 bits (AVX2) +* Max FMA vector IPC: 2 +* Peak performance: + * single-core: 57.6 GFLOPS (double-precision), 115.2 GFLOPS (single-precision) +* Operating system: Gentoo Linux (Linux kernel 5.0.7) +* Compiler: gcc 7.3.0 +* Results gathered: 31 May 2019 +* Implementations tested: + * BLIS 6bf449c (0.5.2-42) + * configured with `./configure --enable-cblas auto` + * sub-configuration exercised: `haswell` + * OpenBLAS 0.3.6 + * configured with `BINARY=64 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) + * Eigen 3.3.90 + * Obtained via the [Eigen git mirror](https://github.com/eigenteam/eigen-git-mirror) (30 May 2019) + * Prior to compilation, modified top-level `CMakeLists.txt` to ensure that `-march=native` was added to `CXX_FLAGS` variable (h/t Sameer Agarwal). + * configured and built BLAS library via `mkdir build; cd build; cmake ..; make blas` + * The `gemm` implementation was pulled in at compile-time via Eigen headers; other operations were linked to Eigen's BLAS library. + * Requested threading via `export OMP_NUM_THREADS=1` (single-threaded) + * MKL 2018 update 4 + * Requested threading via `export MKL_NUM_THREADS=1` (single-threaded) +* Affinity: + * N/A. +* Frequency throttling (via `cpupower`): + * Driver: intel_pstate + * Governor: performance + * Hardware limits: 800MHz - 3.8GHz + * Adjusted minimum: 3.7GHz +* Comments: + * + +### Kaby Lake results + +#### pdf + +* [Kaby Lake row-stored](graphs/sup/dgemm_rrr_kbl_nt1.pdf) +* [Kaby Lake column-stored](graphs/sup/dgemm_ccc_kbl_nt1.pdf) + +#### png (inline) + +* **Kaby Lake row-stored** +![row-stored](graphs/sup/dgemm_rrr_kbl_nt1.png) +* **Kaby Lake column-stored** +![column-stored](graphs/sup/dgemm_ccc_kbl_nt1.png) + +--- + +## Epyc + +### Epyc experiment details + +* Location: Oracle cloud +* Processor model: AMD Epyc 7551 (Zen1) +* Core topology: two sockets, 4 dies per socket, 2 core complexes (CCX) per die, 4 cores per CCX, 64 cores total +* SMT status: enabled, but not utilized +* Max clock rate: 3.0GHz (single-core), 2.55GHz (multicore) +* Max vector register length: 256 bits (AVX2) +* Max FMA vector IPC: 1 + * Alternatively, FMA vector IPC is 2 when vectors are limited to 128 bits each. +* Peak performance: + * single-core: 24 GFLOPS (double-precision), 48 GFLOPS (single-precision) +* Operating system: Ubuntu 18.04 (Linux kernel 4.15.0) +* Compiler: gcc 7.3.0 +* Results gathered: 31 May 2019 +* Implementations tested: + * BLIS 6bf449c (0.5.2-42) + * configured with `./configure --enable-cblas auto` + * sub-configuration exercised: `zen` + * OpenBLAS 0.3.6 + * configured with `BINARY=64 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) + * Eigen 3.3.90 + * Obtained via the [Eigen git mirror](https://github.com/eigenteam/eigen-git-mirror) (30 May 2019) + * Prior to compilation, modified top-level `CMakeLists.txt` to ensure that `-march=native` was added to `CXX_FLAGS` variable (h/t Sameer Agarwal). + * configured and built BLAS library via `mkdir build; cd build; cmake ..; make blas` + * The `gemm` implementation was pulled in at compile-time via Eigen headers; other operations were linked to Eigen's BLAS library. + * Requested threading via `export OMP_NUM_THREADS=1` (single-threaded) + * MKL 2019 update 4 + * Requested threading via `export MKL_NUM_THREADS=1` (single-threaded) +* Affinity: + * None. +d affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 63"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` environment variable was unset. +* Frequency throttling (via `cpupower`): + * Driver: acpi-cpufreq + * Governor: performance + * Hardware limits: 1.2GHz - 2.0GHz + * Adjusted minimum: 2.0GHz +* Comments: + * + +### Epyc results + +#### pdf + +* [Epyc row-stored](graphs/sup/dgemm_rrr_epyc_nt1.pdf) +* [Epyc column-stored](graphs/sup/dgemm_ccc_epyc_nt1.pdf) + +#### png (inline) + +* **Epyc row-stored** +![row-stored](graphs/sup/dgemm_rrr_epyc_nt1.png) +* **Epyc column-stored** +![column-stored](graphs/sup/dgemm_ccc_epyc_nt1.png) + +--- + +# Feedback + +Please let us know what you think of these performance results! Similarly, if you have any questions or concerns, or are interested in reproducing these performance experiments on your own hardware, we invite you to [open an issue](https://github.com/flame/blis/issues) and start a conversation with BLIS developers. + +Thanks for your interest in BLIS! + diff --git a/docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.pdf b/docs/graphs/large/l3_perf_epyc_jc1ic8jr4_nt32.pdf similarity index 100% rename from docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.pdf rename to docs/graphs/large/l3_perf_epyc_jc1ic8jr4_nt32.pdf diff --git a/docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.png b/docs/graphs/large/l3_perf_epyc_jc1ic8jr4_nt32.png similarity index 100% rename from docs/graphs/l3_perf_epyc_jc1ic8jr4_nt32.png rename to docs/graphs/large/l3_perf_epyc_jc1ic8jr4_nt32.png diff --git a/docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.pdf b/docs/graphs/large/l3_perf_epyc_jc2ic8jr4_nt64.pdf similarity index 100% rename from docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.pdf rename to docs/graphs/large/l3_perf_epyc_jc2ic8jr4_nt64.pdf diff --git a/docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.png b/docs/graphs/large/l3_perf_epyc_jc2ic8jr4_nt64.png similarity index 100% rename from docs/graphs/l3_perf_epyc_jc2ic8jr4_nt64.png rename to docs/graphs/large/l3_perf_epyc_jc2ic8jr4_nt64.png diff --git a/docs/graphs/l3_perf_epyc_nt1.pdf b/docs/graphs/large/l3_perf_epyc_nt1.pdf similarity index 100% rename from docs/graphs/l3_perf_epyc_nt1.pdf rename to docs/graphs/large/l3_perf_epyc_nt1.pdf diff --git a/docs/graphs/l3_perf_epyc_nt1.png b/docs/graphs/large/l3_perf_epyc_nt1.png similarity index 100% rename from docs/graphs/l3_perf_epyc_nt1.png rename to docs/graphs/large/l3_perf_epyc_nt1.png diff --git a/docs/graphs/l3_perf_has_jc2ic3jr2_nt12.pdf b/docs/graphs/large/l3_perf_has_jc2ic3jr2_nt12.pdf similarity index 100% rename from docs/graphs/l3_perf_has_jc2ic3jr2_nt12.pdf rename to docs/graphs/large/l3_perf_has_jc2ic3jr2_nt12.pdf diff --git a/docs/graphs/l3_perf_has_jc2ic3jr2_nt12.png b/docs/graphs/large/l3_perf_has_jc2ic3jr2_nt12.png similarity index 100% rename from docs/graphs/l3_perf_has_jc2ic3jr2_nt12.png rename to docs/graphs/large/l3_perf_has_jc2ic3jr2_nt12.png diff --git a/docs/graphs/l3_perf_has_jc4ic3jr2_nt24.pdf b/docs/graphs/large/l3_perf_has_jc4ic3jr2_nt24.pdf similarity index 100% rename from docs/graphs/l3_perf_has_jc4ic3jr2_nt24.pdf rename to docs/graphs/large/l3_perf_has_jc4ic3jr2_nt24.pdf diff --git a/docs/graphs/l3_perf_has_jc4ic3jr2_nt24.png b/docs/graphs/large/l3_perf_has_jc4ic3jr2_nt24.png similarity index 100% rename from docs/graphs/l3_perf_has_jc4ic3jr2_nt24.png rename to docs/graphs/large/l3_perf_has_jc4ic3jr2_nt24.png diff --git a/docs/graphs/l3_perf_has_nt1.pdf b/docs/graphs/large/l3_perf_has_nt1.pdf similarity index 100% rename from docs/graphs/l3_perf_has_nt1.pdf rename to docs/graphs/large/l3_perf_has_nt1.pdf diff --git a/docs/graphs/l3_perf_has_nt1.png b/docs/graphs/large/l3_perf_has_nt1.png similarity index 100% rename from docs/graphs/l3_perf_has_nt1.png rename to docs/graphs/large/l3_perf_has_nt1.png diff --git a/docs/graphs/l3_perf_skx_jc2ic13_nt26.pdf b/docs/graphs/large/l3_perf_skx_jc2ic13_nt26.pdf similarity index 100% rename from docs/graphs/l3_perf_skx_jc2ic13_nt26.pdf rename to docs/graphs/large/l3_perf_skx_jc2ic13_nt26.pdf diff --git a/docs/graphs/l3_perf_skx_jc2ic13_nt26.png b/docs/graphs/large/l3_perf_skx_jc2ic13_nt26.png similarity index 100% rename from docs/graphs/l3_perf_skx_jc2ic13_nt26.png rename to docs/graphs/large/l3_perf_skx_jc2ic13_nt26.png diff --git a/docs/graphs/l3_perf_skx_jc4ic13_nt52.pdf b/docs/graphs/large/l3_perf_skx_jc4ic13_nt52.pdf similarity index 100% rename from docs/graphs/l3_perf_skx_jc4ic13_nt52.pdf rename to docs/graphs/large/l3_perf_skx_jc4ic13_nt52.pdf diff --git a/docs/graphs/l3_perf_skx_jc4ic13_nt52.png b/docs/graphs/large/l3_perf_skx_jc4ic13_nt52.png similarity index 100% rename from docs/graphs/l3_perf_skx_jc4ic13_nt52.png rename to docs/graphs/large/l3_perf_skx_jc4ic13_nt52.png diff --git a/docs/graphs/l3_perf_skx_nt1.pdf b/docs/graphs/large/l3_perf_skx_nt1.pdf similarity index 100% rename from docs/graphs/l3_perf_skx_nt1.pdf rename to docs/graphs/large/l3_perf_skx_nt1.pdf diff --git a/docs/graphs/l3_perf_skx_nt1.png b/docs/graphs/large/l3_perf_skx_nt1.png similarity index 100% rename from docs/graphs/l3_perf_skx_nt1.png rename to docs/graphs/large/l3_perf_skx_nt1.png diff --git a/docs/graphs/l3_perf_tx2_jc4ic7_nt28.pdf b/docs/graphs/large/l3_perf_tx2_jc4ic7_nt28.pdf similarity index 100% rename from docs/graphs/l3_perf_tx2_jc4ic7_nt28.pdf rename to docs/graphs/large/l3_perf_tx2_jc4ic7_nt28.pdf diff --git a/docs/graphs/l3_perf_tx2_jc4ic7_nt28.png b/docs/graphs/large/l3_perf_tx2_jc4ic7_nt28.png similarity index 100% rename from docs/graphs/l3_perf_tx2_jc4ic7_nt28.png rename to docs/graphs/large/l3_perf_tx2_jc4ic7_nt28.png diff --git a/docs/graphs/l3_perf_tx2_jc8ic7_nt56.pdf b/docs/graphs/large/l3_perf_tx2_jc8ic7_nt56.pdf similarity index 100% rename from docs/graphs/l3_perf_tx2_jc8ic7_nt56.pdf rename to docs/graphs/large/l3_perf_tx2_jc8ic7_nt56.pdf diff --git a/docs/graphs/l3_perf_tx2_jc8ic7_nt56.png b/docs/graphs/large/l3_perf_tx2_jc8ic7_nt56.png similarity index 100% rename from docs/graphs/l3_perf_tx2_jc8ic7_nt56.png rename to docs/graphs/large/l3_perf_tx2_jc8ic7_nt56.png diff --git a/docs/graphs/l3_perf_tx2_nt1.pdf b/docs/graphs/large/l3_perf_tx2_nt1.pdf similarity index 100% rename from docs/graphs/l3_perf_tx2_nt1.pdf rename to docs/graphs/large/l3_perf_tx2_nt1.pdf diff --git a/docs/graphs/l3_perf_tx2_nt1.png b/docs/graphs/large/l3_perf_tx2_nt1.png similarity index 100% rename from docs/graphs/l3_perf_tx2_nt1.png rename to docs/graphs/large/l3_perf_tx2_nt1.png diff --git a/docs/graphs/sup/dgemm_ccc_epyc_nt1.pdf b/docs/graphs/sup/dgemm_ccc_epyc_nt1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..694abad6c9179129737f04511f9abb68b839a3f5 GIT binary patch literal 166829 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

    ROJ(&zzlxdr$?7hA1 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 literal 0 HcmV?d00001 diff --git a/docs/graphs/sup/dgemm_ccc_epyc_nt1.png b/docs/graphs/sup/dgemm_ccc_epyc_nt1.png new file mode 100644 index 0000000000000000000000000000000000000000..304ab1fd583ac57572d9da25221f515800d01ebe GIT binary patch literal 154203 zcmY&<1zc2J_w~??NH<8QfOL1afOK~^(j|>_cL@kecb70CEh^n0UD8tD;d$eG|G@kh z?p$u1v(MgZt-Wrvnu;t2DlsYq0>O}%lX?w-z^_9fu#3ouV2c7BMG*vo!e}cgsb*_# z4uN>jrzKgdrAFdMOk4#lpgCrg4t&qiWJHtG^-VL9Mo3@QO{X%G{DLfn``k8$QXB?O zrc~~8l-Uag1{3iHIV?3Z_Lz@_ixh2~u19%yU(fcl-Y)ZRkCH-S2q6$A#KdH#)!Vk& z21$v5*%OSU&QXu*garCKYKkEU48*$->5*K)Ly7JgOrw?qZ=f*2 zL}{rnA!6fjkQ54RV#MG@Scui4u?P%g^ka`d3?%aoB8mjTMG`9>4A@X#xemI5g?x0m z2@RXgG-wXe`%FonOffKi?p|lz!OvG4aBW+MGR(0;dRO!9F_@B08v`HL`@%4l-Plcq*2s6aj|}UlhiA zm^W3R90PX9mlqXs_{j+eG75=q9}sQD^b!ja(Y|tT^1OO4Btw_Pzp1*(8B@fS8qHKl z{1N7xc-u!L;$SDKjY)K_XRK0JC0aJrzQl(THAQcy)HS2JWe7NWKN6y844t!M{tosr zH`QSof;O8E>d^j*YBKMdgeW8LQn*5Q5Hko5M3s**g z7B7)WzUsrshv(nXZL?Tp-q7nOcMVT%vTnX|!)eR#PY_ZzDvQ$KV*Hf~QJ}IUD2@59 z(k7l&*je(rf=Lstl8rm0Jw;DiSh7nx??Yg*{G^8sW}}N9zN6?N%^}kv$01ps%1q(H z)W8nx-#}lqdx3lY`x0bHDdR87G zEaU1#6dC1QOU*u9$~P&-$+60h$S=r4

    nt$|WcSrJIiM4bu#hrtYTu(8Z?wOu9%L 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 literal 0 HcmV?d00001 diff --git a/docs/graphs/sup/dgemm_ccc_kbl_nt1.pdf b/docs/graphs/sup/dgemm_ccc_kbl_nt1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9b41d6c73034764be83c4a2625d4b2a5c2f2bae8 GIT binary patch literal 187521 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%0A;_CokLd( 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�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¬ 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 literal 0 HcmV?d00001 diff --git a/docs/graphs/sup/dgemm_ccc_kbl_nt1.png b/docs/graphs/sup/dgemm_ccc_kbl_nt1.png new file mode 100644 index 0000000000000000000000000000000000000000..2fd772cc11354904635390435fe9bb32f53526be GIT binary patch literal 178844 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

    nk1;(<(rxVR#>kUkZks4p2Jd7P@< zOQ?UgRO3?r{7il@Gqmq!+mkjgewkc^-6lmUlr~0(doxk0Sr=q4FJr^r@@;=bx?588ipQ`#N za$&!~0%)DpT<*k+P-!i%AL7hxuLvVCy(N%=;PZ)QRf5IM95jsZB7cJWi5!lJ9tVzz zYri`u&)tXy6T8jLOJ z)~yknbI;1mlqy{RI-u4V*R4BTy?apc>!c{+FK67YUnjC6M&`y}RnG?_E1ayBGHVxq zVZ&Ou6MQs#q0WVjBoPYvv~g@az?W4?@6-O1d{ZwkGX04TyA?1LKscj)0w5x1Ev@gw zI5{DpuT)y}Zf7a3(T^n&Yl0Oj&f>$|zpXxP_*dzwEM-rpS_r=vpzT-$t;}WM`M!hqZ?pT~^hqhY+TaWyQH0bR3`e^LW{yvEy#gMcI18C3Oy||osZJ`94Yazyr++|iqldqX_Kr6_;&r1_-hJCwOSPx@?&m% zK}>hOwm}8mf>$dJ@fvgByt}vUL44JrUx2?BKvCA_|(?O#5Iy)f3gfkNY(4w zY`FhGjE+3APip7>Z#?!ofvAj*^L6i}lfS>%?Ny86dsW3Il7+k5ux}+Ks7PQfF*-#^ z(f(lpT)M}y9RuW-S64Rm1$=?MG10Mo*+C19u448rH;7SD-U#LLCe<8lPz4`;0(Szw zg-ljGE!h3#?dZ|;N~5=+Z5D#%#r7;}l3vc~c6M`=8G%Lplc+}<6?$y1Cfpt`rG#=Ndd)Xo8AevwG=L2HTWABf+>13n z1a(kQ(7hwqSI78e;rYR{uX$2kY63LRJ1Qd!Cl9_E-k?_7)?u_tzn}~;e%i0Lb6&r0 z7=b+``ZO}Plfe{clm%u2H@uoA)N0W9(?z86iiY0#>!bBKle8}I+NH4Ab{VnDwenR^ zpDq8+$y3im5}%R%apU)oSFom(ND2=(w~%`~WFW%+;K2i+h$6RPo?`KwSm;3j1-4@6 zbX8OBkn1P}5&(H4^-^tPD-B7#E)_OP6k7{S0Y2B%@cFg?JT+J?rn7dS<%Uw+#D%|C zR%`*TjvM>?4sP5d3kzaP9=!3Xkq=R;}(?w?wYzno? zOr+178yb9OPwvj)V#}dqpU!&~b&@|k#wRHs3k5h_MPpZ2A}}fJc5q-A=m@9q0B%Py z*1d<>UTaV8)%b>mkLBLRh-s5O2$*qbp%A;88V1abo07lm9!&blTAw(i?VN*-kyY;@ zqYeCi6G`GhiO*(_dAhsP#FQ8&{ieTBT%GQAG()d`*iMxvt%Rq4r?}hFY-v{q&Gr1Z z$tGYQFC77~nio}byC(42nDDs<4+N+yLPq|OJE=Y)GxS^v+1T7{)3(e+gWS8oP5f#8 zJa&UuL#I#>6YBuvQYfkNL@r-`K5=h!SP%teRM&xX&$GR`Ng$9<33WwLDID|ceQWUR zlY0$zado!4@o<*Ny=h!~2)2z*3$w(m8K7|cd`oZT9EByK;Di>U1B1nP+FX92g(NYE z%6d#3ZaYugfdL{<-vL)a!}E3$ojFvC2O|k1zvt)YCkeya+FrW4xm8`xK7mxYmb0e)rEy&cG{|?YGTLhSs^P7lNiS^1f4hEvRcQ)D3xHvmJA1c~MqUY;s?eBi zil~jHki8n&WQmHwZNTwTX-2fK$+i-HzZdA*vkXb2?PQnEFB1gAcLHVKAUm{+Yk=C(@gu*rebby z{q6(%H_g&+aAf?wHOrp5v8POv4u`%!twFr1e7{?JoKi%=cjRNEDP-T}kXHDx8qo(| zzpbq>5-Rca1rLHvNu?<&I^%ScB0m9}%5MY{fvMzUwxm}6LiSSkb94XG^O|eis}UA=u+-kRfBx8Ae%v#7CT46b z;s?b<@|3&Xv^2Lh$7tS#6?o9*s;ej;EP@Tw6<+imW%UOy<3 z4Z#=ptMl3$Y-QE_v9vc0BVQN(e8-kY3jjj)CLoOR%{od>zB~gT$+*)U&dGfnE7%8~gGOj z^?`Hmz#S?_ppDqH@2 z`GEycgRr;-3!vlwTmUcc7eGE(05ma=G(M%h@yrUlm-z-NCGfNtHb8cwr0G-#vK%1+ zBEz63yvReSzM&!RHT@5;jX}sjzE?+GO*RzWD@*fYPwD$$*)dp|eP{){`9a~q0FF%y ze}`Qo`0i1<1q+A=er)%#0nCc2lmD#O!FlbqmM#3mv|2yieL`+JWb-;}4M=B2S6!k` z--oFCz1Y;$WL}bhfR6X>ru6;&LwZN|+-Jjie^3kyPp|sepbOb2FYs`CO~%xTWnotK zpN-?X58ODd|KeDnm~mQfpRico<|HfqsaArH?evdu_|N~3qFR`jJ@~iCNg8U+%hvf1 z5%Pb=PdP%P{|c{ZkpI`WxhEz3+qX$!XqC8EF#g|PJV=k1|NRxDFw7tL{~4m?148)! z?R$VnLH_^qqgdI{aKya^XKTd+AXAsdU^|mF?gtdKt<#D{Gphr4YoVBd5SVq+6o|b7 zAOy&;yUVq_pF*B-x>6|=vmoOLv#a&uaj_Mi*&#L3wP%R0GN+`Pzy%Zblf!*>Tms03 z7u!n=4y1AyEN?5c^2h^30!Y1Lyo*4SX82eKDr+ZQFzHk{=blEP7y^pckN^OQnz0n( zC?MSR53V5kzUU&B&ZT6c(+e*`VQDISgdw*eK-L=ER^MiBG zcm3b=``w>X@y*1{bklKQAk#m>1mh39$mAGIvl$;@dS;<7oc#m^0G4Bb1F5zPo9SP| z0VomQT+nyxfO=+;)W?n2&wKWCv$tez_+DLJ0#ocscYsQ4@@?cDb2cd12FQT(W~yp| z_}<_vP~!q6DS%Y@+x5$F;Sa@6Ct08lyXgw@hTo0AQ@+q$?_Eu%1spM@`9cVW6zN-% zXisVj2ck9>9j+qNT`@CVp#{#j`KRiGq3{_P(NxT4qx`58;H0N!zDV<)KD4D$m0Ozy z*+P416YK6b8~O)1%4vP_k;kefIu^A#0?S?kpLT3K1iDJPWO|0j`y-wduO@l=j771FAcBcS@rXO}lJ83{! zTwL5i6ZrPc))ylqN;}?L^`c4rs{kApWv6SGo+`yS456}722V;s2Tbeg-4%O^Z;qXMj zSX=+VD)_S0Dt$x^h$QZ1mVYxVv|+4!5Kor#U9GQVuB!e~b-P>jpNx&oVC%Ga9l#~V z3Z!<`W;hW@ltsdyNXwc|+)GdTR)hsgRfFh=}inXq#EI!F`?GoU3n*4EtbAZx_IaWsI=B;8+&^(>?ltc zs1(POynOX2D5*S#YICQ-#Z0qO-s)Wywif1;Cs6eO(_xsSWOY&~7xC^53S)zBIe*L1tP@bmn2QNo?tOxu)G zu}nLb`ws^&5iV;3n1rW8Ajp|M!kxeZ(Qoq5^XB=CqaBD?3zI3+Qdb$p?l=eM{20i> zM?Ij``gD#;vFjfXs_8mZYm#d>-4-+RDje{3M3HF8hVd$LnQA}^!d&|R>fdf>fn^IXE;BVc zI+d=2tn99mvCTNuQD{~ee|Fgg4^R5l))1(t4SlJ3QYywlgat(Ou?s$%*e~==Y+nFG-3dMI65- zCin_%zA|AwijbPr)|`Gd%JW5qIRzG>#-cvTo2dXc3OFG?QKM&2dG+s$zc0x z0TvRem7>rd4;k!KalDyfhHCxz0_Oj$IAFKdWv4djHpQ;C`hPwI%!P9J)H06(MOc(! zMy_B~emAzjq+eLH1UHsd&{9u%o0q)`5o(^DP8%XYBc~$^QrHg-6l|0JJ(A z4+rN1Akk|bjao>)33+R%h*|}$@82G~)hVI*i=X_-lP9c1SjNc1-VUR^uDKM+({_wg zhpsy|TocghnL{aFVcu~A_t`h#_im_79#~-hLL7FAtZFQ`6#>tV~ZEh2sI1{k?xp_7IgxH&Y#oWICJ;uT!~8B3sL)O3XfoX^l(!BNNxra zMc4}fIh=6oh!l#RwqR&?pCwH*H?##IIXd`id=1>y`6n6D(Px}|+N#CeCX_;bbvTSd-hgOY)#FS}jG zy||&fD-N{UR%)ZYm{(PWKmLLEfb2K4o6qOit)L_+rAy)3bKk2*fmqpBe6D2!$t9cYg}Ry1=#H@pQ_vrk>gEWy7SR z5P+Y=E`H66X=fBYjKG|*drPy|hECNv17OV>d?+5XPUsq?26Ml7cR=L`C_34D36-?m zdV_q#bgW1nd=3ha*`L1YI59)feh8HMNIJ?QVdQ3HeWs8>5Cvr-Bc$RK5po)jtsK zIr=*V6hQDC6lgT%x2yBQ?T>e3MM;Jg?q#O- zG8vgd9wy**>~@mu2a_o?&nbmPv&cam4Gi@xGs09_`G@btQFX1wuK3@>xEO@D4B}0p z^;|X4@^lE0iL0u|wEHQ5(pvAfeP92<`f<}~9rkzTa9_(ewrvdFhuK2FPz4Sj^nekEM7sk(!;1Ml+ zgO@dN|9P8-nI1Iu^;c+9CnB@4HqTbS&!YTXs%T4wx?Hs{lbgBSeWtrhIvVm{Zz@!K zRBxupdpUd7Kk=3!Z#5#=6Aw~^WyU3;7Js&S)!G_>zx4={rv0Zk{j^usWENl@h);C+ zOhnf(W8@;PL_y~KWU`{58f*Q(Qi;*_vyk;vIYD;epK_{=Ns?lto3)@JX!3+QnB&oe zl>nw$GoDo%{vhPD625_Ba4sa2z~L<~YtptLCl@l#!w5GVIvuzhVyUo%H3lX8R48V$ z01lvd?hNwU)O zmPy1BW>dEG^+*yJbnicmoSge~grim+O2`pQ?}%Y^KHo@jHHdta8B`*(zF2P}q+>Z& zWcjYyUGGKW{}#T0=6tG@#I?uV>&7GKVOsDr`6yKGN5wqsSlbEGLZd_ynjDO%BEy6R zHc||P6dlL8XJgdLgU7+ZZ@N@gOXIhJJfTTC+n%znn|`H3E+Q7)=Rb477cXhjr)(31 z9)@=o9Tr8iMB?}Q8hW2p~rd>{tY$4{NlQETZR9d+@_C- z5j7>2koF|qe^lxUF^?=pPds~=FfBs~3=JZ;k%y`R+?x+#R1+S>zCaH!xKA8K|21Rs8{YJly=WxA z8Q;y!b3&j`KKnyPG{VX4=Pe*m{AFD%aY}Kd0A%X7=p45f;ZZh~C2DcR7EU5)5?>_` zq4^)DAmX{_UIDKYT<}S*mCSVswKy9;uWiHsGdWfzScq*&{`OI22~8ipyg)KsTS~F_ zina)AWjGXnR^zct^UVvXbLNoDK4aLsL+FF{?Lm%`b(%*DY8XEUL-64l%UlnYQ@-h3 z8*besaqPv4inV+le**C{j({eaybSk%n)n}|O=Mj}|HtM^(T+LUtL<64lCW}Ve)xwR z<%?$cDkg<7=~ozWhnmRY*?}D%(9xl>y7zahps-L8VQ*gNp4E`qYTL_6RRye3;p0Nz9wO`0X3;ZKni&z6nUfxOwyq2i)gJ?69(8b)p>!~ z5O7=8X3Kk*2E*Ti+^eNJ>T`e3&><8&IIo9?I3~ZO|LjHi`9bR@$B$luEXUwAl)F*% z>$f^=XGm-t4!FPyrp z+;W748QyX>9|!GIYxXSNvs6m9Yj?g^aQd$+&>Jo1KZ7!Z3hGlPEZ{iHm7o8Xb+Juy zISDm1kcLU+;+M>`dW^RU0%%cLKDa&W2(rK8d$Rw$A{TQeng1w<90t+LrK^>d#y?jg zCWcu9;RF$4%UTX4rttV9Ve0s{Q5o|0W&4d(bg`TK>iv*!>f$JY)B)CMpaw5C3w>&E z*>8xP&MWVUyF)Nx2J-s-tI-95f4f3ZNH=UEMFgMk-(YeMMJBPzDhJ1NI!lCOSJNd~ z+5yHw?Zw0$&@2!O2M51Z+5=4wry;TIpt8|!PEO8%n&y*YaIbHg&r9=NK)DbT)7tcaqTb9;fJZQP@EF; z98TU)_E-^y#;M3edU7~HmS-I~mkiD#9ekjz$z}q1-MV$04YV|yjz#Ny1%`kLUeBu3 zqXyf@J*)T-t!6)gm}VC=zly_(fc2%gJ$tRB`yvUT>qz7TkUh>u$3rAUCK|=oG5`%A zU~bHnDus_qN=h1#%ar3|!IBtQH2#!`eO90%{%FDMe=Aoob)|3%kOeKi3^@Gr`FLn1 zhF#Yn1c2jG9JTQw^LJP`g|upHZ73?ttqtfSO&b{x(9sI2(qrF#Th#~Ek>LTX6A>|TlT$V=j*{$OJz+6Rkw-Rl4>aW;1EHDO;e%-VZ-J$Kv^6!nNyL;v2kd5e1F|_yy2ce z0PjRnaHB)wih2(@KL`{1z}H9sGiFajE<_BBr(IQj#uW%OWeu&p@~8s%OWvB z%`^5Lpjb8}uugvO75eO^SJCnC@`QgqlCCrlX$W_AOf*?Xb=MnaJMf!06KH1KuiO6_DHXXjiS?0^GF9Y#Qo z+E6aAuJURpVCzg257cG`HMvZMu)t&xSCh~t+?Kp3iKHXCmo_4A#ii8Ah<1S~n91LqMG*CKpr%NaP4x{RB$yd`7 zn~P$dFo@_Mt|LG8t9jUOc+K@0mWx0B@M#js>2j*ES!MUiy-{c?x zm$gO2%?w6tbM02qHwYyA@^^tmafmDaFYVLa84^KNbFS18=1A8pD$qDTUq{1sT+UBM zZvEnq4sJPr(Z|0b0_k`GA?nMouAjK%3^DK{R8}(0v^8qUA;6CMybDLlE6a>U z#xpDr5PEqaW;{m%WPVVFhC4|hNdm%3=ct@?d#C)wX_}E&`1^mDuKNjx>R#`EFcCK5EDZ8clxc&e{gJw z*relV&1|VB-1qO-{S0M)h>)gWHm7vF$qvvJL%FWTKkk!63J4w9L@!N36_f8cYS`~~ zINkp{$ChIt++qYp;|pI=SAK8AAsq2_-xq!O<{(V#hqdYefvhqS5f&Pt?M8dTh34<6 zs2!XK_cw;$p081>*;p&hAxpRMz4Txsb0lMD7Hp8d#206O$1rLCS03E2G9=HI)BZFO_#1l0%1>&q*?#Yva> z@DzrxD0u!m#`osE$Lqszs@ntffow6VP~*kp)M3Pa^R)+QgE@{N>65mS_5Jq1W0J)- zL(y=L+YX_e3}@0pv5nSYp8!H~<*Lfxriv&=DD|)?_l9sODfyto#8M+$GgSYxKcmmt zgL5zbZjpGZsK1wc5T;q&9@cV1tjCUN-U)88WED-|9Ge8m=L0Ad>PU_b$i*3&K3OEN zCwV6;?n=4^{U3;ySI#$8yuG~vNj(S5o=WdtD81{)$yXF;#G2GSZ)2KqF0=rf#8`&= z37@pOx-t`ygt^A!HJlD6LOn3h>t2MSBA<^@`_M$6IJ*>AinuiXN)&7Xg^=_=?ODYbwZ;baD1DSpE@c-XG7X`wqv`9Fv0Gp0)A81JWw;qk|* zC?@tY3IM=Hm)uVS6b}DJuNGa!N%M;jD6aZC07|Qo5jAfZJMj!dx{M72Ew*i93Hsn2 z*sK)B8$LO^mxdFuCw$-0nTmZNvp-HA2&Z~JYNg}9+?YF`>bN6un1HPQ77Xdb+rZ;P#r<1G-xEf|E>Q4!@3uV-A`8*1 z@S+!~@Cl;T7q0=gnLx5btPNYSIUs8OLc!>HfFz`ZWJuVNMnXTz!2R`0j8IWp0)-?S zSBj`#)}H-IOO1eDs!u3zeGHg+4nLe%WyRIY&PQl`Vf+Q``M;CiR?$c+f0WH{7vP>M zG$t)05B+l0>1WE;sU8|!`727^K$pm{*!t{~aT|Ji->$tx>NjzQI8!BsVzeQ)Vs z-Cbs-Nj(6?T#s2He@PSlM=8rWesoqMtKgGrgdV3OSC0!?pSFhJ@JgMbxvPHZ(=1sR z9zZVp@w&bw4Yq`GcZI}uwZg>)cz5p~1-tAnWH|D;L-$v;8crE}7g4aP?Q{dp9-R-E z4!_jSqpl+IoLOqB-5?R&Yre8?^qbl~JfEP1>&pm71B8tyAZ05eT4e6X3WfzJ=x*p7 zp(OVuMR1L}M#{eZQ}BLxrgegSaai>BdMX=1W^Qdz3QqOA2tQ! z+xjToLXD{bzV_-1R#}zj;h;qzb!%&@I0&S<@k;7dI}wkjSfPf0=6-odEs#tJiR{uo zulj^e4^>nfFlFgw1d57(@1MeFAf6)p18L)XgxKR=cXndRkG2csftxG+qa00&=;Hz* zzHck29cr*oM%q}b>_XQC9kmw^`NH}EO5Z)R5}P05yJaXE0;Fg2Z1hP$G5{ckbWDAC z9d)PKx2|OKm*X|dCN4qrN;HiN!cu{{`J-xI>|}c_4!pj?l6;0#zHI zkB|Zt&G4tOh2%bsH=ia|-}n}GVXP{EPMQe_;m!MDm_n=j45@MoOlAsd$`-Jf7eucc z>1o)(@vT^77MCE*&-!xdXTX8;Tlz=fU;t^EI1tVh&3@L(I!NFNNfPF-n#A0ZW(mzW03H5J+F3#avD-M^eCBW}^K zy-6_e%27Xyx1l8)K)wXbTlyT%Bj%%ka3@G^N`1{~Kq6ZcQg<^X;vvNKWU)E%EMnh) zWF|gbh=(V*YnZaTr>E=ys+{lEc7%4m*oKEp`EhTvEz|#&TO9Z$V`tFq{AFV%Jz0ns zV21K&*~}`9C3_3?NSY(LgRkXcaFR=Y)FOj!_`^|nyfg}nz}qZw(EoXfAFQs}s~RN> zNp_b~1GD*Y-9RK(?1?5qWtjCM4M2<$>b^O4OomimR&gYcy@>ke-N0zlBnDuNe#s@M zc(3v@rCp&QFry~+h@y{I+91<;9%)J%3NF$(@h4C*TlBi-bXWxFQ1dzdYk|`7Jj<z`O;8vkS7C~+F(&oAsVXI@8zaJK>z83N zqd3{kbBuFWw$+`E5vGiYR}jQpxcRofe9}>hm+ZeGNrn6!BDUd84x$OvvJvlKR7+G5 zN#Lj)e*)$|3DYThgUCjN#5+=jHBo}>Ese6ga>9>~;sCfMty$>3s}SMl<|Za<8>C&~En$|z1Nl)SZ4E7B*sq5k;G7zW#|Tdso&(pSp9%hf?aeZP zEDOfwqrJGVf5K?MX-5e4KMz3|FHQUqii89ZM1d`HR! zMulbW`?eq;=t(%RVjZ&X)^>keRIyqA{gvFQ3PUg2s5}rzsow+f55 z$d;FeU^#xr5~c`0dFNC_{a#7hEhjq3rmIC(UDfgl_p9){m~To+O7Z(s5iju0`I2M*0 zMWz0KX!^>qD7&`Zp(G@RM!H+NOIo^92|++oI))bMMjC0P1{_KO5djJ55|ETeTDn2@ zn&IlUFdDNH(XN8NjGN)^M z%#MTx>*Wv+T}&Lgj|St0(`Pz1cwrFN;FI^ygWz}yTE%l3TXWhcHSVi(E2RcU`=NIsmz z+4}Q@l(06(m@3HC02;yh=N)_I;6~^72$y-=eO1;}keXj6^8W#YufPYWF`+1trwmX( z#uQm7x|NbXkS)Qu13HGK!ssi+MoYwnhVL--&@Q_&YdU<}PM$$zIay8xa8^s=P4xU- zA@ZTAC1yZmBKm6G)0YP<>6j!0}7jk4DH#)qMkg+825K%B0)uromTg%yUY*sUqbE5NaIEd{r&?D)4%((#4m<`G)9_Y6;1NT& z;c-a+MmY58G3M~-{f2PO_w0w{t9>a?Ad&ccdTT4ivaQ#ZcnlfeOfhJEBZy4SKInYG zfm_t$uYdw@FK#s39#%UlK}Ml;3T+Zf-is-(!=UyOwLKAdbGKKKSujMN+~wHg163*< z?l&5+II&aqD*<4#Kr7HuU!8&D4zX6E*onCP4Umh&3l0JyfC2JkDu6Fz;w_97#%G-G zG7pYTV?vK{1v6`iBc^n9R!+19tP};ZBs;FOiz?ci%Jm)-{~&U1ld-fD$4HvgOOUuRtVBwwR0{8$P{Oat z-)gd^P~Ivo7`7{Nc*ef2ixBhJW@Dc=lgI<*=8!pK``4tUJ_~(qSyq&C4ZS3|6Iejy zn~j>p1t&&FF`MrBS*qSuch}da())obM^k7%QMIO)TXv-NRJ)#$CzNFQXz4TarSgaA->1bYU$v^vBlfa#*%Jq0>fL?+1F* zPrg>NkCJD~fAKBgruS#r&x)8dkKX*Asule#=yQjW> z`_!JDF@Hu3rKljo`Uujq&p*uiXcSd4F@>&S z)jh^i6sruu4yQ0W<#?x{(fjs~RH(`Z*`8$lLkmCZsu4*7?fc(LN|LFYTcy^IU=`^( zaMa~noO3QopSfsq7<;MEQ?u<)L+Hsrs>={Xm55y=#@6WU<_1Lyd@~+DhhX)7Udus&w`$#9X){jn2{3!e5Tp3LT#*<(xyuS32?e`CuaVG-9w>gR2sco6A^ zIGCpY;`&E- z3+Lc}VXq05pat$q>%1ht#is7=ukZK6B`ODzkji*J_EnaDM;_~^YdFc3tZY17=OBW#7RedCT&u^(M2v1szMKV7Y@5#T*wL{=0r4ejM1%|BU>)jfp2xqePqL4 zc|q!UYIpTrCI9a1bnZ-5aRna{n)&BCE^STg~E9O97mwc!}b6I7xVp9~ONA!9)^2Kdb+`(J1P|Ck(=-z|vvcM};7vWG~g@ z0PiRucIO+r;MG8Z3}8yY=z@wYpiN|jpso5UXe;(NyoM*!&;^~2<9(Hx+VlH&dzIR_ zq7+BA@*!0VKEM1v`_ca?vWR84-*cY*jmre2BgosTgZ8E&J6(_xG(5spN?{Si)NXV( z%_omQsdRS?zN5=#Qm_OfEvK}{S5koN2fA<%%7CAjDV4mxfB&WtmqFN?>AE9cp1z=Q7XNy?QsRA{|**SJxpd<7yLKVM}TjQRema1EjwPIBS5_t)-=9x#jOCwtr;~ zAo;rfDYd?Fjzh1_*L|JCxB1uJMEZmws?h+Y=-WI&K8ZU3vxQ)dwg6@eNc`CHNs47V zX#rS0F!`6|pvflDKiy-z99T_*9Hq(BV$GaoVAdj)LoE>j)5w8NW#$IyESab;fySA0kMOV~eG_ zhlYwD`B0;y07U_JRRWqU(Hv{K<2SMUT9*J1hMy!EYMmxT#m%VMpHUd#hK_M~429|c z&_AudV(u}>$>~3Sn<#+d(I`j<0q=Lz%E}7gkRvd-Sq+_BpY4K`z|6=$s2;pm(~oPw zj#`9L-ytOEVC>rKKLga%feHnTEr=2wc8x*X)?Y5FIwj?WlTY;SOLqM)KM4VX=OPH4 zu*RGa=AI_M8hGupjK2S$=Q3Nie6|h@hFw$7x^Zb6M)4`Fdei7ePGV_Y*X2Y;NJL5g z{MhBVqVW? zk0i%|+(6gR4&a1f-LcA71FH~vdkZ3}hx$JTY45D>zcFs&0q|q=x&z6H&V*OxQeo& zHX4>Lck(YP&VSR;h@t@(U&4#9hfo6PGhNz9uJ&oZ-IMO&0{aM`Dn}+`?p(EAd(+h# zJkM&;T%WVC${!kJt9CnIhK1G#)WZLx*Xrbvth^kwP=_5En9@dPH2*H5dE3D3|D*|J zk-*L8LIobUKjJo}UaYwKT`4F#`onP>L17ipQTOP7w zJN?LoZJnqi)tgj{H3A~~{AN;%2nF!B&y7A*W9Dzxy$^`eQH@4}a{ZLO_co70?2@`B z0!F`{8+ctzGNyJWK#Vq+uCj%J*JZF?hn>U^cSIQ<=crdihw~A;^NJH~+ti2?>%JDFN$Cao7**dkbKQsq$RWVE z_XZpvko2{c!xE?~ZftQetTd{0V`P_kZrHP{C!tcFBalbLDq4x2M)M%5%m;tg*{5?U z9uBwqDUWNw+%k;Zud~%{E_fbwWVWGCdq?OLIRJ;NW6$#Xb`&N9ydSnK5dF}BR#6TUL)YT# zQFs$~GtmxnHUR`|y5Wdjlcv`+kU}8s1sB-Wd;UicU%aZT!ij@FRNh)39k;C2UGPc{ zdnxppc6oG>hD$OVwVd`dq~%>4YVhI@fYR-~8~#TP*a-pPHsa9?aiW8WRoc)Igq9-2 zTocVq^e30uG^<>6mE=on6BO zIVbzIb_8_AhA7%t+>qX*o3M28HFvk>`!5qqN}lfKO^&Y|=R+NSEKStYN0ZpmABPRv zMKo(Hx@~{DB!q;nMNen2$XrO(@je^jOD#=3KINZyE4AA9FkPDAe^(~wt;;;%i2>;U z!d0wn8^|~u$v)eZs+L0bNu%Pf70G~5=tOF!@v%`B0?#SBb%hh7Fa3{a1OILuhfq$f zwElam7yW`N$Wtdsl)fkBI_8736kCN3Efpi z*=X+^RvejT#AST(xXM;Zt=^`I3bQ5IjYA@2x)F|krO#4qceN>$Q zo)r%SEaPZUYwEj?rVXs;Z8Y$TL^kWoHfSp@+SWGVAOK^s9CDyPJ_uujWnuzS^@E1*R0!DL9nFxh`YM-kmEH%eTyO%nKoR?TVNeLNZcyIKTG)<}eO zi5(bEp$_IYvhSJuw7wfUBsxpA0=U2m4CD!e3g*UY zZ$H&XKXmm-H!Ncq!VCrcYD5I(TsA!xT+3egF;Tn9kbtJubdPnUFjIL!Ne~BLt|%vq6_%}WOVNUVdKTloJ$f?GBhP7zi&c~;l&gHl`Y5uJR|@(+ zZJmP@cpG3a*j~>k44LI&s@^a09u6Eh)#Oi-(!%;u5%~niw$jWPg+evK+eNr;_{|Rl zErSICE$y{->_4yx<^BRo*QU?QG;%rpplNuhY-<>0S9V9`aEo(ZzpW(vEa7 zzTpR%y!s@BKXIZrN>@IkNAzTr{XCI!9e85DRC91b24S z_m*U-$`u8IV6>0x+aTvYRhx&@HLzoWeEPd}Gve^@D2O6aWogN6Unv5*_~RzqE8}(| zCA^0c$p4NKeOuAMOxFe6?PI_Q0BSnTKqLaPg&p8W&wu|iS@nF>8`G)#hMk-WicQY^ zVv3mam|ov$vIrjQ^G=kS5WV>0w%1i#|KMvIMQ8nMaouMOB6Gev?!O(=$jVii84sie zSCeNemo<-zQy@EHt6vXx_23rElw|<7a6~N0XPs7yE{w zo97BBNt~TL=9Fh>iqPnwI5BT`L}l7cWVg7Mw+QUV!x}`mOPo{QXxsr~dTfYsBGa!T zZ}k&g&?}65c!xBAAr)-nW<1k7Wqi1hDs5)BtfEyE zz2llN`GeYlw3LHOjz=Yu_7Ql?F$U{_p&Lw9&wnq*_A%ru@{kj-Jsuu6A_%mkZdwfb zXM>J#Hlki?WRgo%Y%OA7nEWu261U5g`^*xBfvAq5!?6i6@_jcHql0)C6>a} zHP(3=RYA1DDs9i9S~3v={!+vQ(Xjna*6q5luB|9ELi=4HMa1}1xGWGQOL zH%NxDsqTb)3NV6#feSeN=qIpN7=6sZO~?~{HeeP`NpK6 z9q8zgAKi|1t%V0*${EBQf-ar<+B8wSi02%OCJ?e;jd^hRFkvcbbgh9_>5Sf=Y2Zs( zk4Dq6%gtv~j4>)jqfaXJr(MdjZf!&u<2wv*FuHyL-g@k>K6gQ;_~N5+=(%dBtmfy> zM)W6k=;|e@=n2H&_3Bn-rB@KaNA3yRl0%z4pUW<0t7npSmD7FS*ysJs4VUX!BK_}y zz@0Ef=G6+BhQFMPWh)322s9se=oMn(#lhmAJ!$UDK z>q(&_OT!YKmvfjf-gi%#BbxqrtbU#NbYAcJf7B}q`0PMEw^pSgFvOfCxETyQo^B}n zgtDfV^Sy8CLabiNx!ke=6SJNH&>Id1UD3@n}nHjbiG5^vjzJDh5OJ%ZdpS^Y5n_)6U z(ZVgwGtnb&_&mV2(wJ?w24PHa^SQb*pmh9<2hW!^K&4dCLV{>2OxCX#Wi?A$Iz==O z5jXuM*QB6zpFKVUenzQGvZHae`+qNCnT1J452z$)oDm7#2n}u-Yn4}16q|1ZSjtI+ zm`|dExK$!D2L$B&V1P^^t1LJ;^8w%lL_R$KJtBaDX8%!?nqCpJHzvZb=`nL!vJR^P zstzj?+*OO!E3LIkAp6qC%ko3X_op1mD z$SaLRdMvPnd3-i%dYQ%QG4E2K%*ymfJLV$#iw2fvZtN#!?)2s8zZrT))kRHBP1ZbO zniI>P`54|G-0+uXwYonu{2*tR>ZeuXqde{8v}rS}4dlIj15>GH@Q|6sEEbu;%`@Nz}haM@V|e$BPnR9c9>}`6sjzjppu3{*V&uQMW{#-g;2-A z*r>=?0^{F4>Ok-NZ$|37#dFHAnlxFJ?(4i9(nk6662ns!8HorhA*!Xde~lu42qwJg zgk!f%GZS?x|JYTq)eyWkM>z_N|L^_LpqchIjea?o(JszJaE2%ARw4hvGzK$ro&$!+ zYMIcL2LdhkhN&t?&g5jieEl^8)|j*S_VN{!gcUygsiD9O{WP*WhU1REL!TxyYUJ7IT zBof17>tFl~)@d`FAX$A5jXtmlwwJZYHOOL4jcJu4jv2rRsCc4Y%D4h3V$0cS@>zUr zPq47CAHb%*{gvV!n8k{A=?iEmFPCoZMouhcx|eN90ConUag8iksC%??kctgmG6+Po zOX(nxt$vm}j9%79pno>|QBNQQnHz-M$bV*k&f$^*{Zsi5{W#s$r^Ke=N6-D%(l3|IAw&B_r z}-^K>uxU$a4m2ki~Miee@tBL@GL7Xo{c8;t%rAl=y)}&SbUSVW}K9eYeVKie} z;gh^XPPdT<>`$p#JO~&@Md(6N=o9=*9f(Nc-`%sDvf(jIqR47Jn|{jtC;bn)aH)$O zHi9bV)f#__W~R&r{}eCRbLTI(Hk?klex>A~RY#88vmJyI*IvA6WvjrQ zu>Sky6?VqRd$hu9G%Mu(L8&njZbiY(J*o$eodEJ$hAoDN>_Z|HJpPte^5^@BPvL|x zFZW-4`Jph~gZ{2n)hoy+uz(~-4OPC{^PFC4)(mT9C;~bRFEY9`i#SYVB9wg#J<;pA z+pRDwYmp9~(=4UUcK~fZL{qdR%tVag$=Q@7Kel13Pc~KtH;R{tvE7(EHA&uC*7)?V zd^q+~`)kah_&H;~68>YlFxRu=(Q;cfUn^RVY1@fc-?BTNqfmE9|luhktL#IDJenK)K#ZD-r^PGo|lTuFg zh=ZFu1$yubUj7=24mu_pX|R(aiZV@7;V&Lw9dW-sifHaHo`QwYjEs$)UhrFFRU?eg z<#XUO!&uy0oFDi_jQ)KwE6R4u-GM1-3J%?2))%t7Yl}Sc*GW;)*kh@5&}De9 zR!PC$UW6N=I+!195XksGAr^#$rGi_sEd*fc@SL+d1N^r21*D~G|k#e2@RvlC9me`0oeTi5HJhQIU}d_2az@ap)n9Poc1;$+ic0^6cTsAbfrFi zmNLHz6MT}CLA^*5iy`yF+x#^SPB=6(dCtJ8qBfzzn#<5@pW~l4nI&%o)@KaH?=|Iq zt%^q{Hb>qp48OSk20VyHos!zHdzg+l1vL~f7JErLxba|TXk}>$g`kY20pg(nPT@|8VoGvLb$MzTJ;iPP8y@igVLKJ#}QbU(j1|LE( zSR(1AARN@0=+c&s1lYdyvRm{#sPAf@`q@h!y>5Kyp2&2~xRi9wWJtO?sz~cW3>*C8 zv1U1MrWJ0hWgzVj*HM~$cJbs9!G`~N9Ephf&4R4WGlH&5BoF5F8xS{yOtL(bMg2ELo4wACP@6BwJ zkAL(J&FC0vUoY_xTvpK3i^)bXT|;BcJ>G{}YY#gvW~01l#dmW>b$fAZ&PtRzNNzuW2I6Y+H-rj~ z?kroqrD46#rrggc7~oq?$0x?-AK%?2CO)Hw zrnY4plrFe4Y7?_ZOZCkqSof&fLsu#J$I+-I$kEb!VxQ64mHjZ)DtK-@nMa-aq2y=iquip4G*-qm7)CI8sp!Cn>Bp39>4xTFgW0 z>juT{=3HI<_(laHg2DvB#ZZYSd!j8nV-zYdYV6NmT+%%1-ukU!wi)xttIlPGfdYNC z1_W@zQ(jpX(O+{9jF#`No)p}!TS;9mhy4gP1t+$l>RxYio}V3FxT1^A)CWNa+n~Ep zg&Bb0jtfkJ`q>YW6dEKPA}YpCgo^;dk%7Ftu7JKSEN6RT<8ghHGu)St|B*GdQi`Me zke}WHmfUtjceizHBpRfaoV5r033JLanb|SG6;hrVAialU6G?is>EUYC}KFk+&7q-zP4%7d9w!ZM%x}2DLvbr_V4&~A3%d0@y8{X)HTtzdg zPG!_>;Ry5Hp8Iu{at54i9v)9ulv)jm7j%r;dPHxYD&7Bq_3Tqu4omk0y^ogCMZsN% zr0@AsF1j0xb-E9D_7ECm8=dC}##an{hNITNhV{j+)`Rq2v5>>IM(COt@MtYI>(Je(?L-rMJ`s_Im*YK6+~k+oX4&TIv47Oc4y)XI zV4I`cN}t}z+|_3TaiPxSpy>bwokfP1xX?v)_Tbk{#~tbl(X`4(-ejcG*;#W%H7%=t zUGgNabEBYDIFLV(U*(W}GT9~CkALr=?khRJE}$31r|K4xJ^OoGL2g9QKQ(=3Hkn_P+r{iKqtaZ#XNA)Qx4IJfBZ|LV^TOvg|YlH6q%^km>w=5TCGVKJ8G9~NF1v;!Xbxg^DhTMPf}B;3Hr4hAEE9) z1(J(xrXkOYB#4;i9N5RI-i_pfI=xp+L_D_7Pu1siF|K5C)C|ux&RhHR6R+3omO`i& zfsE|G7+ai=l*X5Bql<1DzwIMwctfn3vl`|&wS(~qSvFv_dfd)K{+-r%;IPxdl4(YS z<3=U=x?31n*g-BPP?Nh4?j-`#<=yoeBy@4n0`$4X8!Q5{8-&J`G&T8l1{uC3_8M_s z#|bkq)SZqvPaS>eQZ_zyonzIjZW&X-{@sRu*e@_29vcT>rRw_XKJN&rp$s0G z`&=-eX1XiVsmC31uN|7BXy%2+$jgH!Z&MG&F6QVs3>|8xCsH5|EsLFg`}?hRz`*@e zS{v5zY11RgdCzXzjt9Y>=dMr^)T7_{D1BrYG7zz^&3EKz<0^Q~0apo^C+5D`1fpN; zvCO&ZL*@};9cte$I4Ejn6Jrf!4IpTtix`(2^o5?k2+1#qqB+UYQlfGb`)(2tblVHe zV&DjTLa+D)Y?#?gIJ4u|y6}KYZ^?ztQ6;s^T^|bncoP!j`b?~Bnb8aT_FiP_!Mwd0h+*_h23JW~C zZu4D=njmDU+i$qx;}e16yk>{+#ay>l*w#56lhxwZV{_B9x#G zm-p>&joW;&$u8PaXFja%7Kqc7f4fVdxb4vN`;%tq_xFiw@7tRvp%=kNafg9)TI`Dt z{C0kw`Q2tUt<`~GBEKaWYEfSvGCG;~8n#rEo9Pg|(G#G*JM4?ZGr26GTRB4T3`zeL zqkdM0nj~}0J~Co+I4JDoc2Zf+nA#6m+uXy`3BR2i%dS@5g(L)mr?u9TEk8$+Ts>9Q z-O5A!MH}jkr?&i)L$obdKi!#v+vktm-+bk7v*L)3`modE^z_RS``)v+eUeWjR7tu$ z#f((1WJeluSc8>^KRgQJ?-HT}snTU*d+rz@vT@cax{_+RcJ1q5f1LIpI~KlAN<&I& zf8-L^Ixg;J6du`~3((2hJEy~oeZ0Mq^eD}NAEuZ2Q)6S}SqUzq>JE_n+jRj*CIU;4 zz0btD3P`&L#ul)R50n4~_V-V8Is0s#6AjN`bD8#D4*B;=G}M#QV@P?9pVX-X#h~Ch z<{M}dH5<<3$E2-cvg~xT?`8(o{&J>Sx)hi5#4@T){8~NM+f8`c`jT_tbiqmG1=F;u z_?vXZ!=q#~ZsErW=p7$h>pEl^m8O{kZy~;qW}>l2{IwQD=M4&;Nhu1Z6vUK)#2gCg zMen#jd(%Ey!u*fKUsYZu4t{6Uu;zc-BY>bv;I(lz96eb!uljz6UC2$ANyr(ByZlvV zgm1K?kNjz&>>EH6NfCgZS(lW$c^N`BY#I)FP(j<--gTF#`|{!R;m3%8+V$}>ziDkv zDREz(AB(4~d$a9yy~BBNB_S75|8}pL+%kf(wfy%7-RBM|B9CFY^?~Bo{$$qw-j=_d z6>WPnl;^v;d$B}dXb2|e>-HP-1=!z$!(qdN-Wi8-Fpr)}f^P1f3r*ssr7y(5HiQfb zu{e24xBM6AUp)5efDWyt7!pUWAgXDSfw8d|0MaFZ)aJk0bHp{|;r^ul%E)_6bQHwh zUtf1nN4N}{;I=|s$d+1yQGDn`LmS9wyX(ICtV}#4C(|_P{n>S~rg1UR?0falRd>Q)J$^#c+{z*a$^%5By?u`?~ib+1Ngks%O35r{J{Eac_< z`=noRUwu2s7to&foA(P5LaONV ze&4*a6hU48EtVtU%DT5?1d8g)J9SA^_k(7&P3GPO^E?!uiHKU&=@=Y&8-b20v=^zo z;kqpji@yPp6M=GAL0~W5q16Mo>r`Uy)0K~8Un}j+r57|)e_}1NX{3>(JyMG$oa`xCT zAeU9r1;MgHnq4#p{^Y@5LY^d=ej%EsgE601Kf`#{Ph>_S6-f|u>>+iuO69gSwwoOB z=6l0PCx~yvU#t0ta{)$tW6)=?C4C>bZbm+!+Qlc6tzfCkuvhk=g@@a`mwF=n;D+(Y zll849DaNLnHrFyr1l8NaQxu}yzJF{&l@*%>lIF`1r*^cB$%p*+E^I52_qW;$K8N&+S!z~S z#~YU$`%P=J7!Qlrr}~+f#SZm2at|{LI{J5HUN{tBZ5pMqUzlA|ar{eZs7k27sX}EK z;pnvBH~6%TUd*=&X}-DTDFDJex$4&j{f(%BD-SIz0$x`sCnR{AyWXHWX`BEZpdzRS@i|!h z4K&A|W+>ggy;JlIiP^Nr4UUveSHY)4mXSX^Vu?0(%Dg5>Dk~j2>y~(xE%Y*|9*q(! zI9cL|70Cxi5^g|QL(oRiK+r_gL!L{o-h?ESv;;0PI{&s}L5$xGGbgY=K)swK`M0?Q zB#UZkX@|hIq zb`4t?d~W})Kmx+h3K$O#HT2U4rlw+-xFV8JDJ~)bASxC!nh|dRY+7(Q@i`s{%h62} zDB{V}TB||)BXs*KXmYz{jk_QMCB_3{I4cT>B5mp`5LDik_?C`D8uM&p(7g&NiUM&r zxu5L`LA9~p1Xy)TPGGl>PTXih+kXQs+0vDkRc3%$VGV_XnZ$A1uLl;TC{MVzpW{Tw zs*}(=i{o`b7H>;M*De>1nu89{Rp$*pBGu{J>Xrljhr2-IUU%^3SQM5|PW%msB|)>T zi{z=Su$tLI&=LX06?hWwA)Vedy`b~9s8*S_JpA_Aq6G(NJ3vH*9E*U6+V(ZD#_@(+ z4T^1~{V=d`{V|i3{Tmsh4~}I(6!B6aNx#M&Lq|pi5e_U(cgp1o+5Bow)#>sa_LXjW zP(_6dc{yBT4x%^bOysR4-Z$69lMKvlEJV8SKl!x$%zU^j4_}z->R|7u?$qMpMxT$h zZGRD!9{h0a{s|8Q(YL91;6NeYOHGMNvVjiCd)Yhnqqk`ZwDi)1c*0D`!!>W(MlJFM zvw-N@3KV-F8}&4IM==%I+JM#st{sbsiOJcz7K{9(YD7v*?sruv!vrO-N-m8Gy z@yu5@`y8Yk0t)ndBrTZ90)KmRrL-1avSNj^sf$p-Y^DTcU%9(nkF7PS)s3bjY7R1! zvh2aU*fA_~2f zAe0J|Yn~4{swtrCQMmu-Y68w<_)CF;BUz%_&Yv7fGkyo~>X5ABc2!8s7+E%w5&lyWJZ@dk&&mqg_{rtOepO566 z5*g*==Xd8HSZace3z_VSD!P&}(Ck@WX4=v$JsiRl?Ks%)nSJ}#nq>l=*8L3+o-7Z} znFwx29f~E23?feL5e(~Qm=VXpg+5^~F1ybOSC-v6AU_HyfP39L4`t#DSh&06SMV-{9C=9=kcX` zd*?IuvVLKQVRIf%zOhT-+PXEH{&@T1<69NhofcbP!y0JwJ zI0P674}eFmsH%#K%vV!KW%qw_^nv_}UpP_vg7CQ+YrKTUHDfOto(y(jMt<*Vj|CEO&VQC}wOrZVuI^e!dga1f036O{J?kAUaVt?Jy`!jJ-tRS8y75!K)mhYHSMjC zq-AIbxW~63B?G66#2PO1A%<0rcc~S8TRc<1Dzge0-Ngd>3xMRVd{cJADkjX>ebzJ0Tz65q)WHy$C zpV{^Bn5+7P5D=mgN9k7@T+V+8f^`1qr%F?FggGlRp1FqH%txAcfkzB$+IxP0DlyC$ zFkDV;yox;YiBc2n8iH8euMF%H*@gMx;>y4C;5fR&e8o>5ec?*ePwMALtTbO^2>3K5 z$fe2VWeMh(2uyP8k^Y0->a-^sgINU8)NUZ&7DRbBufJ1A>Yczig-ceDQv+bRg;q|a z_M-0P)7jAe6DgoNT&o}C=>mFkqzeN;8BR6deDo65sZlfp?LW{2_)xP zCHnp4y$UEMhT*6AZ)k+O%v)W#fcT2M@Vb&D%(bH~B_hQc09O$t*x3lI9K`%Olj0>w z>0f)7mlOE;_9=gFoJFE4x_Ve`7^?A{U1MC-%_}at_ z=UCu7mmI}xVI?$dWsiIUk8iugHYx_%C-U?2%cQZaCEkj^1b>cE1%84i65xxHAlWDz z1ZGd*s(3!}PmS15Zw9SPBW>aHxW-f>aSS?+(02~fR*eRK6PvuEH=LS3*30XT(c{s1 zD6`)6DWOtGuau(j;c;&4+Y(^Zp;gwaQ94zPD4eqrlL^ZVxB={_VDTFlZSL zKE%)hgozxAc7Z-Y)XuPwpBk}!1zctH|`t+G< z%zm0+_=Dd<9h#+jb?a?tXlPb`w0P?dZkpO%90!Eh0U$u$=UZ6>0n=kb5|b0Po2MYub%uUue)` zeE8Vs$S#5OZ3D@C&M9_^rGDi9{^&q$HA zsiP?wAg{qoAZ&nUF_)H-ROI$i%`_#2{d|nRG7}8gAif{p&zc%%(y@fr=XUvDW<5YehiB8t1Z-I} zJ`3~+W3%3;26sO>|GKvF*8~pP$xRn}9_$N7UY%Sh+;zEx{u@6gsLUNFp?4LTUDH5N zJT+wA=HQ7)$S~S3!p;Q?zKsB|uGO(MPaPL)_@Ej&ydXvYo#QC8Li?u z872jlQ=cH7nwyk&#FG-7PD1>L~|z+=|oW$N%zp`ae(z z>PXmq3HZQ>B~-S|6JJSw<8yCl#>6hq;osc;!sbt73(9A=eil)~dp`DmD6({lhN8r> zsG)caIpY$nq2fKGW>~s-(9ZXGMzm$Xp=@JI4lU%9noS72)9>XS-4AIOPMZcuWd#*L}vb7N}AN2=j6f` zHqu}@5DaVm)u*2zWx-z5xc7)*b1Q|*gOFJS+zFGcr-Fs$OQ}5|3a2mrKaV!)Ja?2; z$}8+VI=nqlDgh45&AIZ{zz-xQURJ;MiB23d;mIS0&s|d=Y6pxU>;&w7&fn>d=3%Y` z#1(!Pclxw*=R=$`o~I|HFBe;vK5KgTXimUmS4i;1LFzA<=s=ryN(v#jY5j+yDOO2f z6af1bz~z5#du?T_6VNCtD+Bgao)F|RF#-?#QWrR8J&k@2roxq4T!sI1yx_M%b{aC- zrl>$lQniDHcLBUPGU!8g4Yuc&*M%QVHAF&q1cP>1x@`s40)RsbBeIgsRU%OI@a^#p zqc|>KyvBS$H%iAq`USWrF@0|}m6+jp^vAL#i8CmCMz;$Q(Cw}7IlSK*p|CL+G%Vd{ zK^rB-zKrCeQni;}PJ6no}sy5?WW2IpZ5*#q@;HH!=2zV&TfYT=1vt!{8 zZqp$2z|^SPTyXrkqG8;2C--vQ8f{m|leEx9yzv6r4^l%mJ5)c%yTd9VI^V{g_HTL^ zN)5Ct^`EGY3FDURH3@tDcqC?ZSP)9TB+}{pd8y5;$k3v^y`2u&nVh{F<{#h~s*`h# z{XCE<7>!z~@K`EjABb0(Gt1-)E-NXFGO90^Cbccr@g=I&t2D?C(nuQ!%l_R*kWwY5 zL}Ww#)NgmwI3nHMNOyOq zbazOjASE3V(o#}V-}ry;dt=>o*S8jn1DrF=Z)W!F*)y}B=jqmK&N@j{crGXrcDH(> zmCCLli7e%L#_o@uh%Z%;fF7CtKyjZ-5%Cu^Q_->nFyTS24V;qGp%WYxcPHdmVIKD{eMGadwFfyV9 zxoyB*1KHL7EEz|4f}MATQftoW=bvU>$dxIa(AQkH<6E!q)`#INvv52KJ#yyH4-yoP zRl4QQAq9{A{mNyzR5h#Vh#tn1jdzIZG3L5;AC<)Mmu&xX(L_Znk{F^x5yc0~_Fb^U zkPKc?rHtpQ$8alpZWKc$ybE&I*Sac!=GRQeiNNFzr z{xM@#kc8q3c3oEzHVK|@@eIn_XD>6$2fY;8P+uk530xEI>=$M!Z?j5MTj6==xxkj7 zl);=5UHhVU#r6<7y=-inX9=;LxqcZV{fmZ4$6*0E$pGue6?Zih%OCtPbP zb7p`2rqal&xyvGY7*LI7=b(vz8(!w_e-e3DQGl!}H&f7A#?#42=!#HWKf@DW-^Wql zjI-R5JALp*(54J~*uAWxl`V&%I^bk}9WB?Sq@SQ-MMEWkiLzUm+mqI2;u<=cBahS0yEQDO;Lq+bm1baMDT? zm!O7Q<6*(h)zckt6`N*4GwSG$05|WX$hCf@vYXx~_ap2WcT=IY+uNF6+aP?^`ZNS7 zla(Ys9PBGal(tkhg9sp<60s&+0_FWO&VYO5FV=Gc60imGyQa=SmgBAmKo)R(Wh`g# z&^PCL_76I=pQ$96g-fddCw#(^7Tl^e+kha+TXentUK4$W5fI2mlJ2)tpsBJKXMgBX z8!>fOlE8mc9Bgl%;lLRKUzeZ%S{QGa;k#ThO~4lpnkjVb<&ijKS<{RYv>#!%%#QRJ zn$bNqQczZu&tX!4DF3Z5;zoAWBWg*=VY?5;)c zxK)2KpZDgwl%WfG9I4=1&8afrAM4LYqhL_O4K_<6z;67^1eDLaUApdHcBq7Z{lWH_ zY{RA@4_PFMzMT++nRltX9vu88$}7;3e~RT{ED@;G^&^g7K`yUs+rrS3TvHRnt~V*~ z;U7w;eWhoUaH71YOu`M`&v+zlJXMKic+3!F0j*-!YMGq^eInRVqDIC+rmmTl8QPunNE@#l4i3F3&1$%s@&h7-&J_x74lD z$fPAuw;QTvULQ+yHG6`)s4bC5TT=K!^mX=QOj!oWrntM+%aI2_5Rirxr~uf4@gx8c zPgg7Lt(EYIIw0W~r;%4y#sZKLXa=}S0m0QLDmg< zXsAzH-L6)`MeJ6C01m1-ygA=>j9RbJ4sr@d2~Pf?3>am-m4@yF-Z$X-0-lQAy+iwG zsIL;MU-{2zJw+a*g{_rf^8SQdwMmQgY^ra zJRN`ixmP#m@kGFGit)svYzk{BjS{-LJP3pyeqbpBjrovGMN}7@AFr(n>~Y8Bi~-M- zrZ_ACihA{7O31OQFZEI>&|y^MMkk+k5&5z!x#kK^>we4UJ*XzQFA+V5l#XgPjnerj zNnm)qPQuI>5sJA=>|vy&NX_G&5(T=30D+I~Y4w-ZDH925oL+|>D}0TdR9R4TDLILe zze_6Oey6@iA?>&DKN?!?pUv# zdjED0zh(jmUcnT$tOQmktdn|(sI&E}$@^W`m!f*WsXg)ox(Od#I@6S&Vef`y+4`r# zkf;?y^uzsMSDijMUguC@%Oka+0qGDce_W|UYd!pymQ^_4LRhSuUc5o2KDci?Feftu zBJ07}(~nCC6!rm!5yOIgkQ^+3B%h7v5KN@ru4mLExeUqHmJ1C}9HFsDoe{M#_s zu&ujpLFo(M#rI~0GlZ+o{H@8Q>Grd4YoCaUJc?*tyBeCTZw@e$J~kvPg^}P0O3~=k#Fs5lZ@-aYoBairgtT3d;V!|C z=D%~`coRVR=20Z@>rng{$iCuX_Zg+KsLB%eENfJevG`wWNyd>|hGaE)# zod~+IqZxZCJHF?KbpCrrR@|rJDx!o=f=6hdZ#Tx2zW)Mpnf|fva4>btQ8DOH29G5J zUGclrn@CI*cOTwNRxd_Q_25l#uDRl|o6TQZbW-Xa*A(&Y{1QaXTJ928gmlW*6>GYO zE=4>@8t+WoZ(j(ZkkG2M8j6a|@=rcfYuradkctS&iKxh~gfzGJQj%{NQu4$0suA22 zq6rf~CJ`mF86RR4@D_f;DkJrdYi{sk=pb*%QMz+Ma%TJ+*=R5szYcUmbar9T@Hc`e z?6Y8nw_uzIHu6yQcVVBZVQVz~-}-DY6LO&Ey@ea{-XNjmmxiH0_P4|5o=|V_)^s2C z>nf{mP2r!H8Wm9vV0^uUKWQ=o_Y<;!Vl3ppLvm_LwbZN=TiTDT!Xmv7BNSm+bZhFk z?4&N%}Vhw6YPm|2F|yR{RK{v^Pe1)HG|F;7do$t}LZz1Iy6N9+q- ze2miSg!PY|F;-~L4ImJ<5jm+>8d=XMnUEz^l=um?(v_%?{X;H{dQ~a!jVm+zow04$ z2Ura}8Jr)wB(m~hVH1Pt@sg~gB}4&*plM>?s5`0(*IV2cE6O=~=JV~cbl_L%A-OE( z^O6}+Wh!Qgdux@RQ;}=6n^YcUEbEPA<3T&(kfH~k^AKSfQGvjk?q8MQ!2giK=;Kz^ z)?hbzn4Bz(I4sS4mZtZ5!2Q0m+eU`@Dnu#Q-T-K-&dkgt6rg0iPAW&(>7U7aC>T0MsfFDJEYv<_5dEyyqq*N-+%vp0n7Ywt<1T+H?%y2V6{)C!cEX}s< zqb52nk>>ZytpWN_Lo$Rk*R1w48`K1E1uh5j((FT9+sI740DD{ zZ690^A)c}#@l*5;zSyu0^P===V)IAR*bsmtRu4#pbvJ;N2~ay;63p)>UWq}dk_o7D z^c;*RXzZL3R88omm*`otF*zR#j^D_^sl41sC9wTAN>}^*ZBC|^=GMHeaEG?aClaF| z$fwi~*E0@Rm4|1o!@95{?)2M0j5hi^orC{#T4F+Of!hPg~zIA6TNPE02QL%Qns zG@p-{Ld>tkc~CaHT$!*z#a`*cCFKzz*tgRdpSUOwCm^pvNuk}o?IGz+$(%)yKRJkZ>!^^fr3_U+YM9dETwHX8Vh=`Kk(97$Wr;_Fo+Y$A8IQMd2J znXs?xv0&Y65VPRURKn?17GZ10k-EttSkPYC7x@IikP?~-{1e!b3ULX7A8Ex~e^>^( zQo8BKdWvZbp@wiAp-T)Vs7#UeuN>CrLKTjW#<(Oqtr_4v++m4ZP~TUjS+9vlVzdJr#)D0O_RJ5} z^zl&A{b4$3Mn?D}y$2lW;3T7hn5OZoFdLf?2B z|4y0WB4xd_Aja|(WJI&YM-{V{+9OQ*##|MqIG?4)%NT(x+L&;X{M+C~1TGj@rf2@` zFNbjYN>jnNjLDnCG@(F3!F?MAPsK-A#cSP z@4`UjbcLjp-fLPc{?K%mdOqH{#?0^bRQ}k(BNGNvhCLQ%7atr1E{F9T+CH{gNfqFS z8&c5pDZHqzl)L*%keawrgx~VK#`IwPYl2xk)$4xkeJAv)RyGu)+fC7^1Q&?II%Ah& z>Kf%cb}LWiYdWg2uP=<$(c*7jOOQ3aePK8g9{gMWxWH!Rsi(^c%dxQi;$faRh*L*q z2%CX~BZXQ1Zra4aRaK06)q3Dyjevox1 zZwK4e)4tE1*I82i-5`%){Cqfe&v^)YXVAiy`2E`8T66h}LMJWO3?K%PdCL!A$Ox2x zKO8%Dm`J)i`7LoF9?s}tP3QUg+3jR*U^u&2=uM0-6-h`1Y=sZ1E1}j$3FkFu9dgpPw5&kmR55W2MX`*(c`HR6=}BChWyf7hGZc)cctjLL;h>}XmWJue z*MUIR%{!ENx8N=L*~6{cf`ou2#Fr~|lsijrr*Lzv_a8L{W%!qlc(~|yA2AZFjj98j z{`lLioKs{`{u!5EUJc3%UN~!_1-HvmG?Ng?d006clTp!8U;imC>=`LS(``v4tcc2NcSh?F=?#@?NUGxXTeq|;&tV2F|Js%A-Jv?qAbAp2#`m`$5-)`rx+H%;ww6$7L?bQkne(MLiyU-h?*t2vpe*nHit1N-eUk z9E?+f%LwILzcV}%+o#hnh4!BB#C4_pEMnABv*3$bwnOGL$AdVwZD1s4xg9AZ8#%g; z`s_O|>9=Xm@T?2Sqtsm_YUU2-BV+@5r!fJja*KO;n&i zn-Ds2w~?7y@ERuP-)~+%Ew%i38c^ed!rr+dD2`x{--XvAtxEl3$gC@hWJ!dnfQ{6J44Ivu!G3$)mfak*o(V}Yb-$Z#m0>bp5D>N1XUJ^Q+IOz`8uyym zRrvliWTE-%A;XOKKmqM;_BA70+kmHzX@H>|SH`5N143`>{N^nd#xv;S014eyH(e%E z(IT>C&1Xw$Cd$55rqj2OFj&eru(A8S>(Jh(BZQo=w}zc+HS@(hLMyJ=n>2Ojwx5ti zOnup!`01!^y^n!T&`1FCsXVI68}uI5s8eRNc*7s|#EZ@(TX=X{){1#hEel;^lgs+r zIuSD7iJcf?Y*z89=>{yU(9ewzsT=J{0zd{+M6cD{l^8!`I$+6f{| zq;|L^WHHY}NAy%^qpPA4%QQ|_-lWOkN3En)cG$#YWLa+Gy=>qOZ*Ut#Uw!KRvz@5y zX)`vhswt)Z;z+lP#7^Hiz7h|aHiH#)!v*ruM7lG4#m00D$5?R&YI>maV-~l@JwEXb z|7b}GOQ|;hhnKqa^iekDNy)-S+c&r|M0bZezqwZxW2|OdOIq2C$qS)F0)tWJy3H9R zG-`@7pSJK&w%n&?GtxMYh{)}K3?!N#3SB+g2^)$a6?aS~zSdy3O*Q-@1j*hBCnYB4 z5DLiTvm5BT&WR!yit-sPa-n?rb>tS2_*zd`Xv!I{GSBtq)9B z`Lv1l7hjKV*nS#7GMpTQC@jlM`lKY zql2`Db=FoN!|xTSCvhK@p>=xd&_d;EQgp;Qy1ltye${E}-0wnYnd4D1PtSs30MdF+ zcM_F{p0YDPhb>h1WhhlZ7LbBvVJ=&01=pJBirE6X_Ni#1rDo`o>oe$SZhdG>1X@?j z-^^rT5*W15q`?>L!x8VMmvfPSKaOe;x?EAjof<&-h#@2|&^Z>Bo1x)U&6$?xJ0L%N z=1z772r0K+Vg(}UGgomc!Irh=`&>GwKA#?o8fakckm)$shLn-wV~>2$m}p}ybpWb zA%BIuo8Hx=dl=z)6;Y>et*H^b<170-(|pk?;LUTg{L!Mis*LQdEtx^4(9SoD0s>Ht z19kPGmv?tnbNh6o3!*&mbhxcQwR}+>J&NgG-J7UvPW zS5(IV2?>b=SNe9+A?7=f$EnlwK6&1PCHm2~tUk)iiBD*_yMUu$RjQgABaRn>+^1)s zk0_df2cqJe+~!Y`_)=d|(FhfEdup1XwTy zB_$e)*vv=tfN$yc2dH1M&~>&7f7p{NwW^&jah(w_xYa%o5QGy$PX>5((`kEJ2-_?Y} zD-m95m^E{4I^a&d*9o=O5SCZozX(q9Pd_^T;G#@+utQ-t9|GBI^x=Dwxaq1ZC=aR> z5o$phX>g)MLexd^j6Vf}^RsW7R5(q)bn*QgYyX5SlpKo7H%-(W_7>S(MWAndd|{m1 zzR@`Yqc~V`F^P2AI*8XGQo!x3nkcYy&(=PXA1$7`A-Ke`v zF_{>RxCFcnvaCk=qk5M~fvIh`Pe~H82^(JqHIvgBsT8bi$LFsxT{v3SQaQ_<48Qum z#hrPWnx3IiQM8c7|AIt0_R$rSCDMqABc1LoTRR+0M;m6of(@-9cPQ;VLu51bV6wNq zm8hs-!k7M0QC3x;kD#kO2&GJ5m*s+fm5n#IEFhNSGR)cM!3>o!T#s*Gc&d4d;9%2j zG?;hUYgb|*LqT6kl&!tjAgI4@ix@7icwhaEEOvN5nD&t_xjz7nePGzP6-C?EK6}dY z8w9=2o<^ZJOb|!Y8CJ%!8rSd?A>K9oIG*!`Iyi9W^ z*l=^@Nk4ROF;hQ$cRW~Fk4$*yA$qJT*WahgM0U9xiPY31CLASpp%;w7A>>8OkV71J zUpd=f5x6Q*>CYo%-G!`PV@3PAe0i`k11Cr5^LL=2ckhdspeg zIda>bW-m^cmJngLBarj1PRS#N1rlr06}XsUGzNfwAka*BRatSM^DG&j*vs7T0HI-{ z*3-(Jc;3s#n%oK!^U1^O>?&k`_EVmm%D338!1SDT4Pkn)tw4+W^5sjdE&Zd^jDPuy zl_fWFiHj$=bcR@NGIUeDw2}4ggqp5cdf3wjUF-YTn$g`Ydp%)Le+2~jrB^`z)GStU z$A_J?8=D0c9 z4>En`Js!y6a4izP&V)<)>Gm4? zCORm~-_qcsv58>_n6l0A7|KbdN|1(I+Wo1 zOaGB4=_WnVEE*R@WpXF=*DFzT0~Soqaf*^;b2e0IvWf(&5N2AsS>KI zf(idha^B%)0FOLV?bqN7b}&ml0-X> zQJ|11vn)rsP#S5wKK=g9bI}(so_8qtxSyNyqvr9~%kfbTj6yhK*~OSV9VaV`lHUdP z!R~!8=Y<1qH@~|7d}NOA`a=Qej8zpm2~lrv9H{_`twzT{1CayHm=b+866zn^n4ar> zlDdGq1pB*R9!>mp@6DO=#4t&wyNiLPSK4fFO=-#FPQWKJSlouZ2D53R`z(?0&S@R97B)q4zWRO3nxDdnxxRuXQ8B zu|FZ>dD%jWaHI-V%`k#}iDw>4O!x)(gOYB-QcL^Y4yJjH$DrfluRZme>3BSPeVxoGanNHzp%8?WJ*O4W)Eu1E zz!;aq-9(y(W?e6MEIeMn?Q9N?d){C@&!&G-cOstiZ1~Hhk)$vx6=~BsnNq)AauT*! zK2+!S``cE}`MInZdDyQ)l)lfDz0XU3T54(vIK|Ee`;j|jgsv0X8RE0CpJU_T!c%x2 z;JH6)Pn4m_I3?ueKft$cX!|v|ca%_*M4M)Xx65IxXo_n({F>V3&yy7l{7Bi2WORG} zve!R&Z+8+t)EM13(gHD)bf8rDY4v2Yz2Tbblcx;|^_#5#B&A-b$!s%UEzRU^R5iTr zY{0+#boo^KXun=?3?$_+tZ<3h+z+2+g}?bSIc1gf=XtkP$?s-HiW+K zmFj7ewrJ2uD4gM2iPvU(Xis@2r|Lb!4YJ=&$F-Y@J=XZ~BH+XLDE-JRH^ov7iZkN! zPFDsx_HIw5e_ATNdET_S9M<~A$OGH0+GFG%sD3#cSbmI!k02laHG~kJ2(brU&Nk(< z{@Hw2tlr9tCf+z(A@DOCljy^&{5viNFB`dG)7ZbXJQeRlIv681`IQt_RW;{Uc72sg z)LvY)It$wTQpX>xV>0mb>j77pl1#~5J%tqq1t;)q@2N4U(8^LD`0hUv4h3oZ&e-?X zt;@m=iHX^x__}X6&9b2g=X!{I9AEcCg^U}$dd+(C9q0N__x#!W5j`6Zn{<>%-b6lPn(cjib9^C6wm0HW>`d63$FjS(hFz*61 zQ_|O;fnC$}VzvPgIW5^@%KVz)ci0{S_LCQP0Ce;7nn0Q}`|Yp$cvsn#+1aGeys!Al zT=}n$C*@Pj2e!_n{osZwzS0~Av5fy*-`d);a1NxCi-G-&yi;`WqP z=k{x|^Sd~4$9Io(18kx{o1O);U}z2w$9DQBZa+Yx+{zvdWM4n`J`D5PTXeFYuZYde zHP^MEpuuI-A{ULSjCl;Y6(EUrbw-MFW^<$H#Kvy zFw9irjwndO@brRDtEd1+;T*BcjnKp`p#twEA^2Z=JRNw}rl$SQzRwfoW*lB}a+)-E z;D!g^y77|@HQJyorl&s}z8>_NShaO}V$Cu>b6>evdLf%-Um=&UJyNH~Ml$cCFN=e8 z8W>2q_QcZdIjY^&92ys@qs_7zU+B}ii3Sexp2qF(M@)OR_?ikedm57N8f-fuUY@%rME<#XUxHN04;F}UkE9Nu2Ebi3k#A2c+j z{VvP3e_2r|S485=n#_xxy?UX!qsc+hXu}lqhVG{M4%?53YPi6Zr3FB5h@}?pmoPNIW;EX!iv6 zbs;jkjfY`z@4-~&YdD&;pBjz|9^>Zb{@|a`%jt9k-|29#3YjS93x-D_XSV0c;SsB> z82gh3A7h#8iBOtd#e45__nX8kIJm>iD?e{84=2RarJboL`WE^E_dtnZ|mY5^zB6Yz)o#8K&cC z)RHCn;r;uuA67Mk4uqH=$vyCnm3ZzPrmSW^u`^{)`jYvJH?uzN+|b0V|8_K3ubX6X zIPCis)_|p#<0;{H`X7kLB)eG(D5Jyb4Ce*L)2%pSt4TmvedQrgobzYhF zF#Ds$v+ud*vKI|ufZyrO!JLEVF=Xu`2d^T>4Lmg2&dKrd;P!UWVmYo$YZvWL*8vTAs?b##<(-gR0^P8N&7DK?g!Zp?TO`G*;kFv{r{!P7 zj=6;?7j3y+l!A|!2dz5#G2b$@D|3JXW^Ytdy^ue%h!`e*f=s#gFeFY0Dl+lsH9TZS zIPMShtrU@@>XKX@+?l3O1v*-#c^n8Xh_S<{CwQ9j@f(8uU(-sDSF4)|D%@H z4VBt(DlF8?Q)y_B$jCp_uDkR5IQFy}$<$d7`7Pw}zJ3RC&v~x&npSWPAn2<*CWxB| z)%P~fT4_s@=;Saz!ckWh;gCO7*HVZ*4Q&)0S5%mS!L6&W>diSBBiGern~qS;DbgaD zsw1zn_fPvi=}UPQDC6S2i;}w0!IzDu8Qri(=Q5KL*6J-9tHWa9`|I#fQZ%>bCOgxP z4fd4xi<7(iLW4CL5We9`kD9jt0CWu>i);m2648g>L;&`E?P1GzY4+nI*YWe{J@=XK z+O>|W7sww!=dg|{J>1M-)>ugm8~vGPabDFke)VmF!2hAZZ0QFUXyA3XTgf6@b4}o0 z&X`rKOv7%+dqm%IKdX;opa?|axV<#JdB(OmmbGl_kMsQio-)7?571dt)nx9wJ}lrY zm4!4*4Sb!PEG#V@z9$QpVxs5)(pexI!>>P4*%!t#%Rxp+fn}5uXsS;#?-Ln$;{dvh z>lI9JfUp_KZhErTm80+H>r0_5a*3bgbEP|3Z4?^{vy~%qvk}B^zv0io3pX1}S~K4G z?d?>e_l&aH@lsQcevcu!*wupB z&G(k>5Wv>6Sy5Td)zWfD@ke^N@iX*u031>+;C;zBhk2POvov(Q)`7GB^hl`hFh~$4 zMZ@oXW54WjCwR8dWTSRxkZ%YdGKP`*zP4r+mI9)*mBVKd${C3{M1nUevWDKNT3!tZo4G@WJtsAh)Cz2xGKe==Jo>^uETucZ}a+8)( zG8m>p^S5YaW86I{-xs&E5QR&@0y^b0jp5nYo}<5_&b+oOdy!tMXv-~jf64EGg_rW) z{cSc4KI#vkH1D)se9jCGD*qCgw7VP%`;>YaJblAt_&~{rxIC=X`TeXf2+84eqp!Cy zR_rWX83LIADWXQRl7?GNzW4nAB6#+A-9uTL?W(6Z+%kwm6ge0-zVl@g%rE2+3G>*V zvmw%D6D`dp5kdL;H(ex%KsI@Y*)UU4-`Oj@T6-9rdH?#ODk|hV6>D^K8sX`}Lh>cJ z^{k$y&PG8<5T-d+2=1U&l-zE$od5t8FPA>7e>?tzGwVgUlt9Zy7-{0_N;p^$f32vB zPyaw45J*Cw4RKKrggHoahMncyhc7dmMo}3aKucM79A|B5{6o`UD9p4x98S$|r2frKx2w7hc zmMAi0Z-3vxyL6@7V!_nNyl~ZZ+fe`nWUWNW)pHeIuilqtg${~}9ky!nstorP;*htT zx7}(E8zw>3gl5l7btsXr4%|6E#RefQ4@c(5WXiUzl8W6b+)Hr#@EH){XtNLk9ueeT z9UxGT4-yW6SZOksbc%d&9%IC9m;7Cd1bt%PM79w5@)A_`A0_Q!K*S0L6A<=P7*=Xt z2hPeo$AEjBcVPaI7ZW5~C}_LmbWs`8#W+*MTedYlZ|OtE^6%FLQ8pi+gH{jcnXa?U z$pLnr88@fSd9jk!FB22M@=V^ngNM}GEc1H*E~FehI%4_x^QZmYaSI&B08nJ58h0G@ zc>|DEPU-JDe2(jZT#>P-CyCp-4Sq>zY+!Bos^y6J@f)+Gdg@?(PJX#d+Ixt5tR zfWAO+ISRgX;4rycKyg{oZ$DnU8MWLb$~f-WZx3q)guGEPF&VkLySp%uTkkcT?v?rZ zkKUq2E=Gm;kE#l=O8K*uIAgy8z6JX3N%puZ?6j$ek#f<-l7rB{(}HCTrw^e-nB=ru5p z*}bZ?R?yTacX-enwZ+6A1Z_hwW*s=7Qo~iAw!YsTI>vd*u?`kc4!4XY$c0RN$P|FH zk|5_xwe8^ZJxjj{(Ymp1pTI#Prub^m;Yyu4ZUU&V>RE&w(;71X2PzF=q(H*GhX=dV z$T=7pz?@a*bLR@SX_}11KU^ir6N@Ft*}Exc9ZvINh}N+V_}x{8BTtZA$b`$b2Cstz z>7zHBz=$_iD7dZ8YW(Fg1{ObH;I?Y6^{q|^9XN)coTi4(O+L}JZYPFED{XiQbgvTV zApUf67B{9HN5JJ`vfHo_a_@?yc4##KLI73yfA#hQF#BRd@|MlETZ7?amYE{XGBY&L z+aZF@#y({F3!=?=F_~}p)<|o7=za4wyECgJ!+@|c@I#S5uOmn`SqO1ZLjZV%rZ0JE z9+}1@S3H5PtOB(c`QbwF^nY&lnK#fEoZzL5JH3qHz>s((?QVCWFdFS1B5tzuJ=E zeLzX@HzXnIxfujzw%bKjTwe6U^`I2@coxfrOo3#|p(8hw()lQrOHp1D3<2Tc*2b&< zcL2S z-<`+?8DWfskvU5s!tU%Qr=!}w@Bn$=z#BHbz%1LE$Tyf&Q^f~=tnp)`W-VRw%ruX? ziI!RVa{P_+yt4?%a=t$DDt|t2+jjdDAKAx_%rPG)&tN90krZY({@{% zfL3=A{m{@52Ury#zyKHke`y!*Xt3ZfvZXT?v=CVE-d{WYr=H^Yf9eUBS^iS>9n?b^ z_zm&5`nvMQuB*ttQlLu8TLjR8&E{p>&o?*x0L}J~PZOVyh=GUWlyDd(cQXc47+3(9 z5!xhByCvYr4t?q~z z2Ou)RoHswt%+4P4xnBKv_p1ZT$;nBPyzMX1hiL9F2H(oJKbeYpGR)4nk%NFV+!c^2 zf~J9sgM!jhBtR1cr()1j#is50*D@9-xpF7XJU!dDZ}0PdXw9D$wapfyv9BG^9USXf zSw5p%Q<3vCoR6Ga`qDJ5K(7Azv1In2CV(z~ECNlC^=exFrwK^^VzwTsKe{1{9F(8f zsY%kPO}cJYVWi5Pq{R*205UfmP6~h3KtZR)OeM%)0bufPkku$$Vwee$JOX%d0O61T zgs>-y42q>0N+eUr#?g6gvR~fM*;MURsFIe02Trlnjg^TQqyd%&;E-=}CfP}%X{%whY77mo_rQA7x3^bz+or-Ou9}p=wB<-E_@?ef?qnu)MMMFQPX-lKY|dG& zMh3vwz_tP~KiO!70r*sh>+yTtRt}eyuGv2Ihv9xuO|Pc- z3s-Bun3z^x5C$|S$m6vOlYNR0&Fu*lp8i0J zstae+@bN$$bJ7iax1i*H0f0fzmPBzCk7+kyqY|{ zKv0^mQnp>@%4%L~=v9&YYE!JUny9iVJ>cpfjpT|wIme~JW#y>b=s8Bqbcy^4(zHQi zMc2}ZM@N&GtgJp9(3@{J?9Ep}rlqC*%fsO#K>ZZ*2vdUovmrD+o{H;97=TXX;80jo%COBCnUu!=gYG(}oxFI?6A zZ2z^c*hsYitS$#1pEg&P2w;O&757GQc_aAjeOe=K&2P=>H4vSDL6WN2{ODPywhY38 zrVUGSuks)A=8@RbqQp4!GGna8tXgx_1FkoXxKr}~?*aD46P#pWuJFfAKNkoD^4wWk$N8O! zv$>#|qd9niaB*-7uyXLSa&T*K@(OZr3-W-UUkY+?)DB^l|BnJTcJH7T9{+cNzRVT^ zP=NJs4Nx;PK{Gph4@an_l`};0-#<~ka&(4Tn7dP{+gUifnK+tLf$BMt+Xov#LC${{ zd}r=t<_NWShT7Re{#OAfHCYKNIY~(>6-PS@=m&E=beK?3nCst#ZA@%kEKJOtT^!9F z|No`+eMNFXY3BbdZTHUn!~ee+Cu3kfC`SFanEg8o!PihVb0-Nq7u$DGTT2N$cL*mB zuYfy07e6xxGe@K*6sIZ3|BNqRmBi}pKZ9syoqT$akJ>Ka@D27U%NOGjKODO^5nPd95H zD;rM+c6oOTD|;ITWi4$60~=2-2RBy+L0%zVejeQq^4hwpT6z);C^7HctbAN-T)kC1 zE!^!Lth@x@ap3YPdfHfcqZr;>)-y-}^zE+(IM}#)qQFhVCr=2*l;i0 zMd6Gth1Ayr`T-g96BGZ^cORRX{99k&ki8u-dzz*XUFo{nuI)CJ9RxiMyG`E!lkYq3 zPS2+Iq%H$Ok6}okPxpSypi5rqpP=rguGYKmy}x(;Zb4msx6m-RZcdwfUSybE^192Z znSIgI-OAI$3Vrc%82$IKduqCMyrq zKfI6jkftrgzphrpLf^wq*$*aQH=*Ojy8W*b({Dd>u{NI@ZeLlg z^aC$$bgtQs1$3*48Sgb*^6sg-B`?lv3C3k~e_sBblJ!=9LfReHDMhk9`W+8fF>>GU zuP$~?H@Ms*SM#YV*jJP*^|l(BnirH+Di?N(QG{)>Ud>3EvSZEX{|GH6w$`mj+2|0%^_&HAX4=vJVPmq0X9gth~vKPDw+1U;Ruw+zqA7oE-KZrgdo*u*g-2*}l1^(Gdn6G!| zU$Tp^(G zakb(iTladm-2UGwhhMr9(XjrsWRSOdlkLisOWeg5>q46oyT_>=DG=o^ee(6=L~B@* zsmSk*Od5gGYfklbSoAdQTHSEFrDX9Jz_gIT6W82Yea8{DahNm5fWCp{m0Qi-Za2OSydjX6+@I7-RRtdBFo9& zaaD4HznnNFC3v*hvm~9H5G9Jdx5L|sL~F7Kxn09B-szi%fyc8WQ*C}_&oQ(5TxBz} z`=!hAb%z8H_2p63yYv<|8GS@wXYl&{n!&AS*l_-;xD3ZTE$(7Uh6AZCT=LlRfflHm zd53bDlEC!mO4E|37MhZzxe>0{bV16sNlAk&gCiq10maKZU;datr7YV**C{E_S#;VT z;sqL|dHVmpfUU*YTl)|DPgbyW)X)7!Gv1odnJxI;WvQy>?GSnrb<~0n*(&e94Co?> zc}FujQy@J|6ZDabLkR$P@s8R5Q2x%L=wFCT3BeTcI^!PY3rOfr(ATg(q*-bE-y5SI zJ!wt#iducGiAnfg|8&J4Bpkd>yI4~$4M`&1bE)p3%+yKxYhUjGY#!GQjv%(Nm{Cf# zO8a3Yc^Dh-(yaA|7OJX(-%xD8uY_%WZEmj|x?*ZK2Unu9LRTb7J5!Kt{;L0Kb+&V) zYvbpT;a8BEk|BPJh#(V`%E=dolbmKL-M-S3cmT0DY>i0stY$6ws&U*)Xj4t;W9|5= zlo%lglP$ugH_r3a5KK&v5p4hYn*U36t?_4w0YmXY$n8L^tYtF&-n>#h+I0k#`VgH} z5kYsNThl*FG}VxUf#Hy%f5(ouYxQwW=_E@#5Buu!M-C>OE}xXMz101j-}+J5 z;Kxbu7CQvB4?9nDyoLiNbL9D_F1rwb_%Ps3_O_s4f-5_Ze)Uyzx7DYi{1OO9ipsww zy8gnKWA+~tpUNGp=wf={Kh&!fD}oH@)9UTlrc*8Z^mH`R7e$u~5+9iLX}d}!tdMQ@ z1&QfzE2+5DtCS}$8u>C)0)mr*s;}R0+L`gs9=u|`HVqPq|6rF@{9Rdmp|^_f#~X10 z&U;1^iiIxYL-(X+r*4oq`?liXq3Vg1yKkH(b2a)+-%BwpTl{dtL&PDm;>P`Zr}j_dz3s6QX?KoPLDMtt z45OJUA?B?1ul-z2X4_+V(}o>65R~r%au%xj3bfOMUTV-$q@Nmt=;~*kWqC99JVLig zk}TeyNRbLV;RMd7&w%#&*Spq8or%b2!c zbN5$6tk`&m#>+Uef1F+vWjjpX;f6vBk)!?liSlRFn5j-gMS{Q8r}-BW%c?!ze?G;R zW?%FAG>7#XS0ve1mM1gCZ(qQvH?6@n7$L)36H|yofGPBDcHr-jmO7c_ln7vgYyCM` z#bqnuE17QhBNg?O9>0%%how_CZmDl@+(o^C#^XPajeukc;e5Pq7bfv!378(gCaJ`X zHosrB*6jNr2PTOR5-T(O9#QOzrOP7EjPf{bkNO2fr)0#peqG|z>XzB(c-02+WX~>l z-st3bCRbP*t3;6t>uby!y&2OTOeBi@O0DKh7QL&;$x7z4jd1pIo*Sbb{%OUT*^xL% zWygd`LeFIIqd39SNWJt|yk;z^#>W>{ZPBis85(q?9zEi%&DLr$9=v(4OJ7bBrf(0k zTw=K$sF$*np7&Z(ad=sKvPGBrJc2D{!pUSonXkxmO3c(M16gc>^m1HJD$EZ5CC*O< zfLKy*lEl`Is?FyNadfC~OMU!v+&*Tjv)=g8xSbSQ1o9{lWWQ$h7O5_Uu;=`14Y(-O zrF&;%pBcnXcb-(l1TrvWS5O>`;wI0n%2$~Z+mQNY>q)yE?xp!ww@WX_EjffITR2Ca z;HKGD&DY~f#(we_8S|9rD~_zybC0g}((j`ZPgKJ{xBmrrPq-)TUym>wT%f~fx zOeRBvR>%X~9`l{5h!{J~u=S9b236BYoz+K4nHrXovnLnl8JJWr2A9$uPV}BU*IOxCy~^#F^j4*y}1Octd+$OONMVdtYw<)ZybP?70_C51#l0KQU> zqGCxQ-e9cwN@13`L-5SLPC-?SXIv^>VZ{1PeTlCFbIw&y78CjO_K`-a*ny6g0NzId zwxn6=u(*&4VJeT0BNyU)6=|vH^@B^Eb=sT11lSo(`(ltgIi&pCZESmlAL898pZErc z9(J0975$Q~n-P*FCE>S*H`iFIQ5i#bl=J}?R=p)uLLk3_%{l3X2W-jtSsl*Hxv1p0 z!0RqnUgXK9Ujz$1}pL zPWBXDOoWcFJO7D>I|~2m)#xiNA5>zGY(IF}%sfoVnOi|Dwq|v?{)L)IBI&utA0kJU zShD z`*%APz2G|~J6D12YteT~u@-kbp%i_jK40Z!*~%>Sm{(%QoM^~KMZBH!(eXbj=Hsj} zIyQ*r4Klw~?(+*irnFZn&WZZ?a4(z@PdXcivqM#S_roH)V_S}Bz0!|tTkq;DWEg-* zO$y-rPFw%#-Pn*Zg*LK^UAa<~JcLa0?9xWn=WEF})!*^VLpt?O)$TW$*ZBG=uCWqQ z<$OB&zwnMr63_ds$qq!EXF>w`jg>k`?{%w5-fG!aQOZrzLDr2V`}Ogoy%L}@2FZNI zRg}1X!GG#I`GHCS^;44x)Vo!x6r2j)7SpNEoVeZ2V-1I2_t^~`D#lTAeK$4P&kX96 zv>1uE7AL*Jd*UCvQ&Y(#J8<2vxxd}2R;AESKU>Q8ug7UW(Q}-{ggi?lWQ!f?!FmQt-y(gPwh+lc`%hv^9PGVV>afd zaQnv}764{RY#YIoJI>^uDnGnbfG}-&Qu=ywC% z3#y?hGr<_-HGizq6Riioi}A!pos1^s0OKHSk-Qw$fF&&6rzA{qvu?(vMR?+MRDWQ@ zphe-5vsUnm2z6$Emmo7S-rJpC`5L~gL`zLk67mG^)Nraqr4GZg+WH2eWTm%?h_F2E zm)-aysIH|TFDOSDr@vdu2uEvWa?hD^2*qib^0D-qds0KPsA*DygEO>Lm72MoAg1W}1Dnm{7hBRvV0`Ift zyDqG?x%NbMnsjP}v~n17eBIXSUhyQz^B9K?Q~6Y%Bsw0iveuCwn8%5W@Rc^R^Ic6v z;A6lJ->AFuB>xbL@#|znYXMaf)+=@BZ9VrAa5wq$MLrFC(s_e?_$o@XhPE+kRe{{m(%XO|9 z%kUwQajNYiu);*9IPV-;$D;K&>YtXul~Ve|%IzSjtQ}Ul!c3EpaGdd^*^D~nT(V)D zi6kK|N|&Qnmn!q@gbwCKNnf&T_Y?T;$CH@6KCcuTy{Gpoe97Uwgo`Ads`N9Ce`o_v z7L}HX8B|4W9W*i>3Js43w*fd#KuP0Ax=OtM~0kC_k8zc#QqPdxwgqtk-Hq)+*?XijgwZ2@aWoxm^4YqRI=aV*@n z#(mjHR`68e0C9_@W{y>7A`ag*6wF>r2vlc_qKI`*+;~YDeWq|PX1R1+pz;DFK>7x( zui4uNf6qe#EGOkxJ^3g9;*{VaC7A4tYXv3TT)J3bpTE2HXzZKN)M{d& zQztR-KobpYp!o(Y5=nZl?3Y|sO0ku$2xbHx3n+oHN%JLN9r45gURuZaBgZ+npi$Hvcdjy?NPu^H!Tx-sqwk~{i% ztU#~DiO_VZHq;vfQfMRt3XW@Z-syGj&lY?p%0K^DCjoJTVsKT!pgY ztu}L~AA7QKt~6)ktw6uBI#ZD1mbTL}aIBK)>u%Qi#G|-SoX${K?woKROGniX&Kk6n zt+-P_Vf60(e(eu7Z@>z#H|&zMg9~OC=?B4y^yA6W2G*4J0dt3NgKUP4ngGMybHG%b zlgXK|J#j#Q8+!Qr=c4SVP--5uu4PA-t_8t2U7jucTUFzc#AdWdYQfD1YQa7;oaa!f z^uJx!?}B~8InJRtzXkxU6f9jC$zM)Qlm}oJ%v*@jsK417aiH2?YQabnob%>dx&eS} zGNIW|1C)@|=)ZwHnSYnlthNwFxaZB4{O8R|YH^^w(E-5e6WJ|%k-9eI;-hlc0)~8- zD)wd9gJ!ViK#%CV@f_6vK2Dru7|1B8rU^l!GKNy0BA1tkf)ipxm_UtYM{kd6l zo6ZK_&#xhyHoFjhyuSGeF}`5&)8jxgL*$0kV}Fz#ZNAAP8q-kjHk5^zm&>9h{J+jc>mkXb3V@#6=7`CX`L* z<_aOw8z`@0Hj+7VJ1U~W;Uj##G|jxRV*$`=4RH{h*uG~T#PG)GD%PQ_qcSU&d6 zR5pn&p$DKbB}*NvU|v{Kp*bS<)fwDI6e2pX5{O3-wzc>HR!aTqw+>t5-vFnKq!+AG zULEAmY)A0yqa}OLoCXsq#{bBixRPBAMdk{;mn{D%1UyRIqr9{oq9(yk?4lm~Ld7S1 z?6mBI`^Se$5eVt$7Xr3VXpjBesN2X>PM%Muu&c7G7E=o_9m+(VXULp40(!x`R#OOl z=Bc00SS;grTVG*}_%4cihjQk?B#gvRlOP9XGZCPpnc3SypePO+jk=61y;fZM;RXC5 zu!oe&x>UaREjL-~(3Jxvk)lC(t!A9^Rpt1`nC3ut;y#Wk;MiNK2$YYYYdPkYHXd8*>(jT5EZ0b?*^PQLl@N4CT87koY6o zKlLvLR&~4OFwF<9yKrE91UiZ z*qt}Xokc?KG|8?z5*Df!BWTqk3tZM1z#D&UQun^;qwg8jcy(_Y{wzvrGf=eJs@)F3G8~~yi2E!7p;0cea?h?@B zysR7JfWDyPRNT{M8FF}nm!!<B0qqEjR* z|7r6y8yMC=3U|^(l|gC1Fk@CQ>bnLhW(;va1Kc8~k7oQNtcg(NR&b}!^8TRl%$q<| zh&hVtSkC%+2BgmH3#$1MePhgrciPNL0(aWMIc=V00K=A1f)RcHQ;hJjfG22mf~QbL zAYL#mRp1o08QgT)B;0gVp98C+&w%=MX*V5-0U#*QA5_K!uTt^Yf$WDF_V@|`HX$RP zcer}1_ryHQPK+@Skv)v-7-!qlIzS`oqLT~BvXd!e8?3>48DS)NjO5O`4wNW`7|`?r zo9^361G;;FrzEI!_6%@b*B(@cXc7&jjh}70qgZyz*RyOD&3V`D}+Msbtq%jY)2{tEyXs*n(aa*2tSmA3Dg%w-oEsR<& znRGcseC!A2Z0Uw^R{KJ94C9$X*q$6=RTTr(KgI>C;4^j>aCj~2L?s}5p*nB}&^-<4 zH*^)iA*1_}jCbCo5I^nd)p4YI<2 zXEeNKHjI1Z(=t&>ZudmeZX#kjHFe3vYHi?0os}wi*lf&PNfX`a0Iwf_c@bsyinN#qAqNYp4HvCUhgRc z99IeM4E|bH1RQH&L|q(4k&GmqV?Jf~4`sb^8&asl|Bf=EqH8}~yko)o>OGDrK)Bl* zNehDokR!&0Z5va(e$8<%F3QxU!ED|IKsYr5W*^*zBv-lkcc5LwBMEa;nKU7*IDeWW z7{0-bdB4HtQ1k`H#o-3=2;TZ)Ko_Pzmyp{7$v#AOLpVUp-t+6f#pA@NO2(3nj z03R4_@~2H9_{|rxpf@(9;5RGN0rxd&6ahyb3w(Z6EV@94oR7dZ7TMjw%U@vo%X(l7 z?oKqicMYsvAwba=ju-@K!xe<4Ioy8BxXeq(YXgr%OTa1kZqit6q+?ZUptRPFf(Gt& zjLRaGIvd~TQoZ22cCyPNu!}T5`Gk`X(L@5@ziPkw$bea%dIGIaa6m?4fYls%=5tY61O8JkS}Wi$$+Z`@zm@g@B?_rgn-i7aac(qt6 z)E?ot-75L=YK>X%tX7ktx0BZj?BpePR(n8|=;zXc14nXGon{9z2E(pH(7?P*eTd>H z9MD%{R6lK-vNV`~add^PNMR@SXR(BKWdtZ^XX!XWtR zHumD__HU{k)cYg%u!sG_UAjQ~wmUlVI&K$uJI#0CH}L1B%W*{PS+Qx^V*=hNBx9tV z`)O-aFk|Z#Z_01wC>Zt8j_!Q~w#2Slu-J@%qg6z5iAX+ycj9uj-0;Vgub2{D(|`i2 ziV+n>&&yRY8Jh3ZHY=*>YQet07MAx_q07PEC}JX|lI-@kYK_m#e?-Wec8{!tVSBL& zcsDO|E7@h0f~Scg_fjgZ7*?9d^bA9C{Pik7u84!UY4S35vPnG9dsmJRpVBJE*DC^jz z8m4H8Ic*Z(C-FWuxR6(#w!(=h=E!mZohlp4^>${%jhUDJIfd2)fJvO#;i&WZIj#h^r<8rFv7m&BEZU;Iq$S>>(-1w0fKN&#+^J$0385i0`2`-#1@B1qA+Xu8Ofb;ZkoB z>;D6i35&5dekkxdcW>5uIRMB$uWiP5+Hd=CQH@O&D!8OWYyIh$`PQ>xO~suW#e?_M1lI z8^g70C#oB;(tHc{t{*n}XUBfx@wcC*(n!r-BHp#jHJDHwYo!IgNhBbq^~aviYlQQ^ zc3^S{+li%+m@QglWLQ2kw&T*&%P{(Sqi7_`zz_UvV~uwo+HYyS8nZta61ywt68MRf zi}Wh~SglDZ%JmvD7_Pb(x&-nPW)D0$FO5;VG3QUazq+Qm5!~*rAu*T=ObMW$7Tl5- z@Hd76RfZ{yM5IJclAARA+dS+3CYHYYu>pGpoXtbJZoiDKxNT@pfZe}~I6lMqA-tNHGHog-%qeMx=_cUxh`T3pU+^PcQZzFWQO0=o3D!YSi~@DV2*#N zi1f)^+}>)I`JglQ*nX|iih9X7w0)@E$%+V=H&^!^b&uo72VUe*Ta4^%v8lFdexVe+ zd}xj^^&qkQqU1JNIC5)Y#_J`lRzz}obss0Jqan8X8A?Qj;Fj8H{Wf&2nUVhCSNtnr z;Gg;Xz>JjSkZ;84kh#Axuls!0C&YRg&gQa zPhPjWR)6pKu$}2QssE9=@P5@P{ZCRwOo~YrvzvxTLsqG{p~?AmK{&x!P zcX0m&&e2ZHzP}~SYVrH!I@BvO!bC$Oh8!TrDx>U%vmVv}o(ymkL#d)s0*fEkgiNVz zMJ`(7*9s#?9fz##MT&^YVLk4e!#Hh0at%Z;db|LI#z`;6Fx0E}4}=+7Y(SsYAwF1P zo4w^9I@~bep#xd2$CNZ3e>wd02(%SjVDNtxP)px>dU#lz7%`fUlgB(Kjm;Xy3Vt!U zLX-J1p@G}InjH+yt}F>HtE2?Vx~^-VmpWGDMr5^{f{v-j_gcs`fQXddE^-Z`O`|yx z6_zAEN?)2AElIJw#~i2j95U7M<)MbL@x`GPs=(=HgE72N4r3{|xaF}R3W^Ba)sT|k z1eMCd>$_M}no7^ME3_(WwWn-si(Po^c4}LS)18(U{V`8$EUh}^a_nAyWD5X<*I#S1 z)l~QgHBIvT>!Ai=@wpnhY506><)Qp9Y8fdrj$QS_qnPbVbZWX}$ZmPNT#XG{QqBEk zD;)>_z{#R7qs*`1KPA9H1%I1iOr3gWC$0JG4d*WdHKS?4s@Z^RX9pwb$VhMt*x6Cf zD6Hipf#%8xsSRn7puW1eyR;;n2ANK5@iqCbtw!zH+aWcMZz|6^zvr-AN#Q%Y|&MQ_eP_;4tb zrZ19uJRbT~d+cdi%rRPSV0P%r7O`odiszh^O5ndz(vMt}JUzMd+g0Cn7zUcMr>uX| zmEpV|6dH8u9y%fuaXeweNM;-u&lXisAsWEueO{J$R*uO?EaOOIhWU;0O3&CT7l$L# zJeT&ZAl=*3^*$9IVBNEi31?hUztOc{zH^)cMW<8-d0PCEoWh(AmSijV9U1yEeoju?o$0Epa5OnYW!b}=(0dyX2yxw)t_5E4fliOM&iCl zANL8cx2%PT)I%E%e~k;fKMw40bbz!W(F2-8fFr1sCpxKTTPo1gy{Xf@`v$@eldyU651#LNd*q^3dGEM8EQKzu5aDKR~Ko-$Fuvg`+?eA&0nzOwEEa^Kf@ zLhy)5pNLJ4xnm(Yqu8?j$|fy8F9j`+wfkqYvTmUr!yZoorEGF&<=;xYB$i1cJD!`< z2n|p&p};dQn*MVTzuw3P3`+;r0d$?4MXasv?UZtDyjv*W7_ZysD$EmJsXZ?jZv+>yci1FG6%RE6VEt)&XVV9keUatk^Xjko}t6_j>^P* z5cl{Zvo17#&KHtKX?3=yB#noTW6(+T74|7!UxyS z6$m=bqzk7%-$4IQzJb+(_ zjqS?>DWN`Mzp)X9Yke)odN^OANH{&)g(tl0>9ZhC{WMYF|BEYPViyj%wsi z+m128ds?CmpBYgcm&M&MuAMq1npTr=>2dWU4Bh5U-@;11j!-)CbkcC)N6>CVm$OhN z(yiZmp^UcJ2*lcGM6ZZ%m%{tIhN#bAzj~T}x3Q~9pg^f3B;b@t0b!Lv#B-5&>+f@e ziS7{6Zmo9z+1YYgBCa5|>87I3!9}0#LxKzA$K=dobjK8{fNbePb7T6{35O6Z$AX1e z=G5hE>JRstljM5$oL>xU2y85yn|0dS9PH2{np^k;tC8sm4mEC}iB6Ew38#kyfjXrQ zlIkkRUt&wVNt;evYm43%nZwMLj-mdIg|`&St?*fVH$+N74wGvI;i@rRWY^n95{tG4 z=!AR95xS5YUl+#KGENi+uVQ7+_9yn@%iKnbPXNoT?LbY5QKj$CKQtMW63VyN z<_V3PlDGAFq+m2z_XMD~6Q)~XiI9I!Satooc32Vj=k86c4sS!wyHUfF$^!RK)_##Z zK60ZBt$9XYsW6RId96*BRlK?7+ea=VD`$tg>ORrPw?-)7?;3x7G1)9sxbbPEMUW`` zY*h_AnabEW?xc!0$~)|vW~m7xQnPi^ET%)X#Y_k*LVFEYwyw5Gx0A|!T)?=E_pHa` zL+t(}z7#n`@Zma)b*z~YP79Rm(7k|p5nuBZmV(;sV*t6kY)YDDM0yW~ZQ+_`^v+u2 zG1?ktEElQ9U229_Z-d`*vIfKUGtSmXZnf-=#{43jW0XpIOdmes`dKxQMqM8#s%_ND zGevZ=dGBXhd>#;78+4ddG_R6A(VrX3Is@{0_Dl3ozt}+%GtQ< z+kz_roZC>{Zb6hQGZEIIM9Jq6hwHDuuG>?E&5j8M5@CV!l5s#khNEu6Rd~F2=d0bn zoEhi8*pxOW{_5rzBEF&2&;MmI?8v7iqp}7HVo+g(p1lZ zdL-AcLJr7!5D&fKF!R)BKuL7m4Ifm&fyz#&uQ5rN6E*=F*f)>7$7v588~h!mmWWgy ztV~aOeu(pf2-K*r49+;3Rt6i8$%B34a^nD6c#;0c159zSXI~hBT=9gU1j_T*0G$CR zL1i#d6IC&f5xC0YvVCzK?H@fXxaAYbnFt%R8glwU3O5RdMQ}KKK+8TUT3Vz`aOr62CI~q{n$^N*4r!w;G`}gs9s+lJTRVfs>Zn48Llg~9yeN}<+9V+fx)p3EqR9qdSj0T zmIxv{GtNNwC(Gg7cw6om4ztGa*JKR`4F7r#MC(WQ_tDqwaSFiQcx%rc4%kC|4s|wE z9dv&lEi|y;UfSuQux*di_9rwDFoJWt*?Ynt6W_0=N>>?;ugOFE*0q!?9AFE%G_62G z15yZVG?T61fJUOu(7}_jxoZA3#c5}bvze}d7T@56ezCYTQeBx=R+#AhNQ_l z2~1A(t9gZadMKt1t~y9Nchut8h5~hlxN39$$=Uq0@Zvn8WZkjWTBVIBG9SB;?+dKymy0pZIc; z=?#1+J)>_eUh@5rJB0_=SYNDTduM>0^>y44rnfQ|4rKvVSgx2u#t8w!|$fW_O$>z^>{&!xju)t7(VDrFV)iPxqLz$b*!*yWrsE4OAo$+?2(1nnKs(kw%~>E z*?yq+kMu3>9vA0GDq6#s790PUIePMWkM*x((hIz$XnY+&AU)oa(jRiqdj{*9UZG;W zWDBARYuLQN64D#r50Z!PXFB8#Tj_BZ?Ol@HifujMbEnXCfS75w;Vlu(cbR$cuMVP_ zLoPqIB~Xbe?y|2cNl~x*UVqa=_k(^1F4p?k#&$lM#B?suqWjg1qWdYfY@?ZW>k+m& ztxdbP1{A^XYbyIpwNN?&4L52<pc)hsh-Om`*2e)&f3n@?Lz>%ECB7AqalbRQ;xWsN5v=h|Y|%9@8HJtIdJ9t0>p; z$+ACr8)65Q1~IwAc2QDMl5TiR+)-$QpU<&&Ta|ixkEuGVJ4_j+=|4VRCwJH#svm6T z9Zu_-`?W~yc~c63H6N;Z(<9YC`-=OuC!}hAnylWa$>*Wq#h;;uDUL$TdRZkC1@134hx2#luFHY7 zg~vql(m1w4&VW}3Z-&y&VqP}zVOy*D_YzM>i)Wn;(fMy4f>(xdHbV$^&EdzKn}bqx`_!J=_MbWUmiqwkPAhiyr`q)Ci~n zWnL^}5RIWAG_Zks4A>xB4yehR2z$+t2$;r;52(?Ny6Q-LkJ>?g!74`!P&m^*(ot}~ znLFz;Fk>PBH4*{zxJ|YN0CkcnCo_F9R1+_ax3Lb9%!z@fL*+2XkzcSCrE-{;^=|~3 z^>3#VfdlAV+Lfb+S|E!$CWO^;3Q;1k51p+n0Q^wEge+p6opnJL^=A+$6mzk5%Re>m z#4A!BbP|pm7(K?m2c^{(2Pp__f_W{coSOB@W>Q>#W~hz@NU!ZQ-)q=ASwYUUR;{EY zPX`YUGgG>uCjCGyp8f?R$lIe8OEuhJqT4%WgeG#~nQnLf+9J9%J?hW#go)zO(H_m0 z$l#Qdr7uCm7fKx?)?Fude}V>t<4T;2UXWZWb{r68A0q&sNDJnE?1K>f_y!1=7(z)Mu@CwPf`#XCW99y}^9EM#^{VcP`~;lE6u z>5dFWn6saWwL)mt7{@({ErBDjRGf>XIXdTHGpu095`J)s1wJgu5GHiqEIw0AYqTzO zh9sKmxzYDR?~)0n{M$9hvw_HujySF2#0U=Qwc2nJMC)pn9RvR)+Hk5Wd}fBQLS2^_ zMh|w`eQ_2-rh?+sMDOb8!95LW&hbC3!W;-PgMRwI=;SFU80I+I22;0Mb@GV9K0(F^ zoFKa_SMSwS+HP1(+HO$idN`mM=cdb88I@q$1fE(CLGswPfz$ySK@hQ02;8$2!bdfW zItZDca#8gHwUn!GpzfBCmZBF3l=5oWCG!GeG!q3XQXxC`Hx?I`Cwa1e5)iRMS~hSF zLTr?O-9Rgq0$p-R=kCY8tAa!mW6IJgNbLjF8gTxCf}c_9`$>BT!n46+$j-qIy~- z#R##N0AdgOy9u&FMB*~9?uv$g-RQ&n(Q18u@gE?kdr;hb?*h$shz^iM%D-Sgdw#*H z`hMM{C##;SFIXBF7gHevcTfQpqwe4xDoOECawl0w1)3QVABO0s8iLBK77$6ciwG#` zV#13Kf7YkZscV2dj3Crb5@d#CUPN4~*z zf0!@HgJ9=XC{Z34lrZ6GEAkVF#gliu+rKTb0<}#%33u}3_+tEET zNxP<>oM3?s;fpyXdb4?W8i5?GE9MhO&A0kn7DPu$Metl}b*+C`S4b|JTT3#K()mch ztK(J=-zD%>c9&OP@~!3hAMC=q*!-!deD9frnHam+{9FmHAG9HN$$dkLE+ZEW#a}O4 zZq1+G!)_Xn_KBXbPU+RE#vej>Bm)C{D3_Q5Vf@*jA7! zZL2vc9`pm>jeM`#O!HFg^7X{B@s2864{8KenwOIEfIp=Jp5Pg@(nU)zTcZfmEtJ2W z?c6KK@yln~Uirz_{m9gt9A?qb&Y*fAheo!mHcy9`M+#2vyOm!||2urUJZIY2?_#{p za_)q?|NRVj^qOzyQc+8xD%Ti4W>@xj^x!_v_v#H7Ojz?vfB%j6(Z1U!Ls>}i*o{om zz6D=wIsLI9RfAyCJ`wL;)-R5j>%dp9rK7QLx0QmH4&?Wflw9*as9SYZV;3St%Ih~c zB@g87M_gA2eNzX&r8_9nLs!4OrZShTu2I^ zn-7H}QVs;leFV6*OD(j2*Kfo(Nd`n?jy2_feU#YP>P#BO=#V2P!=6u(@$qY3b#NEWm?5y;mptWFu`u@F}{BeKJqxJH% z$)$Oi;PIY?dPhDJuTJE{XjA@;w|jsXIUv`)-g(AKTkFSxfc@`AOlJ@*{aej&foOHa zkl}}*!qx)O>$}Weo-;LtzYPv@VOHuqOfR)0u1~#Q&nWWrn7!4?JSgX_zV}bBc&?L0 zekDP>z5QQH)ITLA?NT%U77oO#oHs!URL~o9MP)8(>cle&t ztto)ynpFrj?X#zy@HP?yji;^PH23cR@RkCfA2tW?6R`VvvL_+X%6X*S38XdmT*##G zq@ShZ<3S#qWV%EG9~`J+1lxgOmj1>4KfnI*rbQsjc*tSzL9#AI(aw;^-vzD$X$MF) znU&=Ghd@*4BBJW#6^i!&J0bP`YiHrUE$gyq{ka|Foo=_#k!I0lQ5V=rvh@7D zk|5-+$%0H`P7tf%Jy8SlaDM1Rc_IQ@7Sf`v4Xe^ZykGpO;iG?#vCAr1Q!dqUxboOu zbjXSBmHOF0uVQyCG2+N%dujM1Kp!)%7*qNlpXCL7{pW|Yyy|Hgklo!~6nAO|C+)}m zrLvIbrrAaWzoH(`5#Rz-1{84jv;lTM#fx; zrc*>}{Jk!Zzm1W2ZzO8%YXXdOSl;P&*$1S1Q$X&nwhq_6Pi*{~`KcwHP%5TSBbr}o zyQASIgYEXV&lYQac}@5^nl5CEAD7-a#5g(; z7-ESOQ+q}IeQXpYbDmzh_AatwG!XfvSz7Qwf>J|ML;-yq(=M`PH1LWF8R=9Y6Kw9_ zNl4TN2)7#9hwh;%g+0r_sER=zl3;Dj|7NayDg%Znt6Wq~KTo)?)0teU1<4!~zO}wO z)UEt(f#C&;Mee82&5QP1`bghfxAM-${yQW|^<6aCIo?&tKT5^%=PL(+F@U4QAjfxfu2!s9FS*}$uc4?}|Z8l~{~ zJxyu_`QKF878ZiY1;c-y*&ZT7-2W9Qk-%4elD&_K9{p`XmLT7f7s3iAPYQtcsKNOH zZ>SpZg?|q@?T=iY2=(sU4e5>EE1t?g!0$xlaGZM2ps!{Fuc;UrW=>-GPqR?06F0Y0 z{DJ9tAwv>5@n4Nf^C|-#)qeRp z>Dcvt#{FMYQH+B4kXr0#bLtV_Y@|N84DV%@TpbCiDHh}u(~cq@6u7&mWfV=H<`!4u zy|zh_;U<<~$*I8uCw7)(FOR%_sgs;E_Y;pE{9x){YK%R`Uw%0sV?d(4?f#zvckC?G z``U+-q4*J&#)-5;?e(5pT(5lIyStXNwcXIm9ANBi>2MBht<6$xuUaW$>}=*~+Se}a z;7$%I&Rm%1N>iJ%WaC|SKAvd2ca13Q^YVU*QuD0u$@gM1_+ABzRP(fYQadAGLOBda z2W9>bO>Y_2X45nbw-k3LIDr_ zy}sPfdwf4O$LyTDGdr`pXEr;MZ?o2QU(Adka#)UQ^+oI99p94Q8^wFPe0N9v*F^hc znBzD6gzj5lbs1eAZ@9`tJ^YJNLI!yAthlz6P}Y z%a74@dec$G*_x8X81>6ef^S)wj#jaw@jeRe$8YjGjDN|>FTXR)uf^BF-P>6Ct3Hm+x}w>77aqL#%+^_B7~_DPN9g~>)fdTtTi zczr+4_5lxhpTxEwGakAoRpag-)6v6W%X%3Y@Y} zIhT-%rtS503IpC}YdA}Z5ZUzUe>0GddVwp4yWQStG;5 zSLr7|zh&AfsO}*GzUVf7Hj$HtntlrhOME}pOV8omG>;-&VDx97*Z2J%?>%R%)h3Q0 zsYTt>)S|8s7Kd}%6D~_tyR^)mdCi7@xZAU(4?x zZZ)D#l$rwzwaqe4Rs(=$hMG5NC##i|^`A?w6aLkhiRf$cM7Xgp!Mnpccr*Rb;U_dH zZeTDR{lto5rJ^{=3QUU=?!9BOM?)@CT|cc*j4&d+rJm8NuK$8jjzBEqEF?Z%*kjh{ zS2?M5$bj?yqItWBkXAWu=@-?XxuJPW((8g@Y`WkxhcHAzd~rR`9;!k2xz>^abO+J8 zgSQlg8)*&h^(U`Cc|)>vgDbG4=ni@~qI`jpBwEV0`O^-fA_jK}?)b)RX#ui>5RG~@ zaJ#}|Ms*PC-Ar5ytEsTqxJTT#1}?E-oZwpP)Z|?;NhZdGs(M=&Nm_uO!%eC_-rS}| zcV}9G-#Kt16H}vGY!2S2dJB?AG{5K4-T*kbU(*;kt9s8}vMql187?uRA~N2==>0mB zeu5_TE$v?ALoL;Xpxqo<_Vg&AmyPwx~g^+?YI>;A#Rx#)vU91 z@A~SbR}?}!;|M-l{4u&&Kbq@p6e7D`8}@O#NK3?yBVVwk8TEmr@ZqMvG7&}%|Agiq?;q0@$$#$c(=l8KY+2Z2r?#u&f@Du?-O2c6zAc%971ysX zR~Oe)Th&5vy?%Nn)G1umZ<^#4pBva)7hcBuZp3C? zeat8SsU@H%4qvEyEui<@9j4W^5Y=Ng;xB)7P9QBHuLzO{OJwyZDdgE!1s1jJ6YI!t z+~2ngIl}U(k8{=Wy){On5e9foNO%ajDfphRe_-Xz0(BEt4ANAN$Mxe|&sk?-FI_qQ z2zu^_8E#oUjt)q=KilwvU^g6av?4?qcpm+LU8(0`OWm^3IhPQvi67Y9j<<-W2MBuG zFhpd8?5Chmw@q+`ukm>GyTyw3(ra)U>y4Hv7-+ZCp+wwr_Uzo&81D1%2pOkjuMt-QMq{L$oeZ zJApkX1<klNBZ9w0LZm_BYU97>|DU}K}h)u3v@Y&H6k>+)G;QDx?3u=-4=i2Mt)Pm*3aU#;Ou5%G}VC(X5ukb{(+#OS=~0*>wK=aWI&rv_gQ zOI4%)Uj4_Ky_Cz7Epoj+DFNr)hd;}M_{1Cv*3+*`Hn7LVutC-kM-f5Dni2XnL^QZ; zXHf}w5w(=Dgk4pgvNVz*vpMz~anNMS#CKczd%2>RM;@|=0mvs`lV*>{Ey6yBDGz*r(hCX7ieFfNrM@c#T|yyxAY6XuJHx?rY&ydb3h4W`{1 z@O8n*-iBLphf*=HOb#jG`jzI=W^T)xQC~t&&@Um#)QiiNs!&6=?n|)iyWbly(w?0J zwZHWQ20NV&{smqrP+#{RRo(Agb=&DYR0~?_k;dEV-lp=%)#TV37K?Yg1RtECuvM3+ z*Y$v}qzJ0zbAqq;d)y6p4cPR_X{a#%JZL=52sZAGcGrsut#~KblDktIupO`(a9WdC0 z;zEvk6K6+YQ~&wH6|YSo-Gf*VU96!YRI#f{vhhPph{4bakM+i(T^zBHuSazHp5 zMH&*&W?Z6fd@pmgD~TcKg#DBPRd2{PkN^6ts0i*vb=yy^U0Ft5Ds|&py%r&}dD#Vx zZ-_K>RbktSqLBL7AU;PmfEUI6cFfUjGSYDRO~xf_WL>DGNoT#q0G_Uz&dYoyF&fl#Fw$w{J*uVz z-_*wox9r9v+H&k6&^rMOVNmXFyjOC)S@1LLiKn@!X{tbd6xXesd$cV07^dYM@wREW z_};+U&p!6kn}0H|Z0$6lXxcz7;;ck*BYJwX4CgnD>>BK)SoG(?Ehdy};2_wUy)u45 zCE%haCywR;z0tx)HE66*(MW*qdl_QIpu6 zdttJ-611dX)dLd{+7imizJPWv1l^5Ph}W-8N23BiX(4HG1PvK%!d;@ zUJ03u@d=$Cpdp|`mkY9iy%2Ah2tpJ4M<#R}MqiTImHC0&pXaO5H59z?WvMoP_={m)Wkpve z>XyIZ^YXQc*hn{oVHe^mz6%Mo?;EzUuETNN{gpctL&_|E2nyp{bN( zLqX}3T13Wc2uojBXnr-?e4zQpdR*531BI%Ie{e`itNH8j zoluvNAh*23A%%NbF#@R*^fp^P=q?H@;nRM_&q&}QWw3~H;y*z~^gcL%P=Rb& z{3poW@@7ady_Ru9>%Cx82f^Kl#W__xpFP38ahSWSq%NP|$PA4P{s#xaJ=^brOqU#9 zy))rM#`3jP2NXg_m+Ee=vRX6G%Ju{@V^_M){~21>CIn79g>7#xvk9-ix($6l5jgyB z!_ReK$96dba53y}4XFWKWMtut1iEG`C+EF;)l*EicSB8n&#bV~wXe60x1YN&S%+pG zoL=0wlnsAj&VA%K`Lz}{is_AyGBatl1vrCNE|(jvzYR-#9GN(7mfif6y@ct%VFjTT z4(fPH(`fiS*K(Dj(lE4JVi(V<}gaDQ?)rZ(qYq#rd;$r#upLBPW}~$DCQd)Bkr5E^D(7mz59${mn3;`74x@ zVm|rfN%%eDLr7h?T*&l);YH?YIa|@yjbab*pHr@{z_)6N`9cLIyAtaygsW)8`p5n3CS$aKsZGIW@ z#wR@4bxk4=y&#reR_p6WQj!OuoFelZ{F1{Zn^(`!N%H53#Jpnjjs}5SC&__RLvwx3 z$He3aiO#0!G{Z5y(E4LAP^#0~K-)VhSZpbB1NxcQ`RA4=Lwm}-2uxfTn{x?<`g(L`l;{SEQZaC8*buc%$@RN%#Z9NdUOh8 z%{gX^8uI1HA3RPH{;KjM{+*x#9Ztri3oCgEVdr-tA#9h6T=Va!dqjprSEtlIxg0X&9a3Q?&|p{bDeYCE_yv&70IF6ScPf8sz<{gUij_4)o^lp`Xi5 z&a1_m>uQoUXt6vBcr5YQHHxgfFY-QU_&k9!9@SK>8%*(`z`dvDs&$hYzPO3RKAA1r zvE!T&bFK5I)S`9j?10AUSB75(W1=oDY0|~naF0Dg$7@SvXNIzg4{QQ|cqQP#(rgoT zEvVn_?)7onSScDQ_eI07K7~_Ecr5van)+s~Q`d{IDUCd8iWaOS@o4_K*I+G-a7z zH^PJGHsG1q5MZ}C5TTGbDHikZ@8Fncr`^j3f8 zgJ5pGwhA`C6K*<_Y~Oa;dKAT}loB`7be6=Yx0&2lA7mZzV-rtFp|~fjt{B94*|q=h z;Cu;^K0PYYryJHn8Jy_;j6TpXwR5V$kryLOg8@>L%EaBsgILjYHXn;&Q$R;u=X_IC*$+Pbf~ zrziJ;#%)>^+d9TglZTYeVq`(Ii|^n`3XkrqlOsW7o^+xE^;dZr2B9Iciuf^W7N)de zVo67YU#y&Hfp6{9?6-|5=ZzCnds+7!u3GO!Z|->;yb0s_v{Q7Jjc+ZH>dcO6_dn2- zbtZSYXwn});Ljm`p|T1MCQe?VVF^tRHs}lT;B^yQ_T5^8I|QN{XPOeu2VWQIxxTR; zVvcn@iC(uo30L95xd2X9*0`3>fu>7h$HndI zRK`6fB3mM(5y>@u=v}U)*e(Cqx~Qlk55ON3d1e^|e9hJu%~La~4IA75x9Cn)I|IEI z#Jr#SP4Epe_xc5`XBlrjinUYzLA(E>JB14k4!X2mu`eqcpnFaJC?V7RwjEwolY_}c zv)S+u*DG`{%{cJN|NSR8l6bT&IB}7TL?ZW{U08@){TwHpyQ~k2zlZkU>LhLR(0Y`! zW8*CeF^QdjZ{~~5a;1004hK4$;{`sVqye%;3438iJue4BPv4sSo!{YDycVs)(+JiW zD5Xf%$&HhhwZJB<|3FfW$8B=%yRl-GYz35;>92be>fH}NG%Rvg zj+Vv66z|DpPVsks-3sqx63|o!Ww;aDI{BkiJ}F+FKPB9KNTm*(&m@XCjB|3KxcG^| z$G*4w z#O+wZ;hWBo>)89?VShAEYh4#S)9f{Tb}Cpyw$ef4cyemrF$~J;_ul}F%e8gSa_f?` zQ2ZekEPP_3dy&UY7wE+fYiQoJ=1u)q)1eRax5?V$h!huB$&`}4OT!HuBs^ju;*YXQcE1pmI=Z!xk)v-2ubtSTq<^-EC{U`w=b5$he#IKMYB*3Lcif{v>tpKvg;BmTcj7${ZLZ$U zFB+2CyE>EHsbX%J1GcY$%g&GHgp@%2cCR&JyP*I_)j(__gO7Z4$x2T(#09k*6J2GyX^&Q7TF|8~{`+Fx^0~y_OYEs^=|LJB3i^g}=V%~ut+&N1f zlEj}c0J+L`p#^M&q8LO%=A1?pl*X|g&+fPJVSpO>4l^p8o&Eq`3A4;AJ+a8xS~~OV z6-Z1padT?frvoyBFMwBp0lpjlEzPFM-M+u^XatB0jHX_0ntK|blcii{13TofeS1

    Eq-M4+WzlH$|i2a72T`Mx_c(V2%)mJf$dilf8K_YQU=NR7BUP(VaWS% z8*UARC+}99T>2?Yas%q|@H)nA0Qf5^1yaQk9V)`T- zonq+jxKuSlB3ke=qOz>PIIKDE+506!rd*l9l|3+(rE$iEIMT~Gm$ zIxoE~BO^^9zvHhPjY1#%DCL#dbc&55b<7}`co&5(-?|h0G4LK`@#+6LDakO7hppsp zn9J7_h0d74Jri>j9u8caIr5X&0@)l0J~LqBhLp3AC#dB~&Wd)SxFPOv?x-@}g0+GD@3STn;@DpUfMpdfh*XQR&Jvvs)AkgUz%G~s6r|3U)sg7( zl))aFs_L)XD<*%7DZB@5wvSpc_)^J*rxLo$20DEI$kV4KRv?@9N{NS;87iP_iJgv~Qd!pi6bhLmsq7r| zCB*hlpsoZ4hJ5tw+ZWuW+od(FcYcMl?0^z{y!{Xw7IOT#q|R0;3;+fr2pN4a84_Si zek!2UpK^AYC;6Sb*kY{U?L`?n#(zwC0fIJw+vgrtlt!@VjPC{+OSiKUv_L_ZkV_x8 zp7)n9QRe>lnaQ5_Kh9nQdL{eU9@DKz@mJ;3u! z!p+Z2xd9~vb1xp^Wl;cafiotUl@gyisnc55iW1+RW^$#W(Zcmbi^c30V^H(Z+V3Vy zetaddF2(#8nHHC7N+5v0-My!45)d6TkSrFXGgb@ajE`G#e0%h%t+%IG)Z1zd#s9=H z7iCn(ZVle>6u_#F`*{!AIhpanPY23d=$%G$F5cNi_rXE=QV*o#7fvRsbBTlM24Y!%rH^g0RQO=a*4q&EXFjyo`xT@6+J%81&s@{HKz)&OvygnCmcxr zYRP%l5m5uU2LlKC7S)IQE>=-p@o--CM*ZUCvT=`JX7zuK|Mc;_rN&}pLKraetFrVF z2WI^wp4ILLzko&oyh`Aspg*hicJA5zc~aOG2j8MS*snz{a7R?&yfEVxBl2YCo3IYy zQ@xf|`RxOwSON>PUa0@g8WG?g>5>p8DUMR1ssKjFK|muUaHlGHvWN|)Mo#WEfuQ59C z=P%I`Ck~8g;y^hfh6?g_+~04Pbx?$E?Rf5nIDCtJNBSDWkx*V5J&&x4#u4-B4O?e#ZsjWd$4B+BxWgsHnATLD);A zm}qlhedxLv;2gb>0!OVjV#ngbq|vlCqWG7jAXA|UR%y%xKB985|M-JeUBu1@5MLS3 zet%h7$HF-~dqD7D}lmWkx;j&jU!DB_j=r^iK z)mh^Z-M5VCh`s8LT&xq?KseE&{Uel-8*?AZP&ja+5#geHV&VO^ z0>yUieO&}{_p=EW?2ZmjXmBA2rROg2UJx}3zOQm`oE&?)#s8 zPmH*lWDy>jQ5+J@9$2ojZNy>6{c_)@-(r!~WZa1O4+Y$Gzle2K7{O7?mrk zE7lp5>h!2Un)*=bEc~W?v=OgWlhdakf`_8EwFd<_9}R()p}^?=P~q9GG}2BB%@Nd7 z3cMpZ62JoQ@^70#)Tk^QC&xfW5wfwCjg_1<%b~QqN%n7Z0GO3{v)a)r2{f3Ur;RUI z7dWh_&AJ&b2HO>RBETb={Ts7}OUw%bMtN+}{i)naKfAif2Q5VHM+6&s>^IM5FPy;q z@s@65Ki(p=IxQ&Tj2rc3ro!cY(7=ga&Xmquic{g>{|%;~U0INN4I{9?nJU4xyH3rx z39q#x%@}m)2wCcKrc5Zn$~vi7x1w}rG?@zD5(rqX7)H_Z{+5jqC?<^88vPmU_QW#t ztLfyeixPf>Bt0!A3Xgw#+hhsC#d>oZy|w{b9%%$%va~%P-zq|BYMGnxg-K{JOOO2( z^z=KoiO=p3)>NGqd3shTRSs>Whfp`+-Fi6#oF%!V`wQ5pF-;FzEE^BTqWcZV`0-m^ zS)==fS%*RQJS@}5Yx1S}>#!l-<+LU+=!q-bz{}JdHGb|D?&ScKfT?>;r!2X~Ac?)* zGu2P#Om_XNiFTAv5sjC)YDiFvg}S{0i35@L6!(3`m+5epH*$t|rPVnYPOiDeZe?AT zCCj`4)7+w#gL#;2c9gY@15@GV9OK+Zou<>_dw99}Zs9Br?8irm5nFPtxVJrIFbmfh zBh(k(>!`&jl;$*bD#8+SFnV>GjW4<0b_(%344-au2#Ue2NOBbSFpThyw5yWA0Mra(r6YVGeO@!9PgKNgjsgNckKh^DkR#O ze$EDomP)ioKV~~nVbh8Fj+PBXsNwBhvJml7v?i()O8}1X-whHooE~Lk84_?L zepU5%3p2lPDx~YU+72iB#3v1yia;gPlaPHWnjU$NcZ}&g(EFKY$U1qfu4w7 zDR?ilNdUxH4mCx7ku#ZX(@Pz%-RV?MAQ-S?u2?9hVz>Dq zHubGAF|`j#s--J^nq?M0^+-Q)QCX=ta8P?P;rF!LbDvGS-ofSFWeSrGYOQ|0gRLKsRdHAfxpc}!K`(zP7CoeBPmuPjST*fBVkGu~)FVq?@T$U&`iFO>b$ ztMRoBAfqp?yf=hG0Cj#Fymdz>2ozHqEJ&Jj8{;)%hX3wPvFyIm7pQ$6vse~*&1+^k zEOpisg=ZQv6~&X|X33-8*cg|MyB12$SxZ5}?hNMETDHZHa`D5VXg%W5Ti#!IW>}Sr z0*@FOnZ7Yv?rFBLq#X*6+G>u9lGGd-C`f8@8*627yqauktPETzk^LbF{n0lV)6oc! z!=}7dNQkNf^$!@R^beTiYFX05(4y+NFmMAM@uTE-XFx_LAg!XtgYo}kS%)zdDQRpy zu*j=4P_=cN5W^52IoCh?c36k?R3Li50IPW5b}kaP*ET9kAKENqsX6k0-Qc>BI0rQO zjy*ptS?Nk%Sy&V~Sq<=7u{sM_4lJ4vL`u>NT0UY9M3RtU>=#M%qb7s=R)QLLO^cHK z^u~tsbdR6H$GChzj1>bn<}mEdu0jER)D?gIU*hGWMjNQQk&~tRGMNBrNXFQEBdkK8 z<(Y&0K*Ixw^!5Qn;zRv%$50;!`y@+<`80!s`H573F7Yi9v&`~m^_uaCQBsDd8qMAQhJn{iapfcoryNmOra~B4fmyhOGuX3wBd>%9 z`+;4Swc_7Pw=G<|w=KTjM@Iu^t;q z=}tFzMep^2BmE8O2@$~w*n}bavF?q0U&15!3Ag`P3%LL9i4>JInc?~q)}W($@|R~1 zYLdK7eiq%l$ymx&*VRn{;v^N^T#=wIT;k}$P-{#9T_(B{oCnYBL0sa+rB&R>o4MA9 zgp`<-V*$BBCfH;w!Gs%)GQB%>F<;=YZDh|o{VWpTWc-**c#*u6HSUmD`3fp3tn*_ioV}X#EhGdy?^#TpZ$e6eamdahCiN{=j={HayHe- za>1SPRY@i)La;hXVc01W(p=|Ung#znyvgcqwHdi;@us0okQs;UNCn0b9Ms~d}1(vB@ zcm&JFdUpcmt~Gb1r)mTVBuMO&KA`p;E*|gJ!SxFp?)Gg}8!%+z|~klX`Uu zj04x}4er-Q=NIYdy$TB9a0aw+!JboW|4OEIi&FE=cNFN>Z21gk8L#ZkdejTc2g1N3 zbj!`;_|8I>_z9kC-E<+in1m}BuKa_KudFS&>a8u*`T$0Qc>v5AKN+#F8Mv5>pY@0P z0-9<7%k%u0w_XWhP4wSxI;dX@VxsoSt3a{+K3;3WQ*R(~f?r|z6c&kkI9}g~wG-AvSK3*U?|Ho(S!XwEP!>_&(Hw+ilKs7JSK$jW_W>w$a~My?aSX zlaSIgsnYVpA`LFxyTelHx+WL#Jez}QN`a1LS`Z$=quJkIaQ+?ZU$Fzl zSO<8mnekT`IF$^4MPj3pp`xha#5imIde;H8Y`_q-oJ}llgqsvK2EPm&Fu)5#HD`ay zOjV2+&&HJ>A!N?R4HT;wfPzYm?s>Srjj3ivMh%N9S2xn+==M+vEg4e)92Qy6&I zusV+eZ~_IC1~O4h*sPfoY{cKLUAL0?7{3|#r=~OjRP%pO7k*ufLx9t(BS02{lY`US zY|EaIj`dD}g8gYCvlt|HL`YDPa|j?0!J)=IaTDRJEtG4zgh@q4jbl$`H;QOyHyY|? zqs|oS_it=iQHO)#MiKd<#&7bmjj8}Fn0x-!wxQ!xg!#Zo1e`s(e-jkeUy#?g%@|p> zh)8j4Tu{<#6fx66^=CKwZA18^Izk5+uof#9L4hiC_itDTxxGoSPpi?p+RD0 zp8tSlEei*Oz^^UQUYRvPy#EiQx7T7h=3ij8H*YznjYu}G9*G%su1iiduA8+-0kbqM zCK<_zD<*ifC}4{!nyx_8m3<+6MUa#>rv4}#J_Z=_~K;#F)cN_ z-i2%}UEs+6d%9wjA`PeGy7k4Bn-sdmC02%3Fg65-C^Kbu7q(oDohI1Wubu?XKRI)? z>b(1-&Ec;^v||hg?!@Ja)6~la7;s_|0V8LV#*KcBNJh3j(3IJy0~2bp;*6PT+jVLG ziS|EJ0@JhJ>l@w18UMo2z!o$1&VQ0Ui)dYj$brbeG45 zD9}~KFJ07~FS58bd35RLHdkcab6f0gDKT^XKu{15gO8k1E>@NiJ+WlVr;%!4O;5~-?@jW;I3Op^2iU}j0JNqr5tpux7-M^kNI*yh+n}v9Ko2P^p)SPgXW}+F z5Z2Ze{Msq>mecH?S&4Wn^$Ckj6k5jMq3uXQ>`d6)3}76Xz*8(ufxR-5Iw8p0q#RjI z%y5`2m0~`SW}Ttt{D*TYjYjH{UR0jGuPU-MW3;cM@?z&6cHty9IOhEq3x8#Bhk+%{ z{$1@xvJn%ja6;sP@Yj4p;4oKK$`&w^U>q=7W9B^(cKA~yyxwaG?XhFWpoz$uK#gJG zt951}c2VnMG;wCrYt!%7^vC3iJO_un*wVj)lPRbbGrvjrTpSErPQKX;!Y&Q*R19$o zru`~BGUD&~%VV95n{W9s&VtMnFz7NX+*LHtmlBa>YHOJ-9@Es;to6sk?6?>hoEgC~ zb-CvTB4KpF|1V{)gGsv4rdx>#f1S$xh3Cnild7WjWb3#a+JQ6{sRAR0A4v5Va(=+1 zUBD>2wM2eHv$rEzb7Yg){;u~YX-`R|1>c0&rte@PW&SL!YhZ2I`w^K<{u*V`W@5V} z>ky`@-9__qL(3dI0ZuRVEJ7eR&li7o9k669!Rcec=O)A5&37q(UwSj$p>qFA9Fq-7 z#lNu$pipJ^jE6D~0PsEe7w^~H7*(=FHXUR2J1DJj@Os+-g`NN>;zb%-kKw>yT08o! z^{#KH#22-a?u;6#2q#;+M{*fpO(W$SrrfJi3EippWnA0VIQl?>wKGmL5m8d(kWpnL zU(p6qO~jz=RjjR`!E5ymIL+v)x2E_rBA{+~S+(m3bF{OI=P!AXp{lx9TxqKR9U|>1 zZhJp)jo7|jnQ#E*n-K#Wni1Ex{#??t1onv9f`5@4%wBDZ`n#F8o6R3f(%e$3c5uu9 ztse%wUizj2lZ$ufZCds{lvfjP&HjqyIl=AalHI?nXq#iI0IZ4A{nIJ(OgaMFs=Z5! z9DR32;@d6@Nu9CO5Y&M9RAqB5bVPD*?dSz?jHX^9D!Y*o{Y{GCrPY_COCpLqlF5!c zaQW#9w*ykokQmrmIh~W&HT`NQy2JsfM(Z)lqc&{N*N?2S=zuhzqPd*TRBP#>&qi_U zhLE$2&h*#f18yfANSQ~sTbuaqek%KCNtbHkN_Rusw5e85qqZ1K0Y!-hIh>desW7L;9yp!pe+y2H zhND9&E*zsY#vu*KF^loe^bw+2PKt{~!$LCqCaG5e4u$q}G_cu}MX(Tui9=f~K^9(~YD<1RXIL z@hqw$d5d8F;aZYfyRuov@R*GU#86mj+`=~M`eTg;PBQc$B>}fgmob{Ac&x|hDtKM2 z$UQXqy3if{5FfjDKQCi3{d2@J<3vjO^#Gc`lo?MK_0@5X8~Y9OLqX+912LqQ*@^o` zG}v9iD-XjRQW|@BKPuUk69aNo@R}BGiFdaCJ4HvjQ88w0q}=0<07zw*(u%~#ePr2Q zRZ(6H-7el}N^&mbk0dAG2)Gq{$BsyZi8g6#c_l(Z%tWvh?uL6>R~s5|tLw8HK{_P`y-E($Tg zj6iYp+?qeHeZ5?jC6Di%nj>(*uidL5>la!T(IN3@tW-@Xjhw|su{CZ{y)5$T1=NUM zpeO{7EJiu2@ff#iYXGCFX|=@39$gS^A!P&m{hE9QPEl*o32xOV(hv0O1@v4+N)rSJ z2zQ8uOk%nyfu_+wD9r%g=$<>bl}utcCwYz}NhD+zLeymvoBVD@UA?MFobqr=e$GY? zY~8;r%I~GZy5MadwJ)A+!Lo3Fli0Gc{TkIsyV7Z-Sz8V)80jJA@RAH#CUHRxRK|g0 zd^VH=7kXyBo!!Q-f=SPL)L9F^g1%O0|G7gd^8!9xWGLt2zMG-Nc;>(7XH^+XBlg{R z#v7kSfxvhKZA}gbuOu3Oc4U7giNu>gKluheYh<}V34>6>F<^#DE|v!w+J+hzU8CY8 zwhJEBtdS2@8}HjV5~_GIyP1!34?-F|iCCazU5w~Ls;&wIK!)0B!m8+$t4S@o{Q{my znt{qGKR(r}X@XGF;~KGDk`utLdR4L4r~;TuE}_b)RWk>g$As#C`OjmDP-%fU^X*_L zdr9pLX~?6`}|24^RaI*uA=@@psvzF!z!pmX&_I{M&WrTgIFk1 z+2ni_LtFk{f+aGH6guYcib4(y^PJg!p<3mBJ>lpNrj&Cjh|kbkN`JiO<%vWH+n7Q& zqO@4{g86*6ziP2)oMOyJwQC)h@|I3|f73b+2pTdiY}y8uM_)$9gAC{@7WU8OIN*Of zwN#&>=(^DSNY7$%^@@cHT#|C7iSV{qYa$!<#Ps%c#Hh(|HVp@#AAmYE26V$^IIxf+ zdGLFRCx`zA227|v@n`ITjH-_0BgD}Ce_UR|@@eF3QZZevK7d=!M)moFO7_DB4xa8( z%bGR4JQ=ohviR38Khf5#r5Y4K3qtFQlVhlQnqYQ&p+N~$8B)2jBAbwbk~QFVoWC(z zU^4#!8MME!Pxk(uP$ZRHw$C?UKFt7q{laJ>spqk;Zmh06w!Vk<&D4z5i$9rvvC^R5 zk>PpAP4i^cx5uDrC4^U6tPI>YG!*(eDCzBn7f#i!9d=a+g-Skxb!z^j0!rWXmdCzi zWT>A(AA&N=<1L^UqWufXlB*h>)cp%LMDAMWRYlSnvhmmIj5gubrkl2i5HfYJQ-{lZ zTDHZpp{rm;^kvbcK|g9@H|QEAS(5s^+}W}p!25$Q*T}5iq<~u+)5T25TxZH!Imh+*9eq{+|cVDi)qQcMbxmRKiqU@>y%ERU#<~l$yIN` z->8Chyuu^VE2 z?5jGk@IH=1dgga{wK;eu8?oqPzUYpE3sFl;+;%_ZO!yl>w|5mat;oR0YV$V&716}3 z8@nZ@AaC$ZNphz(;qbzRGhfmwgvgX-8E$p#Ym1}XsnOte?CV0N>~fc$Q`)*#naM_5 z@a5eN*IsvE_-v$$hy{UzUI6-jo1~EVTd&VhNkFb5{5;T3n}^}$f6Sku?)ZC@$Xg~8 zo|-euHWR&3(wwE>(f?-GJI;=iSjPW`6qG>v*2GfM|Df&Cz7n?Bx|^oMS2rx3yL=p^ zCMP24*Vpf?vHQ=hl(u_uLL;t(UEnW&wqrb0#l0jR`YXG?3KY3pRuyv0l+tUU$MSbZ zF&A4~Z`usuzb=$FW=HqeMG#~!9 zXlyjZRuB5g^{#Og#8$g@Er|RYbP5VM^i;*RusWud>RV6N;)mNcitu~umDAk;^7Pcf z5z|cZ&~bgG18+Q_3clSrqAdktstf=>%rQI3 zo5U)-Z_~g4Xl-e-xdoCvr;jjDlM03YdwiQ|)fP^SNX-85mn4CI$|0&{QHv#$Kd5L@1CWLqcU=BbNkUl|Cc=yralc zFxrNz*lXS>H{#TgY*CSjicgZu!tazx^d9|jwe`&3{{Xe7DrymopxGKRdKqcC;9Toz zB^sHCCJH)mmzuWP;?JG;;(Bm{qBtEUJr+#*qg`?{kT#?sv4)vl7Z=9SQZ>Cl${ zxyP0~h`B+T0=~C4L)Cgd#vkJ?a}qTraMoy>I@jLvvVA#*&6IoEE51ffN;0ZoO3xR- zN>+&|;z~?fT=Pmyek1bAOn#f>m96%8XzQuzIO^*0AuUzl`$@to@U2t|WG-Nh9GPpr zLXOPD|E5~QvsR~C^PESb0)KO&rvk6o*H?t^Vg3Ifw%PwbMD(eo3X)J;)j9;{tX5(g z{^}!Yq~lWkRZ-{6h3yMe`kD0$^ivFT^(`X4>>+$mB3Uu6WYrW*j%072pGjq}={{4? zKC{kwUz0Uzqas9TEng!(w8LH9%7$9!j5`Y2!N~a@Pex60Bt%17PkEd+{0DHsPVvUd zMiI{FPOb=-euY=lZ5UUyx)qIG)2*SXMSmlUm(_WeoiljN1j_GeXO=R z>2ty8dMe7v$;w7U=!3P~tX#9BN6KKvOo#p7w;DH5yQ-ebIzq@rbj}(`0(VVoL^)@T zl1gpKz{-h|N6N-n&GE_e<)g5%uKwfv=NcNJj*%uD3Vl8dV?Fwjv)nZ^RBQXF>%)6F z-7`(5T&S6M;bTlqb*rX~5Hc2$w;%l#T9XxRsR0*xsa7*R5)XBKVW9W;NP!X}n!V;s zqM5VinO{L0e6X5&gqj9R?z?p#+r%0xTxdC3xPQWRwUc246pw-)K@C? zS;blfmar}AI@!@8bzR?+OU>4P&NuO_&(1d?gJtK_xW|6Xr#L$`0Kje7_?5Z=IofIy z1o8{Ho`b~jeG!mCT?a3|w$n!}6e`Y=2};oRF?Q8TgsY^rYBs)#M+we+yw{96pm{Vh zA7g2M88sGpv(PB%Rice8WOmb{9$Zfh?d5z0T`Sg>0ZUVg&5wny-su3e27RW}q;RVk zUkl|PY>;d1COxWbXTJ0XSSRG+LS8PYsbDU&=9PttjeKUC_2k8^a!P{v7pT3w(fRU! zMJT*adg+%GT9u_u{sY?a{Yl0F4hO~p;CF#%AIHwT(SI2oX-s~rll)%^X+`_-*ZRFy z8D$Q?Nr!GbHW2O}l{4)+;y;9P&_7`pD4ntvZzfcx4xQ2+l%i`&7m+NXGbdCs2Ia=Z z^6feT8vOr!xccLvKQd2gr-}lMN9HGOb2Ry~Y^6{eGAMv!JeKCJEL2ObD(eAMOlUo# zYW2R(TrN@C(}o$i5F-2k%D+&#s=^kj?`1#Lt5E+IQw)JlMn3d2Z|5wlVc+Psq-zwh zN77KpNz?*4?B%-G({OG)G?^C~`$>-T5)-Pr#low)gVDA53~dz>7sB3Y*s;g1o^U3h zn5T$I3|38}`=M25tqPQ($fgH4qE{@ax#Z{=y8dBJ>a1%cRZaZGw8vyKmHyBV>eOsy zOAqLvus+@^NT|;Gl2F}GR4jYKtpS3!wOODRe0G38`3PzPP{oCj#9iV$8KIqeHjQu4 z#QFw_dN+VtHxP`W8~BJ_0pXp@Up0rj9q*}R>+(@pedyMUeJ7Ma_n;zr<6*qN5VC?< z^9)4S%d1e5g>PxdpxzQ%XOc29@J~r-HQm-Y)hGgGt6MQCD6VCz(vm==R4#vY>jZ9f zD}uAS^_aaHqAF0``md&J6$1ZqT;8l+L&cJYT5jq!b&TxQt-RG`C|OyNAuCyWk2jHe ze2M`5PnNIER~WRk;K3;qHUIlt9ux`Kzk&P9zS`OG+JI`F78J9_RdJ$u=qJ(&q}sa* z=ZL_LygxDq?kvk?YL(GE z`$i`^2i{f#I@xQUs&(l?<+=n=o3Kp3wX%UH%0w-GPAx`tb3n~xF6@n|!dW%K!@r+Ns9o|c}vp8w{`C&4^cz;n%Wq)z96x0sk< zHv78M*GF>Dqc&AWpsVZ&e}p^r|KsVa7YgBEc1EenT!+hmEE1mg2KGH>So$Gd9+|0FT~*kuvhj z^3p^dODKl%Uz)gZW=l8sij{8umO4LL4*AE^^6k9)dBv-Wst(`)r}N*eDL1KR!!PB# zw2@R)KV{ph>Qth7V|sjL=E5;F;9-fpo)=y=%V*=*0DZA1qX+ z)&NbIxSQcKWz|441%ej%MQJ;b^(lS@ksx;qT$;PZ(6RGRT~2^b0D`uMEg_&D-`EnfNfNYb;moOKeG>Q`pjD)S8)9b6|4M5ZcK0XO1K9lA169oIjp9#8 z9mOsm5>@f)nVt2EfFZ2lPh!P;Twge2-XW&^zV?`7v?*&{Ko*yNlxZJ7c0s$UQzDE> zzJT9ft6Dq5ER%GBAN=j67a)qTyHZ8iGUv3ZWrhxr0Vlx}^~>#l0dBpCRE$%X?mLJY4_B01GD?tXvA>Ya&JE^752=or_WOp+t<8{ zv1zQ`Ag=!IYl4lgNTEEX-xve6&_r(iyM5^8Yh?>Tzs{xWf^bYF&`lOu3QO!y8mLywv|0MAArk=-D_H>l# ztH}cxV!~iKHE}lZ(+e(AebMJngAKmhd$^ryyZcjHY-zZqy7SI;>{3|vjJVBSiu-La zQ{98%*C}GDi!M}H7=9uCF@GLRp@CXdN)NntSWjHvxrjc#Ic{Utxtq1s3*MHk#cz2N zdVUXEUZffi`S;^lTTTR8vtNVc*;Dd=d(Be|Ou4i7(nmfs7Ae#kw*OA={NIKC(Zp<@ zXxlyi=JL2r??gJ-ZkV3+g7{e2)#H9QV_+;$x1l!a!;4(BdFjbo?M|KCH?%qGZ2mt^ z_^{D%%l6|KkoWa}9JF?a=~~loVe?KcuV)!C_D)o8$q^V_Hs%~Gw}@dJ@@7hd%Eo3* zjsIh29NTQSOCPh?nCNP46j->ax1_1EHORgp zHJ8e39zLT339yM4^JTB1NHPw|e$=cq-Pk>C9-A6&(HOm;>@i~mGIqsQQ`fi2-HTi(Rz7~z1= zOW(m9I!)=6XKVD29+XrvANPc9aI#;LT?TuW*vIUlD;^;`RbSM=jNgRHze+g z=7XU4I&<0EgoQ)NCPBuZzV`H19Lw#20`*v5e(_#rgpmrC_-^gm(sitp5u86(o{)ar z_wI&s0|saN?kGyR`B};g8tob37sd1Dga%H0tfcaHsYwVeIVwKd2b6Il!1=VzMZF!E zn}*e9LG#$_Byo{%B#?c9F3NLJh4Jc2zt#0{=mt-*dAGz`=98zJ400s5VehwVN3*L1 zjmlG!W>a@r{?1x!8Io{#9H(u+(#zV}G?sbHZWkA&`nDNa2cd6oi$(0bDratu>v(Ln z2&y6CB;%Q43p%IL>_z)(Fb;6XJDEQ=Y=jIIO6TvBW8n%kulRNg7w(A?ydUVW9gF&Q zeBP;pMW5 z?eBAv--seZ(l5c*(n3>@C|OdEjn)hre50d<8tBM*#a)2!WS2U^Qg&LVkLgL z9(26@fdd(w1(>T`m54nzszMP;1UTsW$vb_zo!u+$bBw7hgmgMp2D3ksPNA)GkCdU_ zaNvA5ms^w65t~S;{+>zDE0fM;d`vfBO4xQ4PSjxy=Cs?){J7{>#o~7+{Yce9jE%)f zsI-RN$Zdn)M(9tF?ePKjO|$D&u>9R$MnJ)Y30i%WNvWb+bQO|VI;alkfPY)5>JdAe&h=WHH-h^D38kr3vcVnjLzjK zvOU%>PdfB(u=S^NLS*4$Vl6rVM*cREE}tLPkPIAo^Oajsam=qd$huZ46m1^eD0YXJ z!Is4v)e$ZFFN48NI|M0PVtNnR{)`|d_tNIlAhV>NQrq4ONm9$^W`u-MxSHY}xS2)s zVB_@G&F`tav*#j?nJJAl%w zNHo13b42JTA* zj$xx@mZtu`U1(-8%@F%IM}v=-I+R#qBEC0@%ml}Ye6^HnfmgL_r!2}Hk=>P>PmJ)u zboQjxTr=-S1$rbze7Q-!FR`AeMa;F{G#HZ2#as_Ke-Z1}83e>dJ;7b>fbHmY3I^rG zJgqNmu1`K<-qZ^D1&w-3wA^9g9G+4RsT$86edLB$i)gN&jeIfc;B!0+Qdjg#Ia*qP zs;do81)HgT7&4D+7ZWiarzs3yB>(bf*l&!|#=2;q@N%Q>P;YL>7jN}?H-vZJtB569 zy?+_GY$`G&`gOY9&%c7QvkFC@=rbMsj;FSdy^N$uBi=0{6q$Y2a58;xWi|(tDVVU` zD*oik*|9<_E?4G-fZr_6ESsQ6Ze$`NSA2)hU#>BPN;mTpK*(CUsobMo^S~$LCo;l^ z&s?YPs+ZfrINitDR+LPpLitk`A z)&Rb$evQkb7Z8%KfBMzWzP=FQUrvWjc4m^ZF|cL!+`%)cvEjdNsi{40zti;w#F z>Ie1YgOIAj!IG&q!F8fQ z<>yN;A@|&?p06ungabGb*oAibSHkzq@hj)_XKUXaGweMG&3LeYdsQyHP&RxST_ zQqI@IDuz&0K-uKl6IF|>72kp`-$x9(0^waGbc`qOt`%frx>Om4JbnD!^)vqn_@p3Z zYZ`IsV}4Zs>DHdA#iRcwkQyo~K}g})+rRW28;`ymZ+0v*S?Q0*NK^>Z*SA9SG4!Iv znP1-i@tCP%T#N;BdNky2^`uYm)M{Ya59IN>%zd>cpo=lT>>e0k@1zhrQ2!E51P0k# zcU{E({n|U=X5E!*o<1+&BH=9lEo?YOw()nR^%xVE%UlhCpV-02izp(noS=1=fZOrs zqVT2eI8g%Ha$bWtB5;E?rj#+PVdEs0=xtd@c$R;LubNj))M(~$cxW7vt=2Qu$r}@l z{N&kHV@N%Thi)vx#A(wC= zRi$`t)-a;^$uo$_$VC-FLHy*=W6pZvSD!!eD*ZaOj@KFpnj2llXF{{KV#V@i{1C87 zTIEQdOI*fhLx%+@#@%H=t!&=xaA(gwF~;RYdzUMIzH2Yfw|R5KRW_&fkMlL$HUumF zE;VV~=FJvs!`zss06%()1uMb2n-YC>kU@Q;z^~Bjr(4Kst5wZDJckLW3;E#8H$K-r zrwD-tfZuUZ&>=;@{Z11%6yCPkA2g0Ng3V$&PKs~a{t_dbkso5Tv zzfZz^EXc)ps_I|LaSOlceT+c;$ocrJUx4yYo7}E|LX2R!z`7HzBH9kznVfDB8q*I= z;S@?RHcs-46BK&RW%C^M={}PcTrT@~Ktq9jKp;1t60>4PM<`*f(=AvH${C2Ds)d4`F zQe`Xh1h%sH1Y*)c$}IA|WZSNjsUu2GO}|tMB~Ts1gp2?@N>+iQ4ss9S4cN6Wt>A>L zQghT}G<-j2H5#)ahD+7J6!8J;c;?T_7Cii8u4Y%>p9~)_3E*8>wLUXc%LPER*>&t?#tmQZ+vEY zx}7aP_Y0xINmDQ)K$&oPjKfyjxXsy;vU2J?m*F9tfOA+x;10Ko@BFUg@mBw6`vliR zrGt)lk&;s}+k)y`5QFb5WgY zh!hgV2ltlTe3}fv4JzjaFLlXMUAMGUQoX6LkA1^W9AG>-OqL5g+rw<$PMpGpoQ9a| zvErr(?AHD1ksSV```#d2d$;Z*8-MQh2>El!7wjW1I+={O$fuPz30&;VAW_Eb;{Nh? zY@jOjeV!3zF3zSHJEx;D;BdCi2R(EA1OS9;2Ni$uj+^x~<&P7!R@68rLh;MS&#=a$ z$Tcm-!;iMuYRGo7f3#R?;gcF<0%`Yy0hWO!c(!{zD#i;_z4+-df(k(sj*qaWEay3w z6W=gZeH^>z_MknHV*E{Y9Wdgv@YNVUw|qci46iau%dGRm+ElK%-lMu-8{~?vCa(S5~?rKns|+cxXC3Ld4qVL{pb-Wdw+m>wFk)4WUb409d}A1rEGP?LT28?^WA zNA#spXXS#Wy5!x~!-S7gn{a7iT$Xnu;KfdJndyznUT= zl=AOHM<`1aMMsQ#Qo>Yf%1|j@X(DF5K4~JXl>~c_lqU{W;G9`igiWVU{eC#bcz*g) z<@u3Pq$~XG?H(n)BKFAka!LMt_Dc#8D6|;l;H{uP7Bo}f@^ns5R``VgtB~jAvB_AF zHA|RQtK{AfM|e?xsUzH4mxKUQOv+9a<(m0uHf3+pib)zl69r;#Q)MHN!+(FLvk!q2$IlR_vIo z=Y4__a0~DaE~T=<*qOuX-o!luGG#n9rn+MJ`1D-IDtN7ZKQ*(heL*OWyAs_;W@W+L z{bSkx@vNAsU?qStEF5ExwSq{mXKVW>Jv9!sPMvPu;s2PQu0m#oG2I$dWv6FiBH9_> zps1`Y{uHN^eo^~hi>h4m6#Oy-=~H9Y-ksc?kc>yDtz5z~jMA+HBs?v1wb8{GbfSoI zT1zRdTo23JO~J@NGh!g_3b>AHU|l2DAQYyBUxCgND2Eewdx-wv8~bw^1Dz?>F-O!A zo;jl)^+J8kG0JiXu!y_xvz_+I8=J0r?AXUZ1{NY?)TVR0=_wOW1-g$MfSCRiSm&#@ zF(XyPRRJ(f3aAT44MGt-1Qi$~cLg8;VuU)+Zvi#ZojIE)Gb(u0K^{dw5$f1R;4a*9 zKtcrcaD&wR&@%Rqb10+}im?kq5g($B7O8kJZC*VA0*%*Z?p30UzzV%HD?`{u{3^XO z*kCoizMl;XD&A`|Ze)N%S)~BXZ3G;?4c?j2V0ktxdT=g7!HThO^|ylpaj|AK6rRog zb@!%Sc#e%RfrtBcs40AUg?UE5gU-gka#q5Bkpm8mD6EKBH6PA-*&ff{pJ1M~7>Ugx zQxayyU9X9np@>Uk24mObe^G4vnfc|N>tPJ(Ifu^o=VzY zoMws~9|1 zHcH#@FrC7Xp_lH_Zk@nyK>0vEtqR6@pn*nzHJOt2r5i^dVQG~R2jYi^^V7>V$93VY z=^+Ce!yAK4gHMM~|LnPcF}XOUA1+1s|87`_D#wBzCyW$&yKIRVGx*bm?N&U8p8Pdd z@_C%zzAxbBv5e#GV2ns*Ge%5DS^H8G;AoQ?2eXP1MFU8UAw%nI`(ZnT7>gt!RKe9I zZ2x8oA9`1fg(-LsJ^A9fz4h-UN#7533e!W@%yDOT(}J1bB+t`{SwyCskB1bY2v%Ge zfHwSNT|MvAfA9?yk-raxeKfEqBA|d|<^d&N4*x zk4hD0zt0p!_&_j2X(b$7+PSbGPcaM7C7(rSV+v;VqD3{WU093rxypnc@?_St8aho) zcm27_E^>cX8WwVv-AS5QyYeej%+7*JE74zmV5p*dK}9jm_~t^%#+A451rRJZVSHnt zY3m-a4beC}P~hSCCgN@#&lm~$DT$f*pYq^saR4KTIxod1_$%%?>q zEO{6iv1Rry#IVm8gIOzkO$oAkY1PHo8*}+P1Fj4{*uwG-rj1ccwzR+;E=-Ou>0_Cw zWVirO+S!H{=vka*(hNzdTg)(C?4Wuz>!+w3hq30{1h=Vg!<#>0S=+eEHM{_#iztk~ zbHExFWVE+tG+Z-`P((C_{5{l${H|S<3#Qp7bw>Kem>;DfW{y@nH`~6Q!B`7twnw>2 z;jAiyrFS0$ptG-{e(Y~0CX^m7efi;R7Q|JGQ5dBd3`!p}zYT6=u?-fT)l4v$ox{wm zd}k@f&<%yBeec8ow>A64%or;FGT&?Z&7_Ws-0;xd)EI-pn$)dU*Eoaa6=pPO9A;L2 zc9!0WV!*cY!7`Ab5ER{n5ueWTdjZP&d%;k8uryfeg&_tOFaSqK8GtwNpx;vTWL3D$`_iDbqD|NS9m2pg_$AEkW7w(V!t_Z5^JljpLe{7-rKj^@A`axV5L_%AlDoDx(m31*!`4B&z!#+5 z8%AnM$pKYWpbQ{Z94?kSMM>ZF^*7cC=D$6DMKrPBStFvV9vS;reN%a=U^?Q+*ftZ( z{D-!$i+f-ECGPIB;PX>w`Q)rT_h*F2FlI)Fw^$JY>WO$SMmd)j7%!A%XChA?~nh~b(f{%3)TSmHHJ<7tTK)G1wAv2_+ecw3*XZ`>sAuAFLa&0 z?ANg?m8Q=+=ptk!zwXyMIg}^B>>1*eI#2?m{epaSxGszAljEWO#Q<2 zi<)Qxc84KO0=q7et&037g}yj_XgA%J_@KKEHdyH(_ zIQ_0znf49B$6xoITaJOTcbFllyqrPF#_3nQ!qC`%V>@8OypVMdlemhmc{XI1?OxkD z=%#7@-wpV$n~TryOH2tABk26>ow?%jVGyy?7Dxcb$W{ef*^N&?OpzY0Ckthh|5$ z<`11!;7$83tgUqSvu3@aMc2fLGXDOWFUOV|)(?(Mj`56*TTe`I5-pp@@`7^d!2Xwp zvdfl@BWp=#boBww!y`8mwh(|2JjNykoHpbh{s0xfN)LTN=7ru5t=^;4LovWu=)Zr* zp*J`G0b`AV*LW^%GA?I9A@Vxo-7~(ot-CESx24U$Pq<1Dy%mFfDjbe_wLNkh65AX3 zT~+;0la!oYIk;G#OeUX4YQGhp`7*i9Iz?*a;h@CrV$$xVAChYm?SxVSl#5q;pBHl7 zc8ERg@&C+`HOZ*K|Gfa0#za8W(IaNN&|Stju`%dpNmo@%fh1!fr|WA+Be`R)pH)xI z{ssLse}+Hd54;Sf`k;_;7ngH*Dyj4VfA&Dh`x$&qp3Rbf z1LM*@D~W2^JLD5~oU~FpNsA1Z-78WS03f-|f-uK`PQ2O~7s61So| zjhT7gxi6CG7CWY;&qS3Nt+{uW*5d1BeChjNdT8!x-@3jN^{^|-DF}A$Bez|04DN+p zIJs>3Ma=5eKbG(pkCn_iNbsX#Swc#P z9bK)VLReFZu0X3v_Pb+Oda?-;!GL%c{3A8ej8e@%>M-L>o2SR}qPGFZmFR`aH?pVy z?1P^AJI672LuwbK%Ve=YBmF~0(P6AGMHQjA6!6$SR>4t!g`;f6_Ft5&*fX4>m3=1M zFSQ9ufp|IGg9z0@Va@qVy8u7wP4*Cnq^;*VT%8bCiy-O>J1*OyI^w$f|xx|NF>>-g8i_-ZJq|M7@(;;TVWIo}aSTe~u$GPNaG~<<-NaKoIE=~Nj z=T`L6(Nhi^?{?wR&}Nidr0F!4f#2D!`entSV2{t%+>Tf&yW49)OGvQpl3SkS*gDfl zj<#Ay!3x-*6kC{=sQgtyd|QbXfnR^`pU<>;8yWH)jB|p`+{7(gOMNkHcGKhca0Skv zii4qM$#wK4sjJ`QQk0&BDhE_CBI>)@MBzlP=SiKyMy|J4G8>#8l1ziDbh3w0v9D4tM9+27oR7sczgJ1-2s@Sc8u z=FFt9!kGqj`1@K=eIy7rVPo7`r@yw=t!-)u9LeT-aE{SPITqLU7)UQNmQ5ZjZq&hU zrnmK|lZ%5S2sSLBdJTK1&0*YvMk7VPw0AUNUR;?kzEj$Pm`VcIanu2WG;cRnwPPk5 zdgXjuu*2#4{?NKTsU8(^tYD5ZWx_OUA?)&O2zIU-nzRUY>D9IcSjUJk(7w4$Ar2xE z{+NE%ueKT|FJ__jTCUph7dg}XtD}8ZAUlU|3U9&Jrv8ABY8BJdbL%hra2Qs1hJ(4~ zyd-`Ljuw-Ks%39p@yZQ&)2oy42UeI}2^)WD7?AGn!L3^Q(HNW8qIx)f2RfkeOtpP? z>-W_QAhX5r@57K-#P4`0J#>E8f#jRGczCe=dtR#Z{ShJ?%fL^YOpa_#8>1_yiMBMc zpH_n<{nFEwiEf6Z6Q!&k?J~ZU95(*j-PKLK$Y64s;lB$T%j~IZ9QO4q68^m|j8uM6 zTxRnt@DqW;d{#H`8Kr`LST4K8(l$dM_n`1k;gj!O{8G%-E_p9y+`SB#j^}}GRaJBAwGgF9Awxh-i{?RiV)?*V#_LE#v=Xe`! zD2{6l8+d${VmfkGvEM{5dV;;a%}eBs|fL zvG%pnaAe}MmR6s<2@>$o>*J%EEAY15s`zd9nfbCK>e;&7C!^#Y^NRZ#*j{(&EWhfK zBSZFdupcsO*|EOlX4pch#SvN@FgBsbJSf`?9a{0eZKfL3i^c6Tt1Fw zze6}9Q<^5$(p*&=zyXkLmA7hj787>MZMPxQ35j0MCq5TCyeHEsgnu&>momS6A{lvH z+cY6T+A>B_(=?%GujR=y1L++wv8z;HUbPpeeSu=&XdLtQEfmi_iK}Q(J~I$s*n>Ar zNZ8^d8^AQ{DjR=PZrBXPY26sG-uaECE<53_aPH&7Bv!$_F|J2vPm+A{LS(>W zYC^%xLxxYX-e>#vlCI7NQ?ZQVgHt8Ca5O|O=hr2hi8=dC9z!HXckPH3&(Vpz!;(L> zU9>M_$hXTjY9vM*c4K}$ypS?;eJZ7DUmlDOKxe0G^3It|gxl^UOf@1J=Y4w}qdbdk z-8^%kSM17i!?dEZ(?G~ z-|pon?0qyw8dh4ti?Onf*_5Ed?|iw!b5p`eit#(z~-HY$Hzj{*{d9f2YzIYf}p z$7PFz`_g@PV&|#bv2n-r&&gGG5C28TeL{ZOHgUMfS?+BWuD$XAWm&Sc*35hjb__mT zmqN9^zs!L>Uzagsmb08rFB}&|a?7jP{#b*sbKx7g9Fmw=_6^`4;{e-nUrKlP;so>u8Ocwa3Xe z#$xG`oKUKOAjdKvO?sQzWL!@?Tb)lTPo-I` zMWpjYz`sP~rzn9P@(rI_+^tTVguQg?>WRqr{6W#*eCDAt?)O1qTumVf$Oxr_$fkN9 zZIv=vgw^Zfc<-zB^?j;*$k`)^;4@YnF{oqS&EOK~CCbYst^K#X`EG+bSf%QSS~vo3 zupghV)zTm%Li;`+viX$>u@r+>ixqfM$kebcOdRvV$$~JRi3p?_*wvi`@2PB60 z97}(h7|`OX+Em5gvdi%BdiAZY0zd>!#MxC4FwwxUPUd?Vj&NFhM8XfMN}+OPP;1%! z?Wl5|3!fzAr#+z*vtv725f7YzZ&L9~Wt|n36|5_Ry{oBQEfiaJ9V4k^tHr9QAU}V) zSgxzwFm|9+7Jnu-ObpHZq&r-WUv?^D>X(m(4OP=YVyWf`_wjN43Jc9Uw8!y@E;me-)x6SumCNeu1Ne$i8eaEGp%DhN9KwF8tkJ&4CU5|*vd?Rr<#kj zc{%&C3#?L4JK2BsK+Ca{Y*8oj(b|Pl(%S>&8SHHf$HsTgOQrN|eq>5Stn4M<#F8yg zh*sejwUzFN*c7_9+%FlD1CSvmo)yS1!zKLVA#AI1XX{p7)EYlwIA`R<;KtWCa~kS? z)j)MqaBMo!MhHuZm3O`px2yZRTNi4s$egSB74hx~z(S7f;g;b141n=#uq!o7OAhTp zXQMyyu<40~EKd!Z5WVgOUbPJcm%Nr)8ISYPilnw&d4fymDrv3TouI`GXl< zC)D$aB-k(;K|4TsFYck4zI31v^bqHO(z1qqk7$HVP)??l6B&|HSq7B3E zhp0ra65IL3ePRWhD*nNk^PvXHmdY(P5BpQc3TfHX{8LbHtvKp`E&?yVk@?-uN z^8OW&IXS)W=d~WprYY#1vFXPJHc-yc;5RlmyM0w7nFp-0bt`7zQp5E^S&F)y#I2!z&clt$3>VYq(nuTe^CZ>AP{pWCG9AIN zn&8nl?TEgZ!xYWr?aO?3qO`8b+Zl zbcX^8M26PXUi#S*5kaj#g(y7L{)V$cE@ut*koD8@Xs!M%uO||hSxdr6)RR5QS)AO0 z;u==*qc;pRwX~NAno?A}EPIyVI$Qml?lUVi1|Id`{>@zNH92xf{7}S#%mVCXr@62~|6X zRk5wXXd)NmWWfWzf2Fe4(tU<~I)h6DO7{)MtZrMNW_1Oz4m3I?fG^4QQ^3zgjaVB= z&@A}wF3n7K_)C$*7vZwfD6+VVODCFMISd} z&ezTx$fGPvL3O%s1=DeIr+!9Ijzn=^YC^i_lW3jo5^r-Dz6?h*>cSP}pGx*wSglW_UmqGFRTN|$^IwU&-q6rpR2EaOqHhiVO6)j2 zr4#Z0u=!MLPpWs9n+#t!9^C~NJwC)M30ls2d#denTz_O*+Hf#%*jS#qMgZR>Zj@xK zl)0H@)&CtMGn)I2GGgB*67Hg?&twm9a@ki?k~kYy_C|0(xe%{mTO*M898~OZ z=FDKg?jSKOYo?mhejWRq%!e;ne`bJ4T`_45{xaz(K_;BOfc0y-W{1FX7f^Hx(5G?S zR+aj$>tkI=-e_jm(3??XuuI%C!xwF{z5^bnw$lL~{p&egDU!9o0s*IkLm~sclAU)e z<)y-SUm_W&fXgZB_01>!L`@X5Cc@Q6aAf8YSJ7WVHiew2PqR|rdZ%(O0-hVK5GT!5ya=j(;J<#RUHjZdCr`0QR?lSoAWDG9e7qHQ}}3! zG@M%LdN>CWmJ0#e%&b=Ev8!2W%^Stjy}4CyGc`&Bn@p2t9!tB7DM#|)eNEvyr!9wO zzMJ`8+cD#U9G=+P@WsZKX;@)h6L%T&vGD!ItJW?2%;k);0Ux?rzqAKdKm7o1Rj-C7}H&)=|}s7CHe-*n1`?I?RX-6ZQ`&u!x(8-1R) zh>;kBySQwDgiS}@eh`iC&bMzUzsJ=|o2cc3p3Nafvd!apgP?0oZWpN^WNw$=U#127 zbu|vGHJE~@zb4xz&*0HIhW)y9hJUUArO#Z(ygghFzGzC%iUVFfF&_ec4sbb)3(AWm z=rFWJwCsIKIr7e1folHK9@Dxs*m1+eusMRxqq8EQ7jx#3aFNky{k$C?%Q`;dO$XbA znI;+SKdw_u$zC6SuAcG>QR)X?S6th#B^aMDU3BzwmHy+#8XS!${>yk18h7K`$>~|t_GYUoBq^d8R+xG4GJYqKwGC1xFt7Z4I%pHzW>{-hlg((K zFQn4E%hbgrP#aHPfy9HXPE{Q%HCqu0PdERtp!e_Qf+V`r9Lm)?d)40PTU!zyn+5wh zG)w5cC0Cl`^V;vtN6JvxH^&y#vDPRyv(;E+Q^mD@r+rNZ2OBvrM$8h{#xsPeZ$%xf z^gEJvd2IwK`W=@(cMJGd#h1J)gH>Tn)gg$RhKW~P0HJ{lD_1F8a2ef=7~+6&Xxaj6#X@>giJNMS!aye zzc=wm`!cunDyW<&x|wS9h|yMD`48Xod1fNe%}eZ~mm*I`zt!0c`&GbHur&Xf%$HNx z)&lRsC*0CLjF}jWyD5;AO;e41_N$s5C_Wazn}=<53(j#xE=P=UCSlv*G%tjbAAm@I zHcRx1Y}j!wUwFOuN6@b=M^G=HFs>d0PWbdUCt4uMJS#oMEj>dazXW=kF>$5?s8EVg zG%iq+wPqt(H?qPzGpe;_;~2NV*MU*T>reL1zMfe)?H0cEd$7DJ4`Id+AP6d)97Ayb z=?U@zL^cSmLTpZ4f+g7k>ci$4BZYBSdWtT8fli_P=K$9yt_0f`HVJ{ABAhwP{D#A3m16Io zJjdIHCHlW#B|_qF&#b9)RxE3BRuHu+1|DMLZov)&ddvMsic_iXgg{2CoFs$5ukqRd z)L2B|2CU67*AmW=fxH&B1>77wJ=-VYNkty9r&4MC6$5j$e?7H9xAk(@*#ee00VZbc zT-&@J6wTynTB>G9>Jz^WDm|tV~YGrgXR0dC(3x6b(CcN1eXk`TzLHJ zWGe3)!)Mno`hlal@_^U!$-DVP`&fab`DLNu&jR^_8rIzX+=i2>T%(NUTQTDIsdzS( zwKp?%vNYeZ92@8bnwKfts3i*TN8 z#L-^4#I|x@yYbmIi(()!3_`kQ!Bt@t%~jz=U)&;|O{0_*j6+e-vP&)OSE>tmJ(Cnr z<(g|X2u704$O0O4SDJe_Mj?S*TL@IMza4ic@kXQq{g?H&A#t zYCnKf*@^MH5d(jFch2#KtJloQK93>8u|=WICdz=cB=Iuliqx^jGW(SjK)#Sh(kQw` zUUK=d@PZlG#@`--Uf)z#A1%nX z9|vx}m*;=h;qlb8&u|<(^LnU|A9oiUPpN%~>N~*>wt35Xj+oz)0{^;X*tj@RT{6H* zrTYW08Cwx_=Y<8P0OB8rj=rj-;uy=LWK}k)P!v^046;*Pa3|}|@_5Hp0kUo=XXB@C zWs5TlRtg=S@0$85BZQi1_mywq-m!EP7p9U5h*&NE=d!gwRt^{G=y&XYe+FHUCY-MX zQ=p2d1jiE#;`AqhqNJ1Y0^SpnO;_pa6$qJE2-7qbP>w(To^ne=p{l+1WW0nN$wK`y z)+>Z`U$Vg@@VHmaosiZ8|K7S?iqhcarP~O+fUya|QV%5UD>I9~-ho z{lbz3AvDUlJA)v3i~vxuAU^L!pMwmjFBSl}g#iBE-^gB01;p(4=!^aGuui}s$rChS zw-9`Fdz__cRq?zEA3PFCITt_1JnNqDQR zB3g>p6@+`epgQhO(BS|^-qRmt$RR;gbz8^dWJgzGmlSJSuxmhlw5pYfv-S)pEO zgd-b`SjfNvBiISSb>ch+Gb({56%Swsgw!=R%EI;Q#r`g|40+8^16VH7okjIzTwtOK zUzk3SE&*YfSgTpe9uvxBIdR8^_3^#TN2^|pu|;BVLQ0|Y8$ z$@Bo4KJ7hUimMCX9;G;z-3@-d3GBZz_^0oa@*bJQu#jH=2rs zcK$~hMmXvPE%AHSmuVbf&jM%G4Eljg3EBYuzEmRym*SRL`uBmbBf>zK=+jeE!I+l& zehg173;<)61upj{AXN;lTg3h!Vec8&#PhWeOOqzjq#25!B25A!O++aQ(v&JSp%+02 z9g@%mMVf#hReF;aiqs^ibm<@vYLF6IAfZRV^55V0{yeXr7bi1&vO6<7b?02?%vokw zJ@y?6-i_z%t6@5!4*{QLjt4I z$=e?j?iJm*&r5FK^!R9S>MtUSV; z%ZY0b%8(lVk_<0py)h-*3KDShc&pCc3i7hxLpZ%c^Gu6;8tlA6!rLWlrrhvW?D-{k z<9a3Gv2L>IMI*EJ^K1NmVXF$2X*lqAZ=Sgy?4PV>y)t#%=hmZ(ApY%gl*^*S+pK3)|JBT^iQRWmWMeVnSzCG9AQ@b6wkEiF#(x;DRo?X?TJ+6S2S*N zy;O&g`?Eerk&jQMrQfba?A8I^$EWU6q2@F9L|$|q>R%d;=HV0H+-YIMyP^s)^naW? zJ)ZSN;I2MqK$)2^06nkMgKWS6KI=@_tBuBy`=WW&ye?{+cQS*b#9RK*sAFPl5=v>tqhc?*%@3TO$`Uy?7-?4M?Z1&YckIB z5`0k$SmcBvF;Iio7~cI==M%T9)bOTU4QPveKPde5`})w*&Bs56G3-ompEebnow9b0 z{wmIQ8c-X#ki)>cIeaKf-u<&-fc#`vj^kuj0zh)mKOt%RbAO`u=j3DdtsI$Fr@V@i zam3DKU{tIf`vRHvCYzs^ssWQsGA;*LdTdk0QDFhP@S25q`0?TMAtI0CP}TKM4$v>` zj!+NBUd%m&_<8`y5sDIZgofYm#e^C3Vorji;JeuXjnf^T$@3kyC(5E!^X;I-TLAAA z_#B8u<>K<+DWL)^sjy)>7qQ!4fywUFN*yJycMA)R)zoJfLP3{F-q(42Nm=M+ZNfqW5k{Rqjs6S01%b! z7Xh08v70Ix_933{S{q*?Q&5XK$*2swH6nrc)QX;S%|jp|1;yjIPHX{)zD5 zX5aRBCq0QH-I~OC>W41&P6F<#CxLo8ZVF`ICMuM5csXtpDc5&^3GN*6UiMd08TXzC zA^LZ1^SKqhzVH_>#{;5*77!eH2nrS3D$1S(fQoJX0_px#9-=mRvJ}d5pZCKudy8=2 zQMWHd|DM|w6#cSY%lr$X|NdM8WlUneI8BkKJBy2a3zkld?b>yVX0yGk-I@xi8tyi? z&*8BBa)Wb8EFIf>4f+3Nko4sMHIS6|3F^vaN$S z*A<=`x&6A>ebC-Z#lx~xCoJ1H-7|T$gR0$;|0hZI(v6T;G4^cR=MjLXz{vumC1&+< zilB|fCvxH?AL|S?mE-hGMvc&7&!uE&RV76|n~b74+?FXAQ|u*5A`tPP3&tps;00~& zR~=uuuZ)`)fTyLA8P|D_rhIA6sFh0jywnR&v$SW~1{LHOQ>*zO>@|kAGP9YX_cC0z zCC@K1g?52^>pPP2>COi7qU3Col9z`RJH84Zny$yUd9KkYZlZk}?!M|k8raMPcCnmU zDMxmw5JK**gNFBVRb!h)mO4+3Sxz17@Woq8hLUk1$LEG?))!QaRai>T{)~Dd%-Q31+_&eq|nRgy{uJiIC zdF>*xzrA}Aaub~8A41$4pl}yQtT7xQO-F2?fj#zMk_ovRsDZ3G(Lk1}C!DOP3aln% zPe8ZeT1dimg*g!6q>=tWc5ZMf=^NfyPLJZ4&V+P!P@M5-;hd>@S5OyJ&%TrR0P!Y# z(&;`El2B|iBe|$&i8`To#-7l2BAkESnf7STIMx-oa$KqN1oixx4vL#|%%g|*$cjLF zv`t@70Hm;)uHLH#wB*rtMsb1pLnS)w89{8b$(I^Yyr5s5knttf+C$TZ* z5Cv~)1a=({YBO|0g245~$ry^wR)b0kC!5DJu1;mtB$(&x@uIST8O;y4 z<|$497R=SDcThgmgSI=+Jbjk^?OO%0z|G53dDYS8AQMJl^6jiTOyPh^-ikK=!Y_;o z)DgzqOB7$8^3@G41&ROUV)ecN4V7aGZlVV+HbyU?ASM@3m+Pp5k3A)S%I92w3fOV& z&F#|eWgA>T9Z3_=2o(a_g|h>wtPpc#=>eps>;M8^j0-vrki^U9{Dd4^(URT64KY== zUsfOj@>j^)@?2!AwxpmYq&R-+mIJt}Kb2TC8Ske$9N#yE6Z&!-r(*qio zA(jzWm(oki_92#&SC`~-_8>L!)KJSt&@#55Cj=4Ue-op0AQal1;va*t_(oRkDD}bb zJs>xJBq|Pp$}D=07<{7OFz*EHn<}Frj~?1XUF9wehtkv&vMSH3k4FwH4W){m_{tSv0G>q_{{U;mZ}T=|*={`_$7cUz7Jx8CR?2JWKQ`&=%L zPD`c#dfB`lB0ZbkrXVyjoiI1_av1PT?d+i?AZ6WXx>gMDIbBtHkZX?l|HaJu4&odk zLV7p(H@-zS3Z@TP8F%5OU- zhoc{+wyCIxb!MRt|6mxOg+5p1xT2xT?;G{I1Xic^!4Fzmo})LGKP13CEB)lOXlRj7 zqE9f8y9}wNpW^+*XanY~)pyzU@ILZnC{5_;;>T4H+z*kVvId`Rua^tZHoAT-V~X$r z{axw#p?xyXRcG?AY4E8?(Q7CRw$Z&ZU@IJ&T*S4wa-eD12WA|U zuYJ%_O?A~syZy3$$62JFGHP-ydU24-YxVjn@I895zUFT;y#{-d>IVUDg=3jmM)-;= z$D@(bk8D@!VfAhY(9E(2Ztuus4B~!^|6*>N^_`4T zhb_F$HPc&_So+xr1K%JMXis#1u^fHTT60{69(CbvmNEAX$1Sqf+Vtf0AkluqUeS1$ zegn3mA^zCZd}ak*{Oz`@oM~dY7!~~VX1ZaKH^(FR>o*NSdRlGKn+3VFDODT_x=Xib z*Evcox}+-tu^sQYMU(TZ=0n#PHn@QBK|K8y z;$*O>in%z$R8IPE)F2z_z3ufqiwRUpYIfDuCAHG^r<9crFUMgbqYhTLSPtLDlJ|p0 zx5OV8M;3kQQ{=BoA$S?S_gmK#5Ar5?>A0U3S%Bi?x^ID4s`rJD)~NZm-)Et%eZ4xl z^Nq;$cPw1{pB3dy3RbvFWCt>J~q-)PwFHE%><-ER5x~4?ns) zJlOpt;P8p9Ylzn&z+#Y{Ds+H$PYz+~jPO*?MIcZ}x-O z)W@IrXA1A!Q#epx5O>p++>k0Je?4nZ?&3^O;6ujnhI*9&Ea;9QG zf|~l!@{yE4JLRKxLHY7tUb~w;u-8lk-s{y$C_ZtA6~1EHa^P zMcnmKALd1D>4wI3>{i=0XY{T;E*)%X5}2euJz)PZ>7u1LPkguMr3NdmOXhcbb!GWK zUUigWIT_36zx(yzYY5NC;&6=g(}mmOS$Wr#QLp;u@OqCLDXaXBhRhIV@!q>-eUsg)cDG;-SCZC)G>a?PA3N`r zeOg9B#&`@UX09NHu=ewID(P#j2xqX2>W|PS2PJ9w-sxY_#;t|JAES4iTu4d6FYi#O zXTST~MlNaHN%=44%<($$PSD`a^JMAZc2wXO@5-|CxJQchpW){JO7RW}wRg~5n0H$p z12-;#oJq|H?vaJtsKUv}e_5BQngaaq0+)iO!L6~+6}8Q;lI)PuS0UdYN~t6n9FLoU z-^SpEi-~&#|M0IQZb=E&zYxcav1ih z0wQ`%6{jADKQk#a#APsNniqHtrEABr*BA*!wrA5>eyVjTGODc7X-L}^Iplx3)O2+6aa%VT64PE` zoQE>4kWP97RW(S~fPAm7(l)THb zgX4QiOaVSOxP64I`Zz1%OS_bktMqxK;gp2jEf*=7)gSPWV$SWdPr9qN_d#h}E9WY` z%XZG~eC0iT>QEqzJ7DiO%<_UHC72iv_!kzDm(a3{33<)Ond1Zg^)l_+z6jv)%qGYu z9@w29i3B@Azjq>wm%PVRbDsJaAEVF$$2_^#qpAz4k}WF>Vpmwly28ar5}U(E*!R_a zq(?0I-^a_1B(C=;&h$DJwoM;s_?aA^UXS)OMLG57@hIzTS;yJqYt=^5hMn#rLFyNZo+lZ0f+Sz)mdEHGmG?x~_2298DA%(#!HUY^}9T zZS%7Er*-4_goOdu1U74xemT0v+Zn*=ZIbZR6Q|i)n{+EG;14@5ar?d8RLwKF*;vCx z+T($lEz?R5R%uh*pnPRK?nM8Is3{NR_qEm`Q(RTQsrme?La)S0&SGDX4(+y;xJx@@ z@%T@fDF5BKD1RUBfOf3`f6nz)ozUp5>AeKuJ@L9(Q?oj}&O0sq}W_Of`HM=u(L z?AsN58Gj_Y_ikk5WR&RRgx+P<;@)S~CSL9I_Zi;PurBelZ&#W{KJ5_I$Mq`Mx1Y!} z{phi1XH8do)9%xx!kSiMh7p)f3!PR zX1u#)SCyP#^qW_9JKqPd_f{1w(q;sBcL_!O23spJ!?6{RWs=J7IkGNCe}!!RYu8)>jIY|#?VK5o2-ZFh@hnQFPd1%`iTx(Z2UEjXRNKI+YmyS z2>x~~$>+$&rUy;8N-b_-i2?nSftbJ~Ru&U_5{h$}pR z50weXwALTDAsJe(9Cp^+J8MochVIXD9RTuo%=WDKn%NsYVH84=2_BGMoot@*oe4e# zHtlCFiZI8y)u=%OdT9?TZ7Y(^-$rRbi4xTC8cRUe*qI1o>9#=mJhR8T5bMk{ zxR{W|nuNkp0Q0G0dW=2jk3!TiMIpFeOKdmYySiO!vn8fOO?(?hh?M(MJ+2#uHV*d(XYOa_p{cG+Fi0%m_6S zPIJ5+TV7%QEusk8$hbXKsAqu+1UqBL>x+e&592Qa8oB8w64u6ZRTPuCs@tDF1CT+h zIR$!!l5OCP>Y(bux^OO3(VF<67N2>eNGgEPDX*xNN4UBS|J(=VwaGw|ZwDSwbm6BA z++?BXw!KEOY+WT022@DtSD8rZi5Cm8?(8#FAmz)*4dXrw6t~HA)x5y~VxQ{ix4H&s zsFyP!Zvwz2ohv5;*TsltzO~i3N|9>wt0tDH4gqJZmA)ZLKCS?|`ydK2e51k~SyBYW zek_768h|Qrf2AtS1@(1M*?@$InQN?Skc$p`GIR+6oUyW%o(+hH1s>92t@P-y&?I&6 zTopzGR*E@Wlq3XzOrQdr=?CtvW&>4Wsm4%&y7YtXwZb$U>U)~`exxB(QI=o^`{t0? z|GNNSd;`@#3QTyA+%(Sy8=5wc|JHg9s!zm?U1nNYtbg%9ggrJ@5wUm@UH-#ANFM+l zK4$jq$LzV63EaeFs~WL`4@`!-jx~Z|`c#?;&Kme=@7?_+%xl+HcGiwG?o4Awa^epu z&esgf&K&EpJg9`sG4SXpJyX#mvhHk2pnY6!j2>ozkW z4$I_FD9sMD6oaw+McArF18@5S%uK-gI4D0KW}&}Bc&sw=N<&La}aZ&B{a8w zs#uEgL0c3)GmHsz}7VkUL z>Nze>d-U3qCYC6Zp$=y76hy``A;#HekfexAb=1;3H2_Fa1K;D|&n-*j9*aLgzV_Bs zN5v6i4(CAbxjbNrvfmS*Wc{F3Xm6-T_%dcXsS_ww**n&zH_6vV0BmFg)ck7>arrg@ zz&qA4R!@~tfvN<|FA*QHqC@+2%&$v7yTWd6P04C1!;U*0HHaJz>lno(E(4=PZ)gI) z;Y6V29Y1{C$C(;friKy#k$P?>(;f~el>+_XNhW~w$e^G`VyL7LUHGn-27GrhV4y1h zwK0B5K^8TYEQ?C|(g_DdzazvT#}SX9|6v^M4p0w=Wz2J~|10cnSSS2X_7EIUGT1ow zxU&I3d;nOIi^I2gLq8(Y4!4twasgy?855`iJRlr>I48+5LTnxY@WM`bjVkR?Z8Ia{ zkJcjumbVy+^z1~`@WmV>tYwK!=Zrf|?o2yP%jR}KZO@?RM0W!~KcGY=Kx7MvJ~@-m zIn`Wg2?r4V}}F1Op1rRIh*d+df9*404DN=8zB-c5RngaxBbd?Y>ta0Rl9 zYF2J5I_qTno~9c(1Py;;X$Q-Ede2Czj?zo*QMpNXf)9W`-POmA-@wkT0nNR*Id+{w8rm;s2rmpe|^m><)`b zk@q!fr2JTACs3dEsCnp2yqAu;4gfme<~?aov?sfRJ}c_?B~;!7-hizT`#b@dQ6t8n zkP2XW)nnRuT<@Bv!ZzbEDq05sUr21WKJrhPJ`&6S13+F|aaJbYDBJgNvU?7uWxevH zZS+3W)8HG{#bM4v6o7}f@9i}8am)aS4EDq#3R%O)N3o*IIyvJ4>P?$%t}4i6p$cdE zf0W<60`=s&*#S*@i%J^O4S}tV6wh$zhXi~uT&c>{eG6{*FjDtOH^jNf~)l-z`t zB~KYgA+c%Qt5V6_5)36`Ec7Bj*H2_b zWCxm_qeYn8$+7h1XGP&~CsnCECcm3rG)0YN#jgGhtt>O2o~-&ecYDV6j`9j+Gnsjl zlQi#*Gpd9UT3IZl`Y7}5wLkIEj{_4Rs+kh2(3ugp$iQ_SZ}7|g#b-&ntvsjwsEWyP z_B+eaG(A{Q=pZ|(20lc_4ldA9Iu!~km!UI(wDw*@Z@j^smfau$RQiATStqw%1Ygbv zAQ_w{yAT8A`Fxv@z?A#~(MUd%BCW83txLRX+Kc1??L%R=SFn04Zz<9}vH$&Z97EPD z7-{8cDfasQ88@Hu0$j_hs>&Lr|GA|@@!I>R{%=pte#q_~2Mxq0l=6>5$+z^8Mx$;= z=$g~$ld^0&$`*CNYwX_`ww)TG=eJ@nB8{paJ^aITGN)oUZT-b@M^*8Xel?FKO~387 z(PjLVr@x-8I)GbiqzlIR@XjXm)cB)hg!gnw&zyw)S1#V+7zpB~0aidC0*a zu&>oP;IItT{U92wo&dv2vH@TS3anj zdDLmmONvav_h^;yGzVvy&+~InoX2=3LuZQWdl_GdV)c|ouys8-?PyG#4%zsb2-bGy z;#LiAp=Gk<(Iv!>d788Dcc_4&ql7X~RVMQ^BiBo0K|W9z;Mw?N0PQ;FZ*$h6G|%-B zw2hxHG}9}2v8>B}L^7XK6JIJw3(sKY_z&MDxabFC5A=io0O6N9mQJ+Idj_&`(*Mzc z_oHBsHVeO`2-Ziz86F(Vke82w|GXFJBs$*UguZa?Me7N7qOCTa(Su)ZHKS)@cju_J zXQb~a34gZyk-<6F!_{R;q~^0nKS+?9uOYZp1Z$yP92(Hs7iW%hWM_^Yx&yF(hXSy? z_KT$e0ml&H%7uH|@qB#5v+6zzoUMf8e@xHlfIoo=0T~X_0blA=e|Su3!(J%1(aZgS zRI2HlGqaCDNDm`PzN#YadQ-8R(gcPrgtAuqG(2-tx(A5MinK#HMcbhX5w+(ZF8MEN zI~Aa37&hAvd)0#4gs31W(S4hLVObkzH{Wg`40t!^7I`2|l@AFpV?n#`XzRd0VTl=3ex^k^yJ@Z~@M7Xs+k$W$L^Hrh1C zjpT4W8>pD|Icv7uDr1vxZO{bo+H{9p52C4FL4{}MecW703kmZt|N9U`cQiGmkFeyF z`fH0Tz3Z%SXu;NOP21H#N>yb)WJM@ska@iK{8f_egRG3RDDy?hv9Q0Jf5`Xc{NC9< zuzJ-pyQKIq?9|C+r)ANaZVotoG4S>TuOv_TCV(*FZN*)l(%2a{Sv43P|-%2e0 z*Tv!2b*%ZaFSRziX6GMzXu+={clD5!Bpa&#_ow0aXO<6gv(Uj$9Z}t`hXUx_UiZW0 zkiN8;8OekCkiNVhKsY|M@Y|<^)pfm=GM!hM{>$yzW6$bxUC#&eCLW$z&!*x+D$A$u zxdD;i^+O9=N?s)=@mmxvjbx#;ENcK_x#Ragh{eV0e-O)%C*@Q)tF69}_EBK@F6OVD z3+c;0?K3qO5_KUXb0pKsp1m`%aoe)PvoEyCTZ2yHeSM0r2!AL^84OFlA(v}ew;lH|I-gbGKS|=>ym#8H( z?bFw^x}{m9wj7Qna6|g%OB&`Hh_^|`MP|wM#Kl>#`QH!gUb>ObSH;MkpKO$b?)Tfi z4ga;Xd&90x`UADu?lbpq7IxRg*~qkMM3U~>IY6oPjsHJhC{^--a zYhO%61;&ybS7n{CD@kqv6I9Dt`6*Az7H};?APGk8Tx)VW8MZNF^j7&)Oq)6OxfgA$ zzz*wp*1J47eX}d6!mZ8KQGiW^kN*$G>l=Kotvu>zcb~6ASZ&2xSUB1C@W#z#>_nX^ zkEfZR-h+OLJ3npnR(NOFZ2i7IjArUrE!2nC9hBF&hXrmLD9lxUXkRFyJ#cNcWOO13 zKBxXJXTz2|pa#u7 zY5KjDNmSZy`xApi|8$0xQWJC0`?qgC%eqGl$o7gj4b6UB062vV4SEl%8H}y*7FTZM zK`(_#F>!oTd3l2=3f#DO8!?~G%1tMnW?QXqJM5-3R?V#O5?icY)Zyy@NuIq!jH;H- z3Q!-*fQ;_PX%+ie@I*iElzbVzk6)!C)_1C zDbQflXMW?K^|uBMF0v1JJ3CsG(x~M9kfX%V z@TRK#bNuL=9`(Ss_-^&~t8wc2-RgBcojWf_3}?#jF|a=`Zi7bdnh8Fq-`cHBoKnY` zT7GSAy#K`d2De2CYic^j%NuMB=O3lm?pQm-BnPHh*r#YP@F_cxfV05NtLvVKln4+c zq}Uq}P~gY)i>1g7=6+^}w5`GE$o5;om}^>D9o1ojhQ<1}(=S!@qS-nro0e+e3+>B; zB6dy*u`tnE=8fQT@Sw*m^PAV@l2y+H6^t2PY`mNg|7#QTSYuAGzFQNO@W zCtYLw@sC(;&STe7HtJn+Dc$C~KBrQ)57_hZqGyW?OY*9g>QZ$nrVJa5MZ>j}RC@84 zow!?)F%HoWwT~h|_N`^tnT36;#qcd**OyPcomj;>w4A7Bpf$;N`xB%4f21_I+emRY zSTB}vA6ToJ-2R+hW+nErX$lJ7dd=&s)L;gAU>v-7{?xb7LU1i5eCMK{K-dnIz_HRq zn5NgA-!nAOP9+G#yeV^xC$d+47$i;Jb9CG?beT~vSo_3%FL}?;DZG`U;a*7d*0jC# ztT$QZx5ehFt2^^dnN>e5=)G0H(6Vro;r%n&M)$?c)7L`rW|hYNk>3xgkwgypj#?bdaE^K2qE2F`ryY}^#>s@N|CL9j!*z0R zkb6dw2K^11#hiFD;AH=q^3{8elNz*Z_E(|~7bm-`x+i{gWkd_97-De#=jJYpB4`E+!l}6a+kL%0Y`gwAwG;Y8rv>|F$84rbSdHssWp)U zCjj&fdRGs#_M!5*J($7k?oX9Zj+w1DxG0yLNB&K;-G%L}Aw$1DcoWBJwZ zE7N2ik!l!rc{a`$mR% z-0Lun9@m|FORYjPJAK*?(2v*`tcilP&elrIq?p?_gvdv<6u?}9bbMmBU@b)c{z>2t+k!PY zD6wKM3Q45rgMI3{*oz(f!$1K(m?=fdgZuglgBZm;FjVIqmm~&f%YF!*BibAC*LJaVPDEV016);{1w0+eo3&id4L`U0IY!i=a{d0slT_+Oj$V4`? z)d@xgS*>94FR~~r-}4Ry!hnV`?5xJUX4b;uZ}A-?Xymq!VL3*CLgy0{>zqEq2kmGG zqQhDzo{Ychm)LB|N>N9JFJD5~$B)a}q)pnBF721s@6a8cnfDan@^Y0>4_m#VesX}E zw57iQ=UT;cbY>0cn(g)%1i@XXfjyH}^h3}n-H{gM;o;P$tW+rIQOuE*t;+{WEPXX(-pSDv^ZWe4S3DS^{^jXo*d6yHefV3&N8*KMH;I}(qD%~jOonmhVn z>8Zs2elIr;lH7lM<^9P4PXG+VqE=F-aph;cXm3i@MX$FM_kLOe_H}h8MI>Cuz-7rl zd zsY4ux)NRfML)9X{B;2bB)@$Aa{kU^Oq2C!55N=Z10H>!Li==d{U z?*Xrftxw_w+bhUq>P(U|5lL zRP&hKga=CN39M;&SVb7y>Qa4ARQ=`zuwj1!+fA>pT~LACoQU@zZA9uB1Y)aAoAhMe}UGG7|u z8jIKK{W(Q}(jKj3BXw0vC0{`^Clv1M&|$x_tH#wvLXT!ZM&f9u3^j0NmcxzhqQQ#@ zB7yXl#Cx>j`-~55M2+xi%SHdF%*A;qDU*#ES1?Ti%ToUP5`K6NIe0?JZTDJVJd?re zcfd$!#tK>Zj(~98c2gO8LvU;k!^YGto}qZLucJ1%0FBRYmNGB_3?jn0592eeDuHvc z`i2q9m{{O;9AdUsPn(gpbQ$s({+*$7>Plc~xR>K6$xNQr&9IZ)cX9BV4}jIx z+Pn?nOQs^z&az9(W=tHsi~GIiQZwg(^-uB9P{u-x?1#0a4&ME_UlOs3wUiw{8g(}C zio)nr@-@6w=KH)%&>w| zKC@2ZlvAg5GcRvTUZoZTxVFt8@(l+x=VJ7p$WCBZwE+XlKu053@3@!J{ME421LxEk z?;iN9hw*=g2e3pp#g?bhdkC|u%g1wa%Z~%dI>VWJXCSst4_Fc-cxAh(V)AmZEPlCr zM>37QpV>Mgnue8eEm2Pp?)3yP>AS@?0Ej&?o0_B1{(w;1glnkk-K{i5{bj(v=EEpB zR#IlYCcj@*v4ZyStXOWniCs+w75Y62e#{{Qsf1c_qU?pveqAI zZYm6Ts78vTMl&_wp1SM<=l?R1Ef53WU0pK%nGv|aKbJMb>#Ha4hw+PRNJ#6Hdocyi zz1Ez+#J^AfeV?T^wbETO!4 z_rlG*mJp`#et5TAO0Y@#k@J|Ea$oW019h0pxDrfXH3GkPj|$NhO1l~Qd#jD63pfc7 zwSkS9xp36merXJpFBt))Fy$W9KI?s*gkm}HrJ?Etb zZwz{g0)Aih9#V%WDsW%GEJsuCz5c@bRnq#jkAj3>ics{t9PDUL{Z(&?KSc4j6+K2G z0LJo|dhfwG`2dCYc$W50jKB?1IS;vaA=oj9BKFps^OVIBeLc^7X_X=`xJN2^DMdVo zGh!r9f9Ej?gz#jP^#`qz6jtE37IQaunD;Ry>j@i=Z3MgE*BjWDF+Un_zWkKRHj<;z zhra*$7M`Fizb}2=FE$81pofu+cpmt*hBy**tZ)CtnGI$!sQs9S8+t(;mwem47Zep#7(h1Z}9uF3Mf#9#d!)q6}n@dCAljTzoHj|KJt^h+OCl zE)Hc_of>pGED2Osgmu4wXt z(O+foVsB*dZZ0gVi6TH+;1L<9)3@T6U2a5sjLjR~-a&cxG(}Ga0t?6iu3X4BI2e># zkFmk=4Fb6g4gQtQR2)!VPYmGBR6LJx1IBL=Tv<9{-8uCCBZduU%2#+}rXPMh5G~0( z4;lfWwa>9Moi^jOOgb+CYb6!gLSf($Pqb=U{Fv78>@Zxj9_U$Dkl&J?yFlKP|!r2+3uGrH@Z?Ljf z5!n4Fu2@-?uLw`(r(=UPvg#-vYC_^g>ch&h(8**IJE+(ATlm`>vGDQBu9!#HSy!Ep zm)=*a$iRH|-FL>W%^Q}zc&N;jh&Kps9au6dZjq8+Nlm}-Mhm=I=Ln4(WIHrg{=k79 zI@Np&EorCX3D81g-eqzX1w9eVxsMQHx`P;yE1|U~~7QGZd3}yFlHT-o1-QT9;s7 zeT|_u&`SgHdXXiVuw}_>;9A>@YXnY4xQ~&z80^Kgr1jaL8vGd}k7;5>0mkTZT1%^q zZ;5Rrmoc=|&zi&?$UIQB+cW;u=?VP!vcB0juo&uO0%^v_JOCP{UFX_RB6{c#RQZ1* zT4`$N0G8Y|aI>A4_f{Czu=(8|3?x#LTYjMkuGNtxYnW=5ObT0a^|ox{VQ<$3L^|fk z?I4*Jt4&d(A45LjFM6RyeYBD+sz!c4-JAcSk!u1rI zUlo-BClyd19=!dE$+V1w6Ri0SHWPC*R`o|fuc$}jSMx7mm5i9iBypd9BVaqC>L~8U zs<&CxM-BI)@Q{P+21VHgJTwL)pqlDjMR)4W#9o>sE#(M&o$@9Nry45ou{9^F=;mTT z{l4A{d?CLYcx0UVzZ)u83lv{oz`hy=SnEJhGiB6ZM^puh15`)u*8X_g-u(duumL!y zAY=5#CP9jNli)A9nYeucF{>JdcN?HT^5thl_$XX0P?VtFWXX92y?kArT&B`=>}wqX zeUSQJLJgy|Sfk7T0w(Xo14pXph%a-V_(Dg70dn<)ez?BD0#X8J zsQTh7SaUN_ca*^y06Q$JA08yIsTdRVA761G@=)vFSNMzT8_q)g@UDv^gUu0#S^+;X z{M^34@|~-gec+21qZ$Dzc;o9L4?k!RmLna@zQMPyCLbQ8tYLoNNIBF}_J)R``r*rP zj>Cx>(RF8@Soo};1HO*xkknqi)L_VVH~|-3PxSqYiCtnEiua9#%T5B6+l|?OVuyEQ zk^#5#WCqoR%7A~Lf5nja>DPhgI&8>v#JkbRfX^Qf4QizxI?(Xt@|b}Ct0th>M-JLN z6+o*TpMf|^6x%OMf)om%{oHiBsw&2OZYbEqD~iK=K@3l81cpb2^b;Gw`3>21am_m0 zc)GEYW1mms6-T(iJ+hw7kO8!v-6RrQ_TEL;Y^u6c?=zdOTSvSox(~KFgY|td#L&*kD4n!Xp=_yKB~d z!H366x8o;+hNhnF=2nj=&+pJq?A#o3}NaOak0pE4+kRbU+Oc8jNFxkS^bF&dD+(h<)kHd8OH$w-fQ=E6PKb z;3E(r!M*4A*#}bP9PSthI8{r~kLUQJ5IW@1QkUtVa>eX`DN*8Dsd%Gwqi-k)b$PWk zB8{6tK3x?2LmNv%bQ-x!7i_(mEO}UY8OND0;d?FJva*5OI^pDd?kBIPcVVFchgwjIm@L|wzRy0w9xiU#j(_TP$u=Q@0h)QYhf`}#*xxr zF;}hqA5yp7MuL2K@x~^*Tk0u_h6-!jjnzplUIQnlb-d@ux%-PsXWq}y8-IHQh{${Q zZ@GRZ*yUmJ{*m)WYF*>*!U@mveyUuJ%0)j33ex-bdE=M;^^IARAHrODFS&&`zpIlE z>g!A9_WP#}7Y-;{itG7D(nGbJxdyYUSrfu8R>G?_AC9FW`ejd}L_{B9^L0EK18zUt zsafiPK`!PHsvd^9rG$^KV)gUxU)6DfIY%6p)G8!72Q=P~zgr{vW^l5xVKMLd59_v< zd7qW78jyl!quti`2yHAW$&_h@rD$5ab}4bBX&^k?X^mI9Yx7j^6#0OOUIBu=7dmz} z5f{?e^X@QYQ}D9{XDX+)#9G4vd|<53vurPSYB$gsT5miLc_!-R44g}>XTORO%;V#= zEFiC}=AHkl8$3#LOu)@gJngaYeDC^4OT=|niXE(S`%O=yqg5OMX)UFdb^4U-*<|`` zeB`#VC-PtO;>b+Oq`s)$6P+LSKHp@M=4ana$$t8cg?#z2aEA99RR;Cg2;Ud&d;n*X zA2|$lxr`Lr2;EHsM-#VRc~yBn6UkO2Mnp6MT?pQj1QT&;s@O zXk&h!le{22vF7lR{cL-VO}}T~8e>{e=|)vwe@i#^c}@*JTAQhIc-rCp8M!a=ea(5z z3+pU_#nj0q`UY<8wncuNR8a8c4z~^aB#$BU@8u&3ww_9*mY9>%IHR`VfW!~E@6oln z8yjo29y2aM5X+^uR^ot5Ue$Rmf4z3g+UXi-{h={UEj2H*h9U`f#jQpC>`qs&hPrcBS(r-c5*<2`LAnR4L`p?Q|(GPB! zH5;sd^D4EpW|>aewF-A0z~@QI&wrKJKFJ74)LG#yQ9Nf#?0EozkICiG3r? zSgZ5Wc%Oh4g|K0GKwlu|wmx$`>%I+PFB{X>7x zORX|$9%zS&JnMjl$NQAU52iMrx5_HSJvdF5Z{;7f+&8Dx*u*& zoA#E4h`j^r3i=1kazUPn-yC#-^LG%US_Y}wmq|q#Rnip;qpE}TH9f)q{vT6s85T#d z1d3w8gM^@gT?h&81Okh@ySqCCcXtQ`cPF^J6Wj^TE*>C2fW>8Td3(;e@4NR$&D2y? zcXe0G^mO%fPuS|m{{2?6>*i=C1sOK@<9Gb<$#5;+257a>Id?dWSN%PI@k_?c#S)V* zd;2dhsg$J7*clHdqi$jTr}0{Sp?@5roe?(@p{L{-`B@iyLG>QH7Chn-k!nWfPc(Rc ziV;>|1c+f@qh)WfB@qTzdto_mQ3kTrg|okL1fQ4w@FZS9!DDIVfG`X2N1eOApB*xi z3H$oyMvGk^$;6=Q0P`4OpeiZii-`%|_7~oFhN*=GWjaXj0!l||-{bQvzX0g8*B(nY z5#{gqKwt{z1%XjeP!`JXHYmN>QMsdYv#K;YORfjYHj?n{yI7yDiJkN?B&Rj zjCK^V04X*f3)Q;XOGc}!?5?;;K&zYY3mBM*HwrYHP{T5ei;FZ43o0;A?cfAhYZJ+dm3# zqv{1^EHb_Kcx1w2PM&g5{10jfObiUv1ZQU6iGS?o_e8VxpnA8xhe7#g6FDOt{fIT) z=PX;;%lpMFFq!rpI4EA9>v(7p##aB{)i1l7fa&_N&>|4RwkczNJ50cz3g0ly zVmb>FA+GJF;oT#6Mjp*Zh$I~*VPC>|F&9huj%5$>Tt1!~6h>^2XUEGL9JU8u>@tlG zlWREqMRzUtahne9Q#E6<@BJ5jARhXsZgiPHT(tO!^_^;P*CA36#*y;XuklAYj%^9O z-TAriWw{uWC0#c)rj}9zdx?Ag{wN4XCAxEkMjc!1P?XbGlaDVzqBj{pbV@g5h`84&@jT}Ixdk|U{~0bzlnm-7`=>p zD*p+1I|^*Ul)MDe><254TFMoV!w|@bhTCIp1pL z#htbS;ZC~%0Xao`{5*zq=UZN6UgtmM{D(XIGwXJ?GHAB?8(u=u;#*JqMjEjJIeR&1 zqf5yA+G;oLw~~&zXjZ&C{Z9uxIB_d)$jK=XaN;5m&_;hF<4n86g*FL}_OqJ>hwjuM z%>M8)z|N4 zfrMuDH8}JT_y$Lk+-P>IP`0f9QjqM~n$7DVWN@n-i;3q022pj{%{ps;NRw>6af8wG zw|u#m{*Xve?i;vfBKcbe?eke(tA4TE>5!?DPw1spQh4M-C_HQcbo3l#Wb_;`BGQ6C zHab5)gzB7l1Sj}V4iyCebwke)LZv)E*N*JFb`ZkL2)q?o>5~a$7N{}ttd1q9X;Rb_n?ZZ8C^|8otc-?t+YkAaniYF!T+Zv`Tk3Lb()<{o1vcs znLcDo$A#{{V%7}>M_){E7WS!fa&V(%M%&RTUN>@26sX}Azp)2!z`Uyw)P?dSEMd8RboU)sP5T414F3*#M&r1N1Pqz^hMZuKk zar1$*-!KsAobLQX2$7mlV^JYFA0y)}^d zh@yXom5tFT2?P-XD!URgk(9a(B%`?Z2kxc!2SObzQM3Lk{Bdm6b=ofM0fT*iuK!~g zRrzN1lU@!3nT2Vs`-Z?}e_)XF2Nv#LEzq%*rUZSZJkD_vpM z*YD8Si>{5M@bjj2> zyuTW+pHNWidd7s)^wwkEen6?@HC2qzP@Mkb{MLDZgTfWJ5grr&r4uc8r&A}vhd~zs zMf+xof#~um<2!oo)$7u~G$a98fvtD=Att1^4x4{+wowLm%(Of$fbRe96@DwS@k2T~ zIQd@NhxG+-x6va;lOnsCbS}+pGi0uhys!-a&B6y$SJqP59nEtx`vYQd;P|F1E!6L` zJHTEv7CxFZ`wFv>W#WHIiwn;$o8GI^;d5!X%6_Bd=^#~f-)hq>IPLJlwRm`))%Ix& zWpHrj%$VnKOW&(}zT^Cy6K-`mGB})`?v&28pKD3Fx;ABxz+wfBqICxG|Gp%|tYXK?!HNIu>FM26Jhxpaz{1b*{tFL3 znGkOFEm7+2+sq-E2)Uix$2~)t2vQ6p^JU}>By226a;_G~Ad?|I6p|h{2EQD~IGPZX z^*CI%*z97&2xM+P62;|XV{O}93x#stFmmjfOXapsFe=G3ErpZM~(tHS($le6?2>^X__8+Y|%WDLo0qXc->AT%m0uY?3r41skQej1qlL4JSz< zfzbp=5tCnEvIvQuq8&v0oCFt;Bg$xj$}wx=ednP%c8Y={Sd%5~=@m9QUfpa>AK4AP zlFF~TzXUm43@lu!&YZ=Bdu>-w?S!X7io0#N+TULcn22>dsYiO5l&H{8gRgZykg(>= zTzi?cxZZb<_o94&aGsgj^*2QkYZ?*ezMk&jvsMr0dyow}ZOc56?D_k(siG54v+!>Z z@JpL^*8?<@`s%ZEjPwV#$pcWZ_shNdoR;y}ej^K@ zVoyG^<|kH)gamCf?IR9C4KnRuL1>7BWT}@^{d6YblqPS`zr; z*jBvpB$flsWbEW-u~FMrV(NlSXEgZugL5`v*h;EYnYPWGA0u`Wqev99rLaeTiw&J8 z*W1`2uKkaow3?Bk)eAND8ggnKrjBUY`g7v){$qsMlYl7?>M(Ld69+DdW@+Um%+?eS zz{x}idse_Ear2_vXCKs=Hj7x155u-%$0dzp7a4O(yGq!;dyB_GPT(K-+L08~ZIu{B zs+c{BUF8igArcPq7D{s-pYV+Bavb)-ImRLE(fA)3+t#I#*jDZUj_S>asm(jNg6%>q zB95GzZoIW1RRG6t$&aQP$#5IYNupp&iQ%!4KTGz(H3gX@=3TzE4gmDorhOt7a@M#}EGznWVoPd#7V@_u?M{mkPTLut=)^3odvtjN zAMoMA&ED-!znR0ZMja!awhur9;YCLP=A3xHpW&179yuqLtVQAX0@2nc)8kP@l8hg< zGZsFDghw(6Xp=Z94Pm;8RpfxFH z})Cv5Cb}x9*ou4fO$GRpICOSaw>!uCXur z2C7tXTFp`u2zoyMQpq$tz}WfjeSndkU;8_+#qRAI7e5BGyxvjh5e6}?z2P4L0a%!` z7B@<`^IC*@Mw_5?I5TFxbUO(V#aWLJneae&v-GEG{kGv?{obSm?OnxbfrRD6`uAy* zau>Gvco>0@*?TXW1_Bers>{yqcNCNZ!|E@A*@mq6rF5J@^^l7_hRGq_!KjlL_$dO2 zVLB}D!(q7YR{mtcPOAlUen*|2Zxv|pEcF5+e>x>w;BalzA#<7d!}p9oC~l8w2-j|` z!Vvq-yBk)dJ%*9Lzk*auPphBjP0mc2?J~gfhQfBhN{K9kO?wQMWd}MGQCvnzR8t@s zE}(fTzTF^O49{Xq%?wP=s+W^0%VNU}%VIN65>r?v{H~_3JXw;(X5VX|NHQ#{NHQ=& zPrI(+UO_{SIZQ>19d0^-;Y(dX6N?s+#kNXfJD`k>!)2n?^n7AFK!rsPSAF)ucHkQ( zyNUHvLI90^i(yv{g*3lKg0h?hA>c5r+-Ic| zTi(U6|Bgh+{}*)CW?HHXs>ro%%?J*Ik2YFt!m^y)!fglsb8jWG9ng7aJFrrqrN9G3 zhu2N9|LFn9!2{5O!8zJJIj) zZ)jCTw7+BRnL)$}3n*hv6L90amF~CvXm&#{4`V$;yY#fb6o-SYzN zR2M_wk?x@Y^JC+gg7Qnn#tL{AJEZ2!dM4p|W$kK1CZCnYUsA1y_3#QNF>m!{&zB(e zF-8@2JDVU?sAV+Ag0shSx>A7GYA(+)uSv=GA;&_k$6;EqCW?2m^r=C7Z+^`iCu`~I z&f9xJWl~8_ZCW=#H_Zj^CP+$Y%F0hF(su^#fmwXl9adkI<1TktU$2>YCt56D+rz-M zUs)&bUG6UkCiy=Pmv=>!?D|YA4J1k~19$!gOW?6FN!t7ss9SoF`9hVtmsKQ>B$p>x zXk^OVTGK75P)$Hj`rY|<`KOpnvt6tcd)jMHwsu+72jaEEeu=_e-PqgpW{?=UhOP&5 zH#+HT_%U-IdIO)Ux1o1WVm7GblQrYV@p1jphz za_rv#R$&Kurt5)zrG3=P6@0}dZycG{tE0LAHt$b(Cw|-dQ4 zK2g9Q`~or${O|%$v2t#3u;9EOi4&0ItM3TV-?LaT0%*MK zk2-^Oa+C}*2DIHV6ye?0?bLsu69OE1lRaAl@FEG+|H88I=l~2q#g~@Qx zJzM1Xy{0=Tm&7osDCb}NjX!%{fPM1FQFOC!A=Te7Kv5)Ml~RxmAlKqw(xK(#{)WZYTP%gNDw9S%)NdW%Lp@4f{*Bp>Eh+$`8GZ2@e8M2 z&A}bpQ3{*gU?lt-;r%PD1|s7P>_M?`2}%cw^UcOtvTUW~OB54*?OPjJ1W`Opu-9jFx#)I|qDP>Um`p`Fr! z*OG3@teG>1spFMr)rFq~S7=bC=ya(yGdApG*z2BD@usO7&tGIZ>2@ERwzD^Vudr?m z9fffulXr&Msg{J8egNDN%hoUo*K)tyD0t09S}_&lZ1%?$((y>D_yl;|{tsgz-r3at z`<$W+o~TxAdj4+lMe86r?h2z(@c6XLPvGdW74OAw)8?HVl4Y}togBYoC@tuIc}mIc zvY{*gVCc;KIG{W^Uf@X?4L>-^;94w~B!BXDc_nXc#%+KO1>>>lz;!D8v{1JtW3^ zbfwJ|wpBvcp6M#Tmokc;`we@dBij?6H_XOauPjggMQ?AE1?%I}22;+NB3T^b9S3%K zmGdm7DEch;+0y{rk>SCN%Zix$QEWoy5ioM*&zdDmoXhj&4YABdkx1ULK{F*>%Za2i z?=dkuR$MFDofDSE(Q+c7NhQYoMO%~aSm?>+9!awPKE6M1T*y(Kg*0pH6vb}+$th53 z6TtP4`$y4MKlx$6n1I}27wfRfxoMKy^0(VKe7i>y0lCgpMu#u^8M)e}E5FPHUFrF_ zc4bDzv^?VmTRU81&v!H^ zT7Bt?ml>~y6nuYl-<9G|)>u+hY5HY}Cjdj@omZ=yW=Dq|xzIU*uYK@L^_9~m573uQ z5A>t#ab#t6(toG=%43r!cGA4(f+f683*DeW_#c^6_~db|v!JW<63>sSt`VDclIFAC zl1sW=!5_aW_(E^)X9p>E=)5?-0b3_G{@(GrNlYQ%@`BpBhUdr){2u>Gs9S0qMX2bl zz-P39Ej3kL!#Zmd=g}42hk`3p9;SPqLH(ib)wtvJH+&oLl;d0;9q~4Iy$t-HBL|8N1hlbxq0k3 z<@5ZYHM_r9jNzSU|Lc7k7H~}9T5N{$M~%sMRcR_QPxyf;X0!*M_fv6yR2 zD)|wEa*7;^SRA7g;}(;PoWRn1-w6=NC5>wKfEm;?MKyZ`(dfR_KuNSjx)GkAXcTOD z&k$q_g)FD@Vxv0K-y3XFoY*9@lfdzsOtFamu8f?R9e&y%>_ zGmflq?KPqX7Ma$aBnO4 z`lnsVp4}^e8Xo;ymoGI*lLAXuv@UB@e%O(|K~|^|0OCFs&Z}UQyKz&f z>n=&$_}c|w)?fb&UEz>9n#X0T5pZ?RUQPVm-YlC2y9XDdvj{A9aN6#$2ZhJOa9m&gXevDFv4_0sH1-SOl0g1i0(n!bj~@NZt4k{?(No1bEX zGN0u$Y>vxgLtxiFZsCw=-^pigW4GzM23l@fT67W$_sFpu=x@Jt88I)5MWOcw{`?`y zC9zUfl;xbC20!y&whfSVHOutl+4oQiw{9~~;g-s}W;gNT2zZAU4Y2IZ<+ zDdng#E~?XG8})`|_|P4|;qboz8qgcBxI#lNhi6b(VDYd(*D<+KzK1`oST|IQTevPo zHUY|np_*H>fhN&&CbJ6|Tg4v@s?PKfFe`^yo^TyXk0{5R%>Rp%`*>PjA;A&h1Lpqq z4L)7ullc3u#)|ZiveM=0#N-7-4o5^*V&5l-bDX&86tWP4-3Ty5%SxHm%YEnsNh?wu z!5PNX(#T;1%|mL>Vh{?hN+q(&eas_mCqtqVshYffIj*n>(d7KBFbi#8QPgD?h<>cr zK@Qc7?6JZ636U4%lSizvB+4%U7e>qK{#fTltjZLnF>cA3Tq?RJ`D%HYS(2{Sc2)rX zokY;C+nZf`?nfv&mBJuWl_^ba?Vic7muh$M0%voH=u%)V7lSP{&-S<+`!Je8?;~ZZ z_Iw?my`q~tf8X1&5USUr>nkv?^??_VpH?ri^?%8_SvG_cZ`qEwANxKsywf7yQTb>2 zjE$&u)Ud{G@b&^h3->cnUx2>BOUN6!7IJkn92XQ+MO#z!{1n@+`;mL;4}0$pwD7hM ztlFMA@ug}Ey&bgQv12RX0h%Dw&ct_eR|K8g+GMg=m4!~jkFwIaZlA_Iw{^HTw1Dp# z>IM76oD~pt(Cy=YQ=^6Zh*p<&3~jykW!?gJzH3>=D7u2S_`&!5e}x1&pFj>^@eqYFMJ^F_IqMjC_y(u=en0g z3a28{bD63|_H^x!;|fnPfXv6I@wffK-U^2qmy5K(mzx~Hv(S!gVep{OcDXJ=uUG7| zU}O>WqM>R(I^8FoVuY^}Vs<;IxIv)-{|C7U+Ta_x|2>{-LItLMd1-%Pai8%ZAX{Kd zN<5stD6yaoYvPb6dShJeL$_b8d$vG7ZR9Uz1!nN3d+07SF#`{p?p8l|-_phaoiv}H zvf3m*^Hc$RO{;ZB4ikj~y{ns`Cg(XCLI!h?pTWnIYNJ-UBbAW>0opL-5gpj9q7`^B zfv+k6M0N6lnyRHlIYS6mft@q*RZeRx$h6p7&|F8ol>(bdVQa)|80Lw;B*>Ra7=Ne& zfL!#5?!|Bt-iRxuNxmdz9U+cIR9dXYz_xiqImV9O-bU@^N` z_4qfqw?FoTbJWoG%l4CI0!S(~^=7&vI}tSEKfl$Or2Dxb7E%Vxx8!d4BlM^ zIac@H-Y>e+qPy8iefFT-=inFIU?N?#Df_H@#Xd}4UV`_>-HA{W`CRq*jW4RXC+y11 z3qO%-F$=KOaci8F1)4`hT4F8szNsi9fCp1tl?4PL!Y#3paT`5I;0`1Nb==;PP^h0! zj@mvJyr1$bH-T=W-5W#w^3-fsYB~H)=qBi4cimu$9r&_wRop2z+2`wD-ADqIK4oUd za@2INyX6Ie9j}HQ)p&!B^{@Zpw-X*R$?fE}kfd{6*GXW;y6c>AnNWBi+}>$N-n5JX zn-!y794rSF0{-y+9|Y*z5ttM2?w;XSlcT(U)-a>9@by#jOb}Fxa&KiK4hc9x(4d9? z7`A{-K%Jur@Nr-IdiOd-z{EbxEE2K|E8o~(-t%akQb(|#8GSDX4&Ci2%z z^>2TNWH-JNW9Hq)OIWk4o~+3{XkfBM#c#Ou~a1~S&5w6 z7+Rnw;?kM83;u}3s<=d)dR4y&pfP);ivr^pzoFgLUQs!`s5Y8-E!{_1sUDbt5g~tOKZgtM0s%x;*oC+i z;pzF!-!dw$8yHY3=uyJwrP9LYM}LyL$?deMKSVVVG5GUW$oYt~rwTTHN)eRJwIKSY zFomoNELpIyy^-tj~RnKNdCshTigsB2!wnp5zxp1ZZ&1L?7u=Z#A-qew8h~EN_ zqFJy}(c1s_#{QEUf^Dk0uv7d?1SIk)Zcwzr;7ANx9hgD0KX=Ay%e>)B&RrsCNspMC zf3dNy2Bl^wUK~v}-dfG-L@yS!q>%XSYoJFDqsn)0U~_=03Z;bMn@Lr~AJY~KHi{%X zjG>A^i(;j9MAB0pqB!8NN(aLiC|-o;@BadMtSVHDMRBG5t2e&1|L>nd3;Ie>I#}Xo zDp)_gObMqCj?@_YYfJ%KOyW$hq;=??i!WI^h!tTKl1J*1z~!DgGa_Kz2*@hpl?$LuxG1 z!y@$t!pIr`nhMnHOV(l}hcppwLkPF*|6@OCf9dB}=&b@gUGeS}@m>tYf`1F)88XU; zo1D5tFvY3r_&203MQ{MMFuq=7pPDgjT8gajDiIkWH=Z2vz)v1iREttjwr#S5E(4O3pQ($F#&>E5{^F?#k7KQ(r_`9DC)DW{{DbT{~fs>h*K>QVmk-!oTAiE^k;bTv0smcUq^r#qXuw6Z}cJC}=8QafAP+@CIKY zd{v77y)Dp>1}xY}4rgqY-{3!&t-`CxI^2l2>@a!VzzH^J4)WroG&PFQyw}3lkv`RP zYO>~;mD@8J$NYlTPaw&?_(rlC0T$L2p>idBlSSEo9^CRDR2R!gJcpZ6z=e&%$`rDg zC}3nwPh|>SL=^BIv(fuj9alv}_4MH)`-pVbaG{~7?`O^2yWa|Q8C5STKS(2#PwSmf zf+q&6g$rpm5x3*p%@w$y?ehv;wg5mFnY(^!DH+#dzgR4&_K)fhQ0;H{mH>r+N2=y7QHfMu*?yFE*N>pCn2rgd1Un1;ChHb!F+btoYDib^m}1Dd>)%jS7&6Hn6zW$D7`!m+ zCc7W^%AZo|>7L|F#1+)4A}ro3?=NK4TQw{yE1w_sANc8xthhP!mF*~} z`oRaiem*)6#ZPLN|Kq66b$rdV?V2j*%<}yp8COk$(s-9BI{fC!RUy;Qz*Yp z{9Jg8FC$!jtHRBE`^V9k|0mEQC9X!USp_C$r92#7f##t8EKRL0G>;CB{~`*b{(u3F zw`W!t`kVd}8rdf{$(LFQ)VVbMgeC`PURDaLShPco7{oMhKaffX%R)%9Xgpx( zPWc9&rW@)2f{Fh<0I^o$$&tqbb}5B#itMSTFQ=Q)9mWE}8YTk7`RE@LEhr!H6$+1~ zVi_!i8WqO^hRRiMsQ(klkI7BwvSIdlY*h3XPS}p0TQ)FXrF-fJ@}>y!2#DUpjkO1t zN`Wix7<=Lpdkozn_zUkE{sLDBqXJV}oCV6N=!=A(sDI$SZVgrcg?AKquNj0s&Bvo8 z%FJu63MT+d>%e0CRd}<$ky6JvjAueWj6X&%7Ha%dEM(eE{|xV*pZiBd@6FNgoCgu(5JDSBL@1SMHs&0I`4(HM2HGrBcB!G1|kmoBF@VE;)NhDPK1>UuFVtCtsgmpB6kn z!OsBv<(~hGX>Y>!*_@VD;m^dVDdS}Sm1kgi)dS*Wl}aoAQ9@LT!L!gyUGG!xD~}p<^cu|i{B#0@-WYn2U8xeyU%h}0 zU+Z2cH(%V7AL^bmg|dW?FYcvgmjBJ8|FRs$(zgA1bfUfa1epN}jc?}%p5N~TzMQ=* zC{33?S(pWQknOMj*VE%uvUgQob5hoH(i_*q_Zq=XXX9x%@Ce*o4M7`hrD=YB_@iI|C1!A7h&dSbFRAd*u4Xy_s$E z*IBfWo@LKH)BEym)qBI~FDG0Mfd!?1k>0a**h^2l!=EX17TT(F{l{Mp7ycQP^m?9L z=he2(JhslfVaa_vwe_PJ?gDBu*JtIPyy?4BI9W;Y_625NzC3?z5ltsg4ce+Q!WeN3 zP_Z;S-{i2$Up1RqwlJliZYoX$H(~2pRav|q+48!r)L$P6PRzb-S#L?Z zuRD&trhc;mfdROO4X2D&viIg<`QeAF{0l71`s{mEr+$&6pX*Cn${|1-y`QUh(Xel} zeyEsF_Oc`NGMNARbQ^eI7x+5!`ZN>xy1&D^6nIbM)}lDGv7FZi%`hq~+9sGh_|^E~ z1->%pYs4MIVwPq_+mDOjQ+H~?&2j6_X!Eg#)_H=s?px*Lsb;@eB|%Av=MxR2pHESG zGxE(oi<>?hst(o{Ayq$L1kuzUzNNP+2prgH92+fkcF;`yn6FXtD~ny~`6UaSafUtj zO~yNO_s6NR*S0mE3L2;!8|iQg&VLw%ndNuc+Z@&&_K}P3_$DJ5xtBa+ASL6Bs6^)IqLJhUN95sR?F0)HylSVY^kysqCjV{bTPX6ZO1N^@%1K^Z-tO^ zNlm_{X|nL-y9;Q|-IVlZzZ(bd_5+Lv|byWDx@GZl31o<1wTz+Yj4$vSgZ77OZJLy%#Z{Df~? zw$nhR@$!Eew1in9j%T+&zI_Fie4 zSihJ5r-3Cwd}ffESbaE_66mc{{3}nrbc!z%9CV*I12W35w%1s+Nd11W;_|s7c;WH% z`DcK^;|j;r*m5emd%b2vxg?}^MixdxqMlnO1FVz1S!(u;fEdbd+$ma0H0Ehxt?1=D zU1`ZmC1&12L|rU=Q}*)4pPu~m7DT)Q9%<~03e5BtxpQImXZo7h#~!Wd1L^+OK7STG zQeZI7VJ_cWPo1<2UEfnF(ymWG6?waKT{0__5dK*)$f5SiCzJ7&6PHG#AN~dxYr#-^ zI;j4Qwr@%WinJ~iSGajtB;|3W;Rlp8UTaTV*vg$*QdM(&tBWl)gr3yeT{1Py)J|(_ zdaKP%j#yJ=LbJO0FP8MCettI7vSPAZu>2lrfqF=NueeiKj1^$J#}O^d9BuJs)2901 zqOrMKS4LN^OIfplxwM&i=NII&&SZErRo$ZrnLY33%@scS^KVlLhHTCA&aP^s>Awa> zJDxHC%s({56@8aVZGvJ>Da426a*c72RHcg_IePIc;%TTmm%F`Wmf-Dq1JL+p98nLY z*}WmeTOX1iZ`@Z#us65_+d|zjEFJ2iVQlRC;*mdNliZ@3bH>$H*QXMYYjbqv1!ZV_ zko4S`&>>qiuvQ8VfB7Do&@s@LMB?BX%}o%H86g81vS7X z^$e^BW!MWGTQ}(InMbow`8HL?X}oH6x|7niO(WKGiCZq)uceA*Ojg3U(TT&bCsI#A zzWO&hMtqN&&d#^L-+=F{KW2|-5lVGE{c{)5R91ZM2NrEWNJg4T&Y*Nv#V#Kfs}Nlz zvkmRzZa>!*)Q+vLJeY@>dc&>BzUn-p+GoOt=bWmoZ7X z9byQ|;mQ-buo1=Acu(*O-=`A=3VL;(PGd-uzq~`8d#G89wC6~B1-`eTL(|KPd=gWy%sX_0|G0S5b#S?1t zoYlXdj$YC?D+wr6TpxF-Hr>$sDv>gLe)8y$a=bSg7@H87ZF!qMy3}p^4V|Hg7;zAN~(w@7YrVj|C>GQx8Hs2>B;(@os}Y2%tA zmutZVwz^oLJS_Yo<(+1~yWTu5=p*~M1Q;o51C#H0b+pdBuSwSF(e7oUt7)v==9Tj} zA78p86|89BlG1r~zD*gL_c}sq;PoSG_(xZTV-Vp}C%}KNmsP|>?!B&HCa>#Z<(gu3 zNbPx|?r@i#*7BElsmH+Y(|uM^wdW1gJ19S@0G`C`+o5D`C7qGRvl^BQU%{K}fZX)k zGq>CFnh8IOd_LVNg|w%2NS#r@X+?_$ZzoG{`NMca?Lp7R%G0iPVxD-?lo9|`u=d75 zj%B=RETghYtth=G}Xzk5z zQw=7*eT)lJzOp_Tlh;V0S!5|D{uk@S(%jX>x0#+U=85CTk0{wiIgI6^D7bpblbBp` z*u7+RuE0*^RyPAj{flwEUU5C{c%Mk9__XCIjd`8M$!Ud`d$o{;kj~QSZNQ*rE6XcG zihJ72FW*juhTtg`$eVi(&Z^!ndhUAPiIwHXRJ*)JBGu?d$Trgu6zZ$l9zlEm7{5w*kiRO$6EtgHEJ!N63I^t2=M1N$bI{v8iH2Rj=mw{ zsa>O_0(U+}QD_Qv94@`sAXQH{p9X?;$ zZHNCVL$}cvW803HTOT*cos5S>Q$gR>55~6Mg>4Itql+AAHeiuhGbo-jYDwCTuf5bL zpJIhY&IH!VABM6;`oGw+%w|{TFYi;}0a@x~_s7esZs|leH*Q}PEAoYd_YT&4ixyY8 z`P17!sD6dZ>JY5P94CMzVnr&Xc4#$K8T%XZa%n%5C~}!7L#4WJ*B?;V+1v-&3sNuB#*>C6n>QZ+CL{G!WiHA|X;tQ}0Q``w z)F@*aZ*H?PqIVE4N`%r1mE@1`R0eoJCgb3Y0fOY zqI`!g>dZT;sx5zz zY4l!gs49ZWH=?WOMpFb=wvA@tl|M53%6hgGwWb zz>om#zY&k;T%qD|FJ(e03vfwKW7gm!aaYWZR>)PeQWbN8%6~*x6leysw|tYH8Mdfv zdYb`y2Y9C@)uU_*9ZQpvpVAL5UQCpU&+zeLxU4=*8I6k!s<61eQZa^(VMxnQBm3RHYgPRH0*~5IXnb@6;u6)t+$Sh2)e62yK1z z5TdFS*=N!JXpx>;lr&$oaTTA!=KQpnxEK)z!bDP*%3?->_P29TC(x39EYPeZw>m*s zOq7ZYdPrPg{I=hPil;nz7rpLtW_jdlj>;w|jumT{*T26Ut%wt!r`-&asrps7ZnVbm(*xYB2I>bX zT8VtZ`W=E(_F3?K9u`)-A;%j8Yt;1&C+%)w#pihvZ95Fbv zcHz*Ju}6e}ffoKB6;4?s8HM70J(A+4DnU!p`#u{Cq|~=M8qm){H)n$!mI0M^pU!|@KjN!VbWG!`<#u5VsgLF%P=OQkv#G$L7jG*{uO_0P=TK5r zifKHtO6o2S(aOOob7`3Jtl0mMSpaTDoP0fY1xwuAA(bwAMOsYhQzY}^vRGxyTvPem z2=y-75ie+=Xna|kFUYgsW<>2MlL%wL3#wNqMVf~?Dv$^278+5TRJhXS98z0YGv#r= zqeCwP0HE88+l1^n50DNsA!-YLcOE^iJRiE9i^WdUUu%S@Lu!*$m)2}3>iabWxaBy# zk%-{!Q1$|NK_gd2CISBAauxw^+p(AH8V2X$bC$!W=tRISG1IlY(*@Aw0k(3`x*n>= z=${}JFs~4v2E`-3q{hCulzNLHeoViqI!w7tLSytFoVx-L*RcAEuR-x4iAW@-IfO)y2s#rLWF7FhFH1@k<+o9yhD4JGEc-jL>9U@)55|3HE(?(ezHyW&kMoC?VgMwm6f%~Q*jyptWR6AM6D%==SG?(E{ zGG1-ALfI5&5jqRfm9x%`f73EO8lvlZj$UIXi?6${hFG(JZcTB-Q0PuZp)19TQ4!pf`t4T9Kk*zvLefAz=X{{{ij%_+Lyje)ul%yYSrbgcCHt7&sRPGOin zY<9z5x7K6E5S66gAUPym#uLez`!C9NO!zW2?Ct@?t(N0k5c9Du$o=vb#0x7)uW5So zcTJJ8i(MdnbWIawy*t^G*D|mK(kpeqsV+Q3V>tb_GAKv&?4<2FkgqXLdrBPAw5N|@ z&ipyD1fLeqj;4&JJ`Ot<1wslyH>Oy*N7CN>zH@Agi~_;umNKU3cSL~<@2Q$5lO16h zQ;ffrskZX>D2oHhRC8%Cy#oY;G0hkLTu=5vV_n3IVZUJFR~P zC>~#@2K*P}pP&?C0#y`lAy`ZXw+8;RhIPv&LFX2NXcfFg>I$S>&q51Dh;#*F^CC6( z?Zxd|LNsEeR2?xW;cJ5lH)n01VdkE4c)B%%)vj4RC=f9eYSF3~mFaK4aHD3S*v8`a z?x+eMTj90dtcuh6T?3euBzhTIo!kJPcRrNG!LErb<7j?xHrEBvMra;=ZuhZNjnLf3 znw+)W8_L#;t46Ph8~NA>!h%B_GpP>6LQo?3LXP@>luC1R_Y^oh88SD5{&7%Onfb6a zg5=<`az5tntptf+)oRXXa!JimeM@uq3e|fnhC#TvAW4_2WK zt-5N!*Pqh1MA4GNva;h9j@YtI6L*4D4^Fa(jBMHVpvKlrpW6&+?jNwXk~vH*+kT-n zt9o7*GON-#C(x((jHjP_BJ2dSZr*|(fI_O8DB+NZUK`g+Rt5OiFbHjs4F$(H$QMX% zP-t4EPFF@Mf~o+bTNIk{8b1G8?5hW%CVu3a@$p>R0^M#nRrwGWyWX3B^`QOsCTN2| zuEyvxqQ?F?f`(K$C7AahRehffS2Y)aA?^N zdA2Da0|R5I8)9F@6$ciNyC&RyUOmqS(=IWAHWZuKlCBLrmGv#|nEg&bZbL%4+ZFnOIce7#DJW*oDZu!q}(Ay)(Uhr4F(X+Su5XY>Cf?5+QzdfxYO1nCBmE-3{O&?ns@ zB@L2GNlVwVNFxmrN;gPJ_ZHm>(y|DX=C%v;6AseLKqrOATgLZ-bvA-AH0)ez)UPr@nn;6l&kD1IWCgN2r}0=KJc)%Fuj2 zjhNIG-IZP_AJ@vgOpXh^O<$gQpB~b+Di>```hLDvvB7z=Y-a6gzM;mN4Ol_6VW+7| z`$iHyd#&sbG~Lh$)!Li?*cxV)ow}dF=G59^HvU?je*nMsY0igs1yVsjvs#_}UaB3m z^~BDHFF3VHf9gwTUYz5Y3Azdt7c>2MWY+P#cz;q^LA`oprvcUrp5C!}S(s7V46K;> zF>Oz_!>Talye*m`4_UIC*hvfYG!ujkx?t!z6stAv3Q3Pg=vxAWrD`)M0F1Ha{HC8; z)6g4D@gLYI&GY%Gx@R=$si9^i5}5}Ebc@2)g6qw%@xk@~RokPuo%BP=aa`_xt~39| z=6!UL1%I{9{my|HPlf}@HRHp7b-ZbHa0+*Qt47o*CP>u-LqE$Y#(zfCaR$mT~rpBbt@u~F5uk)+x4#T&k z+(ST@(!=+PoEWy``)sj>b4OW$s3ndEi5R zQtreF+}{L}4I$t(;BH9Jfr-(%LeE4=h~V+zj3NhyvC}ULDnUWf{V&KUe(ceUSrc;$?g7r-1>xayPYze7H}=ZeCKJx-OKxZoR*d?`*{f7C>G+DDOW6@Xt5BTO5u&fj)hB z|K+A*9rA#V1CH<={Pq&HlB&5e-g(jbH~xKFNT}gWDr!^jrDSNJA;9R&jdbXu#^?xq z|IqLbQ^301)=856kT-g{aJ%WOvmvh<*eUsNHC<5fkf(J8zTMOjc=jNfdu(`r;t`-{ zl^ZcgJO2=3Jp%wj^Dwg7KcE$OY^z63v&XjGS$5wLF z{+@ovv`PLUUa6er@rYL@`u-}x`rFv&cn?{2)0q23gTB!JTf;mle7F~SI6HW_Dtx#) zc(~OGy{dRP)(K4)=*zUeK8s?uIz1Z_>4Hoa(B1C!Xi}TB2oUeve5_(SY?WussdjqH zc&I^4vv87T5oepDJBnp}RFXNj-w#)o0_KF)-;eqs!axYPIVv25-?82R{OKcNp= zaEE)-Xd5*IWcJ1e*oMAKzT|>y5fLxi6YdWt=TuCDB70#<`tb|aD zkb!pubhLKHw!{6eU-T%e#s(%7&O`eC;?fm<2(S#_s(T(=Ab$M!w_Dr0c7ciFifB8E z<>11$I;&F5!o@)8%`?OGPLE_MD{foV1^V%&OwVd(p@p^1qgTA*`XRp46A5JX>q1(* zIW$b#FnFJ%ROY@Q>5@r!TRUzaR|O@*&!8XP z-?W4KNX423rY(hxl?#f?G7q*Tp2Kp2^2Rd$BRVhyPuZr%<@!o^FNm7C2_1MCe-Rkm zHb)8`SrDSMhTc9(x|n=t0%ElhuZ(Z9UI1hh9dMq9jF!)pBMU=#Aq!A4C@@{YC0o8th}}5c0%jGT27Z6V0OTK>FRd15hzzG=Ou}HwZRd!rT=Dw zeovZsN$r;@cjvKpE$cnxBs{Y0e)rnq`Qu`lpMUP`+1RB%&16f4bxqY5s>_(FC2_3$ zmtCF}=}qT(G4@l5bHYv3==KOj4^_%sK{~&*1<{Nw9+cmg#hMN@bWm##`Q~(IVxpcK z9gu&J9G2N;vb^?t9=%Vi<@5Y&k>DW76dL>9VtaC3f4bpLT4U`X$$}h!sZr^ZH_|3= zG+QTibjmGH2hVcVe##`Z)5w^#M{fA-+)TYM-7bc+GN#uCX=6@M{qmRK-iiIMPkkBk^Z+Kw#;ri%F^d$ici1tKNk(l}mQNR7E@gXVD%yWCNYyre~OD|OaSK!f4m%J%GIZun_7rB)>_7+Jq@0EEwIipmsI)P>7uJ+hM zgqQW-?(++BF==1u-wfMNgsC683pYR1=6v?r-w2bkZcAHSJt=u=YV43_td^VdGB5v|Y8$A{JDBQooY%IHR3|0icSvrxOyMCMvSD7? zxa0AFGA~^Y$;=kZXV=T~?Hai?Bz4XafiJ>~i{3e(0X8s@v0oK14eOq}kS6(pyZwlp zd}E8{kWF$k_+sXY+a@+S;+-5&1`08M?b}tzI2q-z70M2I4{q;2?E)6H`KjVyF6u~e zWR=L#9vyezBZIB{;fuM?%tlbPorEY4*>bW$i(onEB8k1+reB;G%A@Shc0AS<-E-^L zD$5}w7W?WaTOmT<3HU8OD_w7e2w3;Kd-UBQAjO)o`-wV~7l2|Pi}eop;`7y$mwM3+dH|%P#x3`pb0GA_t=;`GAkGRImCgVJN`+nbAXkUh$ zCOAjXhM2ud=pnv<9ku0oN_cEX%KxdkH;IhlhzukV&4`l_|qSuEYImpsj< z31dpKe}pC$moM6_j@-!lfAmUc~RKq+rx(r3FxAZAhl%qdT!5V zez=PH)J8~eKK5?Lm5e^`#?61JvG@leTi5As_-@tkNNeYdMH-8vW4{lBl3||cUpp?e zGDm;tX*q(7o>yN@Q}m7qNeEgf#B-SUgb#O^T6_pQ)Vc`O$gk%ol|5SdgUN`>D}Z)4 zM}ePV0gHwSbZ(8Q(GwL3)RhJ0B9R)#=6bI(!qV!X zomBQ+T}Is$#^#Q;8OSen&^m{l&es-4YdxL=!0LK`WY^nXzT&IEIyo5yiQ+oxm2Ht8 zYGX{zF>3(+qiXiLlBU-mcV}#+R*v23f^!x-q*%Npi9&?&RLx%+Yurc|c=ivxmcMA} z!dV`7iw%@#9`jQ*{~oQ{6|Svnp80ZE<7$|9f_k=Mo;z+URtFyH4X#=6?T>OD>(G&q zSV^#Ptmy3EBBGSipwgy~O1k`!JxLoB#YLgYB_YvBcXz1VJF@O`gqbxa7ft}0XK?{UaoA0=Nl2?NE4xANwY=f2gA0T-uzo0#AncDdi=Zrdr_F`1i! z@M;SygUjVBiOXfhq@|clJ%MB=>C3~uKG_m>%M4WuQyIu4?W}>Iq?`ZBvf~7;kbw7` zD1yo^U}Zcwv!Gu<=E!u4*v&hVk1dHn_GpV&_UMpjE6#^(D|V=1nmXBiiaHd7v`ANu zYaoQtbGcn9!V9Fi`B3 z)DldVhbVcKSYqk@+osmGOy6#w-D|III$d9&R+(paRNl+dG1kLJzuNF#F|v;=&~oI( z;P`g)yw#Nx9uvsX|}#pTitYk9#~%a|0Sk3w{1&PbaDsZ zEY0a$F0HX)LoB5Zd)|=Pa>ScwwUWz|_)^P|B_HW`_+<1@(?I7O&)&~3>9j9-C{UgD z%dr}{YwmL+ebmWT@ky7>eipz@<|Kbjsoq0_&U3_hv2TBgV&rm#W#3bGswDrf60AoW zUYSF4E9OhF@*eXcv#YpMhf3meZ8~J~GK2ZTGH`VUHrZl!OPSVI_B%qdWG_B4zF#B^ z1u7NGv3O(*A^hE^&i}34%8c~#cB!+zF+Z|c<|#COW8o#4=`-G@ZG213_ENwU-zZjt z7$`niCi6PS@kV_+VKH9SKb)22C@@pu7y66cQf#Kj_y3M}nv_*#zE4e43nh05@;(aj zzj~*=-i%zCU5;H`8FQo+FXdx1o!yQL%mH05>l5r$c=`5m!9>u9YKNNQGWsghG7b>(FU0*8xk%;c_D;>P;|9{^2imRX!O~I3=6p@m2(-4vjYai%RL`7}$l{Z)=}+2I%Vu$-I8kOUh0H zr)R_8j#~6?3H(6aaadd$xD0783&Ea4kT4u;fF{-9YCn8^33*M5z@hSAhRF3}y6QE1 zWahvzmJ-dNDPnB!Yl_F-?u%0t(8t-gSLluiBiKe8f|loRje4-ySXgIfzg!&fKTlQ0 z0wiwyifZL9=!GD2UI3_TMsraZc9U-rc2oOGt@rBgtKmhUe?i+~CRp!okQ8;$vw;CI zEr(F5fVv1v+7{;sp^HlDpstwjn2=3q&mFjstpH?1I4)fsu_>G8J0AFay8x>nfYtB7 z>Mul0S{(Fj)j=|5_ss%R;@cJ^TbBZ?;O%xuGf)T5BUqYv`yjy)iEq32=H`KRT-$?J zaa7fT!To*a)Y^(%rv2{KbYX$~{`hy!-Ax^N3*=^X^zB+Mq7@VhW_#GgFHGLUo?9tF4b#&bSB@~jDOG&8gg~bu3va77Mwp04P`pKzY5%aAiF_^ zVF&EaJs!IKu)0m}k8^_QT9@a0z6VWyBgB`GnS~bxL33pp_|2DrHy-t$QWmbrMP;vh z+HlT+_vblD9<*26F7{SMp~q>J3CEzibi{~q?#TF~B}gz6MVSeMbLjnX;7(zA@%gdw z;)&_Yz?)FQh0~5yJ9G$z|Q$Zh0#(Ahfa^>qcwN_!0 zimr2Ac1OO3ZgxEnIx+TBWx0)+(q*|mzXy=)y_0Qg3fj9d16OugSZ{VcT$~6=g+B*0 zKHSNh)`q^h%PM#<9kaS0+-X5v%70$7Q0@`0BuY=>uST5zY^KzDfgI@i%=-0Vd+}jE z^m6gu-D$ksyw@Y}KAqaccY8HwY*m-#uI}pd%YibcDst?g{yH=HcKk@|Sf1ZctN!m$ zJLu0jU)%H3V-u9ZM=S6%HEE{c>dzy^ zlGlPj2cI)$?vYM8^>NIq5#Xi4%n(Am;XQ3y%7NT0pKr^b=n%Y{Mnj<8+&O#hrS>P) z#%ChRxd(zKPXx{++x&N%2f?*RQm?yp}ROq>)tn@bm^x^2sMxcZ3(zi3h~o(l6IEhtSt)DZ{JBPC_CN9CGC4n4lGb z#kuR!C#ZQcNnp3p&a|v#eySNo+4_gQ^*1&r(;2*@uaJo5ob{}HK;bDrByD(P{_xZ0 zf=`ZY4EWqnjiW||X}1Lu6kcH;Vw00$p!ev;5nT1p5uRah>9X$#-}%vT%-6B2+_?Sp zQrbd?mB9~*9%nd%1~8av&VI`++K6de)l3a>({d?*h9n0Gu_SX;Ta!sEf%1}Vn+wt0J$LaI>F>KB z^a89Zj}lO5ETxRNl=T7T2VC>br9Jbk_c_}U`sNCdHyo7&A$#lmuH%Ca?hJl<4}FHv z?Z_3B+8>zDP@nt_DFS5HmWvtdX>Q&CgA*6c8z}+-R#))gmGRxk4mQGj*ofzRubF|& zum9xZhHbbD+DcnR`6u0P{KVq8M6Sv9r%ux;XvxR#7^Q zo|34B`J5e#+`@zpKrKO^s+M(&2LxZO4ZxrTg*f@Xp0Z`R8glX3nN}6N@wdON9LFTz zvg_n@E1T0^8fbwz!vTjFy_habG&;i*15G_yt(MpT6%00@f_+c;0x&K6!SL&bpcFxR zqbTM2RKc3_#Luq^w80JY{FnXi<5og7B=K^Y;D!~R)ZyQqr%^KtfPrtjL3jDJo&I(A zOymRH_mfW%KlgVM$1Ylex{)#Rj=!r&dB9EA(lrU~qmJvD#^AQA8q>PV4_K5xGu!c5 za;n+Yda$giz_K1gM5*s(u&2IIcSc#fjh8?S5{2Hx;LM8`3wBd-`O;^ zrhfoyaN-AlJW~%c5B90h9l2^~Y|8(((3Z2qqet(BTfX{eNfffBRin)HR3;;6e^E*v>GN+lNxUF6>nqde^iQj)6GZR>}#0N0E zQ~DsL2e>e9yfbu|T5m9%*}Sr!U7O;8Z8&o3t|DWULpx3jSGWJ6EYh12=i!S?hHg6M zf22P)%BOjv|K1^-qR04lr-m2HT}#F=kmI}OH$OXWYHvG)1{_<a>%6n&c1QuQCYvp(YP#D2 zE=ki&ig$Jr#khAi|IN?2U}LLOcej~qrUbngNi&~ZY91QkcL8ozm_~oio&pVAFHEOE zNbzP-g#4C{;dk!evf!9;xqX%-V1kkjz@^AMSQi5>pjpSDzB7-=4mID zYgAeskRCK7`dQ*M1RZLpf-w!svI)Me9v7~|wX3L;!2KHdhn)ery-%x+{GGssYWj5{ zE=E;H;bBxFkmQ-HO5(Be-!wHQxWquHSC*{2BJ;JyJhtdJQK zQnZOrGGIE+T#>&$mG$?6@W_lWc;V(R80&s%J=lF;-Z4`IY5(%{*bkC=jn_v<)J#uK zX6&+o%4TG!`!SK9DAm^i@)Qw91>#aa?(0atAi_BnQ=vIMU+{d46HqOb1L@tWRkPqD ze+OOX`us9|&o3ZQNH#}o+wH{^gWU>pT=W}-t^DP=K1;BN_~E|KXrF)8Dj*o`*86Bt z4n%zoBR#C`t_J=)a=T6GhIs$y`U7`yC&rgz_tr?9RmzmJ%dqAy#!eb0$a77fy=HWT zagi6qfnhnc+z(iH>AP#)MbB7Y_3Q&LM*Y7aM~;>Fpov^6VF2Z6;8O+9>K@Z;IA+NR zQ=H#{gK`idgp{H7x@WQKHmj5&fbu^J+MG;XGoxv(($-55SI(8F!c9z%$tc)gK$tG#u_}c>RgjI9?_BVbIy@t3298=igvFiY4Ub za+pWs-_!*MkqXFBpmfKmjkZT~y0(Yy5pGA~5l(O7Q9Y6Pf-Z-7h(xUC0UDz74to9i ztR9aV(*d(0kGwH25=HG08MCV&WOJEYfLfJkv8pa{p3QQbP(2D3V@Q}A_{-`7K`YIM zN^ls=w6G7QKStSt<0G1v`3MjL^JOCTIp{cWq}iCN#s8CDiKo_% zKW?7rMX`bp(Ei^7H`bf_L=huwT zk|mFVd&>$wY#uEXOh}m$NK`dfoE~95_h*3MS7N@rLfvq_*bDNts(&+%O+MzWO+$4! zt2^OO(S%=bI4JRwlf05wyaCRl*5>JWMxtMm2|O;94At&a^J2YLYj+QDr{abK-W#de-Mes;4oEdOjMTOggIL5fi6c{X)*6V z<1bxzwCbe-_?PP#y*9RNfpI6s2=6ksk85;_FvUo!wCaoU-MiP%FPJ#ozf1J5?35o( z_7K^4wZ6H?GD{v9<@JB*-oVx z8;0_4jWw5A?uQLut+h{cd5@4B5R!Jo!fmL&3!G8pawPdE&&&Lp^?JqXzk=HPvT9yN z08WuzLUCwy!v-AKKdqp4Pwrbd42EDLc35xIRGWkKczMh}i6z9NX?4YSeSR|2=IGMr z;pkpWE!zTRBDTN0r`mIH!)f#9hPvNwrSB351M8TD481L6Mq%#0lCV1Qi3a!YHrD8A z`Ko?+K$M_+x(WTeWRuKG!6gj6?uDnicRoD@EX3R6qP)(*`|l8>9xD)6_>RR4M{Tjftv8mbqtm_IPI! zF_JUuYNY>xULjL-%Fw zlvF`HL2@Dy^h7~?4DXTeDhO`^8+d$ezu;{R*5FNydQ}2Zvt?#1d0V! zhbVl|s^nSHX+Bv3R#VGWedeNl6qYzX8j^i9kuX$0?S_M749s-wqx(FL&*!(~S=B}H z$X^2180O+fUw02ZyP>p7Vc}kU(b)mIb?x`tvnH6xYC6&9;tBq`7+ECG`@yx>!*L=o zn!HnM2$Y`7c@K zcS^~HXIUtQr~PY#^6G5)7D4?$wnfm~#c_@S!TVWZ;;%_6xb1khoEmSK?Oz!*U92P{@ksDO4yHL!)v z5jet>WCy(ovAxMvo5UYhxV^CWW_6!AKn11B#^%T}8!s`kZYBQprUv(wpf!Urcv?;| z$*a}jnullzsv~LaCHz(TuOkEKxg&$ISZ0>j*Bhr`K#*4jlz%-&T-(cVSiQ>t74$<9 zRl!-OZA~T4WXkE@f=hKl3W$J4jB;SC-^5oV#>)>UIO|@rIc`#c{IR+W0t%=e2PzN) zRRr`%nV>(NJiMI1s{}OW8Dm4>)tn`QD&`sVY|i3D6^kiB$BVLv!nsh6-Z1}ns!$~j zvgJWKP7c(eb(m)fp|2n&@5!R*SR-7)@c*ZVP*Fg^-;jfDn178<6{z-R@8ZmW_ z9sz@-|B)?5I}!)wYIz0a9^|efdmJwPevTiyfu|WUZ&Wo|dl}uws2!n7!35s+N{60= zu;kw>aMm>nEs+$g&Ht17Zc=X_Zq~Iy5DABPUq;@VTp-nIq_+17z3}(k)E;%rgeDhE zX`F1GVuo>elpV_(G0(D2A*KY|fm?-Ob0NbFh`!{eb`!fNb<(1WnYf_Xd%i@m{&fkl z0raj8-6#C1?M|5c4e1IiLB8DF5(C`F*Hn)_mBnlsiOH+@_}-ik#qI0DsFBNh`Tr;c zg>9Gvovo29ZbM)t0~rGGT$_JlZb@$TCn;J(;E2(N{iC1>X>K3ao2dPrPW~IrKR>66 zkI3S@k4P35tO-D>ot5p=p`TNH5ArsSDi+Hax!@2iN+oWVtbn@2r;5!LqwG(#FzJQ05y9J%5kNjZ>sO%;#T8_>#)Sy7p#j%RjLeCa-jRC!s) zY9sOl)Mv{4)+=Fj{D3N6dfx20dk`;mg0zRk52cr{*clt4AF*Y@)#KIU`c6JZ8#RHK z$Flzmj zOYF7z@55WBzVw&T%JpT?FEKV>mI=Dbp}h#^d@}J7$vz7s%3I#PnS~)>2>c+&)u^{ZC zoahk_2Fnn;lo1TxwZT~$yu@2_zIE%t>Bfe8&sE5y9>e#al^O{=PvR&%RRMg^x%Yff zsj#N%D-P(V8!D7P6V)puMPyrz^{xVRV56Ol$T;~wMk_Ap92Fl_Btg-06^-AMIG?vN zNEER$c=I@onO?Npr(|^r#_t$IvIN^*fN=lzNpSOaBiw|&-*QxQT(lVXkgSIqOdxBDzl|GVRcW2wE|e*Ws1>Qh?P;JZ(aD{JEn!J-0*>O*vZ>0 z!2P_?8{Ca5{)B62_uXxavEhL9m2zHEY>zaoR!P!lf^8H^CyuFX9L?I z``lPRS{oe4|IXY&@Y{Y|!Miz1+gox~&3pA5fp@|{-OupVr$VDbEfK5yi$0V|j|LNM zmY_|hk-rGn>IhHSalB7HYI_@w0crBqGSYG8NwvM3<+xz{4)k`4-et9y#Jj-g5hB93 zDBzH&g@XCq%N!CaEXn7}(_AZ2g8oED+?DrHXZLim*tnYTXvJB*_17x}RLwZ2J9wJ2 zZt%~SE*!6BK>{z^pO3tn11Y@v2x6Jh*ipf&53wW3WSs7DW1N`OY|Mz0d09#;Ai)m$ z=}k01bL0KD79C%XV0s>G1NaMb-v%&)>;9bGf!k$`kwY_ojy^D9YC|2oZ)`a{%Zbol1+D%Fc8eH$|3Zda1G zSa$hL*Et}!MpI!)EcNB<``;q#C*~p#Mv9*tB7Y4Ar!TVswUrOprb%%hE9!FUZrvYj zxzxLL`jfuL)DC#C{=S|CD7MygmDb-?MBldjT-n6j$4TFB^CPoDPFoA*Lkuk7zP~!j zFYj-RcjYtc>hErkas@AaZ&Xe1PKN4tut@(79X8$-3b_YCuuC3StBcdK?z;!rWKYw} z2%{SLs(N$=?>c&HKYI2=^{h1)f{-Jtt-9X2r%ap07}ysUhWhshZLTfm@q1-XnBBGt z^>G1f=0nwYpgW-&tkvgM-=yk9&eEkE_Pcn1=4V2-`&}X;-dW>aFYAM6?-+gR?m&Ym ziwD^a^Ba$^ut5E*uaYzO8n&3aP)3)BOt~mGI=!h8$67H+Vd`v>bI5y3CBSETCuo0XOA4MJ#RQE>Wdjb)C$Jl(|&6V810tAP~`rY0udjbZ}21ilCW zx08tNY+h&}Z|6i85OH2q_R@uUTq8X)VY_k$y#X7Nm;$@=s7Z8{hGI+5V5nR?+00s4bf?eI~$o z91TMM)5~1$npr}X`b|xI7x{Fb#xJ5Y()H=I->SmY9N|V!et{~u{zD^3@QV342(MrU zJ!ZJpE>YpSbh;3bSr5}QR+oWrnX0hw!hm{u`x@g>J`hDrtAG*bL66xs8JvGg5Ztn-Xgu|W)BCYjsDU&I_*`?nE0VPO{k#)3|_%G#x@0aFzwaAMgKUu-K#cY02_ zYqC42y<;Mz$<>tcpI#=u`E}^+ZfI+$?ymrQI2>U~Vk-2t0?khn2@jJURnF$NOBA=O zR!ezhr#0GKi>nAvI=cz=NUJwm^r+82p4s`?q}XXz;vC4DR-fd}w_a@=-|h-xLXFp$ z9lZ~J{b~jG%Gs)Etj!Obe?T@lZ1ARK<|_LYAp>}w%U1AntDD&i+x-xs0Re3I4E{tL z$hXER0@cdb8NylQq=ST{H8;!dmox8kcvDm7w@(9Ey#7J2kt~} zuirt`f+>Tb@_!ed3fv?YU-<3>o+l!R$G7e^Lz6ky5@#H*duxV=Mwe!K{A?!~jOcKW zdrL|3{~Z?;eN1FLcMCkWqXgfnZ?ak?z(mSjr2klpt6AcU38`j z^v{nS-ut>@PA2t#rIAK!tKi&eCKSN0D-gXp&rh{>B7cJ6r&vQC&DqisP6Zpy7=7eG z+XE|F@P7dY=MSd9`hx*w5>|jlgTd>+u8{q^ZWVH}SiiLWzyKbV_2_=zs}`jGj->6I zmbD-8t!<5hWkojod}ezehfu>5bA0bjZ$2GJ)JmHBY{xJYAm_Q}ebW9z`g{%f=}}V9 zdQ*md0ydd0LUhN?7AC=kf18uQdBL`lT?=$1$7i&wN360vYH(^dp0mA2o9Nc`Cu=pb z75_1>)mR_{7y00;CY27X;6!JHpF>gy;rg1OI8yw$Tr(x@-@Nw@aUxrMesG7C*xK9q zd2bSL1SXl*x#r3)N6Q;gQ!iM-;n-1~Pe*gy%Tn#~D)?jWh3DG`-h+;}Z#Nv1&bF#j zQZQJ86xVQ&_AaL5ypVF(B#>;8k-9Lul^zD~AM;c)wxZo&_-W^iJpZbf)H<9Awl!Km zEW%89{*IzSkdAAhnba@YumW&kpo z0YFaGKqi5P(oxm*I^Z^au5gD|1{3w9m%au^S2ex{wCKP0BAv}2Sa;b8x25S!3e}D( z+kAHOvea%Oov_JtwqMmz+){u=D|Xq_YsA{nH#YwNUgVd}KJ#s3yrDv8xRVq-n%uXP zGo-hqf}>}%@1YZJdB2{(6H^q5ky4y-eWPz7z$Wk4h~Nn~mUlGp#8T$B5apK7yYC?1 zDBf;~{bwHO?!m)mV^M?*xVi3~S_7y3zV4As1qkTHq0EFv))3CbypX3q-oSvp+SpnZ zxixSwP&hmXB~@7W+wG=KDFKCZfnrE<4+F%^258peU>f6`iI>a_CUIs>3&=eIxn74T z9LSyG*vl{g;a$KW86FBz+kg2CIwPoX_6)jCvb-I;WV9#fR7m8``Z6eKkzvV*y;vOI zGg)1l8W(Dsgaa8E;8sIWs+NT?b$70$p$GP#yj${p?^q$*d7dR>pIA-j+U&s_v|tx~|q> zlJ#>e!ojVyb*Q&gySx=h#GC|na%6w42Vg}IAt8s{QDar0_1$I9I zV10^`H2kEgOLX{-*x*rjQ3X`A&S_4~n?>2)ahg?UYyLu5DRKdHyj8$@xhZbJjn|o* z5w5bKvH#eZPafy~d-`)Ln@-DhH|*if94WSLx`^SQ!>*cZ^*1!%o5oR>@Bi4|G<)Ry zV-uKe&-yngs_dE^RXL*RS~B#`bvFl{__{H1;Ynld8##2nNMm9M_5Vz+i%I`&)TaK+ zfIxxmB-Vkhf4zho66saD&rKKxTy2B(6 z+DqSpMdC>227O=IF$*=MxSiQqWiZao4~RC6dcOnDj9sYewVe9}kbSb9r!Gy5d8U>t z$W@wXNmF{3sr6M%I_|5O++1YKks(!S@M6P1S1655^QXYRxgU+PO7Y9CL5cW|&7+ac zldX}>e);5%$x6)nUz(3pNXDYs`6ZC9D7UA1vh;)Z3}XcXvmDXQ_mAU85jb1704H$z z+tcXDJui{7)JfL`)~gy>kkWiRFQ;2;8N2M8$}`-lQt({Su7E!COx#~Kdc73&{i|n@ z!j-iZsM%`DN;k?9_IS~sXSfSRi1!r)t($*z`NQXZ9D;Hc-I!k!Nxb=4JBe=vC^7OWk$ybnfp?vJ{eleQ}V}6FxKAF<(psxz@U;DRX{IC(p93*+5?Hb(D;J9?I5fp z>w!qGzSQ(YO6W;GUNmEy?}6-p;#hBp@E}zcL1gwoMB9Ap|Mfu5tyzP1(`zF<@ZP+* zJkOGVvjzpW`y=MC>do3-KKP3mddbKLkKF3+SY!M}u>;!;S*m4>v`;zXvKVtED>bH5 zPx?0zXptrHeI(#&jcWXPB;aD6I+F;~$&YiS;aR;2eo*sk6T(H?KyG?vshW`veF5k_ zFlq?<#wHp(L{a~1?|h8s5sRiDpz`+G?9U!p#&l0P7A?j++465+&Sy%bt+ttswCMSq zn_C|TYsEje7K1%8xaOYNweq3Z2=xNy4XaTfGPo?l(f@{wpb5zzM&#Ov3^t5x{^!Oc zytget?va~l5Vz#kPS5TS;A-wW^!avP#xe&ODnAME)1321T6 zEMW!1ECPGsKALhUG~kV%b%5QtL&-A$pG23xC9DTL6Q9&#j>B|*sucRMJ9o_qH;sG; zk&_u>2xMmE$=bbmD=a=3>xAhXIiMd!i$_CqH#W4sZJZ-W*HqrT^IjE6Si?vIk2Jkc za=2kP#fIP2+((5?NaEH8C#Z+dYV6Z;FBH-MTR#qFnARNtvEH_SzO6rLl72E)gE76=x$gX+$vqBVnJO{Sox+|7p{U%9?oWWBcsMpTuiy z`GxvVVy2StMYJAK3D2KIK7QOp0lKKALD7yg4D@xn})3X8K%T(K_}=1H2M#m{x7n&Nf5<;*^@S?*u)M9^6YU7F$xoQmkIANau4 zYTlpBos`9x5Wg7SV)s#_f49_s&mslNcNJZKx`2jtXA{_zEVPmw-~}~*eDAJvwh;>Z zH;E2#wtfeAh=K!rf$#M+@M~;#T^FMR{4=E;JS4yd9^&r+Kbya(-Q*-ClGAg5A4Qfg zhu?p(0a978L^4jjFh@pbe*Ik=PDoLng*vB6$$!p!(Yj;ZYU54H;L6bx|6BGZUf9;VLb)+N>35=uB^4T} zo)?47g8ca7LnLelFmy3g=QR~FaGomcKB}dOr}z~BW+UeM+V&>jZU}0M`x2r#(LpmJ z$UIbO;+|_ly~vv(ZQk6B+TnH}tTQ*ABLWbyS;<)l!a;G7NeYa)!osoCt_i12;^fRek#f+NwM`A?6cM(O8DC* z!bkaUyuZ7wiFfERDxl$Q!x9XrwRafY{Bcl%ccQ~8k*!IyAQvw~2K19i0rayD5A6^9 z7LCHpqv-j#u}UYY^=jA*8JHR`idQIb79xWHIH_4L5^5Y$kV;U`|Zze zm{M>zY;v*}29kW|OTC#v4&d&EDZ!F_WLe(%G^dxsuAZp*G*_tmG{eRJ)Y6c#KKs*g zgU1=p4L3{@dBY8#OXh$piBO@7k2v7=wtp$(u+zCz=$d2`adzfLj0FX!O+Wm~GZxq^ z9S1zQj|IkDhXG^!aCa##2y1ecl1)HPd<_^~_6GO4CoafFcgyc4;vQIIk8l%+^vgo? zE>pr-j4ok{yC42HjBZ_hZ*=*i?TuLOsZl>5pFH` z4BaH66cLMgrC{?Tkm~iLEd=P>&^tBXk@Ej&6yQpd9B5~5gCwf$4beE?Y8C?ns%?t( zFy8|nvg2l|?S=h*Mb_8oVwNoI^<-ftw1v^g=txmJter5rINuts6#8Y`A=nz;*hD+c z8Xvyx0JMY82^L0fOn$S2_sxX)#ds^UDQU6pQ)E7#XMIK7k}LFd(%la$8C>(Dn<_22 zWE~FQr`Uh||H=!BdC@eyCDt9R42K_Y++k&vYn|1#s9mx^{d0`B z$8av**EI1$mKPrBwkaepJjUXS+F>}H>m5RIWU8g@5#(7A*Fu@cIPI5oPU0EmZ`84=UJ%Aa|P zauXwf5@W_Py+I@xqo>9S`aS3?JFr0``s%u$KYk}e%0}MIz6wAp?OQtG-u$hIc3&*@ zZ7#8YZeq_5-1ZYiM^qSuyN40_zL%L;s526D%gB#tGks0%VbrQOU^cv_(r(I5<>6aO zRd1h|=wHp!7bH|=Qb^&5ztZ7B`GPFW|70xAe?;Y4ryn3TAx*QOsq(frmsO=#`k&u> zQ`I+d{t3#$o|i>wXT_D#v7qN5#gTa>qge6i8mfb!=LoY{NL}1NN6rQ48Rbf1F-N~N zySY)$QF-E5@#q2uk7`Q7-U0vVcfSCiQX9j$f8|0Hh5la zB1KwUid%tFiZwVCD3AnqclY8Bh2lND%19s8%viRbOQ+8J+8O9so27I z6zt#}a$_QfV}F&$(nlE)QE*~J<_GF&QbhS(%0^Pg^*s~+TGZ?C6LWS2*YsCU&Dh{2 z1=o>JyX~#m$Cd$qFO_e7v0amsyR*<;!Fds@+9>cHc~to194dGT%QaoauUcR$>WFY_ zG$QV7DS~fn)IO*67yXvg2b?oGWHMLAa?20Fa2pBkdFkK!i(wP_r|o7MihFi<)$3ZD zYSzkg)a#lL=yg>dLq)YUX&vo1MKNiGL|qy39C@tBQMzpqg`Lgi%dQr)f|D4wE`>D{1yl-1CQ*l* zOH*B7o^AIb2Z8bi>~zYr`H#BdWh?XxUg~Rjxk=<06MR&e_?RofBqhiN<~j*`AB^HS z33FAEb=eS#IO=~v0vok2Xwk$cTFYzs#Q=-KpRzQvF z()rO0u5(Z;DUCbR=NZ=?KTcR)-^P7`kmeEYzb}Nge*E)|cA9gSDR?d(`I;MYOkRu| zHfz41NZ93y*Z_4oCd>Lw`ZrIK;=b-@!gf*~#8K~?7CEX%*gqVH>K@-~>)d2q$5@#@ z?w4!-@Oh3;xy*ihHccFSuRQ@-IVI3uG=OrM|7TeKHYP7LyYkZW>9O=O8$e#`{d6+`+KzK_d&5h~J+UW{kIo>o1b8|v?Vr_Q-wKRPq&0ya!7 z9u1Qy{;7Xt;4qn%?q;+9EW@)eu6cEP8zTSDMfIt#INqh{xhCcE$r8)ru!E7~L7ix9 z$wyY_W|A;^$wyh|CZ9f|{<*(*(762xDW-pI@vrG><&A^O<8_Jy(g3}Eq`1Ym{r&z! zR8z~-&$36ud(yG`p7sWUJ4XWv7IW&^hs2cn(pw>({lAET-m?6xcSN-noLN2xQ16P$ zts8;9vgdQ3$_`rdww0o!Y?Msx6}4eC)fQx2mG1{+=w}CD4tatAHs~$YNO)VLSIAwz zIC$8o(NMoP_jRAbNXxqqS?zkRIaU(PS?!|tb6Sh$S?%8wue~|2CQc>GYBI&b^(Ec! zGtuun9G`yF8&uj)w@z5mgR%uW=q-E*ox2^ zdQVRYqEJo3N(2KG>b^Nvm`ny7EVgj_J!d>vJYUhj(?Mck3Dyfm&q3T?Sfy40tFmJu z6`^Men7@_hH>3QON0Y)56G~l#*O7PRB3uM8sokU!rw43>B-MMRS_}}Bd3?wV9jO~}aV$hC&S0Ps5y=BALje7d(EX>tp`k4t4__Le* zx3(+329}YzguU6vD{9}XO?RVVBa!SP0I=s_>7|JTYX;C7_nzhL!5qh)2gT2Q-OCy( z)l##0H3cl)EtIGjewFJoclY|3a1=M*gzrvX9l17Y%NlSuSzpmq#k5xkkAJaZS@^=3 zQloc2e`{+EB2m0t$NmIRD?!|Drr2`dW~sT;rYM26Kc`%u7dRgw~TCI)^ksN2?dPqHK9)l1-?4i%dS$v8XYk>r^m&Q9dzUW~9 zikdz7XQ-DB$-+tB8%V_2SLPn2-iz%QQ(@Mqn_+6(pB&XT{{}M6I_zE|^pqq;m^Ji4 zl5fRGb>k#I(D?ijmEegvyJUlv9F??F=x8-$NfBsL4`wB68apL@@Cov0OH zWJ{d3?(>*X?#nN;jd{bz3QPEAqH~8gEU$}$>GPl#RGbAv-0%Bj{?_^HQ9{n7H$DuR7}v##O?-vm zV4*=1-e1_-DCT{o=0U1Zs6Enl1kH9DjJcJ9-;#|Dr%ri&hv_Vi9apc?p!zh_lc?&P z>8#xfyLNt)KO38WgUN9}EqdJhZRJIhu%-?(Rn<&!cWs_H@+O1K<56AXcaOeXZs(DA zZrj+(Teu=cK?n|l?ErQFK~M4HocLwN^sqycHbUellrVT>`6mLsDc=Qs6wd~kyl?IwI%%80$k*~&-sDva_kp4_5X?k zJpt;qW_6tqsO&PUyT`zzI2#oPSYW7?63%b&nxzX5Jg+<@;tv_^8~6@(1sHEN3Uxu9 zatByk)0fjuoI9lV41EG2Of4#lbluSKK`DElE@y9<@8w8Uv^>ys;-`vFIY9YmKvS9mhLss1tpQyxIcLH9EBTq^DtGnnezF4RJ0kHBNN21A#3<$ z1jyD2ZO2`Zvr<8YiujXSd!RvU4o@DjZASRJMp&vw#hI&KkxTXRgJXJ~8!-u?9y?u! z%+=-2?Nwixs$p(V+@U}>P1|g28`EB#g*j8-k__KNqZd`>AfbDFLO-D9b(UD4m8tx< zvIZ-E{7jw0O!n6!j|8RV*-hwlrJT^YYs+4%5dpP zha`;2DVeM-?$A#xQneM-LV&1#UOegs3(U;J=O;{=<@O6ZWSOH!w3(w_lENM?cF(L4 zV{&H}bW0@!HJm- zE}@{oPz3U4{pA-q3$Qv*C7RXRh!unVbxsp0{h~!_$XB(LkuYdA5^RfGz2pH$#iK86 zLzHH9NtW^3M1C0Z^XOCCk5a>Hmyp_U*K4b3`82B$~>e|VV?^< zAkTxgv>#RC!r(6|Ek+1i4r{so0-dpnf!@CrfwiXv4ZCdK(F(oGN>=Im3RdYy=*5Tc zY{bN}vYCqyRU%OO6@jMB%ylY7Arn_uT9O^eLyAoLy0*%&ax^I@%1{3WP5ga%N$8oG zhcG1%)X3PsVQZ6qASUOqZRYa~MlSHTwD%iHXmikS!T5=!EH^2DH3i{PzrE&6Lz2TF zla&>;)sk2>4_bmBW=7*EqW{Ij+z~J&bZ5lfg2XE*lGXw^dxJnl)4j<%&cbi3OdJ6X z?TRLjA|3yXhrsMG%saye=PW^FgzeV{p25kdK=s&m4*qt|oZH|*bjVyIcO%k3%TBS} zKo&yF+Xbv$)Bo6*X(4It2mP^j@vCdIq1+_aU}bYoF;NCIG9&gi0UAz!7@?B@D8l1y za$-(NUlwK>J7)bsxyJhnPUzRN>sZQQ>vg6{)Tre0GuWEeB-9!_LSQTbD@@8NWb5gY`tq6wJ6$^4);3%Yjbpj*7qaxJW*urjjHu5xtL$l9NH zM@>^|cF5e)T9T*nkRC6_9PcO$GlQpb%bABUm8Wr%v~N{QqxqSNr;!iFJ+Ru($@=nI z4{M12rOSH!m}DcOdv{v0@pn%y=CdG{z>z+ZUde5d$L}s52t_Z!@6Oz15W%|Edq+&F zBcOuU1=J2a9>7|DD}ZJ66&*w=&|8exS?)-olgowz(I>8$6hI!rHPdEEt2ZL@`U3N8 z$2GkR@@&Nn$bz6;iUR=k#>>4}DPEj;2mgHA{M7JnF_(iz5v+M|Nr3Gmjv$UedN=Fx zTXD0&$nNq#_^+|TyUPx$dP%~&FAG*#^|)9A4(2|sDZa;<|4`*` zo32Qjgq#6o85zk&ry&~VB8p|p0ux*ITUOsR6Wj6Mlwr|boRo9f;a%nC&IEltjXZ&* z0hB$uJdHtEzAR(``yXOVkxmf(t8y;yUkdbxnb_tVQUrLklLq{uSXQEO9G)|^9g#;V z`ici?*>3T2xd3`yxpPG4gH4ydT>u***C6G~GkkXMALdp_WLIdCrQ*oE0Gzu>6Iy$e zhvo&)AYl?>=Mvr?wflJz^1Fr{Pihjv17$-Os2mbpb{+*+aUz=!!|N^2I*2v2Ydo}y z9Mhr#MZWD@>n~EXYaA&4tMqccKZ=d;Izx7aG|WQ}$4845lrCRI>?37oYQ{zi2{n?( zTW{HQiap-uGvz>9`l=iMby9gkj>=dH?O8#5r?&A@cGgj-$x5eN%%Z{N5(4oEdIxK-z7!L=?fy?>sg&0_gUb~AIHOSl zzjK>(sihq@h}b>~jPQJ%S9>H$O~;@}rNp2}@z4t$wATX}5ZN`UhZ{F(k~<5MCQ)vD zHf|dD6JUfha#)*0Zx6%4*qrl>)R4m&eDqEx4NF%sWdz~j%C7gPmwsI~mww9~vaZG8 z-p?PhzC>WhTCq$=Wz8UA+{OXe5$kF!tTVE6XuT{+D><6(RF z<(RXtTz>07zQ|PdHbct6SUCIULME`5=5_}5GD>)3705Fu&}jp}RzW%9Vh6j)3q68g zdeMiVI){{?IAcVpH+Wo#bX92Mtv9ck3BQwXAl4HQ zhq}lSJYO3U*5m(;7&7r~#ixFJ&o2_$^n*OX($q03l#-(^6QE21ftq07HaX?)~2=RVn48WJ^? zQxUAN)4ME5Ov&R6IeDf_+e1g5#3xrRmpS|`^}rKCZw03GSQ+QjBk_lvL^nv{_jNo% zHqD8GHyi9LpP0g9m)}q+`8DBB#&j-+*^c=&O)6n-zsKW7bEvO<8`p$`9W}VjS~RG4 z*eqvuBoqH8u4(0SC)V&RT^QD|W}-RzmYfjAR=Yw4J?s2E9Dn%IpgF*vTBRgM4>LiS z)n)yGNU}*-n^>|5AM@trR(~bVuooI9bS70u)xfdQe7-jof zcC(*}EKX#JG(I9-Lk1Z(7d;(sB+C3fhd`;R4oD7#j{~{$s`Ok6^XzL=BZo(odEX;f zGKYZluQ$o*{IZC^jRKJ0ni$C7G=K7T9a;Ew*&RB@{{GV(96tVx~iv5>hCrjHm*psMV8z>L5}qs4*BAJh+vh|CSwgx z&~gi!BQ^D36qsev3&(saG{<}q>OcF1tV#mSU(}o3M!|_7JyrGQNh!JA9}T1G%}E;? zi6Bo5(m#}jCbGNkZ@kczLcRz4u;go;tp|*`~u6sSBAJH;>=EtGRa{wl)lb?h4 zgkiqYPMWCAQ;>S#GvjLHOAx3#c{})`Wc&EZ3%Lrc1 z-bc1+sYH!JjLe|OFSzXzML$kHWm-v&d@lNdmGF)8hDUJLf8uMw4=iYw#A9@!)23dE z$1@`oh7amUJLFeOo^&^B8GUDQ_PrW5=Wbb%cF5I&hKb=K-Pdoc{niWBg)9Ns2&KX2 z9iljDz^rJ9Jxv;8@@MXIrRE0r10-*D$ob&PR!8QoMUGRWu4>ix3Gj_tjW@B^wtG5p zaM&+rMR%7XYr@@6x%|72-z@nI&W}P)@g)LIL9vhcy)91LpJ?GxZ>P*#g^!3L1v(oj zDnI<{r_?3wb!Bkyqo`z99Cdv)!gr6B*cx!UXEqw^g(@|P>b{YN)@DqyqsbqL@?WW+ z!o>LbSSe_i?p`W}LjZC4hS|X&nRt6PTGq$_fpKF34|)stbK9^oX;bHl|3I4?tP9rT zjsH+ZKI)!X)Lk||n|j&*sm~qux)xp~dlpp1c8exAAM1(wE6o4W9)vYl`YP3^ZD|vG zK}182)u^%|5$y_pt;wZ1tbOsPkJno0oK9tMvDylNDK) z{GSCa#>BAtQO9`}Too5g%AE@EoU69b&5Pr^t4No8@ikau;YkI-cgo{n70>xM1pkn{ zQzY+(%Z2~Nv9RG6X2aF4uWS0(b*B{#H)zN2MQ$>MsncyjQHpkVH(K(QRAov>6DHY2%CQu7P9>`yEPrTH~N3`@;DHIuTp8~irXt@z@Qa9FPrBHfNZeG{U z!}o*pz<<(e5F_8oNvcjgld$~t7eC8?Z@6=>c6eF2QhtAQtafL8sDDH_1Tw&jagpBZEKW{G&-i!ME^WF!XV4)*%(8O5nd?;!7wVAgufJ5>7%%KRh!dy56x#}2+DIA5Ze)B&L;jNlliHz`w`!K~-Yt*Y-d}|LW-(OOI>bC1 z@uTv|<7@^|IjE718Ax(9M?SvohGpQBBEiz{%Hh=OyXFT22Gb!A|kf@3)Tyk;Vo5;_OxVED@R|UFS*c z(!qK(2u?p9IjVfV%HKlU0)@1!lxLs8dsRwG3tQ-Ajo;Ij9*w$&zmr<@Ikl1%x=RJ0 z3#ZO`{TBR+;dn7Kf~$d%1>u+{8Rz=bQHmz)PWs%flZzy146LInuAbdoP0b_K7GsZY z`c8uP>%S`P^^tG7OWKv&r;gDOJI@O4 z-4+;j0_K(1(Mcp{HM{EdcTd*~Pd=$6nkG0e^)(IwM$3-1^y@PxFR$~KrB3Gp;zqRl zHXT#@0#G6IjBIrQl6gO+-wtQ0JI>c>6zGN@z4M;HSzQ>^+y%Atu8nuwk8oOKr42iB;zQc~~c_vKJtz7><@i%4``x8rlU z>aQ+l>8-iDF5J$yC4JZV*dE;7)n0QseC_8lo~b#{lrFS?#-h4n=FjqC;Y!v1)~Ojo zq<47Q=l!|oZ9J1ci?q!xUQK6V6FH52azf7G9^(a?g5 z)f|wvI6VstTrKcY9@J+Hs@s)+f!fupxsK1d0spB_TID9z-xp7@I~MD*eKgpr5XH7M zNvvGBE&o?HXlwgP`vvc%2%nB#=|#S_nGeX6r0LID{7t+jU)o(~qO~cqX+V9(Ij=dp5M8y{Aud4gYA;lx@+(GdA(eKIzsV`5KXb(T> zIY^d}MEDv&!wV|scz~K3cwWZwY1YtUoz}_AmWH10yyk5Y7VhQRE0VKP1Ke}i3>wDX z2Ju&LG^wUPtnXfiXgp|FqGEfDA?9pJe-ct&B(Q}KT73Q9d;G+-LZ7~kM&dp=QOphZ zCf$5=+_bAFIiBgZ?hpzJEAX|uhziT!s$Cyg8h1xd2luH zbQ)K5w0mC3K)Mk}QDH;qn)QauNAp{mcuVu)Z$Ow7+%^zk8k;z0bvECmQ$dY0@iU;c zCVO;9Mwy3|-Qh!#wki`swMf%`Y##fzEmoNe8g#3fEb8IU5TOb=e#I+xA7&uvHp^62 z+1wde9sYYn)90#qcDy{;Df@Fy}bik)67PEg3ax3Dc z71OsZ)n#!x;eLGId)^_HL`hz%9jaRT)|+yzzN9G44ry^2&=XVZ__VLL)7b9rxeC!aW%{$4Nw3=<2QA0 z6-Nap{T}hduI|4eK4pEEow^X>cL$oZFSU04dIVHon=kM5wf{Yzh!lY>e57$SV-oS9 zY+(U#6o?Fry0+^tlB=uVr{2zqZhWb{m9@~S1oEj~m|s4@`XflV+Ob9jr?Y2mmLqYg zmv$PP=+%~Bkme@_neB8tQ{nB1y!_Dx^T0WQ!_vl%C^7a!ps3K{`X_L|@YtkM#k5

    d#?Cqg5ITKyB7o`xB}X#RIV#5qgj$p$X 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 Wg#6R9f?{GKLIOCftjgLdIR6hYi83ny literal 0 HcmV?d00001 diff --git a/docs/graphs/sup/dgemm_rrr_epyc_nt1.png b/docs/graphs/sup/dgemm_rrr_epyc_nt1.png new file mode 100644 index 0000000000000000000000000000000000000000..a680f3a941ce4dbe46f0215cb4637422683d3ddb GIT binary patch literal 155098 zcmZs?1zc2Z*EK$LcXtX1NJt7uNlQyhBOsC^-Jpbkv~+{CbR!@=A}t~@^ni3L15*Es z`?;U@|9;=^Q_z_+XJ*dXXJ31-we~tu+M3D)xU{$s2!udYML`z=L0^MFP#3THyh;d{f9M3texbJ(G-hDh3W4{!0MU2!X<5X7b zC;iw8Cp9dpRA!TkCZ^CBNO`C&FJ~4A9G4+l8cCWMl{7Aeu@Z6yeXGn0F{;KBNZ3r`m zAq29LklGcVM@+?UdAqD_^MsA<{F3T000jjSCUXAe7A3^h&mk6)tq9rcUN+Vfkwr2> zwmF0CU%^lm@KD+hj_c3of^Eei5Gie0@^ogj=zLt0e5^rBLIX=I%@x8WVn{(Pjt?=> z{q9KmuaRcj==a5JRxh8mCO!zX~mvd;aCX26u{Mz!=5^#rCdSdWy6+N*uq9j zl>0#JsX!&DB>s+IEzE~CNQH|uw4bG1g)%9APf0D|^+!wxS(Ajk1iY^z>!J_eODSphDFNkC%jvZYGq@ zGW+cN-1~z23^|%J`S8iUE!4k3et6ds*N?7?u%9Sc^lPx2yogk(Qc3&z?kk;6eOWt~ zp-1w|+?T~$k0$*KPpw}F5(r||snqRTH(68l4-QZc(5xw~Ev?;OD_*NwYZz3DqIz&LiN;JC0;E!)oNIL zh<%9u!*;4KM@;f`;-8e!#K#=|PrS_I?%UskCG(_8@*ou$Q)Uv8$;;fq@7EUsL$L$hk^v6v(X{qE%NR=+tvXTRjXyn$NRsMjvnVwkTmtuV0&F!8%+Gif>K zL}{c&k_29haSQB-{GBp_rQ4f2Ub#I8tU8@%aP3)9#NiAO7ilV1k?*RkQ?PTUG=Gra}QNazw*lY z)t>IDv0L&<{}Wpk-KTI-r!4F&gsA*;Teu2b2~Ooz;WgLq0A?81r^M#gp)JYMda z3L5J9Zk5%iuRJn2P&W(xs@i*hqI__>ts&Yy+db>_O-%W)L0VL_g5#^m{&A6S=Z06Wzc7_K43@@{Jqz)~VWn~PC}P`f>ZtIjE;f_SU2JKI{qud_sp8SXEH<&cm~Lfs zN_*tGR4KL?2SayE4d)r!DdE49P9?g63hsm4S$UcJw zgQcHc0UK9l7s>EeIBhczuuf3?#YU5WrJofA}*XJa!Yh6ntZS$ib@1uhy`S9MH z@Mr#}XN?q53H?JT5`FQkUx%`ImG&R-W;%B{R@2{2CH89#=jzPzo@(g7xW`?$S59HgMJsx<#yz%_y{Ui8WEw*-> zcJ{A~Z#R>vQuu$GCw1s~WxQ@XI@w9-;E6Gusu{D0`7Ao!(ssE0Ct;W9GVn6e#b=?_ zbL!&PAC!acl;=NN_?DVG0#^w)HIZfwpUvKuyv_NNe)Ij&3(+5*<5%Y6fiahzeY+9- z@w0KJ{wwDzzn-*2dMnSw6UJl2J*FjMqLPjd6226_IEHi1X{F{JWOr+k%aHjST$tYY zB5LNpcwvu*rExHDVp*Jj@sSwF^1FWi%avy;oPV32$NqzziCwHc|JbAP#o(sZ>EFA* zXNFG|zr@^{Bb9bXFJ$&^s722x)@mrn~9qKFg<+>k>^e5lB88M2iS?(MnzWx0`cR3KtjSG zkiTG4$QA_RDFA`&SVABY=@1B&TXwsS6nFvC`l+%4YA9kMFwrQ`9*Y0^OMADUmz$hD_*5|n1T7Sz zRaE8)z8j*dAgAXuzt`!X&2Afbcx!BAN;w;9LOi>#SQinV!^QpM1+1U`G5fS1DY?6- z-ma>_9Q#KJr-!fj<|(40((=uQhQ_ykIqfC6qb6p*Ow*irr}O#8O3Ivi!6O|zjFQ$p z!q2?517qC>sJ&M=WjE4h(^JUpgNlQTE{hsp4U3%Nu%XZ%@ z`z6a5G`lsc_LTrWS{y=FUw=}^JNod_%}ngzsT#f$Y{)JkfF6?1rPhBo7gtovK*U%z zTWduvpdoZnaz@aMSg%j&@)4O6guC5tA!qL%bvG|)Nz`qa1U`(9P3!ZL@?jr{)4J}) zl0FJ;rIS1Fiq{JMJLP6ZRnOZetf75cvHW>6*T2^H)D9Bj3_t&#))h9ICH5qVz3%!k za^Y<#X+1ALym@**v*|L||DfmZpWWjqtpL4 zfG!`$dH-lcC^H3;b82Q&`_YwLnh%3F2y}Zbe5>0rqtpHp@8sp&bXGY-HTAgBnXY*;Vy}+xU9CEo@ckIWWCm}El6?PUVabF3h(1`QZA;6N zACIQweq-1B*x*&Fpn}z=CP`8A2VUyPTo~-F;CST>=WQ?lRc}QuVlr^^7mrk%hPU#0&aOky-$meFIz;(4tgqwwWUY!*+7db98>-qRr2?M8<`s7}x z9qf5ILro*U%a0qc%e851SWevituD^VILW%zqvKa|`)1yY(=Bz-21iG4C-uBj0l1(U zTYNm0eeR4}UdQ||A4q(BWqjH?RI%auozcF}eU|mpi+dVV{ipH;wF;v=tg9+j68O3;+eZ`T;`v$WgIe)D$W!HbMv8HL z{i?eNWoBhLZu>UaG`)6iGj&nb`EbuTHBDIKc@n!rxi*)ulMF-FQdU-0%)&E${WRS0 z-lRgV#OvLCAzu6n2C>UeSUqvObA}CPo3Goz2SZZXRihj0=Hm?C67WBmZbA5ob~HBj zdo6?+R96{)nRf{`t>HH}F(Lh;Q?)Q7SDf{KXO!_Jd^;w}ss*7rNdENcP%}c)Nj#v# z#0x(DZ;(0~g|ECi8v7B59mKuBT;)rB0G(fmpfg z>krtBpR)4BR#e~?>m_}Br@MXG<+JcLM@+pEE+Vf#oyk}5$K3U2?oq{)hRwxR(PgBd zm>3pBK9r9#h5%l}744&yYReVPYGAT;nrQo|KDaZmHxJ1y^wn!&tAUYRvf9?ddpXd1 z@k}xf4c>hBUgK0NW6Fma_;z-7kRQzms}`$v{-(XwT!N`iYf1BqCXpRO_PGZrrT{_I-;FtpsT@@#PkU;UCjMBe!BB#=prC!dhB?s>*&1odoFuC5AD98Yrw*m zRA()sKdhwrbTu+I&3bXWMvr?S@V?m>s?ppUa&XB5p}ojf{R)}1BIS5g*}ndUoNUga zT85b~RGrNT6X6E_zjF63XFMM#bu>^&GK$h+n%p{7)a2~9UV6N;Xta1h=S7cI;$S_R zDPq)MM*y(|51ypCrSG@ibgE=Bcz>q?hk4+kj`B%blJQ5~@vB;!5Ev}>K#_FQH}>!P zv;+*z$8>VboZZ=U(&-EPEYvzoTv5jo-t5E3SH(O0`h_f|fsASa`#s^T(ZRs`Xju35 z*`HLVWfjxTcn(PaPXA&3_k;o$BfaGQS|8oM5PmHK?CFEc_LFZsyDnN6klxD~+Sz0V zCJB$bC0ynTmN2!Yv1*yCbMc7fG zj4t%8wO@HVae2yWx_L>U)Hs>o!RP^7+jpuMMG}ieC(q*KKun5e#7zU~<*PqSH5_y$ zyBOSF3nLNRBF%`gtsh+mS!T_6aA@$hvPH-I)(dsHn&WFznodT#8d0ABdZzu^hdl_y z-x<84)2-$x#H(E=2|iDy(Bb@?sNGDGyQyeeR_S1PfB)xk`(m}` zdyS-z&5I(EbM_OKl5yjpYSwriUcaifvTS1zYp}Ac-4ic|?SSu(F>8MM9Xttyw!}}z zclk6;45gzQ<#HAcYb{K^{%Z@1I(=6ex!calk!32CaegF4 z1Y*6T(>ZTH3(|t&x|YA$s(ID?dwF1;Su+tFdT8mt#{{s&8|N?Xv#D5g&4G8X)*M5> z?E6@TiAPvb|NlQUFG!z>r2OwKRuLKf8}HCUkY8@E#c!`p5iXbqok(+2zwP3>W-BO^ zBqkg&*#>*9PtGq>hK5v|^B$_!=e5d^LBwCL zV@qGH62TVVm$X*Lj0YaLJIUB4S<9%tgsrWy>XwsNe?Dk$bya@m()q_=WPBXvBBNSo z;{rSJGWFkYiW=8~+1R)!H+X>};R!C$z58BLTnI!>zy?oxW@hh3ngyfxGg3L-Jx&~Y z=>Y28nHpH$&32yXqG+Q0LLZULd$G=K4X7BJ_o63Nv+FXWBi-5Ia{Tor61Efvcm2Xp zu7?Y6c8+Oc06Q3d+H{QsMP=}&t?pVuwbz>#a(1vt=S^l}ZDoZ5vHoK3Bs1g)yScs; zl#yXVR=te6xVTW5)zaNdhu3v5{Fu2%!${{Ynb~Bcy>bi<|M>f@Y8^t3hDqk?s4uD( z@iBq?QWdpW7YDiEuJshoq5DqqbVNu{P>{r1=*aQQnPXjx&2Z|2*=FbGd;9s#A9c%( z;BIGg_OL*@`B#n$d312C59|S@q1{jHiNz7`g#fPmrLZ8>oVVU&L)?!C0oV}@`F0_$ zeGlG3WSpzF%I#-YJyv0SM|M62))w(?Pqkb~2mF?0z z7YDckE>zVD7RLY;Ln+teJ{zNf1h-+5H|KGwo@)y2_njq=cnRz$l1u*b65wIEe@)c# z))+@hIrmp!Xd)i?X4@{-Lx1GN7u&#b6Rh-!&p{|EXG40-a5#;zNHRfr{A zG+JGmBJctd57KTv2r)%W<04QQ1tZ+984C{2L9)Rey2}P z>a4$hwABu>z~BLIzu-v7${hlGYek)4O9NoAr`d~#G~#h==BH9b7XggmlXS>^aTT5@W^N}l(xXVom7gTV+Fh20hk{U+~v4xe0wpQcKc!G@p z(Umw{XGQ*nm_kS)7$I2QnE7cIMVq*g_F~N~=pXl%j(GG>&y8kY3mLt$Ne@G`^RcVS zb0mXz0jO43)WnMi0PfagktfoST+ye)HM!fZIU;mB0`f!4!;y?6AA#4i3 z-SjUL!SH6qk9wk6;Rx{wPX-X|u0s&l^b(xmdI115K*%*qb-2h`PxGzoxL9kx4zcl` zZMPGSpIRDI(!+Ybp0fG8TxF?yF#6}Ezs8g$+>70M7#a97GeYKXl}s-@_{vM__)tss zub#@gQ<8VqvdphhLQI343Rnw=AR{Md5~$GkVWMqUn`td|PsEIPT#HhWrzkH_$cN*v zPkcuvr0p&OTdrn#4tEXaTmRraKTa0A{a8Gn9xfiC%9Xo`6ECKy^QxVwWmnTw>tm8F z&76|~wio+{@Bt2!xw57Bjsul^Iwq#b5(g63X6rg^)ub>tl^lUiEmY=fpC4~KkRVAa zD&#xRn9)1jBpp)1=hb9htvajzMuPxkcSFARbhF@6c19lr0F@O2au&)v<7q{W2{NBA z?QKQH+AJO(UZ)7-f2%Vl;f$xCv~(QENYIIg>n$@mgf*Uk=<*JOOU6nY{fiMCVF$k| z>91eEQW-vLbIHzlswA;1Jnj?dH=SyBejgWyTk|Lr@7L=`kkDsg&T!B=K&QSvsSfTb zA#y_fR>~^JpEnNJV8Ac7ydI*ZGqjbNkc~v?%~SDHqOtx*{E}GI7&m`5Zlej1 zE|5WzcaDTd=dLnwt}fRc!diG8H0#VkPloT#o5yi-vtQ`pqnddQy<}5k0uXVGYT5`8eD2r?HN!xC9ePX5676 z67h8}F;&{0a*dj!;Nz47NC1%M2Eu+AQ3^j2lfRNv4)#{}uij3FN$$Qf@FS?Gu(q?q zg!ETv%r@}j`|gJKd2CDc%9!LdvIJC3*N{XP=Ie3yKem%X}-|@r!Ex9IGKTD4o zyWIbJyY&%>txyFYQ(3`9$1Z>Q-t|4#n_sSL-*{^Jhmtw1GC58zI^KORbTd=bIqD$_ zBEFHl{%Se}r6*}>vK^+p8nC#+@Y9JZ{{Xw9^)^FLu#E-b?* z59KQ7{o^F|cW$SDw^u0$>BJknu7J-UYU=DcKOG8J;Qgomu#&TRQq2cF?xDcA9r96?BLUA|jHx z66m_#cSX!Q)`ai2pMU;xDXEf#ZZ-qG{xf3(vPS0SI6iUch1X_=LJ&UUIyQ~ntD#_pI?5t_3zkt z;OYR_J4?03SI2h?G&Cj8Uo;q(Rd8GXqT6t^`ESBSk&!;=-L~r8Hr;}XW?^U#O__3$ zhZ$0B7?_VzN3h^>OYod!6+NyZ6EUV492P)YxG{nRdEyLiwx{ZP>j+jtp?T z&cnz!3lZneo0)3Z@dcuLb)t(@;2<6`=Ip&Dc0@Ppy(}&Ddo)tOKY;QM`9M|>Ot<0( zU6(FW$NgmI4KkNPpgdTEPR~UdBOm+-AQI?))6ClSVX#cs#i;AruPoO%a^!Oplisl$ zN$3ED;fj0SCB5|J+_=)O=^1nX2X|q8l4@%TUYl)nAd~)GK!lS6tLF_kNzUs>Ba#Y< z4_IeApP%W900k^Davb#G2ICKE_W%ZjyL=|#_n#Ziui!R6&74``lv$;Rdg2(Sf5Omr z!jG)inI=)=&{93!oqYA(Cjx~z$#T9qHb8p3_#@4~#c`YFgD_Kw3c@R;b|tl9v6#DxTbE9?YuN7ZBxP|sOg%eR+)C}Ehn~VW|YVW+wi~^XF9-Pp!A?K z0s1T?G&M&*A*cP0IZ~Fqs277q;qgyMzDbuh@q_4mX5te)z1Q{O<7^l(X|FwM!oYLl z=Id|GD zEb_AouL6+z=)OoI1c9p$+6&{s%O#}r)iKj8l)cnjB4=>g(1JiU>F6!f74vrm)g%E) zNuFE_5Z%_bXdYHL2p)hbXeCiv*Bch8HH$Gmj$OyGuIP}CeP`FcEUjF0buwK(EVHSj ziL?E?uwxFK=6`+o+coehJ=~L?H(Px2JFIyptkpx}0k@~KH?f4R+Z(_?l89z{7WbgC4k9| zKHnTYV;6N>nD{5dw|HCQh`q}YTa4ha5|mslv((V|pvDv5jswr0HYH^g)!wHlQb(V^ z;H7hD7b6?{v~i(L3ak|?D6$?3vc--3`ZxKw33~Hs{VgE+7uKNr0Wg-t8bOBKIQ0cN z!16a7F1yKD5dH0j^ndiLeG)MPO^#L(d=U^*FNFAEFB_Jv_)Etc;O*xEZAI z*sQD1gmXSQPv>v9a`>&nKCpHEWh3gD>nkTX}i8i z>9xYlFM8rs>9xdcA1cs9FIAC)lUY2w?LGF39Vn%*+vq`a^)PciG=D+j(}5D2V9;G( zJJC*!Ew!QEt&QJtSb(%rV8rPcC!!G4M7!ZSRSq>W_{jm0l~x{Hdm9r%^vTzf!2I^x z3|dA%gWIJ#BTkryD0=@6RD0@_fOUpm23km?~~&KKoM4H zkcL%47&E5K*Z#sN!iqV0h&gTeL8UqkB}%!In~@4zrf;fF6Zw>|poBy;V4czKpx>!; zpy})D@KS;{$Msx&AK(AgTyv~$IlF{E=?;h+h@OX;#ZQ!{Nnv15KrD78aKq(4KI0gd z*4GC-p7`Td&}6)tkLP9`j4=k@(TGe>hLPPPZgkO^D>2h&&jVfBF zqM2HWVx~s)MZK27-bJQ1R?5jczU+@{^aGQ(AFPfSZ(O>v5iddV$^ELb{i|3o-_S#) zQ76YxPhLsSYVqBw79bz5n7IZ~nO~me(^tHUcDFUPXk~N@MdqHGcVpxR?aMhy9PxLX z(Yj@Z)h$pDdc~nI`4c644|Rm0u{bGUQbJyezHlX^PC?bt{&Vzds$V7m`PnFKc$G~# z9&^csJu`7J)9$F<0n<9e8BItiG=Xvu8LG}9URr_?9E-gx^|9(lR`S$tJL6SVLIK&D zipIU3$c|pqnSse7WyR7b(ZP?Ymh6^P8^6i2WKRoM%4UpjI!3U3$Hle#)0d zmg}-Ae&e>~@IZ%uq05bK3tDHSAdyq;Z+tzl>_S%o79GN=mogsuolT5MaFaW=VWqU%kS; z({{Q7B{?`a{9X%o9b!cxwTG1L;G%l^6iZeL1=>bX`2ac*kC%O<27Qu1VlK>~`D0tkIZC$w)qd1c+ZD>pSTeSnRe6M>`5(@OO-xxi{0}g3E z^+`ybue?1!SPr5(UCxCy-3C2)@ipNw4d65x>X@$L8w9Oq*^aBej7m2Lhs?J}k)cN^ zM8fe*X6J0C*JO0F!dTkcD^yM^GV%lo8)c=rHTv?eQ1ai&zWCTOd~tMb_=Q$7WTS2Q zMcZ1qC_5o<2{i?1-U&W97)wXzqI}WB01LG>rUtar*4X;JmT%pC zeG;8Y0j8=~hvJDG%p95AqmbbMf+`WMgAX&(21NI4yTE7@B#e_#CeEyq*2*%^woIwlF%z znLGr+e%+H;n&ptm>TN8BQ6=zzlT7_96h$E^$m^}wLNPr2HT&-v5CdoU@N2w>BWmUL zuq6a9ODNJ*)*i9UVf-^uxv@!>Ds=J=7i#zWdU`AUI|Yji5aL>o2k8b* z2L=?6ef<1r!DU~&=zeA@^}+TIlI?iXtg?n-elQXdc?~n2{!; z?EiIIR;HjC16GOiySx=#R92l%D{6UOW|ZnIhp_Y|(iR5ExVQ2J6XL}wu@Sz@CgIU< z6Kuvu^S;nzh|s(*WBcmpyHF5_J@X|WwT3(GX;VzMe|>k&7WM~GDD#RYdZ96jT-m3% zd|C(ElnLVxEjW%2CKrK)e)DvMZDz$DitoUHO{G{D5^{0j3&e-L`6fJB%k}5YPEk(q z_iV~>mgBjPXX|W~r}oR)g+f&R=$r|gXx8*sx%gM>^hDP_l$Mc+FE77OFYcCak1U0I z1*~+V?9DYOf9eQ}V!LG^lX(GCj-%h6dju9fr|8u=BEHXavE6IrlV(Y2DfDu`1-W;= zco4(nyH2tYbh)3NmlwajWu5-m|4jHy(+H)Lmd>4#k3&5hfzaHeekmn=Kqbs{B1Ht| zodBA+xVRWAfVtt<7Y_@?^8n#r>SHxUrsw7kb_HHyx&%mxh)jQP?XCaxi_uFIRj?B8 z=HYZWv#8T-NTR!P2tD(Y!M$BgtR+7YH$4KWX~;@M#ydf>Xsj;ZUN1ji>f(8{7SbK-eitTC5&)fUDjfSWA~fEA zwhynf>Wj!cq*Gd%QGx!{OqFQdDZzfPugu@a_K_(?&@>-IYk-BJdY3hM=nm2W;E^_5V8r_~ zJNRq;d);z$fTd^eKelU!r9OC$`8r@>r?nTF{TKC_kDqz(>+w2K5aYxP=?ydg-Q6*Q ziqs`*G)VQ$EG)#mB1{fVhe-65iwRB#TuM(t4DywQdt_VxuxQ65K=^k^GP}ddCJ^gw zoMYoZbM)^ob<%RR@25EXLuYYl~zCNXtwxnaJc{ zPVHYR$e1ij^9?kS-Ibd3^zJ$Pyv4rHKg=YhFZUXDt4%Ju#zjBlvPd5Mku6GP@V4#) zGB>8E>(a;)m3o*S_q01pbylDt9#s7?XkvHzcrFgKlbWt&$Fu(v;Tk=Yw>3-_0U{)b zj|O^1J#Uc_Z=oKy$e->+_WPus10H$cNdf|4Fi1h3Xdpxy&HWKIbas01M*?nW7=U#^ zQr`A((*~+Qcd0bS)mt1N(W94J=p2Q;8E@3|pY>sfHH}9sxsz1+aT_)nDj~F|D#~VF zMOc~B#}JE&h=eC5k}UWjVu$h5-uvH86kc(3IHkE6za%`2p;ArqGbk%q9@4yYfGwUg z3aCE-D~TVp&~1!s#%BWR{Fb1FhRZP-YU@AaHd1y6!#O_#`gm1F=-gd7J?(A74y)a9 z8yC&bJ|VhU!AkG=`w9|D_zTRBwPrj`eSdT1??R$OXuoSzgbPbRh{Hb4LvGmhIzM!* zNhr!cD}XiyGJQ^Ba{(Q0YHDg&L2$-1QLWf*(R0RXb1Vm3j1Yu)>wYubAV3q|O!wLM z;qaCs#dlLaPBj_tWb3+F@eEs{tuzMr0?d*$(AvyFYnyUj1I=H(<*xaM%P|^i6N+a( z12PI%^mpVVOfnhhoS@XnbV#JRkIc{I;l;&PZMyLkOsaRGJr0R2BE%Q=6D|U zDFwc?7;%?cGT06~pQJfu>MPcxH_vNYSBC3_Xc;UHKJ- zvw+WB!__@mG#Sf|Gtn4r_`EkzR!`q7l`Uv?+oUccXtMI*X&)h;+fa|^qQb8Uz`E~d zd+Bn3U4z9hUl7vP*4CQU_sKeSn{xfd&z{DGQz^hP6M2}5NrR5rm>i@^M>f#}t55N^ zcCSsGNo)d7-|bSS+Op)0bBeOOOtLa``Y#oXAX!ENJrd7Noz*CnYC)+{*8#19Z4T%f zGG?9>E?+L}K5CE^>)tPGnc%^?H;#8QoMN!mHN#q|5r&4T{*KMY?y!2yl7)|^_WEBK zt&Rl#tNaryp}v^i_F88;*_7_}f_p4L2fP~Nza~8hI#E3~)gjMD0(t6h0OJhOq%mnj z_T6rgayGka<=D`xeEDbh=L!nBci^uKo`*l15F7^ z*CFsn%{DWPT&hDT-@L(o@KPh17ja+%b30i)#3UwXD0q{?wHbJLU)XTtk)sw37fW0M zdlbe!J4-8)jDP2)2648=pjb|L=4?i)TZ4%QK+K}s`5Os(JtO#1!D*+ z>Ivc4&2aU?d=HbH!n=Xg;1i<9Vex@`HYs9%jRzWMR%=F9eEaK$fsFbuhuInUCr3>A zsJx$1+tJ9=i$Y#P<`V>77!%6tFksaXZ944QkBQD~O#EOJ(q@F>3vIPl5C6}UujC2% zUR&b{&&LNP0_rxV5NFM6-eFuu?LWGOdA;eouj?Yf+vH8hdBOzLnJii2{te&pQd3HT3SW>EvD9kT3alc{3a4w)glYbPxo7!bE>d+E1$u5HEj zax&q9XYY0&$-m3W%~j${>)YGog;)ZJ3t%lpb^8vtsr#tN+MiYd4YKG$w}+Z`mdAm4 zh6n#yPt+x7;AEZQ6Mwg9`UM!6hhGz?&PNj^+Uny9&UytuUf$^$!0;ct4-o*EY4Nl7 z-B9-*=w-@>rLTWHz#l{+>9wcQUxDV`KEm9`nDg(oo087mv;vllHq$r;q4b_^MMtah zXw(-EX9XXkj(aAGzHfa#_B-?$#1c@o&tChz>+9@FN=kQM0x+GrrY38On$=9T8HD(= zA$=eI!)!#t{{*?&d8>U4gEqaNO_$`NY@cM)w|g*_f?r%Qv~+j2-Ct}yfDx?KgQu2% zyYGWLB%GJK%sPy?Qv^gsBS6nOo(EWgG?_on3X|mQ-M?CP`WciyvZyG%hm|PbAgpu~ z<6=qvRDKv4Y7O-@;*Ro+BMYlNBZF-pUKr4nLS(s9qJ2J(j*VGcTeH@$_PoWiaV~qR z^i=>27$UE|i;=^@kQGR+{J0r#|lB`A#7Rn%9?%oA67fu-(~`!oRzh; z{CZ~5%&*POfm1#1a0W@Q#zmu)WXy+wg;ZX9zUD}$SrkiFBL^K~Y$vaax=7gD`U%(u9Q6+OpNp9S8b9fl3YjpD#OuSzhM}XlgWtxS8XqF<21@Vxs8UK39 zRw1hzDefCn!aqrs-=!PPsJ{dplKuXy?+jbq0X)g#_iObYf$KN>=`@sUw1!5h`tI2< zft(3P$))yMim#CL@`lhuRpsFAfCFX^2_R^s)J6L%WO2KFdQ+^%e@t<>%G=JDvWFF+Fh#}E0o zkgJv#FSEpIx7Wb*D37Z92{*(qW2Y*f1z^rbf7*szxl;$Xa-gB|_oeYU3jO<03v!OU}6U&UFa zXa41C&)KAX-M%8+ZT%}r079#aWSvAXlrt}YlqmNv^QUp6^A#bc{%79O;UEq2 zvj31d!J7$6WnTNaExx|!n#T^3-Ta2M>bPnrZN)H%QOmY`wj$QqrniLMD0a^px{)EztDe^(iY48S@UXx=Z=1c6YpWD3 zov3t-@Q{{8q$vGu7Gm~l#je9?armgnQ>ORuX7_L{Iq#Z12-&kdu*(<3V7F-p`~kU( ze|eRbq)~^PSff0Ht*_DBX{BT?_&JXsUAl8^+48qOvdn2AgdB-8MzUg2UA#e}0$o9d z@j|)d^2Qsn{w2GA&M?~yrzR!D5HT(8u|>RenuBBpLzuKT?nc!Z0M!IfQ!RPLAy!N` zOcyp6B1vq~li0yr_FOYR-S;S;LZq8OTFjv&oTYMsOyBd? zC!TJrHBMUTXeNEMovwL>lR7P{2*HyH=`J@LO3~EA^ZYFkaBj;Bp9?l4uIWVq(liFKo6VmOlx;FwU zZ%~jq_1TXfsc|o)Q=#wzkhq| zawZb{eECxr|BwF!GuOg)bw~hz^+4-Q3hyugY2XS9Ylv?|KVpxF#Cl>Q34`ER-?EcZ zGVB72$;pKjyDBMCHi;ct1#C~zh3_tB?!SO($y|FZA3os}4Y)doN}YUV+n*B@`VFjK zHn%s|My95Fmu-@D2%x*{Er0pqh@iFexnufl@ltOPuz2L34jvl1$Wv;;|7r!U0ZzuL z)Omt^!&g^VvT^adu{>S@O`!>!mp;Eogurwc0&(CT)Fx6aCwBmVa}tE2Swz|#4;?KL z2pV^_4>V`sT_bX7+n`J@nfoqBD+u}?m{Mx=n`x=5uVgw_m(yTAmAd{tHQVCK)a*3J zDsSC}X1>VF$7j9V6)4gt`B#q9s{=$Z@bU~anZhn*&Tu}7t>~8Lqt8CLS0=W87~foN zuRc2a_TpiBMg~xSfEOc)J?fBdBlgoqTQhBe|H`HGAPff7L(m#tx0$jBtIk&P;m<+o z(PA~7&d-k#U`Zv^+C-qd;oiAK9>#Ah0@HmU)tbRWQB2|? z5!fe}fBCLQzydz^&H%m`U`F&`kB|5E_UfVG%b)7Y*;f@?mg6!`yquQ%&~Ttt^_19{ ztiX9JHUgSH$eacq0$LiHsP!~Q+atG|i%qfp{)}lw?i7GLUN|ul_q+?E{!o|Rqc4Jn!{u)6hJdz>>E{efwS^{PmTY>!JvO3UzRPddAF;3l^Fr;<`{ zH8H@OV>2=`TKSV{Ubj2Lo-@rylhr($^pI4e`$7IwHiD9+A7D1Vr|L%69TZ~LGoEbY z%1TOZaOajN-5wzIkQ{zC0FE*}u@~t<6L^wwmMnlS%dK6tA`o~N9Lm2U)%gQh@=IS1yE=13NWzGf|ya$(b>2P zM;Nno9U4kJ$9=j_eDaA^PBV!eaDPRee)oSFD~*B^+}yx7*D6V~(szIPx|kmYf(Nb4 zR*7r9;}k#$R4JW;pjsW2WV!T$s(x}2;B>)54~x2#795EtK{bxtChV&O#xiRc7ruk1 z*8c(3>D6EctEayaZfmy!YEbYEQ83{;!UabNI~x`K4g6s7GZZL3t1%W=tYDc5K6(^I z=h{JH0aUy&W-6+^L>N8=1K$x1aAm0cbu~6vFzgYiq^r47ZpG$ixhz2Tj&EO^h(qup z87F537xAp~u@hZE7i|oFd3RJK0-alFP~a`N3C75Odw#>!hmlzAnXrTet@pDGbT?ec z9Yl9>!Ux>Oq`3zOr0P>)2=P0m_;V+|(CqB~q5Q=LxY5WVGaD_=$}cK1+DEC-=-l7& z!!0lRTDo!2L28TGlSBWFz=n<6AYVz+pYKluHzscJxmk0`{c;+S>KDPyS3Zpantr2P zd9e6Pr90(8{qnqP+{Vm~`B;jm^cwCkyj;uMEzmy&2Jm->RZEH8t4pVkt6HpkCrAR~ z0#vaz7ok3UKFoPS4H0}aVE6dPPC^|K8ju^9OH;z4M?S!N+fsSs5BYH7UVLTxz?DBO z&#}xW=TX5XV+bi~0q^r5>1RuEQq!+DkgBrJh7VQCu>BiX_=}*_Z{yU=hXQ;%-|KPVE+TGmKl;VS75OB>r)dwb;< zoNd!X2LP*H5Yx@@X^|_}djoFN(jdz$sl$eS(tM~tuFA~D@}63mSvFBDlWaaUOpJ8+ zYC_cDqU~+8Sf5CpIKwqYf`@{cKI6mV7e=AL{zd)8to zKVi~;=P-!^CZI~r5w}&AbLoT$#g8Pvmw&|jm-!@4j+6U(O$HYS&@-f%I<=h$)^E(< zmSKDGp~j2mlk!!t5nrl|=zhCIOsN|LpO&BcEDZ+4|385_K<64LZ#^Uk6m`UJq#U%lOtZe$kF1uBSjsZm`MpKnf1&$iLd>4z-HUY{CD_-ZwPMOM zHMUT7{@d|1re}O&CSfdsTFSx}CMXoH{8)0gHEHorJwvyUvdSK^`nx<_MK_1ao>r7N zL)9M@%|p;PzOk{mbacd`It9HF`f1k4cR+a;m?v+5&$ltCMo&=P8_-?;=YGZ>^ok!8 z#rp&jhBxw|ik6tREOEFG7d)mkT6Zcc1q20AAfSCQ1NvPD7$}I-;Loom89;7WA1nLuAZanvqxeA5aTzm`K} zdEM!;;t<`ZQY_VzB5FzKK$0}3d||94od*CsC~rUx27&=VG?Syv&LFZKTl6rnAfgu< zj*p?>E~&VI-%R7DsFF^Iv(hOC(Ar;S{_L{n>g$&?YQ(W&HG#0~MVVrED)rJ5SeG3Z z4^WaGsR-cWDf?Yq*9!bHd|V0>(jO=BV=T$#oO=}-rb0?&&nz`MGg{NPy_v)4jR*W{ z=`1}P3&tZM?qiQO(TM_>1T>iQu;{T8*t?O(!!^DH%3lOgbu7eybaS}W31}dNRRt*7 zKqP6yp#A!kRmzz8_ECnbc2+1Bi)VC-5np@-6@D5h@>>q($a7i|G79f=T3bDW$*p1 zJ?EJ37;|m3VoeBNv}+?G#k|mZz41DL;JRnqsOu2+WFV3=IIj0_EBzry{^6_f6Een{ zGm+Ig+QXgWlYqmTtKfN(m(bm#?AaS%mXC>$jX$p(MyzZ3(GNN`0T>35w8pdt7B>Hl z4`MGc)Z3!|Iy4|A8?ZSwBl#?P)%BQa$3x88$3@!0wIW(qt~loh{bu=pG-6VArq+Y@5uNPT>f7{R zd;)05JtvKWP+Ze?zAk2`fhb&94QQU^MghNcImR!1Gbgwz)0*elfrv5p4IX?_MZM$d^1g49i3Gz0y z`)4Q7r_q7uzHH8jPL=k~&2Cee8=CciuFC)@dZ(ZO=yL}VEHuCMyT)2XjM@Dw6CdOh zd3*k}_x`26L5q8?iwVrN6aD@Im(j9v2tm71QDWxV%%Y{LH3qlN-J})#8UwwIt+>ef zI06`*2CQQZ2K8a|szf#-d4yDBXj~ks*sz#Crl$l{ZveCnK2nv0Q-EU4ApZC(&w%2y z&#|g{)5~fO!F!>_ zo+fV!ppD@2pVz$3(@=GbIaPe2zN1Um_qp;$hI<3*`F@c?5D( zj4+Rl5oKQz7#dq%E@`T-vBOTf1i#*|PCoQQg={#bt-+q&{fsMuQ`+ek{cxakNAJy4%6Khd&G-G7w@c5avzqz6FP5d4jW`ix$1ztbm;7N zN~@6#-GL#8Q;bM4l+}B0*vAnZuW31#xA(c2e^a7UuvbOnc8ntD zG_kmlM40jWX>*ux-%E@0GzrsLQ51T$ZSnCPwl}7(r3oywe32;V^V&%7?}s;mQZYW| z&MqVClJ<)6jJZ=A_mPLUQJlpyy}^@FiF0kwW;96pYOczN2dojm1oNL=m%3NRU7484 zUowVq+gTRZMIdgA?}MOj>acnElKi7ka~?h7Wq0uw&%~A5W6xm+KnwJk6oxpELx

    ^W8@=1XA79aQ>z`lOPQo4;_}`*q9xULxs{(-N@`(0g(Gxrwpzr@P=g4YiL&M z`!(sX3|t5Sus=hiS)!N0u-5P17S=Jv>d;ZL&`Micg1GO;wCnjl*S%sSk$03>hv%UF zf;o|e1nUg+xm<;5Yj;6siSa)!HNOsz`f^VFH7&+C+(Oqgh5*S~!(3*T8~BE_I;~+8 zaZw@Ez~TdHPg5f7+HFO88v0)v-@@s6xpm8;IslsEf|tvkU_$sWld68I#r{nOgCf^n zq>ZnMJL-PX+Z`GQn)YQD@TctOHf)bx=oMxme%# z_;>QrQ32Kb0u?ptp81XMxNPchI{-Hd7Z+C@%ezZxQ%s&&Zt(i!%R9L*EbO9{{{Wrb zlUHgz;BI*K2>u?hQGeb*nrImMpe2wK>pQv+9G<2Q4$9g08CJPb_eCaJa^1AgbNr)r z%LKtBQP$vWNTfw(|9biXUG-}#DO)nVJPvpedrfKI&faI1A_vu|GWKy#Mp`X@`}Ua+ z1KH{FH|Xnp%b<|3YZeQqK*O;0M5G1BF2Xg~=V~QPDCA_A&jk6(t+cIUXDLwy4|tQ? zejWL*RHvomG+34bfe2<02$;E30sFyM9J&!v@5_%9qwfq>yAWPXB+lPYvS|?J#iX&g z(Il&=VRinP&Rl6iyubbmQfOn*a+Y7{nC zUO2=oPm~~|3n~R!L`i4>*8-<@0M`vXqBl15N!Uqt=fO#|$Xi=m1MdJ5A)$sxwJ#`B}w}N*XiQYza`0G0-2OQM80(W8k_h6$Bo0dcL!kz0rpp6%FCs6>frEqG8eB+hp`)+XL^4AmUq+;XA?pO4jNO2PF-IBoO_c@{ zazdpVBk_(P85tQq45wG&pNrc_-sKeo3k#m3$5O^56y z%|y~n9Vi2nmSNoy!daDJ%ni;sQ+wC+LiDA_6~@)P2=r6qGXGRO3?}}3?A4QBrjyt6 z_%5^RGYGXCVTO?NMa5x=j@S5o#`3Ql3@*j=W+)B-BIrA`)BSDXmK7g{tx@_CjF7=? z%Bh44klw0L3r=FZnBkTlS}+2jxDpo=g%p+J72H8|f>0y;;p5kjAe&!F|%^)%RH{~&LB^B#mJ8HC&p-^JsiT>m8&v^O!!zP$RE=asw>dzk z9&-)TDvKU2Oh*GFe5x7Eh<8_bkeMZhse6Z|`YpZ`mtT`?jb9I#2Ad?C$!d$)Yla`H zFZiC0w{GUw9<;OnO_Xgo3t?DDVYg=t$d@5&YA({iABSy(o=`mgQGHe#fbnu?j1K&NbI1ATN+=zQzb!3k&1J*$Rw4efMmk zEAuw%1;Dj^B5)_cQ8IG>8D59@z9+1B4g#s+BNhC4yNM3;>aND%N^ z6U~ccRwpU61z1MZ>}c#xj*+aTstt-1{k(ZDSDEKm2t$kw|5ICODce_xlMJ1IK> zQ9UK>rb(ty2JxR?&(4uL19|90%za;>VGgoX5CGo_P#_Z`1c$D(krw(7(S=Rf#+4*` zhDjE>Xb*Byg~(`hvi51F9=HsI0r{NBphOus7R{TAIVBt~lg;JGiOiG-!$IH2UgNbU zYL>;>x+T0>W1Gb@h5Jn;wz{*wUv5?!^9G{=_=5%%#kUs=o`UV$-*WFCjts>Kfx7)2 zRe*+PxzWy;c)qq-bg>vep1ekpDnB4!xwsmS?j;Mx=Qj1z59SZOtbc{L=)2!{>N|eM z$B?y`VGcILA+{8(!B{NY)rhAwKu#WDt-yi~`|>`M==?Lx_+Ul(0z92F zIjy(NDEghD9&yd9gCnp0gJ@cKWHB;^y)oh1#1OI6v`>FakyVLePuPvakkjTJLQfC_ ze#Rb5=j!dYRGD<@jeg2rzdHDuaj5lu=ROc}j;V$Cvtg^|YFLVZ(MW%&^SbL5q>63g z6QKP3NWwtIoX$E@Kq_}ZiBLK17`noO&(tWMUoc$cL3R*S=sMPuB8ed)e#!w|^SS1m z94;0Q((r+p3K-U?3NTQ2bK~B;1wJgHshDEi@{}09uE1r-`7s|zKWM>}e0lD;CniN(>!-M~UF^<%6MP-1+|fER|PijgI*`}J=MS*>VO&&EAo zE-rSM5*Jq09*-g7xmO1@tiIX^c#QSZR1PX(O zEm%a1rT|fGIe@dC4q|TE8s9IShY?c*hNj|Hb4_61s`#MM4Syn)EymW_H@5<$LEiJj zZoRXaZ999XJcEbtN%!?82saq81unOm?ZFailw_4J5@#=OB;_(NaRq)3;OGVV+!o&e zY@SPtT8$pP5tu`K0srtiupJ)R#<%+!MB9v6+vLyT$P?O)ZqOBYC#O40DQXon453o zi{N(|7~zNaOvJ0}X^o0lO_dCCk87YzBnyhQm}1BM=GR z!?2ZgDx<#s&C%~p!p=|E6?&3{fJA)-PL3Eb7tM3Hu^zNXZ70PLy+C^sI%*&#;NA0C z_Y$kl7P$0pbLE}<0|OYj57<#2^3rOBrp+7En&;z1ht`*{+C@v2>H_z8r6C-}BFpVTvP z$X{K<0{=NtxM$7bT|*NrsD?93&rZZXqn+QR=c`&;UNxAFVjKZ5+T^J1*Nx}n-Bn=d zM}Y#)qsJZr@H&5ifAz^Jt_>nzy?QnH^JlWB2sl{*}ySucdKM#_czqmguLYygVXUVI`>-S3Goij!Fhe#oyr| zd;TrtKnT@!A)EtELH2U!RcTXuDC>Sg5iGiZ_wl@8rDqczLs_F(c2T;2}rHY40 z#NA;tYA-RIqtTp*n=qiH{r)CO*Kf#rbWU~H2(qM1o(sgrR12VZVLRxd`BZa6bwLQ0=V9sBun zpL2HVV7in)->W{wcbx#l0@JXB%Fpr`8&fpd%%d&#;P>@+dUl#04``U{&7j1tR=&Bz z#_<5?lUMW-ONN_utW4{q4YJe*`zib5D)jeeY*A!AIGuX*2%u;5oXFxhaUEmN7XzC* zUW|0{?0yj5mk#UEW6&fqN@zUZ?st5rT2h<2F3@9{>wOr#W!Im z3@C^}*8%LkFc^W}trN^3NH?r+R^fH4EK~0v=xJq>>R1(BUo=)%rByZ5UOPHQEMbd$qHBMo^MH7_VygKokbV? z=SP8Q=Lw~~Ic~vU%sLTV$k^XTW$p2OXk3pnGAuVIXZYx-%JYQ;OW4gx{QtOGy(R57 zrdHir@kCmxu{U2q_xYb4EaXFdq_41uX#_}*=8D*z+@s~i@U3Xi&g)U1d+LBafmWKf*Q;is| zq=MYZy+1954UukY5^sVz&O6bgHtbZ3D4S!DVxWfi?b|n#u59HX={Ee$wC4fC;4m>K z9eG~0?^7h$ymC%aK@N+~YZrsJNJBJ)Dfe=Ja%E2Wbv0{01?!3sD#@b5QET2b(gZ26 z^`0c>sdJ~tiPZu99a0|Y;zpXhY)fT>%M|$GHeLDl4Ov=E5*&X%bsaXXOd^!*uA8L& zRM--fhE$g~MVb1QNR*dF!r2+S&}vFt8(D|x=(X=Yxt&4pn@qMcG_O~%avmgHqU8-cP6>S0nLPb^Sz+qe6SH<0=+E-$P$u#k(P5pBcE&Pi^SE_-yL;rv8{ zrPHnPB#?h!mpBu}n|0`dI3-oyvQ@KChe*nQC|4MIPOHYc`I8!%icdo-Ldzy;`s7#P zuAeh{`O-ejG;M(7^fOc-fy4b$kwro=?zyQpuIH z^vd$}%0h#24r;)Nk4%!KG>9iuT}X=KRDa(G_xH z@z691Z-!rZi7TNo-IPHtcOI7_5sc zv;sr~s5jTP){f$^=1~QEd>$M=^Q*ACMn^7qNQ~+!3jLhK<`ow1K59;(6;LjD&#FBe zb@Yi(vlT|32XCBdMKmKQ95O-o8c~zM&(Lp6ZduV^< z+byMr_aj%4p35oe1b^8X7Q{82+yf!R6T`W1ClvP|mW{g))M-$RzYBJqaIWR`Oswq& zUu=1{!8_lR&YUD2u?^=OkC=ifToI-ZL{VCJJyyw68yYz(Y>r8LeiW$i8tLH<%i+#*Yb>js5k{o9ueM zvj2gtBcMbLeVO0l;^HoJ`|yHBh(lQT3xGSyAxrZ!e}^8zE|df@ms`S4>E&m{l<3oU zR5dmKS)5BsLpW=Lt{?Wxohl1Sb$ROE3$Tfra=&-t-8RB$djus!i3wu zYnFUXBd1!R%Gc2B43}qJ@nBT?AmGK5;P;-70@;T4Tf!rjd68+qwD|B~`LAQhRd>a_ zW@s-WPN2-b=3om+_}}Gt^eX`p71aO)I3w%i2_@O#kv;!;oC>`#sc8;V{qk$wHl~l3qcNB0xssQ!VIZB59};G?_PbgrUbTV4xx10XQummomP>-A_)!PobN6DO?3Ck=f6yh&Ddx#w{KH33FaxWDVew7k6V<`==8l78Wr1{ycUlA3`q;=rJ0qLHD9W zM)4EuBk5$mfs{@ppga;G0PER~ArOEufIu5ytwH?T zg^TI?cy+k4PemD`3Rs-WmprfPFsHy{JB@iXdu2&8j zG&mw%ZW5|#VNjS|)R3)dPI85qHq=97qQ#`ixvZrmcQ|$aO8=ocMJP0zHs{Trjch?h zHQ6vzb{JVj)f?@G;FoU;^wBoatgG%atMhoQocdT<&yCA z3hp(X+mOoj6JAqP z91k5NLVT_nwi0EiWt;GQH$gEZXx&m*e3{!mBe&fy&!EQZ;8Jhb`fXLx&K{43Xss;6 z;P8JcBD|)it(G(yF|oKv-l+cSIRQ9TuFns8eRtV;jq2fnHquFzMW4IUhCMS(sQvKj zE7L$;@u5tKYQy{d2IDKrFmv68Z<>2_(<(M$_5hm#Ik6yF;q~7??prV+xia%1wvWJf z=C)WSA`XK%sKNC-?DdT-Gvs`P{3?jsC0|XvJwJ*vkC15x+pe_A zEsWjm9h4(&fa6fq=Sb)DqA?(#glyyFH7jd4GJAW%N5T$_+n#$9kxMK$!&=WZ3r2kB{%dGtSDdN8GDL2Mbw`Z~FvCPRFAnE9>}-vu9DKkm)s(Q2l`BTu0C z&kppOy+lJK5L1jIiauJCuC?QWnG5%%35U|V=)g!=ozAv}SFa+m&uhw%`&U*B9KmGy z>)3L{P`S+sN12VFN&9>nxwmk(TUOV?!2LJP<9AbJKM5Eh-GP}UW9kP&j@*3q1j@sM z)%aWYA~P?R@Rf19Oqa9@;7`MWQInFEwkt6|ryYUDuT?-nEHOWmxpl96$UApcD;bqh zYuGq}jMqhzz&SBtUw%ogh8fb&8eT1LpL}3i$n> zg*yI_u;?|>h=oPO|4x*qt>AICPuD?(0+Q5((CUC`IiTGNn;b<4)yYQt*|*Ztda?hd zeA_+SU=JXsc)IT$)qh&YjGt{XInvqjqAgFA&`;po=d01j-jRz}Pu?L{49E5($M8)p zUf0)nERxjZ{_2>R?`Y;O_|>WbBGr(7ITzyl-qs719%+zcy`u(c7exet`0!VCOsBQI z>*M1*d%&A4c(?9E#JE9)4CwVAk8zv#asItraeU`iWm2fLBq<6BBLDhbr-p|u966yR zG`t^fcb#qcuQPYO#&%p5{8zpB{-xBe7dCzmW}o;^rc|6=e~t2Mg0qGx#zSn;=jf^z zW&gBxGm&Hxm-#c*xQ^!5K~}i)Zl>S@hDX2u(Y!kfD$Ao{!hS$b<&sLnFs9v7`4{p_;DkM-@w! z;om`BcG}b>fCQ*cBa;xvn?vc(UL&W zzFwSm@7>%&4G+>5b?-l?T>$|-UGx0YLl@)iJAVtIYRFBwJu3Sf5SjPACE#I{eJh3G z85g)&(KW7Y_%Kcv8UBtINFJX3Y88pZtwD#HUVHK&BF32n?=;$I>j=TPxDa`g~1gTDu;2{A`7gPUjuLVqdLPI8d_K6@7WQ`6} zZxIplCaUb@U)Mp^`i_BxU3e|%54F$kgip75?7(?8X35N48nnldwp=cg-M`-jWf&7G zVTwTUbm~ZLw(La8u&LA-;7ua??>J_ewljR!D`#hz=1p*yA0q{}rYLQuG;H`_6%xT% zIzHAvE$d3Ah8Tq~RVFMf{~WjvI9c+=MGt-iFph5_XnMlmOHFB(c|*jIAj~WAyiORC z!Y&yd8lZa_l(rWn68zfm83>kd(ma65hJq5~xUn`?hc)l8b7iXNa|VF2xvF%%cOOg7 zXjIRJt<^?M!Xv?(3BcPRr6aSTLTvqw_JnN>g;Y;@3t9QcVQN)n;PO`VO zq$D6JvQpJBxo*0*p!=Tq^dEBjkc*AIl0~X+&rTnXaAgEIXx*P69zLf<=q@#Hvt#t~ zIE3Jy@VkNOz2Iz5CG9Xr=+>3k4SB&1M5UJKFF(gTI)a6DF(;n=x$ZG(2dm!4Ha~5Y?@S>nf)8rFm#QcT=N8MIhZFXEbBf6vf1MfzFqfTR4xJoL!$$neVj zH;RhW3n8Ixsg!CNLzp=8V=Z6*7;2p3yhpNO10T@u<{P2b37M;-Kc@)#Rvncn9l5=$ ztVuw`K7c@WTtFb*U@Y^-TDNy?W22aBP3N&d_JZe!MVJs%mb}flIBf}8i}vn)Aua<@ zq=ND^lJ>`m@2((Ci4S-WymT~%ogP=hqNGp;E*Et8MJ-j4E;7g>=!0T_`U1{J_ij@@ z`M0l#guDhd%f_v<#K-sNYE*1=>WVz8EH&1?X-W0!W#GEDo3!w)8##kaO`e!q=3FhhI>px^EhD+z|AdjWi2!3uN6xiE?bQ4OAo0@<4`sWSi*&{578B@-Q$bKW_ zgE{*|%A;H{%3bb3zar3)Z1|L?dojnO3w_p*Rwx`~nY&$@2iF%E9@PxmEL5#`LSDX5P!%*Q z$UaruAuR_i12VbT&_q0qqxV!4E`!te=3OZx5NWgm!Vobx;+}6xs8yB&?@~F0O<1wE z1D8Rd2e9_=%o~INx%czu&o916G0LBF7paFl6@uf1lsjd}?zBNjR-0F~qPVfJ-@b7h zP1blEyidNPv&%@Y_%6cVN6PmMHNtpEPx)cU`+fUoQ*XHgClpzBVG_R|7fcgAVKDiS z9RtEdoxOZt!sJjMED;ts8arK<+-Vy-23Q$LTe6!5K8K?x)>FkL=26HK^l4Q;Spx{c9~B$Ayh0|RbncF z9THBAV=xc6;c9%#cr3T!ub5UK^cCj3hcr;S*=Xawr(CB7 za0$OaA8)igm~L#(NJJ4=g@pK8v1aJU`5jM;lOm68rSXe_24sh<9K)!l7{{DvrQG%d z7k=~n6OMBB4K}%#dH0x)dL;sks%Qh}1Ie67xn@2dlF_H%F8&m7h1sRmHJqJ_5uy0T zQ-cYO-v@GC$Er9}=mZE8-;o!EH^HQHo0zExN|F>G}vwYqh;!d67O(77Tf{$>K;P++YwtKC$^ zklRCodrOF~p9k&Z%jqZSiG2$tgT1g7zqA%4crxTlXb7j98n(;CnrwL6khbv`ksL}@ zR}R%jNB&Yk(}tw@r(9*A62n_*m*On?(>~aMsI+c7^*Ik))dm))$d0Ab8GL?CY+sG1pWHe0V(!II zniZ&2=9k*55L_3|2>*0F(j&VLJdJDDG^>%@_%gZC)phpEEenu}PpE*BjeuMZAjZqA zzvf=pm(S2dT6CRkB1}dP>{=a}hG*`LPtD7*+a&#Uv#^$$R2Xx(*GYByt^- zZwMk$95=X?CLxOM3T?$!L^zpyuIkAj86|F>wAQo*R^!9Ji@0oJ+oAmCT1HSPxyDc~ zM!-dlBG`PJvk;n)=SP|zx2mRILT*7s>?`r9cimeZ#})u{T;B`y{gP)zazl5GUwU=zme<5KAJ^olbGXZf>>PqkeU7U0O2>^oSB#-OtIrt=S*<+ zy@K|VClN+}UF}IF4HSGFki&B5~#36M3M53^q$BSaxeu=x4zpPNi|OOv|a z_(kwr9W7~&qHLvHLeH$wdxZHfsd8n00}{sdM86}(A@6YL#PnA&n7$hQZaEd!Opd;e zIczaj@Hv>TGFxXXw2resYt2>Q<4_Jxl1>coeu95vx zPq(ZRZ6dGDe0=TXyeBOmY_Y70XTiwO`t20FVR_AJuSfgEAYJ1H)>p2LucL7)epx3A z&d-T(y!qQp-k#@Aut4%WURP>Oee&5t7bM?l=)xCD{I0vwrWHcL%P-+Z2FwHTNIi<`( z54khnp>T-ZsvVlroG#h@dVVh|<~3N^T_wa$l=brv^ZeFi&93F2c|xr0Giq3$S+(9Y zs-w355g&%ZJfJxTrGX%@{i%_?Hzya-oU`A3E(=N9Sh7I%Osqhp89U`b=~&J0nWggm zwyoSqh&p@5Kxi_-RBiV^QYRPPQeyD@{gwM2^vSp?5+hY8z;Df_)2v83SgR1)f`6e! z_b;#f=1`2H*-N$GnA_o*!TeU6=K}%;a+~9Jk4Z@(>F%0BCXT`gD1N}p3(F%@^N`ds zIpIF=uojWLgYR#tRQ|N7eBwGE258dpq{RzVi3G4Qkn9@Q@q^_}pwFV6xEpJ(x{-Wv zL#0{HJ*J!XhGs8<#nC2bG@Eg7K(A*O%3zp^uc*48zM(5}Oh|qjZv`ie(VCUJdojT< zl%cru==5r!R#WBMz%lh%>|ew>pmb{ zmFtCPGG@O+B{b2u?x=RcL&tYP4Y=Anl>On=LGCU?jUMV|c?VhaFuA+zS_(oYdI)yb z`1*$(98N?;O9?jy0Crzr%Wmr`q3Tp? z(4GiD^xE0085>PEs@Lr4Fb9LQIOo_C7*EztFpmU;ylZDeE|(BLMb2=#shm<;?!A-4IZ;uI>USzVX*A48w{Ggd zu#4xPMIC5<=`sg0yj`#Lep}&JC&$Lcu^X>f&hhSI;|qExe}IrlWMG7Tf6r==@K@jd zJ*`oKDt@dt%`C&-A+knKCapsl4f^YbxS==BhvVL8*1y^fO6)b%G0J^+20OfOn30?Q z=x7`-{Itt^p)P5cWkXBf1`jA6qQ4zjZWeH^Y?f1vGf>{vNTHQ4{#8x@bg<}vex|<{ zt%F!mP7xx0NRGbdl};T~116pw4hxMt+Wj2GE4Nih zF}i|M{*=NXOO7g*FH_rOz^$>B_t6c++DIcgOi&wib0{kORf0tuk1JxtpHDw{ zbQ8`jVieM^m2OkeV4kiL?FzUF-~wZzR-DZtH}t8Cy2qc#V-q{h^XlRVfcVp+z6n zt2W}~+Oi-Jm^aA<>Nj2x%pqHP>e^=YjCj)yB?b>PsHw+o{w|j-*T6y~#N3?(D*S|u zN|7GVq7+@o>k zI^|f=80s;#YiQHjI5HI7e9je0_#nCAI^DUDQYiD54CXQVf&?=Ea}tn&Z$vmrL}BEL5y0C@>ZV1T^Z$kR+w1e zq2<`?C?mYX*AsQ*-ZZB(X)=WwDeM76cZ1Jpw<~5&Q=af$A?!ifPn=L5u`}?XLQ*7rt53MsPw%!QCJlr}(*^UT`?WR>f@Y)EO z66;xq4c|DFbfU;$Q%=ixS5HU!D#xTgb*-bpo(i?C`5^oq z)2yTLBU>r+$KVQhWGVJ}B3t#RIM8Ir&)U6!IzK@?^@j?QG~xh&<&Dsnk&9*ld3n7j z;UmqBFXG3=W+u`eRg~#_7L7k1()}`CK72bcrSl*yHKN$@A_wN#=|g(P@pA)N z#lxzfv3_f^<0{beQG_t=?H!JPFw5yThJVy4?{}mi2|)yZF#5^1WtvwXBwp4}pAEum z&hDG|%$S#hKjKy^z9N#bzz$0MyZqK^y|4De{Xf||e~Qi@6nXa{u4iA{RV2ZHR_n< zaTta)GF%5+j2W1;?j@75*Kz3R2Ka8*(D0qjvU z@OWm&*UIVZXr1;NE&Fhg!>Y>G}(@h z#!-yE1VMnOJ6p&ZN55VZkE0Sa_CQu*8R7|gzt)r$BKrFOq9i`Q{2$K1o}rheKVa?+ z3}aM&pGevWf*24|^ho0|X|mVJ%P-~UG-9+8HKNRm%JrkqX-tK)dzf-Cp0s0h;Eplj z{5VS>g=RmTZKVleQuLM7!sq7b$jTD)MSYbEJ1|SPen@<*9uD>;rw+ihzlUfmZT(wz z96j55#5_1Ow-W-N8&>@m@Ek%zu|2lFI~x!*F8A!8<1&S$Vkx&NQf2LQ$;9HX&?tev zjPUBQhvWE7`PSA+!1I0E_R70JSE2mvpX4j|bRVZ4?S-Q{1d- z?GfD7oHZF4QGWuOkH`D8XPIz4$Lkefa}ErqxbyAZmBmoAX~(8fcr?=sUH;}2(^axf z{Ow5T_Y^Vam%X7uZiS7ku{rdXzC>!ZcH{Q`d|C{RMF0N&-|?V?qGrKTvneGJX}6s} zvZwRSs;9ejn`Lg|Re1^$zqoNi%g1eDadONrf7Q#bIgZ?+HR#Keb3K-@!2;{URhIFg8FG$0U2* zgd6AEQm0c5Cit7a7((OE7ptF)E|PS$N~%6C@{MVYp(fm2i65tFF^33YCL#*Rev%hlXhAvEj2go3yhv02 zDn9V!UOWKbsIO3U`!qf1j!eN>lS%WgKrgeU(2YJGnx*EanTrdK&%dL7uia)!OZN=r zk&zAgjiU(5v)_|z!$cBahY!PawXY_(w)*LBeJ8t~zdv;!nxX5+@~^>#Ldv7Z`sPOM^Q5xDhTAV`FJ)ul^G8C|Kb zNhu-)9Ht#Hq<>CJaCu={ai$y(tp3a-xGKaDRGWTiO8K{Q(ciWy3d)=~QUAZuA}7lG zZoXZBM-^(gr#Ky`G>ZI|p}S|81MpPX3Ju84nX_?d8*ui(gAXAtGFDkxSr*C7S4oDm zZ!x+3*VziPv+@iAk&FsXli}Ftj_^!5uYV~2MwzW*iJoyD+@w?`OPpRB=T0drYpE?B z!!oojz-mepxR;>1S?<2ySY3S(aQiR_wVrdZu}Khn!k5EuKK&^qIu>}yS=Jn%J)4ns z^AF#;9XTN-)gX$l7bNpQ6>hq=33H1fYdhLnHUdY}17j;Tdj8(M7}b082w>(jWksN) z6#{1n3tG&418J87QMFg$Wg@5zWsM)O+59Y7Ddoq^3vZJ{Y?F0EZDHAlS~$Tgj`B2` z&+S;a&HEu|61U@R;2j+0o+xL=cre}-T~oO#3mf5pIsZ~z7~vGcTv3K~T*|^5D52YS zhO_bOZqBtEHB2Ye~c_)$(Ed|T_oC?Q!ps%Oa3RSL}7_1Sikt<&WmKd_oMu*gO~ z!>Gw3>SFY~ip3S0Z;JkiPp~ByS}2qhj(w!g2sbr|Ew!nE5GUhR69)!=jORxzu&5i+!Xwb0Jz< zl>1AB1a~KX&~6T+W&Rf$#j$zlDq8ns{k%=8ksC}p`Ue6zOK-3|fA#K$5i-f^>WAK8 zom=KRsp@f*v;C8ONIiGDEKFOK@>HyRn8lkx67J{s^QSn?PQ%bF`|B( zzUwOf?$W!M?8P$+7oBU5a3U8Oq9ZkiVj{IjwKWHO*-qQBHL?LXa!n|^J5}GG_20?a zAb2HW&&6<7&m1_SJ|i@bMBi=UlCyQ4O1z0X9S=_|*3eVr+}HnjVBh*Xd~s3trK+*B zW7&Mtjobb1NB666MxG=bT4{FSchbIK&Jssp-Vtnl;V2B(?Pv|=?{gEi;V&;GZ*~G1yJHNn3Jibo8Hf(TkV0orE6Q}C^ z8yJ+cQcYPKbsZsOpZFOM4bQOeX;a#8LLG$8$j&)SXHiNFrw^~=*k5tH-+8lk%`a*I z4#x?%5rsRm$zM)i(aGzIuAJe#l5BUz6U-0h$eR=c04oDZM&I?xsL7>`De;6ts7{PXaIT@$)%qsPWNd7{5V&XxC^lx-_1?)BNHc zr(sOv^)UA;ORe06XKvY6Pouc9byKJI&gh23w%h3UKPS2#z3bP$e)=s#X?x@!*J7={ zXY>!h8%^E$3qr5wiqZDyO-~d{U6)?UZz@Ry2OGOujWB^OG1W?r2@Z5wh;-$tFvwwo zK)||f&`p6=9m{VG=IzrP=dT~-;4Q#j*fX+G>_-{Tgt-P5#%LI@PBxPsOlb;KL9GDN zKS0C`2wH2gukQts8{FvN*Y1X3)mv!WDZi#BzCB9BjIrAf>H5`s573(lu_+6m{9KQ+ zfM-@Hc|Rm)$XmDN+rv9ILQJpN>Cv@6M87WiJbnIej(-f&Eok_O9Ewt&aLA829lA8> zX~CFK@#y1Op8p_GDRJ4*??CTtzDH~!=bd5d;tAmS-u%iDGH`9&^^TD*;3nc8+`9|= zge>eQm-;z=&0!jMWG&c~MxY+hyi9?8oQQdiH)3&A1Wy`A}C=irB78q}e5QJ&`WD3;}xm;P9IE@J4^Mv&eZ@g(Nm1FD<+<8VbGj z+gg#h!(q(A1BC~GdkXKws zE#I^NCvDeEKN@M%fun98YirdYzP17BrzE0M`(m@c!Sl*gWZ7hjSZhp$-63zufc9Do zy(=iFKqz@BagDz%hjmZWcNVqx{#gIuXs0f|NXP{3ZG+6|vjuLYjYWcgY*`r@*m15@ z773wjD6Gb>P1)ZP{P2!Dxxe`z=H5IU>c4#-9uW#r$&x*a?4j&LN!BE5_C2x<+1JW0 zgzQ^NgzVd7&o*|lWEt5;*>^(1@0vdMeSh!o?>U}-p1&T)9G_$I88h#ByUDP`$> z{9t?P_E_-34W1--R#)jOu0qt6HOx0E;Z#q2wPqRMPfxY0=lU8p+ukDS+h$g{pq*nr zD|d>~;N(e`m|cmEdCv>$(E6VtPlK805AnXGBk|?{BtFyptaqnf2v~wZ)|jsLBbS?L zN$Z~8oFjSfXjn%(+#Kc|qew?i!QIr_92n(8XBM@OFyt~U`=r?VBWq4Gd*ds3D&E*6 z_bR~)nX@Dfx7{T?k+@F7s6Rq>SA=;WTJ3qZkvxZ8o^!1DZSqM1Gq z&FRoV!}0>A2l&G^B^iud5~XO4%CA#vo|5@(ALK`EC9B}vTomj~8N?JTY^}pwM3vk$ zO9v#6Zv}ePd+2_u_u)oFb5-{YyDah7=Qw>lXifO^gF-LSj!KqXI_s{FE`MMu`M1u2 z{*VwhZ~eH?G7-;|VDAgk-wu-=S#zCq@CJK^5&6l^$i3RYCeif7U&Pw9mcN_FPJC}g z7IMkWrhMdR?pF4b6XCpq(2y{b=)>tg_#3}aiFF3OA_BvQl;@gF9e*bDwOl1Pyx`GO ziH~Pyne9tF_4dLq)%X2R!G%ps>@0IKd-tBtCg$!eT^(aD`TZB#&{RKF1kGrMBS1P# zSBZkXt|<{18;Pk6)si>|o3EQsI0{S%7(0gLXhMqR`T4l{6=oXKh>Bs8D`~v^>y1UC zCCuiUt%ZlF5`SKO)X>S}?ExZ%73PcG{j^bh#D3b8XmFQ~AbwZ&#T3V_x!>&se5vkf zCNaIaBsr$dgM+dk-Z~CF9#*S4L)PAW>bV`JsVrNKBc%3;$vW+?U&c13c+z_%8O_-$ zDJ@F%Od&Kc)oE|iFVXg%(Dynd0s)QX?M^j!*A>d-pQmTgGgq$6cn5~PBgW%NU49)J z4AP{jd);?#FPOE@r|_wjOn0zF%%7}z=zH|WU1_i#)k`x;j@DsWBVYHpx-)X@zM%Ch zakzD}0^M~{GRoQd27bo@Q7<}kHyCkOk|!+x#&K@ABV*2S>CDLyWnYn(;Ya%z$^hxz zcN{R8WJTVdnDB`hjEEMUAEae;Jfxe9N?`h3?%p93tH}^2F`CD<6C^qMghf6kt9|c9 zKs?A6*RukdKZZ5J_=a8a!Q!|!o)a^huv2l4e)-DzZnn6xUNI%gwlmZMrhi9S9DAVK zF6}JFmaD!R4ocB|;e`tV-OM+(_KBV3o!jTR((mYh@%&NDJ7u-zwz-kSN2vCB?|ULT z_+m*cisIN;?S2X{F7)k52hTHZMP#Vml2XvT@;j!1C~8BL5z3=fPe3rFJ54h9kjyfmJPs*P;*QaJrn%*y^eG1h*zB=X#RLqpO=>!98XK!D{;&n&s#&9 zOsFc;Qmz75@}XkBnEkwebWn_Y$dCap~I* zpy=j**=RN|6~u7y1W)eFZ;c@9;0mPhTgG#~XRcGLQL0XMlJfcq9iHj-XSeS*#z}XD zprMB|75^oz$noB{0@NQpYT$|CN1;6T>&el`x7L?Ib{-=Z%aJbbL@=-K#lxNNYFJ;+XK&Jur;bV{0 zs~Zxo+vbD`@_iB)$)!)!MIxJDl2{sxVw0>kMhqh_eigv)`SVBO*Lp*3ZjPh}F`n(R z@)qhD@_aqtdxjhqP&=vT0RjV>ZeGB2w#6l3UQtssZZ(FM8d%I4`}DJ6>3H$nJE=R1c5&>}341H+Lsfy>6a z@%Jsh@E634_74T8dz_x!Z!36h!AK$aGMr83laydLb14cHa)(c!lzHQ=@xvtAyN2#F zVHT5)Aomo*2HJKkSG#W)A7hz<&AyQrRdSPnZ}*^(Dl1$;VBq$Z({J5VyGgkpq>;;= zsTKX)U@?9*ni1J2u}up4_$Wmt!G4Kfqp(dl_aSvS1^c_}7EaZg51v7+sC*&iJ^aPP z^r#puDfpzlw7xq(b_y}qa*8cl8MD*F+RIOh1HS?Nh3P+B5PpEm(8?fmoFgmu7H&Qg4~_8108+i#cHKLP9jMyU>BOwkjO z=KY}z)ZsE~y0>jm21S^(fa73HG^tn#)+*hDu+k2_^rZs?25ix*W1E{;bO{PY>_1qE zu$4Axs{Hz@-n|9%9OR`^LqpF1g->__T{(F4(#blp{}M||(~CM0Q0qJ5fi&!)FYbouP5q`~^ju&8u};_S z)sSK+F{Da(TtGbTBpOl?qow2H=AJ%2Tt^?wXH1=>XkJ@``*Yrc0{!<3r@POdk=W_K zQ&LVly@|Yu#B4^h$^-cJ^*Jrm`cwlGm=crYPT^txrvr?*(I4E1u+1QONe<$L32`!Q;>9H6jX)Xy}L=pn2r|Y!E;5B zVCSlk3rxz=S-8V=UfdGR<@gx>e>`{)|2E_K_Y-8lHcOSy#GA9Z9edc&i*6t`>+36RtzT4BNfcRWh&mn z1a2vm_|T)HiS9=k$BP*os}6p2h+>Pb_;#t?$>n=`&>8wzOq*}~#?70j(a0-%@4kNa zbm2?m0X5b4x#D00X>MlCL1j|Co@EiuY zr(?HwO(9u9eIeVmY)Jy=Gg<6BuZoZfq(md34-bI|G9hLaBn50UPmln5|g2y@N)Fh|pYwx|Vj<|P=lx-@~>nmX;_RIT6;%h(V<2A%1vEn`D zgc#)NwzHpvPBFuXl=L3@<>{!Xrx_WmD6dc1Ua>+wY}cPXs?nv}Yu!l!91q842EZQy zpp~mWSa(CgtQD};5@>!zJl|ANQIXLc4q7iDfPFV<&hhZ~a3pXAz_r?YGu()Pf}{L{ zdaj8$NDDn!J3T12YnwQ!RLZc|Z*^>hFfUic1gvV< ztzlvcPdMTOGo#pHN(xFfIOA}azTt4MFXi%*bcDa3O2d&c5q_(ff&5z9D6&YZiVcHo zXc$!XDrS(MIdy7yAU?n>Y+$lQza+wJ zZXJGcm2m&Re$o9*aRN6Thuu7f1G7&x;@$%kx%s?jNZ!3<1kn!AWf%>beV0-Nqppx zp)u;e<{fp0-oPp&Fbe`wH!W!d{Z1Vqzrn2 z`hX1KybNLS0|n8(X7v{0OPFlkUbV`5XO|iVm>(bpDekt`0**S4aJ<)Ur>)z%7y3?; zWZ#OgMP>XN4DlU@AuxtRaPQDr=>-G(5AmL%pjG#S&oKEVMk5n4!f`tU8r{{`>N+8* zg{f1hwv3_F+VXi^R$g9Cxp$fk=Rboh;KHr$(!WkuC)~ceFsFZ1ORap!_Whp~Kf`)G zL+`?h$n}4|;Ad$@!kDekSHDEUGyRyYu@VMyUT=rwso-JvD6!8>-2Z!XRA$nN`;Sf4 zKicZqQ^gcGk=g%w`1l8k{M*^=?+&_%|NnTK|1qul`wElaAjkgS??F09r1Nicq<>zK zDAg!S|6iX%+Ps5D^}qM&Z1VpfT?%OcMS^M$*1k#24BDle{VjC4#3Glg`AJ#Vx)iu= z(H%{DJ~Tlk-M_{nmz!@%h?JY6cNlc+iW%6W9v|JnIGT+{dMQbx+w#XE@hX294i@rk z@1uN1gNTCJ#x`#gBO|db-vcg{S@tBOQq(R&*CkGh{t|;r4kS?{F4+34mL}I!Zm_|? zLxjD%YYUsWlx_3NJ6x`|G=$27uWE9Af>%X6hL)nng6NuEC&YhC-ZJcQB`xOJi&3>r zLZer47sb{QInwss|1rELrVug-nw0GlaS8*d&VUAJVbP?s!AJ^Y&ew{+-VZl~g^3U#6gNBh zt%ecg5)P&OjRWNdg^(xtV7&>sNlaG!9_=;oZ)Bw-6ss~*h|w}{p4ldiVGu6u@EpO4 zoMTgvmC7JO+>g<4qo_?@MGe-|+(!GXC?1;H=oR$UP2JM>`2+{bSGUsGkjghGAqmD!<6?CWhaK@TDdCrAYRIxvlbg#Q;;0t9Z6o#W)&m1i8Yd(Q%jG zqP5>dDDE!YboWkOLAJhKxD>h_0;LF8*?)zz!MeEp5dHzQ_-zR=Vk3!@itT7DVm0uN|eHTTWoSxbXG;tOu%~V8TYM4RSuEK01b+xThUIoRq@ead(u~ zW?7HNuqh}7%4Yr@kzH_MY?su4Pf+9F20r~*)udFjqNI4CRkM+@C-7@ui`H;DdK!r=CenvZ9=3hTSu`s|fwhL^M*Ds4H}$|$1nL+r7;wY9>| zkAlf48A~-Z<+E4A#^`6YOUH?JsHV5$o6M2dAtDcsGU|f$%eApj^UiPC#cv`PH$84h zNU0v9Ox1S6S^~3U^jOckMtyQ!)zH-Zm>t6=r_oiM;+Ah8$mJppzxw3l684TGIxg6< zPur6RDh>%2>KPpo<&(QmlQB%Npap>Qbea^oZanMZH%w0S;WG21zR2Y<{_iz$<49rs zCq!Q(>Bh_pmXY-GsO4BCXV8NNcNj#aS+)G?uhwVl|5%6H3@Wam^lnY8xoBfXzPn9* z-*`N}8U;}Q+DZO%8OBFyDM8;Omv_+z-syHC&!Py2BZ-j8UpqzhPst*+${5@R zsQ>;l-p9b>N1WaI;74iRI7OYuk1zNkip$GeTuB)pJqveTMLqQEzC{m#i?kR69saHz zY{aLcq7LQRE4#7SpBwwAlN~ef3EK?A*QkCCgApiZ!k#U6I();caQR**Cq4zCB#5j| z_~ec&sWWR2u~mfUg~Q%b&@HnoEHX>=K2`Ana0ISXJJ~|M2ewX>_d}aIG*i z0u?q$5BhQ@>tK7IP%y&9{;@XALzS+p`QMLGI^1nONj`yS%FXfu%+aPzB^c|VGMeJ8J$1oD4gx#JYq6K3`&v!*>5 zCHj=+mJk&MafkN`cR&WWMN3%EV9`9oBy&76WsJYB&2>VItE9+vZP%s(tNPp2lPA5PK}f<$d0yAWHNs*fLi@n$YrfmP+9TxNeo-Xk=&|z zhD^?HPq>JFJ#oX_@6QG!Ypk1ZTm2gDs57+tXLLp)a~qc9k02t_PEm1f;*Y!@)D!9D z(-8dJq}(1L)e`TiB>mb#Opzo-C{o1i03CviZDFQS4Bzz!XK{g$6SDQ0$m zd7fl+w~PTRDyhUydabuYLTGAtCm#}!(xW#DF-I*&Nr*9Ahf2FugI;tkd8tdA#%Bq^6kJOlIf6T?ebk6dgY zn3Tg9$UFD}PaT=hLbPm}{F!`qkJ)96FmFhQRNxi#`Ill&MAd zDWeV)iNHWHC=L}>iv1x%g7m-;kYM1dJJEBW)K>b^cnR76c)

    lK+1Q=ye%TnP}fw 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 ZVQ~>j9u8GGANYTSnu?}!(G~O1{{cIvXq5l} literal 0 HcmV?d00001 diff --git a/docs/graphs/sup/dgemm_rrr_kbl_nt1.pdf b/docs/graphs/sup/dgemm_rrr_kbl_nt1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c0ba56d34460d2dee768678b6c635650291d1223 GIT binary patch literal 188174 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ΜWdjk-%f+iHX zHHd(guw)X^FmMl5?q@!dvqrWpk^>>z&LHF#{%0)YbFl?n7U|(uE&!mz}7l!?c)i9^xIEuwiW;J>2J>Gytxe z2a{p+gWOsCLgvRtNdxxu$ns$14`EB441y~Q!Q-5sWyvoAz639UJWoWb2Pj?w9*a++ z$3$?W&rvx+7-LvAHJ;4G7R^c-Lnta}xGxW$P}uEK=7`+LhrcNtJ!(6f=eXX(9k`5W1B z6WW?z`Ti!P3Yu({ZVfRU3^6_CU~XnoqT(iHmvzg9eQ12IoW`Z_zA!38z(V$P^k+jyHO?G7mPUh^AhW55La(^WrmvWJoc!Wu*M*^n2%J;hR39H64qG z?^Y!KlM`Tis^RB8jX2rBOWokJ56Qtoo)2De&uvYs6m+`8dv`!qqZ^+E*I_y%wFnfk zPvYxWN4F`dc(qNyVcxY&im4^ib>N6Sa5AqpBv`IPgjXq5UzhwW6VCV=*ue;A4*7+B zJ_xCLJX43Cx-onD{=iV;Gw+UoV^ti(U>I+eOb%IMF#90XcfNT2w*tr8Sq7_EBekyv zc=ip6*N!m3dw{uh$ER#*U=^ot_sC1YqoL@Oy_Ax&+ncDA6TaRQqul~^qb@2%AQxdo zI)iB2pi=--K-42{myy5wBUxM~XV|PlmwFIWe-4v|erlXt*)OP(Q5DHceamO>Zl&W8 z&;`;$wEf$Aeb&_KcVts0fFckeNe)wPoc5;i{Bc-= z;mrCyrvwG7HBKDf@u~-VW$5WUb8DurcFN6EZ2YIC$3P20j+mXEH+$n$%y1ke)?DTv zA!l>UG0^8(noq+$#9u4_LObgv(C^xfE!PIJ2;tP7O=&=#+kFP@+r82;{%3R4i!LcZ zCT>$P=UM1wS0i1nL>;ql5aoZ5Z(JuqUC};cfgzuz7u;fN*t&k=dx%%Yj#a$T(@(#EjiU-CWx5`7VvQSW)~~2IS3_C{^$jeTHO2EEyn(b!yhgScV$Q3te?hVH(NK54 zSCW|YkgIxhs-bFTwaD~K*r+J*)B16?Z!}kx{FmP}^4d_YGA0~KFmv-ZGJJrIc#Sl1 zN?M}JLAnVFk_mI;wSjCC<4nZQVkG>hR^3*{hsJlw%VV$lK=S^LXs~{JLL;NX)mOG$6oMgjnYx1!-9!Zhg+4PV)HbbdJ1@&cgujpVdyx^0 z!Ed-c)wJldZaLLPc?i|@^uIg+=2Eb}OQnC)?R90BzC$y7Qq#9x^cQ6YebfDsWVO=++x>Zzm<0xZ~wA$M$);xEQ= z&IbAyY@oEYdaewUh3_X-H}3c3912b`u4er09Am86o@ek5i>U#GyXk*-QumuZ*YJ>= z{QHZL8|M9>pDDAfOa#|LF7pm+0wX6f<=1V?A$#x6E_Z|8kk1UzC1+eI+_K&u-{0Ir zYVH@Zr#j7YqC&o}oY#eH#q4>%S&4DZun0McxkugaDcoF#VAX5SMW)sM*jo);6xOZR zSsdGw@{;C_7NxJdTOQwEvfkhJ-29)3JNW%SqkEUvH=St5>n%-q$gOrpP!BH8A*b`y z{A&C5{hywDsr&hYyN9fvBE_QuZcY1EL*Fhb_9ReWff4%qXRtmN_^k)0^Nzy5kQ=M} zs{0K(rkT6>EUUeQ9lFc0qs9=drjgRkd2DV-z^vA_)af^tp-o&Q%RFFw`fn5IiF?n5 z@M(a8+K-!@;Z3QTqq{1g*8LUF9}D^rY>gcK#mXwdJ&Gdeaty^cw?jK+n2UeCyb9J2 z0R>$3tm~A3zq8a_-L8g|?ufvU%ApE1e`H&#u)g_QNXIK7PfRv$_(}P@@^|U-2 zrwf!k9dePm>#}QhzecLw$I-EScE86-ba#Rj?JG-{D9w}|-G>TgBR2QEx6OX)Iz7DrD>-rD;iV3VA3ChB$=^AeftZVC)bDlx|VE;Sqp zU()yPde3Z_3!MPJ2r>t!9OTz&ICRO$>@6KA?A7J^FVZy6S%+A>_uC&^6nW)h1SsJP zmgb@jI3Q;qGc!C`-eAVCoU@vHeXtwY39Xzsm<8_r?r_|QY?8}Ux|}x72lDKu3Ts;K zgC!d!fw$jVju#q#5xL96`n2w~0Q!mFy!!j??4Qs@7O>g)UjE|QsBQAP@p~3-B7;$v zz?8vrOhudf60HqDy#mAWkU<8lZzzwl9Gy`+#3J6hntjS$eC*3!*Lt;IOZztGw@VOV ze&PpgvzUA$9^+oc9p8?Cua^SF=YBR$gY~Y?Y(2gTm|4DL7AtKqqS>- z`5-`Am=AXzU4{z;o|VWXxR6GU*L0 zItlB_$P&<$-<|9+NH!Fq!`d;j2u?R*j_ok$27fCr?b6;prf)M5m;vNpJ$=$zHoTy0 z+;Mj&Yj=EmbC~zi3L}>h*6Ht^Dt2AjbMP)af8@?hr`uUZdAY`ibvrZAo9^72!p~Ca z%^YKF7pwR1R)*Gj0`kIDUJbR8&5|=Z=g`9F-ocXLxs}|KQ5(PFpz(61%sJ=p!}u?K z`-MG@lH|Jv(nRi_(G4c<(jHE0Be(xqY%u7|O4x$m(f66a17}Fa%V8+P_TK}+U`s7v z{J~aJ9m}>~J3Nay80^38=c;sG>pS!SCKg&^MOtCy-?q8mcExXCmoubZ6u%fS+|6hq z5M9x=)h$$xd27r--}P_fXu+fpkotLIN!(Xvl>13OH&jwW@@?rImZY{YyK1w00fUt% zAq_lFbDD=FHQ!q?)jLm(d_4Gl;=~vxAMvzdF$cYf+d1UPVHJPQ=Q~EHJ20?$axg>k zaP-RPyz6~sQd0#DSNE%~ntl2E?KmGMHSqem)8XyDERNH0jrQMR(*Vi^eEm0Udy4w2acE{uW{%D6MrC(vEH?m_0Nw7Vn@3#v!6{w6d(dt|zzNz39Ry`&u70`*Ik5gmCjT1kR0e_u-K z3aaw1-=FFnEOg8X4!i=Vzcy!PN_KpFeAtAvyKt&5=%2G&o&BIrf4$(?Rd!l=rW}*U z22!ZnjSaj@%b0);2%Khj7V4ckYPoR^pK9TgAt(zMW1fQxY z*8?t`)ARo0+!d~lHWIOA=zQKW0s-9DXo6whsobHt}ky;)5TlsKFoW$J79jE z+Do-)@WwN5q_8&dZH=&Q%BZPv33bkl3CY(yl}A|u&M@k>^N3lyS1#{c z2`@CeNFYgf3_`$b;Xepk9l-IKORe zbA5x$HP}27+x&9tf-HE?SLl?PLwT`;;buGX{4r~Vkx&b$zuWN|AzMW6p`DoZ&3)*i z;j^?n$T`sDAF6w6u3UCPT-6vYFj`1ge6NQw{ago~e2J%yYCtiBA_twkwP6i$f#v{M@A%syWz2vcMCr^pYmG3-g`j zJLQ*DQ?P&%`Nmjg1Cwb{r>*P70tP_nvYF3tm)Yf_*P7~jw#h-9KLtK<$4?d)N$o!j zXZ$CF-6|aM`+w~mWNsNaPG}9# z?3!_qIy*8e7$I9yvE(u~%Hd>n&$6v-(%cf(=lkb|k>4{z37brHn{{zoW*_ZOl&)nx z_0a5Wez0QTN8d5m)?RFBMkOLLzPR%AC{N46W6}2Wz~m$NTyKIXzo_NK#8UVbV&=ca zTPCHN|5&trYbCKYu%hXjAfvk_$6o?^?5i-$aVy`hbH?}O7rjb3pY2sU`8SMY-ABLd zl~7NwO>ZLw{NA&(2%wGLp(JbUYCD8`w=VjlYsZ{2Jg2(eoiPSBP@v-;6S^4>=cq|y zy9)8lXHElUnOd~YkD^TyN76aF9KfrO-ki7E)%2v7-&|-FQfmvFl`Qysu7=Eu7_iLv z{{kWXsqz3nd!b(?U;7Mns%9^Vw}cy0xRd6g&gJ;diSzTVap_27pZ3pX3j*4Hrf^va zMUL%ILb+l)KhW-F`GJswwo_9F`@|q*cBLRXXI`cey$Pr_2>8SVgjBIPlM;xy;iWIR zc5+C@i2_h*1l(3&BY37Q2)Xc^M6gZw*sNDJEVHjt0?bXAzSP51Xgr#=ioOzvS^Mzv z2O1qunhxuqQu9HHGw zd*|~WZ+QN-0h}QopW904d;MHoW*JhH!;v+q;HEr}ZRQUU?eSLNB&jVv z54_nuhqr5=;A10W;Y7ISWY((U~HZSB5Ro>pWlMft6?*?pE3ds$j z(#Iod{)MKPORTU54Q_$id>>~`7a;RnWj^#JgC1vBOXg%aNE5)8pr!ea`2p5Af0iL= z98H^H!T`rUCCY};z?4!vuXsN|^zexE-1tUmf5t!YT0_I|$Y3y<(9bD#=U_LdwywPd zAjLCUoXc#0-U-4)%MV$m;}1nT%ftkI9T@WBpb?1A`2jt9X4UmXKI3)f67?Nx&iKF% zlMO_B%iU^kk2K|^fKe2Xfsd!-7JUF0`lpU1{ehM&bgj(yx{6tlMKmW00vr#*xT+?M zue~oI;E)0r*rZ};hLPk{|>gYNB#(A%PkXl1rI(OtfuuKrcH{X~9+gkXn znR9HYxG|lEKhQ9Kz>_LI%zrQ2B;@Uhiq32|?S~ifbw}H5aCp6E7)QhI{(}t%YVBau54q5u=p zhdOS-!LxNPhJ5(Cch4k#pvlX3qpt{`*g%A_IMFZ)IplfF#D**Xw|BmJMM0-O`g^E1 zNM?gKs^g?ZbulJHuqLoYl5xaNfq0co5fad4E`c3)&kH- zK3`gC0Ok(?Pg%3xI9igfy#8$77GF=VVz2-S=wf~eD5)pl#w_5y#CkGQ@nD*j*U$$d zBAaFrHB5LLuympV7_*d8s)D+Z7{QWpV)kRAu4q|6K$uz~O#Hc0>PZf9F-(Xk6j%K^ zV6Gv`qpQ1r5u71!szEroCo%w_+kZZY-T3d_s84Y+UzsnRMjNwN(}zO_6H8nBu+xsv z)D%AaBuIcKnE6xwS!^om+C~4`L%RL<>*>=zM5=*Ai0Fnfrh2+4FCm1$;O^$I5RMl@ zp9wiv!ZRE#nZZlz=@D%3fA~!1bDFu*je6_9-zaN+KRu2qjWh#o(BOhM{u@9}!WaHB zGpt^k!hK+W3`K>|n+-!tRzm<2#p_B~%q)RGS>f4_K_nZVDRzps9Kx?iQ4S-qd%zzO z3?KMQv*nA=&of4>xZz4kQVttbz_sh)7!YtFgF3ictW$`}j6Hf^= z0695txbB_Ebg(B7dB;5S`^uEb9&w)JPYb2^OqgZOJprS1(`ubLIHyso=Fm!+r(rXJ zm0k;fiW#6LuELm>)GwjIUZop$y!t3}t5vZZ_EYJB!(t(|XcYu)9vch9&)mw@>?X?q zOxl~pQwf(Tr-cty`qN9;gbo!V$F^iF!iOI8>%LU*r&&0zrOqF5adS=%`&vbP15SI{ zoR=(gU}o$VyY)q=YP(3+wWys4NA<>Tx`+ojn`=t@Gez*gY*XhE9`acDzA%V0oU?w( z?Mk9T;5)7_8`=>7L!z~xJFdp8QK0UFVFCwN z*}L9>Vu&=~8qw0~P}4TmUyCWPx`gP}`A?l!tLoH%@iqCvH~2tfr!0*8b~#j|vD#o| ztXf~Y@dn`dddPoQ+(ee#-TVVkpFc_^D&2c}O8)V+N%<1Fvs~`af5hqF`DaR|_>HbT z9W|@It1BG9S!^@*>_#!&z)CTFO6;NOXa-R|%$*(q5ol}g>E~WzlXwCt&^>s(XdS*~DtH_t%Ad%*I$ zkM_BT{O|)mwd!h_t2{R;jmqkUpXqgdoN~oybBI(=I*xaGG$Kim{ovPwHI)rP31vyI#5Zmj@C-(K2#scI8ori2^ei6q z)4>xc8~wt+(+}hf&_h3KfcPK&7{n@vrg`sJW{f8BW27D!0un8)?Q1Xc#S6?(9N5omC;*rYlj$jU00K8nP9Mv8)` z2)?-FGM$a7^ezP7DwQqe1DR|i!XrUhHZPFJ{Qo%c5fs*dE~St5WNF2NTl@HFC;G1p z^;l`XHP(8Xm%a;o19UWO$7t8$r5UVp8;xc-zsZs!E`?>ocrn4mh1LDzuX_}M$=JqO z#U8!XHrnTJ&NtYc#EVpafNDF5Q?OwP&^G_)T9!}8cCUY-6QENh(Y(N*elLt7^81sI z=$jNgB$*R3nIR&XW2d6|q-z})}FvUX$m^J%`BuViV`EQ3mPJh9mf>iC*iSF!DjVrOFVDKgPu0 z1#99W;Q&=VI+B>11)qRwmp{+=ApQyk2q*dns-s}?WQpunwuwh4d&$CiyrPi2uc66P z*Z--_K3|^o>LU!L$F8T2CNmu477Y2~$H9v5twF)$p$I=ULG0~~MZ`@aJ(eq|5%w^> zjAf5U(bz0b($8v&z}6`{F8cQd>MEaf(0ZSiR)9Ntb;1gN*1fus ziBkukS+#Fkt5xFEf|uMDQ}P}qNf4Q;apOU*-X7X5$X3sd6DPC6BPVHX+++0q4#=5! zW-UFtxty(9Y_0GiQk-4nx_M2UgnG6#wG$~yM+ns1gr-qAKB7dMudYi_H&ZJala$ED zuMprT8DO{+)3e2)iZqID@#2OI9lD%|En)nmx2pp9X!E}(SyTFwxS(8Y|g2$`TI@!l6)RY)(4R|6{Q$j9f&Q_|8c() z_S{n;2@kknAu*{;oYXL&5iA%R4))&jzyq-m1y{3w!C+@av~Q$?jtLQa7a3+NWG#3I ztp_hpXsAJcD$P8i)8VfXSXV^^R>Kjo{K_Wx9|IXs?a-S2*Rwjd|(jDyGFz6pI zse%Y>!cCf6BZ*7Es_ZQ#zIf03W4liIzjl_STVe;frg{}- z3)gQw7aS{)P4`?P-JY|@*4q4C(+sQ9Vf|J-2QjF9!0 zKU0`6Y9H5czT+jF0F)9u64Cvx4&jF4j6=!;hPlpZ!zODooLc9m6^PTz{m*!o4(qRxP$a1dfi|BTkkXyuw9hT zR0`66c=!u*4s_CouAgQlKP!vHm)6UTTa#X89~Y}5T9dvnFIu18KqgS_bNLLPd3_mp z*2p8PmzZ*z$;!PY=9X}1O5`y`6|)!lS3dks{VlW1QL}v74Tfaq3*eY zo&rfQEP+6w-;P6G?FsCk$Cc)f^=TrXC83-2WJ%bXhd)F3z^({rV3*E%U`v9E#qKtH zUTjSL6D;J^&fzAYoA$o=L7Pe}#FzO9XDM{;7*4xcXz>tcUs&uia&An|!H`dvn!&@a zxRs&0aeI@N6uIa$L7MiDuZoQzP|vQ_Q~6y+sxTnhz4atP{NIBAog zUp#!)4{z3*J@zA=duzsZ@zwoOeNq5;sT8pxG9F>nSlgT%5~SL{pSr|;Q8ay+9AR)= z^QlS)D*%I{7F9%Q?yOSYT+H0w0I! zU|afBDdmxSNwoj=`kdm`kQskdvwo=;fzmwF_WoM;I;1Y8M`9Rerv9Za(N+wW=a||0 zYIPezrJ#Wy(w2<7F;x4dAGKy<{NkhHjFI4{D;6qNcn`|ZAk)WX=+?$n^Mgzx&W~EP zMiS0tD$F&|--KF$&h=XRI%`W2eh;dl-u=sQe1FoGgpC9Wo$m0OKyB!J{7~!kCGzRg zJ`ake9XI4&MeD~C7ClQZZMXQrufl!D3rkRx%TgZlE`@F9J3oVakiXO})c&k%M3rF~ zS{3>lpe8?DuU%WoZfZA1=7Vgh5nZHOANpzm*=u2Lb@+Gsi?S<`$K9vdUKvVQUb>uyPuq+w8_ zr~pzA&NwK_QwDx`7^x3&NohkZoqOe@`SnZpFJ7R2@?!Z&soG_vxlBCboJw(W$Ze3j zx^7`+R6`oE4l<0s5Y?K^$p}%&0{=;QFR{XGBTG<(zS&&n1txC9S@c^{JbRd*pzu0Vl^|FLkA~XSM74QlOT|_TiRM2!6em z8`#`QX*u-op_bmo!#Z>!3E3YCttODf;O$**!k;u)=?k0)Xj&uXd-fSKLvsCiHL!EZ%H`161Z)~lkVLFVurt;n~y98ip#L$ z-pJ2FOCQ!(I^vk!kTJ})Z=`#LfMeCWLmf66O`xD&q3ZK{%+ zeSy>tNXAL?z>m54jOa0@k9BCt#o6uo4gW&ojDaQ(J; zTK2IFH1gI_Itr&)QXx7UtbtHq%2!F`9*_Q`pXna*FSLaD&pq@xI9_q>D9^Pml^7fk zeBMv3?w8z59{~%U*3~2?zPG*Nq)Th7E#j06f<7f})(m3&{DT*mYY!~L#xQZgOU)Uo z>kLE#p-)wwNxavzPQCGP$C(>O?SKb;FJg?5s)v6WC3U^Dgd3-v=|l@EWw^@LaR_UJ zIWCQ?JnCh*cBIUCKFL*nNL@-WAikOjoiXNeBA-5$D`9d`Ng*K5x{XJ5X)6F2eIc2ijF zUfz2C0FIvJ9$Uqp{SF(JZ}FFK@r8`GJv_7OzkTp% za@M)Ro3!g9zRGX8 zn*VD3`fYnuKE9IkC4Tk!D_w4g^NIhvS&Qt2tSBGn5dSZRx4$7Ws0S<4xJsj=3odk{ zT55vL-skM$#&zWuV|X!T+etd@3w!6>-xU&PBoD47LlmJW^RAJ>=4XbHW)0rFsIa*X zr=6J$@qG1$ARo=>Ru{u^SqcI%)`8_#V0R_q8l-FVk7KO$X7G14XzNQ>w;!0cg}e*@ z^6kN9eZW}JfeZXodES}XYF?>{9NP;2cPn@=@o4M!yz43PRsrvJP|F3lW4!96+O?O= zhx-pQBQBWml!g4oV%Qrn_@M4W;;F{5#rOx-LmFjbY4riMGgc$v{1^I9F8 zF@LISsQFHeuRpgbiH92f!@e7=OM5C7A&Ie2%IY*~j*P6*vusMrNwk}W4Elw77?uYE@w6@I3 zS48$(9n=}46wF_fvQD19v}{#x^+Ap!eBHI>Q2!asS(PT#eW0^X=#8~RzVc-lwCg%L zw>~Rtuf&37!6+>zVU&E;d0NZjN-E13!+$g}-6#O@kZ_a5^qC%y>hUFjq;9eHgFvIY zpINFDOHn;hGVh@wI$lowk7S%v{=t8v;Fadvg8i;Z_;h}&ZGimpq_w$PTg9aIVmyl= zX$qM2XXs?r*09Z|T)S_JoW;#H-#d;vXSY?;;%({ETfwvx{FU3-yKG4gt21{ePqW<; z#K@obj-OlEdlmp>E>-U75WY$m+-M~`0TI-7&3rr|CYXM9=1y=sRFc;Vi13;6iJ1?|?ipA%?77-4q3Neze44x_3+|Zk3HrwGcBmm3bFOE5I-@ru-bx$W>bJR8 zC5NDmPBY1~iuuZSJLQ&$eJry0!{wj(x6r_&)!e1?Wx`cA{nFb@L6?CIy;bVv$W?u- zXPPUh!pI)?o}0PYtCD#$qmTRYB_ZLnU*dPpXszr(LH~l=iy^mUH7&g*g=uwJthPJd zZ>82bDXI-7A3xZERYw0X%Q^TT0D?e$zwLdEIya20Z|(TjnI^)>`d->>Fsq?3u$Bg- zR~1@618d1l)>(OyadlOcsi=5gKjUic6WSw1SS_`R$83nJ+vl_0Q}E2VT9Mzb{p%mX z>OOtX363Gr(e4t+`SvlSieVn6n0J#~9sNAWer z(`^vbpf&m#!f6f6?XkbMybPx`z*Qw=T%XZ&mzA_zcn58S(`k8wa5^u=o^Tqm!ACG{ zv-n3ay+n1feHU(rsr(d6w@5A$ zCKyY%)3;e`))h&?v}y%MJ-!r7=SbUwX)VrTnVn*3sW|sGe%$NNv2@SVT7HP7m!753 z2AS9qX% z%aL?DW0f;j9nrE!(hA__-6M|XLwm#M+TQT~2<^XA#v}#QUCGl0vL6w(v}SvcO+O>* z_L|%Gas@gDtQNAHQvU?272Cv@^8u^Rk7&B9Z`bMaOG;hZ0M~+%YtTIrw=8`)T?!oAHrz~`&9L-yb%K8X_bI)J>iWk zNU2rHW4dTEnwA-0uPQyFTTp8CxH=cE2~*3p;~d3C8Bc5Uuj@>eO`KX@fe|Voo|YW6 zJ=xbR67jU^_}ntlTR-FJO?x~0a1a^cw2nAVmC(IE!|A@nTBOPS2&Z$CN7E{k)oyci zTQcgZ4T$Y6nVAsvscePePn!s}QiHDTxV9f+=~cnYF!W(0t@}~Z*1rB6N$aJIMH?b% zWu9JTxPUT}J~boG)q29y=db%gjq4AgG=LdH={AbD?l`ksQ!JerJc4OLN(R%XN=Mx1 z+W`?wA4>h26~-7#YY#2#85m2S@|>LDD8W-yYTHBE=RC!)(3Z>gqZv*|CwwxmA zqD5zUE7PY)S~&^p%wJ$6t@Mel*0Fj{k@TkZ-1eqSFp^$+V%u8lXCS@oTIMUu=Kdj& zmL#h!a?AUw5J|VIY5&pC%BE17VJ{=yKsnwyDY22G4YGwG9_UhleU`Q=mp&6$B7*apWm*t0$TDO1Aa+oQi?q`^J+bN`G z-$z7!Xc!n9oF5^zZ^k}Bwf3)f70UZ(g6e<7*EvPh>H^DCmpVt(Ngp zBC#JKwX)+*)s3I=b`pTJF=pGJ$Ig(two`7?YB&YfI{kFjWniuR$}QZx8Cdrm-0OVl z8N%w?K95s*mFH(zt=@Uw!?lJ{wZ5@UVf;&y5LTbc?AS-1I-}}CWt0V0x6h#ZxK!U~ zdW0~n?n|HWr)FGzDCR!SI-+9_t9O-+kGd5Mt6dzHDYY_Q!v{4{YE^~YmhH!|T4_ed zOo2vN-Ja8CWl2(8-G)3<4ZU%-d?;*rhOoMqsE_Ok#MPTt+M`rr3agc+xX*z&L25-z zGkY>IY9&zJ)9RFgwN@IYZ6Kpo*~(>jt|mmSX|}zq*C9Ox)~5(r9UPvBnmh?~RNK`*#Yk{lw1&+hWsnc)1!SyZojJBd! ze&)9s;dRmEJ5x*ZrFuU)`OgSjp>3PX z#(gM(Fr-KX*X=KJKZ3eyM!VEitI|w+iEmxP#I1d=I7Qd8QQEEn zu~K-QqFuz-z3_dQP9#~iZ^xzZ8XCh-RrUIKR(^)p{7q`A?_bY`#gCfmTk4?WP5Dle zYKAo*n(BI}e$Nl!T7gvijrLXkC<1ZzPH?@-@GI6`Z*Z+}d|lpkJwoe6Oe``t5L#=L zkIfX@MV9)ZiLoqJGO18#8POj&~lmG7NPZax3OK8HSZp}N7iaPg#+GrhmrLn zCD`B{h^%#7o8YFJ29b4}9;A+~BNp(`x}Q*<7|(e0L9KTa2_m%Ck4iZ*q7RR(`=c?F z$AqnQX~!|d-K5s7r-rR$3aquD8pUf6R_lE2Mgg`iq(E$+Ftb&zEQ)e>V&4^G6?y15b#hX|?j^I}N7Dwvrj;3=k7 zUcxL*gP2-R`ZAkQ1l79zeV>&s5mf6IYa0QECl7*ZU8+FcYq61nYN@Q>6_^Lqy_3Bu zWgh{xE~S{q9U^L-?lN0BMAW)N^~HC{ML?}zZJ)^;IT2C!yD#fHU_Dv2VpPRh`)5Gy z<0s;2J+n4MOpWIgP;WAXeXOAV8NZMA?|-x#Z!z)FzTnc`7WAjH51wj${`A|uK7P88 z-<+*G?(Sdhj(_(lFXgMfH#+~af6?orgUa^;#-G1>{<3P|eJ^1A<(pUVKKAF$kH2W& z?rVM<&vSn+;QjM=&;LC3_X6I({B#9>!6Bnfw{1de%aXON1T@NNUObd_`Je2?v8`Hn zE?SDqT;Q*s>BEZSFPy1cf}Tn%yXs#*Q~8?dM~sy*K>y}0GX~{vj+J(oj~~sV2>WYO zgW`Bqp>5IF{c#cA_MM69lyRGsjLVv@25n#M3QLUJUwJS6+|(DHnPZTTkO%${!l zhnDO6(u*#vz3r6UcGuLFUgG0^brWh)x%T$d+S`;^=UB&gw29>l4IXXvDQ0wBqlR-^ z9{)OCQ1?e$kI6Io*t+zs{okk$BWBkY@7s2s&o$m1+%J1uzKdAiSB-nSdv%ywnw3*7 zkXNs--mj!Bn8oz9{QN@*H`LwRx%T2P?WMFUkSw!e|@4HK`cN z5Or^-1eNdXvUe+iF{Y~NRu^esPd{p@=Q1z;>U#>e_EEJ@us%k{+j&Ph80`_Xv(96R z&{{iH-P?QF+XDT3>J9a_wO4~VwUe;dqrR`Jbddk_(zXcx^~kHA&LP*-;fSqMm3nvK zRBzk+?!+QxrcQOQb8v1QUHAWVQ(d~GFHh3lCP&fZQGTnXF73PT)mhb|N-$SB+l!QI zZFDyoD-X7IN|gK(@lAfdFOlod_E;Zy*W0ex=g_Iz_t^g0?NK+G-PX5M$0_@nYoFhd zEXZ5O5Oe)QTSD_cY;CoJqqmQy^U2&>9J6;)rHi%~R*#PBHo1bUcKyAq{aUOZ%O)T7 z;h>>irqUk&_?Bd$KYXyyp6Msb-(LK37xk19xiPNzQd_5uJ((0-pjSc)=uBzYtL7k-@R?`RbQTt zsx7|uWzIGwQM}{n*|#u;x_7&@i}(zuy4`vx(dOy;SLr)KPfyid*(i3EDEiVL)BDw4 z?T_~uOxu~3{hU3gJ4cPtRK=3+_yjK{$Gtb2d*iKqvvc&++TD1^$Z{`zgX!t1o7R=@ zE4lk*_IA^b!=mfoDg$=E-LwsSnrz27aqp_G_jc2EG9N?kBle}vj;-sty5-7#mit5#u$-b+>6O7f0(RKK+?ItEnLt6Co| z^xLMLuD6%Um;c(|A^N_f$jh_S`)ppdw$AzM7*q8I;@cJ171itySP7=jRXjv-jH!xO zTHiaKp{EPlht>7jt=X?pS-y*N?=hyT5?A|<-mC9|+Ix(t+u=h`S023SG}<@6_P(R{ z{AB3`Uf#ai?M23@)OEXq{i;nQe0{!*E_GSQ$g1CbM%*ra8c4YBv_JoPN9m*fw$^38 zp0A~+3h#3~)xOLSbV?SYiY{*_-F+(SRzCX}PL2ac75!xU zW=CWq4bd#;(od%iqdpq-4ZL#>rm96}H*iKV7ag|6z|;3q>l{qC87lPD_WF*bvP+MU zOPjM>9V6*}St3f`)4k?EdU&kxh!p2oD$UcFAGoz7THQh5V)nU)OR}x_v!)SW+EigFi97eTCzR%BJ8HO_?)jMi; zH(rb6C^IJAl(Mxg?^mRt?V6*gG|KfFeOC&X8J4Q9#5JcK)qyJ`E>-GZ%pQ_YA2TlH z>?iZUZN{a#l5NbHU8FKY)AXerQkKtQboOZjoN71D9q2zuJwaMalJ&E52n zcwmm8t@GJ)x?(@L&kt`rtF*NF6{taleBL{5%cJA6VN|K)qvLcdr$sL+a8PGF zdd484rqVae-yT|2Bq)s`xZ_^L6Q4M4T$Aw#;aBS3uML_g;GoltwVhWv~)^%4wtM)B~vP z?h=4^b$>?SAeu5m(d|a$&=y9^3`Mo1T_fSCv{x>v2DITc;n-WjWV4NCV6D6i5>uDr|p>Vw8rLxZ4| zzgBN=K(C~#eYF+749`Z_XltV>Pw0KLJ;E*8?irD4)NjvmJQF#1&4^UT#bAH0z1+&v zNhK)RW+%P3E@^l=>7m7b3@f+fF>`&dDQEILwavIzcNc3+RdAcNR>Y^Q19#oa7)X1? zw1@?yznKB4ynL_O8?~UD@u);L=Qgij6>B3RJ!EA2wn*wf1JWBqQrB*b!Bq3~u8F62 zNAmeY%GT#IJGvfeuI**DGS`@$^XuuweDYhJ>k@?x;`FfBxGq=@*MQhLxJE zm%<$2)JSaCtr^5}6f5DHYWz;f94xjduASpJP;5r)j$$Rtvrrj0R_eNC9}6GQ*wPnI zbA3H%Z0Xp>0It#4(i7-r>hw7?fX3>4?Z)QS8;&i#T=?vFj$@@L zG&bWnw)7}9o1><$8Q>q)p3p{4afG= zO}qdatD|Ni$3$awm~(e0vZb%x=6nt!+jY3Hf#E?Lbz?Elwtl$?99X z?zw^olhxO2%TF-be!hn_JC5yNb;L}-v869DmNB0L$M(S|&?I=Qj`Q6O19{X{e0onf9w8&xv>JDVnlN>;{f1p9w0c5)x+m?L}WK(YiknQ6^?9&3s_R&4| zW*o?>X$$5JAe;IRfNUQSV$tP1whw3)T04{N18WTMAhY>6C$s&y2n2v;`-E}_0dh2( z&*yA5^&zm?u9r6$T)zFc{+0tR)T%kLgExk}{tWyoo_W5RyRfXf( zKAyz##_??KMviCuMFu8xJj+?-RgLOdoDp+7p6#cJAPjgm-<0#&{wxdw8=mFd>v%Rl zcqg>|A|sLlq5U|{2<^ws8KLddxwB_Ow7G*gqAgE_+yrOyRXCmPUHHX0j%Rh2!$Gj& z+5WlgLkCxvYpO;T!!JRi4$pw%_*lj$0r z)dj9b^_|Z4i7B=-foFAGdjMnW$pLL1-ki`X_Nvor7=RX+=yX=6Qt^>-$Bt+FAhpcB z45zcbzg_3VGfrpwD_f>E2Y5Dx#lW+AB3gJDy1gS(MHK6lHoX{!v}!VS3m|P@Ze4Rs zbVl3bb3+O>+uLlb z%L%PMh)JD|&g$wfdqM_h)92-Iwsht=`>wNDuIRvKb$z#yV286hneWgzoJ~to&{>_% z_c9&N_D{tIdS|pf7>;T^V6?gx1504ErMrip^VJxn?LQg%F+f@!cH9AxjnS$f*ks_8 zwmj~i!A_0Ria*qfHZd}tXbWu?C~e0XTWn`JrY*hF`4rv&)0VC+i`^5)wEZ%UbKbOZ z+R{_dpDyQ&wv&?>!JN_R5LZYzqt!>@dqvJ@`%hXZ;EcAY{zE_-*J4Bf zlvYpVFg9wCwm%Ttopea6pY$o!DXsXGYXcn9w$(MZ&>Yitwq=8~b6T-2UpyG7Rnt}G z2E2n>Juv@F9n|VDTLx3st$5^~8`5C4dSJ`kmgxd<{n8A8zvGQeWUJ|=ybHV!qXZP+;FeFD4bQ^^5#v!Y&kuX*=`FFt3%uM0OA9+Ri=5@T&dPAlKA#e}L3YV|ePrw&jn zZ-M2S(m{|~6=Iky*)gpgGD7w3l(v^;n-d=??Yg@@fRuLKT?<1@+p9&z=KxGAi-TDF z4@|pCbu;$dNomy-N+eQR;g|6t1JSBxT1?qQw5z&u$TA(#>cXS*0@2Dg+jg9QXw$O* zqE#8M&;=0Ds_5lpWkj^Pvk1V5XnT>(NC^OL}C90MY77 z-f@$BRu3wK-vqRB5izwA0PU)PX6z4<&+0nXphMuZ`bi_&;InG8J$vxkwOcBU2oiWU z-8S&-D$UF!n4q&_rxvb)&Z-P<>;{s~=Bso(o37I6tZMaIm7={`8Ec(-NmfYa8IPXR9d_6_Pe{925;7sJ_615bfzb-C##m2AYd9EuR$w(Y|Hx-opZ9=gwP6t3C!n+2 zjTHm&>_QbP@a$r#dx_3Mw?{gg;4|s$j%``eS^1@!oY(2>>I)ds*~4cR!dc(#N^BO} z7KzQS9^gH2cK6NeFBI8GYFb_Td$k{E_6H;@tRDH&M6$PSmx9QuV6VxcKxCC=9sATI zvfL>lk=<4G`=uSgv2sVWWM1G{ef94lj$*ZwvrP#DSuDRZ!dSJ7buok(EpREcU39ezpyiCYqyuwtMbfA(9RG>gj%4=&SPv$velwT8WU~5-OwkM`tJ8&l1CXo^yU(yca3q_5 z(vhrw(uBsKvOQ;LndI20tXf=h>r^%!gz^A+4SkYP!{t9p{#}h7vegU z?Plsmf1S(f+HE%iTsF5Em({gzvA+c{o9-E4R>O{EM*z&`(>a*c3pLLQklFNVKxR`% z0GZ9lIhkd51(@Bt%j^8`L1ww3O){%bae^e0S$?Gev*{=YvuU_>Fq@kk%a$oQn+rrX$t?h7brnmfSOI18 zaSmk_EsQI4BAc!QL>7IGKsL!w0Av+M93h?nk)1IHVJs6|NMreBlEzY31sL1TWc%ZU zv1$w1gu~cdNIb#Y7R_yA+m!VEAr zt$6@rlNtv!mJh>WYU#`eU>mqr1_>QT%TE}~c*;~X}F3u?IZ>hV^F*2%A=wfUx|; z27^tf0fg0~woMB_SgC}j7l0F3NmguU2n1GgB|{rdV7WjfflX^(5ZHYOlmvlQdaIeL z0Kw+pbOxK&-{7$7M`36I4x4TPI5r*TG&bqGKx5NY0>`Q?@)L<;btz_f0vwy~&UtJS z-#L%Xm*PA&UkVhnd@2C4pKU>8bt%Jt<;AgDM8`%qajYJ2=+1#-b(r}DQ8UZCB9GlY z&ka0QJu4i?$YXU_q-g`k<|}a?OAG@XtMTcMIT}1xio6jI0LE$rialho*!Fu4yTM{p z4*-kR=WE;9V6j>OnAL!zSm_=^a1RulzEH4OjWFl+C!*QiGmf0aCXppIvtFY!X=ZWx z)Xbg`pHnk?bf?D5W79ZCB%9ixnWglSn%Oc{QAse%=adDrmJLN7%LkQJv-n96+4I+A zuEt_dEy1Q{ojmsNTqok#(-L_<)v}gwL$xgLi#!(nKC5MI+lV-}csc-S?1h~R(pU|U zc9BUd8`heHvDc6ye&}RzCZO0B+eVm{SZpuaJ-+9}Vxb`Y&k@T0<7L@C9A?ME{)Dlx z^2=1#ljligxzbJ!vzAzrEM|A#uppLAO3mysdmo{X$|kc%?2yr9mi|vPnN7b*li3S~ znsAvF1hWipy38s|z?7)&GArn2sz|uZo-3&+Y-aBe;K6406c+s1W>zK=F{{95_Nbn- zOq*FL*yoa#HnYd(aUZQ_rKpbKAz97335h$+I`D_nY#*?U^t#h*8z|l_D7wt*7-z8V zGJCHeAZ|0O!^~>~KC`OEWh@Uyv-b*@PI}G4ABbMFa^NwG3wX`afhl>-hUFBEX5|u9 zK79?k!Lrue6~+KCncZk&O_N!HrD-eykJ%jp zOnS^p*8683vxj)v0Nr$%Ra6@T6KrPtj(~|-U!U2-Y;rzqW-a3Xu$eX3PM6t&4SO zN-neh6qCs;%mV2#3rDzYGYgm8WH#%XiflG(j^)X1_7p*xRsk@Z#r4x{mQBfPc38i{ zX14flSMr&~_nv%aPuq%2HnZ@Bbfa0JB~yyPXjWUYv4E!0Y=QU|KC`DMm(phzKlu90 zN~%7UKD3#|SCVXI52R$$XSPz13!hooNyBJ%Uyw^puUUFR(rfls+&mp`VKoc)ZCcIJ zeUMhOumMX}v#>EwR{ z71+(Hki?(a&1#RyhB0@X-B;I#!f`fTyBp4?rsOy4oq&e3?LQn6FB;BXE+&KFtg?FD ze$@?UwY_J|gNC!J|1qQu-bv)?0&t*;;@?4M`k|1^qRd1OWkXBub$MIENA(3 zy5(%@1F)RcW>;v?;5e(p%&ZZPv)UFi!~)0JUbH(<<>NWKpDvw*=Pc`S&~sKR^_Zt% zIor#D8-I1nSuOwC6}(k4U^#m(KIy=5_Bdy0n}lYyLS0O=>wdGx?%0rav%L)Sk7QPB zb~m4Z->fW*EiD~}vsz%97cm@XkBVUmj8&PnbZ7;)JkA~}Pdk>K^ zOViobi+tjT>ulZN?g7_X)or!(47kpg3&We+&T6F_=?`$7RsCq|JFuPA`oXp(U^{!A z;E}MM?XPx5L2#Yb6`S4wuCsNAZ9Qyfufvn~={s95WQf6cR!`y2d}sBS;V=x>S=P^> z?d)}Vu?D!#UI*M$y;kfwg44FOk;OYSo>hJHFfyX|?4>Hm zQv=_9@`*OM8er~=OUc^`5OaB!3 zUT`&kv)r%pN`95?(t73medT`BX?|O|U!LdhmHYjV3hHjRJjQlyB)4zn?-bPi_kX*- zQc(BMW_rjS)-WT@L(Cb4*bZ%`htRhz>mvQ((0V&uaj#j2sjYcJ=^%TdiF(v>O_1EC zH|wPBVpSgFT~JOnq$ zA`U4*CPo&WiJj`B>?U$Jci(_$|K83pz(-d@l=+iZn^rY{mcYSkvr4+Bn}xMsaE*if z=%@1FD01f;=%c+EL-|Kr;D^p(H=M4v+v@4wuCrEC2pv>2H#U$DZK+2+UBQKkiVkh7 zJ4ud88i#h(H`|sQU8L@h$U(}pD7dD7MmgP}cSk+En(pTMlB1qpO?Neza@69*baz4O z`RHr4YPyT*u+$PN2bDgaD#&)RCUVdxFkyRpBBpWBj!np8j%#s^gKtkA*Xj}n-;P$( z?PbdXeI3{48V6LHJ+9q#4o>}#>u{Mvb%FSy-Sm(-+-~!7XgfV*4!2ousL50g*xEd_ zpB^Mx`42O9@z8!cO6kU?`JoN_=5V^FlG;q>P|c3C4f`ynYft&!T;+h` zyknKd`cub!n9M;tE&)f?W-^D{>na_6$QvwK7#6Le}veX-3s(^0F<)DFH)cxpp^(&SRz z{pQq$`lQKi3|gjc<9dPGrgVw>y{hdo?N!>aP^-f9eLh4XGL*bNx zp=lig`<>l4a7rC=lPMig((#mmUML-~f!|(=D;<1G{p?10&yKK3`c9d#xzZu5i`9gB zy0Kk-$^oqnBK2B63b&rC+(g>TUFyeO)!3Knd+jm9pW0DZ|7a6QzvCm&`q>?ArqCfG z5H+Bb?mY*dQyc0bb6DM!qnG3inFCZBy{M?7kmY#3izRf$y(DM*OWoH;A{GT)`;E4H zYftfcVdm`DpQ?JteLf-?bN1__eFz<(9_v-JL+yZ~rM+CASJm|nvQ<|*tiElkFIKxy zn$G@6f-ZcOeOD(?b05drWYYq?CtRBQ0Gd+U^INv{t{+#T={5upyz@5To8n<}3jNZj z{Evrg9@s;)ryiPz)ePO$)IOupRaY;Iqm91WI?2;j`7m~ybGl$IQ)=->YC4};`{Q> z{gGIBo(Ie7`nPbNCUnqtT*Tx(irmL=stuqRwp-J6jL~!!3zv3zI>M(4&)Ue9k=ENi zy|ik3ZeCUQbejo%)~0fhyW3c!sL4bQP?nx$b)Ca*w)lNNw$8ECBUCNNwrdWhn0AUX z#^+GFyQOL0Grs3gs;XoW4rot3BGk8j`lK-zSK4@s_Gu0ap+sTp>c3& z&!Fcl-+R`>L=KE#>gjcLi`f7v2cUfwZ|CeQ=nf0%8h6eq4ik zP4dMRxFb_i4cDu`tu|A(byCP2^tH@94Ur+Mt?Mgu?N@IzDplu+Rhjn3ml>5p|EH#z zJkpg=Gx_V(HhM&*(CVGqMvvOMhs8wNR1b~AvAPbbXcv73ro2eCg~*`|<1r7EMJ0^J zSSlIMOwd+R&^g0W|w0jvLve<$di!8Q9 z0G84V9IGs+*{gtKixRPBwlZjJIT3t-#umkEp=|_^?PVnF1{}zio+=mY$$_j&=h_4b zBHI%Sr^h9LY|ngrI~HhccR`B@2spNTOid{}Xl$=gvK$0DPG;I^ zXR*DWZY;*YVpHWouvnQU2!=YPfU(ILdH`A4n1aW4^VrbW0m#bm+6o#2$aW*- zv7g{Lw!1~glFM;yFSap{F&Nu_EJj+;SlSMQ#-{QDps~7kWA#pByY;$tM8~ljhdle$ zd2Ihls}kcpwmZwupbR`Vx#ok%c026%fjEoRF(zaMjMZ=$>o~C3e%SkKmltSgpGG8@ zI)?3I>x|SuVSAZ_xtIln)el$FTi<%q&V!Sl#Sy zc-$#$Dg*%xn>MeE!uIE6TTM=3Q^guk*nW|=1K|`lm2Uur?LEU{G^en=+J?~yr?CAy zGKS(5R*&D8@{VEq=nx6Rz_6*34>&A4H!y4}paBe<5363I;l%RGF>L>;uQ{ALhVAt( ze#Wrr{eZ)=Y7j7NswM&q+p8JONoio%-oHbp3Jlv{XrM*Mu(}4z1q6rHyN*!EF>LyB z!C`xKiO8A+hh;G&VAx(4BsMQVVp%f;Bv#kBO({M=EbG63!}hUi<~jhw>IWlJ0~j_9 zA;7R!T?q)bKf{ns1HtACtX`af7g)VE1L{x#!0Iq#fX-j_S}Y^m`D>p~0}wfX&6n@| zm363qUsFw~SAePiJ`$>dU(-+p{K^_nz^~~E8huqu3-O2jJLqe#uM}w?ps#771%2&B zVP;|l;A=0uH3K`q*Zc^bzIyEHrSxCx)P(-4rB9t`|8P2>jp43#W)UQ zbCbc?{+y;rz+r43`iwg|j7=q~Kx04d*Jx}nXA_bp;8>l{MFNgv`%3PeY8}P)D&(=t z%MIs%E!ugg(vuT!$00XYrD_E<5%o|D+VBAb#MfY^^4GZ5R$O+~&RNGz*|fyAcT zEg-RJ8SNyt*VM5+IVZ8bq*RRS4q{o?2pqQ8)R`KXL1KMH4h-9i;@n0}jl=c}2xSjI ztbTB}@zOx7uD~3U0AkfX`2dZtr22w1d&bU&AZsTTO7=Y@H@40iDu6_%}Fzvl|fYG$|jZU z30Rj^vbHrvp)9J55zVqjC)w+~+ zI{}%skD-&ji)ZdrCwuQcno}sNpA2;wg|bSgjQu|fWqTIp+pN6WpzH6jJj0zUVgm< z(^azf0d1pe|Bo_RzEP-T?;T(sD%p0G zE;)CVtfu{tJy9hqvKkX6RkHdz*Ew}lCM)ZwU~kmPioH&Af+3Sl|L7`N#TgNHQYD+O z!Bw)i?3U_}Dp`HZo3Uk6$==1iKdF+HX;qAh5Xp8QtdWmSjjZ~WQ8{R2+nH@{rbbph z-`2s<$m*HcauFI?<(!+o33OKBi>=2%XBWNe(6K=!+g@O?^*U6t`Z!{h50R`=-Ums8 zLY7^X64`e&g*KMmm*Uu4er*x^LLDnFv50*kj@4jq(oTqD)pbJPG{mv@2}uLQvFxN& z$KHp9f>g)KTFuqFrjBiw9-Dzw$13gr94c3r#_H!ndQWNWXIrRaZ~2zYafqV-@Cydl>bx`~azs)zTrByO77WCaY9Vd8`a5!f}Z5SlwQ%7NCyJ zcjxL@`c{z6E(wM2EZYdy)USvAe6mNmw!+w%kY&#Sq)6n--be2|GJ@)eHPAvT3sfqK|gl4sgurko82nNztG5!dGPSb$){b$I%VpEJ1G#LzFIUW_!5EBIY$9e#2xiky zx?on;2SMn7Xw`>fB8Og9*AZI@kjttE8)1C)vi@B{EUQ56Fy*ZSS_M__(}PqtJq6dw z%ALY?C5UHtE5=JYt69g$J?QLGjBOFl%Kp^GM8a8Y3WConI-IzMO4&5rfX^hWZhrbmO?SftmM7vb0 zOGQGfeicS@3DGVPwmP8|fegnfB3jB^h-sHVC)re?TCB$QOLDg(`y+wMPu;A%ARNHDa8|iWL0G7pm80Oyv!`yhxWF*UW-Te6s@ZB=r%5#HmDrPJ zw)jj+&1`y(Q!|STr)E}6Di}62v$8XF5bT;+-InEzLpH00ZzS})YF4@H75)ZROSfI* zVOn4p&a$c$m9yzMC};UHp`2ABMT~Y-&PwWR3G-0S$|gF(dMam?pcCK@%GvyruAJ2! z*bWKQvpUW+%}~!utZh~dmDO~kDkv4Sx&d=FaRse*e>?@>CA4zVHKj2$wEE~B!@7o6 z#|3|egjS?u3&HNApiSQ<6tvrA(%vO%4c;Q4oqD>D-#S``$Im<;=Ba3sH>gSv$spbsh-tnVOk%^ zXS>h3v0|6c=HpyH+iRvQKe-ru{G`cemD^>@5a?$${#-K#O5~ z3TXA^MkzB2XgRx5LCZ0V3R;bkFLO2ZEJseNXY*CKdX`xml+Wg?aQQ6eCdy~|sZl>` zouBI2?oTo~3DmP{vSkqDv+437pVcKAe1wEHU!zNCIa*OetK))dKtqd9o)TKzwIf=6 zo(5MO(T?)<)Xs9KqIQ;}GsUxNi;^g>csBo|i)VQ^(9WjM0ODD-S@y51XVvr~2q>=GxhwM{NRB*UtLr0Of4@*nwr)9ig3NSWfM1 ziZLLd2OxZjDL18+sgz68wZ$0_Aj}t>?bS*Zh%=ix<#rNz-$^Y zL1yI=VW1jlRu|#QT0^tSVYmD}pjp<5CY#+C0%vElEM8AID{F)>nIxR$ZxYVxHHTJ@ zbXIhs*l#+X&DY|1R@V~RYvNh?MTDxDd{)Cw2~g~ORxTLJoJYuK)x&@CGEl=7Ic9{j z99{@#Q=7wCy;k#!0G##f0G(CEr66^rvof$TzlHbFnn&GtYU+NN%+4y+A11S?hWX($ zi#8zI)k-1((qgMPIn7dE_Scs!R&nyaDC8OC56|P-DyLEGpA^)I)R=yW8 z+EYO*bBkDbeR$2f#V-`JFpWxHvjr3rUbAiwmAq!*tn=YD3)9$SHXB(gf8A?V!0vO{f5>TDq5K{M-WF9t?GwQ z-=m?T?bQRPI2bD0WAQyVs%ZDq9r2RaY@sKC%V_1ZY&#w`N*px`#EQg0CoQAms0 zfyr(5MpOnNt@aTkGagb}*k)5nyPHK2F>SZ*a@^{IS|J@<$3jpmr={a(OsjY2`K?gY zCabU^sohIvu_37y-wMlCC~9?uCXs=pRyIGOWN=08aYA4TNo`qaD(k9Re!f)Iim2Jb z6RKKX2}HH};!LgwQEltywz7bxR<#P(Khf0En~Iv+y<(jUO)cvgQdG+ioTA!v=MdHE zd@p8#qE_d6X{?KB_se(IX*Jto8<-ZD)$Gx0_yxpuG3{P~QC&-$h69Lc_X1-7h-uUJ z05Pq8%yKdzrrisyk0GYjEt?S1#k8ESDW=WW?rK^MtF|hJnpVGQ!~$yCy~1P>YFY)< zrmBXTRs%1jY7mU#(iGITwm0FyJ!jKZKufD4yhf^_r9C!?=%Jqy) zw5nhnFADVp!ME%8JiSb|Iow zfa=FRBH9!`Ku4>Ry|L<~>#S~ z3%1Q*Jloo?G4a85mSvUbI;$cwt~PZoZBe$L*($i}Y+2!B4cpne!TAQZv*!*yCv0am zz`U35j;xm zIV(D2b2uz#wdxJyp1_Y3=57N_X9Wl>HN{P5OM!|Rrn9Px z90gA3I$L*mufTP-7I(m=?QFT-iH)|iT7ph?Lf6^;xL;#bc+RQ-?-Uc!bN1SOjG*c4 zwL+Qep0ll6#v`WX>@CaHaItmAS#_h^92sgVt2;3tO=o*);rU6>boSD)IU_v!&Rz#B z65M)L*KdBh@SeRk1CF$w?UjY&2H-xcGGu1t&>!yRo)G^`RozlXh107&*QYd|{`3@1 z)Zf2URrjY0`Q26V%BUJ>bX z{dx1_FJG-{`#kse0-isA_x#Uee=p$u%ipW2dx!aDp#Yr2~6R@L>c zaD2I{Za+8Q3oqiU@1=hVd@s0~zgboH*m?=QHZiQ%{rjrwrqleks=7SS@2RRQiY|@M zbu4@Rn^krH{r^6`P*t~RQ#}L^d!Xz*#GIEeceJTKRllcF(#D=+(Wd$k{i+B^?C+Ge z-kWPk6;Oy$4r;ol?l-A;>S9@G`|iadN?koG4eI^U*2k8W1}8kNW<&QY-Zpmv)pmtz z?rpviZLQQ^>&zn720e^5z|Jh%S8q#8TNeG(rGj`fd-%3p+tQZ5Gp9XYfi~5r6T{(q#6_FxQ|+te zZ>Ug;Hr1!vw}rH_tr|D1P4#eMxV@ZU(Q;KwkhXNUeF^<@q@ys3|!=-tc8x`KiKl>3HFcMEBU_F5NF}+Av(6V0*9b6(-I1EKFAJ z&Aq}dheO4!-g9WD&+>r>=)H08eXd5NviA`gggVYuD{;JwZ4-+Tj|Va`#tckUhx{-U&bKDjZ?da5?h!-U~-i>s>L^KfDCH2S($ zw+D0coVs4_4)zQz&p(?p82m5ldb>FojE1V_kBN0Cq?V_RXt17x2CSiOlN|g(fFus+ZUOLCn z(~7lU+uM~r%#wH9pb~&&UyHRopb+C4Q3Jsmzb)3b2kaI zE9}+M%_GcwVybGPg-4j5>vV&#;zg>|27@qvQqmNJLD*>p+Nxv-L5*RxR<*P324Vi1 zwUd7SJdUaj4q;|6QYD)Vhp=LM;I-?ael`fJ#}=9fny1ubr$LyHRLAZHVK7{5FV-Ex ziib-tXG*uMS4PCt#$9&^yRDi*dy(!CR(&5pZIOtk z)6Iai^(Y#I-Qiza&*}zYw^jeBS_6bZ7-xj@c8@Rw32HNsFxcV>qnSq-MsV%vMPR!7 z25{A0`VzxxlvJx)#Dqf_$2x7LyF-|5si^JpxYV9NG(=&wEsx9~48dnD)r&YF z+q9O;i#QUELr|8&hKuSGB=8)6m-4EF(*8 zW)KEX@W2SaPF5GvHRPKr#l_G6~zsaJKQu*=le z?K&+JOq@peE|EM-A<$!8# zRb!sla)_MZs_!mJIoz)Gy|irgQVv@LBiFK8Dq6dgFzr;6WuobQ%oY8mt~5(IxanGZ z|6a+#Yk0Ls=#?B$% zUC{9^u-iH`a?$)ux8uq znE2ydAgC?!(AurVdh?PUS6C#h?v8uOjw?J8`kXgbq}N(34NYBfx7(}k5_W3^GSnq% zGn=sL`~2;fy_iEA(!!kUYCmH>VYh2z+LY=(VV66YU+tF6C#X%)};!mFmlA6)

    ~R4xfx{}qx7yDDv2C$&8KZR$+cn+un<0m7iyBY)1c#MYIQlm^tW=#bToA}g z!RUC>i7bl=gUG6rg+`l1_E_A3i$qo{#226%j4gc)JC$n_#_r>9!C)m&Hw}=wlXU~VrtEN{SEVUCL^by6 zsoW&5%xwmFRSM`(uQ_$?{~p3qP*)t|#1$o;L0)MA0PxyVYeRbp@R~|I1H2|T69=z4 zo5}YHUzvCf_?m2x0AFd%Fw{vfs{?yY_61e++Bb_>U_f(M1wy*XuY3ahsJFw$xiR&7x$(jlzwy3R=p47S&78f4r7 zEd3k7Uwe)6-B9rPT7MnBnF9dZgS-%B0>F+lRCoN^%_7>lYp)}QFfiBBAMF@sz+82dl@0-O#iMrS+OHzaB*0u#c{ecEe$R&T9l9z; zbRK)T+t=xeelXX*FbJ;X$Th7CfLwcUJa<=#T+^F33kMyj9m>!5MgK?)=VMd)G4vH-M`S zneux8*M51ClSSYv2NeV11g`FX1Kz5BY+JVuT=Vx1;Hv4MOfcrWRfqYW2Y@R82Y73$ zc}U)>!Qjt$D+es_*6sB44e-`9z5uswGU$%?3EY~V7kH~WRxFYTTsbv^w`xK&Ob6hq ztBh(BB(9oXqYNL2s}}v?luzOcZ&4E0fJMZuvXm~<&SBtImXsuJ)eI9`381Yhb^vbG zElqt1aO;yd9l-jg@0Zyk61eK&27n`R9d?t1t?4@gZOy;tv^527psfrZ0b3Pi#j2aI zmEKedwlaPPY^5(TVXK_-q9X#f(kPFxm0LE1t@~ywIl@-0g4Vet1Z-ueB5hUFeB0R^ zw{lTK+)5wtiCg#Gi`5XhYLOXVADQcZcqu0`SJ^@sVRYsy2b|c9B6roZ+6^K)ca>?u z9Lb1XTSRDK4Y8}1!y!W>cHLJ`-6nS3ccR>b_Frc1LhdT2Fn2zPU6r&ymwBYF`(YbB zgsxnf6S~4Wip*8~B8=|IT;caenZ5n)h=wS~ZA;@4`sBJ}@A&6ak8BYeQwNrRj6T)_1i@CZX zh1D~D&=AG2h(JkU*XpAwF|10!n-w0_u%}yd62m6RE7Y(hFc}ams>2h($_pk|6-2PB z0#Fm|I)arKOl&MCDQtz%7YJ7VGPmJbN3g6015GSy0wqnXoWX+UQ4^c4#4)T~eC!2G zO>FgXC~0Dgi?e}a7bOx0UUee76n96WDE5q*D^uC_i-F~mD7HFM2byJ-G@{u>gT^w| ztxjgKx12Pw_0Peqrb#PELshI;*4!*5n@#T%d{%7IdIokue zp-q?IfL0Z>UVW*9j(3WQc&-=q#8v>GZ* z90x*6Nsbd*jb;%T645F)o)+PRv`OOuN{d2q6Vm3(b4Z&MG=Q|d-nr!DINZS_4~L)PlZR*4*rN}bvAK>^vSAIEYD&{oPT z``iF+^@}D&2DH^933LKxyKH72PG;LK#O!#;Y&m%n+9rt`pe+mWC86x`+K~X*sxqd_ zQ=QoADuV5R*lK19cm`lANtr3fA7IOwjKEf7>lhe8Yul9IyG6jY>Q1ihHC!t#pMhql zwe1&6SWc4Grv3z4tByT3eSm7UHV(g;q>Vkyw21CP z6kDBUgVE|lMghTS+th0K6Nr`>a@54~$%E0V&1f1$vAYZ82x&WRnHdTc#j<|@(#m-z zkbBm|#*#ZpVlh2X5{o*aM6^;r+r9uLv7C)4iDf)PO)SDEYGOI9P!r40gQ8f~kDPl3 z6vbjo-x(;amU80|C$vaZC85=6{*2Iatw}Ib5|;5pR&1|wgJ<&&q!zWXlGPRI4kpzp?UR+xj#x_RjV~r3q-OKWrv`Q zOjf@=H&BUW_4@|)fMl235fzcFE@eiWB(k#f9S(mLl)1!S8^xV zJu8v{Qjf%BiwpV^ zlRdpm7oe=lLtB3UlwCU&m2z#XcvYtcGLr2LzQ}_dha?Z5LLwGv!XX}tbWq;)Znoye{Q8_0Ay1ga{yV*=8>O3Agi{q z$_0*9gKb+oj@4wfTq9G3I96kAILnjAaqAR#A^}83I`ZsN}J4)RRao$tXZ%ZJP8D#?B{17z?MWL}NJukj7%!o@i`p1CCAS1CC_}C5}zE z4IGPXX9C&FU7-??rE?8{tiVR3^8?6U?!BIXtdL!3=?G*=z$TFe(;<;%6GXEWF$ajO z>KfTB3?hpGlR)-@=L&)B1%)?&ECRa(WHIHF$1=hokmYPkBFotwNLI6Z;5`yq(5&oH z;KF+X*#vnV$hNatW(t5T!!+>NZj?K9g^9=BFsT8M_3+MdY&w{9v&p z{V$6ph9iqjzvU>F5R5FA^an6jO}2$fivo+?vq6Dn(a@k^@hqBbP|y~0bN`191z7hH z#A;cxPow`&hXPB~$_@o_`LHLz(upXRUl`p9uo_G51S@sDuqW8fMlZP&_|r->7QaXu zE0x#O)MRr4OL$A}1l83RANB-}FlkS)TBi-KOVAV98j z*~7E-5}VbGF$SE3W;aXEBAL}<{{ETF(uX2>6l`9WGm+Wdi|s?<2xo~S z5}iF=!JX(VA2ac6c_i%#%$`<}D}h-)4}w{Nwi&A@Fw38GF1vfFjl^Y7-|SCd7W&2n zW=}U0ddTeIGVt$I%Kb2ookeh~U zjQ|)@SvaZEK$hmL)XHx5kvo;`W^L}800Y_TQO<{ftohE;K(<1QOb1!FuuBHA#kRP> zW@(X@{9}v9#z3>lt1TJGhU;f?kG%+3lY1cEX*+- z&UO#c*k-4R?1^<6jbsnc`}y>eHRCLL$sR5nrj_je>jxXzokCdH$nNgk0XF;L?rLl{ z8T`>kc5@$&o{eOUT+m1M zbOb>gSspcPWGiwmvyH5qRMJNFvfbkkeXPQevF!mngB=Sva@o@>7$z`#y9F-M>Ta@&ySdX%R;AJ+UZb0=F2&d#++@{eaJH9K zGk^^vS&;yPaxju@=MO)s0vE7P8mv8};;%6~D1*4j!_XJao*K);(me z3vNE}kX4Xntk3amul+c-aNI#w-B%VzuB7g2oj zkX>AUO$*r_0E>h7_6>JdRWm({o8l6<(w>L<;X z)wpaw%q6?VWz`1lt#Mg>D|ZwmP42NApPkI=xTrY-Fssv@TkLZH(SU@wkn^PG(d21(4YuB%A31w6ZIPGN-e>Fk@I2M0s3IJeQdx7@N&K_^rLBPd2vF zoXz&P;FW+mo669D(^`2IFxrn}s@KT{RUxBgk{wB{(jQ|(!AWg02nVT6MP*28QL_i6mN0;% zc3FHM0-#n|V`0||P8*1?Gg{ho|1%|WFRg2O!MjzR^C@)K|M=8FRQs2T? z*}rGkpT2wU{=DC_KY#w|{C}Z_tj4C&B7inn|IVtoWvMdmQB2=%_IFmrExT-(PKC8+ z{jXRRH^#;okbiS`nS<~*$40-;%hZkEnhSFMRb0e(>#yoPr~0dYHQ%j^%g#_u68DWa z^PHWpCSAr?-_7$q@a6D&{$_Pt?cm5KQ<+Ko@2ifRPV?KUnqi9FKwjHO-PZ%k%OHF8dXAw@=up`(&vuzc{t*}E|*5J=E0?%^r(lhyuM!g z=Sa&qiphqrYcu8aQOrW;x^`1J9=n-$T-RYsUA^%DwAXcd@qq=p7wx1^<=K9rf`+!z zhj?Q@T={wRo%CTI2mAi3@1&b&-Xtz+LoI++sB21nuG^9kJ;t|W7)-QsxB>+!<2mWq=;MF=wTtejP&eVTj-%#L_XlH9fBxH zf4hI6+CrAP-fr-7OZ^cFvdeq|ZW*aWYTV^D!)`eWgjlfp_S3B${78jVEt0Xlt)|e0 z7AN7i1mRP=B^#?DTD+ygj-)gQ#qP!TDWz5me04vmQX%;|BX{SPE;baIZA}$Bx_4KD zP9f@Ul9jtl^GtDIDxF(;I8R*;J;l8quCPAbPVinKgoOA^ZIWnl4Xzx6HqLgF0WJY~-ijy}psL?sLfJcE(fjcPmeQ5@#*{CFXxce zckJ%{PVR*9Wgg3)`iH5_l1tiKU#Gm_R&WwIiqIb2$7WJWU1oISHl>@=363rIfrK%4 zhrEx|t#)7qq&9QIkkWK+sozI&0b@8%-AA?j&-8njMNbQ}t4IVH5+&odrJq_D`?XEIMj2ll|$c@d+>OK!Qw>*4T>^@J=dGvz{oubNA zoZn}4He{y+TyPcV`(V|Iuy_p|m3z<9_X!m)sg}3IQvb(_HE}M&9 z-6c#-=Ha+`bkrhnPwT@)mSl<)%Fw%Q)i$m)s5&_IzryEZNO!Fx_=^$;A4`o_F2c|Hu6e+uitP11hbyY2W=v zWm7UY(%S=a4OF|acPl~-mOjQ_R*O6D@XD)&q*6*o3SWCqPm(z-=i0FCnV>7eje2|9 zmb-7Y{@{Ce?L;~8Nq2%m$b&>;i>PCwzle8257fi zV`OXe{p8Rxw6@y>-9{%vE11WweQmZn?;`@+4^ z>eeeNp9|8~czB44Uep>--?)bYqBRz#Ck&&i)>2(ZjEdU5(bRrgP>ye_wOzknmBX7x z-u?+2<@oa3f@SfXfXh~8TFiKeY7hHuynTSRF}pQx9;9kvG`ule+wMW?>g6$7e)s*RtCIPuTEwDApi>4j9+>f}z@*P{_=9=`&%fYn9U13rC zhvkt}*EhMKwLst1I!0)IdgCK$T0c@rTI19jvFO3^* zCG&o_CeL`#I~3u+wSsPfw#WMke(X=p`njaFWk*ITXl>aca{;X_mKT*#B2f$V!dg|TDYs(7t6nJe}p}KNjTNcQVoY$%;wnfNmTbub7kk_6!JQ%@i z)izBxh-B=99k@XW09zdwIot%cUUwxC+jf|VA3 zg8_-{DJ~Q&)QN3A%!#eGAS2^|$X0s$7^{hFnPN+1E94N{tVFi0ZK8<>*y_KYDY68% zN(PuIgao$jD2EInwowS2wDwe1?F@>EYtI4(177Rb3|Om+2)#IA?O99^OjfJkbF%8N zmbVO6tJ^Xv<*ZgmMKTXqZEN!V2C&-mbkYG-o1PU|tyq(BA+TDVE-Jng*6O&RC&0Dm z`Rj$aPHNk~8kqp7)d7+AL{NL44w=Ad^KCh&&20~-O&9H$HZ?h=O^*newzXMS7BQ{b zLO4%Mo7)`I>XyT-o19kZHpS4db6T}UwkkobHj#}^0o1m(@DwMfRg-N;IjR-FjJ$B5 z+OvNkV-hB+Rol!zCaIMVYk1p`)au@1w*jCwJuZOSbp0T;pKU>E)8hiHp{OJ18E*!k}IM|p7a+I)2mY;~FdE8w;1>HutcQ{c6FEie89tW9TfR(l@gxDIPo z_{{JhXl?pQr?qM_@anWy7Z_>*;M#PQ;aZyh64$miQ#26QrcMf6t30_-=#$r;hvz;L z+Uk7M9DvYPO*55-%vKL_Y?lGp>QoVOliA`R2e#+#36LbV`ZOG0Kg8BQm`rR>G5*-B z0kP%Xg4m`92x8ll5Dk<%vSl$nBHPs8fNXUOe}Zh&J%ic$LjGi4QMS-Nm~2)v%80;yKgR# z*QVE&fUO!Q*C(&-r*vcnUii7LPRw5C+)3#i*rFFDUYj3)1KW>#1hJhRFj3ol ze@<=lgK=p4c{Yc(`M}e|)!j-E6WR9T4nty2Z9fjI9}qF1^;zPA4|P+mDBLr;hraI=qCq7FK=;Z_zK4@OE+6QleZrJw*6Ol&gi8mE)%R zc6Xg&lHV>ifhGCv;@)?lx%-Vm-N3o~TvvbV}0O zGA$;P?zXtQebU{Y4ynO$RZDz^QpC9XVJ6PRxclMOx+J+WVTliyBzHgD9hf9npQ%$` zC%NtWKJ3}QC|4D~ok2UwRhzv@uw2zvca5*J+;%2cpMmAJuRUYcjzK zP_B-$1q)cNjHY7w1C*Oi<|wx{oi3m?l&e_f{Zt&|sv3Jt%fz@U<+B7cc8tp+?!>ri zoBk4{xGWAtiu>6X@$pt%HV&4nrWnNtbGHJ~5@2p?bCo)1u8x~Z4#HfWE)+p8%hi8x z;vB%-d<{->(=~wRzEIL3u3ojteE@OgXEyiV$Z(Y}YpD%jxH@b%_UjB+R~HUXWVmVz zb6hf9J|Zw&b;6jWz;KlY7CVt(xat|Eivq*VzvvKG7h<|JKwNzqCf@?Z)h8PfFe$D^ zj=44>#MOXfmiM9!8g7fxX`{GG zaC&C|N4V{u7uy~N!qxiH_IZJD)i%8wNpQE*SkKlCxgxEzu|aocs2XvWx)W+ty}QbmX^cvmJZz+pW)6vl{~8ZrvYv;!!YMCg=g;^5Hte6$Y7^lSH^Y z2n1J`7|B-vxVpmU@q*p@Gxhgl6Jg52s>&Y)T#xBAsGm9-DI-43ralE7`g zMv&W&MklwrMi*Ry+@^O6aGN_dz->Ozxh>|(gl+Tt1-8vk0ND29J{;T1W`B3cY}i(I z#AlF4r?z+vV79uHD?mArEeF7aY^~RW)}{vrSgWhQoa8#J&G!vhi}C`A)#{9!BVcE> zy7R+eKUi&k4}i6dBpzC;t`Rz@FVyKxtoEKB1RtyxTknb0Zl1`TSnY+f++?-abfHh6 z_JFkD8LdaV-R zS{*lCz7w#$J$_HX_D0bW65EP`J4Cj(uhkQ?y-@0g%=QOVTP>bSr1tU>Hw3lSW0?tR zFI)U1PV2>;6Q;c^l*DVmv5qzCNe4>Air` zrV9k7?K9H$Non_D<={wZ+1Eg6^Hn&d)h|Z!H7ISnK=UL3rPV!0*0Dp{c2JZ(0jJdk zhQTX2ExQIdtqwB*FF36pp~+dD)AARAY12_oY16v|rcH-ArR7Zn((0(i%nTgT>M+ae z2Bp=*H~Hy{X?4W?CzzJ63zSw(_uM@rrPbArtqibQedd2AxYa@RPka${+!-9#S*`Bg zB+y{B>WEQEo2*tZ(>24+YW2!&TMMu@ebNqV(>LL;Ru4InpuuYSwE)%fwn1vsWq{P` zk(jFqNG-oIkXrUQfLgs9m(4n;ZN1hC$dJ^w<2F;`I;mCZ4BH6({yZ`&IfRt&IfRtA11(UdJBNJ`RfC{%~#{_Hs2xOZ63EkZ(pZ$ zddrzI(OX2g3EnDd4r2I$w>;B#tbCJTf(Z}20PbOmWr^QAVBbA8ksoZRZ`pMVinwyY{;neF1clnHKS zc<7ke$!+^qZ7&YVEz5b5#4Qq=N$0k@Xi?I+-F=am$nD}G5!z^Q9neF10)2Ymsl`1T= zJ$-{jDzjyAAIoe}u0o01i?R+Vvt3++I+faPj%l7s+l^=%m9~qShNVK=6&j@!xxL%$ z7s!o;wk!HDRc`glOi}?dw-q9=83)mH~=c9Glk zdq#34t8BI1Ai47VwFNj(ZabAr90KL8)$(LSx#>#4a%mM$m@9?q(fL7g+jW>`CP;2l zg$Bx951$c;a^*`L#YZ5y>j@o^hve!RhD-oJE)A+la(e_HJqILLTG3X144BL71It~j zZxaW~ZJ)js9|GlebF-<)4U#K`?Bh2icP$o~5ag}}+j9YOb(qzeJIGBJVjMSJy>nbW zsw-v#fZXs6C&f)d?u+xD-3 z)Y*GQi)r4l%J=h9I|#g|wO6<`WvY zO-%r|`pGawN#s^fX4dICwawojux)<5z_$9yaNbVbHa$>aTRpVHQW(It>h|UQP0?+7 z_n@|FD;kitUkD^D0#v3_yx;le{uOuMwY`L4+t=JtE8DtC8JT>q#UlFU)86IWR>MXlRyM8CK749KTu2<7#yar0W@6I;z! zdB>fzXlQpjDd8cnCPuM;Ypj2MUjO=$%(9GYYdly`yqKP%8e8--s)kSi&>BxKmw*yi zYt%EDdp>W|iEnN9r>J;o|8H)rZT~FQ^`{F{;HWp65X9x#)7IGD+cml{U5i`W=6Vn( zBp6qvh?dcdB_a?sV_gf2Cf3+~*&FZJu)GJ!?TwY95Wcy3T~)v^cPwwd<)k&9l!ZVC zPUbr)#{81vj$ftv|_jdURqMJh#Tx9fK>zOf}wf9M-uW<=M4; zS?6z(fUU6&3Ue4%bw}(GUsWFzX+W~QOvn& zb86)ODnCvQj&t-~>kx!%4Y!q1>@GpozODsz6qd~IZPy%niHc6}!$&6Zx{qt`c4M$IHgN)l?snLokkcO5c!k@<+aWy=dP)9q$ODT2^S4BCU z3H&@^+S)F!rPyJZr^b5@xN>v09r!Jn`jk_Yp=aFgL;LhbN0madecNrywqlCCm+B3& zxK^dLXGh&&W2Qzcr`Ua)b!%+DG)G&F%i$QeN-xzbDy+7uHCBVw%08H`#99xps@OC} zPAa>~)n<;i?MRn4QKJ=Bcxu13U52Y^;oTZ?Z3af`v3rRHOt)KOab%sZr#iB3T_g-qdZRJx+e=L)OXJ}_CHr$xPrsoEXZCt(^zX;E#gHQSy8x~3#Y4WjS=xOTihCVuf0gOa21Pq^5Dcx$`77NfdQiQ*)Sc4fpqZPn7(xzZKhTh_GIIZ!pSXY;6Q@I+gRAX~jpVoL< z$g4*^lE|BuCNcEFdA>E?7V<8;8=AFvbFos5%{`bDi(08h@nBv}5%t1=ytQq=t<~7H zHjU92cI>UOc&*0n74ljIS@f#{84JSIXtf$UhNn%;FNWV1^i45<)^>WW#tx{owe^+- zzZ(`3EynX&jr`{G1TCn4 z)QUKx(yIEK6d?!OoHE;mZ_a@<1eNuhwgw_p7N@izj8K`*#)&S=n>Ti|CAth7;{=ysQk&Q^ zJ&qGwmWAye;{n+6a8piHnI5o{D$^f0p=H|4CbUc&-Gr8DUYpP|t!fimmKCg}v4ECe z*W+ke2YRXjXu0n#vy1`IGIe4TTBbE^V#_psC0owd<8Yads|hZLe{KTHI?B)^xN^$k z6D+IR!t`7Smh(LTEYo%~fn{3MCb0ZE(!nzQR})#L9VEfBIjMfAGM!5kRfdOZg38HQ zl2jRvq6sP|Gfz_G*X1}?PM(J3%IU7bm6K~B!Sd@y94ymak6bwnGQpLT+atJg@>V2Q zPR@b^%QT-PS59Vz7jut*UgMy5>-ym3{Y9e#lGxBm0$PaRJm@h zBayK3>qy7Sbwh2AV`W`Vbv$ZZxo+;HlejYPpIBK3+H!(eS+}tTC<9g2R_W6qBCxXV z!qy?g%C93GEx&HW(Xz_jBF96r{JIe*%lSYD%lV8Su-xbU8Q_pB>j>MbN3N^`4=1k< zmh-IxEbGX*H8Ig;-GD8!NS9lq$)_Z`oNgU(dEA^c<=2@UD~|)5CZ{LmFu6rmX1qz5 zti!BWfHb-4FA;?iC+FJ*Pu7uhr+mW6uLB(?=L4N4>pm>AMw+Z*LfceFocwwMj+0+U zI!@M+w&o^I){&O895^|j4LDiH#7;HRWZk^w6$zBuRf7Ra)`8FMNkT`n5|04tSq zF|yO;S6Q{w)73dqWxd4uDot)b=Kvm1xgEZR^edUNHprVp6QQz#pYXUNREA4* zg32@#Pf%HxX0;=P%Gx{-1q5Wudzbo%mk*}=kq3ySAE5Gf&zfh)$@_}h9^ho@VET~b zI9Weu$v*Pre3byox=IJ?0LuDV5L^e!UEyG}MhD800RKP$zmyBzqy&`JKT4F#0Vvbu zJP~ENqwii)?L=7$cg|#il=ZVUumHHS;&iJKeXz3p$gT8%Seb_F2`lT{s8(9+R9V03 zz!6kAe`KJ_@@k)2bcrgfZL@MYP-U$&ym%H=dAkxDcB)L{@I;j*y&6S8gvz=Rs|j?b zoF9NQWyu!;@;XzNfQLguaAjI4C$Ovs;JaJ^mS5*|uq;Ipr#Ar0dOA)L0hV>O)jke@ zWq2AVuG|M!FG_ZoZ8Jlqpn?qZP>M6a}C<}W!|)(iCNVF$}Fp-)_y z2I`3`=eGc^tYjuSXkf zIiC!0Ip00tvc7rCOM)$@(Ftfd^(*^+6}hr*(4afHa(bfV%J6qjSXpgg z=Z=+W{td)svO(tO0Ih|HJXil>QNb^<`N;T4~HixAk z&AOV{xkS(`DP~7h0L^JrFG+LiiU7^(0zkq}n$rkP(wqhxlIHX^0yJwlvE&~?Gj;D1 zXimG62WZY$0?_*ALR1uN0&?5BosPYV?E}P;>6YK+PId zERhA&oQFlA=KSP{3Xsjs-S_FnKF6k@+EDgfW1zaWz=93M8eCdHxMtUUv<2! zHgIY1<@Dmnm(#C0UQYdwcsbt(@N#Z+y!^UJK;{b@_`#UdyK%<+i#B7->5Y>yr@jKl zoE{DlGp`hc`E^Do%>JnWFY9a$*nyYx8wOrhOz0bgftO!D>wNju_yNrM^CDnAAqE7# ztkK2uQ2@-pXf(&YH1+^6>zR3q1cX_3REyDP2h8e;u4MwioVzIi^Xo_l%(>TqFy{{L zh&lBdC(Nm{0Wha85qvqnLh$9RzXiUmw`^H3;N{!{fS2>L0bb5M6?pk|JR zM=|i_d`|J@^r*p?^JM@r=ZOc1Ie%(k%=rcYne$`^$Sg&(%j%PzG4FkOZ7kVAb4s>@ zGv|CdICDOuV`jB^R?abV)?RbY{AzR1{AzU2tVU1R0W{~!0cf5cb%`5ww3ZF92in3<1_l=*cN zPMOnVBW8X*H|Nax!F@Qh`jbgD05j)10B6n@0?w>PC{;LT&QBDa`E{g&=GQGaXio0} zoH@NJu0xiJIYP$_>0yF0W9Wy5( zPh#fR5N7>{QGY_foUg?Ba=v%R%jr1B%lQTzFXwjyzMRenyqxY2bUA+z zpv(C}9WK8Pbhw=RHRy64NkEtL#|yfgI}PY^emtPdn1AYPl>CnS^jmIuPLRKnTlNaX zgqgW{`GuK1i<&U=3Z26jX7(rel3ez%>7USC-myvjpDATtQ0xHEtPd(OX}OXaif&vP?_b`EuEzr2@SCy2uY+)<1jsIq-5i z7w~faJ>cacyXNaR^~>ocfG+2k0J>Z@2m=x?>y%c254!B}>Az>XtY5X=EP%_e10626 zMwcQ4TvpF=jTNWM`cW$~2VE}R*)Kj`;N^Tm;N>2lTO0zsoOdvRFSkbXNl$#aXy>5` zD}gVo(WO?vm-XRYzvIiwq}xs);N||s8ew<3T-J~b5n0Zc2eh280BBjiWGb3O%lVN2 zEw{$Kk{;X6J!a)WmUT*(UjbT9B?2JJdVRiG2WUATcroC`3j$i!ue!*LqvhP294+V0 z1hkx=InZ({kpNj%8H8`709jTYglnt-FX#6Gy!`svgXI-hiAfE3S-!rRslr1oNpa;Id5A8UDi2Iht^J)btI~-oi2+mnEDCm zvc^3R<3X3(fvySzy4;b)@96UDE{!hhM_s?v>2fNAAzgkQ=yaL;Hp!QBoAc#ZM-eUS zftKG1F0&wqXjxZznZ7XC@~hF=^6TcEEweWgEvIhtpyhOtK+9#ph8&{h)R%~swIH8W zn&8U%#Jnonv2yAx#LBww%^0{-<=2HeR?ZI$Tv-?DwX^`sub*|Wte-_~uYu)!N(amQ z%*d6~fI+VOYILytx*7+|tr2RlAj@hrqbHJOU97EZNtW@FftB@}UWyB>oW3(qWgQqx zUP9%3p$}9}&l6l3R|u-CHOWPAY$5OhSte3t9l8CED&H)5cBri57UR6&$~TMp36@!< zN3xtA7|HS-TRn)CS=tA#oGues`DR@zEK8FpqzfSe*VpN9sWz!*e%c*&X(oahc&kT_*i4>Klqk4 z_Af8yr`;^a4gSq<`^Qh(`nSTr&&|%i?Ge6y;Tl>H9+&X^<*QdvwylrB&nq8)`|eZt zJo~2yjK6i0=ynY)T>sje7?<$*%XhEfdG_Nwc>eaQYxvKdPp={k+M+Fw|`zWa9iSCQThuIDdWWnbcw3OkSe{5h*^p5@1^ zvT>T9vC6(alWRj_w7X!Y zxVNctv)yysqO|24Fu_^Ys3rmV}Z?Ei;neKxInvG=YT zfY_BzV_!A4)#vcjJo_%mVOh7U1|V!P3joZ%cKa;zw=}cOef6ZD{4FC%vCGA^Ey5nd z9kJq>HBuW)%PeiSuT@S9;oxN8VqcG7vTZ5nCY`&CdGGpJ-B-cVhaT>$A^zIBw5!3X z@otYzi|y9w{=BWWepmK?ESc-Qx&Yd)?0@SvpYiBkV0pD~Yp|Dg&yZtiBSE)qZ1;zn z9sT=+c{<3qqwbq{UU?>`tDu^7-%60-dbKxg(hz&^CZ%^_wRx4ouC2s_b=C9oY^d5= z{PyX=Rq2%{kF;;Ley?W*w%Mh8)Ot(rzO{`|z8!nt?w~Am&bP{^*v z$rkImxPR_0aj({0dgraj9h-xD;}(>oC3Z*5l-(*-Ioo>Ty7;t__84 zwEcW*t+8VBtQu!dtvw55cK2R;SDp?mA0`vt+Iyk>!>6k3lq_wuYoo|0E32|7GT688 z_k^8QHbnmEckof3UM#1f*eJS-whn?*`-B)=c31wb^_)*HRw{Q5!{D*zlj)7s7VJuM z*Jm77<6;R|HO}l_l_QMlNA0TWIG%A>6Z{#nKf7vV9$2QP_GsI6jSD$KlBmk#A}V|K zuJHMc!fG4BOlr8UX9%v^7alty_hO|h{UFn-+ErV1KO=DM%Nx6exkY>jpQo3edFMro^WY%kal?`g^ssb?w>z7=U$O+cN;Ckf}A+K*0J{ zt4~#1i;JEf+-+=T3U1e%8Ht5{sh0QIt5Q^B2(Bu-3u%PCT8>Ijz&E(J3BQd*&oKNs z{h-TgnrYA1afg%($1p5sjnBWXK@s(@__B|!Z@Z~7RAl&RdKF?`etrD6FDVOL({E5`?_X3>^4R`QnXX zSRXzZwh93!wafJaF4!Cfjkv`XU^MYr*1489`wQQ)&*R*rFRk?;~ zsO(pJ@FN7)Iq_ArIBaG%U+26PqK^?+)0a&Y_ZBJg+N(h9D^*xHB48be3E{T7i>m3= zHcIZd>Mq6zte^G3?5>f`s7jJ}5OGUYY7D`>?!qGd`-t3_8mFkoek;#924Gcc&8~f0 zlC|HxC8OHIZvEjIeN~ZSB4_PCihRAEsT&8D7M?FN3f6lxb9Xh)5|DnR`LUO7i21q5 z!!nFTmZvic?&V!`Wl*$Gm_cxV~O8l>Oc1x0qaW( zBfrv?YBPsfdyE~^j~ee80ry06j3Y z09dsJh6U6(%5?f8vn~8ZQfV^+R*8riiS!I z8fi7&GYU>!xUJP@a$e8O_reqjM$af%x(QZoSN1JRJ$i4mLfaxW>=^}XpL-iE=O?vW z-B52d)gd)rGYr;HYPIi0@upw}7{ zRSnE&c(0IhEQ%>-G%UG&+cZ*CH87)LZJaScP*gTBqhU4r>{eCTHAZ8V@JGd6`PiY1 zo_u(HN|ATdjD_JOOyf8`G!*d41>V9EQQM6*7 zv9K6}Ptx*Vow0Bp;^aLW@o*XhWTPALun5?!<1IDz&1mAh{Cn)?!!sOSu>F9TU&SaU zyH-R!W;ncGUKZYS2JBEj>!?lQ+*W`CX1z0PJ2@YKvlg8m_c?GrdN+zF4ZvBI?nc4D zoAnSUt^;k>a@q8oNt=&_0W)ZG@^&U|?yGlOPk=THE*NqGY!=QiVNt?n85kQO1Zz$P zzl6Z&sVz%!4p3J zYTLYnI%)3vIz2=4)OjVnOpsHmlK=1c1%Z3k7NJElY$SK+Sr) z4)2{b=S{mn&AnRyCm&wKevmIYYwn%Hf-JD+zKeJc3I>{Ay~as%Z;ZNPfaX`Hao*gu zTca>_;AZ`Ewd!Z!=Kg~|zB+F1Jo5eB0Bi2sR2>-`YtH+A!J6~NU$Ex1trV!a??U!S=u_vKgn)sY(=JWm z=Dydo#24YTIc+C(+KjEhV9kBIs7;TKn)8-epk_5X-~npRj(0%K{gh$M1Jay#|A92; zJ%vEceKVph)q$GxW=){xccY=^z8~{;U|hLh6fvix=H6(_L!joqS<_b!PMiBf@W|uF zuAa3`)>h?Wz&Y(bK1}k z-kiP};O4wv9K1R2>;`Y{jjQAD+jl^6!!&?%|KOZBIdRTgv_YKH*8$?(KdUf}0dVf$ zqgkN=IQIiBISJt0cSP?|AOqr@_V@xgXHgpf=e)-k#5wQPb>#eNbL5=2M}s;4s_~9k zm}O<7+F$={T-=#+9~jKA4b1udd&Zpmr{Va^m~;Ms!JPR`IdIPV=Rlm(=3WrzwAC2E zId9bjan7YNwKBGd6jbG;jVHq>ARlQ|SLxLGv8bNtcuGTPkO!+&KaBt~vVpO*wPl)VrZ# z*%YWZa1rq3Hdv!141ihQ#K6`Ln1$R%jW7iAm3EFwSg>W$ztB1-T9!92Dzcp}?~8M1 zN6WNUCRrAV46P`FWzBmi#x}4le_emn0L!%TBUj#Tu4Mq0MO2rtLYiPX*=rIk>mbYj z5G=orbg(Q-K`%gaww#o!aRg=|@`Bl3~N%Q~Z@ zVCT#E{v9vp{$S1o@BysSZSi_{qCvc7v$znOSB8Nm`S zr@;brIloxY<=iElF4GvEa9O^9&f`Is^VM9*2p6~Ka5<0MfXn$(0hg0AFX3{&Sit4{ zf7kVj||;M}e5>y-dQ4UID!Px){gHDV_mc&Tj*BIbVyz<>cE+xSU4II~m^MbvRp2 z_MBwPX3I>jOe0uwS55;y!E$~&0L%27Cs)po99&tWf>q>!D|0#|R!*}T zv2qF#ftAzbOst$A0I>2e8gCDQZFCz{`E`h6Q~}^w69t=j(8&tRWw$ z+PN~#=82Wl>W5r8tv3ml(<=m5RxoGzHge_G=qWXFL=NDx?&K*0B3XW2DEylJD8tHW0Z+D^mfD2Nd5i*FPLtE5%gLmhggFm1 zAk2)%2$>nK0y1mj^^6H1b6Ud?GIK3W$ec$DK<3;C$gJ;PQ=Qc;oc_;;9 z&I1$}bACKv%;~X$G3%4@odICX`C1(@=dl!sISoWW%(?40V@}5bF{ir#W=^Yga^|#9 z?VOoi^c&XN2{NBi5AzGi+@q^3mw{45&}G(75iW;zPK@#c$v19 zz{~PyJY!h}x||#;iI?+_0xu^o+=-Xz_DQ-d3so;w16@uAqom8)e&nTLPM4G8CFwHL zM}*7Ce3Wq6@|Xn6xwC*Q=Z*oi%w%OMT&CVC*|HAwtO*O3scf4Hm(wS~!e!>XQ{{3# z5|zs+=1GOiOkJnSs;!SgB zX{udLRaLBAW+@A6mvb9xms8mpYnRjIpmrJc1*vwKg(s+>j!E*dt@Z|j20x9dWb=e6pSD?@WRl`FGeA(bnq-z${a)TdmTjufd}nMJ3mUOE3B3YOtm!h+>A$gyU5MN)?~ z%c%_|%PZ0>tXNKUzN}d0kFsKUWnzvM%Pg&YRV=f#I8`k3XH&(pLy1?#vYFVt3YOi@ z(lI2{Fjgn;)W#4pcLES0ql~-(nXSs4}L$xxOgQ;AZ zwY4l)#Emtdhkou}t<|(~enHv^f)yf2~sahG8$Nze< z@&t#uP#IUB3zhLvq(WsplU%6G#*@BC#*L7Chsv);hsx<%z?AcWEL_fw z4wcg+N~)Z9T7W92Hvy=eH+}#rr~O@|%K0uGD(6m`3zsq8uy8qzDXd&hGc-zv)&x{ymWQGVk5Y|!;bu*!F)!H1Mm6T^Cf9HrElBpC9dgW{wTg*VK#ut)+oBxv&4niAn7gH)U8u`3w+C!GWt3yS4(KC8 zj#-P&Ajz)BEaOSv4o*GhoAv3`W4_>`n*^B;EYGONT(nw^J_SK$iAry#DGWho!3gL_ zxFECS?M=vxg3PA~p`|=1$b3_=!u6QXMZw4QE6Oa@>3FKpVs1xmzt>_GQi*a@NHJIL z2d5PC38BTL#e685MtKc z+D=)Ajw^+j+qbjXMga&hA1h%jm6$IMK>x53^XpC^#Vk9t;A2!`ZbOMzgj0$6)T-HZ zHC%~Vpw%!)mSTqH2BnzW40#w_g&=cV!`fE*p~pM~EFi;tpl4HsSxUNIDhw6oTPu*5 zTcN^yLXeCq%<5;J_@N4O68z38%r2gmRG6jaZe%R0Fk=>^3iC!02dFStafBFqD8jrF z<3WYF?vTi&3iIoFT!mTw84&SEGR&w#hYYjge=`_>3UgM?&PvR#1xO`kiA=c&GL)Ea z?&hHq^Sd#Wn6+?lEqp35-^dPp#F*<6i?*c1d@`9#DdzNBP-4EZ(E&=#^0zpCUA)|% z7s|FF#eC8>gi_3^pE2!cC@~*2WuOxC(Ff9L4?rd6lNA9_V(#lnN?@22votjX%%R2HCY9i# z5Mu5jwzFi@VQ#Yx$S-u56}X#b#*kqy&<#s6%>|v<$3`e9!mPEu6~97+IfmcM2;QWZvlKd{m(x?F^73g3*(|#Z>8Y-}d|CqYUvk#2 zYZ*qE$2t5j`yU@?ZT$z|a@PLk#r(AS<+#DW`E7sWq|cpx{`gflX?gP1dH&}wU%i6y zdgq(|?)}Fr?|=NRi}mM$kMn>2^4%*K{d{!!zviIbMrV~rZas$hPu!;KG@JgXeOGm1 zqCTrK1>280b+1cZ{Lp`$N|L}rq55y`3g`*?KE@3Cz z9nw=A6C`dYG}rq(8mv(JX-r^Tsh!A(YvE~WQ|00WuJ^6`63@rhR^yT2-WO2hp6eXw zPK?WvT*??mntGQ@-mLdg<~1_WDq&czSq-NC8QEshxJc(Hn;7}zb8XKdcHt=9Z7E|J zq{lK|e~+xNb|;U@1ld?e+E>6a@~kRUh|I3aI}GUR{E@xg=nSBE9xEO@*O$Z zzBxM-P*lYcc~|j2vlmnSN90y_JplWxl#ZL^NR=vvQmZm-uE^u*^NbBsy?AR5#2T(F zZKkTPNXG4|>WlAMm1dD}YmJL-#XFYM-Az|yq*R6$iL-W2Pe>|OisYDd66^^aO0C35 zytZ$BzCM-AMV>1SLPwk2BB8a@bxW0ak+Y(gpDOq)Ed|Eh-i;-m_SJKI$F^E(X%{1m z^tNgSBYm{*o|0?doh69$md8}vb%|mK-liRJ7v~7O&EjcM6*Wd0r(L5t07F6$KG4!6;GNHQL+lSuW3K-?}X3)N3AFGV#0OtL3 z=x%o2bNxnCz!f9!4cnUbM~CQ}r`g*|#5wtj`keOPISb#QA$**x;qD!&XfAp5Ds3lG zUn8{xLdM`{{Q^^TT@)|%Fd+xm2l_a}>tpe9C`Q*+bvUokTAkAB!Vp>Oi#*N636ZtF zW&gGjS*sqJM_Od9(bT=H5n8Ku*$OZbS!?8PeLG@9MAr9;YH3E+_k{tSk+sTSJYYd& zeHEmc8CjqA)G1+9eXZ{A#h_X-U+l19Os!%mlSg1s-9C^jWG)y}AGOy<&7c!8^|88K zJ3{K?Na41J)cT8uD^EzRUKW!aBkJ~_wExXIA4Jr$7YrXJ2Gp|O^JoeYwHy+o)|~;h zY73q>fMB{Wq-PYvSh`$&wv7ngW9j}rY*C1CI(afPp8mX$8QUYAR=Kd>AHwOB*=0DL z(!mU;liPd>r*B(^BbHWaO=#~hly2XRE3hz>W{m(NX=UMU?=~Z81)R3io}qMFNivdN z;3UUz8j}R0>2^Zf4?cqF9bz}HU|OZev+Jf{+C$q{Fui!doP%l8SV_@z`)F-R^NOZ@ z+enJ083ZtxUc6Q##nQ;=GnC%V6*k4u6$ q*GY?ilZajpTcO1PZ2}YxcwDF7jN?z zn!qN7(5=mMqf!j5f|cmFDU9ZmMkK9@d@I~cp>#XH70)x4zI^NEE0p$0ZidnfvlvOY zIm(6zM$*L#0aGBYI$2xIF_zvi@ugr|n_^tiUL9ymg2=}VgVcnYQ42o!T5Bk8p8W+csp83JjA zLC-DZ7#g84g6RD28AQ{Sok4V3>M@8uASZG>JvStlzGRNVXj*$8o&vobP51pJv2~N- zwDw!sx+l@r@sa ztd?(#$0Z1<>*7iljHr99l%LKcY8eUJgicg_*`;_et^J%B+<*LcdL z(^k2~NV-o@b5de7ji2*SI?WOcrO)D;*Nmi9UfSlRnbJWdEyo*E3SlUnHn}A--DW8( zzGEn@a#yP-W+;6Y-%y((X~3Enmv*~b2Gi#T0K#BeRYbNgl+pCDc~Hq(@)5is0?F6S!u0lTXbQ`&f4@iiowSUnD0S~9Q1AvR+^mh2ljp4MmVp%C} z3a1ZjE=u8ag+M;TX>~r^FwJLRoPDa$N z(bd%%QMX1b0Y*Trj%ZOj0_sf=`i#Rq@w7Y&E(^guo^B^H1!08KIk@`=!Sq&qCS@$G zC}WNKdB)PR6R=&^45mfdEDgtKIwv@YrVk7fjHb0e-DDydO{*6~0+YdXJCKCg18QxV zaQ@DKdcpMm3aEW6L<*==UWpO)g}o3dq(%-mv1wI}NBqXPTHa}h z#MOG!Hghqq)}9hyjGfOo85gDkLGDOwd{dRkWhzHeeLPMgPsCu(d4pFt_AZ$KiRNVpuFhqpad2K*Y zeSv8qtfm4(!qnRR6uXxgS+_oTcu@seb%Ej&BWuY67z`wBC&4I*3_92v0hooKw^zOUktM)cV?TG6SHo; z%~xEAvn9P?WiAM_B}UpNf%$j{t+_iUL2Ef-{1#fD@HAnZt-Uj`L5sD zj!w|}V8RH{`h?zIg4Qi!x(qWS%zhPXAk0=rh;uBT30eoI%GDopP<_SNncTAa zgB47PS}!n+eU*P$1|(7I1UDIJv-B^a>)3mkxb=b&FBN~Jkb&fSk>*Xj3XjLMA2z2WrDBrQRt<4x}w@D{-!xFc?Anl$)?Gqc-Q>c9a zKrz(TDJ=(94z<_05M~VsOJo>k<0u5#2w-!Nog;7r+3C|}kiEEi17qy!D*GwK zPA7a8iTVuw1!M2OppN&dv)0%4DzRP&OUbQoMs19+7s%!%Ze594bD{N$Bb{4Ism%}> zxOFe1x2ckK*2O=_RA=pc6A^aOH(`W*tl*BBTbtls!q)BFyVblRz?LYIWm6box5jp{ zQGc3CtPLk1z}D)+&0`a~mS<~;k`_eRO8pNci|AU_1hb4Dp>-~8@X-3&_~sE>OEw@# z(1@(1z+kT&fpyY0$aNrKi3Haolorq+y6!5wRy|LCeWw`Nqw5@65@KIiT{F5?`pRp> zNwHZ|mnil@*vf*C_Iw@Fl44gFn5FQ#u(qD{)ryL(%MfE1el&=$6-$IhS}Lz@-P`uN zr}FCdA$SPN@@fVJsl57-9FF4FUaYR&8!z68RF~p zPK6&%u~%e)8DDD?sOeWQzFsdYwLoyattdoAaJ}BF3_x(*CWq?fiy2{?2ttC`8{DB7 zVCzD?EEEB@>i8^6!vI@BvlBf;*z1i=8H})BCEXrjuZI`bG02u6&3LE?uvh7$gv%=f z?EH%!U$2Gb+#X)90#4^LgGGebE7Qshuh$B(5ro%kWz8@mY)Q4+{4^qLsq~mH1|w{# zqFOe^Bka`i8DV$L*fpgyd1?t?Db+Lhez0}q=+N&fEe3* zHv(++?q3Jk`Q8~|qwtsU^(t9O`(O}Xw_mj_Oo*>j$3T4D?%PYZ&WbDlS5!gTzyEPv zs_iJt*8lYH{ZD8AY}NYt(~m2H{OUq}crWj`yT92T|MV%vsOxj1^DoO66)_~(JT74T z`K#w|3ygDK!1&8Iui$y?pEp1Ma>lyxOYh)w0prhKJ^$yiKNm3m@{23@2Xr(p32nD2 zxLt}8BGT|`KeFBDf3;%AwrVZf#>(^5kob?D=_T0l51gs1h_+bj+OP8;Khwc8{V)Gx z{X=7Vn-2f)|L32%!#0siueXK!eM#M>>oz64R94yy)PDYR=D+>%-~TxN*FXNF{l9`_5b`A>)v}z}2Abt6jmS zj<39zer~=OUc^`5OaB!3UT`(PcrSfm>MF1Q=)lz1+1GL@dC@Dr1SredqW%59Qkx{5 zrmJyF3v+4V{ePu4NjlFWdCYdqa$o+zTRpF9C=bdhlO(pDwqxb;G{@Gq~^ zX62Os_oJM0d`US)hh4Iq+1eAi&O3-)9uCjl1uizZolAaqZ*S<*nlCWhrVRX3fBwf+ zQK-I2Re95K?JzOlfRJj^HuGg|YxPUWFH}ReZm81^D^(+N@gk>9BGk`ix3F6Vui(6O3kwn9xcBq~~OXlvSz6LcvRFQ}^i zwH?=PqqQwwOS#pfo7~7!qqVKBQ@&LxzCV*rYr-9L?5X$MF6BBM*l#j_P;#Vwajos} z9N4Bk4nyHv$61}()`GBIedXNSKzsF+&Va6)zFjRIx?#@Pn6mW@%KhoFYO-9@c5LBo zqcg>J-A&dW>Lu;H_6vM~#db)-;o~sT4~ZRB+o30V_r7{w+M+yF5VmeV(oS^Lv;W$V zI^T{XQZG8_3|)dv#wZUiY;BuWu(o@Nq>P#(E4!&mW@Po%BrrcdnL~RX+qJhR-`W-{ z`E6aTTiJZN>2){`-P*{nOiu5n=Y^uC_R+Q3t)1>()B!fPVc*U@_Lb=7j@UN2oh58+ z)MiqhNU?A`Pdd%WXHE|sT` zZtDAU)g%r*d+8oE*_$>@51gr!8J^nOqb=$rpI(Yi@+@#=HxRWTn^IP_j81x58c|I% z7p10S((kSJ|2q2U-{iOquJCs&+>HC%lBq(?IxALdOGSgp_Uq^drf~7 zGfBSbq8=#NpF~unv;jG+Yx+^MBxq}&;w<;+FKbp3Z5n=B-*~#|)z3_!c`^x4T3Ftq)>R$Dp=*ALFUo z=AM%_Tt;dwk9``I%NS0t!&3ZhP5Y+|Dn8xx@HEJFci1|*>E-zowdoZ;{q&p}nRf4C zRHMPqc5t+t`UE$hPMX@*o~qYBUs0SQv%B@Qv9v~gpxUNkjoM5mUq*QP%j~FU)Jn(* zuij%oy%%@Fk`JC9V(+N(NQ;E&-s@mXbX4mja=M$zz&>6@{I9laor5Z-1Nq?1MB(e! z@A!n&M{F1I-o+fouzJt^X>z%fN6ph$+vAQ=M{P7^0V8{ zF^t~j&*!S{ZbS3wnO)anja#`Rp{c1ODhuRscidwDRa3-o524fd9F{h+u-ivm+C!T; zA^Jyqr_8=c2j*!hneN64DI#^N_W={+`D4J3`%)(Djpcw-QE^UXZhKk z5tJ4yQk9|IF=Nuh6OFR7D>Ei-zi74XvaH)?OnMjF*Dk}lX*#3sWyM~5cOe<$=@G1U)4FBEq*@Y~E{)o*5tm-_$O$Dl`Pm&$ zV5*-qV;|Ysl^K}cS~bnEUxsxvBdxZf%O|(GWd^2Ne#8zbwasjGKPam8Wn?!CPS5-F zatayQl^L2!Br|+CWL3A#*z`W#m`p08%ZyF6aJHLMNqoen_l&ybU^kzg8Z5mp1H0)k z(@z#vbMmO$XJC4tp4^v3-87idZ-#J%n(i5w-q@Qc_quZgrme|BWO>)s8JOykgglDu z>GlzsUY~-D(dmvQ^6csfPXwobzh_W--(CVbk`A|C>?{nE=xrTQX+KGn zs$m!!nK5P%%!TIs63GI+%f{vtHo4% z6b!0O*Q!HIl|g=V#|TKpYhvjkU%F`3eEiSL5w(A}P z>ER*;a-};*JgR%P-4-&Xn}rcN&ZovpwKmUKsy5BGW87=u-7K0=n@@j&93vjpQ!)A_ zN4j&wqy0K#86iWuI$~0_c?@!Q38v9gt7{<1a&8?lX+Piia5bHefK)%|bNgMwFGjD& z=!O*j>xfC!7K?S6%}uu$jUQIzEw8zC#HQ*bwkc9=_Y<7Jl$5etkSeZ*~na!;uNM$$gNePv#1fBX($vtA(D+=#knX<)$22$Dn)duc#C@Xpr z3c7%@XLT=WLRm=$I9zoodrnJu0@>qqH&X&x6|>G~Odu-_@7NPhAS;m||9J?6lbRb)Ob0>K0RqNbV0vg-8*mQ?aF!t&t%9HCji@nO>s=i>c`bDeGauzFC z{*W8Tu==&AZ3l(D%Hn3dps-i>;EK266!wxs^o(@|guUb>7X`YYu$Ojo#r8%}*h_WM z_Wm8iUXodjB{@*6u6`-=;Tnp)q|+Q5L4aa)?G^@s#$M8Jnx;{Ju~#oWoMR(s?6t!o z9ys>Wrnr!21dde(BOFkHW3Rpp8nv6Cu{xU#xS+8*%p!BpSe?yAchFcJXBsr1vHiGN zF$Wl{=Nuy-SZo^++QXZ1rNh|%c8otdjJ;H98p2MXvHiHGgFA`Usm4AFU|79Q+etEt zy|j5Q9<5_o9T3tMz_2>XSQI#HfB#V}4Gyb|^W2GXSRG~yZE#qfZi^jKK(YOW*q7-n z_LAB_sKEio>NxR}k)UuItK&lJ4m4JWEdaF>#wyY7NZVm-KFnFH3i4<1CQz*2v8SjU z#rA~X6M}%lrq9+nte&wfaGycjF>D?rjKk_oL8gFVUl(W?R)<+|3lghqEVIfNAXZ(( z42=hfO}!T&R)^dXmH@=|tB5Th0I}*;fUO2%`)Cww$2hExa)96*w!ah$@tnizJx^BY z5SGsu3|8l|JR}%w?^2Qb0fWW49Kxor3=p=TEaEjl*gmQltZ)e1zm|}e1&7sfzvHm! z>jaQ($NiBwY`?rGh#%fyDM}3xf!d*nX;TPj?dA`?Jw9C$T!rlMYT|b-VZ6xe5@g z!)*6BK&&Qn+lK`Zd$n_0#s?%ecWNiG`FxIIb(x;5a1^Wa83A$>+sD@+l1^ed^a8~8 zlTEpBa9CZV#fjjs8m3Gc$3blFR1RYM1ZT^02eCSxDGGzcril?Gw!c+dH$Et~Pr;Gi z1B&gPWNs88iDkS*600!9h$Kj?O;fRPGaV$FsaO@7nArM(zV+e%-$g0Vi6o9OTkl4yaA}c|__(=d+4Tp2j zCwOdMHXgs>v9d*IBkq_6!DG{41|BQ%+t_DI9?R$sJXULEBc1@VDZ~Sl)!6LV*qCfP z?2J+Xa#@MrT7(BKE5+`Z7r1&9%YAvN8#pvizj7l1mSj5n@?s>{@yS zSXNHZ&q9t&c0U09oXKh~n$4ON_tNLF++bb&gPRfKSias4|2 z&Z%V9wvE0@W+e$Q>lRrt+XnwXGL>yp&lS%FR8~MTXc(Yuso)cUvZa_TCAntI&8Q`^Yelgny9uoW(X%j$GfSCm**1KyOxAeNOF{nSV#m{rC3 zJ}W;+W_!RK<&HqJ3LxzIoy=-5AM|y;V6Akm%n@K#O9VrMAhRS80JEBFtO6BWcJb~% z!7Qfb#AS`C0Ln6GOHdY21xyxE6q)Q|^F>0kc&H$$i*bU#eeSgo%^Jbh(U8{gM8?pBHyceg@{ zySoO0ThJgy(xOF5f#UA&Boqh`TC8Z1ApHRW0;LpM+*&A53X~`R^{(}Pn8{s}%$%FK zXVyJ)_c?nbxwdSzdWt9hWlM?{UXHal^E?`jXxFDjfz9JPj?JjkjEjn7pi*qmh1K5- z`tHx8V>@z)`f3Z7L88tQw(ywGpA_0{UAKhB4C%;4DXIEGBi{?`+-|oc-*F`yn=vZ`j!!295UWzFkH!iPFu9VDCp;R-yw6uRT1}^1i-jgRm%9=l zCu<*c^uzo zJ@-XIg)BlUu1tT4k%HDA9q9ZR+RPny-YoDnXVzutD?G%V9H~cl*c6#z`6O-GqsbQA zn4FmNRg7thTcE@|L5guxI&T3*svv`iWX)=g6Wt|tVs5f}*0 z!67zmYau$aI_euko2G2!D%fF*CpTovPRJDbzV&5%N24Ezk0tW2Nwb!_c}uRhXeNFJ zdXI%SL+&cn$8Os;u0EMZ&t1ai!9)faxw+lRnLc1l@l)H~{fT{iN6-380VWvzj**aD zs{d$7U!YHsDG?W&LX0i01BpL5vf!yJy3H8MQF3w zGnl5wO(4x>hRA~8s|zH}Bk8Qx^h^u zR>w$SK_K_rR%8eudzHRfFw53B0)P`gMqBlGEI_=xL=ED)6^PeSO=CpW_wZ|^txq1s zdv|DD*VfxbGaUJ!&4u#A=amgV`$3nB?A0UYzu$`o49H}m-}wHtjO+-`P6rb<`Vi0z z+kGveK#H44rnqd47cw31WKejtOXE?|<8a!7Rxx-?B*2eSSu8m4IeIYYTiajdbuDU~ zQgIFfWOw)tzn{B=CAC1@Nu~?`GpF$mq>d|TX*VMD&S-V!JuHavbwk}cO+tF z$sFR>d8xfLSrOo<#Q;<6^q+@k8#e~C!Ww0p$jLqCL6Qf&1rMxD%MTmOknBjiCVQOG zfv8AMlF$~wNgDE}7y9GFJJP%2I+3Vgv>Z=NvT@HB3GmxuLJ1B^Hg9oV}Z zySTcv$u`k2Pap>@l>Sb;V4LpJamSr8`(jTEXhZugMXMm1Tn$*hDGkIy97yhU_z>V{ z8rzVvqfW_KZ+*%5ONk_1FiX0z;E+;Rj7%R6szIDo6je@Ag*bMuL-f*W!m0DXZ9IAD zTZvkL%JCG@%Eu|9y{xg2f7;lorMm|#8Vl(aAV$ReqH>o7%n5rTR)34)xQFw%+oq@M z@D91%=x2@Z0=zmt%z_{RAq;*mDCtTwpVOt1;PEmjr*jrKbATWUGa%7hS&*oED)A>@ z9Ldj=OfUfccx=bPUmW*~K!t4UQa+)wNp3Uj!`FzHIjg#_1pEc#Bf{}me1e}fE~m{| zdP=DVa3qVxTHuB~=}AB2MBK?gSkh?Qp(=8X!{ATssnME zB1-Q9`I~{`jwY=6Mk88~`^*epu)#m1MyL2u#btGH?HM7y%PK0DYp6Y#S5k`I#nxoF zs{MRVDx1>9_Bk%9I(Bp!Y>S^g+%Qi|gCx}K@RL+ueGHP&SS3Fcc->ye*w@K<6|6u< zaRtqm*RYM|?*J9k0KF%D&4*nio*5WoLsNXZtMer;IY`gf5@j-0=Dz&UNBE zmO+ZaM;Z&1077$~JGS2s_2q%ABQhYiNpbq%^1KXdgV`q7V+^<>&(0!4dGbv)YvkWI z^1>6qcx#&s`Z|&plC9M%<5D8>MEA38ZEL!WfoI3FY$F{f6^B&M8+DAeeWtlvAHN2|j=col7dCC8W^bx2$a6e2<9k}*F z7t;5F6lAGc8w0QS?#eeP&IvR1ea3!_hj`Jg!FD*IVF=lunC_qTu!;4mx8D&&6M7g2 zr$T_6U6+=V69%7!7mi#y4WIa>Ma0h@3TPfA2LY#{=1tUu7<-=WM?3vxUz*|QM+mMPhD(UPdt5z6?Nw=|#Ij_w41RvhN_ zJI*uAYSNT;7AZdpZFoE@{`S{VTRpkQFGfTBDv-}C;kyb56qEfCdnWL0r$Qy#dBitA z3OKr{2X?SR%=B}Gj=-};!{ns?<(hXsL}eI~w+R}@7+7C&SobrG=F zKjamKkl1$#GrQ(C<8n5OwI$0qpY`{@b61My-=LRh6y|q*ik<;klYG3$ddnz6HD!w7A6PBuChrpb^(*D zEfs?7U@@#B0Yi2JeKZ-|aJ1{-E36!if7f#Wk?lHFhvRx){=lfUbSG9;;KzG@k;n+` zM^<1MYCLuYnIOu|-R9^EpL*J69Fc^B^pV4FN8f1Vv-AVPY;f$2i9#;;;`|k!B%cJw zKf$W%DB>W{bx!Cy)^Em1LLTHM^&cMuujCb??S%8Z)ch|gG#{~i1}KM< z%~XgR8)Fq^waI4K2N$?{^S5&S*Bge8cfch2F2K)9({F_&Bk|@fT?$MS$vThu@`}K1 zwbPJZ6Px0lWc7N?x|lObP%evLy=S-rjYGIzDc&{bd%N=a^d^G$`il$(od;TGCCbX9 zy44uPAKh$Uk&(gK)rHe=@V_Q$)CyjdNXp`eU)jH*CokR7;+KjB%yFqBU{(K}hgJ2w zh0LzUvS2H+G<5)zC%v(rmTp&9>AY4&8&&VJ={?iEvcJ3&;r-A#2G2A$30NsVB&EXU z@JDPY@p%ph=8PThx|ERgDDT(?$MAa6Cp;L^c8+BEkl1l#QxfAtN1vpviS1lznxN>pGsE~!4X(e z=uaOj_x}CAZyzpJE6JH&-57ov^+!ji*!BcA->;dnQ1|eq;H|fA1eM~&EWCVK_~`qF zNj>H&a&YuJk@b$n1M{XUGnMnh5tdD&<}4^}SxWmZsF7`POW4i3v-TH>C#b>E`!7)v{mE^Eh5v+p4t(?dXBd^#ZRL-Tsn55(m*3n9 zE#bIeGugW_92|Wp?mUAQB5_tUBK!=CKW-o2UO&7a+&;F?yU(1a@K1`Ql$|&cd@uM* zRjP-AX;#?*X3HuV*a`m;9f8>YJO<=O@4e-lW^JY5~l zkXLV9YM#dBplBH9ajwJ`@T1xb`pmbl!KXw?){EXt9uRVF-5__Rp6{L+k>)f@QyFu6 zjTB{T@L35!tz7x&JlB^Fv$D@~FBA4>(x%ywo0(*sYu}Npul`$yoTnsIp8%toR@@X^ zw3#2UX2j|Cjf~CHo>yGpieOYlq~^x`$lvDNchY``zX~wl0L{$`OJ%H+LbLt4Mt&|o zh{76PQBiMRts6FJ7IqdTwb9<17dg-Q@(=E9%jWohk>=S9(Pl(Ds(9a86>E9dH%*mA z!Cpi}%WUoRy`MGx@3u6NY2sif2Em^V*?WpDFd)42Bp zt2%GI*eA5gSDtaB029 zHO|RD8utR&k(UD{M_C^-?40@At_(qYa8EDfMxG8Bo4rD6-)vNTIpVwaofI%#KD&wAum;6k zrUCMQS1PJLM3g49?QSqFp&6(KPe?AtVbf=(#G4U)WPuyNke|v+2Mr|p8vt}m_f}Wg zz*)&F=MB2y?!Gm8cbKL&Y0BC=sPhRk`@P-BShI2O+xCLX<(vb-23gx4U-rR??UIjS ziZh?CSK&ELEwo|1f7nxNox2mu+j^lt99z2XGEKyn|Cv#!*a+!ml%$?&vps&bVf_&u zaQaoX;vhSziIzO@`vmf9<+Xd5YPVnf{BUUZNWJjMe?CX4&##7^|5~^$!yWJ5X>rIl zZ?+ITI6zx^pN3ANm%pCw*IF>JhnKDK)tohEiaV_=16isIHX@-`7FPP>f*b$!`9!_} zPTJHb$@oWONUzo%qG5Q=<{swtO%_pt>1%VR$4-H=wC%e_;&kN2~%b- zt9t4VxLGEyb-l)diJora{#?}-BmbFW!g_6k(&aZjr2OP(mac6#TnBw`7b(nSU+9)t z`nw*&0`5qE_-z*1Rs>AXaaDGjv;5a*5AlUf|Lno7yS4ylxKEkoe+#UgTr{+i_}}4q z5^MF9FR2U^pgu5si+RXy$M}w-URlInGYAcB zV=~ly+=$d(u)3c4Zf?)(V-~5ixM2ldt9|-x^ZS)!jCHb9&Ei77HiwvawoA zdh(1yFb-Uw=PQ*hT`G7B%>B*!3(rj-j8wxXSer}9I5GetJr(C^HNxL3a(;D-DO^QU z)g%?xtswR6c(@0mZX4G|CT*UpP0~>(w-K}Z)vYb-$!aW&l6SVyP4V#W2*k9+gEML` zZyIlzzI$E94@6W*kfJZWchTNDq}|d)p(6ZUU{@Ulo7fyL|Mn)nH2^WFHQE1k4|H-kS{n@ZQ^+>{Y4e-cE3V zZyz_6a{tx4do?Q?@9cp1M1M%~;oCd&Fb&D1x%D2t7* z4a7r5&uvTH_fLe$d`sIj=cV2TW>`z^Fl)|_YqwL$6YKIu+yZK}hNxkRD$B}bB7e2# zqG1ykFWry6W!hcm^f?J1M-d@xkUqbfD}G=0M=@*Ntp$7$c8+zP-?sNmcGiC72IKkV z_k_yGKa&I*&DId9LjkLb5TA&1&EM%SZ)ACs|6gKy@3;0fzJqTldAL!8aS$~ta02v; zN=@|H$AnSeSJggFcw_wCgju$S0(fHv#-H`8vu&qtL41OG@Xt52D(qDqjzZ5*-{Gd! zS5w-GvJDWuJxTtmzI*!Sk$4p;?RtLEUJE%VvhUj)IU+UqJ1&5(Leh!GO{F<41t9zo zZ-iglN^SKAIWEb%W0<=vKFRw1(|BQp*ZEGbQZzKwRtLvrh|JVhzXBGROrq1Xkk&0|{C&exuy$0(A z#0-Xep!U@O7uL{C5agVNFxB|YhuDq*f2^2I$42Y2Ef&V`upy^i-=GjXapMJq%f*jf z4L|kmQg_>kBVq-ldz*?0I=BzJhU^7Vtw#s)G;cEjK6-p_pNb-31%7<_=^u5_s>=PqmM7`y>c3WEvS1<@aqZh%qrJ#*U-eKWVqY&`7E|3(LMm3;Z?A@n&c2Ux@0+*z(KGCx+s*P4 z!tPBu$uAK=gHaiX`idO2jTnp_-)-9w@?Ck!9PX;yAwz+Wg?YG;HVI=_qukkkS^#FZ zgh@BNAog`wGIk%1^?*3{7OD>OorCo`w3i9HR zvPV4@)Wb|vZ~~k)2~VHl-*m{r%xSp^;YzPNvX`x~6dOOLo`k&klF}_d3Av_9Nu-@T zp4i7#Lq6I4v}=F^Qr7&=h=bUOkqb66@wm+`!IQ;7utm<=mG3&-y01_j{|uasXQ-(cE{AjQPi&;3f{*$AY0>% zN^>26t=C?D4 z-(H_K2NS0KUrR3NguL77tnPI<@gy8z@Z>RZxnq7orCw|(kW5w`7uU;QQD#aM z>hyT#uqfF|-}6^w2DpC8J^GO?(7|W-n8ee*FlT>3+524rC}5GW2#xU!GL(TufA6E; zRwyxk@+Qu61#K-5=efQf`j=ASHh^3K<~VMir>+D;?&ac?pkwy3W|<+-4F|0}2-G?* zC;yv58Jcw)-9qJcnV2Z`cnj{yN8Cf?wSJ&vN+1VwJoA*KRwxaeIe_OCH>6W%kn zjwiwL$#JN+V{302T!6}x2DG@IiS~>la#~EhjR_;~=Q=gPsvIfB<nm^b0 zBLP1wPWilV3_+IM8jQ3ArL%VAzOe@Kbi^fG}DrV9c7lt;SrE)ZCWtWE=oH&${O_%_2j84;jwDkXBe$E6d7Dy5x6R0#}Y&|q>>FE65{ z4tUNS@`lKEc{++Vw;T-m(a}O!qz-rvr*-yMD(X`h+%N_Z?>LoYAi9aj$*hivL z3F-{jQ{J+bxZq9)_m;>Y$9<6YMKZ`lKOjd@JEU*h#cB*ObNC2_u%NUBHkW?W{DElU zCoMCOG&GEi2dyo?l9B8$+a|9VOqpiykdB<9x3UtaMST?)(HDoU3cR)*2D=t%h?lmg z4uk946&6Lt5M$rQ5D0kDQ}zx>^YUg2*oVnP)E=;j)DpEPBa4XxUs%`JL6ea2mYAzt z;N>SbOemjV!AAAdVPDL~i>4pGSRE`9L6J6U*d@3bUYDHiR|7=4^gXMBJIpsa9eW_! zUdd{1#viJ2Vk{gsaP@$Jd=ac!@RBq~#hlp}J9xY;=m{#=7!l#+i&k*xVEO`b7}iGo&c)?0J3G?Djf;DcbN?Jk|jY z6-?sGXQ#a<4=IPe#(8TNa9$Sh$o>-D6#50hYzQPr0UJBlEcZIWx*L>#APN*wz|IPr zA?z~k+#6eeocZAXq9~y5>Zh=upeHw^USSi+1>*AY9|UqJ^Y|cua^z>s^404}oKB{Z zDR3BN2Op~g@cx;tLOZ+!(k9prallW8|NB5hfuD`mw$&C&hO;MznCT)|U#ECrQJoxP zXZ|8AV8dV9HeL)L+xL1;1+b^JVWetJImNoJmn>GXAjSfhVUSO z%E?u1K1ZHx+)OY7PcgU+O0jt|F40RJ{cLB^XsS=1huAFTWXEx!E1^UX)O%MJKuBv8EMNKBf^7yXkfoE^Bnv@r%~tJG&WCghE7Zg!6D zdC@eBhZ@`=ghnEU%ycVuxF@(SZUxSyP=inNuJ|e`4U6E2b<-- z-bt@sv{Vj!A>~8QBc)UcTnA7Bx~;A)A!QZc?A@cf3zjF5y# z7=@*6P&mkEO0@d%(IF!5zPcZdSI_jjNx~jhN@VVgRQ?4DJ~%{NR>{4Cp_b9t0CQL1 zFoIM|%@qkurhGpH|2weKs)E-UmZ~O`y=KWi^{c8%VqIJk`qj({Sg_rJN;qcFJtH*y4EYu@k-r{xMM7@)Q-9G(9nt~bpE%C9g zD>^pq3%i!5A88tHBIuF`_Fvox+)N`c&e9bb(BVvTj`%zLyhhg!>6=wndcY|r()bru zssSpvPoGAx5NWJ3FCfa)1;y;CueEA>Mc+^x%q$c3IdDnAyaM_bg``j~2vaZ_dXTe^ zhBM3Y)+)T7M^r&LDWJ>1bxP`VOt0enn@{i(?rXht5TRSc2cm3DFFwD92XHi|3g34I z=scnBR`9kS+vQm7Iw_r}pVZpHIiiG^^0c=fB4*q9>Nj|2*vFUmb74MlW2;fM1dM~6 zo@^3@992sC{ue=FnA3lZr|dV4VjujQ&qK zFs~>~`?^ljo{LaD1rx9DVKBpY>lJFg>#!j->Klf6LO#`MF@jK~ypYWiiRH zhUf`!*>w{Xw|C#JLO|*XaPz?Ao&WUY{ke)7WK64FWCQy$&R%f8d z#^B5ACC^MZe3E_Q-~mjQftIPcU$san@GCqyugfd+$Bm}w&nk3un=y3(yihwt0rw@% zoq<}>0eDR3h@?f&7F11$h65m4fv&KgAD%k%HFrzhrC>To-*x%-n`(*3z?UCriqN?- z#Uvy%Nc&L7V6qwEp9lbB5!yoeE4`KHJU)w1R&jo98~6*?QxW%UlI|*LSYmzju2pes zK)-rEsQAjxRnf}xvOwdCoV)YnI(mXg%d-u&(N^^owki4kK)UnL=|A!+X^{yhdoeZd zE2jY~H?r9ZGw7So$DpYA_&HIEh@6?@#N@AF&-J4|<2TF>P)r9djzZ^QT)|qx99$g6 z^eeO+<0s%1+6q$caZ_6vK1PJgDqVV>tzT9SSlUcHyK~-JsMKI~ zf*%FfV89{zPisKMvwb7+ogmQqJZG{ua&!L9B*n9E!;7N|tF0!>kNxfM*W@?wH8?F( z6tK_5t$6JQ{!Sc9eJ27OoRET8w*hpbW`6!|%*2K;A3b(%VdOVH9R2RA#h=(7ehRJk zumT4!BsOIb%JjOKug%Q|}nQPp4miK;McrFQ+t#UT4OGjRb@EvWJID3kCKkD}$I z|wB}4v8i`*)q^Ntt4eD`EpoopEU zPt`K%nt_YTs0<;Ks4uA}>9tuy&)Wj{pZAV^c^-&-X3{q)@J8iy1Nq6n2e#aNQV}*` zA9e!&zWgb}eI zTeJ9A4D1)K6&iZgE0G^?P|XCd_Afs$=?paye?Q4{IrZ@3-=E!-bl$QY4sffkigls^bv5uC8Y;5RlOPWOpcbv7*EDS~R zlXP!Xli>>FSr*@aJ{)Iw2syDAnc(bwPcbFrSpPZEtU0gS5y|sTS?{U2wf%AO_nvTr zZt2%tR6WmBp0zGFNRPSV88y;9(_q>TQeM8o?Mjk)&E>*X)u8yAt7WRTd_CZHtLf(J zn-}XejW#_d|FtdKvkRnL$!lf*Y4!_tBv~Z3us=>&JjyVN%=$_O%#B?csp)kM$-%;+B;h1bs^;%+QV1GOE!j<6xwjsdm$>k3 zHHxIJ>$yS6-W0;Yw_KVr-d3xSN+Swm&3Fxm}G?jNm71mvW!w=nEn}r`w8PgIB z55*@L!|sS62>#Uf85U29%a>Yd1*~(8syL!B}du(9I=tJWsBMW zdi$=44yv|>R8|rmpE7CV#@%bsyuEYMuJIL*0)QqQ-qPax_9+RMuVnL9EALGwY5wZ? z?qH@hGOgn6hdkf14f`&B0Lth6b`%oG71{jM@`q}vu!EE@{$P0P(=)gHvDVLYFfRYO z+M?HJ4zqQ=l+iWQ+bcnS*Ai#aG&9o?4kKqlYn`&UW_fYV$d=ZMv15(kZbzr%8H;o4 zjHN^UnHNrfY}gut>+)$Cqv2wgWESS{4AxhHW_YPP-xd06#vuB)z6t|t#n#I5?-pSO zR@N&1-S);Q=z7XE-<}%UPOnPer)w<+v5%TsbGB_$PrsUQSo67Dgux!SzzIZKx*`L? ze8A1)W%0Wo<8wyrF=wAS#0=biS1qCpswyy!_x)ukhWUUjlc8yYv|#q0shgkT_F`?8 zVnFkn&D-SffqM(m61h)Di@pS|AGCxlS57BCRh{c{HyDUQ2Pt+J#4$(eBNxFg$PYFZ z5ZT!w>;}JkG&=-W&GQj0Qenunq*sx82nGX+6PXWVzc6H4o7a3;v#5yMb%plsA&zNg zN8!`pFGPu87br}nqSy`@>*<1ww8&qZ8G>9;jIQ4WF6FNd{Oh3jH#2nn^EKV}->~am zvYu8a=Av+)!Y6mveX@L~9Icm6T%hdJy(2JNM>~7kx#GxK;-5sWmEw8LEG^WIVb`+Br>w%*|5Ba?;?E*C zKK}9OJo$N$4*|BsEaof60)6OrsEpJ^jL&T!=gcGNH>lNM{Rwt4IG+zCpK20RSvn|5KrFC~j12I$eX{`Mz(8nm>%iJ&$=$-^Hf`@cg! zzcRcu;4`NXVJ?685H@^`3Vt?okOjQ#qF{(ySRl&H116&VPyU$M?X1xy;Maktq&4hR z%q7<@&&3!e?bu{R`I3EV8RLBNMSfTYueM>jejNIp0KjF)w`WQ<*P}bUoXYQe2j23hu=wS}_akpi{JOt3r4Y3P z*x9^WsYKd*7S_Ic{@Zi5gIRU19pl2S_o$JFO~4I{Qw@*qZFe3$f)>a5#xxpze+Oy3 zR`Cx*s%rkK=J`sTO^(#p1Ds8lrFacs-Pnasxy1Eo`V7I0EFe!^LE`H!7Q$`Ln3UHQBBxLmEmbZa_PoUKki>#TTn+QTZ+b_`qub?G0dvw$z06kZ0~G0^iiT4zt5 zb%sl}20x}0ja&5fWuK#n^O2Cyqb-77OJ59iMLeW`NLc*jKw$Rd8KD^}j?4tMsO-Q} z1z_h>Yn=l}aZ~{(lyR8_{nMVs+s&=xbd#C1G;pZ1&Kz)_2Z$Gda$-2z9rg)L+&|+8Rpig zu|d;?8~ETOstUHxIyBU3mV$_L9$Kz_5u~6V|M{v7VeQ9LgI-*QtjAeEiJ|K!dK!@e z2vzb(Ji86M=tq;@TWz{pe&_rE!?XJEf4#65n*5J4mVbur2WT(Fv4V>5A2nrc7Uc#;* zBfi$1iM%do{>;ymW)eSeoGY0YnfJ37-)mzS+LZ~q6wPJmx&)Ur=udVTQmbnmqk3O8 zdy9#Z(w`jX(`)FYvN^WfP2Z6Cb))OFfvIkD)%7PFC1-

    *O^Wo|Y{<5zZr^>yBEkx|?`_j2!lYo= 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 BtsejY literal 0 HcmV?d00001 diff --git a/docs/graphs/sup/dgemm_rrr_kbl_nt1.png b/docs/graphs/sup/dgemm_rrr_kbl_nt1.png new file mode 100644 index 0000000000000000000000000000000000000000..a383675a63670da1244b4af915af99474bff5034 GIT binary patch literal 188468 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%0D#Usi9#s32m2F7aALB_(!2 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

    |5PFRQG+*F(+V#rxK>0rpgW{>}6s%RGD?OeF2QG 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 1 && theid == legend_plot_id end end @@ -195,7 +200,7 @@ box( ax1, 'on' ); titl = title( titlename ); set( titl, 'FontWeight', 'normal' ); % default font style is now 'bold'. -if 1 == 1 +if impl == 'octave' tpos = get( titl, 'Position' ); % default is to align across whole figure, not box. tpos(1) = tpos(1) + -40; set( titl, 'Position', tpos ); % here we nudge it back to centered with box. diff --git a/test/sup/octave/plot_panel_trxsh.m b/test/sup/octave/plot_panel_trxsh.m index 7c8e4ba4b..405839d2d 100644 --- a/test/sup/octave/plot_panel_trxsh.m +++ b/test/sup/octave/plot_panel_trxsh.m @@ -1,5 +1,5 @@ function r_val = plot_panel_trxsh ... - ( + ( ... cfreq, ... dflopspercycle, ... nth, ... @@ -9,7 +9,8 @@ function r_val = plot_panel_trxsh ... smalldims, ... dirpath, ... arch_str, ... - vend_str + vend_str, ... + impl ... ) %cfreq = 1.8; @@ -45,14 +46,14 @@ n_opsupnames = size( opsupnames, 1 ); if 1 == 1 %fig = figure('Position', [100, 100, 2400, 1500]); - fig = figure('Position', [100, 100, 1860, 1000]); + fig = figure('Position', [100, 100, 2800, 1500]); orient( fig, 'portrait' ); set(gcf,'PaperUnits', 'inches'); - if 0 == 1 % matlab - set(gcf,'PaperSize', [11 17.5]); - set(gcf,'PaperPosition', [0 0 11 17.5]); + if impl == 'matlab' + set(gcf,'PaperSize', [11.5 20.4]); + set(gcf,'PaperPosition', [0 0 11.5 20.4]); set(gcf,'PaperPositionMode','manual'); - else % octave 4.x + else % impl == 'octave' % octave 4.x set(gcf,'PaperSize', [10 17.5]); set(gcf,'PaperPositionMode','auto'); end @@ -123,9 +124,9 @@ for opi = 1:n_opsupnames 4, 7, ... cfreq, ... dflopspercycle, ... - opi ); + opi, impl ); - clear data_st_?gemm_* + clear data_st_*gemm_*; clear data_blissup; clear data_blislpab; clear data_eigen; @@ -137,12 +138,14 @@ for opi = 1:n_opsupnames end % Construct the name of the file to which we will output the graph. -outfile = sprintf( 'fig_%s_%s_%s_nt%d.pdf', oproot, stor_str, arch_str, nth ); +outfile = sprintf( 'l3sup_%s_%s_%s_nt%d.pdf', oproot, stor_str, arch_str, nth ); % Output the graph to pdf format. %print(gcf, 'gemm_md','-fillpage','-dpdf'); %print(gcf, outfile,'-bestfit','-dpdf'); -if 1 == 1 +if impl == 'octave' print(gcf, outfile); +else % if impl == 'matlab' +print(gcf, outfile,'-bestfit','-dpdf'); end diff --git a/test/sup/octave/runme.m b/test/sup/octave/runme.m index 30c2643be..5fd894c2b 100644 --- a/test/sup/octave/runme.m +++ b/test/sup/octave/runme.m @@ -1,4 +1,8 @@ -% has -plot_panel_trxsh(3.5,16,1,'st','d','ccc',[ 6 8 4 ],'../results','has','MKL'); close; clear all; -plot_panel_trxsh(3.5,16,1,'st','d','rrr',[ 6 8 4 ],'../results7','has','MKL'); close; clear all; +% kabylake +plot_panel_trxsh(3.6,16,1,'st','d','rrr',[ 6 8 4 ],'../results/kabylake/20190531/4_800_4_mt201_last400','kbl','MKL','matlab'); close; clear all; +plot_panel_trxsh(3.6,16,1,'st','d','ccc',[ 6 8 4 ],'../results/kabylake/20190531/4_800_4_mt201_last400','kbl','MKL','matlab'); close; clear all; + +% epyc +plot_panel_trxsh(3.0,8,1,'st','d','rrr',[ 6 8 4 ],'../results/epyc/20190531/4_800_4_mt256_last400','epyc','MKL','matlab'); close; clear all; +plot_panel_trxsh(3.0,8,1,'st','d','ccc',[ 6 8 4 ],'../results/epyc/20190531/4_800_4_mt256_last400','epyc','MKL','matlab'); close; clear all; From d5903a8393f6b8f8ab6654313ec43de8fc1cd1a0 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Mon, 3 Jun 2019 17:14:56 -0500 Subject: [PATCH 065/109] Minor edits to docs/PerformanceSmall.md. Details: - Added performance analysis to "Comments" section of both Kaby Lake and Epyc sections. - Added emphasis to certain passages. --- docs/PerformanceSmall.md | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/docs/PerformanceSmall.md b/docs/PerformanceSmall.md index 50d99e498..4418dbe45 100644 --- a/docs/PerformanceSmall.md +++ b/docs/PerformanceSmall.md @@ -55,11 +55,11 @@ can be issued per cycle (per core); register (for the datatype in question); and 3. 2.0, since an FMA instruction fuses two operations (a multiply and an add). -The problem size range, represented on the x-axis, is usually sampled in +The problem size range, represented on the x-axis, is sampled in increments of 4 up to 800 for the cases where one or two dimensions is small (and constant) -and up to 400 in the case where all dimensions (m, n, and k) are bound to the -problem size (i.e., square matrices). +and up to 400 in the case where all dimensions (e.g. _m_, _n_, and _k_) are +bound to the problem size (i.e., square matrices). Note that the constant small matrix dimensions were chosen to be _very_ small--in the neighborhood of 8--intentionally to showcase what happens when @@ -67,18 +67,18 @@ at least one of the matrices is abnormally "skinny." Typically, organizations and individuals only publish performance with square matrices, which can miss the problem sizes of interest to many applications. Here, in addition to square matrices (shown in the seventh column), we also show six other scenarios where -one or two `gemm` dimensions (of m, n, and k) is small. +one or two `gemm` dimensions (of _m,_ _n_, and _k_) is small. The legend in each graph contains two entries for BLIS, corresponding to the -two black lines, one solid and one dotted. The dotted line ("BLIS conv") +two black lines, one solid and one dotted. The dotted line, **"BLIS conv"**, represents the conventional implementation that targets large matrices. This was the only implementation available in BLIS prior to the addition to the -small/skinny matrix support. The solid line ("BLIS sup") makes use of the +small/skinny matrix support. The solid line, **"BLIS sup"**, makes use of the new small/skinny matrix implementation for certain small problems. Whenever these results differ by any significant amount (beyond noise), it denotes a problem size for which BLIS employed the new small/skinny implementation. -Put another way, the delta between these two lines represents the performance -improvement between BLIS's previous status quo and the new regime. +Put another way, **the delta between these two lines represents the performance +improvement between BLIS's previous status quo and the new regime.** Finally, each point along each curve represents the best of three trials. @@ -135,7 +135,8 @@ size of interest so that we can better assist you. * Hardware limits: 800MHz - 3.8GHz * Adjusted minimum: 3.7GHz * Comments: - * + * For both row- and column-stored matrices, BLIS's new small/skinny matrix implementation is competitive with (or exceeds the performance of) the next highest-performing solution (typically MKL), except for a few cases of where the _k_ dimension is very small. It is likely the case that this shape scenario begs a different kernel approach, since the BLIS microkernel is inherently designed to iterate over many _k_ dimension iterations (which leads them to incur considerable overhead for small values of _k_). + * For the classic case of `dgemm_nn` on square matrices, BLIS is the fastest implementation for the problem size range of approximately 80 to 180. BLIS is also competitive in this general range for other transpose parameter combinations (`nt`, `tn`, and `tt`). ### Kaby Lake results @@ -193,7 +194,8 @@ d affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 6 * Hardware limits: 1.2GHz - 2.0GHz * Adjusted minimum: 2.0GHz * Comments: - * + * As with Kaby Lake, BLIS's new small/skinny matrix implementation is competitive with (or exceeds the performance of) the next highest-performing solution, except for a few cases of where the _k_ dimension is very small. + * For the classic case of `dgemm_nn` on square matrices, BLIS is the fastest implementation for the problem size range of approximately 12 to 256. BLIS is also competitive in this general range for other transpose parameter combinations (`nt`, `tn`, and `tt`). ### Epyc results From 2ae8faa252f991ce3e2929f427237482d44515a9 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Mon, 3 Jun 2019 18:35:19 -0500 Subject: [PATCH 066/109] ReleaseNotes.md update in advance of next version. Details: - Updated ReleaseNotes.md in preparation for next version. - CREDITS file update. --- CREDITS | 1 + docs/ReleaseNotes.md | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/CREDITS b/CREDITS index 1b076816e..0d33f534f 100644 --- a/CREDITS +++ b/CREDITS @@ -57,6 +57,7 @@ but many others have contributed code and feedback, including Ilya Polkovnichenko Jack Poulson @poulson (Stanford) Mathieu Poumeyrol @kali + Christos Psarras @ChrisPsa (RWTH-Aachen) @qnerd Michael Rader @mrader1248 Pradeep Rao @pradeeptrgit (AMD) diff --git a/docs/ReleaseNotes.md b/docs/ReleaseNotes.md index 6266d634e..d1a6baece 100644 --- a/docs/ReleaseNotes.md +++ b/docs/ReleaseNotes.md @@ -4,6 +4,7 @@ ## Contents +* [Changes in 0.6.0](ReleaseNotes.md#changes-in-060) * [Changes in 0.5.2](ReleaseNotes.md#changes-in-052) * [Changes in 0.5.1](ReleaseNotes.md#changes-in-051) * [Changes in 0.5.0](ReleaseNotes.md#changes-in-050) @@ -34,6 +35,34 @@ * [Changes in 0.0.2](ReleaseNotes.md#changes-in-002) * [Changes in 0.0.1](ReleaseNotes.md#changes-in-001) +## Changes in 0.6.0 +June 3, 2019 + +Improvements present in 0.6.0: + +Framework: +- Implemented small/skinny/unpacked (sup) framework for accelerated level-3 performance when at least one matrix dimension is small (or very small). For now, only `dgemm` is optimized, and this new implementation currently only targets Intel Haswell through Coffee Lake, and AMD Zen-based Ryzen/Epyc. (The existing kernels should extend without significant modification to Zen2-based Ryzen/Epyc once they are available.) Also, multithreaded parallelism is not yet implemented, though application-level threading should be fine. (AMD) +- Changed function pointer usages of `void*` to new, typedef'ed type `void_fp`. +- Allow compile-time disabling of BLAS prototypes in BLIS, in case the application already has access to prototypes. +- In `bli_system.h`, define `_POSIX_C_SOURCE` to `200809L` if the macro is not already defined. This ensures that things such as pthreads are properly defined by an application that has `#include "blis.h"` but omits the definition of `_POSIX_C_SOURCE` from the command-line compiler options. (Christos Psarras) + +Kernels: +- None. + +Build system: +- Updated the way configure and the top-level Makefile handle installation prefixes (`prefix`, `exec_prefix`, `libdir`, `includedir`, `sharedir`) to better conform with GNU conventions. +- Improved clang version detection. (Isuru Fernando) +- Use pthreads on MinGW and Cygwin. (Isuru Fernando) + +Testing: +- Added Eigen support to test drivers in `test/3`. +- Fix inadvertently hidden `xerbla_()` in blastest drivers when building only shared libraries. (Isuru Fernando, M. Zhou) + +Documentation: +- Added `docs/PerformanceSmall.md` to showcase new BLIS small/skinny `dgemm` performance on Kaby Lake and Epyc. +- Added Eigen results (3.3.90) to performance graphs showcased in `docs/Performance.md`. +- Added BLIS thread factorization info to `docs/Performance.md`. + ## Changes in 0.5.2 March 19, 2019 From 5052917179fcee8c807696c3bc2bea557fa02050 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Mon, 3 Jun 2019 18:37:20 -0500 Subject: [PATCH 067/109] CHANGELOG update (0.6.0) --- CHANGELOG | 748 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 743 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 3ddf23302..6f1a1e638 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,10 +1,694 @@ -commit 9204cd0cb0cc27790b8b5a2deb0233acd9edeb9b (HEAD -> master, tag: 0.5.2) +commit 18c876b989fd0dcaa27becd14e4f16bdac7e89b3 (HEAD -> master, tag: 0.6.0) +Author: Field G. Van Zee +Date: Mon Jun 3 18:37:19 2019 -0500 + + Version file update (0.6.0) + +commit 0f1b3bf49eb593ca7bb08b68a7209f7cd550f912 (origin/master, origin/HEAD) +Author: Field G. Van Zee +Date: Mon Jun 3 18:35:19 2019 -0500 + + ReleaseNotes.md update in advance of next version. + + Details: + - Updated ReleaseNotes.md in preparation for next version. + - CREDITS file update. + +commit 27da2e8400d900855da0d834b5417d7e83f21de1 +Author: Field G. Van Zee +Date: Mon Jun 3 17:14:56 2019 -0500 + + Minor edits to docs/PerformanceSmall.md. + + Details: + - Added performance analysis to "Comments" section of both Kaby Lake and + Epyc sections. + - Added emphasis to certain passages. + +commit 09ba05c6f87efbaadf085497dc137845f16ee9c5 +Author: Field G. Van Zee +Date: Mon Jun 3 16:53:19 2019 -0500 + + Added sup performance graphs/document to 'docs'. + + Details: + - Added a new markdown document, docs/PerformanceSmall.md, which + publishes new performance graphs for Kaby Lake and Epyc showcasing + the new BLIS sup (small/skinny/unpacked) framework logic and kernels. + For now, only single-threaded dgemm performance is shown. + - Reorganized graphs in docs/graphs into docs/graphs/large, with new + graphs being placed in docs/graphs/sup. + - Updates to scripts in test/sup/octave, mostly to allow decent output + in both GNU octave and Matlab. + - Updated README.md to mention and refer to the new PerformanceSmall.md + document. + +commit 6bf449cc6941734748034de0e9af22b75f1d6ba1 +Merge: abd8a9fa a4e8801d +Author: Field G. Van Zee +Date: Fri May 31 17:42:40 2019 -0500 + + Merge branch 'amd' + +commit a4e8801d08d81fa42ebea6a05a990de8dcedc803 (origin/amd, amd) +Author: Field G. Van Zee +Date: Fri May 31 17:30:51 2019 -0500 + + Increased MT sup threshold for double to 201. + + Details: + - Fine-tuned the double-precision real MT threshold (which controls + whether the sup implementation kicks for smaller m dimension values) + from 180 to 201 for haswell and 180 to 256 for zen. + - Updated octave scripts in test/sup/octave to include a seventh column + to display performance for m = n = k. + +commit abd8a9fa7df4569aa2711964c19888b8e248901f (origin/pfhp) +Author: Field G. Van Zee +Date: Tue May 28 12:49:44 2019 -0500 + + Inadvertantly hidden xerbla_() in blastest (#313). + + Details: + - Attempted a fix to issue #313, which reports that when building only + a shared library (ie: static library build is disabled), running the + BLAS test drivers can fail because those drivers provide their own + local version of xerbla_() as a clever (albeit still rather hackish) + way of checking the error codes that result from the individual tests. + This local xerbla_() function is never found at link-time because the + BLAS test drivers' Makefile imports BLIS compilation flags via the + get-user-cflags-for() function, which currently conveys the + -fvisibility=hidden flag, which hides symbols unless they are + explicitly annotated for export. The -fvisibility=hidden flag was + only ever intended for use when building BLIS (not for applications), + and so the attempted solution here is to omit the symbol export + flag(s) from get-user-cflags-for() by storing the symbol export + flag(s) to a new BULID_SYMFLAGS variable instead of appending it + to the subconfigurations' CMISCFLAGS variable (which is returned by + every get-*-cflags-for() function). Thanks to M. Zhou for reporting + this issue and also to Isuru Fernando for suggesting the fix. + - Renamed BUILD_FLAGS to BUILD_CPPFLAGS to harmonize with the newly + created BUILD_SYMFLAGS. + - Fixed typo in entry for --export-shared flag in 'configure --help' + text. + +commit 755730608d923538273a90c48bfdf77571f86519 +Author: Field G. Van Zee +Date: Thu May 23 17:34:36 2019 -0500 + + Minor rewording of language around mt env. vars. + +commit ba31abe73c97c16c78fffc59a215761b8d9fd1f6 +Author: Field G. Van Zee +Date: Thu May 23 14:59:53 2019 -0500 + + Added BLIS theading info to Performance.md. + + Details: + - Documented the BLIS environment variables that were set + (e.g. BLIS_JC_NT, BLIS_IC_NT, BLIS_JR_NT) for each machine and + threading configuration in order to achieve the parallelism reported + on in docs/Performance.md. + +commit cb788ffc89cac03b44803620412a5e83450ca949 +Author: Field G. Van Zee +Date: Thu May 23 13:00:53 2019 -0500 + + Increased MT sup threshold for double to 180. + + Details: + - Increased the double-precision real MT threshold (which controls + whether the sup implementation kicks for smaller m dimension values) + from 80 to 180, and this change was made for both haswell and zen + subconfigurations. This is less about the m dimension in particular + and more about facilitating a smoother performance transition when + m = n = k. + +commit 057f5f3d211e7513f457ee6ca6c9555d00ad1e57 +Author: Field G. Van Zee +Date: Thu May 23 12:51:17 2019 -0500 + + Minor build system housekeeping. + + Details: + - Commented out redundant setting of LIBBLIS_LINK within all driver- + level Makefiles. This variable is already set within common.mk, and + so the only time it should be overridden is if the user wants to link + to a different copy of libblis. + - Very minor changes to build/gen-make-frags/gen-make-frag.sh. + - Whitespace and inconsequential quoting change to configure. + - Moved top-level 'windows' directory into a new 'attic' directory. + +commit 32392cfc72af7f42da817a129748349fb1951346 +Author: Jeff Hammond +Date: Tue May 14 15:52:30 2019 -0400 + + add info about CXX in configure (#311) + +commit fa7e6b182b8365465ade178b0e4cd344ff6f6460 +Author: Field G. Van Zee +Date: Wed May 1 19:13:00 2019 -0500 + + Define _POSIX_C_SOURCE in bli_system.h. + + Details: + - Added + #ifndef _POSIX_C_SOURCE + #define _POSIX_C_SOURCE 200809L + #endif + to bli_system.h so that an application that uses BLIS (specifically, + an application that #includes blis.h) does not need to remember to + #define the macro itself (either on the command line or in the code + that includes blis.h) in order to activate things like the pthreads. + Thanks to Christos Psarras for reporting this issue and suggesting + this fix. + - Commented out #include in bli_system.h, since I don't + think this header is used/needed anymore. + - Comment update to function macro for bli_?normiv_unb_var1() in + frame/util/bli_util_unb_var1.c. + +commit 3df84f1b5d5e1146bb01bfc466ac20c60a9cc859 +Author: Field G. Van Zee +Date: Sat Apr 27 21:27:32 2019 -0500 + + Minor bugfixes in sup dgemm implementation. + + Details: + - Fixed an obscure but in the bli_dgemmsup_rv_haswell_asm_5x8n() kernel + that only affected the beta == 0, column-storage output case. Thanks + to the BLAS test drivers for catching this bug. + - Previously, bli_gemmsup_ref_var1n() and _var2m() were returning if + k = 0, when the correct action would be to scale by beta (and then + return). Thanks to the BLAS test drivers to catching this bug. + - Changed the sup threshold behavior such that the sup implementation + only kicks in if a matrix dimension is strictly less than (rather than + less than or equal to) the threshold in question. + - Initialize all thresholds to zero (instead of 10) by default in + ref_kernels/bli_cntx_ref.c. This, combined with the above change to + threshold testing means that calls to BLIS or BLAS with one or more + matrix dimensions of zero will no longer trigger the sup + implementation. + - Added disabled debugging output to frame/3/bli_l3_sup.c (for future + use, perhaps). + +commit ecbdd1c42dcebfecd729fe351e6bb0076aba7d81 +Author: Field G. Van Zee +Date: Sat Apr 27 19:38:11 2019 -0500 + + Ceased use of BLIS_ENABLE_SUP_MR/NR_EXT macros. + + Details: + - Removed already limited use of the BLIS_ENABLE_SUP_MR_EXT and + BLIS_ENABLE_SUP_NR_EXT macros in bli_gemmsup_ref_var1n() and + bli_gemmsup_ref_var2m(). Their purpose was merely to avoid a long + conditional that would determine whether to allow the last iteration + to be merged with the second-to-last iteration. Functionally, the + macros were not needed, and they ended up causing problems when + building configuration families such as intel64 and x86_64. + +commit aa8a6bec3036a41e1bff2034f8ef6766a704ec49 +Author: Field G. Van Zee +Date: Sat Apr 27 18:53:33 2019 -0500 + + Fixed typo in --disable-sup-handling macro guard. + + Details: + - Fixed an incorrectly-named macro guard that is intended to allow + disabling of the sup framework via the configure option + --disable-sup-handling. In this case, the preprocessor macro, + BLIS_DISABLE_SUP_HANDLING, was still named by its name from an older + uncommitted version of the code (BLIS_DISABLE_SM_HANDLING). + +commit b9c9f03502c78a63cfcc21654b06e9089e2a3822 +Author: Field G. Van Zee +Date: Sat Apr 27 18:44:50 2019 -0500 + + Implemented gemm on skinny/unpacked matrices. + + Details: + - Implemented a new sub-framework within BLIS to support the management + of code and kernels that specifically target matrix problems for which + at least one dimension is deemed to be small, which can result in long + and skinny matrix operands that are ill-suited for the conventional + level-3 implementations in BLIS. The new framework tackles the problem + in two ways. First the stripped-down algorithmic loops forgo the + packing that is famously performed in the classic code path. That is, + the computation is performed by a new family of kernels tailored + specifically for operating on the source matrices as-is (unpacked). + Second, these new kernels will typically (and in the case of haswell + and zen, do in fact) include separate assembly sub-kernels for + handling of edge cases, which helps smooth performance when performing + problems whose m and n dimension are not naturally multiples of the + register blocksizes. In a reference to the sub-framework's purpose of + supporting skinny/unpacked level-3 operations, the "sup" operation + suffix (e.g. gemmsup) is typically used to denote a separate namespace + for related code and kernels. NOTE: Since the sup framework does not + perform any packing, it targets row- and column-stored matrices A, B, + and C. For now, if any matrix has non-unit strides in both dimensions, + the problem is computed by the conventional implementation. + - Implemented the default sup handler as a front-end to two variants. + bli_gemmsup_ref_var2() provides a block-panel variant (in which the + 2nd loop around the microkernel iterates over n and the 1st loop + iterates over m), while bli_gemmsup_ref_var1() provides a panel-block + variant (2nd loop over m and 1st loop over n). However, these variants + are not used by default and provided for reference only. Instead, the + default sup handler calls _var2m() and _var1n(), which are similar + to _var2() and _var1(), respectively, except that they defer to the + sup kernel itself to iterate over the m and n dimension, respectively. + In other words, these variants rely not on microkernels, but on + so-called "millikernels" that iterate along m and k, or n and k. + The benefit of using millikernels is a reduction of function call + and related (local integer typecast) overhead as well as the ability + for the kernel to know which micropanel (A or B) will change during + the next iteration of the 1st loop, which allows it to focus its + prefetching on that micropanel. (In _var2m()'s millikernel, the upanel + of A changes while the same upanel of B is reused. In _var1n()'s, the + upanel of B changes while the upanel of A is reused.) + - Added a new configure option, --[en|dis]able-sup-handling, which is + enabled by default. However, the default thresholds at which the + default sup handler is activated are set to zero for each of the m, n, + and k dimensions, which effectively disables the implementation. (The + default sup handler only accepts the problem if at least one dimension + is smaller than or equal to its corresponding threshold. If all + dimensions are larger than their thresholds, the problem is rejected + by the sup front-end and control is passed back to the conventional + implementation, which proceeds normally.) + - Added support to the cntx_t structure to track new fields related to + the sup framework, most notably: + - sup thresholds: the thresholds at which the sup handler is called. + - sup handlers: the address of the function to call to implement + the level-3 skinny/unpacked matrix implementation. + - sup blocksizes: the register and cache blocksizes used by the sup + implementation (which may be the same or different from those used + by the conventional packm-based approach). + - sup kernels: the kernels that the handler will use in implementing + the sup functionality. + - sup kernel prefs: the IO preference of the sup kernels, which may + differ from the preferences of the conventional gemm microkernels' + IO preferences. + - Added a bool_t to the rntm_t structure that indicates whether sup + handling should be enabled/disabled. This allows per-call control + of whether the sup implementation is used, which is useful for test + drivers that wish to switch between the conventional and sup codes + without having to link to different copies of BLIS. The corresponding + accessor functions for this new bool_t are defined in bli_rntm.h. + - Implemented several row-preferential gemmsup kernels in a new + directory, kernels/haswell/3/sup. These kernels include two general + implementation types--'rd' and 'rv'--for the 6x8 base shape, with + two specialized millikernels that embed the 1st loop within the kernel + itself. + - Added ref_kernels/3/bli_gemmsup_ref.c, which provides reference + gemmsup microkernels. NOTE: These microkernels, unlike the current + crop of conventional (pack-based) microkernels, do not use constant + loop bounds. Additionally, their inner loop iterates over the k + dimension. + - Defined new typedef enums: + - stor3_t: captures the effective storage combination of the level-3 + problem. Valid values are BLIS_RRR, BLIS_RRC, BLIS_RCR, etc. A + special value of BLIS_XXX is used to denote an arbitrary combination + which, in practice, means that at least one of the operands is + stored according to general stride. + - threshid_t: captures each of the three dimension thresholds. + - Changed bli_adjust_strides() in bli_obj.c so that bli_obj_create() + can be passed "-1, -1" as a lazy request for row storage. (Note that + "0, 0" is still accepted as a lazy request for column storage.) + - Added support for various instructions to bli_x86_asm_macros.h, + including imul, vhaddps/pd, and other instructions related to integer + vectors. + - Disabled the older small matrix handling code inserted by AMD in + bli_gemm_front.c, since the sup framework introduced in this commit + is intended to provide a more generalized solution. + - Added test/sup directory, which contains standalone performance test + drivers, a Makefile, a runme.sh script, and an 'octave' directory + containing scripts compatible with GNU Octave. (They also may work + with matlab, but if not, they are probably close to working.) + - Reinterpret the storage combination string (sc_str) in the various + level-3 testsuite modules (e.g. src/test_gemm.c) so that the order + of each matrix storage char is "cab" rather than "abc". + - Comment updates in level-3 BLAS API wrappers in frame/compat. + +commit 0d549ceda822833bec192bbf80633599620c15d9 +Author: Isuru Fernando +Date: Sat Apr 27 22:56:02 2019 +0000 + + make unix friendly archives on appveyor (#310) + +commit 945928c650051c04d6900c7f4e9e29cd0e5b299f +Merge: 663f6629 74e513eb +Author: Field G. Van Zee +Date: Wed Apr 17 15:58:56 2019 -0500 + + Merge branch 'amd' of github.com:flame/blis into amd + +commit 74e513eb6a6787a925d43cd1500277d54d86ab8f (origin/dev) +Author: Field G. Van Zee +Date: Wed Apr 17 13:34:44 2019 -0500 + + Support row storage in Eigen gemm test/3 driver. + + Details: + - Added preprocessor branches to test/3/test_gemm.c to explicitly + support row-stored matrices. Column-stored matrices are also still + supported (and is the default for now). (This is mainly residual work + leftover from initial integration of Eigen into the test drivers, so + if we ever want to test Eigen with row-stored matrices, the code will + be ready to use, even if it is not yet integrated into the Makefile + in test/3.) + +commit b5d457fae9bd75c4ca67f7bc7214e527aa248127 +Author: Field G. Van Zee +Date: Tue Apr 16 12:50:01 2019 -0500 + + Applied forgotten variable rename from 89a70cc. + + Details: + - Somehow the variable name change (root_file_name -> root_inputname) + in flatten-headers.py mentioned in the commit log entry for 89a70cc + didn't make it into the actual commit. This commit applies that + change. + +commit 89a70cccf869333147eb2559cdfa5a23dc915824 +Author: Field G. Van Zee +Date: Thu Apr 11 18:33:08 2019 -0500 + + GNU-like handling of installation prefix et al. + + Details: + - Changed the default installation prefix from $HOME/lib to /usr/local. + - Modified the way configure internally handles the prefix, libdir, + includedir, and sharedir (and also added an --exec-prefix option). + The defaults to these variables are set as follows: + prefix: /usr/local + exec_prefix: ${prefix} + libdir: ${exec_prefix}/lib + includedir: ${prefix}/include + sharedir: ${prefix}/share + The key change, aside from the addition of exec_prefix and its use to + define the default to libdir, is that the variables are substituted + into config.mk with quoting that delays evaluation, meaning the + substituted values may contain unevaluated references to other + variables (namely, ${prefix} and ${exec_prefix}). This more closely + follows GNU conventions, including those used by GNU autoconf, and + also allows make to override any one of the variables *after* + configure has already been run (e.g. during 'make install'). + - Updates to build/config.mk.in pursuant to above changes. + - Updates to output of 'configure --help' pursuant to above changes. + - Updated docs/BuildSystem.md to reflect the new default installation + prefix, as well as mention EXECPREFIX and SHAREDIR. + - Changed the definitions of the UNINSTALL_OLD_* variables in the + top-level Makefile to use $(wildcard ...) instead of 'find'. This + was motivated by the new way of handling prefix and friends, which + leads to the 'find' command being run on /usr/local (by default), + which can take a while almost never yielding any benefit (since the + user will very rarely use the uninstall-old targets). + - Removed periods from the end of descriptive output statements (i.e., + non-verbose output) since those statements often end with file or + directory paths, which get confusing to read when puctuated by a + period. + - Trival change to 'make showconfig' output. + - Removed my name from 'configure --help'. (Many have contributed to it + over the years.) + - In configure script, changed the default state of threading_model + variable from 'no' to 'off' to match that of debug_type, where there + are similarly more than two valid states. ('no' is still accepted + if given via the --enable-debug= option, though it will be + standardized to 'off' prior to config.mk being written out.) + - Minor variable name change in flatten-headers.py that was intended for + 32812ff. + - CREDITS file update. + +commit 32812ff5aba05d34c421fe1024a61f3e2d5e7052 +Author: Field G. Van Zee +Date: Tue Apr 9 12:20:19 2019 -0500 + + Minor bugfix to flatten-headers.py. + + Details: + - Fixed a minor bug in flatten-headers.py whereby the script, upon + encountering a #include directive for the root header file, would + erroneously recurse and inline the conents of that root header. + The script has been modified to avoid recursion into any headers + that share the same name as the root-level header that was passed + into the script. (Note: this bug didn't actually manifest in BLIS, + so it's merely a precaution for usage of flatten-headers.py in other + contexts.) + +commit bec90e0b6aeb3c9b19589c2b700fda2d66f6ccdf +Author: Field G. Van Zee +Date: Tue Apr 2 17:45:13 2019 -0500 + + Minor update to docs/HardwareSupport.md document. + + Details: + - Added more details and clarifying language to implications of 1m and + the recycling of microkernels between microarchitectures. + +commit 89cd650e7be01b59aefaa85885a3ea78970351e4 +Author: Field G. Van Zee +Date: Tue Apr 2 17:23:55 2019 -0500 + + Use void_fp for function pointers instead of void*. + + Change void*-typed function pointers to void_fp. + - Updated all instances of void* variables that store function pointers + to variables of a new type, void_fp. Originally, I wanted to define + the type of void_fp as "void (*void_fp)( void )"--that is, a pointer + to a function with no return value and no arguments. However, once + I did this, I realized that gcc complains with incompatible pointer + type (-Wincompatible-pointer-types) warnings every time any such a + pointer is being assigned to its final, type-accurate function + pointer type. That is, gcc will silently typecast a void* to + another defined function pointer type (e.g. dscalv_ker_ft) during + an assignment from the former to the latter, but the same statement + will trigger a warning when typecasting from a void_fp type. I suspect + an explicit typecast is needed in order to avoid the warning, which + I'm not willing to insert at this time. + - Added a typedef to bli_type_defs.h defining void_fp as void*, along + with a commented-out version of the aborted definition described + above. (Note that POSIX requires that void* and function pointers + be interchangeable; it is the C standard that does not provide this + guarantee.) + - Comment updates to various _oapi.c files. + +commit ffce3d632b284eb52474036096815ec38ca8dd5f +Author: Field G. Van Zee +Date: Tue Apr 2 14:40:50 2019 -0500 + + Renamed armv8a gemm kernel filename. + + Details: + - Renamed + kernels/armv8a/3/bli_gemm_armv8a_opt_4x4.c + to + kernels/armv8a/3/bli_gemm_armv8a_asm_d6x8.c. + This follows the naming convention used by other kernel sets, most + notably haswell. + +commit 77867478af02144544b4e7b6df5d54d874f3f93b +Author: Isuru Fernando +Date: Tue Apr 2 13:33:11 2019 -0500 + + Use pthreads on MinGW and Cygwin (#307) + +commit 7bc75882f02ce3470a357950878492e87e688cec +Author: Field G. Van Zee +Date: Thu Mar 28 17:40:50 2019 -0500 + + Updated Eigen results in docs/graphs with 3.3.90. + + Details: + - Updated the level-3 performance graphs in docs/graphs with new Eigen + results, this time using a development version cloned from their git + mirror on March 27, 2019 (version 3.3.90). Performance is improved + over 3.3.7, though still noticeably short of BLIS/MKL in most cases. + - Very minor updates to docs/Performance.md and matlab scripts in + test/3/matlab. + +commit 20ea7a1217d3833db89a96158c42da2d6e968ed8 +Author: Field G. Van Zee +Date: Wed Mar 27 18:09:17 2019 -0500 + + Minor text updates (Eigen) to docs/Performance.md. + + Details: + - Added/updated a few more details, mostly regarding Eigen. + +commit bfb7e1bc6af468e4ff22f7e27151ea400dcd318a +Merge: 044df950 2c85e1dd +Author: Field G. Van Zee +Date: Wed Mar 27 17:58:19 2019 -0500 + + Merge branch 'dev' + +commit 2c85e1dd9d5d84da7228ea4ae6deec56a89b3a8f (dev) +Author: Field G. Van Zee +Date: Wed Mar 27 16:29:51 2019 -0500 + + Added Eigen results to performance graphs. + + Details: + - Updated the Haswell, SkylakeX, and Epyc performance graphs in + docs/graphs to report on Eigen implementations, where applicable. + Specifically, Eigen implements all level-3 operations sequentially, + however, of those operations it only provides multithreaded gemm. + Thus, mt results for symm/hemm, syrk/herk, trmm, and trsm are + omitted. Thanks to Sameer Agarwal for his help configuring and + using Eigen. + - Updated docs/Performance.md to note the new implementation tested. + - CREDITS file update. + +commit bfac7e385f8061f2e6591de208b0acf852f04580 +Author: Field G. Van Zee +Date: Wed Mar 27 16:04:48 2019 -0500 + + Added ability to plot with Eigen in test/3/matlab. + + Details: + - Updated matlab scripts in test/3/matlab to optionally plot/display + Eigen performance curves. Whether Eigen is plotted is determined by + a new boolean function parameter, with_eigen. + - Updated runme.m scratchpad to reflect the latest invocations of the + plot_panel_4x5() function (with Eigen plotting enabled). + +commit 67535317b9411c90de7fa4cb5b0fdb8f61fdcd79 +Author: Field G. Van Zee +Date: Wed Mar 27 13:32:18 2019 -0500 + + Fixed mislabeled eigen output from test/3 drivers. + + Details: + - Fixed the Makefile in test/3 so that it no longer incorrectly labels + the matlab output variables from Eigen-linked hemm, herk, trmm, and + trsm driver output as "vendor". (The gemm drivers were already + correctly outputing matlab variables containing the "eigen" label.) + +commit 044df9506f823643c0cdd53e81ad3c27a9f9d4ff +Author: Isuru Fernando +Date: Wed Mar 27 12:39:31 2019 -0500 + + Test with shared on windows (#306) + + Export macros can't support both shared and static at the same time. + When blis is built with both shared and static, headers assume that + shared is used at link time and dllimports the symbols with __imp_ + prefix. + + To use the headers with static libraries a user can give + -DBLIS_EXPORT= to import the symbol without the __imp_ prefix + +commit 5e6b160c8a85e5e23bab0f64958a8acf4918a4ed +Author: Field G. Van Zee +Date: Tue Mar 26 19:10:59 2019 -0500 + + Link to Eigen BLAS for non-gemm drivers in test/3. + + Details: + - Adjusted test/3/Makefile so that the test drivers are linked against + Eigen's BLAS library for hemm, herk, trmm, and trsm. We have to do + this since Eigen's headers don't define implementations to the + standard BLAS APIs. + - Simplified #included headers in hemm, herk, trmm, and trsm source + driver files, since nothing specific to Eigen is needed at + compile-time for those operations. + +commit e593221383aae19dfdc3f30539de80ed05cfec7f +Merge: 92fb9c87 c208b9dc +Author: Field G. Van Zee +Date: Tue Mar 26 15:51:45 2019 -0500 + + Merge branch 'master' into dev + +commit 92fb9c87bf88b9f9c401eeecd9aa9c3521bc2adb +Author: Field G. Van Zee +Date: Tue Mar 26 15:43:23 2019 -0500 + + Add more support for Eigen to drivers in test/3. + + Details: + - Use compile-time implementations of Eigen in test_gemm.c via new + EIGEN cpp macro, defined on command line. (Linking to Eigen's BLAS + library is not necessary.) However, as of Eigen 3.3.7, Eigen only + parallelizes the gemm operation and not hemm, herk, trmm, trsm, or + any other level-3 operation. + - Fixed a bug in trmm and trsm drivers whereby the wrong function + (bli_does_trans()) was being called to determine whether the object + for matrix A should be created for a left- or right-side case. This + was corrected by changing the function to bli_is_left(), as is done + in the hemm driver. + - Added support for running Eigen test drivers from runme.sh. + +commit c208b9dc46852c877197d53b6dd913a046b6ebb6 +Author: Isuru Fernando +Date: Mon Mar 25 13:03:44 2019 -0500 + + Fix clang version detection (#305) + + clang -dumpversion gives 4.2.1 for all clang versions as clang was + originally compatible with gcc 4.2.1 + + Apple clang version and clang version are two different things + and the real clang version cannot be deduced from apple clang version + programatically. Rely on wikipedia to map apple clang to clang version + + Also fixes assembly detection with clang + + clang 3.8 can't build knl as it doesn't recognize zmm0 + +commit feefcab4427a75b0b55af215486b85abcda314f7 +Author: Field G. Van Zee +Date: Thu Mar 21 18:11:20 2019 -0500 + + Allow disabling of BLAS prototypes at compile-time. + + Details: + - Modified bli_blas.h so that: + - By default, if the BLAS layer is enabled at configure-time, BLAS + prototypes are also enabled within blis.h; + - But if the user #defines BLIS_DISABLE_BLAS_DEFS prior to including + blis.h, BLAS prototypes are skipped over entirely so that, for + example, the application or some other header pulled in by the + application may prototype the BLAS functions without causing any + duplication. + - Updated docs/BuildSystem.md to document the feature above, and + related text. + +commit 288843b06d91e1b4fade337959aef773090bd1c9 +Author: Field G. Van Zee +Date: Wed Mar 20 17:52:23 2019 -0500 + + Added Eigen support to test/3 Makefile, runme.sh. + + Details: + - Added targets to test/3/Makefile that link against a BLAS library + build by Eigen. It appears, however, that Eigen's BLAS library does + not support multithreading. (It may be that multithreading is only + available when using the native C++ APIs.) + - Updated runme.sh with a few Eigen-related tweaks. + - Minor tweaks to docs/Performance.md. + +commit 153e0be21d9ff413e370511b68d553dd02abada9 +Author: Field G. Van Zee +Date: Tue Mar 19 17:53:18 2019 -0500 + + More minor tweaks to docs/Performance.md. + + Details: + - Defined GFLOPS as billions of floating-point operations per second, + and reworded the sentence after about normalization. + +commit 05c4e42642cc0c8dbfa94a6c21e975ac30c0517a +Author: Field G. Van Zee +Date: Tue Mar 19 17:07:20 2019 -0500 + + CHANGELOG update (0.5.2) + +commit 9204cd0cb0cc27790b8b5a2deb0233acd9edeb9b (tag: 0.5.2) Author: Field G. Van Zee Date: Tue Mar 19 17:07:18 2019 -0500 Version file update (0.5.2) -commit 64560cd9248ebf4c02c4a1eeef958e1ca434e510 (origin/master, origin/HEAD) +commit 64560cd9248ebf4c02c4a1eeef958e1ca434e510 Author: Field G. Van Zee Date: Tue Mar 19 17:04:20 2019 -0500 @@ -13,7 +697,7 @@ Date: Tue Mar 19 17:04:20 2019 -0500 Details: - Updated ReleaseNotes.md in preparation for next version. -commit ab5ad557ea69479d487c9a3cb516f43fa1089863 (origin/dev, dev) +commit ab5ad557ea69479d487c9a3cb516f43fa1089863 Author: Field G. Van Zee Date: Tue Mar 19 16:50:41 2019 -0500 @@ -54,7 +738,7 @@ Date: Tue Mar 19 16:15:24 2019 -0500 - Minor updates to CREDITS, docs/Multithreading.md. - Minor updates to matlab scripts in test/3/matlab. -commit 9945ef24fd758396b698b19bb4e23e53b9d95725 (origin/amd) +commit 9945ef24fd758396b698b19bb4e23e53b9d95725 Author: Field G. Van Zee Date: Tue Mar 19 15:28:44 2019 -0500 @@ -96,6 +780,20 @@ Date: Mon Mar 18 13:22:55 2019 -0500 user wishes to use the local runtime API (specify multithreading on a per-call basis), one of the native BLIS APIs must be used. +commit 663f662932c3f182fefc3c77daa1bf8c3394bb8b +Merge: 938c05ef 6bfe3812 +Author: Field G. Van Zee +Date: Sat Mar 16 16:17:12 2019 -0500 + + Merge branch 'amd' of github.com:flame/blis into amd + +commit 938c05ef8654e2fc013d39a57f51d91d40cc40fb +Merge: 4ed39c09 5a5f494e +Author: Field G. Van Zee +Date: Sat Mar 16 16:01:43 2019 -0500 + + Merge branch 'amd' of github.com:flame/blis into amd + commit 6bfe3812e29b86c95b828822e4e5473b48891167 Author: Field G. Van Zee Date: Fri Mar 15 13:57:49 2019 -0500 @@ -196,6 +894,13 @@ Date: Mon Mar 11 19:05:32 2019 -0500 * Remove blas export macro from definitions +commit 4ed39c0971c7917e2675cf5449f563b1f4751ccc +Merge: 540ec1b4 b938c16b +Author: Field G. Van Zee +Date: Fri Mar 8 11:56:58 2019 -0600 + + Merge branch 'amd' of github.com:flame/blis into amd + commit b938c16b0c9e839335ac2c14944b82890143d02f Author: Field G. Van Zee Date: Thu Mar 7 16:40:39 2019 -0600 @@ -282,6 +987,39 @@ Date: Wed Feb 27 17:27:23 2019 -0600 * restore bli_extern_defs exporting for now +commit 540ec1b479712d5e1da637a718927249c15d867f +Author: Field G. Van Zee +Date: Sun Feb 24 19:09:10 2019 -0600 + + Updated level-3 BLAS to call object API directly. + + Details: + - Updated the BLAS compatibility layer for level-3 operations so that + the corresponding BLIS object API is called directly rather than first + calling the typed BLIS API. The previous code based on the typed BLIS + API calls is still available in a deactivated cpp macro branch, which + may be re-activated by #defining BLIS_BLAS3_CALLS_TAPI. (This does not + yet correspond to a configure option. If it seems like people might + want to toggle this behavior more regularly, a configure option can be + added in the future.) + - Updated the BLIS typed API to statically "pre-initialize" objects via + new initializor macros. Initialization is then finished via calls to + static functions bli_obj_init_finish_1x1() and bli_obj_init_finish(), + which are similar to the previously-called functions, + bli_obj_create_1x1_with_attached_buffer() and + bli_obj_create_with_attached_buffer(), respectively. (The BLAS + compatibility layer updates mentioned above employ this new technique + as well.) + - Transformed certain routines in bli_param_map.c--specifically, the + ones that convert netlib-style parameters to BLIS equivalents--into + static functions, now in bli_param_map.h. (The remaining three classes + of conversation routines were left unchanged.) + - Added the aforementioned pre-initializor macros to bli_type_defs.h. + - Relocated bli_obj_init_const() and bli_obj_init_constdata() from + bli_obj_macro_defs.h to bli_type_defs.h. + - Added a few macros to bli_param_macro_defs.h for testing domains for + real/complexness and precisions for single/double-ness. + commit 8e023bc914e9b4ac1f13614feb360b105fbe44d2 Author: Field G. Van Zee Date: Fri Feb 22 16:55:30 2019 -0600 @@ -2316,7 +3054,7 @@ Date: Tue Oct 9 15:29:48 2018 -0500 case, and thus the change effectively applies to both left and right cases. -commit f1dba506c970f14e612580d3c171e7c5ffd0a5fb (amd) +commit f1dba506c970f14e612580d3c171e7c5ffd0a5fb Author: Field G. Van Zee Date: Mon Oct 8 17:59:41 2018 -0500 From ecfc223e623c44b1ba7ac486ba594b6be66ec41b Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 4 Jun 2019 14:46:45 -0500 Subject: [PATCH 068/109] Minor tweaks to test/sup. Details: - Changed starting problem and increment from 16 to 4. - Added 'lll' (square problems) to list of problem size shapes to compile and run with. - Define BLASFEO location and added BLASFEO-related definitions. --- test/sup/Makefile | 26 ++++++++++++++++++++------ test/sup/runme.sh | 10 +++++----- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/test/sup/Makefile b/test/sup/Makefile index 52f60a637..d2b3c7170 100644 --- a/test/sup/Makefile +++ b/test/sup/Makefile @@ -100,6 +100,9 @@ MKL_LIB_PATH := $(HOME)/intel/mkl/lib/intel64 OPENBLAS_LIB := $(HOME_LIB_PATH)/libopenblas.a OPENBLASP_LIB := $(HOME_LIB_PATH)/libopenblasp.a +# BLASFEO +BLASFEO_LIB := $(HOME_LIB_PATH)/libblasfeo.a + # ATLAS ATLAS_LIB := $(HOME_LIB_PATH)/libf77blas.a \ $(HOME_LIB_PATH)/libatlas.a @@ -132,9 +135,9 @@ VENDORP_LIB := $(MKLP_LIB) # # Single core -PS_BEGIN := 16 +PS_BEGIN := 4 PS_MAX := 800 -PS_INC := 16 +PS_INC := 4 # Multicore P1_BEGIN := 120 @@ -221,7 +224,8 @@ SHAPES := l_l_s \ s_l_l \ s_s_l \ s_l_s \ - l_s_s + l_s_s \ + l_l_l SMS := 6 SNS := 8 @@ -301,7 +305,8 @@ get-imp-defs = $(strip $(subst blissup,-DSTR=\"$(1)\" -DBLIS -DSUP, \ $(subst blislpab,-DSTR=\"$(1)\" -DBLIS, \ $(subst eigen,-DSTR=\"$(1)\" -DEIGEN, \ $(subst openblas,-DSTR=\"$(1)\" -DCBLAS, \ - $(subst vendor,-DSTR=\"$(1)\" -DCBLAS,$(1))))))) + $(subst blasfeo,-DSTR=\"$(1)\" -DCBLAS, \ + $(subst vendor,-DSTR=\"$(1)\" -DCBLAS,$(1)))))))) TRANS0 = $(call stripu,$(TRANS)) STORS0 = $(call stripu,$(STORS)) @@ -331,6 +336,9 @@ EIGEN_ST_BINS := $(patsubst %.o,%.x,$(EIGEN_ST_OBJS)) OPENBLAS_ST_OBJS := $(call get-st-objs,$(DTS),$(TRANS0),$(BSTORS0),$(SHAPES),$(SMS),$(SNS),$(SKS),openblas) OPENBLAS_ST_BINS := $(patsubst %.o,%.x,$(OPENBLAS_ST_OBJS)) +BLASFEO_ST_OBJS := $(call get-st-objs,$(DTS),$(TRANS0),$(BSTORS0),$(SHAPES),$(SMS),$(SNS),$(SKS),blasfeo) +BLASFEO_ST_BINS := $(patsubst %.o,%.x,$(BLASFEO_ST_OBJS)) + VENDOR_ST_OBJS := $(call get-st-objs,$(DTS),$(TRANS0),$(BSTORS0),$(SHAPES),$(SMS),$(SNS),$(SKS),vendor) VENDOR_ST_BINS := $(patsubst %.o,%.x,$(VENDOR_ST_OBJS)) @@ -342,6 +350,7 @@ VENDOR_ST_BINS := $(patsubst %.o,%.x,$(VENDOR_ST_OBJS)) $(BLISLPAB_ST_OBJS) \ $(EIGEN_ST_OBJS) \ $(OPENBLAS_ST_OBJS) \ + $(BLASFEO_ST_OBJS) \ $(VENDOR_ST_OBJS) @@ -355,22 +364,24 @@ blissup: blissup-st blislpab: blislpab-st eigen: eigen-st openblas: openblas-st +blasfeo: blasfeo-st vendor: vendor-st -st: blissup-st blislpab-st eigen-st openblas-st vendor-st +st: blissup-st blislpab-st eigen-st openblas-st blasfeo-st vendor-st blis: blissup-st blislpab-st blissup-st: $(BLISSUP_ST_BINS) blislpab-st: $(BLISLPAB_ST_BINS) eigen-st: $(EIGEN_ST_BINS) openblas-st: $(OPENBLAS_ST_BINS) +blasfeo-st: $(BLASFEO_ST_BINS) vendor-st: $(VENDOR_ST_BINS) # --Object file rules -- # Define the implementations for which we will instantiate compilation rules. -BIMPLS := blissup blislpab openblas vendor +BIMPLS := blissup blislpab openblas blasfeo vendor EIMPLS := eigen # 1 2 3 4 567 8 @@ -433,6 +444,9 @@ test_%_eigen_st.x: test_%_eigen_st.o $(LIBBLIS_LINK) test_%_openblas_st.x: test_%_openblas_st.o $(LIBBLIS_LINK) $(CC) $(strip $< $(OPENBLAS_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) +test_%_blasfeo_st.x: test_%_blasfeo_st.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(BLASFEO_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + test_%_vendor_st.x: test_%_vendor_st.o $(LIBBLIS_LINK) $(CC) $(strip $< $(VENDOR_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) diff --git a/test/sup/runme.sh b/test/sup/runme.sh index 2c4ef081a..9646e3ccc 100755 --- a/test/sup/runme.sh +++ b/test/sup/runme.sh @@ -24,11 +24,11 @@ ops="gemm" trans="nn nt tn tt" # Storage combinations to test. -stors="rrr rrc rcr rcc crr crc ccr ccc" +#stors="rrr rrc rcr rcc crr crc ccr ccc" stors="rrr ccc" # Problem shapes to test. -shapes="sll lsl lls lss sls ssl" +shapes="sll lsl lls lss sls ssl lll" # FGVZ: figure out how to probe what's in the directory and # execute everything that's there? @@ -37,13 +37,13 @@ sns="8" sks="4" # Implementations to test. -#impls="vendor blissup blislpab openblas eigen" +impls="vendor blissup blislpab openblas eigen" #impls="vendor openblas eigen" #impls="blislpab blissup" #mpls="openblas eigen vendor" #mpls="eigen" -impls="blissup" -#impls="vendor blissup openblas blislpab eigen" +#impls="blissup" +#impls="blasfeo" # Example: test_dgemm_nn_rrc_m6npkp_blissup_st.x From bb4a01f130444d06b4f46d0dff4718819da954c1 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 4 Jun 2019 16:06:58 -0500 Subject: [PATCH 069/109] Added BLASFEO results to docs/PerformanceSmall.md. Details: - Updated the graphs linked in PerformanceSmall.md with BLASFEO results, and added documenting language accordingly. - Updated scripts in test/sup/octave to plot BLASFEO data. - Minor tweak to language re: how OpenBLAS was configured for docs/Performance.md. --- docs/Performance.md | 16 ++++++++-------- docs/PerformanceSmall.md | 12 ++++++++---- docs/graphs/sup/dgemm_ccc_epyc_nt1.pdf | Bin 166829 -> 198669 bytes docs/graphs/sup/dgemm_ccc_epyc_nt1.png | Bin 154203 -> 172554 bytes docs/graphs/sup/dgemm_ccc_kbl_nt1.pdf | Bin 187521 -> 223817 bytes docs/graphs/sup/dgemm_ccc_kbl_nt1.png | Bin 178844 -> 202376 bytes docs/graphs/sup/dgemm_rrr_epyc_nt1.pdf | Bin 166784 -> 199556 bytes docs/graphs/sup/dgemm_rrr_epyc_nt1.png | Bin 155098 -> 173798 bytes docs/graphs/sup/dgemm_rrr_kbl_nt1.pdf | Bin 188174 -> 225316 bytes docs/graphs/sup/dgemm_rrr_kbl_nt1.png | Bin 188468 -> 211228 bytes test/sup/octave/plot_l3sup_perf.m | 15 +++++++++++++-- test/sup/octave/plot_panel_trxsh.m | 19 ++++++++++++++----- 12 files changed, 43 insertions(+), 19 deletions(-) diff --git a/docs/Performance.md b/docs/Performance.md index d18d1a192..e51028c49 100644 --- a/docs/Performance.md +++ b/docs/Performance.md @@ -137,8 +137,8 @@ size of interest so that we can better assist you. * Multithreaded (28 core) execution requested via `export BLIS_JC_NT=4 BLIS_IC_NT=7` * Multithreaded (56 core) execution requested via `export BLIS_JC_NT=8 BLIS_IC_NT=7` * OpenBLAS 52d3f7a - * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) - * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=56` (multithreaded, 56 cores) + * configured `Makefile.rule` with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) + * configured `Makefile.rule` with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=56` (multithreaded, 56 cores) * Single-threaded (1 core) execution requested via `export OPENBLAS_NUM_THREADS=1` * Multithreaded (28 core) execution requested via `export OPENBLAS_NUM_THREADS=28` * Multithreaded (56 core) execution requested via `export OPENBLAS_NUM_THREADS=56` @@ -197,8 +197,8 @@ size of interest so that we can better assist you. * Multithreaded (26 core) execution requested via `export BLIS_JC_NT=2 BLIS_IC_NT=13` * Multithreaded (52 core) execution requested via `export BLIS_JC_NT=4 BLIS_IC_NT=13` * OpenBLAS 0.3.5 - * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) - * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=52` (multithreaded, 52 cores) + * configured `Makefile.rule` with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) + * configured `Makefile.rule` with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=52` (multithreaded, 52 cores) * Single-threaded (1 core) execution requested via `export OPENBLAS_NUM_THREADS=1` * Multithreaded (26 core) execution requested via `export OPENBLAS_NUM_THREADS=26` * Multithreaded (52 core) execution requested via `export OPENBLAS_NUM_THREADS=52` @@ -269,8 +269,8 @@ size of interest so that we can better assist you. * Multithreaded (12 core) execution requested via `export BLIS_JC_NT=2 BLIS_IC_NT=3 BLIS_JR_NT=2` * Multithreaded (24 core) execution requested via `export BLIS_JC_NT=4 BLIS_IC_NT=3 BLIS_JR_NT=2` * OpenBLAS 0.3.5 - * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) - * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=24` (multithreaded, 24 cores) + * configured `Makefile.rule` with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) + * configured `Makefile.rule` with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=24` (multithreaded, 24 cores) * Single-threaded (1 core) execution requested via `export OPENBLAS_NUM_THREADS=1` * Multithreaded (12 core) execution requested via `export OPENBLAS_NUM_THREADS=12` * Multithreaded (24 core) execution requested via `export OPENBLAS_NUM_THREADS=24` @@ -339,8 +339,8 @@ size of interest so that we can better assist you. * Multithreaded (32 core) execution requested via `export BLIS_JC_NT=1 BLIS_IC_NT=8 BLIS_JR_NT=4` * Multithreaded (64 core) execution requested via `export BLIS_JC_NT=2 BLIS_IC_NT=8 BLIS_JR_NT=4` * OpenBLAS 0.3.5 - * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) - * configured with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=64` (multithreaded, 64 cores) + * configured `Makefile.rule` with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) + * configured `Makefile.rule` with `BINARY=64 NO_CBLAS=1 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=1 NUM_THREADS=64` (multithreaded, 64 cores) * Single-threaded (1 core) execution requested via `export OPENBLAS_NUM_THREADS=1` * Multithreaded (32 core) execution requested via `export OPENBLAS_NUM_THREADS=32` * Multithreaded (64 core) execution requested via `export OPENBLAS_NUM_THREADS=64` diff --git a/docs/PerformanceSmall.md b/docs/PerformanceSmall.md index 4418dbe45..3cf113d71 100644 --- a/docs/PerformanceSmall.md +++ b/docs/PerformanceSmall.md @@ -112,13 +112,15 @@ size of interest so that we can better assist you. * single-core: 57.6 GFLOPS (double-precision), 115.2 GFLOPS (single-precision) * Operating system: Gentoo Linux (Linux kernel 5.0.7) * Compiler: gcc 7.3.0 -* Results gathered: 31 May 2019 +* Results gathered: 31 May 2019, 3 June 2019 * Implementations tested: * BLIS 6bf449c (0.5.2-42) * configured with `./configure --enable-cblas auto` * sub-configuration exercised: `haswell` * OpenBLAS 0.3.6 - * configured with `BINARY=64 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) + * configured `Makefile.rule` with `BINARY=64 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) + * BLASFEO 75a3dd8 + * configured `Makefile.rule` with: `BLAS_API=1 FORTRAN_BLAS_API=1 CBLAS_API=1`. * Eigen 3.3.90 * Obtained via the [Eigen git mirror](https://github.com/eigenteam/eigen-git-mirror) (30 May 2019) * Prior to compilation, modified top-level `CMakeLists.txt` to ensure that `-march=native` was added to `CXX_FLAGS` variable (h/t Sameer Agarwal). @@ -170,13 +172,15 @@ size of interest so that we can better assist you. * single-core: 24 GFLOPS (double-precision), 48 GFLOPS (single-precision) * Operating system: Ubuntu 18.04 (Linux kernel 4.15.0) * Compiler: gcc 7.3.0 -* Results gathered: 31 May 2019 +* Results gathered: 31 May 2019, 3 June 2019 * Implementations tested: * BLIS 6bf449c (0.5.2-42) * configured with `./configure --enable-cblas auto` * sub-configuration exercised: `zen` * OpenBLAS 0.3.6 - * configured with `BINARY=64 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) + * configured `Makefile.rule` with `BINARY=64 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) + * BLASFEO 75a3dd8 + * configured `Makefile.rule` with: `BLAS_API=1 FORTRAN_BLAS_API=1 CBLAS_API=1`. * Eigen 3.3.90 * Obtained via the [Eigen git mirror](https://github.com/eigenteam/eigen-git-mirror) (30 May 2019) * Prior to compilation, modified top-level `CMakeLists.txt` to ensure that `-march=native` was added to `CXX_FLAGS` variable (h/t Sameer Agarwal). diff --git a/docs/graphs/sup/dgemm_ccc_epyc_nt1.pdf b/docs/graphs/sup/dgemm_ccc_epyc_nt1.pdf index 694abad6c9179129737f04511f9abb68b839a3f5..0f6e07e9a0935c847435ce46d3e71bc36e091748 100644 GIT binary patch literal 198669 zcmYhhXH=6-7cNXk5JgZyKm|llsnVt6gLDuH53(<-g{M~NK0s;CIO{N zC`t=8AP`!pflvib-gDOa*7sx9%ssRB^m~`tm+*^cIug>7a;(DT6_r)2(gKeKV0JF7 zs;aC~FT7w5zV;9=frn2$-q^o|2yNE*hhc6j1W2Y90c6W(*g)pFZPnpxeJI;Pb7NAxQ8N>Y=`Hed@;` z%v#%=-;C0PziO@My;?B?I&wF$*xN(d`Cq`>1C7vZjgq6bxiyUyuh4&gGYU$E0v{d1 zdQ5gn7rP_pN?^muh7*-DZ!q55Mq}CS)V$$%FS8M4O_Anr%TX^q4Lc?8;!O4|9RIDi z<%4bT`+>6;RzpX#`{#_ZXFVntc$2VbmkVjL^HY;@y^#KYyBGhad)hAc+rqq!FSv%H z=fcEEw>JqT#PhYbt%7)o&=(759by0W)gYbFNkl6)?B80!h4A?~ILuQ0{899In~?Kd zH2JJeV_>A`g52fuuORI7-Z#&-*yZ!8%c?6w0jneZ2MNRz>!Dyao3K;fO5DFm(HCLo zHN@>C6!6RW;^*-%ey3-I=^>(b!8Y=MnXRQ1zr8?8(5T-p#T6`&hLGfo(hCJ$r2?E! z=)Zs4ra3FeVgC$K%0mGL7Ny_E$v_kJJ^6eV-PNHHdQMy{xNy%Z zX}dVeNGP~iD-HX1?0yKAa?ZkU?q#Qwo*a-V!ftb>!$Ix^-WChLR(2`Eo1kI#OzBhc zGsU}VZjR^gWF1`=WxChct?n+9{#hdeHI|ReDmnE|rBRc(($L0ST&sf8X3wajjrx$3 zkKq|5p{(Nu&%x20f)p}(sh*uxoicy7 z6FrD_=%^ls)SlEA4R)IR=PcC<*&YAbu@)z{fb|qU4`bz`F9M7u;vh3uZ*Yphui)XaG7=*bFHA}r&dfu3I z${lU-J9qlpk++h$2+GRG!%u>)^@xk?8hZ$<9$q#He&Zg$-+@ARRx zy8QZgcyXX{fxMW$I4(C)V7u^Qeun!7#aWJ`f+sbG)WjR@HPEllRwT*biz8UuKk})@ z+1g>)Q3rqM1@635<6@;CEJeC&$oquy@jhtO&juIT?d}lc$$dvr3V9Qfg&4Z^=u{ny z$0&g`zP+@cQSfsGt5Z_-_Ql(Wo%D?X7y}jcMq{bq6hU4g5$uq?C@GK2`-1DZ zuQF=qNLA5TZaT%U>vA-lR5a;vkvp3Gnm`HUB8~t#bq<3%6M8~lzIzxtmj;^?avL^` zQpokU>AQ`Jhnr45a8v5DkuH`fz)7o(i0e~bv$Rs9y-6C+}w3rMO*fs#NAqLz$>R>Z4O{oAtc*% z0pdnsPxFKO3EfLB^lu1QG&F9Jdo`#9uu%Utf7FQ^A@A*F7G5j_w~jQ}t2HcwmeRdK z(gUDFJ}~ECqwl<;J-o1o2NCv)4XYhCeP`1|UVFjNJ8I`_6Dn?bgT;P&Msm8bDYDpB zy_~`~K&4W?7ZRr@7Ndg!HU3lbWn9FqL^a-WL0|TXfaMz(%8hGfZ;oAs?DOp#@4C%E zKR+A3IqSFehuI)!VKM6Cnf|l}`<0Z5O10y0%0pCweUMaenU-Jt*T=9kv5BD}`TPsE zNxf+YiB&;^R`r!z4^})?eWPlsXFn|Kx7y|Q?{enD_dL5UweEG5`{ov3o$LjUhV8*u zRP6W>S;u#4ll;Wj*Uu0u9D4^hi8do}4OzBNvL%07E9`$%6&z8|?!;#ONVy?1-0)7_ zxKom!%a<8@1#*`)yffGDfwSUW8#Qef|Hj)v!6?zw6)vKh)_9DHUCX1P#JokJ1m}e( zC8g<3{R+T4wMlMD_Ptv}R+05DQ~J~#ge0)}0eV%$n|ls*FU04Rx*}e#CjyZDFMST+ z?6u700pL7bsXEfB_hiKGt2mYafG{Xul5O_6G7dTM1*V&0UsX5A`O-Mg-YuZ(MDY%g zuNGPVvSW#-_IA(;$90n2C)ce?+4KFW?nLd+oqZmM7oNu?tX*iV>9DTr*3BQpX5-p% zF+Aosii2-29@OnMT`T>q`;~VbN6u&c%3kQJ6P_A{GHWZiQAm2+5HZqjdF{J1e#*(> z`Bh*P%SyS{>k<6j5h7XDE1~;9U*T@qqtLMNMAFe{@{v*Ph?A1tFHscmd6t-4GI5{F z8Mu~GsV1X7i!rHvYa=Hft(UUV(xU<%B0i4^yW6!)kne9?-IaP?YtTBV{%dMvd}wh! z#dRyecS;?Xwme~N`RB%NEYR~uVFqT)KlycsLRU~-ym|ff4X8=1v#q=A#=Y^zf!#n= z-_h?d*-A*OUApsiaeSn2{^(`jCQD<-xM+nRwUbFc2)9sF(PLzT0>;wJ99TSnxSdc@ z`P;19Tw56O8*E?ssfJ^FK^2;Fxc9@x&$%m zJpM2$wCiE{NhvpTWQ~mNnyyD1H+*S3DkqEigdlKX2&i#m*tGB0R?~a@6e`3TH znSXDg<)hzs5z#JktNFUYROx!(&GIhjYkeJGb-u#qG%z9I^7SUG>U`n;a(QEfbB%?) zmAsp?*T8jHQQqWxWACVgXVaNByPehL2H7@y{d}k8kPGq#?{sq%Xm38+ZESoK$alY{%ChCGoaLU;4|B@4g+v43Wg~db*{KnXL7SJAfV1A%g8?OS z9m_v%pO&MhktcVZEN+=(bYWe#m@19=lKdo`KMkCjMFbo0SAXw2HYd4tE+ZtT07Z`! zR;E$<&tJN34eGTv$aO7C1`l?j-_#&QXTwofqe8|khi}IuD_rT6?zsof1n6eln}RX{ zJ(>1VI8(JX6E1;Pb!g=&8? zdR$#A8{B`o_^HcpZw@W~MDvP>k4H`bjXNSBxO-K3i*5P0pkt|zX@}!)9gWbBzlb`x7^zH|;-38S3FZEgz0Ew@SAIqY%#N#^010 z0N#yujNAzGz@M)ws5jFd(^Oqk%afxEa;-2pPSaO70Fd$@Ov(v$V_gOvUGu|*HVqs% z{G7XO3S2(Lr43A=*}AdiY${wTg8BBgQ8RW{^6at-8{scC=f(LG+V$F$oiKI!+r-vE zTi*FRjqx7=-1caxPQFinxzsRV@Dq!xR zEnYXXx<6_o71(7P|wv z$r#kan0k04Gy3W5cW4RvB;4dH#vojlI961hM;f;EDM6R24^K5e4>SpJ`-3&umLu$THNBtysDCy+)5(XuWn6a^z6^i*9pDczR_LG5sFj3T|1U{ z0kkYIw!@GuD_KqurRV0HU-5weI!VE1F_k(d7I8~!V43zWAZ#>&-p3!9S8uNN@V1ZQ z-O|r@s!p=DbewLeSub|2xfgBz`55=qsi`8*pkMgSzIwg<$n0v8_c~OR+ScVWTgvf! zHemU+L#4V9j}Lwi(o&)5(W$d!YLU3*5(?e)Y~edj&m>OsJXl5ey@K54q21;ZtZn9( za706;t_A>|f&58dT6a73nI>e%Xts1pt#yrfaP~jwx5ya3Caa>k%X=;byg%;v0Jk?c zoL&~S3iIeZ_m5G>%Zy2-1}Kt0LZ$~x+WplY?akgJ*(Tgvtr`B|kJ8<0pgVTw*yh-) z_@cBo8?Z#^^J~ZHzTdVq>u#l^(S_3mL$b2AbsC7P<21C$G0q5lK^69dEupdAQN09P^T<@orGuaBpu5vp#HFRk|_O=)N|n#(UVyf`jUeO z+gSn^J$ra6G_{MecFR+`vh%N8=0RTRXA5-8r6EtjFZDtfIa3=Wdp}C=R(>x+g9eNO zH?zK=4~$-bP8&1>zh1ewL|s=e-@$LViyK_TNt4j~Af}2__%R`vuXv<`^edeQIS^!v zh9h})soix#UvgYShIngIdk_E(tkwC2Iq9HXWiBDJE(@Tom1zPt^JsU1?r_edgqg$f zE%f2Qn5zB{PB`uM%X?99e6Z-AP4N9A_dk2B+2L?JmpBa}z%j{@q*?&y*%|JqnM3*0 zV4;&TgkoU>G<2M02T{3DET$LkAG7?1dCm__;jUPWj~j@Z;i zKJ^!Jd&IjuLJyFg9mC7(FOvJewznp6@x7R2pZ@&U25HdUs?B%gIm(PCCG^Ab{dPOE zN12A%JMC0P|FgmkHT!|kK3P?O;)B@G5SdXQ;;!^0=@L~KU5;&O(0 zTaI;NxMF_buiEc1ax~kL6I_%^S#cUzQPtG(_#HhaG$Dd5;A8q|qcnfWllifkhx+RP zg*VVbD}^5oW!G69ecP|AMLQOn1As@+=s_(9P6%<;HL7U(f^u zWHlgIn74>rpPLkiTjEGfK<7GTV$dSUkbXi?!hUELJsj;^+miDZ2xE!8!& z3?YTXx81TTC!J2{$V4H1xKdvDk)5vgJoF{&JE>A88t@j81+K;)F4cf$z)G)mMGywl zFTsyP_28b1A3M1dYAzUtKV2}qtGfU_)`UxdMX;;7LfB0ExFbt-0WefP z5h;JCH^bQh+s^8MHSdi*w&cx}Dlxam9^H*QCVxyht}V?wE)2BAZpdhYq3@r9i)c?Q zuhWD`7o)$x27zCtczC`_l^A@$c7{b@bu4K^^cAn16o!Ul88RcVih+p+ol&%CHg$%C2yG& zPKZLZ^@8(Q^Vvn{tMGIY}7S=;N|6G*k|8yUyFp%Pa%GHi4X za9t_?%a3sH{yTya-<^B)C!dp1Dd$v;aE2iDbHeRGEC<^}KIYsxIl=%liHKl&ay$Xn=C zx}l)h7i7uL)q%l;|)?8*y@!JY!mk2DPYv4Cf7Q+M^+jvS) ziAwR8xJ|^=&~%HrWGiUSnVVnD6Cb-y*B6Y!NNr}$?qiaq*3HwTwB{<##t6??O1339 zC3}v77*bM?xSF}v@|CO?g4e<;YMk`o#*VpPkQ$tv;A3*If-3*j5EL7KaL;@=w(v{O z@ctv}(9Z^cD-Ls&ZSyw%uMq#P>IZx?$rhXR`sY5ZfISnrg6ltQvN`u9TvXWt9)s&uZ?NIudk!=mRAW-W14NM$UU4oW!k1VITCQlt7v?R z%r@of8JtpN(_x;12hvyC1F5LC z2nrVQkOE(MyDjG24l?Yk#Ea66L-VLf>P97XYU4QhsLBi|r#X^4!vcx%ss=&tns2LY zT8BbDxmDuJX~#(xGNicrm)yGLpExS1J)28qh*pED*v(*oVqtTnG1Qi-2rQ74`{qbR zsX7pes~Uu39;g08Bw{AxI;zMhNaE24kd*ib(CI7Mpv|PLy{Sumxp+fdF1`*j2z8!E zZ`c0_w7^9NZf0bWEzLfmK}Mgbbz)Z4frP$9>e`o3Smq_l0yUqcOQf27g2*w(#0(5w zH&mZz*V0S`{hH$%2$xQaL|qBTpD={u)fH$!d`UbzL7voP$%GzHqd|{*(SU}4R2sH$ zyd_gRE}mfyHT7W|J2L2iU4B5dYxT3Xg6d>uQLa2&*kpuj>+)UN8Pq!cmL-gKYbu6z zhI%MlL0BVyO#c7!Sbw)4v;@>{_Aa98O?xXLBG&&{k8ERtgJ%$D;oMT2r*Or7{mE0~ zyFvD1w?0|k(u5hqHZmPKTGxG(vq2}1X$WyYkSp?QPTj52Kdf7JtdJouNBI;|Bojxg z{8;%hy1v@r`Ffi=_aK z=dwS4;_wjYZ%q#OENOiMhV|Iq`O^9(1BN??=);PPp?1kxTL?w|)#NrE|3&<+u!05S z8bWoTr*m4B@xvBEIX;r76@+G)odpJ8VjSJuxcB_zPB0d z43joKI@kHN)LdyN;~sF$CX|tb6KC~Q0IGoss=4&ldHbZHXG+HOh9E@309LSw*bi{;yL-Iu=-oBgB?f3j)3e8Vj(= zOVvH?$K4+xFGN}3VpK3C#G8~`x*tZ#GtLUQdDM#H3Gp(Rm) zBOh6~_e8!@4EtkTMV95iN_C>Ion&WnJButE57Xkw|J{e$fg&A@`*U(u>P{vQxR8=LCo!mnMqQ&G{lk?QH$Py5XTB zw1tWG{}_$?a`r+n7fgmwGtfBUOwmF9Rxx^cn$`^DQf=Lr<7AjZUd~uFBdE4p_r<^y z$z;YCeb9jqsraQz5#oT2&LiZSMVnmZYF%%3+{`_!H| zaPw^acuL#qQhhaLH~-|W<;1m=-QiaHSLprprMtIl6~)Q}1{B{1dSu>kDF)s0XTRFa z@@jW@F{RZbyp8dDfJqj9)>IUL-dEGSDHX!5*=5*f8;xs9#A^v4`ew`MG(+(aYvEiTFL?UcQ27_rc&ByFr%S=%fZiUGtu6 zkELLFIqaWhNXS(%e?&g<-Lw?fm<{yV+KNB zb|12?{(Rcf<-C4Zs67z!+BYuK6Esksw7(ziNzkqvdOd5Pp6fp@iPf1oRv$c_R(;aD zfi9$*Do5v1x*z|Eoq&rv2yer+kdny**dQlU)YHXUBw-@;PS4I2Rxl=IerR58XRIOw zQpmA0rsAA)|NGu|@@fSz9q+NE55{ZsgZE{& z#)MubQqB3NaYvPlU2Q_Ok0cl?=(Z^J(ZNy@DjkZ99UCZxSff_Fg*qjWn>}a9&3X6euraE!dte3s8wlMNMc_vK3QgW%u?Xy zacPOq*(&<|r6uSP1Nr7q|Bn$)^4OAU+S0nBAh>vd`~loW;W@^Vg_kSpCtT!pO>D7; zvc5@0cR`M;rv`?jhk%TyAz=Ne69RN-XPSMzqCSK)F7q8Z93Pn3m~}EG%SRbQerp(b zB>#PTR%mKKW2NW|7733!vAp>-WLx;qe7YG@f;CX?dQ!3|*cx?$trcFcxEX5Msv_}X z4v2jgk|tHTy6IVebv4+3=?~`Rhm# z^nas+1#QQ|Fu`DCNo1U4Lp6Zfw)=y?zWSAilzu8B<#zR9TI$ zHZs7$R7$LBne#SA>h?LELcw^^vNccm~HvW*uRN zId>^74hz(^Es!>;Jd}Pa=`kmn(%`go+Lw{IU4ecF2kWyO^X}7=QE*LcI(si33lRiY z93M8jA1&U=af^xD^J2D`?qIdt%CgXyz5J1LoBw>VH0o>Uh1Cf)Cx{B8V0PCFRz&NfYRDxu7H!*Rcr z=ovROMTHT(me37YqDTu@dqz%K|Q`-C-%4aCE6xyi=m{c$`jpA1^+n(|$ zs#VbNDI%cOgwk#vn+j17^tz&A|gJom%dq>~x$**Ww#-M1ZW1=>Fmhph4;sZQ@s zmVJLmPZqsuE<~Jqoqe?HgNf_tPQNkf{QmNE_%h2EBLX`-cH*p6OzwVy?)n3)`r@c7o2|Fcb%w4RRv|V)YpYNQ4&;OO~ zX~x8D=G!* zvaI0D-pW<+TJrwvC;wgvnI?(oN%bC-bP>b_ck2nzp-a z{hk+eHf9;!s^EswUn|$>W?fC)kK#)|0lDdH$l`e9RTy3_LV1BP`TdLmZ?O;0Z{e!) zEk%vUt?bWit7f+DQA!1=kjQXJ78j(~ZIYTRKkwfzm=@iAKPB{|hh<{nlDi?8AEaM^ zPc(XRKC4E6KYo6NboPFhB`bB!@rd*0rBYeYoHxZM#k?#p_xpd*#fOnSsiR#Q8P?bI zvXwQ`nm!%q@@AXAUiWnQ!}dGgSTfLRIBq$(@L@LXR2hqy`F#oJ&mtKN?b3Xz+_q_> zz8e3QVj_fXgpl^L#&yGI`Oy)=o4wDz9~|oxxI(^%KFM8_NOEA(FHfwDM3q4whDsg>{NC^wx~W~~rzRdncvx&`7xUjYR2}E9s85S}!oJN3 zlDgL20)`JmO@ z{O)y0N*zJWdp_^ zC)#zJFOzn@a_HMk+w;G6ou&3tH}b)>`97DvZuZ&Q$JDQ+nr_4)_~2`qb~PbYYB=th z&DPgPr@kH(Tp9Ss<0_por-iY8{WMD3 zuHkq4t40&URxb1VH=|%@JQ>n;ZnGwONoGaU*|%jlqwib2JY+cNnUZSpYr1j4=4$~v zCKr{>|D7F;2#)ibbE!xvnYq~uGn7|I^>g=-|AZVA_}H?(FqS?^d$7u}`;>oJvEYK9@{_#r3o{b$&iXfYWVq zmK^G9*6G0uhDmA2vh+8S=5$7Bzuvmtom2JvZ~V}5Ytam;p)B${KzD8w>%$VC9N8*5 za^I^Jqs-|)CIu~tr))-pGc`j=olRHzRqwm691#tzzVu4VDK|7}4>u(%&DAYg!|2l| z)?!t%hW}n|RMEbdST>M-pw|p&Ihp8pOJ{J94AC}00_hSVM%m48hQq|c`SM+w$yHez z6%%VdZt-z#6KmqX#`|H%qc?F1(BY*g+V>Iaa^5la$hr(=H_K>*WSp}s`}73K2M{k$ zvi$t82m7+>N)L1j-Bu{=wwz|7B{-QK=+S4k+91*fnuHCEJFMuh|8XB=a)+Pa(>ye%RX-Laj}<`7;MEJIJn$<`ExfPdS{AnKJ`p`eq?#^RMM)!<53tf zURZG5-W1jt|4Xnu*QLwyWacTI79cV0$hY}!p3tpwgrg27r&~#OR9FE}vwd8{&S*>*amt6GA9Ah%j=qLiUN!w_ zdDs6n`)L0)0O`*tX8c+q!9TshPe1dTd`Yjd7V)p8?e|iLA5iZb+Mjr@|0||6+O71z zkl0}nEYHkt+VkdTyO#FVO3&1uBl}r1w6eg+lql+XwLPp0ocqBgF((*ssQ5&BB^}%ldYXG8Haj*b`82}3jy{bn0YSUdgvRo#Q*Uw~?UjRU~s@ObuV>D(r>-1e&gUho_ z@y1iYKp;(1`Jp#c#WLplTYz!X_||rHEr6KmYZ@{K@&G9L<$23hXRWU1!IGT1RyG6| z0ltxgch~#Vj>}agF3l;j<VzB;}~EEDNRDQPfUd@!5wEC(Gm+}})x7M&~l(CTu< zX}=u4H;J@(hY7;6fz`kz$OB>ew(JY89iVqC9gWzWCAafIom-g%YWWUfkP!PniB%a4_DY)%DK(@wO_y zF3}ExO#p4z`k1vci^QF#tBpY}^=8V$6T-Y*#b3pQ!<(mT%_epWB{ zvG=Wzap{;ZeHzau-0DJF7C)(|Wmz>+*Lk0Uf*7c1ggzZymu1U*Z5-LZoxF5@>m>XKK&-N2KajR35+N{@1fqX(4l zlY#qLo}*9jG-xXFb%$`B)%Fq_Y+!w8fBZA3yOFvBZ6N?zT5FiONE6{gv*}L-`OajC zlz_E~;Uyq(Z3LNZ{@7X(DBCGN2X1eoy7G%IOcTD7l-&TfL})8-qO~_0Qz{O_^a4>U zp|}txQq%91wwY=b&b%j*PWlMRtgy~;9|S1pIwO>o70#emAelh`7P_6k$v1@YAHivv zHr|%g=4K}Ty@3Ci0a_L|H&_fl0SX)IKTHbT+7y$B{npS9`BDMDC+fT7@Ff_wCcI0i^YWAA2FBRhx=YR- z`Ck+p=&k&v^#=L)V!!Q&Yc8Q{ezDLuhHfvRliW0dD+Rnjn>p#~63Kgg6$bD;3^8j@ z27BoV@_kS){jK+VI+kqY;+A2d6$qTei;DIsfT&2(EJJb=2LpjTsfIBY&j)eULQCkF z+k4I}0rLt^U`sL2XO-OsbAceY5_bvOeHqS6`pAQND=>q85bd{mS!r&sg&xeL6<~-5?0THY-fk5?b!|!xW7hIxV4CSpl_C3 zM1Iwcx74^^JvG!cRq@vF=OVZeQ_&LA%dQ!GOwbF4F%-LX)jgowj3e8*7F>Du{-C=b zliT6Qu(^5IMibNn`w_5+pPn@F?EN1shr^@mjx9P?NV~hjX;3*S?7%c`w|wx7iG>5H zAt3}xY6^@je-{AUEe^eQxs!AS7l{|k6$t2NiV{ z^LCpG!Fhx)*E|Bn>w(ANJb>{73T}_Yz6^TcgLwXL4K?2M7ZG>L=C2ETN3z`f;ajEK z?pt-hj<@L&{&dc1i_d1LCb8pe@j0pO2)x<{n=l8aRsw>}Z_b&1!xBK_CnRC?ThM&K z0Z+KqiztQER*-$NzW;YM(Pk*)4>eHm7Ej8WL}o~&~8)8n8I{Zdi)&^BqO;RB}wbYkM2Y(~YFD;-~B`pVon!aihFK1u9 zVro&~qV;iGrCGH!d^O__4 zwH=$!d;7gMvuvBw*~Rf#?rQ5QCH(k%&Lm>|UD|G9B6Al&pY#I$VPT4!DY}(aEn{-*ciiXKIe*=_ZlKM zo!wtSG7R@u-am0h0A)vJD0d?_Em@r1iw3+hj^Rv2&88WP@EtW%cZXlEGh#B7JFkAXD|3l-}N z(`?>6X7P_RXfG~#cSwf(q?d}D@XO@WCw4qS(4kiaTH+aA%oK*^w%osQ1L#=yUVT)Z zsawLUSxr$4VQ)P--!r^>^YNBj!FJvX?IKs;xpjinvDynuw#X`-X9C?6Cy`h_m^b*w zePlUYwi~k1m|=Tp$sEeu4LG_Z;WV(R+1-@Xps-Dd_xzTfLRY2=<&~yhbNdrQzO&tOH9= zs4%-l>zk$162{rNo(Q{jeGmMNYMvEK`FGx%RkSOXjWjEkeBs_zo9)dCqVK#h`8+Gb z|AYpqFT%Oh_{7RoBF!MGKGvHG+O&o$hf97?yS^$j@5$U!FL}v_gL$&3C8a)2!ZkzR zx8~yOE5*upZkjjdqU%KoEx(zrrnMuTop(|djfGT2T>Zr2W zu{E8k0rz;wp*3Hs&IXf%VKlx!1$pI6wvm6cC3uY`0Mo=4P_;&bcKJEkk;J(Zw0Bjf z4K(sq?GjasMNm~l#9{ukbiY#W2z)gCUrN0Z73F)KP}r{Ez4v&61&P0R9R%h1zqG)y zC&3R*u7ScFM9`p9Djiq^Z6x#;P~l6$6zX0BrR)C0>1{tl!^@tbbLAofl$fvYiW-An z7UVtTkSg)z1kDa-wQ2!4K?BV#@T1!!i92LJc0noR=ruCg?zVuG)H${ADeX9>fr`{5 z4b5yQj~oU%WTx01=BQ4)m|7G(G?QuiSwHp3Vo%LFA{NPdZi(X3`H$Fp^ zVCkU-vzH>rFcGxeN8?JBHQP$<9Ff2BR~~h>m`b_b7n3hB2b!9nh6K}qj_G)AT!rHq zV&_|H5>is~mJ>PQ{z;d-U4D9yXSLrzKX%Sp&T7*sLn`8M0siAy2#wzSECi!92MD9W zB?eg;9*U0J5U%!CRJAJHObEO2AL#h+tz9>kKqp2@`pvzgM~q8(_BVtda9trwnq6^W z44H|hBM-7}%N;2TY*!{4(9h74Ek|eqoj%IMA1W|3-ysi14^DG?|3}dNJ0X7vD8=xQ zgAyEiRm295#?ENy$?I8Om7p^Tda`8nOsfL2!xmk4pycvH>*UcGCN70bX{e}$HL&zf z|9-E%;FygMD}Ld5)+?aM$<(aG%kozJ{|K{@FUqONwM7hzejDO>Z)@*f-y$oqLjVc5 zo~l@GmJD-$L3n$j^qw|_JY_{gw7Jp$f?0kn<)>C4_fxI3S89J9`zlNVqA_zL{Nd>6 zm~u#?QebZ)aQBrIWl=Vcj_mciHx@XiqOvMiEIG5qK@PI~gx>Af%8!j_uAn8?rbnPR zZv02kQ>iFAq9W>xHiOBNiGore=SxP@AR1f2v}7F<{;3|L~6qp92PT+!+*T6JDJ`4*3b<3k;{m$=HGe8Q)a{k&dvRGe$vyc^`^^SDwhh z^W*sRkgQfMb2pPg(Tn;)ReuFA=lw=ORO@9ws6%#bObpzEa!Uk-i9Bmfd40b8mbnPu z!d8UOW*(&?|JKKzfO~vbnJH6FmqwxdOfO(XQ7ZMpO_~_ckBFcuzIQ=^A3uJ_tJ8h~ z!T!_1{NsHZjG#2jVkKeb-uAmY1uhYBy1&@8k z>hDP#TZC7Ke*y7rU zfH_AF*(#Ybc{g)p**nvPdA~L!CpBVQ;B|c3uj9JW?=AXNNv*yManCcHe|s8U&A*p55)xLJ!>*jIyqTM0kESv7QJeu|99Q>ZcQUyGj0_4q&qN4da@zBgjB=GTdFs0_d#4-Cz z*T7Y;Pd3V5I#UZ}FOxBj3s6wTQ}|G@{kXL)=W#xnW#)|i!;z&K6SnmI6wAH@%oI6X z)B?S?zy_y$PL5F2;NUqrk(J${a5>EL9XmF6xzjDO!6D-Mx6K*bq7E&M+k?k;0)Dv} z&~Br$!w;uY=?E1rUDyiCfVjgT37Kuk?2q88U-Ov0lAHew3qe;no7c+ob!2uZMQrfR z3c4LsBhx%C^!^U zDMI}kswAgOCPZxr@|!7-od#69gp`w#N>oB7w-3m!!as>NIQXFY*h#H z0m$y0e~yDNDKyBMh+z%cx%HoMn@ae$@3#6NFCnuX*a3{cS59P|uc+UDPF*c^b~gbI zBVR`-et+h>sEEle=4});jZNRx{rU{Mesi)_;NDjOjb% z0k%b8=Kc?!BT;j`pexkd8sfXw^ea?$2Vm1}1K9x$r3WI7SLZRT6z_e~YX_byaouGevc;^}P*6ktJyNElBP( z;C`IWo+i1isqOT$>?6v|A0iMsnHfJg_{e*{qH3EhJAk!PR+R*+(g|krK4Aj`(q$(0 zlX_>GR(QMPso6bam!Blhg&9rtT3ZIq4m|@9hcUGf!IL^vq9KJ+T%3}Y6u$^pz>4(V41=wd3w z5qNVD25fU^K*X0e8zo@w9Ke|?d;RXa?-@!}>LyA#uv9*%XF{8X{H84yC1!9jW3?KD zSYm&N+qlXA6M7OHilbNpJ;z4q%O?V@5NO*D4ZaI}Ai& zZ`U&s4MQv`l2SKwlYj|#+uA3;HHS~fY&I+jSU3-lI5BMlYuI66ExEl-^Kv_OJT}mg z)JfZ{Leb*4KDom1$W>%o>cv|zAbNIu#5yc5l|kSg-|=wUIQITT$An`K!-)*UFR8s3 zembI29orFf2fZ&U;$}H}T9*#IyEzFS`enwTNyyjni~31hxIG#iWb)&06Ij9RUq5Dl z#H)sj*R_wb5#g3B_l=do1V{S8yFgS!JBsapf*Rs0x~7hA{G6o+9E8c?(p!XY`=q6x z{!Hfb27QA{2mO55jS70eznc3R?LH)v&~KRK9{Eh@h)Ut}^d3WCrI|&b=)gbK_y5i= z_!#~@cv+-8JPvgDKRjqiKWmEeuc^$c)KI>RHZRW%g1x@?r5uUlu+z0F9=0Bz_aD2){h~Q-TI=cQR%HfK0mtwzi zCs2-#9kW{Z;o8SXkG1IWkFzCB_!2Qy3D=?m7uT7k;sJ;zPIq=E;y>(!fczR}Y5V*Y zk2Qdu(EeJx<0Fsmi%rMGvc3zV+Bz;JrKsVQ{~OnE&6e7?XBgP_s}e?Ve)wNv0yDOC zb=wqX)&C1jU`^rx;u;+8{ukGALo&kk zujfUSy$3ouh&X$s35B~$S^7g)^-lZ9u0=$^%}@W-(B&W5)JGB@BRbrjBU+eQuQtgG zgkeQ>;u1&`jQ-4`nMcE#L}~9MnDp@a7BPuivS-})a2)pMGmlG(O0wdUupKVSg&u`f z1tnQIQ0zbuFH0fQMm%ERNA`pDzZWXh35;FWmd7M9aYD)=dz7qC%=fq4Z-(u5VfQ5{ zCW|;-=^M`xyAR?(w|7#y3&OD`4@g9_)yp0&Jb$O7$?TZ4@TuMJEr>U#41wBKgD1!I zh`^MC{S)2ZR?h;hjt@Cc-XkE_()IlbdN2Q!z^q>yt_WIz2BKVuga+rEy_3iTUB=wN z2ykg7eY%OAfoD>}Ls;)_4*5Ix>ngCDHb$QiaWiT~bzUVKXNc2hkRtpnyymxb(|2Gf zrUg|wZ^#(hwew%>&v{dd1D2;x;-O|rKzo5tO!BE!lghjYWrttb z|I7{bYuSBJcj6Hjn-7gR>szWyZSqp5g&cf_2=|vgI(WX@fBLQvoS1|Llj3g+PNN{& z7(>CE)7Fdwb=J~B5opwnzq3_15g~P2LH_Y}ei;uB$KRY+I!h)Ka;5Di?xHke`X&Oz zRH_p`q8`R+zse-P9nw;b+wqm+6=dWWqAsS_(9 zBDo{nf?O1)YREGfc=$wg;F8R~CBC8AEu58qnyl=ake#28-1X)yXsq^)5uz`kn;*z6 z3?{OQM~+H8@vC$3Aa6&ex&^@VePH^h2wF}8O3oIW1y6pDR~Nf)O!HmJc^gY%@iTS^ zMJg3ocyy9s4TbV))EoD`@N<_R%+MEfG7PY*x2E}W=#_!=zOM>=??NvoWko$AqRELW z?iJ2N6d?3JV0wOq^THhtpmbRO5lof*!L&yLK~osuyM354XVs)+VXN#YXqs;UWT4kha~!FBy8XN~-g&=8U2l5l^KCMrOge_tr;YweOU!a9cx7_w zn_|xVRIbNdvgG60<6u$$>E(b|yZZbT!>Z3*^3c>O52w8?`#=M$Mi6cFVus{nb;e=_ z=&^c#F$MH!Bs^m4(EX*jYDDC!$Dt zwq_J)v_B5H^}z%1{hCD!txr`!yo5T4id7%W>%z*I$9Cq%0*0+o9uqs=K_Aa8@}~0UkoR zIfKRaK1wH>K2)FMy=^Tj5e^c@Q*8Oq7PjDPJt7<*B=7r3F>+P>*R(^dnV!uLS$lqc zv>o3@Wj8d!Fp!V&vd1;-H&iwxk#npPd93Vm&TaM-=QeEi^a<-fnZmM5_8xcZNi>F_ zp@7-XmGcAOyW)IKhNlv1fq|@R9EWvj`XF1vK6pVjBv7#fTOe!0Cs$TJnhA2^Dv$Po3=L9)6J^rv_y z!|{|TeJ&#=mh-F167V?AL1pEICQN}!E`r@I139XnEg8K1{+l_R2@k$<;3vlY;Q9hV zE_nZa&Fbs=3M}uRvWixd$54@GIOnVplhTTB%#iNHTt`tnPV) zAIMh>s)HTO@txKk4&tvyN~jiFo=S$Rx4`rKpSw=c^nLG{aX}B)W zDIJf^)VhHjJ2TWbOuhcTf9{q>EmzqhXLA4E&eSXFX|X6U3ft7c!b-nlYJv{a1;peg z|J7dWuMiyM^oqX{+qSZ0?>AL-S*M4GNqx-W>>5lZ)AzfHIS6D0ir5u2UuI*kusk3l z4)#b@CJEkVMFd-Q!bnjMxb)ce)?kw#8PF|54)KZzi-{jh543X|1P zvO|?H@$z@(AUn|s#IGzv1IXnbx#qHJuEouRdbyv0=p5%A`9iqzcYFIrpxy0X!{BoStHYSs7eNK zCq=p__jw1wMN~fQp`@iN1_vvBjvzy)|`zs9RO9-uJ`>v?0lUE`y^SMh5_G{^W zR4N2JUCm@;r#T(?p@I6RnEz}qeE0=9#`+tJd*ScNHz6eSSJH`e=4}({!TD{R=FRst zf5?E{R~Rg#jSqdvrnu~yNAfMr&q{=lgCsMzxT`Rc~QU#ze?8fABnU`yUm zMcZE^Yj%vV6}t4j*|vZ-W2Ik^O>DWFKlQjiQ)xTIFJagAU)+CZ2oM=~vl}+ci!aE9{Ku_5Q5&4><$cPt6(N z6%}_!hu}SXlqls<;+Sz6QQyzpJny-DD%)yD-P)=~-L^yC%T#wWqAV|#W*Pevqk)Lf zQ9$kXr>672dPGTmDxDmMupuCwFYb;p==*?Ua&pEI+NSuLZE`03);`Bo$-ONjeGiCE zpO&0#3oL^DXmFO)=Pd!m+@*d?az*mCXfySkUbvutEWGLu@SjU=1l~hrV$!9`)nAlK%Y7yoB*F9#>Bop@*N@sw!V$`WTf*;I6@b zc;X;uSu9;ZCQ+Rp)^%Ar*#FjGFppB%B;RuEN^Xcl$D1W=c(PtGKY>REDm?ij?>BOp zbrulM%}P$!I!>sRLmI@ZDivB&(tWp3%cGAOOL!TSOGg~BODat%hTbU@{K$i)?sPww z`lbtiK~-GYU~xF9YnKnZ`{rJMMa7+c;2NY>T9#epbS$itRZ?jfmW3{n>yU3UqV1cY2ShqEuDdeeCUAcE%Y%sqdPC3rw}6F$SJ#G6f@?T$TSi zzTNuw>9Y_#vfHKXyyxPX7PMusw;LGgjr=@`lJ^Bqeosdw{FL119C?^t* z&sO%nxEGc%|)d+Y3*XJ(ZKD6POqe7oLs*>tunH-0d2U_dkTlLq#V!%57OzQFrc z&|5{YQBUn}Q`*s)*Jp~$lY+hBek|+D#W}BYj{)`sTuN&VL^IskG8^65l8N|C@2Du> z+Oo{+u^R_m6Tku4N@E9K3ZNo8S=dEwEi;%31tlPS^#qso7Uly;$xceS6w%-GwmhK7 zc!8DC5yQAUOWE>dhy{s3ci<(>^77V-S^dKZ?BqJ!%g*!*!f8mf zV+v5lx*Kddos9nq_R?FJ0qv5V^s{)hE(;{rP@EK{Mm23YA4a{Yb*N zYK=eWRlhX~!B3WNAIU-Zi>ka?6n5KfS=k!}m>v{aKIURbKz}M5kJI16Id?VvK7!=D z=C66{63er5*EXiDf@GveoC57?axKBWULL@qO#u!S_=@Ugh09#J;{g zd(GaurMjx>UG%~GKj8pfEyf22sW;s%#tQxN9==xJdnP`QNO60;q!6p(loagL<2kDw z5)SsFdL8CX*`=Z6rM`^|8~K8n-{ST5n-p0h0tgv)H^8rR_;w&q>Yh6Jc@o5Pw;>)6 zb({pz>D!qaoMx``PL$$!aeimnEGW;4Nu~Z1B!T)&p=`v~f!?e~@Q0jg z>%npP_(-0eX%i^_mr7GWgc~VZ<48I#ER{{dCmbx-T0>>Y<4nZ$#oMP_wYTitc#TG} zRbQQP#mhJWvGFM_G8Ohr&@AU)!r6w>e11y`56g0UJgMP3 zVi*%CV9G1g20^N|WhTq&o@j5%T=5<%UscXv9)L!$uPV1geMQ+99Zx7-OIGTy-?gcZ z;mow?Q<9zT_>-T0d}s=!oG)G-tIz+E`i7eFbjKL>MU>kF76MOd(mXXL1a)Qh^6Q=& zYZ-MxgujNQ!f3g?)8p~Xu5l<@%h@Sf^>aAAYbVq2%slbgTJ<%Qyeay39O&27dmvX| z!vU@zv)MEmvl%xrvspuze5>Z>``(drwcbp5Q}VMKE+F}kpPf_ak?`rwlb;zs=55sD zz3+!44+@&8hQy>E|B9hZrB&~TAoDg0!ZY3juP)!4iNwDLg!D{+)(h81oSb6|IH#eJ z8wED#c4z{80fmhZERo!Lq`~EbRO9e5Qs?rS=g~bkmg4ZKXetC)K(a$4^r(B*U!`lz z1c28NS7KP&W|hH7=dQy=NvTMVZR?jh!vHgb6KF0e_2OAU>q83XcKv^ZxyOJocj9Xj zd@^slUPNYe#GiMkzK(UrI#+8HVrMi4QP#XL{tP6k#ETt-gR9wyh3m=^6Yp-=G<>U- zgY(d*;(Rr4H_V38*DTKC000a9xv24(2I}wmG(YJ~K(1cD;08 z?E#^e31)Q@tZjQ5iI=~4lP--vQz7qI){B{DuYFd?X4T`UUxD4G&E>naLM4fS3}GDg zQTn_Vx`_NvF%!+donlnoPFmqKYz#5`PN@-E;nvB7-&jYIV>;;9IXfjx&aU7%>hHio z;GXxAcodrvDo zsyutIF6CX|+cZq4dnoVkT)9vwt@Ve7toDzl2bKK06SnC5i(cqWSM;K&g1=?f6}lsO zyMp=8-I;RndN*#;Rf#ng=C?*ua`C-fmCyMWc zpA@N}s5TIZM!eNB(U|`C^&gpbFZV|3^!XpqrRUs92usZnqzW1jj$V&wFmeT2@&om2>Ez$055#eCwh4eMLe|a?53(hvnv$^F7%4ZEegPbSKz=B9Z&s zcE$cO#gT{DGt|@N6C6`@Cz&+}n)|cWPc7^n&j;~)4R{N->~{aEe*cg6>TG6!>+F+o zqYMxvFw>SjkA90-&~ZLy#q3PYDaP^l!gK>?z+a%Pf>5_N{2a{OgwC#vr3MXJq?;>C z?(iAGfsu0U{;NQ8&TFp@iuK{!=~Af?x{6ge^e;9_%WKzC&+ZkzA}$74Fw+J!hJ6j? znL3)_c4`^0q_!eCg(v!5>Gs8}HQtx@jF0u}6$Ut{0g^lb1m#oV#omE{%xYTh$AgUV z6aZ@?*(dJ4M}z#;xFF8@lTR{*9W{)O*(LLz5N&!khTR7F-0{-Bi)Rj}*0E+c@l)R<9M1KqztpY>bzTYa) z*=En_8$FK%RLRUsVe5?TGck67>hJt3mKobkDV6;x>h-{SlJ00{fUb1o9>d8IKCR@x znO^HutUJaT32o#f1N#A0XFZ>R%kU$i^-N@7dBN`~?evCTTaCdM+>w6A*6242S*S}u zVA2v~8FvX{#uMx}pPhaUz}1fHjYF;%E-@GIry6_AOvF(9j@z17!;hH50%^Q;-u9UJ zIeuw#4^^In^Z-uncCAi;G-3{w76J;EzqI-8Ogj??U)f{5+2tB#KBynZI7qhLoLgvE zl$B}ocVui6i3qtAq>+L0kf5}QT%lbWgKhpmD$@a?2tMOpc3pX2|GBsf+Fre0Wr$fO z0jjSg_R`r#LGZ;w47OM61JQn5sw38Jz5nHapIf6D#ogxiOPO&ANZ?#b;UCQ10tWiK z&3fBz2Ive~R_aN37NwKb7!zLvt~m74$~Zi=QPynPyB(&Z;xer%gX={zF_6<@~O#iU`{ z#dH!FANjz(R}lR%WQCtZgr_fF2QS1-KQS+LjAgH&!y;tGsO17t`Xx`)k4*3njoak> zW+}}c5J%ukajf?8XZ&qO9;Gc4maor~%w&tb$trCX^?uk18%tZQ$o?3dLz!&MEA z&i6}WiF`^Y%w-Rz)Nir&!{8+mmo_)1tJuClzyF1&g=AhMw=)b3oWe1lqpf;73-}JF z0uZZ@y8$lhO*^siPMpi*`H+<~${k^(@nDl^A=Hi@wGD7Ma%EqWsNlC6v>ws6V|M!S zz5Bf`{RMATwY728v8Y=#qupJgmD9g|YR>>)ZM`L)a8Y&LBwygT_XpmpBg#r@uUDc< z^%>2%nQw?d6dz~+@EgYx3b$v>Z0Fh{L)^?NDigkeo!4mW?kX3$P}?rLbFWXwRbSR$ z0=Ekv?vmxRo4rlzc*sh#;eqtI)`FrxPyi|7NwXZ`))!$o&!JaTs?qpT%* zcTpND-X7KuPfX}FP?!|w5M*sX^>88uH@y{(;;WlSWQ#W23r6vozD@6ie+%t}zn#p8 zSUIYnk-RKSq*3wLQct`!7E$u&8GC!#&E!IXTySPOuOF7(f*?ob`OdAgPYRriLHusS zZCY1lREQ*G#)ZkC|IbO$bUw)b2j6v)7lL5b&{5GuY;uW6P zE56@`#D5)zPi73KRum3Xran{K9-;p^e3NvwuvsUwtqLC3MV@bKZjWpfpIeUriLCfs zl3ct1*&>?Ecc`2UOqpC@KX%>rqKB;;era9gWRR#{yFO*HKM#X$yFZ~WQUPRB@jYG? zuhc(1o(mkO29)4(f%Ox)z@GR(%`wI85vjsqI9|x`O>&BEyS}DAasw~E#2=|t>d!;S z1r`YgYKQ%=lk5K+4ea|RU+Q1+_J1}6UAO&61E>r1_X_Bt=eH)Z=2#PHEK=-mMDf4< z`ldQaute~9I?HL~{?pV8bL!HlH_PWE-XsX@tE{dwM*HMMZNKf5qMEQ^Io3PFG~ z1Ik(d@U>)6gGUU2{pi3JHI^^c(jJiA%WgslL;F)tlBmHuzx(0m?|>dU11${59wz~s zPAV1wTf06*9@zN1T*tMVlD{2La8B4fwPIzM*$bZ>g*e0b9QG)$+@WoQSeKCbFM-t* z0+*^CJ+TiTLqBe%ilYQpFn$5sj4Z)jgYP%SUfi@{sAqDGH1W~MAV$sy1Hg7s_X|Q@ z0Xz&%e2@HO4?D!YP0*KYN2<_?%SC)E%Rs;VU+Hs{99>laZ|%B(+s=HI;BCyEF|Q`r z2K};L1#t~u-JM*I_u^>K(HfaWvILSfbUkhcNlHs~N+tYXVSXL0^Yz`Auii)s+%rn< zbCB5m;_%xB{jKHkj?Yo4wA66V+1yl!VI%Odf{}R@xQ2AYk)eg}Vs37b1JWyK^`zy= zum&E&@aIBf{%$=Y#sB6?=lWukQY9$oW}rh8zv9iCZo^y_YoCC)kJNfdR^kUP*Pl18q&5Qd{uU zIzMG;^AATCr>oxOm(4fW<5A7YyD!qE9WcMM_+-Cd?XTBEvy(0qsosX4I8DfyWoBJl z+Sl?nIv!D!bUX=oMAC&L_Ky}@Te%XZ0#D(eW9knhVrE+0Y0As{n%!q@>+j zrLOkTXG_n2D;(+I6B(5ar}iHily_9)CKgGrx0;Bwa0O~b9i-gY|3{KveYYe3_uD)x zeartR$+wwzhBuu}xVA?(8w*@GJC2jHxZ<_Er-VIei+5B@?(#-Wvfe&~nH~Ng-*xHO zQvhBSfPbK5&rShI{Wt)rf9?N=)Svs${b~0)Q!N$H;}iOR(--ZwTL(4uPMmKoqPJ!% z;%)H|{%N=@%iK-pPuwtgi5)rV8uMvB;(dpEZfZifdxQ5fEHy5HRh~-Acbvm%pJU&Y zOs)N+U&lCzmc38yRfcgV{D!ZgVA|k^?*M)N*z3l6Lh2+uL}Khs2Qi z1lkLUpXr0EJd5gHhLUX5oC&MX8!^|#rPjSf$CJIG4w}IE$r<>2GU0({VHsk~IiyxI z30XL=m?;tqG(GIX3{gu(q4F$>*Hh6j-KYs*&mV&-Ck3GyynK= zxwtw~&3p``P>nD#xfr7#F@dc`k2I;M+#ohg{*vG0)cj_+2uovL3(&hUhQBFr`^JyW zOII`v6`MUHPmDfcJeqcI^h`Ex4|}O;3_A)R>4(F1ARH;qsu38iP`?T`aCW1=U;CeL zkUkYvgE5!b2jlqNYiz|MUv>^>KJ&KoFpunSJTs_)0|> zktSgWWXeyi2KC|k3S?Z*l-hBnh+eLp4XXNHDMCqs3e^+n1?(2`|iF=s` z7S&PwmUDU+BSBZOV~(G-o}~nW5`G^NJ^oQFw;mZ#yMN%MWQw0&P*+!B2J> z3cF0RU>lD%x~vYbtl4V$)`(X+ed~C(yH8*wQoV&b(G9Kp+~9V|G7C)g!zqvSuWrr^ zl2^e6TYiH_do{abFL`qZyeAC2=B&4ywR35;dZ9JZs6?Tz*6cz9FJ8^~owGTUSo&Iz zZSqaAQ7xzc5zbpoXt@rvK%I)#q8T_U1u59wZK|FC)c0s7b-F9&(fUnlT9YFDYg_7y z!A9E&x+W)RoqItJi;+o_R7baTS3#dY-S7H0*===|am{+9;q~(|XK6tRcV^tovU(`)!`dfyU#?83e?ITGn4#o~=v`0CK^s(ZjZnr13~&diezosUp=w`?#&1}`ao z*vVtZ(r7T#!VXZI_m{U_jv5No!x^mwl|}Z7(^MtC1|Ro__)42pd3*h6Vkb+I(?f1Bm=K|@K|TZ%uI zpEXY<@I;eP+iWGp8u_ugF4hP6JSc2*KdUWjZIrb6$XY3mu_cUvPWM{gGWBgJjxScG@eGvcfI)fT!3ju4=)5N~X1r(aL zB#=X$34IZ5A#Hj>%q?QbrqQ=IH)jzRMlQ0WyW;FSX0M!!sXxRfjJIQ36<77)hra8a z8SX$Mdq#}hv7hC}bN?V|;apC+@i{EfV@Fo5UW=_P2xY$fk@(NGFZbPhZ*~k{;KrlkM}s$==A>aQgo-#k%+T3`5w<+Y7Aoig_I2z zYx-B%5j~c;E>#KNSWDwUShVFMRlAX+n6%|}0llZAVq)!}d1uF7D_Z}TSMPAB%k%Bz z($EQ?-W!V+g&i7=?ky?NBHS^31=t6R? zlC8(Ulr&52r7lPP72&8T>@*?X1;D6|}gc3RtI7K?Hr$>gCO!)mA@$@GN-?` zoe-rTzniyY6Oxwu|BY6!%2lpP_<;2CmTFW3>avuB98qusB?W$%FY7kVlJ;x*{4n2+ z7XP^%je^@iL&Vqxu%SrH>#Px#I`2Zj6Kbr6UFDUN4})kJe2sVYxjrZu+?iQxGgRn| zhDdjOJVryR?pF|^cc>vedCz64CO2w7A#zYd9@D8XR*{7WZB#}>ySww!3573f+wHOQ zZ64?tejq^{eJLJ>*a7Qj556|cT`G$r%VNbYB0qqWR`klr)v8L+r^B0_5cp}%mRzf- zhJx4dTQ$!ds;tnZlIi}h&1qZ+@7mUeyme4_<-Utd^Ykzs7n6In5>c)kh0#Huu2ePY zP7MYzhhT6Y|50+@5(gUQamCV#e@jn#l&r*fo6Hov)4P%$e z6s6|P3Ka%7=WME{DgHBm1Nr9)){|5ihp+E+8S7N~g>VA(3br8n(XYcG5tBey2MJ22 z+^dXTUV3qeR?$RrHVP1*L(`l8oCn^x;SVSFE)^5in?N-3BjF+7hK&dle$CRXg0uZz zlgJ&<=L#FYi#4gqLYc!BjyKg|o&U9<1SvQdECdTX{W_+HF?jN?`>jC+Ktt~W+@ zWi+G>FC943YAOmXLX>dpg?D+immp_R@dNePs?7_IAvd|`&mV?U4S}2CAu{mV zyvr;Z=%X16?^-Pii`!1G_X>t%OMP@T@%ncB#{UBqh94VnLo#v}$8iO5M7*|9fUCTV zxWi@?Ghh)|Gf3(E0_KsbS+_?zVLg=ICKDQrMJxxAzHliu?eDm|%9mhse(+0$#%kBg z3jVuF0FtlmQ-C{GR~pyn{#r-8_&T91LdMP$uiuO zTWG@Yyrfs~Ki`JYAW85}$4ba(P;%jBtwNvBKOms|>3+D;`uEIvvO}H93LF#$G`dh_ zTPA$YBMVMI1+IUaHE$kyZ=DLjrAm`)NZ3@6fYs$6pvQy;#gbZ{r(oJ!aZ6_)R+Vcce44E8&0Wx-_M zGp|Y5x)BLHJ8eNmp>k_^860pDQk|C7jec1bCqoYuW)?DMLnz)nDFN5h(WcXDyyQNd z6+LiQjo>z0NMOy&kqlk`<2=knmVeD4{w3A}mw?ck!LIfHYv4SLr!$_mjA8^QH_Fm5f&J{|T z?3u*QF+OaLME_=ShH)!m?Gp95`L$gJXXv^`-0<3`an{wI`j$L`1{!!07Rzb1a_BsU zN~lkE?xeXK^tB!TNwE&~D2g7Kg;0b$e4;wTmklGHfpA z{97;$AzwmJ2>;9#N<}%C-*p;dKWXm$Q1IH2z8`Dr%WH4F&eW2qK1RZD>`z>w`vx;f zT`r*x!{#Ei!{*|T+2NeT*8FXY8G?q1>AgwBoL>azk|t{J=|8-IaD{UI`6`%JnN=p3 z78j#VrPjxl-1R3|=LNyQGM|OZtSXFO4AY1fTUm9mGQWtch93VgqE_=@Dd;*?b(%B>iR=ZYsZl#j8YzX6p!Mc=xxNz=7OiF{ zG!u4w4KHUWEY!`KG;co9X$rHA-|)V=CAfv9S-;F%h2a>xB#P=)c78u`cf2$JBMLA+<+IP7zavwd7Z>hIQb^%iqdR;w zA14={8}@-s!Mi0FpCV~v?$_8qqZsy5x*_LYw*{^dBOE1I>b%n zQ;521mT*^L_;`l74yi0<>({=*?ZRIsdm-XS#rP?UQ@nfyuhLZ9Q!!-?AvNZMeoXi_ zJ)HPEUMfcX;P{b{M8?!o^A+-2YCV1iEUnXDGfzip&wrT{@sx&e5*59g%Wqm`#2^2q zGaQ0k;lMAPUbOC#zyIOe7+qto(#C|pGZ^}6&e*(W&6I37X$1wry_-7e$_i2UdPM20Ebtfa-SyX&mw z0zBJrqy-?KW6Ij%YMmZdKf}DYWWwuT#-haZ8_&lJ^w8AD^z+EW>o3|UH7Dq4D|&V;w4w*Je!yptVo=b4CBRV;&jh`^5~4lzF3LfoAJk=I>m59;KjePeQ64DZtM;g~CooZ-s} z;3Lj?L!7gD(t(L}_-D=6{xYQN4+|ARyU)%%(<^fq|9R~o=^A`Dit2;BgM&(%n%82_ zV;zsPKiE~h%}H5t+u`b7QtH&hXuWubGa%?Yrl?qm(ydTPM%+#wp?JT3aL#nLrh0_< zwBA1yYK_g>NVL`kCo@~O59AaiPJ!aL{fPMd9hFm@S=-4pi-7IC{1!;^abJNj3|9ou`s1)ZT3%2LKFZ$IhMkKUedb^U0d z_anB&Vl02n`Ku$3xZyS0`eIsEY9-ycj3Jc8_csWR_Dsqdejb``!$@mqYgAb&J}xtN zVa<4CM};#LiW}@g(0Gw%Qv3$R!pG4p{`nM{%v^3-a8;2tvx6ODx7HGUtrJT+V|USm zGMJ~GEvl;g(QprT60Y_YP{>*Y*|2y2(9f5KvSP^1<)%lSa#q#WeM(~O{(D`5HE_2l zXSgg~fBy`l+bn|MYdw=2VKR$D?q?R; z(ba~0b>DIPjM=+q4Sq+y4gMjI~uiH7Me~-DUP)V+hZJ5iArI^wY zub)|zu|-zRkjfdp>vK2wskN&1^_b@ijtPy-S3slNJuCHWT}MKiZcyFXmc+QA`)jeP zt8Dkm!RXg*Ml&WV?hoi>4b&mHCeFdQhv{$5NGcvEq0<)T#H!!H@_nmRO}MSBhy`;C9uxN%6>?p$Im_r zqapi{EWr3MoDzIm)){*Z@kPb@iX?gQEKpbw-6Hn5_H{aHa8-Zd1FDEiaxi~pnq5^R z+UvPRV(KFbOrk(G8`=jhp-ppVEEix3qQdT=&-CH%bL$WNE1B1&=A+3U6d}es3tsCq zlXNk678c{TrQ7U;3JPH>=%EIuYk%thxEF%bp|WTYt&5AxncCX zY`y(v7Ryh;Bw34p_-6VTI}#6;wqn3Mm?H3Qc1$8mb5O?~>x=3Nb-bARzWmN4N*%n> zXIe>Uhh%d%z84vL2F!ch%`tN?s)aFMvfKe`)klQ|HfeJ8pZJ_rTkgvSpJY3BM5y)* zHkEr^&DZlWXpH^D_DY3u6 z2_!LHO6tTpS2$IL{?SE~HBe`BAxgB73WUUD&w;5lEzIO8rG^6AlCx8-2<&wOXx{BT9?2v28VLApD=!6DfpmdPmkv$AU8sqE^ z6j4r9SJzQGxGFhigs!dztPlJ?^%9>j<+VSopaf8~y3^B>3SQJxqU=C4Mh8W6icQqj z4FEA`Kt5ypxA4+vVZBDo4M_ZGXX?{5uK(i?;?vlOY#mqQAHh&&nf*1WeFlpE@h0Xe zg>O`wRa@2jHST|Bu6A(UmjCHCV{I#qLo-E0(ZPPgDD9ro=$)y6?#{qKK5o4Wv(+GX zQLr@)khi8x^new2+T61=Rt}Tp$W^3BTMf!f33B<@+Gf*b+RsKm`^5Ib6>uY=V<3P? zJxJi+mI9!CjoI5HhUw#EhLM#Z_I8mgbmYPw>VHwZKLC+CH{o}vaVtS8r%d|~=f&-y z{bm7-El3*xl;)!uh1>Y>gZcP`!1vTb7gvhxdyosXJSd1A?XrFr^==^p?SRJ4jp~Dq zOh83OUi)>pOaQS!^g0RFG$5ioD3i_#M`tt#(e|ERff_ek+LJ)`XZ$HNqYK$(Ws zB}wMsSZ{!>pw22aS{sNC{VG;5CBT~>?FwK&92`!JPQzCKA3v3HUi**dBF;CASLWar zf1LA?2r6V>r_kw01odrzq;M!WPSvvGNX@dtEH@@le1iH;&l)onfpDOcV_j*qC$MqVFRx$J0GlKP)&ZwbV}(4e`!0;>#P%cl3rOUxN)@-KVMqa zI0LIhXZGA!a?415;qN5iuP6IzoRm+RHyquvcM|W3-`_L(V5KLeTf|f^IK@54sKLMY z5Ej-Pyf$rw)wN$m5b~Hx`YemcPdQH2+1|SAS^^iZUx4_i9bh*HAJ5|AUFYE8T??>r zh}Bz>9|c&G9$Bg=RsCapAL79)LVDDwr&P5H7p6PDH$ROxl6}RPp*NW9AF^4{_zKiq zCe?K|l`G*HY|BckvG;a!%F6zU*sAXNZ<@tKnnx?)(+AC3-fz~zRn#pdT2&bYB|0u@ zf8ib-brE0eePp>7PhU%5%KoK=o7KPEAbY~2=J34xJPcPJILBGtrwbe#xD%F94 zwi=hcv3@1p5L1Jn`3QJ$g%4RR z6y=)hG$Stz{(XAR6=PzCXI42z?!7gm#8ExEx-~8r_IsX0$NJvgf-8ocLP1*{XUtIS zV;#h-*ySsKa=n#)u}iOK-nmV3Cm>?PeRhcqB;la#IsM9_@u)z~;ZKRToU9GWj6uJBoP3QWA! zTkkfQ_)i&&coOn{FX}WIO!v_+w@+46u$S+es}RbX{Iu0nx#NUkf>d#Hbsv`JGzL!z zpQ=5`q~7(we!rWqLIi7y&{kVYW>VzVSi}p^_S^E=H0p1}tyc}ui_!k0CbPTvt|JCC zq9GfGix%M_9p1f8OM~m)yYcvkTMLi&`bCe$;=oV)HE(m?8m8yMRftVZ;i`JF|6|Z4 z&UC^GxI69)5XCk}iS60J%Vwrw(wWhC*NG?1$b? zSOj4Fr#-~3mT*;HDYao^Z85c2A4jm{>8tuM&Y#_LSCJK&SKYvH-QvFm^E4cIHhANU zcyZ03Mc3xo1$&rj^HkBF{~2?5O9dR*PhFU)A}CMjAlYmslvxM!5Tfw_2I(tDfo`JK z+xdpO_{H2p)PIv9-#eh72N>0{96`BI*|*?|<=R}Yku}vMPX@j0Q5Xuw(=Q`iNlP3b~XRr8Tf8t(qQyNuet66u=YFl?L zkm+IGYspg_z0<-R!5f(Lb*y60uj^W2`iteKnu0w-GrrX|`(eAQ26gJH zt0rRls_UAjOlod|^UhqlXfO0J>lg8L-d?CA$N%!yLGg#7))ICz*du@2Cm1*2+G4y? z8Hjjm%!ROeOXQ~W1j8XBEHYL45e|O3@Y{1+TDX@@8XTca8icl-g9h(uG^pV>>6OR{ zscl+~ftAX-C$^`5QuHf-LfsB_2N+iUuC;CR{!LDRSNtEh3#Fy~9xuiZdc2nY`FcL= zSL_BldDERwS0_w0ZOJ+%O~D`T)-&uZiVpTnXhWl+==*=;#l75BtzbjL1W?5 zeWq`)hWaZR$BTrP?yeiDmo#k?D?&D(JsD~zV@2cVCmCpJ7jkdn<|lInZ0fn4X=)27 zMF0cZf5gzy90!TWzfDMV3(z=VX3oMi6|RPKaqZVM-0Ay>smHYhK!ZRZ*^`WU>T zPX1U*qeQ=CRSU#>$aM_~`gbKQ74(F34!TFCf&-Dri?ha#e>c~%RHFk1$HILvkNaqP zE%tPXtIB(dDL?w;%yr0L`vOZg@7R<>B)LxZhe<;V@ywA}Wx`TF9uuspI8$AT-M8`3 zeVl}O#+(d<4gI@4ZND&ftr0nwm%%?&J~DgfrCH1KmeNM84YhobPtXb}E# zRmZ05ihhf2O-0d~qlRs5=h>fCQ%TsIzcxDZ8oS|qY@jv?6ms*yq-H4lWe7gsbR?w) z23+HQ{ztTfK7EU)3LQHDhj zhK5;X)MDT-+JF|^GoD({t(y1V9l}gzON+K$Hu6_#6;U5|1^*nFE1bSX?0f=;SgqB3 zIrq$6q)HZozDXl7Ji{fE*V8R!&9EgMm97PR9OH|~ zru*4L%iqb|GwYrxvuBS^I@H{_u6Z( zI{WO|`>ZwR6jwuu^NGvFU5@Xk1`7Nn3;9OLeNLj{k7t$mH^;An z#$2Yr0^X-w@idxgR_RX+j^vLbTXT){E9)%U!kf0IkD(~dwfcareH|9x&x7l(^!BnD zR}8I!0_c7(j}wP1C6e|j%ip9`p_)`RS?`-{ zIm7s7k(@@w@Y#=K_gt-swDo0(D8a8j(v!4NJq2CfU<r(4@bJ9L88 zejJ%!KkfSNbQ7e?7l}w>q)wpGOoPNBt7ETDL{x5VY0jQ8c&1;S<9!SfQoHpNSFP7$ z&}qP=n7^8cmQx{G8&{=qeV3NRl<)uy);aLhRn<4Y7P1q3>16qPAI#hvP3zk6*B7AQ zgz^oeQr#3H+>(BE`exRWupH51S$JkrHO<+j z%j8J%xL41?HRm}@sa`iFTdn0LFp#;n1EIJ>T$E7l)ABfJ#EVwy@+U%P+SZt6j!!bk zzwPuotE1;tEbs;*I)l#D!dBf=FLhg#oeh)qhf3#~Z)dqw%O>98n5i)-%uWs+ZJC|% z`;-;izMikaL~Nqkzp$n*I29B{OSW3C*vy9@{EvyZQs}mWr@N-^;(w(fTl`P+4=JUt z*0@@xhXfqdhXlC33Jp18C;nOt;pEOtEYEzoRnjR+ZKlM_B1xg}dv3ttgluk?`4e5^ zY1r4~H)N(^O#^xz1Y~~|1`KFwI!DO(Q_L*`U-JLu!(E09v6H)aLQ0v#Sa`t{zV7DE zQcS{B@kYSAzdh`pQ8`uaC0-J}8y0XZ7iuXarVTJFHe32U%f9)pwfPU>6^Jh8?CP%W zA^iPYI-;vJIx)WI=|v`wrff&XGCy7nr@3%jqvc9z!AyL5+-HaJByE+PeBD*m?_P`1 zl!Wwf5H&L(m)hqrt1;cc5#G^~2=o2a?Z$XwtF8*a&DX$+0xxkkB$0U2cKYY|c6#va z6$gz`-G~o3>?k9f037DRJ&DQQNB>$3JNLBjr&@%y1-We>eWw_1bEWC?@i6u@ZiLNS zBfIgii#~<;21^w7c6LI8CFcWG-iY{f+J zkQ-xuuOuB5H;>pPC-idzcM1$$r@~#zUW)AY`JiCsJAG-XJZDCV4t3yHYJurm)Xpu> zB_{xFomv%_JkU7-2E%@Jt5EOV*OVsg&CQKWVVJxBDN4|sO}%cLhPmu+#tV+PSc-LP z4u5Bvh0z@I$1>?h8YY6Zj^`Vun%NTZ_t&C-I-IhMhw^=k-09!%^yr6&b zn?Sgg`qQvv-nnlqK07{L(t70AifLi}?V04ZYQ&-}H*LGK_(7rL_KdA0V`PQ<9>xp$ z@5dzgUD8JI33SR&Peni-xIORfC(TXP$%-kd>us6Vb%tlAzeVFQLGH<{><2aPiXU4K z&qVW>h=}PvOW>q7GJMAtUoi2rx6Gr0vR(ZcGu*6y1`8}IV@)4la5mMO_^X-0{FRqq z!3IrT&?0}7qWh{pw$IRvuSU)*!Z7;_k%1X8Wy&GaI@OMoL|T3q#O{h^utJSw^E zApg9HwH{MSIhNLG`L8ju8I<&^NSRSe5GJ-9OY~)k#sd}5q*$3tArPhblQ2mn#R3rS zidp2gHM6C2lO4K8%S!CB{4-LXgBx7jIs#GUEp zpEZ>Q!*&%jb5#Vx&i=Zp6`89S5}AImTa+*KRAZhU{ZkVl9r$#%`|vqqJ35P$lfc)H z_Out#q>%D?40#q`@TzA+41E`N_}) z2VY_TWqa}*_~$4qb>GFYU5095M&Zr1RW+Kjk}mjI6N6&k>iWZQqD2>d=zpcbB3Lw@1HxqH~oc<0S@{cM5q{ zcwVlr?=-m4kyOlkFAy!vOUX8S{SCM}r2;-CB5!FEAAAMs-SdzcaG0FYLfhsor#({Xknh$E}6w_+nXcQk#8p#KV7>Q~% zZ1nO>Oc(04SAzHqtJOVUys77&mVgapiE)&l8{$b;CD8L zIpMfK2j~|PTemi#S)i=f5q-gFlo4Hj*OUGmN5JVXc`;BOK~8kLy1)OyW!FzsW&bA6kww|a?HU=B#sn2O3 zp4r?uP~InNR3DV`)vCt-n&aD)*3zdKeIuC=h~{H6g6mAjd-%lesdu85GhS(zkR(Go zxMVEfL-EVsoGjt;(zA_2y0CJ8xOG)-xAnNh(<<$YCc~;sf8z<_EPvxb6ZO~CiXWfn zCYpHnk5var#rPT@-2=Fi;ODupgY)OP`lS*i8kIS@F{PWOACBa9^oHijcnSD^>og7x z&N+s>+j1zMuz@>VvfLoJJ`6gCi^1@V)NMB zvCX021DA#?nq&1RR~*OcVHe=g@Ly@f1?PaY)1>VK7lSj7)vfMaIH+$+Wakv+@c@pFfqA z-Hi~Ec{`4AIrbDY7l93W`2q1%0E>9|$d|pcpuOls5Qd7<5lfag^!^a22$?p4I@P@j zi@<$)E!3(O3hGDGmC@xvK16(w>6e8i;7_(fkOwGG5D8_Q4@OmdhhwHISKNJME=LBi ze05}?FDyq+P`vTRIX31s59XfLEybrZ<}(i_07?T5CGZdeB0W?`jKaJRTVX}BPen!Z zWt?gygtkki@<>+KILEl53FI9OnfE!@HE{`-$AIl?8`|c82DuPkoK+3!%zxh4xOjil zvpM1+=V9etc**5-^1ZA|C)pMjd{o$oG~ogvycXr0#+=k(MkWx~d81N-d}#=4;C*VtO!4czfA(crX6WuTWEs;mH_A_A$38J}VBckXQNzBkIt6 z=nD8yw?gfJzqVr*$FpMW(CUFeWB!z;*(cOiP-M3BTNFWGRbbK6t9t+d;S!aY)n)h~nb{Pvyuo;{dlvdlGP2cozOvO5N?R)w)?bWE z)77hqB0N+K90VXpTvErQ7R541x+lM5wNPQaF{&aR;Kx)5qqlZE!X$G%3Id==u1qLa zqrl!Q+*P)E&MM2ebbud%goqaaLq)w>C%N3av+QK&P>QkSiUP-bd5^;F7M_r25n)z-BiVO*+a<(NP=?@j-d z3}{Bn(n5IU$XDN~W*P@rL>i-HB8{DL_={ln*bJ>tI{@l6l*#?L`E71d;oY7Jcj}^pX1S`Qki$VdI@lEW*V0=>L8#d zC9vQr)#|&Cvejo0pPB(-1)yhvCV~_o?)k2X@B#zG%m6Xq`8jWX2$%=(peH{hapM_D zT{BU1IYfxmv3iI$!MHT)pEeM)Vr>LPUtFo}5uuI~53d6hM3-I;T=V~Q1Sr%>U~7N+ zU~6ysU`U!5EdW20($Ce#^`FzgvDGf_9L-1siE|EUVi9!lsUDaB7lBEo9)d|_g1WPE z&VlnaBP&UrbHd`Q?_|+UO7CAa!wO5Hs*f&-9dm95prD-8a>y7g%^1Z=WsK5#(Sppy zY5}`sngnP>m}Gwhw?Q5f(Q0(mo-UN{6pZm(bh#s-$pA9GA8>Em1>W-dpK0}~YL;hJ zcZoQ4!9?F#mt0#OIX#eJ7&`fxJpsndvnmU8HWk=f?pM|co>oC6SkzlNw^CB`qn@GM z`yDkZcv9EbKsm8asuyn5u0BiXY1vaa#wz3xo52Rg65mIsZ1dyd6labUPGy zE=Sxq&*9xYv^%dy@S>IaWTNBCrKf3-mGxekc4_NPKXOVdTFw0;hEB2QdHRN98P+muW$T1Z)* z{3@zRVsQ&EHS7>C%t<1tH~=k9L>Z?+WHfGL@!YOWk;?x#$YCZ>D1U7>o1P$vUt?TTJ9~OI5F--3PIdNF<&&*j zGBmXdAO_&mA`NTK=PsE*=~xkEM}W7a&mzqrYG94=UJmHMpxY^PNLR4N=&Q8xqRZMH z`84bF+1mFTJ2yg;1wFT9FGJ*06&V0_ZT@MTOwm`rLnLzu-G6ik$Q0hf+j1GCWyM&c zWu;61pMIzQ5(`XSWS+@hU?ipr&k_SG#3tmwe*1iM>3Fi*$k^P4p`*Km&@_RgxV3C=1$Zp~b+bB68 zyB_PTJ61s%#BCDsJsl7h_J3gNKj~}$lF=l>x6U|1Ju@`D{skc19G%k)2_XM#_+C?| z09^0?clR(i!N6ZFk^1$3Wt~Y248d=S-cl5jGjRek_sjl|P5&9_!{qos13~NnyMg~> z_J3sbfqZ)COI7XppMC!RCyb1ks~qXNJroBen3*al5v)s%5cLQs-Ecj3ZJXSCa1JL00t zCQo$Zjd|_d=yZr(hfF2-2Uq>0mek3Z;u<0CC)AzY8(2ZEcp3s7!W5de3%~Qq4ncl7 zuR4TxX>1qHKyii?OgJ5hmm81cj$cx<`_S=0&k;C}tQO7=x?H&kSq?#AH0iD4bGANo zwST;+6c5L1SVU_Fgw2<{ad0}iHQO6#7&+RXQi7sP!V3|&_^GSKD>INFBaU{T;1CDU z%PeQPg{TWMGa8tIf6%aH=P+2NbRldp$J}XV5Aw7p*L*qb&bo(6PG6RgzwdfGbZTsI9sVmn89{bFd#a}e zpvITXxvJIFoK+9rIx;P+X^(oxlN{Fi?>HXeMVdODnX@dgwXFqU^RX@XD6%bFQTJP$ z?{cv%L~VRAEh-U39(0~!a`s{4KK)TAKY9@s3BL>8Aqd+@G_Y@ZMD!j{$n@EWt0D6* zPz|oFWIKCIvXh(9804-o6@g*GS5iZy`@YLkW2{U*|CfJg!s4o4fNITMo$Np8Do#f1 za1N~IC`6c|tRhXHlragpOfk#WP;^Qs-F=Z#mSq3z6o=iWs9%>9hO1iBRgmmt^PJ?` z0JjY}fYXLdm#z7a1yzUXZ}TOMF-QyPdzTioG4I#kFF}q<9BoKXoVI35rUf5Cwgr09 z_tjr|5=^(}nvOYi9Dh7!f(ek1EArX1!PZjD)RL3raH@azmaq9OQ-6TOpr`2uC`IT7 zB&$G%B6M{O(zLDLN5=?8O_GqRy4>lix@?Y~`JnCurJ8mfOxY{Zb3VRa?_2G|%u4yw0-GOn+x@geKBse}A^MZjL9;qZ=J~?kz zvwuyXamzS$9x}bZw2STBA%Qaw77kSNPaOzw{+(9OodS*Ba?c#xH~~^znml9xV<6lF zX!OL%YerNB8jG;gYITvjBuZkz_LtFId`#&a&Am~-oL*uCfBKFUJ ziVbIoG!JUjUNzg;zWRR2cyD0{}^R?$DvSGq(Ay&+YD|yL)R?V01*lb!r64)}R}=J7imBx;p2)4gw{JlgKfehIqJkkWfn*fVt|W#VZ73twu^`m=+nPvl~EQEHPxO)MJ9fZts%^e}HU9rkaa4oOwvUiAv-eeJ{F0{`+wh{6fMAa|45;(9 z8{}otH(R*^6iRfQVmf2G;bGAz{RxIwi!Z^6f#k&M6#v7q8K`TwKsc1mz}wS=NhI@fA>w6s?^vt!?Y%zt z{Yw-_M#EtEeDgH3^2;fjkERyZ7IE5kZo_%F#?6I?m950Ne6_hnx971nBD-=`G*%d8 zoY?xKw(Vwv*W6u#&Y>F+H}A^ZM)ZY@YJ*YRo2W})juKmEq$yK|SaW;GU9Z@uDa)Lt z4~M-tCx!w>T5gqxkRkK;lkx~lYApN^eD1j6$R?cUFK}kf10WoW8s8cz=*+e3+i37C zbI8dExTr0dm^&^VDG2k35MtvD)dDD-FM2zhOi>$jm$iqR>$nZsBVSgUNEmRJ%32IR z^=V_N=Dht-mTLJMRaI3rp+1aH^jb@?>bS>zn+BULvmP4EooU1{k9i+N8Rg7jC%Iy_ zfblV)(g+K7f8u$oKcT27$cgoN4-k7=`8(umHR!aWYs#tmcyBoHStrvrgHPJjq|19Ns2OOJ{DT*FRHK#rVB_#)^pZ zn#!bBb?Ne7bRcbx!weCvs4`Tb+}Q!P_$}qnY^An^Q?#aW_77f(M2p9!7>@jj4SIY^ z24DKcpPVq)#{gVlZUEcifuL=S3n} z2U1C9&3nM^LYSv^5l>3BwdPFynOg=~laFqn+-WMV$gaRw16FXTWc#Em`bhV} zeU%Ae-}wG^L*ziciIdZAa#JYWs%d5!Q`gR=vEkuo3e7W?A~IlG%pSa2pTBHp%K#Fm zvDvKqYZpr)H@W4_YLN&2iOC}TZQ-;kzTyZG`qmLeIf|+0Vv&?prTVH#*|3v20hHHQ zucfzoVR=IHx>=W&st@J(`8~QpMMB50xThi4^~b@CaWi(?*Jx+L5)6JYYPbDOXymbG z`I^w$&xxjl&??NXQM9RH#ladsRKKXCD?jBRHSre`GZyys^t%gD$#?I!&O8EN@_8+% zb@uby9!K?I;eRS6YnUnOD6UCaA71u)X7jCRSA17-*y=@^c@c;GZ3G_!gp(>v$roEU zblso+ms-Y45*63HR3-_!^lgM+>SlqI5jz(lgwro_3wcmdhwvkaV|+cKt08!wt)Vb; z6K_NMD7W2&BW%E99OWtV61r;>-`{9LB1zavOK@<~{va}}qOKIAnkeqMw))(wYf;00 z2oZRY8-cavnU~t4(cAcjqRkxTZf?r-!MJ^P$DgjOcR`Wg?ye}?xaM^3Bgh5uQ+C4**T0XqB({URRWB+#Q}x!v>4_q-p|8@K1_es`LLxocm4}ZJ>EmWTSI0% zp(W4kPbyNRF|1j}{bPs|AB^v2*t)iBKEdzmJt^bDALaidw|Se0en?(nD)dEK#2HQ% zqKSr-NkYNA;0H|rEg@}sn$r>;Fn|VNaBkZd84E1dL|>XGVb+}#peQ@s>r3iV`nic zwVy?%`FK!%>3kcS6CO{tT_$prxTLw|`)h>nX8#FopVea4%U@{AR4hhO)9UlVBi1Cm zM;eIH1eXZwfw|Fy3v9(x`nGzr!AA1m;Vz-_J<|i4f!p3UfkV!?*#!Y|&SQ%sSdyn^ zp3UaR0|KN3lCg2XYs6l%{mz%f3mEvkVt*Gb^G1N*y4}jzjrO5CJ{2!|m4zLq7R}pg zg=v32N1k-f_x^3R>UhWsyQLe|fa|Y8pNkjE88`E_L!}{;z5Y`Z36czS-LmkW~?Q|5lvkyCCM9 zf%l5`4)|ZA2;gs`HoTAhN)iCka|n`vz&;m>Hv@kJhbUG~L%^kRw^i&zK4+S<@l}h# zoMrZk`iDHc?>E#lLRb`>S(aRBbp=^?h8Lc^hZbR;q>wL*ZIiezJ}pg8s`a3oSbNW= zbbzIJv-(14q~mE`rVF=RMLhb+^_sLhkdhfdM1}U&_Kwz%5540Jfl7{aRG&&I>^r{s%7dtxtxb#<><7i&Q3@bb8r|@w=#v*Pu^2bzvNk%I8 zn^_HqGj$(!01gXZH=+S`^$vrHS9fqzMrUf7Iuz1x)Y+dCB_jhmaO(%i zNiJq8j2x`zt}dS}ufvr@8XeFL>{0;*zCB(?q>Ee4VSyJf=fpvaURvrF0ktA*Kp)D) zfaM%s=XP`|L%wf7YR*H03y54aVT1Oao50sz2Xw7JHAgSWMe)u)OwWc0h?<3|zor7S zjK;m1EXinK^WE30ig?4)%5P>ZY{uWRBTkBvYl|v}( z#pjS=sF>(0$OyX5E~AwrI)znzM7if_A9QE^EJ0sN<{$cCg`yuC?3Sqmh$;mZq$!UU zjxPGkJ=M0LZEPL~TfwA_(v3!hV8Dsxp6+%@>;%MRQ!;4tt|P490c*8$Oo%Ixpl4wf zo@%o5ZEOXOm!F7rb4(f#X+k#UIpKqq78oZ9c6M#4?V(RyC|d;Treu(5Dl*J4tlTEe zkwMT%v?1WCdjopbw>ja5WM|C2Noh-A&uZpu`CDJ|IABM#dB+kpgZb82@yYw0Xo1Jf za$&GGCK&|n>o#xp55S;iES^m=G`?l?h-ef|k|UENpHqZbZ;IhlZ$mDgn!6 zH(h*r%5NgH+G1$fRrmZO@E}@4Wf3so-veizPm};fM73vfo%hnP1x0wK;Y1Hf)f6U+ zAx}cI4p1(fT9A)7rY6dJ`7ni>FJc6}(NKDa8(tfS~+BAV44F;IVvxjOPj2ud_Kuts7JVA$sp z*SvvOV3k>Ag`XTc%73SJ424E$-89INYvEWnk-_w8GF40{FvJo84*}0=Zikcf zsOt6BMS$@A=~#KlurIK~l(%GnhI|1cy;;pX<-RSeazwP59GwO9QUOat5X!znp)$cv zeL!ORl`+n~Z1cz9xG_vK?@G6Lnrc>4$z5s>p(_YoY_3nCRgs5E&rzKIx{H3U9sc7Yu}UO!XCd_ZF1YdvqE06o3^s(d`ib>Kx{s6f|u zP9Mudq?MZP?ioe0dwQ963kp6>3(vyYAnXB zR^~z1T37-n$G!-);dGTA2xBflT384|k+^XYKyWcdlcDY#^>I5_fg&M7l}@2C;zmC4 z6*1cv%_1qpOmkTTHOnvR${Qf4oMVdzSw{mDx%x(1dCpZRX%+WGE~Nxq!|dq1z051y z%3X-WmX?QNfmvQ?6G5bgf%>kTF7!SyIu>MxURmbS6dMbA>)|<(aYbT72D#MJg`QI^G4rhl>6C7 z?bzcrt65sq5Ctz4o7Ds&_;^B3k3o(fE27{gu~8rlBY8ZhDL+yyJ)-|&-3Pvt$4;cp z+GIeusIm-*vudFp5mEsy#s^+tn06^+TseVsx0bTPAk>FIS3PKhV}RRi2r3+=t4_zW zE#9=iviH_8C|OU}utyL!d;jkyb3V#*RJs zK%-lMwxd*qa{1Av0S^#gPlr!)8aoCw>#8R#j7d5cm1hFJnTHBj>AuOS0Sf!ys!EVV zoQ{A-+B!f6z4p-^k&4jpHUEKY*>|{x5!?LQn^|2Yn$F1OV7_@>R5Ga+gg}K{uhg}n z46s-CNFzGBVvf_uD5oa3cwX|gyh%d(qNvezlw)O(9gz#D zAmj#}FMm;0lX!TQsQ%7DTnP9ERjCu*g{ZDskmc944tl-$`CvmWgMsaU1ctVwDk5(P zgFbX#d4WAJA4;YMaKR(?7Mk))+ES>f0rMD{0fGF310axJgWNUyHLt|Cbrf)~XK}|Y z`geZ++xJ>z=3eEUDik~t4t(!%)B8K-Zou^g^!kGK;ZCFvLC3b=(%{L73bB{b4PRLN zirsQ^L&WjdSVEknt2^Hov1qb)5&Dx31?{c=>GW-jR$IDw;cTe0O71=LU(kEoG<>)0 zOLX(~)A(G>dTrmJQ2r#7{8M<9I;pvZ@|R)uxL&8fnC{Kx`WWWxzLR6ravMUlJ=66? zy&K-Q7=*<^5Zumg%W?jT@nxJ^nNt}e5Yo<?>=!$ZX;PVMxAd+*1dncpSp3&j(*;5D!barbNg_7PptKBR}GWvd( zh*o!Nu)Bw?c;PY3S8$56 z2#aj0v<;^a7=}ea2)YG|mh%>_^zqaQx*2UX1M%*!y*tM4L3%LWf>s%SFYJFCtew-! z0!Sk)wiiqto+O_-F_ zkyALmz$4v9%hQ~XmTPq$HB0%U)g4h01p_hQN8;Y;*ggjYB!^yx&li33PdX@Qw8M_1 za7dh`DhQoVk_ZoRIhUX>wmABb%lCxN3=gt(IvSK#9X`^8%@zzShfp=e#d4|mIu8jx z&gKhYrp3J}ne2-QOAC(7g?ODz^W}UZ-y?yBULe5V>%>rsR@+sCRy!v~We#Z838s7N z`(uH31BAAq0=7r1x%>U91!wKVTGc_RLvJgd=3?t|F&tJd&w zr}%ZhdfaxJ@bkxUnu*e3<_NjL4$QZFZQu~xc7Z`iW#+--2ZQdX*Pavk=S3QUK)-}hNxFvD_RqB>G zqjnplSb4nq2qo7B*;z|4*>>&{47GAPDYis-@ejj-&*H0(I^^mhL0Fv4$ZjBbFA@br z;<1$nHpIiLHo!uld|R^l5SwEm`l zgF2lMt!nyDG{FhlW7ru+>txfa!AHmoUkt;%QAUU9l1B)vVQVoY8BU$gP}L)+jI44v z9GZq!WhTqq3s1K~H)L0HdkSm*Q`8GGmW^HId4_Jta5W?0|9&OZThO?E8RBXF941YU z;E=B!q=tmM2IN*W&Xq( zr(W`uUmUAepg~faThYi^0fyO)KBApMh=?9KfBi9(&`As9= zd(&(1=JvNsvGPZ6bP-)``+lXzFs1TXF#;-qCy0KWvnTV9bwjVgd*iPFy-oiDNDy!G^;3;LD57HxCBym+rVN#iyUt47k}^O&ijJFtEbV{IWyF*%WD zv+oqFO}#d|+9A9u_RDZ!!|nnvxS8U456&-27C+N{5ulWI3Hy4`8Tevb=0Q57U1o zX9>yEnTM@uLt!bwroVy<9i0%>71eij%q>X#m^EO*vIbiFz}jxm1{uoKE5!vKw^DeY zSiHhe>1nDvfTkJ&N*6GD9w@oceQ>`H<5YI-uewoiuX8j-$=>r!R_Mst&6i67=VU90 z+Y=JQ1U#D&3UwK6H6~d1oLV$60n{Vo4gQ@KPoJNYFab$EBtRn0TVUN$4mcbNzg)*| zMg~kQ!ifWhU@*;kVAa|SgXJ-`AVc0c=iKx!!jXrZ&59G}5YFgz5sZa$DPW7FrQm*a zXXTz#6Y+1Jfw+9qbpdb$vt1!Twovl+ve zHtz#`Pp4&T&J{R5*CL$Ye*nT@a6V$UcBZShw*Evk3|pKMtK1#wg*BJz)j{%7$|38{ z1+e>V+-77EFy(YvIlACs7%!*mMZ(q$LSezWcCg^x2%}OR{zfE&d?sLaBaoYD2W%aI z%o@x_Nv-^22$OQVx)p3qGaqOLlE<0}G}4BvX6>%S7?dR$1rX5GEN>j*#$Y0vNf1Vs z5lVv04zQ>Z`GUyqh$qr$If%q2Cvkif9-<@z$a@YG6aEMp$uvN%5}D`Jr1(K3yu&Ir z@*fM6TbbsBMO5DX#;O6!{GM-KHvk59mM~TbL*2bhQgUYbW#hqkLl&fs0k=6f1$ZlP z6IFEbBwRvoXcE4v0UUz(fWzx$=p6eq(m3elb#4^3MRnB#+vQ!rfejs=jAuZOj7LM_Mnh5;8Gz`c zN?d(|#tMdwzCIg;Xp0=$B&_2%l?1$R{0tExeE}>YlwSC-NWzF>v_4!$hW)mdDEK)q z$(p=nofCFwozO{5;MaIX&VV3g1;CmC_yO4jNHXVTF({WtKw%@3dpSW>+kZ|X{UlI^ zMLP6YEwPl+y{e6d?E8wgF%(FBJWSI#75(N;MD=!0STO3p-t0Xw=U|2O>x{xfR(hX}n zi2`-_&kW;vfYeF=fkppSC|eStT*756isRUUp5>vU%a;HVTGC z4}GvGE!whi!5bQ-wwPI5{%Iz(I0~m}NVYcl0cj5!2nYDT-c)?Ntta}8r~2C z5wRg~8niQpkr4p*Edc@xd=+(MpYys(;yFDGMps{lq!c$q@r2M;btP?C9(}TYf}rgf zlGDIfy`SeCzMl`)Y_0|4Ep-F4#-c$f?!sh9%cMrTYeQJVVGzmws*ugk6!52Yxj6LaLap#gsr=dSE=~F)~Y$i>^A8qYu zJX~Zv+|o1BOI_SCp&jq2p&e(KUBAS6NMKJupwt&`6Lnw+?hte>T5;w3zl|&(PIg1? z|E$qBF|^!Gxpm*)hi6DV9soeVS)PFhcEZt$8e(q8uL7XS3`^fCk z0w;GcMRC&yxiGf_0!xHm2BCI{=vB!*)cB$t*d*PV`1AFZkz$zavVDjQcMAsVt0MkC z$K>N%aI<^Bfz(#n1YUU~kZoL{p0<*tJ8_F)pRah&|9<#O#=v1A`Qtvk)F_ce`LH*= zF7Rtdj@|w2MAln*FzUS(0rVti7qfP^pLkX1i~8jUaO2g^Z6D{SV#b&B z+S_X{2}gQQJQ(7(0&Z{3?%$i`=|kOWS^`X>x-kOw3o@jd;m$NT>7q7&>v)7tmibt@ z&N{17LRxYd#GCLEnykfvVEvnAPmE+bXhOlZr#?sX>EEUfh;@mEfto2mXS}j8<2(*Fj;6u7mAyh z2sxk>pNysXr66vYcRbw;rTZK>(CRL=ICbpZWL@jS0txPJxci=<-@&_>zmWVQ-qe11 zGtn#>ui~xTZI=(KiLMfwknL|#N4Pr5VH%?;QzelwbWxE2!_b(b%DAK@38qYNy;%&y zlikj6x5+A8{d=gnwEbZp_v(K6ZAOT7@~a+cw%T&Z^0TxHTVK=l_ug)O61gkQGsi85 z=EKGy#pk5Wdb2l-=nUzGRxTvfmjq5_o(v7}LwW?yn3>OT1 z-J3e3 zGehRqGP={;P^ezNWS_rtX_tcNHI8lXxhrU^Ykt9&ca-~8+}cINf}#J=fn?y*W6X!) z6Y+Edmnw#d*W{X7>TV-}hHmzqO*ho#KPLGK5^ZPpCIkr}+OOYQm!J1veI)%;GtxQi zSklFYUlqY)J-KGsStcHy=zZ*zN^v{#=^6je$ogZ-(gDd~W#-(Ps?+w?GHjcu^u0Nb5h8KXJ6csasAyAo!?w= zj`!+YYBe!~*;igqlAf@2*GO7scw%Yn=sXL@czgOah^{ng^JJNFCUD`wUh1PqEtXtt zVuMXC$4Iz%L9gGBNl^`Ra^>^QM)x0_8c}5ov9ZFx*fgTn#8Ss4IRrI?PZ)oEo@Y>= zvw?o3{!+}U7PT+O8mhJ|!{hKLes`Oaem9kUWPQue6qWlzC5>e_w6mB3m8$MH%>OsW zv1)qQR^`hshJQi9Rfefw6nzkbXBg|m8R=l4*a{7+Np69@1z(nw8+a_^%udXJGJ==W zVpywy#@W_@)p~dVJHr3$FFmJiuGR&)iNqx=_5E+Ep1+;(_nJRnPq%&!SQlq8@>Gv8 z%v(WW&VCl2Rv>Rm)F7G4c{ge{+LreD9j%+v(K6SEjKj8%DGuh%H^Rw({h|tkd}~#1 z0bi^OK7Er&qtWQz=vrD6hZM|FdYq~Y|%6mIP z37qfdOT%Mk#ew}dL1ZDp;#3(ZQ2g@y<6Q)QkU*n)p!bZaz-_h`BWiz*^mXFR$|;CtT7+Gq(C!paN>Z0=}u zA(G`!w?0dw{6s^$wOolBH#@(h8?Wc4N-y)k&_OR5dXTr7Ln>%^jUik_-?9JdL928$ z#>GOLMcP*IjXN0gy$|ejY}l{z<^xm{X2PnS~bx4%C3XIu)RjNF|TH$_8y`2Kr3 z7p8shyqb2qDNhle5Lo8# z>7Q@L@~lEdT2}h!-ch{(wE0?l-8jjaE;TWt@gr{pbNrH=_hvW&qWI0D^J|D9vzh9S zdNLDO>~oaC9EMuMI76DKb-p`V;ULvX?4H&Wy;K!mk6>r~sOkxg?5UcdLkgN3MjfhM7j8UiNZ9VdXH*CUq_C{c@WMlwQww!7n~&FUy-=IvH`{ zmHxmmAK}&B_synH+8j^k-xt4Ww?6TCQzDwu&GeF1_*ts*`r@C^MgQX0H^Inrudqo6 zuTD1JiZ*T|L4F+5VD=uC801Q*=U((1T9eW$T)=}gDZjkWl^xrlt*UQR2pQ$`8 zmRQFa&L9|pP4V;%>5HJ|bL=3bPnv{vve|5wqz{IalVkoB6~Ut*F%M*X_!>v+g6r4Q zcR_w!A^QBx`<~QLw0t}`&Byflr&D=ncoBZZg$zIPv{;3Q$5$BzcBc)rt}Y|e&)?As zl$0f!evwA}I!5=;cE9lcl0dxoCx`-j#k`S0VWu_wEC)_}hbc1`i~Vl;YAUuCUN79c z-`G8pBjvfv8idr~#F$ARP`j#LEbF<=z^jmz4s=)CV+&R(4_YsI?_uBJs=?P^8LN{`Mf{&cK7yncIS3yc5e4(CZ~HC zKJ)8mU~d*gQ|;F#OFw`u?w7ry=tr`O&DGu1My}Lj^TO?t_ZrgfQ|pWd88~x!_o+l? zgNzENIJvoX-Ieli?=-nN-7wxEXgaTZZT1^UdyAQvftgvI4d*h^IQcp07aP0XYXdWI zRY`j%fz)5ug@l{KoT|v4`R#ZqqMJ^(`4q}>CHOlWskpS_m7joCT2E82E!8m z)g(0J8{X@C$sO4POg=m;7n1TK?;o27J++l7do-9b$ZjFE!GRt3dOeh~>{%IE?VBcH zD@8d!Y2ho*Ds|NNJ!?2BOrh-Q=@{T*y)vi4M%&NR{&*j>`yUw%hNny}6JL{62i=eqr;T-2v-YhPOYL zB;CIaPsd49hO+s8Q}3Hejcl`Dvt}u0Rp$AGDmnT(y2-M^Vv3kxr}*Y{3#Y1^6YKoA zM`?~b{FVcQr}mxy;gzYLq|1t+PGJ>GIMib5V~XjI`0cH}&l7nS$c(1U z^_K`OyAm(zi-xIKy%TvYrnvaV3z5{5W~RCD4Yu-<8i2q#+202NP1y#6;vU-s2ZYNc ziGPkMh36LY<8%ddoe$3EPpd{QClBPo-gn|=l8yxZv<_E3IEcz8o)&lx<-6npkNj79 zn`X_E6CtH|7+qv39<#y>gzRaLR&!bft$&o8fNQ5C#-`{`nEsqPx8xlDRIkljIbn%nV7Zq;4 z9sEV77d%vIYO>`l2z)wxIM<$6)8=hE)UBbjgORk~FXFOqu>Y2^p7p~{T{EoIXDXO8 zZj+;7@-O&)@9{V0!^K4ATNy5j1n~Y8&iYA(6!f0p^`o z=;)ov7ntXruNdZ?F#-VXN69M*E%TUSP8;Ll;ZqUBW{_IaPXGS~0C z+AF^!wKotnR{!h3adoIKDe;*|zv*7N^P7fWmG5+t59OlU?S?WFAB(_}n#p0cAmXk} zB!}lF>6<^3E%m%sQyg?Zo*fShoLA#DTYqH^xBhwyD7lj)|i)=HZN)5giH z=G{{0+Ua}0V_%Wuv}6B|^7xg6-eQKi$D%)%bX1b(f`2}_0)PJYVtP@-#-M;{B*N4A zuPvF&9mnw19i=d?O#ZzFw}oH@|wW{X}{32bolG)Sq?| zV{$LvR{}}&Y`M(0Xn?ObKC0zZ$tJaMgs5nL)HLXzht+T=A$Zd@bV8TvWPE>vGf zMTlG&2VeiTPMqP*KDDWdd&N_)b~w>FUcPd0ZE3FeGOAAqiE%NZ%ru9apBR2gpG3z0 z`B{K{>g^6uczn)J*hQ&M;)!A#H$a$)HXsw>ejZNZ(8AAmMRxe*W_O~5qH5Dzg|{o! z9OB+yTJ!xrt+o{2dGTEd8N$Zg7$-Vc7FSaK+Yzdhm3g=S2h_FKj|!I@_j-;BrvuOQ z?eDF{=)^hC3D>@;#gRtxF4W$VjC1viWa+Kbi%jHaZD_DeHWgj9d)6&DcN%9Yy>RLX zh;!SNDVpeBQ3J)f7k$g{m>cI6s#|g}Y%tj!@qK;7^Kl6G70J7On&&Z=$>uSY`6WH+ z)7YOONY>lhXY>)u$b@)H3j4+F$_(G4qzu1JPQE2@-;3(~2a5G7aWwKnE#uQGB#InK zk{>@gb`W)Cr%3^xT+n5A|2>O-{H=Yn#rbfuGEp`7`Qw6rua~S8>JLsDMy``>|IL5$z4z*O5hUm8ykb*3@pv)#G#Pf9vv|6hy#MJ<*V%e{ z;FqG?xM4S?8_zkXJF`~clRqMg_r-&Tym_>ND3Y~<5*XL86^zS(^X3n$`6|_^t8a5<&-CO2txG=8SvqwL!rT}$ z1kGhCv{lue6eg%N^xYZUMaNG2`O*umuVxf+l-&HwQqIX&dt=z&65X+Q@lk)(;4~@L ze5is4@a%9ZHf(YFMdBg~mY=kE5?jjQgL&~dVC27qv~kM{+Ao3Nx^Jc`%L$eDUbG9* zinz%mi}qzR;|gqN7VP_Z^^#3-_Cpl+N#t<{aPFqKEidzq^oN7N?}MKIJqXP*7CBN# z@&s=npx*ylu9;6`Z$%N*QL??JS`4!bk8YBVR}o%@J2W=}1^FuOyRDjHW&&n0n{7U0 zP1RjDQ+69S*H$;fH{t@~>@!;9f>0 zb*|FZ!t*dAz$$B6x(}PXvFr{DhIrYO$L7RwzqtG&K&$4yVEnas!c}o)CF|??yX?MM zAeVKqq|Xp2yMEVGsKSDY-d$mr)as!ylfdJC8~PW|OBGxngTpZ41X|| zYPUp~SxKlnyRqb3EOb@5|4iOTo(XJ*cBbLvFzM8OS+w; zbUk~_ilxxKc75`+p^pn#JpU*RwF`U`)Kp~-3=44eOym^1RHEF;o!G4Ez?kaXT`~Gs zW0R910tOU&vDW#Et#dOg*7t)Az2Kw%p8|2W!!VZ(w?hrQ8?$M|^#1)tXNW1dN8UpB zS0y1)DT%fBo1ES(vHTh?yplBItNi3RR9xT&yNb@D4ch{D2PWywW>>qt++}h46qs!D zXOHn!vh7_>Ys(=sMve2yJZ6l=-4_b(5y#uTihWkx(C)2PeM1f9Jj%ZrT3+~Lk=B%dpxwQk1*$yG-OnFAUcdF~Msez;Guxy$^V>yJwp}68 zIlUcjDAM;^pom_>SM$&O$Y*`+b{s__`uXM+D+Qtrdyot*b7@`N0-}GUiSfw^Rl;Bi)6cOEWOi zG$xP8pHWct-HV8^PuZa-{yH*K2zb4Pj#@2^#sS{XD3~!b7|cf>vnosU+pO2zonpWO zJm}K3AUULA=%&FkxrOOQWNUEMm)afm2>a0^dh>xS!XBtwfzA$Eg+7{;x}^! z;3RhQ&&pLh>JKDD$uY#wq6?@y_KcV@duEnzP!^XH!Y#gQNd?02tB)cw_1OWAiT0FL zU`9+xH-+D#?tzij&4qi%d$n$KYceK%Ag8-N0#GQP;VokXKXwy`WJ5A zYW)`0-};j=d-dT_w0?l^#x$f^k7i!MF1eefQjwD!Bx_LRzplq?3d^=x7xI2mWi?eD z;ln9SQ13x0xrQ?KSK6a?aAt2+MmEjR98_zZE>W3A{&hl8ZchsoFcD%glqb%t~<4t9)U9#U@0?R*O*b%0`NCa)Uvu%f=g+HZezojh*8e^kf;ytHb z-jO5e7GJ(N#3;#}W_O+p+Rp`S#fwIVy0ERgUfr*?nUwk_db2AxP`&vH{Kr$4?D5${ z@s8LQ8y94~xKdTc*2A5g$l)j_OaxerXQWx9VHFvf< z#4h(+vU=KEvdRVD`*HNwcFvomPY0o(JHyrfbvZ*bT{)2x?uguIZ)F=B+%Hi_l0A2w zm(TktJCw;PYAnM3<=!>7qm{U)$po;)ym*JdSSj0iP*RSZ(@L~xIsIF1t}X0zrKlBa z(J|D_$NJOHu6l|ZuXvipau77V90ZG&5UIL6Z1L$5HNJXRN*RGq`Nq(Z{pEIZT0q)l z(~;=60;UlTyw8*kmNq7T+O%|TimU8Q!se{!-D8=M>p((q^nik_6!*7|X4-vq|&*UHo>gd=n5wVFeaW+bJvqc^KX*Udu?Vgq3L9_Xk zI z+hxH!j^i^mT_?VaE=ie5W*~~D|28YUOtV=Z+cz#Fw4H#T_6Yk&ZQ*Y+vHjiMUwA3KAwYPA_^=VB^4s9P)C4_Wm5nb%7$>#C1H4E<5*7~X&F zFr%4g_hY;bqrYF>U(!S$7*f+5`*>Y0+ zS$IFepqypV?j;MSSQ-)E-ji8v@^yiZs=;KZ!^JP9fkeN(WSbX_x=MJUg-s5!mih^M zxjAG0NV>;fvftRJL={%J8^etn+ixG9CjlCrM!;KQ&|9{)P+Lp{Y?*yb7AUy*wW+J- zRQmHbSk)cxAN-i+0J+6ZhR+tWv|_6u@BJYqB~ujD<`*$}Kx_D$gHVk|HP-j2X{-9y zxRqeZcJC^qmV%-oZ);C?F_*b|NwBkAcpw7sN-&1G$=U5sx1qCrf$&B=U$VO8i{O@Uxi+Wtt$GHVekr(x?pw@sD&YjEh!;B!#JIT9k2uv8d#2$kq=@j1C8PQ7sflJ*98g$e8gq&cjsZW*j9JWuKU>YLQ!-1^L0lDn_Pt7p z@Le6_;n+^FcqKlIycsdt2gq2~B!|Z=Qpr5j2>o#aewVFk6-Ybgmk463P>zWMQzM&a z-ViY3-E{$|sEQlHPBE5u&>m0MQ7k`Qpk71a=-A>=bntax7|p1q;t0!x%Ei+HI248Df+^UVzYC` z&}MGHXS5&E%C?MBcqX)oO!>H2<}G=8Pjwl^+`M^I6rhVjf-A^}(Gn^*O1(5EQRo*&8m3VU9bgS}^4jFXXhufKF%0*N|2goQMU@ zV3f>flB1mfhAu4gPz3WAJMT`x)k$^A6-|%oC`}nv6mX zBm`)M3-d-)XCn|Xk}G&x9RDM4kSkSV8v%4pjX67Uhl0 zB|UV^Dh*|RKdYUrPriazms~+&DmlRh*$judBd&Iuuyw7^-qP-`JHq3n4vYfst7xL0 zC}tZ4Ub6arCbZRp{9(;-XoEPOz^nFo<4x4K5P>OzYj|79^~rl&ov5@Hkqva;(2eOk zohOLzEXO;WX*S@i6{7*CZia!f?5fP;6_b4I8N+d|!)eeY3-}V${CDzUwhGX9d3GutEORruzZ(pdfi8**I4Ba z780ixFnY0ho+Fk34958NT?+0+Qt#9|Dzz|sEc)OKv-mePZI+H7b)x?sg&Dnh^t27V zuIIJ=Ss?cK)^TTe4ZU5`@y?d1k~n|kFRZ5KP+4}I@aANK9v<~E=*O8w<|<&AD)+=Y z_qlUC9`z)Ml@U$2u}Ld*3w%^!tFln;hnE@bPhv>>{M+B>m!Lj5yR5c<-fl^QiM@W?P<8 z#`COKsoA)5lQq9~LFgm@q}cr*iY|`BHQYJ6`{as4&7fyY@L7=w{EH35zq2Rla#wqN-s`V@-tahCu82tqGfi?O!c%SO`;-XJ3s;6^>)ECZ9yMLs08gfK%uInlF#i*~0uuB4dmZAb?VQO`__?p3dtz@Q+ z2p4YmUJicMC!o}7#Uei27Slld#s+l&2>lHJa=%0U#o6qXhZwRVlxo_&aT4@hRQsXc zLeTkv2n;_(FiPOv$GbjUNbeZk5O_Cyk0B6~N(WodNw5uh9*J4*h4!RnSLxXEi7b@4@H z^Q)2Zvrx~)U;YfTR#K$sKxHzt!X3e_uaS4BezJSMA8~qK5d(JX&c`64Umz9?xzK^z z`o5!y7Yu=N+ekS1HWGSoTT>t>s`$~Wny*q$^l%%zSpB1)(FFQ$3 zeIu+9O1-!IaGUhgPG=?#h(WNLp9_No4o^D{-lrS~H- zUCQ0TDq=sEhc?q#u5V}=9L4TenzwelBwlxR@$e_Rcqp|Wp2yr8fj4>kUl89Fu9Dt4 zZ#9|5ZrVVHNrsu!XI-|73|_^ELCe%sk}+b^f>U!jYqdGJpZIHVr) zEY&c^)73+-6D<=;ayIMDG>?_&Lf1k?>(4@9b`h10m0b0h%iem~ZUusSfG2yT+7_4L zIu3{shSQy1hSL?*y|=}c;PYhJiTtNS?BX_mnbi3c<@SlQcSOL0_Y&R>HL29j*QHWz zWOBJ%HEjpKU8Gtf7>-l{po^(P<%=ALG$z?`{BjCF-u_&$f27z#l8GjoPF*_hv_Y(N zv1Dya0-!XZ@x(16_!_sDBKyto#I}r`iSc-`)d19vNC7fSFdUbj00j4GR_gC63?#_f zbU$g8utp$l`}~;4hh*r;*U?pSlOlIhD`okA;@A!>LeSnV-Oq|W6c|q(^%K!O=tdYB zmEVuQO_j{>O%PLm0(0W*R5vx|HClukK4+iV>kH%^aXBR{eQ0_B0+dkf%Pb=XY{xFx zx0jXD@Sy_r`B6;t?SAUtVRb)1s^YVQFzuJOd~s0}TZG~D4W4PdgYp2&S=9NhWh8%+ z4@SA8lnT4~yX~gJM^Zi~;(gCj@xIUAqnYTZ*aI{SVwrr+5ZeP^@oCDSw*)?-T5{hn z80{|=a^lOwjh>PxL(9!8)#{ONY2pWx6y>%er)$dt=yX&Nb+#knG(=|Xu7pi4yGKh z9R0z9q=yL7&Yk-M1W6zTlP0k~86~(rxdb->VRNrS^hH?#WO6{X3 zGrbVaaOC^!8)`9%OMLcc&C5gu^0i6T+!!E2g$1#|V2y$*SfegHMOG8DE$9&V5DEm+ zrq$_-1`%RGj|>&4$8unxysm z3G+@I5nLfq^$J0JS{bYg_CBPV-!#>uBS>!j^c@6=sl%zIloQ;ftcp67s?R;k;GrmC zuX;UdQTo)yz_cQ4F$I$B@*K<0066LT#KLTJCRmosOksgi%Vq>Ko~)olkL03TElAN3 z>-xifAL&%bkF#h`UY`Bpz25Q}Htsw48!XAO^h$Vv+>N>sANz~HmHnQSPg7|Ovndor zVXd}Es$P<=S1pdrS-R3}w5B`ibERQCO7k^MKsC1J>Vn6YDOMiuhc@^Tk*{dt znv>QPRy0RjSP+SB6w6Awpxov}Ai4PBZ^5H8-5&P+Q<1%w<8lP4wymh--b+nX?E8#E ztZ9ob7wT~7F;>ah>&HRTO4#jUie=6F(sdl~D81baUDR z#4WO@y|`fKV$wm})k{3tp@+wT(aMP@=2jYGPB@LR@OzUf(>viReCYANucRliMYdCZ zL_Z$8WXJ3Hu0pe%=6LPmz&>~N$3$MP#hmEgGZ+(TDQyRH)bMX3ZNu`DAK3s-!ccPz zXpb9%Q4!fO2K3Q%YA(i=={NX_SbwxEfNnM%DsecaT%9v?dg@=P_OoyGY}}ua2Eg%{D+bDQuF@PPTE6fdZ1g?#^;BRhLl&>A>*B#@q1I zYCYIGz03HpiBcmqllYn{9fN?j1EkGRC*l_$`pk06-lkb zhuBN!6CVQ#=O;yg>+oGA$#pn~NkWtFcIkZNna#g{gA7`UO^w5CiA~&X@7CcI@tO@z z-=D6Fm7Q5Oh)@EJ_DVx4gkU^*84qvTc;^zwQ(Tit!%OGZUp|b-buC1-0oR`h&qb!w zTy_9oF@N1O@-A$96N~Fx1jgfX6;2m}qDrAK6p=!S$)u}(8xSS3(^=vO1bi=@Rg!=s z9P8{$LI3LAD-481N*4(K?7Pe*BT5&jUd~Tg-g#Y1m=?8VlrIu-U0yV9`-PlLGp<}b z!1RsITveRK>smkC{q70yknkM3>MW1_rd0Ebc~r6HmsveXI2qE{IGPL@O1MbxzKZ^4 z?C0-faepF@nC~}sTBeZwXMmHi+_6LGqaBiya^}YmX(TdiOZOJ^{hsCF=} zG&7l}n#nt#XPu^fNP>5$C)!!{Tp1_@{StPMCrh|-r6}VD9ehE%of_q{)8E(MWLIO# z7vZk48&ml#r`|}F^+h?Fa*S~yQ35n6EjZ3-{Y@3bwMGW{>LptoKD#nGetDU*7oGZ4 z!}N*xu~cCOPAj)&c=SZG7y07m^hG3_KYb0hVD<%y%KX90%j@>MHk{|1rf}X*3{URk z;0>E$P+1$^0> z&&12xP{rYylThSbK5)%19dWR(RXXwO9otq*=BmH%3+DIYddb+x}U;IjWH)tyj$E@@a%L3(nlY%(}^eSvnsqKd|9YO*MV0Oy(V8}`4CKVlH!%kbxN)UfeX^1X}SJs;~% znhQuNVRVgkNf^pGJG_g+DiofL^_qoYj2hotioLJb48EGARNY;4Lw0fFqm5 z1BvrMmxn34g}>-#kZq!Nm|5xS^fcO;Nig~J44x;>EYNSo^mW#ZX@}^ zi_7m{)r%SzBXV3nFzrV)$!k%UrmJZ{Z~)QQ7&j>skXyGIW{$D3>^O<=%1TlXFNS*~ zWIIC-FZR_UFk{aN($g2#!z821sOV2xC}lOmQoi3Cim5iRCdgZ?2y|=6;jFV*1alP) zl@MM%metKiy$1M0Vv&KTD}1^t)<^6oAvuvAC2xj6mxtiFp;=#kJ;7>YTQ-tpO_QQ1i&18zjWoRyj7^W=5TpkLBnz?;|5{y*`%1dDl21D_M z<8)a3v))Q(35Q7bfBaKUTw3UBPpKU|SaPS6CVi@Hl?8v{_PbaX$uog{PWZ~Y31-1J z6HFcv+{WFVNKd2N(JY_(L^sfXGZe~v69|G`*)g|UsP*Rr-dj$*P4~y(Mw%Gh0;Be( z!)CwG@}_&X*QWjBpzythclaY-#yhs{PT*KIZ~QS~`J`}fQ{YB@BMUj;uC34@JasWC zv21_~JxDT}&#NWx3X#QsB^ST((1*E@Kbe0F>R{7aXdn703;EQ#FcI+wo*g+2zi}Oa zUcqc@!>9F0vBGmmDZ(VN=dKB#){dgfJZ;5L+=Hb&b=_`B|#uKXc&< zmqQMeOY1Lf{YMt8N`J?{G|>fIpICi5AKoYK$pJm$rUW;0QU*@O?%PZ)L3J$`>>F2} zUnU&*FJix*wmh)q{kN?&9cziXTl1em$j-aPgg+0~GnI<#uFlslt!(<-9>Lr$XtMrq z@vsYm!{L+9=$FlumTSY8D}Llj4-VBL?@dKRgc~5Jfh2DM&7$k=BFCE}jQq8Ic+~&X zPT?}feERpdE;{>qUHs~7tpXWN z)w*C(J3em(W=Pr@mp*=^?%yxow*3S)TKdO7F)qr?L{fOJyxMd`&^NjH^P!I>%&9Tj zcCe^n?!(3-bcRbK*Sh5j*6SR7{BH{{YLZWnsmk#5?+rXx47VD7l(`xyj&3f#=2L$yL>i@5va`yl1Mc!Q3VOwsl)rI=Ifi7qBISQ<4oUcN#Mx*BzkkmWW zo!y(tBp(lcTSQd=6lMvfLzvvi`BTr`v)8{&Lf~Q0{LQ-OwP~5W^t^Mr8;=emc6Pu`fwfI4`253%Qo{KVLwXF=RDiq zIrj|9IdH1fmiN+-+)9cVb)#uW1gvRwZ?XYd)N6p^jfU+A!sNagtLoHv6 zs!8WQ!^-{-ZhCI)rAl6himw&aP3kl6;7&W7m1=*uZOTLahNiO>Ws`kEx?Er8xH~L4 za`6{`ZSoHM=342u>+)(Ddg%Y)n60{phV)I7Z{W9&xyhrmuZpV6Hto4bUOMmo4KaB? z--(~uYW(@p4LGcxFvdhrYw@95fT`rHKxiSazh;%*jrmCQ>j425`;50PrI$2g@$f9| zFwgnHEas}J)$w82Sky3USl!`2b-%I6V=3LLsLy62Sx@mO$aX9BIdv-5ce zo4-B)0{io=+8m_xJkNAP=J#B62h;44{BI>E7qx3j(GilGc9YvxvN%sP@q;xixC&~;%$)XJ-{u7^I`5jXtr(tCMqI0ctq1e`Rbcx&AO*n zLr>F7@R@;yGIHTA^SRj1?)r!~h@)Na-4FenBud`m>UHYAV|*v|k1>-2opkIL%J@6e zKb5xcU!=7BjbX?ACE1Vk$%Fsg9m(<{MPD!ap<25LC_+?*Yx(XGP^Pb=@0&hvXpEQf zA1dyfL)o4EaDIz>zvuqwB5>H};-q|i_gKS12_mWC?2PXaOpU7j<)sa4@(TRM?d#+> z38U_a=Qk70RlM|qMid=?sEYP*_xpF(w#dFF6lgIg`DJ=~`-8T+bXUDLrlwGWXt@n! z+L(2{022wTRJS;YDBYX^Y2#2FLa*nPUe!o<&(x~n%+9v^&Kn|HYO83fs>bPI&21N< z%kLz|PkhgGL;R@ot47CN`|h6+r}oxlmZVc<)UWPLH7MtAj!|ZEK|ArCXhr|2FjmSE zGv2XFDV18TprzzYsPD@1!>>$daU3Tz$mp!~e1j~hQV}>ITUAx-o?T_1T>OM!Yb)%7rT)uv`WDJAGK(v| zF^M%*y5o~fLV$=^h1dAr>9DgtmQpYGxo;H;F8Q-FJ$oGj{Gty|Iv{FSL)}iL9fq@q zCHHJXx|(0=hiNYvSGvWTa`E|Sm0g!wW;){*30y09;o{)n`{*>Yau#SCSaDA zWyyGMM!+-^xnkkiaM9r?F@68+2cyRz%bVzSvMTHzeOZJZ`Ae;-uuMDH+!vI(520(B zo<9{?-;~|e5q$YR%~FVNP7k1-X1QKFpPeP!8CXO|j7>xu!X3UbZfsuKi$4Qgu9d<_ zn~b!lN{fC^jm9F)o2q*>h6fr(qh4N(O;_=G@|Nf6*uB!uHo;G6i7pBbt7PtR#c7iJ zN~W2d!)*mtHRFYcqYi1Lp?>D~R@oglEb%u7r()>bwI1Xm>Qg7H?ro0EO9|91FXDd5 zy+2d>w7w&bNNND`o!RL=tXyAt#bO=++D!1HqM4j|CX>n=-^<%#Nf-NF+<9Rk{>};L zd}$6W?R@Fy>)*&Z*;|AEkv1nZ**lR0I9IRDuWouRaJ(qsXuip-@Mf$!tw~^1XQ^x@ z;K(k~u*~t{AXa}U>uOQ(>Nw4G;$MxWE{4rbmN;X66qI>(YyDA3^qt^Z)6Rg$BgCgn^rL=S6upd-1F>M-tK@Rvw5TB z6mbDfVFsoX56>jrfEc7QQ8({qaSg~|lXYef1u|H@kCUxlD#5Wbs!atS;bwPyFr(O~1ud&5!3h z{AKqh&Ki8C=0!iXHI2X6J4Y(e-&=B6Wq`c|9{Te1EF@jue;QL}7UWJ;;W$a{k%yEx zx5$?dnxDq|Phy+f)2Kace@^%zn+1qG>NW?ER!#+QinTtOM}t!AoS2MI6_4$gL@{N< zG>7^V6$>C@G9$6ok8$gL5D~3Q&c1i# z7P<2lh=STm`gQI^N*y@ZDxgR;&JQc$T29O>3r?_q9vQQ?7?)WqrKkh1e`}SaW&5l77ha^!;F3+;kAZ{)mvF*@?IT{2Z3PDVZ2T1CRjmI-=fp+PlHD^2GgrdHKECooG#Lo}=%VoG^0ql|vba@t9&0csWG!D{RaMFVG{{^KHG;)%gYaUfPx*}R2D?u9$QH>SS(3rH zhmrlnTapL#!SKF{!T1mj3?lgle1U`(BuTToc%I)!WaIiiQ6YsT=_#|d~L+jQS*yH15?|$qX+O3OD$&pF$X)$qdk0;uU ztZ|kj8x|@0GN(V2KUnPSD@o%#9sO4BQtF1J9E$^dL-m354)E!SC1ZGSx&q-ie-Q%U zOsIYvwBd0E`T(~Q;sIe9W8jet_3&gpOQ1cqrl(-WJxfgZJ2-Y-60=^IVaa@HZ3E(v zFqdR72F1Q=_?{?D^;%YD<4`R-?BM%rS#$0~FvYNXsoyq!{5}^g7ECF0Km5g;;UI{6 zJJ%E-QG(KQ21bNEQq-(vPjs$&m^l5=u1Odew8(7V08dg?oCL^@`qliPlCW4 znxVeZWFrFlhHun0;)AH9G@0nA7zNQN{J}G+(?JKI!S+(o4=5vNQTRb9lrg60(-7}$ zB)cMhcuS*6;e&mG{}U0tVVGKV8H=2+g}(+AotnD)&1Hw1I&Q&YmG;+`QtFpoWw8o( zVgGweyiI9NpewEFe(FYzrh%@D91t1Zzr}fiqk*>Q2;kg#+C$q{*me+e48~*IxT0)s z>9rCAw(Hu}jo4gp3P4^{oqWAwv*4}SeO^lG^mB3{@wtDAwzwmNG1JwceYSjZ0m9_K zZR`MnX>xv`<0_eqbg@=slcu|kY@F@E(MYJ3mPKxiW=ZNoWPKd!-lin%5F7zae7mm; z`Z_q0+Cr{I?9F&nsjZuD229qwSSRuBykxAcz6+e%(TeP!2ZKpa9&_PfOcP~m(~p#i z^-O{}0PHNU!x$5IXQdEa%` zudagO+?D!TneR0H98SaY7oK=~X>xhfRUCW-YWn%7Da@h7MSr>XPZL{}km@A0ciyKW zyCT3tGZ&UYO!vg5O zU!A?yZ^izOB}T|f-UgE@SD18BAe{A+&5u&(d-OQ}358qvx6KL0C{C1h zc*#UfASa5F=jmDIBXV(Onfu`L82rm{UP6&}h0B$Sclti-pFMaeJ*bnY-sv&P{CYmm ze568hNr`GJv?4eW=jv#*wEY?9D!yGkeNTf62Z1CWZ_e;UE>h@0FeA-FWZ-XrQt z_T;%|L$_xWxAzmK}tu1;TC8{9xNXu+$5 z8d3oaYLxj-3_<^3-SL%@oZxWb*eT?HpFj60^8&H*k>^c3SFK8Rm>pH^1l z2V>=PfY))4Te6?(d%B1PZ_LKuN^{zOK4RJQzyS`qCkK3^g5cF1R7{Sh`zRKT>u9Ko z()SyGdw+AI_$JB|H%c-TsbIU6{)oa`toODLyl-%!n^F;o1!0C_HwjDjFw!G+(_G?U z-b?_KSCUTdl{k?@mg1T7Z1!OeyPng7Gm$x-5t=!uOrUm7S%Ko|Fdsc%u zj>z~}0D{OXHX}(fxg%6X)|}O?JWV}BCE0L`q|s<|BHoU6>+{pt&9FU=$5h-t@I@07 z&!>FD_(HoZz30A1mLH$4%nO{9m?nJAml_6C{VI6DH5|E^i4h6s9GH9}KKLo+2@I$* zmm;`7elMjTBVtWx7y@r#BKIVfMkH}&K1oKb-`O}CZeiXqq}docJX=!nux0lf#Igta za5l{H)rzB;V5;Q>?=SPrWjE#v*bn2rQF|CrQO5Wc#mwLJAPq77ivLvNPS!AhRFCoN zrLk_@5RMt-Ob(-tvn&;O;jzldY}+C`>cZb3UCZh_ zdm`=>DHE$IW`d(zlav>FAtw3r{+i?*x9T2O>hFoabSkdXaQF^M&%2=(GLL(m{(Avr zy-Fd*Q%oQtUfI6R$l}*O1cA3J&z`WUG=Rl^TJkIK_5ph4b=*2W1@XBhvQ`nEzfd@P!?w#~1{g9He=G&m}Aw4-%5I?E! zanHRIt)s8%apjx3_RU2viI8}#F;GQuOO@*BE;8G3D{esJy8*NbpUChmqDP#n-5Ek2HZEV8F1unG!?xKYB4WtG<~PlBn+L%58-Wk-}e?sk-wRAH|8xS3~h-q zzXNBN@li587paG<>`i!3#bKjryCA85(kzpM*?J)azK)$;Z-wA||1?^Mlm09$;>8e{ z_cX+UtckGJ5qK;$l!AdAiXNhdLRvE|6!brX*5A)q?CE|6)xE34y7ayU)}{@&x55j% z)7zXFcFd)Sq3@c^rwl)X3XR;}V&2QQ!kK&DVtmOe%cy0I^cY+0D@AfWhZyhO-{qfG zFUNkBoLWbQLf%A~$$}#E&-@*nQ7Kb(?bMLpP;r<*3G0pr8|}`KDgDk786ggg+Zp4D zew_@a&2JoFe_7f8?#tWcW(ZM}R}$BBLHdI>I54#ho;;WFB+!cJn|z5^3tt+%7LLVE z%ZC(ebKWZUgha>HJ)3Cg!w16TIo29xsq5_AT9lLa#Ctsx+sl4r=|BwpbbR&-AHM=< z#qXqL(Z2?!pJq`+y@t{M-nn~1)a3pySo!Jatx*0?V@m) zDU5RXNsw_XS~p1`(u}^}UK=j}wuLZk=W(xLlX|v0s?JiAphOz_z(%|GR!eiO$h{yd zu0wnLBbmHmF79bUBOrw`4w6Q~=hMkg?)T(g_CMmI+47QZE#R^29yk!2;0VAWo?s#C z)Y=anMPvJ;sSt~=M?pfjgVd<;mqH4Z} z=~hCdK|+vT1Zj|x25IS~K}tH86cFiVDJcQzrF$s}NhKGS1{WlkT2|6`zt8Xe<9=rD zoHJ+6ojdnVoZ|m^K}cfhfcpXal~zd&#l2<_U#>juY?$?$c2FhS{ec_rd&SUxBhA7R zq3(VYVSo3c#<*{mO*aTFnk&ellU2WdE1QjP)DK}!-zrq&d!{0qRWC}xYq`!) z?OT_tyYHRKGw1N7zguj9XD-I)^O*0l-?;DAfwi#ZDt@&uy0Crzx_%9lt0UFjHxpr- zYjt$&=Obh~Hccqz#03V< zX^Pr+6=Y=Y!!dCI5Ul#&T>TWkP2>{{x*{;k?GJ^!)>?IfDs&;R4`hGqQOWw2z(*Qu zIcJtwwi=c-R2pl4I!-OFU(1&Z8Y}VoElU&mnQ~@!SVb=$87)uhBv|JDmMVD)&WacrR8IrdJlRp=WxmlApu>w~|1wE(vhM8FC? z$NiS6EB#)+hzx+LaQg?rDwh!7)rJM1G4uLge=N2Iqhp&a1sQ&wc=uPXA)sIV!Bb`a z;P3ja-S5mDdv*uk9M@+}B*Mgka?cLbd-8lgCc;LF;Fjy+Lcp2~xTRpJbh^@OU@k3~qt-Uzu26e<1Wr?pc?B$oijK-!hXYxfs~bL~*TdRu6?G>mIZC z6PoMfMDR(KeUC4(dm`*Du5}O4(y?bzLYvlQ0QFIQ2fk^6-@t-6T?S zt#n27=$rSBtG7$_H3aYRkjw`mLC7cM5``b7XoZnRpKi_b5=wEWdeCv&JtLRZJin-r zp}q(onPa1O`GF8Ocat&DGXt6LqAJe2(AQ?U=nu9M#;_E}^%@?Kwq;VjCnPxFk29o^ zjOqkc=(NhW!WElRO8K+HxXrS;?oX%4i4pCt-3hnE7BFGFz!|B_KLdQ$s0ES@^u;K! zcH)6z3j>x8MIDz8=h(gjJsdtkA5xu`Zu!MwGq&kH4KT(W8%T=LCnzuaZ{I?QEAiFi zHayU?mHTPkCSd#Xd1*3LMd-tj!=kGXRjqN`MF+@jbtrh5x_G_BL=pNOL3PmD{b;_M zM+pY(t#q2^Q_?!Pe_*AGax)*U8VM5Tq^~3|@>(CrmWQ}G{hQ2IfM|jK_2U1!jjW3V z_E``>n*J1I?=q(5hqbmBrxJXXXK-fL7Kb z`zWa=`zRwo2IdRQ09sLE3LI%>rK#1+V6bbg;LsM~{k2TuAY}Z+n_$ryNVh9Y7}L3~ z;4z2!Lvl~dxOR`%wUW1V#0&|?#ao%wbJ=Pc@kU_LK`!csBi$5v@n+i64vbOXuA{%Y zxhS%MKp5$-9&4*N1T=6iB`~XTL0>(eJUmn%?0E=rnmqg&Fw*mEiD4HNyEEML-Q&qF z>iWw|q^_V1Fuagz7d0wm2MiYz-et~97lQOHi0t0?FA5>8HFIDuyhnP(_Jt8B$wD4X zK_(1_&~uOt)Ni)@l4nTW!!miR_-}GpI>Qx@7U{=lZpKLmJ8r_ zEA3myo(~$IVK3ZNdZOw$fJK4yXRq6QfCuR9$-r1|;&b=~_7CYLDnzT4LQoxPagW$Y ze@~Qv4KSa$zelMvItYVv0hh(!T~G?B)h2s9?dtK|bKNO6a75%LYyx`^aq`j*2ui`e zfRp0nU^-w@dP(fx0vg}>?_7rN@vjB(MmQf!+3|kbgAtB+Eb1QC_wQt*HsdIOT<#7|I&A*u@W~_l#de4l zsQh>ZQYNrz9Q1@w=K#_-yJdV6UET!w8IGVgfc@67;PnBd6trAqtdmKxxQ1T`-UM+p z9UGWkJfH23-ySo=UD<1?z{9@$)Up&&G(%7>ZbXM5KOuK3y76>#HbB#hpgP5zcp1;C zM2zYhbK@67PP9VJ<{Wt$&rL;8&bS!R`Ha^6Q;+Wso!dvHIms|)WMw5n0w(=f;r4HG zUhff-?_kBMt7Fo8*q+K#V#nl~6ucb1<52ij?{fcjGDfY!5+L$#@q~Nstb}7d7|`eY zWdmNM{0tjn7iV{WM+!6Tkqh5qxRLVaU0i(`PI);)o2}iMd&h9|(5v#o|uL!q!m>BF*Qe#xCIBz;r0a8@>ds}@3u zBE2i&ek_~Mw(3M4GxS~~_|s}?ope;;tnN^rVG{w*tyRjoQ=7Evb;37{^TcQ54nFQ0 z!DSROnOd)2h-ih4HLV#0{MPXzdF-qkEUYwSBT=TXpQfK$yq8K)uBx$oIX|y3BWvnU z9$sP<5U$%~5xa{4Pba3A#I46m17N zo=(#b-b~!l{+wm2Q!oLAzHx@>q?5&_6%Ad~K^~E=(!c(GBo-$2iPYpLzyM8qPBFQ(~^L=jo>%AiX;?tRlMN0)J;_MaL zgl87I0P^Q8bRo?uO@2izuk~gsN6MU1hl53j2MXGZJAA((ZGTu;T;RXQ@%DX*zQol{ z*(~OXJ`GioGE_B2GZE`&8=~iTW1%|7XMb`;o%?Vd8Cn?SxUDa zLs4{*E2AKpbCJcQaQq>*PWq!+qx5woyv`g?34Xx9+{f@uj<)<$@2!1|dzxa0_F@ak zm@is_#|_cMrK-!A>7bchocNEDboP)46aP^%{Y54ENUgB=I>>Cg;B!7YxU-9~GT?AJ zu0!&;Om^Q(UqT-aL`d*B$E6)B7G%OzcyxkOGg~zy?KS0YBzRI4Q!+{+m8ht>&XY0x zOeEv7KEsFPo#5xRy6s;ipQ5XE8AP$JtCp}qW@dBI7RZ7)>44j}4@D+bc79W)9g>MF z1*>xO@w*|4B=bg3kr{#aod0wn-WbqS8z-S|wEZ)&8x`reIf9uJ@@1{mP^2mx~LE;H;?Pb>lgoY4kORiQT(gvIid=dnbVkd6s|% znkge+cQ{(m?0M13eXPFHVb&<>wB=~%Tbs;U%C9gw6Wl4{o>0ne1|=|Oo$Y7=9v!E zj_5nnw%gsTfP1)ifn2X%)^4W91E587wFyU>d?0dz?}T1CD06CQ?;2>*=3 zWu9{3G?3v( z$eP7{uFM7gWA}4}StpwPS6={|77u-U=9iZMtB+m+ni?ZXs~cW!lVcrr3Ou~!quFv4 zt5U45a|Bst3O<_?y~>V3XWfK2b!5!_KzD^Nwg`j|9L^Qjzn1G6Xo~&W>a4V_Wz6X9 z*L?~l^Lr}gT9=${-$lZ}b!n{Tsn|8n@+9NiW4YA&9vzfzmEZ*Z{)d{+COYDoY4zR- zNLeMC)DLd=wsG(GZ6bXg%rmUKRl3gKuLT#pX0>$a%pIS9uvH7lM_8|ZmvSttk&i#~ z9P;raQ!@^3TpFo+r1_$(hCKRk{o@au{nyXbDzXdk)nIpS{k}#Yq|GW1CViEEm)k*} zOR!l=BHo&7e#a`Sv7MMLO~lXlpUC&$eRddMZ)XUhTckxKeYTy_ZA34RY zrs4N6c~AQN@g$GrDq|dF?ETjd>1TmjSw=6)4(lehj1lk3AAu}ikNJ93^@4AbIp(t7 z8wLrD8>dYAP6cFW!Fq!u_79B0-~3DQyECr{d zyRHxfx?lv6p9ixDPxM3U7l}Bxy5Uo*J6V%{_I;1H1 zVDaIdVS*wI%g@g$yE$rw%nvy#P>BtYx9sgB_Uj~Mo5$=@s$Byf8G`dg($IJ>{%Rpb7adkz z`Amt(@9UD(&o57$Dr;m{^n3^~RspSRuA1^{6^w05WIDt2d0H?>mWB`f;fM3Uw*Id6 zD}Cedc>P`8WR-=7$$k#`t_9@!YXkEo^=ovVYwv$EW$bd_Fqn)v?P zbCM=YbKU{};{lwN1?g=!QpA` z1+Z?`FJlF?rXD;xXR##?IDUM+qeItW(hpx4P^!4QZ3TO+^#z_U%s;lj`@=*CtWfRL zlDT{_+Y20m4zqB|U&RhVFPghRD9^?M+|i`H7%Ah%0?!{8wyqxme!d2)pV0U^y)_!P z1A?`=Az;J!5b)j$tabCP$BPVapG6qQE~)3vkc3P|z;I|OPsi=f>-PtEH$!blwOkVy zcCK;yT@?zk{$>t0R0Z_cHr!$`w>b-Ck0%HQgMf*)CKNY-UsSLV?-&gpA(oKsq0|d)1>XB zt?A4V3Vr*nO96K`G=53|fZ#)?v=8T-UxJv)c0H2MRo4?j1p9#BT`MWs*9|Ibh9xKa zjdhOAzTP}y2ljOEY$vr3go)C6#RuY3v}aRCvI7mu6o){(w{HBk$lD}#preoorN;xm z+9QDXLT)tr*Nr*YE8~>Cy+}P!G^)!^gtLd*RB^Co^ND63Y3AuclzD#H{HgHTi&s69 zxy}qg`&VV3z&tOiwq&Wj?dvvb^FD)3Ie4}mZmi-1bGP%^f%c4_K8ZWtLpgg2M0>^y z1O|61a`w0c`$bydyBcH%(gu?>9g$bM|JXA9Ov2NpwBNw|Nvi04%e zRKF750osebICh|Mn_X9ejMfQq06m;MrmP7de53a%GO2eE+Db)`sC z^B&#vb#9uU*T6*#q?;+wV_wp!DK`jmkhr3IdHoxjV?G4UNh^b{k86SMU2?BngkWvr z?8grJCbK~3*&WV((p#*9tjK!#PXheQ}&J z9!K*7tRtQZk(H6}1v;qo0tGp&rY`BeQg!705I;eehuULT$oDe53>D=|C7u-juxcS& z$#lbeaJo2XN_7LzBmBc>u1BBxSA}D*d3cNSEa}tGvjv^P=e=Zr+MwIX~)OFVFTaUwja>&4&>fu9h4g?n1K~(y$x(`tq2fBD-w*_u9>~}a zbDivmtqWlF>QHo_GfAGdqE+#G#r|Q3h>qqT#q_`&MFIih_M6byx2>YDg@YinSDR3h z{`Lj#o*`(SoQr*s0}fiHajB&U(WAKPYUBuKtO#;uAesd(pL_~d1AV9QxT@}CJ#Kx$ z)Phlua)!vV6ho^;-qND-AHRpR;6}O3U<%Ef-{Y`U`{EW0WUCdQR`oyS+s#XqPK>u;rFjs8i;gzh71CilZW1j966X1 zfuI&2p=KV3t(H?0p;QY!8s(lZvh!>J;tbl;AZ~wmO?!Dsh}c)BxiG!yL-4pa@B=y9 z9)hpH8^}i>>#=0}uQ?mQIDg@7t|JRsX(|LGoezS7TuKVTPO6v;&bLBiWI3oBcszf> zYoiR_)cZLRK!fU8GSUC3si-Im$i+wX$Q0`Sn!shmgUZP3{i-2?m^*D!Tps*kk1@-l zangeT4;#tzHj<7w4mjzrfpBS2xb)~octVRY>F;~qhcBpuH~wE_&vCXz3*yI?sMhTl zYpgkCyG4hg$)B6MU}fpLXsQf@H9i_2@i06ukDTQ4?=L@t@ME^`g^d;5Y0xC3%*XQ@ z^R61|pF!8ApBum%zlcCz-(qjGx3eCVQxr77GK(Xi=qET~HR@Sdpenl;M+kAneqg9s zqH3v2DmDme@(F5_(Wf$|h`)H-!=|YcH5ANq&vA$#G-_IJ7#3?*(ZxDI*~Xzh@#L+4 zSHkcI18F4+cSi(YFMun-R=L_Mq_Snspt|YAU=Mr)%lyfF_&UGhD`$uiu`^&*Pzzqe z`r8$?DC`UX5IP_i2gV7<*Q;|yO+9Gl6z94RV&Hc_EBDJQu}XpCdKljqz>GW~qFbT{ z$zTMnX-a(Mv{QYM*7xb}xl^k+1ah@L`woDDDa>lM`j=EUj%X;pP3 zue;&}X+;^#zA^K1cUfK=GG?ni*Ue36KipTbuiVLdpgf8pnVefedtmcE7~vHlPG~ZB z2^?QDJ(U)Py0Ky|5@qPTl-|Mwc1bm?-l=+B=4s`D!?Vf*M1$^vD=exOc0*_h5H+no zoKn)Zgd~yrLVF4igV}z?)Pr|yyVm*PrS-6Q1=xh6K5U{yunWkCWeG4Qvj%3s3}CLb z<6Xc*T3;wr*g>#qau*QzI0yDSi2CY$QFm#=rlbLEkTM9Yc`^ueb=vJ&e@g_a6QH=t z6Yv2(Yn}|6Qn3Nt68>^Mj&6cgV=gz{D~wp}2*K|<4!p`62fA+M&UI?d#)?vcxS$o9 zrA@RoQd!WDW8LKmMEW>z8lM-`S%A55ipJoQW=-O=xh=P^Nj<$XCd#d&PVi?UC-BQk1(%j zd4iy;NqmEm_dkM1I9brZ5bpm0mL}HqmL^Uxm$RY`#1DHADE6ca=t|-XT`J3|r`3LG z3CW78hmAW}0=OAH^E>$l$-& zB9+~&Z|R#NBRMIWBE@6b7&oKb*cfY*h*qq@(jl3>0JrZ2mpvQQ$>N27ZoW9Bp7SnP z`ZiVSLvrzwSb*+X2#3i402A)AJG?_?7@YAw!Stzi=46SNJ={y0g3JIo5@J> zGeDA;HNOrPcMle#){cE)rPLfufI*hD6W)s@FL8X{KlS+HjuPtzw;j-f*L>>^fx_Es zm6%WleP1U7dp>8q>8&x5g_-u*Mj};=+d`LJ)SO0k%C{LKjDz6Yopr=bSb=uGA9Gd- z;Ft~VIAm>h&t%d?-fU%s7{5%>FmoL3uAnB|Sdg_a`{TB0sh!Z_;OGC60WeAx2qPd1 z!K~5OQ#fF>d)?o*S*DITuqYq|{Dt2Rx(UZ8KEI_&7H276+5&qx7WV)hDtgGI9Vmn9 z#wUZI)8GqlRsnVonfNXb2RXuD38sqEpt#3xk1u4{&qoqo6>gW#z1T}KpDRxB0e(?Q zE_WWGOA{}Q?GDZ2_|y6t_Yy84%nnHhxL$XuN7?fqlSF(1T#D zZ`Jk$N3CgiN6_e(`77Ke5akuT!v&^zcSWO_k0_VdMWZtZleOXpiBbATiz$CF--n$FR4hjxIx`-4?c0is3I-s4xv{l= z4t5_Dj*c?I7+bC#Ck7wu;T=2`ijxL1>qG=g>a#-q?dS#uswd0Ds}q~$=hC7sRlbad ziPcG{K?K}bp^LJqK+q8V-~c>V9a5*r3Z;3M&Bk=q+vz#Wh}f>Pytl^+KBl+EBV514 z_+l~98mw+&`_meP_v=u>N951Ks^R;#?Y}?;h_-12(7aeCIx5Cljg9H=vS<`Ae+omM zIu)4wQXV2(js*oe5Mb^jfZc0Y(2(H%AbQb^0$8@5ClF&*ImUn{Er1pBdjdgC{XumC zn>}Lon>}sH*n3G^GTAh5DGFdL7@+oqYke z-+lmU6!++zB-5K({-i5}9ZY7T^#>dN?mxO7`qKke{ITZO{b+nbG$j+9F;RK}oTdKa zieLVDnl!opwC9_l-om%V!HWaK)IlLu8Du%f$vTcAs|-M;d35ioptFWj!q0>;>$9M< z7Sj-*%CK_Cy5@E*L)`54MIl^uktmy{7)|8~uOBxS*?*ewYwfSvFINuYc~^15N@I$h z=c=tB17>uIka1Sz{v#V-?u_Y57HG1#@*`h)uPKzxAs2s;|%j*)?QCzmQfUlBAhqqXpA3klj`PGCESz328ag_(LbD z_@EuH1eko1w4*K1y*O9`J3ffK{0qb!OXZ-op`QAJ#OcUflNHQ?5;h^_K)sF641lp7 zB+fG)y6$v;0y!kSzO?uFJg;f2BLqSXk(>Z8Uzw?BTL*pgK~64~ob$KAdcopaJ3zXL`o$8f` zt-K|N4wZi}K-UOjP#rzRm6;#K)d?J9s>A1GgIS{40Cv_eGc7OA5kj`S0nCA!aV^OQ zf!!?8P{*hSa9T0Xk%RmP63iSO4V5}95U68`fs#FbYXk5Qh=KNCZVGIuF{=$ykYoY% zRnsB$l^K~e5oqd)1SE;#K5~#z##B9~xPk}TV_Z@(4+4S7gTQq$5>SvN322JI1~3{m zh*>jW7Af*J7?JTH@Gao~+IshR5ZJ7+mKJYdgI$0?@u05AF=qTXYrs5iFU{bBI83A0pV_ zm;#=ujR#++8Z6e>^&9Q%=hlL2C>)?6^t%6HUekQ51;f79f&tQ)>R*d%X&EUigC%DT zQSgQ0gH~@{)VYiDyla-iysPD>N|+l3%3F?55Arms63n5j2S5XMmk1})-AM^T2F;(`oj39pG)j*4%hR{i{vJn7oTMd+9#WaGzG-9iZ z+NKvb0z4M7TyPbLt`*;4GCPEfHcv!D-@S;2 zO59*}QJD3eFg}AdfH0;7Gf&w7YNG35W;m-8GEPHKFQ#``ogdF+8O;ZoD~=JU%46A~ zkah-rIymq*j<7pqx%e1k8gp}A0YI{HMVyAtFg{$CIdn&>*mYC(#jOoo{Cu_%o(&+e z3IB&e_T9E4BPYB-NI)tDK#qg$p@C-uzoqXu?_gc06C-hU9r5|=2av7%_xgqg4GF)$ zuQuL*{OoNTY=hN+!^00yMQ35izzCnvqK*XrnK<;tTtrFY*zt*Cn@94|CfljHUfTxBlc%$wtiYL`p7|Ei_0Bb7ON@T zuQoMlD68oY9V&jzOJReZTo1jn0G!?fDwsrhJwyt5uNNa*Dg7o zVYEy^&o+$b!1tk+p%<=cU{l{8Pb?&MPOtt?9-e$Xc8$>mVg~rYCMNq@rFB@gmnLct zp?9->VXooX>P5ZDh=Lu~+l&7M;`|dB|r&c=BM zWKJB$S>jITd%(HLiesv`VKh5pR|5Q?SQkpgjqj)mg13D@UYjN$2_29{17SxA!lTKY!1u_}Pv%W4f|NyluNx)T z116v+V{wHiP3T~I*kZ>7_&juNAzNm;cJ(?q!n0+OPa#-pWBu?8X5aB4ze$=0Lf!Uz zBL-Amr)gy)$+|L&Ke5XaI?7c;N~9yJp_)}Z(#zNFdF~DJu9Yg+{ZMMZoDRWVEkGXs z7+VYMYi~|K|L$NBuO?bR9v>*?aksjisd~Km4Ckh z3Vmq2tfE{0;l;ArSGT#L0kx}$xSMTb$yqGqSlElZV(1Z2$z>>vx9ZiaQxr#`o6n7# zhR4;di8oOG%H-wY3j6@E_Uy$2Fw`$K8tHHpsGy-9L= zEnbfdOs>+Mc3*>Ad}OmKk@ZDHUsav=TnzSBXQ#6obw40%-40!rw%07m_nIsvCB`TP z_|}!sL1lF{KHV+eZ^W*6J3iXr@ftR?-xTJQ8&`+y=b8Lo zw1Z_EC4Xh-z5EL(U_E0{v!M@M*?zhtUfz`PDNivIjrzzg1KhWwqp3^T$@?ra6D z%-T=wa3kA#>w)?thWmYP?uRZ)A(o+s)vpRhjb86=c;D_%@D>e$G^AmwiY@biR&<6* z%M?t4uE_Q2!|3L>FEw1{O@FhJB6_mnvo3W#ly-O}x*sI(PMimK71AQAA$0|rRAdD~ zgClEv4^B0~-yH@$*-qZlTEWDxri= zms5QCl`}fs#spKuJ9%vorB-uzpYX^pJFQ5c-+x++V}j_=Em5+fjEv?)J85kVO0GX! zVo@*u2pSX=*>v4<`M;n1;@`NQBVmqm=Z``~d%e9ian)ifPPG+VLkQIeakyF*G#7(w z)acqgRPRbydL)?!>M`v`mg^M6=gt}Fj-}_b4eBzZn|JJY!+To>? zX$bm6p>VL{TWFmej#pWHmY`Vs+*VcGGrJA=O|ALw94bybJx0gFLGCvzq6=@%ZMx@n zX=+wv;z&mReBOqyoHVWl(IGFV!LeZaUTFMMEN(0&MJ3P=CzF1sm86v7m6$1zod4xUEv;>FxrT(>EMwj(_xyjg>N@<)2>TYVseRI)}SG0a)rSnIP zsJ2#u$H(APzi$~nUiPiBMsgP0DOY<^A;)8izm2FN>xlj)o+fh}>WKa*0liJ_(VNa2 zJ{+8Go|o2~VSUL}ZW03#4)NLsYZ4!^C)x@G)HvuG+{`bVZ%Q%Njl&nz$_Kq=Le}?J zRIy?^z*f`nRc$Kw3|GiE{_ ziv8Y|y^xA*e4KZU9fp?Gkr7jrjASNlt{$a8A?sxgGxRkn{iy+Bwg6igH~Ub5UtxF@ zo5-a6(yy^Y8w-0b7aPx{!e1^CYoaY~G5d)xSN|>^HV%LOpLfLM1UURF-dQ^zM*40d zp6bk-X5(#clnh3P8-0+2w?En3_%>Z0gWw4sFq-Za0E(PK+(y^f8KVA;SBQ@QO@p@k zfKI!8E4t^jY8gn!Z&7sB_b(=+o)Uk>O-z|AU;%l>Tr{cnKT4{P-~L|7Y!?UV;8$ zoO(whYZ8qA@H&gRkviLhi~ixYmH%E<*h~C76kPbuDDm^|C)-mrkGT3fJtB|NK3-aJ z5TrqJ&gyoY?54(>gxq}0zM@aboa!Oe)^t+9k?<5bM-w^{6cF6shY7zF!zvifwY5=V zGTJ9xciT9hLQ4Pdv4Hwt%>?nzNxc>F6Y7vIX52yn99Uz?>qVYT+qbnI^$cCRaW z*B?>Twkja;lFrjD9tD?SjL;?ve6MNSuhcmd5!==i9_C`@b%Zc>K0F97q-y|AP%P!A zvNgEfF8BR%B;sFbZKDv0z#!vA7PV=Kj*!uv8n_*7n2F$C*%D(@ zx?of;v031$L=A3mIwOl5;s&>sMVx;TSaOJ6iPUUzDtc^k1QmuuxJv;Wg*8%vs~^aZ zy@^pb#-wMMhuiKO52ZJ6{Mxt``|q*k+dE^<51ny_2Vbxn$h`>qS9VgKNq0BJ{J>i} zoWxr)&%v}QDCY08%;5V(&@3tho!Jsg4eN6 z4P5rS615_ZZRxQl$^e;JADpm`?x(R#+WhwQ!flSQt`x5zs>n zZX1*3ZaVhqFZAe!5|0J49`*xkiG%{n{KS~b+VwT@sfjS9HKP!fHGOLecdR0n^`R7o zv!=l6a4#I0Y%RP%{#+sqj_Q<@Z&UTlwf=}vHZ?L6d`L4f#tJ!>?FShKf%VjLiY&4y zUG(&$(xwfOFdmC07ZIj1g$ZX$GyW_G9*YV}3eFb|W#GXu&-X7jJq{;@ za|51TqfGy>Zoj!fqm(Kk0T7Pjr;Byo-VChBwzHJW#2*z2whX{eE*@z7^yRE@dBfvL z*+51cu6cqjF%y6CQ*$}{hRLDpb@L}G=#6xT(kC#kvOn!X2!j?jp(0TmkRq;O` z(+*<0tgjLWt&dfZ(*oRNuQLT)Ay!B>vUin zYO68cF6F`|o^{85)xvZNf!g#;P?^OW%CWKmYLEfLB&i-lq6`DqBgawhN4xU+43qx) z3~t_bYEfwp<7ERskoL3IH6of(l*l5uwT5!lqc(<;M=I51a|D3AY1N>YxneocD6yr( zSMHwU_x5n>=QG0YLils@1RPVz&QWy&gw1;V7e?HkPY7O=aQh9ASTK-lOJ?ZP_FQG% zkCOWi_-WtI_zhIy8{+%08$6ZS->SrRtRm^9rjYnlTHs{)bk)Z`G>SJzIJEMk_WmQI z)6z;-)Y@aChNS0)1Cw3KMxMSQU}l*tvDgtAqp?K+crq$T&*I_KaipKN4pRk|?)Zg^CZUcQ!e1^8#w z1O|_^9fanQ6a*^>3%UZ-DmB4eR^*^H=D0^_;fk8ToK}mjAm$$hfw=*OmWBd-2w(df z$&YzLIghSsY&_p-8qiHv=+bE!yt~X5qRSY| z9C$}IXwAq>67|x~g3j%$l0$mWmyQg=OiSRCZ9q$=Lk+`UN&G6b#Gq-@U`f?wjU@6N@K32C9nnANvJTA5 z6Zu9r6#Q(2fCvo9D|tG%<4B>U6SLLg`5T5 zYG!ezeB@%egF(a>(F4u!58J1^!UDnESdI_ z_eCnN$n>~1#>-!|l}#m?qa<(Ci(z#u_^1zeR8bkLCWlKZLAQWr)LM4=z=w(1O?Bd| ziuCrB@y)+%Tt?S_@NF8}UQL9FF8fdsn1`CuxmDDXI&M;vVDMuGYB8M-$o3n!X=5)+ z9#3i(Gy!$yPzVevWfSm?YOcm_&nY-J2tzaP-dQF7dyHs$CE?b{Brf=%5%mq)x1RKG z++SNY35D$-)JLyJ?m3^QynB$(h@4jI7FB``0-JjpUW>D${bECvC{q)zJc^KzaD(d`i;;UZR9k?rOxY8nj$PCl znX--8+2T!HM04K$u^GIHzWmU#D~Z z{x6gUsQvd+7Jb#CpcdH#=5uV1+9)yfZm`@NP|Vxb zeZY4_pw2RiHq*kVgFs%s=oe7xHs}pXp3MzWOwl%>z~=UqIHti0pc(Bx#7fzw7pY?6 zH$GLvo8GLl1OY1#0tFMI7tm#YLq!MI_c21TfpG>KMvC{*?lzxPmRR&LnFCC`LR{jc zhLt9joG+i=ER8&)vSC!k0PZj(wADF|j3*du4zb=0E>eAtKHgP$?gooeTXHvj?q(UG zwlv|8hUr0e8xJQMV$i=PwWY(5H-kN2e-Sl@R#5J`i6sd^>=|stHeL;W7j0HCiLDa3 z`uz000!LzU&Knc_y>bmc-SC%rj8^AJn@|kbn6I93yM-u4v?m zkKALamSXWVHcQ}`f-!tf%vz-uZ}+>4#^yjyRzHRvsz80g%<_?A5zYp3=XW^dU@Z;n zL`nO8Ac?Rw%>=u(SrblRrI2QXDgR-3XeApK%fTd$^b%eHvt`+$N0Sf zf}w)>z749!CQ0V;zkRWwr}CVClD>r(CFe=a$RjVXp3WrghXq_aFaB-Kyx&H-RnqPc z#9H^$Tj*aUWUg}ECS?UlRzouJaYxcHu|i;zVNplo{#b`sHbU02<>pDMO7k_eYpurZ zAdF1402sVV48Fg@n^y@Q76CJ8&Kvf@g{B0Gao_Z*ZN4w2z3$V#1QDxVvQkpqvpd*4 zxz{Jqo`Eb7%pfb0Mdfv7AnV_q5}vBgAge5|)&`FpXCR-7$8{?ID!bVm+_A6FKJA0E zpUC21J?)e1Y9hc^1%#tG1@_FvJ|~Q7Wdu%36T>NA})kM zRLcss!iO!Iw^UjdqeG{;*0P=jTLHkR-r(t-pxAYciU$5e#cGi zIUfY!sZ?6LRgr|ktNmXch9dVA4rch%*Ny9B4Ekeh(MFnG-lX1Eplw$4!dfASHKz8; zA;PCR^r@@t;#Mi(x@8|Knq=nzc=3Wu%%OlDRf{Sp*P%BmAt z7b}ea`A4u-KF6=yyhp)S7km-x#(O~gx4e1WYGL$OU(z?sL6_A0Y?@&Uhvl(Kk-uSF z6tDVxg-dqP@7|8EgyH9H{MkTp1v0}m6*p^QmenPB)z>C0f8lDRc!9CKzTgw~ zYBAwSy@OX1j6p>4)2$FM_<~CM=#H5WCey7v9JB9kP))yKENAyoazFE|q}cT?7|~Mo zD~hQY8kqX7+OfN^6EY0Zb%hH?F(^#}8FRW-etPO1@4kDFd$kD8^S(BFrE}L5yX?DQ zzKq{sK3eKNm*2BWZSv=?cEn>4Kdiis$_umLO4|2fq8Z;#DfaIk;3Rkmh%BA%LtYepSzker?gPA( z00CKJ;tsDH=f7)>Bi!;>+J%mad_0AnXwy8v>&6DHKuYp|T~i1%`;M@p``&Rz_lcdc z-k~NOwjd#>X%;iU+tY?iK_VT#}&T4)NV-d}Aw5 z{YE-*AZg7lZ>i!Q5h{EPfKkjn1h@Wrc)Z|v4A^*6anD>m1>Y#KUwrW9d3g+}PRcq2 z%B4QsY%1I`s$jxzYc;crp!+jR_+z+jhF;`%S&fLR!sLl4qK+bTV+K@e_rZ1)@R`ERw zJK`_wneXTDd!XXoM0~xbm_(Xk$ zIvPF&zwSB}i`wewTv>Yye*V2MSTMt8fT3`>luu*#EPK_{<;eX$(N#D*$gr-(QL5|}moDoidm4@=_1!kYaVHCBR& zrMA&qez$aIk_a93c0RUptiZ+IGUWy?+Ct7BJ)qM#eyqpliDu--sSf>T{z0i|KARe0 z>rkIRdcEAZg($ysDVP+yDIsS5#Vss~`RdK_BjWq3*gBOb5o9LO=c^|NlaJ{=m)^=s zJ$oLPA;7Xl@PZZhF~*d8gv7F$Oage;$h9EAXV^~_KT6~7p}$dIqFdDwh5ChQt(glk z&z|B)FSLM|$Np(cscE`jh5P@Qdh58To-b}(Ktw>mqDw@S5RjHtKtMn`msnUrnk7V7 zx*xEtp5O0}*_}Ig=FB-~&N=hGHIproR_tXH zLTjwbj4ya1^w{(o-K2C_|UF?_H)<$rRoE%K&qg=jXfHdh`R9 zz{7Xd(BA*2#d^pR^l6q013mj5>V>f2Z65fyx(R=p{a5U7`pg8;^p6xNG+5!^l(gNb zejl4U1TVF4sN2$*yxQKa9vNJtFj>&Za+{i0kN1czeYN4%Y@FvU;m2Os_U2aZA)|W; z@41YUo~hY0wP0aeyt6wk-?^jWmD9s{?TB;q12{< zLX4U#*LiH^x0jIs2+}6w# z(YEgz>kaPbQ(F*56zq-n$p3{&UJpiT0f{Z5ZTP^!H?~@Pr5sDSBFrvaa)$jGcZrxd zIc*Kf+8<&Jd$~|PdGBlm%zGxm8qv0g%iZy2WN?&zRZ1+3q=NtBX=mJd=zOF%ywO6y zTc<1Jt;q?jznRyj>*0FPM*oXh;Vg*~qHWgLc?M0RMYa41%q8@{7LaFOiG}eb@HV?} z;8^J|3>C7McJbimMW^d(%xrK{z1@P_mYrlrQ|Y4l_2AQcdVixSq8jHFZv+eZ`;4Cd z>CW3p)24gZW+u#gwvzE;p&aY`!c!o>F;Mot&!vU5M2mEs|$Nu~ssZ6uu=x0k+7Jc{9&hy?05i#m$Ps?zZe6mbn znbAHDdv(3#JPS7(gSI)klAx9;YAt6+ddY?IwD99`D!mIB58vfGhJN~Q#+PPSW5z#5 zhqORGgv?&Q^#te6NJ5m*CRA7Ed?F=EMBin?qYHqwSJrx=`k7a~re_|+|4&II)P@C5yLV{lv z=W08Am&V}bF3-jgzv9YH+Aj7Q&V#SD%={&^Cmwyxai;*DR|f}eV&~<{@3fum$y3jP zE)S^%rPqurYM*BOG_@yIX*IPDcMvc?%a~#bL{7Dd^tQ~UU{mq4UOKtJ)3vsb9R#&ApUl1ILqj(@X$djM&*g2&9h4v~GEai^{3Qd^W_}eV&j;%X zcq%-Ni{HH+lS9n?dGD}guDEYIGG;KV+9`g}q-HH?ZEG}J)_yWsJF{9_zfUVE=5*Z)4T>XVo85iaw*1Q1D)V&ZVK^)EuFOK(jr3K= z%Flv=tJ)K|a^mEA@8jZ*m6W0gm!-PQzDYZ-lxN@5`pE1TR z!LZkO?kNo&|Bo?c{->YdM+FOp)%NqT|P zTJON#XsV(^u%$;l=*x!`_4=3epLxzV!ba3@5L_abRrS-`MSp(6T**IZ9_ED0;aFNu zMdqLyerj10*`+3pNTG+Z(oMUjwkP|^KYvS!Y%tRp7iGvk-qA`uv=7EsK(z_uM(RDy zit&{&g788$gRM`T3No6o9k%bh1CZhU{==ZPBGP@JDyY_OxZf2rqE3Y^UDeJ^lb|M& zbH^11B>Tn~F(z@m9cY^`KTz|}N;!|zdjZ}sWwO?i668C#Y4@>lY5Nw`yUC%fN}rkP znKrVHJ_L6b?8GMq=G^QQSOt$J{wS`=rS*N|s^0uw&0$rVVHkt%SQTgQl%_sgAf7Vq zVl-cudv%irmrLT_wP-GDIyxTT4&#k6J=TAh!()VC4ews}kWwG1C@#%1jGq)E}u`%+svIj-i@?3W1{OJRx8WQ-AO*Nk7r{p-?B-;T#7^|HqU$R z9|S$}m6M@*%^uk-*VOjYkQYx>;XXWf7^t)flmqV{RAvanT1S7Sl3xV%%K&QAJ7Q}3 zHg6XFdi%m8689wAH44A`(f;il26SDJ3iv* z$?}vS{)2|2?MmWQ*XQS^E^}Y}=Q%PTL73=3b&Cu+_VXNcNs8T!RlVSoVSi_Di=+(^ z5dob4A2&_&_m%k1zkf$P`+8;t`=j4Y`=VO!g>5`yYnID;nj>1@!qh|l`cj72^o#{w zeQk<>`@3(EZYo50vLlU&t<4q`^Jj{0mGa_DnfScCB{^kW%Z87y+>TXQN|`ZB`L!F> zQPx_qv{ox6>6U3CE8|wwgm*|ETpIV7XQk^O6C3fEsdw+rTvC1Zjh{fflp*;`@7PSU zg0oZ5?URcTzqyJwmtEk*=*4H%8|^;JY_VQaHKVQw5q@yeRo8sniougp z7f-Jla$AT`RFY?ZDo&`C-i}9csO7w?+i-4=Xix^l}no2kX| z;b{Gub8K3iwGzE-beQwxB){Z=e?L>zt5<=`AJ1f^dOZtUM1pfh#Ea(V9aZ{tgW3XV zxVhv$)}Bov;}-f+SXS!Q<+tgjBbH zkE15@v|{7S)*2sKgq0AEzSy*H1Zj!#Js*8DqU*va?9{?hTgN`XZXjdDPP!LErs;*i_Y)qhen~alA;Ob4{^EY3Tt~ z40HMNOdxr!Zv27C{7rnu{y@3Oi@afJmwcHpt1Z?=^*=LD=~Kc7tF+v9lrur@FYv6d z?JjRDC5}o>HABX0xQ=%sMR?xSXdz9fZV_F~Prh^{2!#E&atQe@JI9%CCuBhr-WUckO6PEk4giDczwrIT;4`}zG06OlX{P7%QF|xz zYj{Y~%o#bO(XSzU@uHVk*yNt7D^Htw-%xb>(d@15PIu$nCsACAVQDDyrtY09tdVg| zL366tC~4U{w_jyEf3v<;GM~4~8aemV9AcxiG<5&EHx-_W7Io@h;FFiG7_I)YePA&p zN5u1UDvJD>_ze_=U2lY>$9jErqgB?B9c`8z>)ARRD28A-Mmu(8c>fLO+abi7;HUNP zpH*v8$+M0((@7qH7?RbK?^|tZ<=MuNBiTz|7^Zp_iG2@7y~93^nyq$cJU?sjjIQhevn{9DfsRhEWD(Vzk>)MIs6REwzVA)Kg! zCmYK4PkeJ|9sMY`^;&3tWEiCi(Wo#c-!?kSv9~bIy~eqEQDbZ}!~Jk+D+u!~;peb6 z6-t`qv@hTG`H^bjOB_{y6Xih)~|t@;?sz4Od60* zm^LTf?Ie!I^v{R-8zXrhiK@NzeEqLw;Pww?SnedHx`S?43~E4>`N*e?e)Sb_E=`4H zB&z-*=9gQ_u_SSn1MQ4OMSu;EOFKt-5>o{q_L*5EzZkJb(Iw)_rLv%SP+G#Fj+OF= zXir*G;Qj7bkj|B|W!{7J{V+;^ao3G-O@MKJUvC->ntLvc8sdJ=_Iblm)3?gM9r(1M zRP(`l@dmT9A+YX5QMxWYN zl>wDFn$ap{%W$4h>6VZ`C6Jw0-P(O8hQlw>@=(X|{V=~z_67|6e%KmCsZ7_>_XMJx z6*;v7ELOFj@$nT<@DkE_uEwb&mcUW&yDC#i;j!wzxX|FSbgC7h@aqu#kf#kq;9y$}wFdl_Sn~ zD2N^b~5sJ57DOlXn<(bFydXQcn#aW z_drJ`)%1_DiBE}u$Ca`cPG*C6jH_=xTODzy>RQNVB}!$E*B=A?2n>K3UtTeYA8-Dn zJc;NJx@Gk|u4w&AF$dL7wZ(?NepRrkjxslnIrzrUj0IYi1<##Nl*NNSZ&F!A@tMh^ z(c&HYft10~ZyRml-q=GfU$<_vrM!(t_e{B;Kg@^=9OvT;rdNJs+&>grfW1!QP~nGD z^zgK0vc$Yz?|3TlmDW-sf4#wh#eLgMA~r%?2niDM>CHKg3c_TPiV92oKm~-$1Q!US z(E8>yK1ODU|2Q$C!u)NMSK2Y{j0CK zPVB#|avHrP0~0YJWh>e@?K{sE4Nzo>FTjGIRWYyE*aVx=2~Js!w7v&{FUuZnTrOVX zNMprHIGp-({YoUloysLVHoxNfN+Th6ifh%xiVQ2C{zX$-ozT>eQ);kxT5HZPg_K4* zi4`4Zl53!(!UiB;7Le*+uYLG4Upr?O6?O4th`!gH}F&u%kox`QIjM~7Xv{g zLC@plw+{t%gD$DAL$=y?*M~jru8n3bSoG?l%~3 z_WCJSO0(^9n%_=M^to8q-U>el*n6z({1wFcJ_VBFn(%igV9hw>u^I`Y1r>sAt-4}J ze0&XgTuW+5jJ*bI$;E6)hqW`_=B755G03z6n0SvhulnY+D{F}{x^BFELRK-wX!vdO ztId0CYZr+j9ZgRKAWZw_S9zdi=M6+8%+6RQS)*dg^?@Y@br69y!caUChY? zSXqnZuz|q(#t8Q9m;urGT@esBVP%nt0^U9A_r$TXB|`?L6kMeoRM|7U`Id$Tbp72? zo2I7oPiq->p*>|N9J1{AEwdr9oy7P&RHT7vsvrzG<;G)!4XV3`IBp_0!O+p!U}Z^7 zz%qCH%A6!5ON~m(j0^D@v( z=m{yKY@h*K>|Zv%WGV3*w_oQ_XDk7wcKT1(al~@xZyLwAN%Kqedv#(f7qj2GJL|pK zb7}$awkSOyK`RGwwqy4r`5KrVB+A4gfl7?l*T9J~Vp*T^hR2ErEssvY)Otzzq=o`n zsx!!kq2$Q8w57ZW-=jk^W0zsw>j(ZH>mqF4=z*mDy{r*xzE@kb z`HCTi{&e#HOa{VEGhsa-sM(k0h$)Nxg{G8{2YNJ2iK+6>;0j72LE+4WB#mN`;f4rH zjUpDqYZVY{dTkgPJ_M_XVm34#V*lYp-WV5Wpnd&^6Ya;2-29ZhbtASWE>X%01yK4N_?TfH|FgqZ#rjBUI%Ebmrl$5pH$pw0U zj5PdkX8bhM^LEYDGZM(QK1B@#+xgQq2bYWDh)Fjb)b9Ll0B zoI}mdT!u-k-0)!nacke1s=T%&Vj0U{EhLyP<%=1l-E(S+|Aw8D|F730iq0BM<<}bR zSXps^b1C7XMH?wGboRT1RA6PA`%CLF&+zJmxIh6K%^9GSGyAsKP>IAii)C$W1$c*U1wie;Ka9o z-f!q~=SqoRy$ufRuU&ziBlRh#{$9|L;JY zx%LQAX3xVo)3nY|wfQy8#Kah20Qf1mU2Dm#A-5D)_hpwn%!L1MWG4whv2zcBc( z5)&>=Pm8U3p}c$gAxw)=z|?kJ9fRkQ6Y8w!nf^!pE$hr&h0$h^w)8O00UVl;)0A z;^r!|Yn?5a^j~3%;%i8Ptqa3;GnGJ+NYrOMkXCx(t z_wf@~YCl(B!HNp07+oPV5CCV+DQmvXQa!rw?B`AX;vrUL@JyqR_`8G6z$Rf;gycd$>-cDYCA2L9D}Y>Fzn3A=&ik0ivyzd zXnp?om?(#L`~{5`O4S=J!zBF_7;_INBIv4?%*5^DRI-;ERYf3*V#(d>VNN+~SFm*E zvXCmNFu+8wVJ{-C7y$ED!4xOwr_F_obOSn6e*s{`x<{4)Iv7YE@2{h1Qe%wN9pn_A z41qh==1Mo+Tkk6a00Y7h{!0LNG%zhp*Y_8Bo~c^^J1jPlBZx~g}{Wb z4}^+R3hT}>zXf*CgB?K#e2T}PPPFL1Q{#OAo%DY*Gf-zK7ApE)(!;6k{?j8%vwC$q z6t#D^IJ&Ju{aW#HT!=pLcPP+%_6$$8z$5Q&KX25;n-z_kKUs3z<=Q*c0sdk9 z>%jl0W6oLbsA6|aaV+gkZ9t{6E-%9Z09BkG4(0Y0x7d)3Ns9j-HRt?$sAI7@%E>g^ zIT4$#4H!ef6l>=GKS~?lKkpw>bi#-Y={ICuwz~tS9>G>e%^xp0am}^MMRR}vae4>@(v9yv9&R_d|JGP|a2n5?kZjH~op39APQ_FFhz%{XKGpsx z_*e)2<$P_&S6PF-`fsa*e=Xe;%Rx&8Ntbp-BVe67fY>TcmZ-SnM1*}Mhbn~;5QGBgih@W^7%G;ASV_0G3w$3i$ zxj5#F&(*Q3sO3@R`L5!uqHt|i-nX(@Cm-XAt;9gFs5gb9cZXTCIAR@_wv~TxFj?>j zl|}I^ZYX)zMK<5dN%dRb(G~0}UUKmqkdY)mt&!dRxn!aAc6qdVY)J6z>b~a|UoGO< zvpd?qK#f&NYke$PN^%XYL?Scl?s!$Y!A=!6)-T#LKyUb zPaYeqjAo3P?40pGzL^v>d zM}ECDPfPP_7-2-z9Ww?t(1D>c{XPBoOIjY>9jiPt-Su_*;miwEJ=j#|rynyHygT-W zLX_mFbk|Deeh|IRDE$Y5qkzJB4Lp?KC`@^NSej;#0~^!MA$-8;x9Z6Wnm5lJA?h}Y zTOjMjEe{Sy&2JMnJ`ax1gkR{(ZSzzIO*s!~XCm$%je03<7HbE-+&rZ$$%$K1p6O-C ziY7RgGXT}C$7MA&w`k4}#Yj#VZp9EBr4-~`+O^IP`516_ICX&UF++o6J4ExGlxg0cj4oqWvjDq%xWW$4_w2ew}9GQpdBtgi6FB`qRo3Q$fBeMG=ifD~U& zZJ3UBCe5Ownm<9Bx<*(0`bvzvEIYl7Z5HG*JQG-byaTK6fsj;Bz0aPjt2vQ8(Hcxvk z$uP3PUG}j>p9ZJCU6U5!H5EIgHO=$_Xa1*9v3x{Z?W%!JBmSvNt%V&A}wr@M6!cjo8L9cXm)h z7(1vFQb13qDU|^4r$-;m3Obyh$R%ID7hHVl{C^j~?w`LLy(GxBoy}hk248Ha1)u(D zm%G^E4Eig$!Eza`Obxg>Y_cdhNR`0`jT82=?ynvhC9C@^G4P!J0$LZjmBy=r|gAtE+Q2mT*{XpAa>hA}eIx*y)8F zlnV~HJVjRxayDO{oy?z4pTxXuc6Do|PR+@@$|GBND!tAHD zRf^ejhTg+Yr!sYd{*E!Mlg&(K37fJGFc&>Ok}i>> zaq+3m_PaE*#h;ojrQzma)0l4Dc(>0AdK8_c;Ovv;;X`sc+pM&*OJFtiN4K>ts;wP- ze?GVGfsAe=s7-sDZNz!+6}=f>s}?>_F#?^b$Chm zXjnS%oV(_~=iITa)U&{D=m(;gKWrIx`z;!Oa=SMb?EbwUK!881n{XfG{1Q=oLUl;F!8yOXj|^qf+EB3Q|F#zeMVA*ZMz%z;S}C07 zGZu1S?JAAbIjxyiTv7_&PQn536|8cLMMD`*RPI=n;iO#jnHC z;?RkPoq7B3wZG9dqeKCF zeB~D=ZGAH%{GiszhzPbAg~S}{`~Pj|SQ_GIgy~blgF5d79e;a<|8n;>o_JVOA0Rp> z5} z=J4U)z?qf2Wudm6ZrZ#)FCqQ&izZpo>D%U3GRL3cGU2oQR&LSbLjCciRd;z#$|k6% zkKaSnT(%w8Uw>#cUgFNLiEz7dXnoE<45j~$R;RTUq8VY(md`SZZuM}s6;jcTQ`}u? zs#(+0{X?hvX~{KtmraDEt#eU-wMzVz+wvfSW!lJudCli#S^PqobBDYCT*H?2y;9%v z#s~R3>Y2T_OMlJyuD$hKc}3+nyjR4LAYwN^nHmNbMz(0I(#2?gso@wjYA-s5aw-K< zTDNgH`3*`v2$)?u=G5aq5{DxywvsrGOTBPqQ{$+kosD~O#*d3RuAA4Y5cV}z6E z`t#TE*)mVMY4$$!jky)8zh$`kmMPu`Z}8EUi;Dnn#XZ~&t>W)x&@Xdjw{^Z>3f5~f zu9!}&afw&ye3sJA6m6MggqofcyS_!Z-z+IO(YUc>Zjx$LN<41igW|R|eEGa=pUM!* zs#WiqrL8>K>BY8AmYd$b-s`jFeaF@zvu+k{GRO1d>GY#n1Xtp`2>r54UATx z^4>cPY(X+;A^W6C!I}=AemK|=Q|VX=EHe@+fhmZI90_NTVs0V4o;NK1!%*$vcx&Kj zWb5P00$gkxuP)W$!)#n5ugZ7*bP%HOQSl@_6yZ<0!Ol)>2F24auQ`96SQ_x;8GBYb z&fsoJ46`j4_#+gY*3|LdVlZEQ>kw)7Yi?1z*M}XhWQgfmGHi2o$k*#o5OtN2P}vf% zd4@hP-j^I;h&64>Df1bk&u_&A6H_Il81=Wwa!-8^|)azc;?ndR%l5JYK$xr>BlsoE$fC zKG^{22hnqGtNWeQ-kT0=O#FS`(4JU2cGB$C=9068ozpjpqQTBpTEU3RP}flJ=uR}d zcM@k0)3eIfbDUT6b`pjZucJRm<~>pqhgBP$GF%3;wzdkloFwln@f2e^HgKnwuB0M9wRg;X~hX%$Aqa2-QC1gPWen?W2>-)L4 zHMwkn=)>CBDz#45+`sBFlm64PlNkpEPl6;F5t0HuEVZp|7EM0>C2#OnUD>J4nT2`_ z*?(AkzfYjCE>$w6J$kcAwv&QEBer!eRkOUd3p=V4TMX2*?HYofMW)=S%xSbKlk#lR`NR`YneB$>%2ldV&ex(iI@%I80>gGjBd zedv!;>7l9X9Tno}x&P5``N$=0OG^LZkxLrVWw^DLdwxlA%&S`wGmH0d7`#6|h#Fj; z>3uqO)U4f9H9IdzyS9`*;oYtKMjA3S^rujxZSJI6Y4YsygMXU2`r9ovkLyF8>SOT-No^lnS(ZJvVbdyrez695(an>pBwTi1$3vnL#J!;_WFomGcuaIT@wO zM}PKf;%;csvSIn~I5Q)2RHyLEG_@?b`p zC{V~7bab-ziEMCb`GDV(u5zxX3*{(^+I)9!Sa{ppMxHcf%H2H>FTscXNs(4CsNyYr8F z(yBNd)7Z=h!OGdhzxX_`*+J5zZ;c+z^{pp|pmb&qTe+W0@#iMSTAH+^lU8Bta_*d} z#~Yoik5q`x9<2+z)N6Yf7Ogy|BMT+gRK`g+wKT5g=gS@%;Yh#X$wN%19yy{l4vm&L zdtd@TRg1nf*WOG53xlkUTc><|1x3DqEyBYNWUgM}rKtj)yfs9*uY3BfAR(Pq21xIX zP_TUsRmCQ3J#*@O%n~cgz*xaCaSag^TXLkVoa;0xP9hsw{JqTfi@Jrc*5h!n#jscr zCVPS$k?JnMz336e01y)GNVenH6+IWv*|k5@Fr1x^0o#A01&9{Cy#P8=hQfV06a92B zK^$zUPZ79gW0s5QK%?wlUayYoxIHRIxCJWpv`ApQqu*Ga`DmFkG(HgVli4*>5 z0*??NDZ_0AgXY`~1g)7XQy=}1(80tYsyS7#qN(pJTO@Cm5Ja_XzXkgt@;6uV2K`%p z(3OC!6Uo39%4?KyWh#r5UhhOX{xz31^X@Umek^T#>v|8cU5vPLAT#FK-x&RYk~F+V^7p%uV=cpU zNN-z~f`NKM$e3sxtv(yjGJH&wcEEv64>s%$dhf0_%gS2V>U;w1J~pMhCJrhb&{4@9 z3+!Pm#O-$Uml}DK=(mX(Y6LRVFkaEOfC)h%o}5Qs8ne?k^n2?;f^RiuS!whwI_+Hv z(of)S&w+1h0{7mRv*~-=f{Iezz4%wZG!Ei);5j2Y0EY&F%&cytr8~~o%H}8di&I@h zw@9=EmmD0(avQZLU%*e8Xv@mYXxgtBoG6oFMQLICx^e!SfsWlx53ZFFA8^!c#8!qm zCA_O9xkG_X>vkY{0T9)hwRQT^sJ$L)0?K#aqz+>Wzf!yt+ga+L@9xCxO?LM;payH< zE{6aLpqAtRQaQ?fQ??K|U-w==r1Y6-{+MXWrIr-iTr-vzUO-l`bBCpHCstT3@O-DH zix22TBWqzRq}29Hz<1aeh~%x=(^e0%FN7W}$vcnD)>lhofoe-*jDrW*29Hgl!vB&J zGo3}_v*I270gkRJDMPJ5TYPj71vW7KTABaSs+D)O1{rYBM3JPPAG$fWzChW&nhT6F z@S)JAcc)qz(b=LH)+nxA=Fg4(r89Ot+%B$cp4rr_sfHP`6WgSsu95$JbMC|5$=gRU zwbIBPJrHtd>YEi{sALk6SZF#ef|z{WbCy*Axl;|539&8`H=boZ5w@@(H=8Yf`C?jJ z(rk8Rv%XP^1-%oS6gelPY@Z@kzH_IaLr?S$bNNmzV*b{f)F2C7gp`Yi`T2m|0({h= zxv_j}K_s(UwiEFz{{Y~#2hl_&4OH$#_%CgJ)dy-2vW6GWi-vvRZZpqQJ!OmcHw7*b zN`qt-LH5XRjl!etuF47&xR&8~9ZzL4TuY_ECh(em&_VjrO_S-K1ymR0&5?YGfyu$D zbQzMFHfb4B36UU^J0o9)kc32q8+3@=8&C5V#m0YJ_PZ&`$6l~mon>b6gHSc)XPA9& zd?j7GvYRSA%M2e;s~{kQSNVh=i%_(MelZf1WC`&~!8Dr(KBxN{*+Uqc8W2zYWRk-& zR43ep)OVsyhl|kSrDeyvbnT$eFI~hSROy%>FE}-?ukzy)T}QSfPBfHK;HpMnVv9_} zdI$zFHtmi&CTT~SzMM4p=lu9TL_Zeu&_0MrMcu>r+&+TARe95j7j~%6&Wh8$k$r@_ zbB?Z0Y;kM!pL0Q}$tF1v&ANX59;Ehgqh!9GT_BZ8oqN0}zG`kJ)!LjxlhFp3F8IF$ ztre;k>Rbe2n*{l)4MUnS?42P!jT6^OopZFW^1}oXm|MCjv*@Y;GpG$}Q^V~L%hL|c zWQvm2yu8{>EeYKQbnf7@jbrq-LZr;mU-XwO@c#S#M)Do4WLUV3E zh_?N5_s`$ZY8_*N8xf7R^ny)42tyPyQtqt+$nw3&?I>M-qm& z>m6JqmBcPEPgTzf8Z$jCgemv|d0Z60bZ}6qV1-Ja%J%*I=q^qr{mEUDll6rotZdXC z(NdHbdGM6xE{>|#;`xvBN$b!bpeEY8IJX#0D^y)+$SD2irXLVKbyKjr>|GqGUUZnG z%(odH++?NM>n!%`xABi}-^RZ-d+((x$b&PrlfL`HK1(qakE~_|GAZu{K#`>D$OCw*C+_t6kcqdd znLV_#0Lt}^bC(o^e?4R8kpgv?mC2z-ftL+{`wKfzhd{IFp{0+8s$Y*-t?xj*wHFm& zn2j-XX3-Gnz4r})R*J0dfa(W{8BYc1` z^k5!Mjt1fXN|sc|nX7z-AA+b*?IfWiAeJv`cn2wdRKCBC+E@4u zy1NiW6;GNyyV6&2A*N8t8n zbse&J6dX~5rzL3%Iu3!nkN+49#>*<;x8iR?e(k;Z3b*$x#AI7Jdmq1Wn&t5_TMBjvXW8J^P(?(KoCPqe( zHAKWnqgciWi1W4@-sjbIR6eVsLl)UNcMa}|Z0)lxz8c)s-07QT6_f999X_uf5Vn5G zJ7fi7-{GKWp_&2vH(78aqj3{&p2h*t8uvPKo+%U1RbCnNrB>DvT;N3$Z!`$cmhiQD zV2}*RAabh*F0N<6y#&^gbRCX-bY8psigsBjiY$2Zoi5}k&6{-i@y#w|b(+`^t$IWc zNPVV}foSessg$9?z8qZLZGqib4GsOZWXqPbGzO;g|lzl5F0 z99btI$T?iS`WgnG>uC3{p8$C?-mAr7=m(7t#Xe%3S4Lf?pdV085kj?wP>N^ZE0vft z*I6EeSadB8{-Icf#vOyfJ;>}}4V`LaDxOtzsh=V=Hd;H*KOO_dM=k0+M5qMSl#H(3 z>G8w>qm0E((eYQSVxK6uWMwMpm@?*nX)Lpfm?A(%QvBpB#Fud$CBS_PxinMzCPi0N z=t1MATQGOsfG}MY9=RphXt>9#nw!%h{BqpM0QySbq#_y(P;VUY^1#AnpBs#aqmydx z@aaJ5^6vPzcqf$M!}RJp|(&j88b$onk&MeplM2h8^OK6PIFZ-TZGuw;0~M3 z_$J9n{d|v33A)<*1w2cU-C(@&M~%ig_?!}Z^afgnU7UCUp9SN<R2}eED_-=od;xU+%j@Xs7OwgM?b~5^XV7)@f&aV3M)i$E{En)bN0#YouUPvy6%S$2puv-bX6T9LT7U81{xLIfY3Jwn!kOBgQ|_2dMp1g z*^|k;p{|V_`}54A>w>JE{qO@oTeJqFnYXgO*}*&AH_(ep$511lU+DTcZ-oxHeKY;| zFnLM+P7J!9RyZ;W<~M)S3=x6JN-X^C_sQO4OVH^9H9A`Ngj0qqj<j#5xSd|#1>ATG`L;shsqkw1%%?`zFAeIGOZ zKvXdP7@np+pgV}Uib2Ll-iPJnGFP?z2w=*ei@G*Vcj z1#V;lWO@ObNcqybfgXkbv1g0-!y^R&A+TTT2I%hi;kS~8Ow&YQ;2ZlJ==fd~S&*)) zAe%((D@3v>MOWSoSb$fN+a8Z47E`o=TB5>hoZv@x-`(KXs+qc6-Kf&MVt0C17(gsXB&^K(L z&zZ@^{dk4ROv*RWf;&8LLi6ciH4E*oj7CM#Y^SQTGHO`fj@thUc^RmfsV zAk9{bn~SB}3~cX7@%kEd@80Hq1I2#BR_=s;Yb^Lu%b=Z3*!&|O!*KbIu&GGvAI(M< z2%x`6^2pHEMy6j_g}(|GfzTr8>LSIYqGh1ko3}WDZN3Uwi4fCurt3%`h*a#v`~zi` zedI?^$!&01!#21M!?T9!9(Jzkfrw8gu$HDe9Z4M%eCnUs_UCN|I1?s=fAGc@D*Bky zy2T`uABMHrs~;|^GSobr;uOE0a^yR!IGM+)Xp8E&aJ0(*S|z0H(&Msg3HL^l@#FDt zz3KS3`SGtGC-v+(|IxQaCEHV@$Wk!3Q#V?6*5z%XF~96c{Bx^zqC8VDQzH?<9n`s4q>-pB;z7Z`xeAv0Q=p-zAsY2Puy?+q+0lt68uG3}0_ z0l8HJx1ly!Dq;5kzWWa)K;kcPYiI4)_Uvt)4@g_K$1FEr;ubx^JAAxi;e1t0kFV6i zkkuY9th3y%vi$QfW5oU{%d=^6+^ksRx5nO4avV>g@>GsU z2_)C!-v|g*0FbyF!~0t}6n+YaJa?+4Mh+s>>q=hUG!|%UAy)`%ZJel`RMg6B1wG?G z#HN?_BBEVP9zVXbj4eJBqPDy03qN5KDj!JxWQ2b;V<}&dTRu=5-rCrUJHnm{<(3<| zsKjS&6E*|xt|P#m>$fVP7VMhTfpCr;ppw7FxY3%6G`idnokU^d6$l?oAvn$YHq=&V zj2RusmoTB59PkbqdD}L&HX=}XM3X4g0>Gh1*p3p`1bze{8R8RA>a1y* zC3ziL4J<$iAeSE?i#1fmj+)0i_?NQ6A0W<~RKR!BM#kQfM#dDkbAJF~@JFNnZJz0B;rffINtmx5;uN=f|TJ&{aD< z;wkWl5k3D9a-&9wEzJmNqoRGFx%Z_YCGyDM@ti@H1B4e+88;DF!MWZF>1!0|x51t6 zeKG+i3KQ=J0AnGRMDZHe0gy!7g~a}@RyvIA14RKiiSsHyJ|I@d#5)C^f*F|G^`gIG zfSXOK?*Une+u$Y#0hcnr0$??+Q4=7#+h-kx4uCw~4S_Pf@I@iJ?btRE(5urt-1);* z_8P;_%lcO@%-yd*q7?*{ud_j#!iZ}TIOd_->mbssThO(XPeK@>J6#+1&0e7%HJk?} zN zWBtPXsAo(4Xr4Xc6!Zf4JNi*aMoz{XMm-pFFH2<)^j|@Tw}Go3UUl3oM)Na;m&}H1 zNFgOT7Y28y1yX509%!2d)sE72{+iB(5#p=!m7=UtM~RsNvT$L)Kj;#|46H?rK`!ha zn^o+u6=FC%EHs<8)L=Y!!M-(bbRhNs@Wr{)ke~W^zP$-ai{OcT_%M73MCbRyVU}6b zL1v>jr)-E8xQ3aIN2zw_R;RkNWCqXxx z-wBnlHBp%0lOpTjJZ(KYLFQY$YiPzSSmBOdZ!AW1($s0i5uSfWK!G@#yNTb5hoXcJP2&) zA;hA(k=4V1MO+K%16dq$R}U=StKNC*nGQE%Oaqu1*0`m(uINEud2PDpe^QN1+D*9ALmA;l7J*a}d1H$7odb_ph}8^mz+JvLsV) zNdSY<-a{role>U;M*g><^I0}eP`x&-Z^pjUm+A| z!muPDP+a!hy#+o2pr9Bb06l4bha1#Vp?i0u6<*2wLUGjt2=X_Cj~=>CJM!u~5Gnc4 zO_6Up;6?=k|6#>{coB#Vi=bE?0F9-Yt>wRX3$XPT=;y)s=|irD9scD+fN9{2dgwAC zwo(;+09AZDTPWTQpSsroblL!jm54_U3O4MF)Gq_hzuee6#4~=Y>uw@`U^NksewFqg zW$($x|Fu`?kG2&I$|q3+7*Iz8mWi$o{r^#NzWVCF6Tr3Xf1J$96srTM{9(gDJar-v z9lGHRl-)t^JCVe!S+Q4;*n3l2n{Qt4&+qa0{c&>6xvsNw&VAqKdS2%`$9u;9E6=>njxs(R z5)PXF{3+_Y@(Q0X@ftsEyo6^u19BHJp0?dQkz%gT*#EmcdfXx$CvMx2@ZnNxM&!4XOH!;Fqjt+?*uAlGDPb&qSCO$jei#9jWO4_S_EV<^V zY{GZpBbytSpQ&HwEaAW}bg$v#&l4g~jg?-8G{Udfj>~-g;)?3R8qY<*XbFO!V{jAq zGYk5Zd?@?3c{a90H&x*%?pSPj5#(uv{cw?EYBzB9c^F?*yZilF+&H98ceM(%I$&!O z*|%9mYC!sP|2I^3arB^Q=B z;INK|ZyVj@Y#t9ic5pU1kkBQRaaNtTTcCGi<+$8TF5KHvbsx_=`}4imDm5WYcpTTb z2CVOC5qo4w)zL$TqKjHb3LnZYLqBBKG7EubZ*Tq+3%{Ify>bB&Iz7?7*d<7OI9~s7 zu}aa&*~{ySjcX`Ku%@w%RkH)Y`lfyux_UNGsoUPkfPwfQt+b_A{o`)+{qxMy*sKM%2 zHXhDYr9T^F z_v8t(8?J?p8@~suHfr~!pB<0(_}JJKH#ed%!LNC#myZ++@%wQG7-Bp zgt=zQbXfW*3?mhEm2o0#%|m`;EMpF^1&(wt-wH|F7{ZsY)UPW|tSZ*5DvcnAd>QML#;=!)<-bLGa)cdCtU7YEfHnt>%S<>NA6D)bMUE{m5HmCTbHR$L zWdEBaQhMF0f){@bW1D8W!(F2GH<`6Su^#&fs`3X7hWyc%-S>sYRf<)z*MxNV%-bh> z^;b`>o6>#O&Unus{rB$B)6NF{s1W`y`n>amJA8}&)l#|x)6%df=;pTvSD$XK<=sNF zw&z+_S2bF9RbA5vPxnPVtyEimi)4O)BOwce9VF5NYL|M!mDToaMV2mT@1*4kmn;>j zmqXtYvWPl#T$a2_MN!p$TgVl470s?!?(5^g&FaX}FTe<3gS}K~WXE?o%d}qLq_R1q z70f>4@2{pgo3SInr}^pvmK2%~bpdAWAkl_^sSVCZ_YvFgX7E^JBDD$FTzd!Klb`nK zx2bqGzvs6lA4j+w-=Oe-!0D~G@n^|4v> z(U~Nu(h1Bik-2}AIL}qc`Pg6)gz2NxImhZZj zvVD@e7}Yd*Tw4PAZreASIZ$8h#F6qyE3M+>z8&9ikP8;kKIXi%3=Y=8f0j;lo(w~a z_t9T>Zy=aDV?rj}8$2*UlMx!r@>RKe&`{}!pPapzpO)3%H{2W4Rd92vlckK)zQfJL z$~wOrObwXR2l(u`228lqa-%#EAbtOuemOP^{L}5PX9s%3P+dNU2a&5&^u7HCQwPIV)ufJ@|!6;9c8Y0pn9OZf3 zoVI=D_rclU8QkO1aA4xoe@(q~uYR`Qy#WL42OdrBI1C;A%k`C+p0)UOlot};fRP~g z9JK!lYVh2>*MZy@^>=m`J)T-+Y&mFO=0t;%dOq zkFA3W;!4770OP|~2Y_j+$?do7EoU}2UvC4@Pt98o%N;Z@HMwhOG-0y?mK}Q=B9G_1Q|;`j4D8<;$m~v|k^72G2M@U;x+FG)?15 zis{SOb}+syh!*url_YD*-4Y%)DEh?>_QUs{Ul?g5>VLtHS?L10TKo~0IlN{}Z|^ky z!0@EM;DUS2A%$o7c7g+iT^Oh(XuGOM5H%`Iv?47mS2$lvKxn&>!!wKfzdTMSP$VY0 zUJe;{nS45*+3$1W!($ijzbv_#X>`;>%noxhU!&posD<5`Y0U2R=cak*0#LM#TM{iS zi6V`kc36NA%of_q&Ar7#t?RabC_rb2n+_5LBCT2-&c?PXW!Nr%wnbs?D4D5qM*GI* z-cc&L1b(6+H)r}0D&e)k@4_#5BkBy>7nxp*{Ks`z8tmjX*X*+TMbxTQkNkzi5+tnT zVD-@8SUb7)l<4-ewm>u4qUc6)j(5VG+vUx2q zF+x<+6_R$-7?tdbf3{bY3e@KHOOll$n0#iEvV3O-EVhDl!(|{h4sR*V2JK;2gUrLY z9aGJ`X8ch*P1zm&v^T5Qid}qKXru4tGN!BTH5p||E*o~-QrOYDbR`w0%;^luw6{WLA`6O2;%`o$E!qFZbw7Q>w8Sd|vNP7F5N#%^%c#;O{|^@P z{TE6?EBCXtJ>n)Wl%80B{X43AJT2E@)*iiV$a&_>Um~%cb9B1(Vf~@jCeq+|x@|VO ztN2-Z2>(u_2XEc_wV4lPHzdJ`rkR;s7^sa$Ab;w@n9RyDsB!^*{JbmXO}()z;-!k+ z9{1U{g+iXRcK^jFwbb-WVa7&I{Y}~5%^uAmPjB)e(ljS}3WI3PzB0G%h`EJ?Fy8gN z;ukxuuW;ZC{w_e7UJaYEsa?$;cO3AS9w^u9Sl9Sg&IGS3ee{M2+=C!I-0>SC%C&yq zkl$FKJK{phwYLpx)*sS*bhNj?t5D2kXM3?t;E&J}x>S+>= zvr4odMSu9&Pb_B(F@c&KeShDboqZJhaVVboDr)7Q<;mrl5DDhV0d#%KC6Lz^H&!MU zLGL#bbFTJLQbTgo;>{4_O|B2M^x7<(sF>B{S2vk9mApRxVrm)beo8a78Jx&zeKaXO zwh|n+(gQ`n=<9#BYSpu#3Mgj3eIeH6i17C-LF=w7NDMtc;^qA+4tYKVJcKe&xb!pY zeladJ(}JqrI^lPkJTlsAjXbFZYS9@RN~}IJ*;@zq%}26*vo7cQv6bokZKox=34rS( ze+V3|Yx%PRuA9kxa@hYRq-Jop{N#HMk3b3!;+Lw{D`ABfmixcd=_gaygv4jRm`h~+ zx#u;P70IHjF#HT7j7s!-qG<0mm(NY`VBt#l+PKZYl7BxuN+#%y*W9kxyV)#*%es)1 zTZ$v2fp!o_fBq(T*IQSAYC@|Wtpg|t59ve-+Bk^ zGv_BvS%+@@*YXR*6?P5$YzswYeda3YRdiFqq5G}aZ5T=Rk(#`D#2-iqFKVQ5GX>BFg&Oww@i`H54$4+B{)ix+lH#bFGC z64?~DJbDDK*ZIBpGjQ`FEvkWEkj(YAo|Eh;Sa#QrM8T8JX6#EIzEnBP%*-v&J;rEeJ!S#9!-bg%!9va3t~*{lhS_)T zGBRD6(q$JIPS;0>@Y8%$XW{rLEEFbSZ5-y5ET+-?K#TQ(%*f?iuacf#0Xpek6~I%! z{^cK?8Xi|2^s!Iw-2nP2{Ho4fKrCmhKCI_qoZ2PVOY{D0KHXs;T?{)!A{`>jN>PIPX;EtUsZnk;< zYA7v9=rTwmVC&Y#I~hCIUx?~Ag9yogf^#>rGE8oN@oHP)XJ!0%E_Xv`PWuKb`dB4r znyMvRkIcAjz`)AWP!u6_JVTu^$q4GYkt&~t;3d8<)bEH2J+ZuZS>2z^*!VSfe>R=& z7h`nkrGsXC7w*cG(Ww6p>iJd(p|)FHafCq_(k?mI+xNZ#@hcm>_3>al`Pvlk>PL0- z(ns@XY?@IIvv3^{ndGnk@fguY=r+qcBV2h6f^cNpT3QLtafqb-+Sz3eHZN2B`3RE# z?BBp$@|(~r56jJ#!xL9Ez(3~YZwn;88{{I^$7YKklYMj*P&)~w6x6jVD0)$nZ7eJD%d`nBl^6SQSB-D`88ZbO7Mj?l zXY>>HTgnn`b_4>v{HXR@skd+wrbl>zZZ6M`(;?cbw03s7xfSX(R~slifhpd!uzU^$1pu`|os=9qrK=Gg0NN|h zUS1)Y-S+nSXIwkiHG*kK4RhR)K7!HR(SL%6227ejT>_po3JuyEon>1Y)~)`rC~FL8 zI5#aDwDLdui&r1_1AUv8T^iVPZydXJG4+xglVx@6(|;U&bS+zpnfQ#$>->E94@OUQ z7aFvDGs7eVKW^@PeiZh+&d)T50KzwlATG|Zi;c-=sHU@M&!>msV{siWmsSW}1tqT% z*X0hYE>D`)o%g9ViwXFeR3uPW9XhWQ6Nl-WPs3wTB!#Zz(;v}i>zWfv56LzFQ4-ae zyl0Z_oAd69!F2t6-%z5-k#5Qj=}Di__<*xR*~KfWAfKaEx4gE>*6sAOzw^s+&kk}w zw0Evd`q{Y+=I>*RH}HKG`+ci!pd(O*A}%kBQz_hYirIXUqh<~ECj=9`Yv zxS1qK;5cCuxt1mY4;dCQVIek;7c;DVatr5d;r;X>t!z|V>m2+pi62@ycJ#>@Lr>j4l4s=yd z9DZ6*AeoDkvNGjVk}&<8VWnj)m!s)^H1O)mz1G|(X+Lk(OXuWU zpT8dn?S@Rng!W{YifF9e%vx;5o(cUgj(he$ z!X!`m!1cd(tp{PP;ir4Il+B$bAEG^K(YfMpem>6Poo^(}>HI9SZhnH_EKkG&Wb_aD!^$+;(Q{*P)NXH8?4p@fKhIGC zoZ)gVHd(NUU6t&b9Vs^C8d)$N)H-&rvEUT&quO0x-YYD3`iqkur|1opSNhUlOY15E zr8p5slWueYEUWIDPeguyv*TU#XKkco#DrMPGMeU;(v=LfksQ^YrovSNVawk z^c&y$Y2L;U8-kCV8D6nVC_QyEH-qi9Bb7+<6Emq{A}SC4w{Wn-5vcIyFsi1`zYcwD zcJ>r@+zG$+6KS|^^r~{zVGTb~%!YZ}NJ>PGAQE*r__yE^BwTgk!}z7DW>FFvqhz8) zF5(#I-BzmZtr5N5eY{qNv*=bjmmIrNcJ2;AcS)I}=k>(9q^CE%$9vK91<(~AT6hKj zVx(gBjNHRW_j3q!m`)T}LMiXwrG|girP+K2q9jlqT}F<7cUsKQ?K3NbMvvB1 zJD)#Eck0`kBp8BkH(J1UpJiTX7@I+U?>b1@)24Tt6N!g@gOxR}+`9%DBMp4d`c_OU z$xeJC(woGo`oB#pJ`)PpM(TR!xB6D((l%}6#!)P-=F|SZE{PiOvh3o>UI}o$npZta zr%d86Gn0>!>c+6Nu(fHx+l=*jqlo2L&!o{CY%09) zH|AO1ce2;bT=LuHn$*&h8P};Ii2q_GiPQ3f|@tps*W<+HPnzi zRRT)7X;jYuy@z{rxK%kIX1nfc5^rx;uZ&*4U7v9?KpwWa1wNCh0g9y{8=bFgGeec5+ZS1} z!_a!hKO>RH^;aCB>$Tz7H^Nuj*J^rkNpLSU_VL~|bb{@(j6P-b+#8q&1Ug|;=M>8| z;=<*&q96h5FkeOMHw8eRXI1h!7=7=7n2r~fc`CMyHT?3%!)Y6Q3(4qFye++CJ)?2` z#FEi!+^+tlvCg=hh=LKu=vw(xf@Jm4VNo7yNyPB=7BEoR_B+PDr?^h^sN=dSusBgdeZu zhjI5&SB^#XFpLgnmL?GEdvt9lN&M+;Xg2L1ajPgiW~~VaOf*2R>c1dE(N+BUtR-M* z<|^OGIemwba4pCaQVbLUuaZL|i_xcsIm8NClwSO1>|3%TaxcCQVr+0?HNST55F?rN zG$X$1xrusD6>Fi~^lA4!)6e44IaA{>RdDrkr}wtnVwpbGxYyb|TKWnIpxamKqu4f$ zLmiZ!aeA*U`0?wutiUq z@Ag#Jcwx!U(WNq1oJ`bc4is0V9Z0WzzkeeLhI&M<-w055_q*Ega0^5)FN)LI4J=MI$1DtfbVHe}o#@z?kgr14yy8{D zDhz0ihe>~2Q)-0?gSyTkCk9uH zsD<(!9X3}Wf3f5IEoGF|kl@sRR4?mnJvLXNVf5!vDy$C!yCyBRvi`?S_AT#Yoln;w zo1-J7v5=WA8^_yMAsnK)%&~asi zhg@gDBPLYbAHw+OrHGjX^RPl#Rp3mz>D!uinr6i-Up)nD?cIV!2ko>5FQEe8yQzM0 ziGWq?Qe6iLe+kui{@JBUg>OC`i4=LfRruGXnB~zH_Nh<8^#k%mMNw<*GP$9=wKl2u zG2ENg%}wXCi${vb`dU-%@}S^b3y7?UP7440T7OhzR+NiWk|o(~cjW0~RFuGYIn~$V z1h^{e<1N|m#Hs5bb-(UH>h_1P(f=0N=WURb)Vj;HJ^%(PzJ)FWa>_H-7~iM{I+~6) z$2;wc!tZq6k=>~5Xxr<1V|i&jz7pn?UE*^e7Ad=w&4YXJ^lkOzWri4KmqirNHi+{; zPIL71?Hh8eEq~B|v&nq{Y5#hyL$|UbQZAJ-b9h$a!ni~N@b8FR!1}6En za&h|nUsC2OZ&J;5S@jcnQKPD`9if&;t0=_N8@xq`k6_pRHfDB|v0f-&AR?PcJ-enq zh^|nL0YF&Xo8Q&-v}qc8J;!u~Y0x@2=x zh|k*u86Is_oCt`@h~MPB4w@VrsIer+&cA;*_5gm*Ej&d!zt&Ya`8<&GKqinu*(Ljn zii>8t@1&nlYh+R2TxAlqi>9{IdOABODstCPnLITr2zM6@s~yl&c9qf;#_qPOxXy>r z_C{tMw_|_3?rFKz+rt^A-=Z7tSyQlAQ?x^4Hg@5l1v1ZU}fovCH*8o~Tf>a(rob3nP z%kv%1{a%o}RMH(ND&Vubhgsc2?Jw@xMuF~@n^ZXf9r+lPpA*TScF>6GOSBahViCL8 zUPSXKk>%di$tmM6sPL-yS6_fcUv`Y?xF-pHL-hh`jy}Hv^$p!iV_8j4q0R5ZKKP9A zar z@)k6^kRrx10cl&XXHj)<3z<_+1-zx7BfHVdeUt&+;+;UUw_$@Ig1w9CuU$~Vi83J` zF7OI$?O+==wdQ^=E1JqhJpX#QTiGk7$ZnO?lMuzO?zxfTOIunTq944+gI{_OhSaEku6ha0jz!3beh;O8A|uJfC; z3u+Ox3$8{gF@U~#L7*9@GW-dLGCa>MM$nzrR(?MB_k>>RrjJ?LI#57msI6D7MWf}0alw_WMerN7$#{u zBmYpjT6$>2XyO=S0GTv`z>HhU;!bR?Rp|__djr(2ElYyHo6RclcM8E|suZ5ztO-nU zDbnSTLEdumyYxV;z1xqIuNMoH=eQe$a?rZNKf7(wPWvO^VVodOr6D6$1xDpM#4UJ$ zy3Gqe;XVAfGo;PmK!25?ft8KLFT(rYZYf57cXLZJY6eryF@uz*t^JYCH**|F7nl+w zMI}BMH1lWucJty4bui$bAOv~kHsqhaBm^ldNiGkX{lgJE>%$}5QtBUZC|yb07`f5p zJdVFMqx3Rpvhrysd_3~|B;_(RBthlVhO`3{k{}VXkzfuOhmDEg+sfWyN)*N)X1Q0A z%F_^_Gz9=&+n^kLf%*;4R%wFI?>50{!SeV>_jedQfic*AKso8~YBL;+p~XaA;Ur7@ z$kf7QZq1-6_w&KBU#F6mzRO~I#Q4eW>dXj03x5;LaFH6L$4T)yW~5GMZ<; zTe<=Ih_oW`4xQAS1#_2GCas(YqV)taVL7zbk&`@>__ILttPIVBO?oeU-a2Hm{U6KN z!^Eq~n6$!J(%Y0ka=Ql2Lc$ewSAr4G?}s;MZezOFu8IG+>_n<=;zy_Xd)_PG)W~6R z!q26Omv2HWJ@3_wtWK$Qy@KneUNB(e|G1yfVEKWa4^-eD?1_e$ORgS-)PZ;RU9BBk zd4eII*nzn>>99gc8B(Ewz<88+=SaPWKv6S27RS;ZbDtht_VT2!ux;ei55X$!2ymgS zb*-NnXm;(K-_fiS;U9VGCebpq1{4%gOfJ`Ml)QgJpjFqXG+bC4IKo#ICF^Ykp&L1$NyoYZYGN6m8h_)RH9?<+{Ab3cHLQf_w z+CMpnEFC0o9erIwqSf5+Vv$Rss*K4g&ZG8lrSu{4>8W#aO6kTEVDZWm;Kv7<*jdYv zC9_p68M`N--y0>D?cgBoZ0uv|;H8EN{uI{A&LKPaMCy`FzDF`CS1RYE9hoZK`OD@N zMzk*mp4eLp|HrwE8#hQ@N21$3@N-|+k-xvLFWr$L_BhB9djz}~q0zAvrt~}x`kIo! zz1_pI=}Ae-&3Ma6arG7))c5-6ri1-kOcn2FPepqL9Gz`B>E6w^zI1{tN$Fd5qSP}6 zR|=_`6xX%HkK6Pj@qccRdO!IX-nQD3y>{x;NftRiop^`s_;pAx-l@2+a$Uni z1?3gfA%RfY3OL+-#q3J>ynd|1J*AU7Qrr_~ukog#?Q zde!8SuQ>YV$mB{`fHBe)iGf;&Y3|jEV7zDqR%j|Avh1OU zw+LLs8avvUML6LOi?j*~75Jy~GOF{TG|xIt&@+YOGgUAIT5e~m&g2@=^Y<(JLJ_rA z*Ck51-k0_MBU$D=k0GcB3V?u?tzXSq3B=&l;Kk zZN2N`{Y&C)lMH+uft)}Xs>8_6p2dbnam(lS-M;@`W2fskaVzXA9vs9l1P4i^%@OC3UU5}52jCz%EKrmtnC!i=kIEu^ zf16?YM&7I(XB%V@ z6b!Ohpbt55l$PPxJD(Q=RvT1`BNVbmSV_cC)6Z7@Ye;G?cBkf{Tw|in38+vU5UURj z;EP+6Y;6XKddSL!=@aqRA|86*->l7DdR`czpjyZRzVC5M=ZrfS#i}}eoA{|gdI6^t ztB)d>+6X$I;+}GX=6OI+%a21<0C?i?e7G~ zOLrlHqdlDBqmc!Y?Cb511L#cOQPF<(cv&FkD$|PN;9<0Y9))nr-n5vM@#<4%`D)#& z%n~tK#_qy>ed)6cxBH0di59Qz`#&iR*KLCsXL)UBmHKhz0k%=)cKYrp$>H1pUKW;{evjp%`bEB6S83^@TKQLb1m&?oLnZ8i5 z$awcqv3$Es&CPyWf<~;<1hvg;3T->DO4o>!pQ&Zi+xq-I{=Vn)uVz2VmuRUelZmz~ zjf3seeb3gfI&tzAokCq{1sC*P&?)*JBW3N2@H0F1+`3x4s)e1{b{Lbh3@`r;f84#c(3PO;r>4)5-z+KY8bYF|9Fbuhw0}lmK z)X5*!K=lj-eZRor-{3_=UARptpTnOLa;p(nV#g$ky^frrx3CoGX$ z3f^y29NZVb`f@T6SGZGJ+?hOKSMN zRVigH`2wHR`V!B9zW#I4?%`)7g=34e!Bjo@4S!7i0&fNSWU^rQ3R$HHsRV2?{e~;m zY9c+TV>u-3knyOa>ztc;Jw|vvo&sdHgmMjulNB4@wc+Y_XFoFECah;&L+8&19(mA-5@SGBipkX2UFE6`e)*8$O{`RSbB*nygwS z-}g0gJ$bSkYv-Ask^!(fsO;JPjdJ=-v;GshOBHHi_jA%hKE*(J0M45P9cLZbYU7yt zKH0lOA-mZFU*Ju6csAAW%GKaMeC8*rD54QO;8M!EN7Y^8dN0fKJ>@b@z+aqSWf9S6 z(JAP1J-lLk*4pj#~2gW zLs?xXEkY=p72F>4QwLgx!Cd};MR;sk}Lv79>gA1mw9KF%b4-6LXiaUQ1+yjH6Z zf{|rt<8Vpc@wlQ4f-bZW(08i8R>{ZYkyK^QwkFGSRK_bOpykysd;|X2c}bNOm+{&|5pzirO13yk1BE0aF07`SUcr`hmEJNykm$yu;|ZykL(bYLVz=u#-#T_kB*2(1nj96U9NZ|2hW=8-H$rJt5_|d z7HTlknN4K!)zWQfa^^r}d$3yKNZ1P?gX1gr`FNF|fTu2>;G?ZvxTIWB3gLNHig)sJ zU`7)cPEV6(MNN{)-4}dqMNJzX1kXbR!4;(Fa7igF?ozruD}S0HnJKb3Wl9(OBl(~i zq@-j8;PK-H?Ea$%eb&(*<$#qGr@&j_w)k^A;n6U57O0X&>F)B5Dff%p zop?vLmW4rbC;K3|;7$&9AR+n*FqvZzGD_1$?(T`F>_e>Kqy2GM${_zQEd5#Zzg_W? zjbuJnPqUwF_o$y-E!z|MN7+p(ZRo$CcFGW0tj``k!MECunSTXLY5N8*32*YSzeBc8 z|A;T?qW3h}+m5K;8S(&3=rfbWmGSYn5cs0J#!=Aww&P>Ub!|I|+bW&G(3|~Ky5{{< zjm4dwdh5=j`nm@Zio4s;1@Fnbe<^U`6+YlanqzraTZ8D%=~>}oqP<-i1v=bKdRm)u z_ID}c!~Le#H~d?=-i&3;^!JUKd-9ICl|iIN8!QWV7S-{kV!<7Eo0cv}1)thnMv%yd1FjXQtsza{cv zOYL%U+*whCZ%iHl;@~(ZB zri56(bcy(OY5O4=LjMI;GHF)KbS^=i@%uZ1vNjvkuQXo z&ts5tgGesdE|YtWFRi|@=WKd@4d`jVee0FH3l_KKX5vZllebh7vL~<99&^7hbd`To zuFLU;V8GtX9E3WqLAS2x9KDj#gM?4lv;-3#j|FK~z)g2$R95{++I3$Qf5Th!ti9Uu@w4?VqBn zk9Z+yRHDQ$-t?_Btu~d>&+clFVa0K^VsM9M!o|ukp$|FVd;6>-+aN=_5d-^nj$a%0 zkJz_%%oi8#WaEKq8-H38f*Nd!;e-m-hV$Db7JOrZ(4Mf5-&3)a_&CMnW{qm1P#XUW zu=|OJQL%1B#+<1;y}MDd=%4&ZbsX_Tuei9DdlobNn+>WHv3lFu!B*TTndA3fwN&EJ zS_bU(dt33Ng<|o0Wfp(+<3SXW+(dMd!Lll0Gz#qSp`I09Tz%81pqIfU_pIQ#hoZ^k zClet`=N*da)0em*mYohU$D4jxlk8w*FTAfHX8lWrIuXlH{{IkxbJtOdP zxf%JT6*M8MX}@-(GNClBY5|1zxjV8h<=|X0JVMFsO#D}AOkcrC{APuML3x~qDYQ_c z^mS{;WwDx1(|OrOdq;O5+k-G8mg$jxaYGOVhIT7X&0VhSaQx~B^@`uh78xNlS%9X0 zkM^3Vc@O#zyCt;QSmbzACUhR;`HrUxhc|1SRY`9Ez&-ae-b)r_^eH7}-yuQzOrarQ zMVl}0O)U-Ot!2{!0-mFhUHa&IJjS%6UQFZ3W)KG0xF1G_CqE%Q&=jf-fNXkM9}T#7R~qHd-55!U5RsVSUBFxUUfUHl zanqB?nE!Teww?Lfda<~AD1K<`#{2P!RgGRvSO1CCu1>cKQmb`U3%%oRN3rwWl;7`( z*6^?di>SC#0WDmYV{&w5t(|~XN~AH31^h`10`&zb7;dfb439$Uz!UQKT4tZP{m^I1pcYqO;q^-$Zc_ zpE8^G`;ADZh{FUVBED0y6hR$dMZ3B9=Z`|U?6Z%GzIOOv z9d7i>p`uVHF{PolOksw*Zzq0tU8m1IJq)fA=^fTF)_4sx^$trb>2~L~n7e_UNJjDnZ`;cOd$#Fh?MDjh**ZGo2FrtgH`kSP6E!Wxz6KdAI@ieP2JPu zUUgbUs&SYA53neGJ%^*_SSvqrN;WR>>9E_E7oacoXH`}Fn+dMt8<&4Z=}>Z4udZ0h zTmH@;`qqlP*;U;TC2P*eRZQp_5oJ^Bl12x@5kw$D2yy_ znOHjcQL;4P2(JS`r@T2_TtQgiFTE7dm)FlOPp*G_P@6vxRwnCHXS|?H2Z`5>z z8@a7tGP-^)c8_97n-fWk{FPaoY;4Tfl4Aa~(rba`4SC(E4$85}2}GqZc2Oh`)2Uey zp%k-ymmN_(hG!M5p8?G@OfDXNJ?zy6WSOyxH{`w6sILZ)r{7-&-)b{bW{{8C<~&ID zhb_>zS&zNRul2Eu(0vhJtjs2%wnYbe?YBeMJi?*8*Pc2flC~)wGb8ze{;@c%D*L=- z69vi9d_m>oYm~)rCe-lKj(Lz&+?+hm7z+5!H`_Jjc+Sj$G9506yhC=wn>=25IDKn% z6YISI83e1%3)Wk6Mr%0F3k6RVnb+ur>`M>H*2gp9_{C}J3?=Z^@opi`zHxinf4hfh9Y#4WN>d>b4 z!pG}_;5CCatdBFng?g}Qnw5W$(^iEeSe{!z%4+I#I=<|7r?XKXI$tLsWl^> zMw6x8p1_OS(mt8cVva=)W#GLq|NZ%L3YWu zwPMBt8cgJ8FA40)5_Md|0o%GWORRbz__Ta2#obo>pKZ?-B-r>lYAt(>n<#GJfj?w3 z>4aaI?$6zj7Q%|-jmScHBZf+n4URIC?WX zAB&EJ4@q~2D_Yq_7HVZ4nKfGGdV6^;%W@`;Rm8tp{_IW9*Azl>Dd3{ED zg82`rdygK@MJmS~8BQ0ufOF(rNwAI`n!lUq6L)2}Xv%68)W0|{SwNZ;19N|O-&xV> zl`9x(W>xHP-x))zOiiXNZ%nDt-O8T3sJcl;uj)5bA_`xQ{N7=XJ5#IW>K=OIfLFXk z!PowMpZen~Tt8yb{U&Y*9Qjt<-y@Vny3u0fq9c|zyQU$M*dW)k7;hLq3l|ou=tVsB z`=K_*v4sq7q@LwYkr?2cwNR!YR`xts$zna1Q0aux3c*^^B~HfR6lwKZK7%iaZ2lm` z(IWe-nkwzA4U}&-uZIJE;;QUCuS!=R-;?k!6H}M;b>BGJCT?IArtowHHY{)%sDyY# zF6fGwZFi$yaQF%*Gw}flE>VP80H3G)eIPQ5FdobY9Fpy5t5g13Y?ar{&`!bOz5?2) z=kt1G;qG(@vX=saT$1nhpM&UhFVv>K`|YyFn>uf!m^QCQajwZi9Y#;JYuTazBXk{+ zMGAbt2A@EPj|?4_`MGt992M5Wj6s!eq5U0GjHYLTAW+F5kSyIvHK%q}nSAJ@;$kUC z-B$CHZ^j16hFE33I@8|48VCrXp@JtYQvq=@Oz^L|f)tg9OK^7=;aa{?Dnxb&?Tl+G zbz@{W`Bb_cu|u+Bqau4*y&;!m>XDzwwngIPTO%82KLh&cKa)s02d4Gkspi^wm_Mhi z^38=_P<;kWvkJo3FJ>@Ftw*q0wHeF+gc9zhgk`8|^>`R-2TUnG9~A{{4J4T^yvNK6 z)6BH*Fa`q59#DxBiInE#UL%);i#nIiiQ}w?^xeS?zNEjIE8J01@fi2x!n&S0h_`0f z^F`RwY8Pp0G!FCYnS{c6GD*@Y(p(u+IW9o^6!YTtFxmB`S`THNxV*N5V>`2#q$@uz zNf%w}f#re44XrJbx2-X%))>p9?M7;H_^^^&S952;%?P1 zMzQ2#Ku%i{blNlYh!?eWU!#~nyE4D+MSm$uXTB9Ai~h=Y(NV7rJJR}sh~|1Hz;rOi z@pwk1wu45f>>Al}S0$M4;0H$y4IO6K!kw%18aY;2u!;jRm8BM3>^Ls=>qWS8eHra6 z^UsM(0fLYt#(NOPUk{~)+m&lUuZRb0;PKS&A+vuhkdoxFGpermG7AygOtPPnI@TmT zo9xG+j!o))19xhrTKv=d{3paL@lssM?f02vyI#Ozf_c8gOZ}Kq?N3$|u}wm8>;&D* z1mEs0`oP6CNlwx(b^l@_eLA4$N;>%X`z@szh?0zpc-7rr3clq&lD1Lz=m!OWTGiL1 z%86hU9xyUTf0FzxPKtezI8F5hH7E;}{t0LcT2XTm#I-HS8L&@kEx!Q5fCD4pKYNVt z;`qeAxJ${a%!dBhfU2iwNBu5@};??UMsY9rumxRiXjYH}MYD+Z3tWxBp~C zu8=!}J%9LCZRD159e$ecRorE(Vpd#R?+vh~T${8LW1l?SS8Nz6dxma zh;~&iLC3viK^b_1UKy0r`u0vBrG83Zdfnz{Q(sh{gSNw$;J2zkHi!tP0W{TNdmw+f*5`X8$1i zbskbMxliiv9+Y%T$r@{GyQJ<1NglZPfR#U?9Cq!9WhD=Ags1@a@;eCp%Hz^AVGDSJTC{sylGq>u zifj!l5iaujxDL15AeQJz&9X)*UfD z`qpg;a?dTnUax)_yrvY7GcfctbIr|*b0Bt^X>GkzawIk$UoH(tECd$tkIZ8QNiY)o z7&HQqJvQA)5Fs!gmuzssyXrYl1q<2AxzdKJIeIS?KnAl1pz9jbxN(~%OPqmNMDUuO zlzkJ^GLicV0|-E&JO2wv8{ucb&pa}anuJY+8Sp>*5@|IYzOdj99{Jb;HB0v^BbBW{LsSbki4Xox}zNl4FYB&}e+JqY&h#KD@6 z<^CP!J@AJG!s3%AOSuU4rA-C0pE{f;I<84W9pXZ!a+3kV|VH{$gE zv*#8$)z07Vk0-gE*(TSpLrlf9+S`FShJ_K8ZIT-0t{dcaC9?cubA*Lay_W)^MOtsT zg?N(WG`BwIG>wB$cR)jB-SWj(%mS^OWexmQ;z4;XR5s~AP=p-kUwH2d;({KLh6a#+6B~@Ie7bJ@l?c?_BlyiF7`>u=v19LK88+ z<2T|Cj1@TZ0n(*m{3IfTBn=scU^Crs#91@UD>cP5y=TR@TI)_?e^)+Ba@)Xr>>Z~m zEY-$B94XNO7~}E1kOlQFO`{D=yIy@VcCe!L&3+3Uqz+9m#xd#$g^%yG0w5y?(o6w`|DF zjgo{i(#T-*M80Fq3x3Bki)$P9w!Q-` z3^8RMD7|4iuv0Vh5r>Z)!PMt0nw^~{o(=q&r+0=ohIk{XBfKlPyjbRrU?j~bC+6Ovs! zQKsE>J?ZJazbz=3Y*iTMhJ$I>!3yV-XeB(UGz8-qC;F=)4D+6E0|8l!-BA+mL0p1{ zJ>47K%7LbL)*o+Mh)2>9ATNcariU)pZNypspkVdUVVHmlGT>$fxHG~lh_8c{u=*Nn z%x1r)C(=gAQyTrovxXSo)4kWT5MUW?d*O)|qPay1;gH`sFfWQo1VBE6d9g+!jOii~ zRrxsMd&e&df#*;mKoXMS&r~l!%nW62dx_;DBv~aVG@gwW!O{wJFdh!E+v|=l#c+*v zeP9UmFJkwmuZK7E|HIIUZQXw_-pa>`ghVI-;|)xwI%MJmBXPS&*HB#&h~7j?kEU^3 zdPsQ(y;52YLFcC34`5%pCkowv*S2G;JnFVj7KvEYjGkyee6UpIK}0|g@KsMN5T+9x z-(WHxbxA344egKi1G-xSug{@dlq&_~a zDd&(Jcp;Yhuy}kc>ti!#+l}kf`4k>wI)XM_ z$@fZV$=XT4mASPpw?`S705(Q+4i;yg9HAg$2n>teFX8^%2B(VqS@BT@p} zZr|)4XWc#@)m-;Ye{cW8R0pBPpzAFQGk?#zyBOq=75Ls^-AC~IcIEiY?%VQ`eW+;j zPGTuy>+6;ob)-PmL!~`^`LXu?$yKSF*J{d6Vb-;a<&NW7ka%@FENWq6;~68}yKbOV zXQ;Z`*)8+^imPyw=DH-@^zkFz&;-N|g@)Ly@l}AV&>CW=-PvbKY2AjiRMqXmRlG@a za_xDOW~%o$(}HPrmgaabQZw1k7qz{4M?(9511BL5KZ34b7>GKFZRGLldWOf^)bx2S zA4NY#uS$IYo4aNDl#JQAWtMgW$>8vQ-u|&ny6NMjOrELF5y>nzl@yca!%kn5ksi5y zp2C?#fi>LrG15KLRJLY9O`1Y=gm}ogNW=jJ#JS$l*H(n)Qr0cm!M(aC4NHs7H#u-E_E8NZ6qTrw^ zNBpr`xY=X3S&eeVNT)QORaeU~k951pPi0}MUR(kWqnF-&b8rIWoaOkLyWUPR7i~b$ zMa|QuNAGOqxPuC>1)CagmPLi)+{)j5tfjBcDVhAWuh$-XquyGU)3v9r% zZk1G(PcL}n`-5ln^VDO$-uIkEK|6_|U&Iox2zdEa+}~XW*peE&ks8g2rkY_gG#taJ z_nI(O|Fu#x{>O7nK+lP1Ocf0i&ZH;qCob;uc&kdgreDuL_FW^JKMAvzZR53pD({UL zvb05vk^S-5;z`;{_Mqk0tLGV`pm^`_v!ygUT|IK(0)t~$Boot!$fBLkf8s3iUGp+o zAaq>tKOev-zL+1Jv^5BS!#V$_Q(vn1tsYhKHvDY?S50BZFK&%rdVh^G<`j)Y#DhFf zR7R^sQ-+)UP=9lu<`utH9#)rrs(%$y$WBA@Ca2mzph))KNUE$W#3x$je*APG?;d{~uhdNShZE<`De0Z%ZS- zmD?5lN8kfDAVoj_WN2 z!Dxg^Lj{Yl+9!O;t)1B#$NrkBQqCm~3)--^Gi$YlS5le=nhA{XfMAy+L$Pcq0kNP3 zP~$JISI+w&qlL>SA-U+IL+jJm4a<*dUr}#*$;kYBI0|KWBEXM53hku`fel1`uq2Lx z`BKJgrfxWVh86X3Bg&LDRiHJ6VUGnMEkq8|nk<2d#^#OIm5^EOx02i0`)~o#%%S>_V9aoXbjwfg|-MP zBT!ftw^mp7Oc!i9D+WrOjmwo5&#OOj$*!O3>v*OOzKzs0&zy}TKmIy7-fhiJA&(v=H;NdSs*m9@O~Zwjl>xNO^aP&SC$#FiY;QH$qE)W<(&Yo zx)UQ5--*!^tDd=Mk_rdi4aciro3Qu|bRG;qQX6w ze{r&f&{Jz|w9gY%{gDc)zBpfqp%R?=x^k3!*HFVU>cOtq&hmeyzCqLr+z+rtgTdQd z@L~{v6JwQce;54J_+LM&+>?+EvxHozdgw;CDS#?kWBb5l zaD4V%z9mLTG?3D|IUJD*GZjEuou8X4u@J9+sQ6Ja&TG9~P!GH3c_QmNBm0HH})_CK+L+ zgaK}Lc|olWid8pX;)DUcbU-VhnJ{q32SD>UWe|MzZ0W341%eTQ2QOlb zm9tB_9pIz52&VU{o{~mM+ke|QCJZ)tkSc`w-t_W?8Qa?`wIXi|5K?d`D??@Zu$pw6 zM=9gQB-T#%8%Gp^|BtD$1%z3E;P~b3@($)P18`#NeYp8f9407S%;-%Rw%siN%|^Ih z(iE0EY_Z+sBd&a3MR@C9yj`01J@E&o^mlTeDZ}3QU$&1^6|ylq*wbReSbO}&jNWoy zoXP}9*UucN^0)q$Z=OSLWdcLCx-*L{5L2G>&=K6RSU9xZVQ3yP-#as>~qU^YtwtZ=-t!?EUIU z&_2JKa*C4o3Ww7O#z!O@>1y<1bAKXw=l~lN`(#JnyW)7Z?g5~_=tg!@UZ+7jFvEng76q)ymupJ7s>qF*EQ`SXyK;~WHAF82Y<#K_b zMUWvakVbL!$u0nLBQXt|dwWv}d0CT0V2?cOw$a9vqW9?_S{5LD&yzsO@s?stzymqR zr&`y&Y&`(=E`l-2V0olu#sF|vx5hFEae2qQ$*+Ynawqa>6Ze6cp5Xr|c?vo6Ka6%X zPm~@`8KPT=bLUhmXu2Gd9vY&UdSC7q{>|&$zx+}|VkovGUf!LCrY|11Ih5v*<2@Uu zahE~G==+Spb2-FzaXC~Z&;M*0&dWGt09)q?S?4$e06NwDz7vlSV_(KLi@`bR5T4ec*?pQt!cus#==hs61#CtJi77{kcRLZo< zFO6hE$?u=xn^HKkO{ob-l%&0sdI!02a}--1ayjYrh$z`rrvgPViu;8vtq*=6F**rm zrF4z(?;;e@-X{@ndv4!oL??dH#ju}JeyJVjVq1-@40bs)dAco54lKwy=bp%<58V#C zoRqjG0Ly4LBe7SkD{L2!o(w*7N${WO@(O2OwR4y11^ktI_nb&qmDHqrT1*f`94J?j zndJ-9hZTBG-kT}6wP1!|XLL~0b=M?L+^9rD3Y2XON(X*8UF-(fIkP^vyTCDh?SMgQ z(NOHw_mxGlHd=y)>Pt&Xf`+YU5{-NPA};8)rt7uIZ=adx%!U>O2XPuT#5>#fPG;qt zDx@T)m~IUnW$2=y|4KETQU(u+qspA>_wcOHwoO-Mlet+_zENc#W#Iuhzs1tAf7cJ} zAA-w-G^DFq?7;S;1q%)UzTOnugtvOmUtXpt2kWfBYl{6&zgqvq`3PKQzp#eY8e2s5 zFLj4y1Z?{O{x-W|sXlDJyO`!QRaR&bYPWSNmIavY2U|3qJE`zmNO#-cF-1eSOe}I6 zAPCsYtCmx*!c(uO_qPq%=v>lKW&{R<6`Md@BW?M*;m>C-U2tX;Op&^%EHo4;HdzF% z3KUAmu2&<37K~m?=j{0`9!lmlHaCas&Jpqu36$4Qn9}Z=04|*-bJ~^)F>2h8>Ka$h zJI8x;=HF;F_QRFU^SGz&32Ektt-O2 z*IC)hpw}5plhd4;vGwUDwM_nUZ*xv?wIPgjJg0RHUuvR(`iFL)nkCMmrQ;+pN8y`$O&$I$hXSm!y-^_A8p>tU;{Z;|e^T-Nr2Ux3G;A zTE63)`=+ps8AMam7Hc1T=XJx8v)BLNR^V^bo!CIwUFt393a$N1E{M@rA&7C0;R?*< zehclj(+%302)`42AtT0P8-O4ARkK{&1UZ?*BVBra@t6j z9-lTG;f^dQDJldFI4FFC8@OIVx!lj7wM63$#%e|jc2a;CmQ~B#mMo2iRI9q!x&`b}&iM$wbunh*YCIxL zUR07wTeR~PY>!nA#sxfNDdz^qxEn|Bk{5Ne$%tUJ3|x)IS}HD_fXoOcEGqfyhB9uc zhcd=%62Z9KiD3C*xZ-~?K$8w{T{u6hxfGH8#5MZK(YXM$c!W!7`VXSN=ynQxG6)vj#t-gTux4FCml_#fmzi$~OY0(yB;q^E!gKG1jF!6TuxVh?29QtizeYw& zN}`ZYjCJ9};z^%~r@&7Q8qYm6!ec@e!ea*6I%3a*3DfYJ@ab;jC{4fdw%ZyfFA6hI zH#$A$chPx6>~c9yy{ME*zNjR?j*9irUOXn%4q@ENMv*d7Hy-jUhDft5f^Zw>`E%Ns z={rzo4LbCv4TmF&L5#)8X`ey1|eidC2jTK zH_R}7JSo$1NKxmSU#t}H_qPJL?p=+h13F&-zp52Gi0K#jmgyI;QP=pAl89m?V>~`P zOdm(Vw9XeD7ETUe_w0i0*q<89&PNvQRKczH2Qj~%r{iCMe=gJBmwx=Xkk^XIA-Ew9 zm){GHgGlkMY@jAO6aCEkGgcBgR*Rc^T!9$m{ zn70Lv{Tc~i=9`mQ$)<_D5?UCw8(Nr-UJ|EOpf4i}XJI?>o#X2?^bfcr#b@V%MW-Cq zC}+=@L?Ops=${D#E}8{05kWHSRspKS%+iASdiBPr%0;HBigD67X_BEcjrOuXOMR}9 zUtI}J0glT=UR%Q4kCKCMigmKEC$a3vmsd%CzHP6RpgN6;FmrwKoo>m}zcDb8~E00Zs1Ngf&9V*PS4tVKXW)Alg2<=#9ui*&o*wyh=aq;|< zsTM;akF~-|ST5uHP&|Z?I7zD!P&~Hb2=DlE5syJuiaBSp5MP5|XXQ2K<8BqWE2dZTyf2rThJjho<9K26G zv62bJSu(Jwr`h*;i36;ZbQZy!9hoxx;MY19$^;!g&b_ud}}VL@D8RoIQ9b z9Uen^5cLx^+{H_r8`%)UOPoX?8O=+~G#2H;$^4VoCBugLQ!f>v_pvl5&XVBBs&F)R zRwiMZFGn=?wIqe0-_tPO%AUkU!I7XzHsS}b`?(sKT7;uQS>-Ls@tjITqOg1H@O9o5 z@w_3&(_|v~iIQP>ZP}EIr*wn+vFJA-zPU?3|AeV}ob5W53li45kkGi=gQx+ns7Chn-g3 z@oR>NAJq=gdN?q$KB$E1<4xC3lgpx-pveTV659i1N^sY96*+{hUXvziy4W?AS-LXz z*+Z0AHz^1_fzhV{)gu_D73#63g_%PH+K4I9iI1@#NK^~d=l{X4Vm2J}p_(RxKPe`1 zdSeOKjzgtpHe!S8IYY{NmBGE_)7wq69dW4oJdySn!DW+9P*FvTfpt)Y?J3K#2{T@W zqwn&p<(VQ7+~o_-8&k%IAXBw+MN@FG)e@VWW8LNpcCq(+mHv&+e@!CBw?35VIkABY z9iyBWK1KDWE(Jz8<@Pbn@FU{8Zt$wha(tGt}JXy&-4)9>UD2JV&)4;f2H*C;xa;r!DvkEpc3$k4WZ_FppbI3ZW zI2R%E&r?G*idxo|Q)a=n9CZy^d&umDa%j%3*iW?5DtLT36{B>SfD!Jdt837qtZe{T zMaWn`MX#7N`f6~*^3Po{C!loxxoty$a6gO_65jI0m*RZ#oElNtz*6|F8eLa*mNbqZ znzQQ#+nM@Z_aO|((5RU*{*jy6+ZExoZIA$ySA&&|b9YlG@^;0J18f>}9`wSb;e9aI zbPk&a5<8Nay;Vl_9AsuyiULL;CU;-#ue|p_LH@p%!<~i#8h|qfzWt@17iM8iX^`Nh z=tmPt3+c~mMs+Bx3E)8We1RE)?|`4K@4&wx{dr)7n{AVHe1X@F?|^dlu~_k??tC?K zQFCl46WY#BdtP&IK;23DGN1fYLn%=qbX8>uaDsP;Stf*XGI%sNz1fCwGJ7;odA%$` z+J<2PAq_?_N;PucjBAp$L-sE38Czly;B}(+aIq;&L|+b62HUeCz(X6{+QN^FO=OxC zZhZW0Pl|1h97q9LSm*GUOK+_SfwqVJFv($U?}2hTjKBc!6@ev`lJEZ!smBc~Cu2*I z-2sjHb7JW@Zs2o?ZKyHcHneF^p+(>%Z$4E6uSLLKV;h<)u?dwl(R02ozAUSW#m)wV zW4f$Cz_UKXkG(e5F8FV1myW~0M$Y(o?C<&qUlYg}e${z+3)hz+Ur?aWIkBL38`|UD zI0`z94+-Bur?U$``BO)mm&T$A(wY*TnRXS$jzsH@O@<53X3{@7LUTXs3_BQg@LQ?g}jb59PtFVPDho{p%Y(z z?=Q~}P3?j7;1Pv0`tVe-Xondy>Io}L#-FomF{4lswI~NpK0q@ii?}zVDGEY;0vfh>jU{9 z@OQsv^PBHM8^T(6q-|NJmyE|53&@)@pSR}me*}?(FV1ET+FsS&l(d*T-`s&8?M1l1 z%Go>kdp5O^8d!G$x!O7KUTbr^*)rO$atN56bQiQf7k={o#5iKAibVZ?Ha78Ji?_ba z`lWxh(qk@rcgETuejd+ye}1&mcC(ZfbkpxvpYv~Oz=UbBPG;9Atu{bewMPG@izagb z`veGyS)Hdv&xj7bk@ilLA`Due-u&ZBuW()3v`E}L_J5;cUU^Eah^)6m53>HR|JuDk z=>mGx+gc@SbjR%10!Fa^KI7v>ar?y4&znD+z7&+j#7-qxzQ(x=+9NGMg)kaEB>VXqzAK^+cbuPL%s6cvi zKT0tRUiPEC=fSKF-%aK3BM zb%dIK$iFicIa2r%U+fz{fP7{x(lar5lhn!A=dw}V6*PNS=k?J`MwG$5%+_)2CdG@E z_0NI>=LMsQ#==rra=M5GczNLPQ0%yEnD*}W;{M<9+SL8!Kt1E1gKvYt9oen7p#-};gI4YO2*4;$k6O7=O>nne65+&!|R-lCu2PJKJlu$Aq8bw>Kb~F z5AFCBhC8@&$l|E67SIBgR6**&s;c06w#U>%VyV+9em&xJG z*j?EtrZmk(a{bkO{({1v(QM~u@wJISVz(P_HaKBY^SjLnn^WT1HgC-)N7*ok@=Syj z-6)++=B>}DPW0~mCynYCzqg-E&qEEuKNnxBpn0Tz?%Hc{C)c+&9R$w&!HBcgab-U8 zbB*G!)K5`ny~Llht>30GemtYrAZ0{EzxUGAHq4`vW^{Fi#@OKbNSsE$nevi}ov>Ofh(As9Dxh z+~eSBc=m3nzNn}F0kgTZf|K~fZtO@nVtJ2b=Z{r_q zo2(5BCi(@o>&V28Ov*Gnk=Z^M0?_FezPIV!ku6zdh|2IonxtmSupmd~rk_(rc6NYPd0pUp2Um z@#}koK^tiO`&3m3Ko09f@r8v<6<-Wqnu@Qh{_)XW4!eI7DR$M^sPLUl(oV~G!)PUW zg*9w1I5!4taD1cuRIQFQX5vG5P0W7s7YRD<0_%6>9gQOkT`2-ZI5F@hjc4of##_gT zqns)D1>J<9R7+zuk>v7KDf)QX(EUMA?A{oY(fiCPx`)~fEIq8!A-=XRFBu7*sfKha zwwR+k&mHBlA89X+aniCBQ~SWb9^z9=OpGPgG6E;#VeELC6|LrMx{EjT+F~WtjVyjn z^yH0VOab_~WQ@VJ35y8Fdf|k{=Y4#R!HbBkCg0G-%B>?;Ag@Y-8@h=25QP=GXma+R zQ~vPsY?3<})b2UK#)aGNiKk6KNCwCD1ZwshE4eM2oMumSg`Aa)OS%Xo42IxL{ZwA> z4cXyPP_SC$<+)O{T0|7$C(}#(VG+kd^oIa9`MXdH7%=hf5pON5B?>)ZQqD>O+BGD9 zNS-mB?TEn&-6{QQOc;9dy6xm94a_zo$r+ae)ImnW_+A_ej2Pu)wavv;F@7;5jNt*Mp`Z$+lq45wC+?vZ`C=ueq?*cN2aoU&@uB$1TyBYRqGX!@!0))*Z)~Bz5>jcrk&FH!+!sl4r?GH>{DVlu6%a}|B}#lF^eNkRqr}>vzv`pqSUj;Qt}#Cd zuQcE0Lw&4yupAhC8&P)ZZer6m>4`FbR&aQ+Emi1z!z&-G5?B-5sF~errdd?stx$Ae zB0Bt{r~>jtd*SKS!$ZjU6j*l~S^j7vdVIf6_yLHn4KV=gPdH=m8O>f&V7yk@m zL>l&HduJ{As=VYi2K)5v>x0vw&RGlr-bvlZ;LB?IgbF&nRb+WOeR{7q(3fd`muW+u7$qKL2HwOF2W{$C@-)(1^m>a*InTz%08Hz3cC~=^2?c0HC+DhmGncKsS@gHc+PP6T=1@4 ztrokn9MX_`q*n6C${i)GRa9pAAl#)) zGHhG+W`afBNW|N3o z2NJr%n+K!hdmXhvY!w=|pPGe&s7v`)hjb6*&EQ_a&2~7eu~PDeG{?dwVtf@C7wvib zLZ4;GLHIHxVxDK76z=xq5YoW6P=|)VPu2QhH_~|QY{(7o00Le%q?fCl7sHPX8*%H= z2iMp$Z#;ZLA;@{SZD_*tGhC!EgAJ0}Lfq;2jauu#3#>(?muO0sY1^RVzD(=yu5N>=;({!08Jv(&PM2 zY2F>v1~V0)>A zH0>kZn_UIXoE?Si9*f%gq-hl`L1c})eGbGkmLTPH5#EvO)Ca5&p zn_9H@UV7-hU#48MnKn@cn)>jn1+;i(jD_0K5&~728)};cEz0@c>e!M~`}fNG?)C9@ zzP!@umBu7^#|7Opha24nJZ>JRWLOfAvTh4IWO2rs?#i(Yg|O^#O}9`vC2a{$5x2v> zPdIW<3nU40fsm3t2k35cvZV5N-JTC2X|X$Ey|#UxaGty8As^V>owFjtEH)Q{sUK#_zLrcH%;;tf8<;vmIt30E6r)6y7 z{e1Mey`J#UIrV?p{RVhVYB?l^^5toI2|HqVO-;(Vi|_t>2H%Q*(H|CS`pi4j)LBKo z98JBt9%J5V#5-E&#)hyALje(7Jy~8)LEm~PgS`_m`LDhC2&u61fam>|;HPRUc?66y zZ^!7(SC|AN7TEfe!#kKBy@ln{>=%{Pd_{x|=<7O@xN z0VTuQa&t^D6?b|RiDN2W)6(nB_1}N7iT@%3rdPh>$v?HG`J@T>)a8yw45m}%d2SGK zqAB1dJO!b3dJw!b%Y;2uw~q4Miw5qA-geIxVEh>Y7Xmc(!R)_aZ%n?=)K0+BpOoWS zPP~3cD%xc6R|70EdY7Qn}&yF0rJI&=>=v(uvX99-ugj3*jkJ=M23qJLe(4a#t{Eo;@}Ii3BglWTXvDfofXhwpye)VN{MJ*+QZPd!rbF< zK1X$}Mb>^m8y)|~>D!x$>&zT~XPw`2{tR#FYSVQ1RQ*qIbUmB0TaehCR^}@~zgr1g zET_G#L`qSECte)0u;+i%{RqZVjF9NLt}V^EC?Pq$y5di
    Gor99U+z@ii` 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%0A}DT~r0poX zB(O5WCE{n~C8F=6Hi8fz3eB7ZzCyz%|C0FyK8-GZ8!6p;>?+esrB8pPB%MF<=CEJX zvtd7^;t!xKb2L6(b05iT6$w7Q^pk*M`hg6!Iztkre-q4y{UB;I-N&$DzfM{9dDuLa zmuYhO0gOn-TZ&?EDG;ci4Z#~M2Km+!T1Kf zueb2DYtE{EUvFu~WG@_4+l1p)g{!b1mU9-IBV;mvV`to38Sqq;HR9qBRid!`KQ zJvgXs5n>_k#Q@#dYZxpReiv&dqs=@z`uGM{&F_#eEsYZ0#r9H0g#sA+z9+Hk9F=kF z_Z7dk({JSQJBKcjzk6nM>J;JOiUIOYODTc)ii(DN>iuUuu%=r(qCX)CU9WomWYZ_< zD0%f8z}z)?fdo;hq0yoqy{o#g!^ZM~K&vb;oqZdBAfD1_S_ ztcd5m-xKXFP6PLGX?YpD7hSK7^c5uZ76+!PYj&@m14CXI;%}B)~`<=W0RLmX?GEvrv34(1r*j_Kb0T?0C>yZm*;=Sf!;;$x0 zjqZMlmCPM?p|&Tg*2VrgFrclp4>-lF|J?MoQX=-lJFW%POmM{yo(kVBsMD)tDV8hPHbi5_AQBI}zkjQVwIAzgyMN11vL9QN!nJ7AZMna59?i!{m=$lE zSVAy_M%^o+^Xg;?Kwf{*=4mS`Z*eQ1o!HJIN_7-VtwgY|IICR<2t!MKa!C;v{Y3d8 z^{M~BTMu-Ss0T9B=3H^UC;G{S|0k^;s6{s!46t8Gr-7%XNc%g!Hu7Kvxf;s&kDgd9 z@kGvB#YLom4W9!q7>RyxS(L;A!XNk{nKKu(ed1RLf7QgWiO+emNJjQnb3Bp9*4`0} z@44e{mGa2=&MF0C2$zB|A0($|or@=CF9W{J@6wgPCNWV(zx&7eMODpytMa%4b zz6sRB#pGpn_T+>w?0jjd)Wb$R^^lkRUy1Px`?VW0%Gc-;B4|cD*>B@&Xj%^A67(;< z?1{b1n_n!zBM|SDhN8I*-shn4luS0)lAyEeVD;qnd3j4B-e6AoHeQ5Dh|fKWcLY`F zwLo{X@q+tE&joJlJbu2oFClz?qG&4JRKN+-x7_0w(uE0MvW9vwgfNtjCWeW%?2kQv zIWhn?#a$ls{otVTLxh@Dioeqs@}0>HyF`tO{8Z)fbCR(z^F==mMH0N;cU7UVJ$V^& zW#F}8Bx&IL<7B@Gkw;RiB%uiwUIJC&)|wXk-(7P8hhXi2%HDr5jJjqU-J^Ti5 zEHy}?OI_BS8Izdk3tbuWvL`UOnj8bGfkdwf7Q07&;BxZ!14g$-6r;d zS%k{^vB(6 zR-o)yp&q;JywU6bG3mqOKL5@`)_|5nt=r;!C|=tn0e}a?qqY#EUVr3uK4{i#s8TK) zg=>YtNTy|1{kQz(lvW2eUoC}|k4@LXg?UlP%2ufP;4*Tf?eo$Kke@{g%A6;5{+*U? z^$izU+Da1D7*D=CpC$0nWLVUz2P7c%X!lG_mi?i(eD{KGU`zhe-3icM^(084#!NNP z*Mvs!_WV2VEz{dB9WNfW0~ULNcCz9&=l(EH9iQY-!%CG?`6Mf%yh<5r{)Uc=f~3`H ziB=CTi{p$sa~GiI{{n*aO1_m)N9F%$RRL3-+`y;1Z9 zs~ERzwRQ!im3!?&`Qw}2#q^#3lr|Us36m2FqmQX7#nOANfBuk#qC%F=@kS?0VY9-a zfB)i999dUz%o&$KF@GmcgyDZ?KA7dch zx({YYm~0BN*B8kS8gfEQogpi?B3tt=%Iu?%JZ`yd*eQj(hMJlNk=p`);x5C z7&#@uvN;V-GO}W#&kpf_Yv39CrNXm>(0t@C$rV+hR-)IkmKWHYLRd@>{dHHX?LGYO zi=jR1zvQIJ@pqnk`|jx;M-wNXGxltw`AZ`H9-%%)zUg0%c!g{EzLEcAb5D7F>|k8+ z^W@@_k>c#(z>)H!&})HSXCBXYqehB_b7r*6e$_-g+}HJ%jv-?iP}@I6 z5w0a}+2emf&Wau;(hq&VW4-_7J|1@D$(Gc4FYW_z8yH`W1oe-&k&42cyC9_N{f$kL zeOG{6M{~g+cQ{k5FA8`~1;GX|Ns{6mcVsblk+qV*>=37{Hi=lM} zoBNDu3&LcRZRhft7Z>SFr=kVhXAFC41K~;-f?a(#H?ExTt()Qk4;U9gwe;#8*e1K* zzt~~5)4D@+GQ}%(ScEjBffmgCZ_d4IAEt~>R|Oe9`u%qYR*Y_KuU&1 zdiTJ@dUqQUwk0bsfhan9svh?M$SLkesuy|-QM_y`mGd=Iqv7l@>RBGfK0Ep7Jtf5i zF6WC3Dz|dbXSWy`c9F^fM8Ootr zyPSvE-)<9!sQ*31;U7#&Y~*`)B%3n1ciyPe&@VTNqcEldC-Ph-i0hS*y8B^5*w*O>$ASI% zGaXh^5E!5k1C(0JSkC|N?9Yd2jXV_RLCxPae#N z`5kwal#PjCz1cs1G@C2sJ=(pTJ~ViDeAV;LPU)(Yr>KW|drWDFiw8>+ai(*hYW(G2 zL2*_g)yY<-3rDVdPCN>_bI`97kFx!&=7eZ)MObtb3(u9ZHLa|Tl(g4bS&FFCktQXR z$&l?t-;vy~-SG17a=5$P{}#8mi#40Pq7J>zs^LyE;d7tdEWb#NW}pLxz;wi?rRcm4 zCh;a-O@#KEn1!NpLE~kUdMi}RO$2IKZWS!G`|Sw;&$*%K@y34OY=5hwC+n0JHLKR0 z3tMcKgNYQm3E;rjWILj3izzHUrlhFaC_+`kZ`0J%CaP;#scXr5zfFSOpA7v7C#K*t zy|%M5MaK!<4f@^RU8>jo49^#FUAJdLa4`-9dG}%YYyp_~%|(|!l(G|Cw+aFu&2_Dn z+x&Uz>|Gpo;z8t`3fBd~Sv@+|7M>alnn*H#&zLR;xhyG+%tb+e-gE)N)6Pv>QW;br z^Bp#k-5oa1YKOk$>itdfwRL3mz*8#RXT=^onp->3o6Xz(tpSNY!DB*dmbE88hJ03j z$Nj_(*CDWfc9(Fis>#*sSkz|aBkts@tnjG>^f1b99bVDoI_p&j@2o!FxE^Hj{FS$;LRsL=caQ?VeqKf}9&QE%Z4=ioA&KTl9))m}*jJsSVoEoEsc zx3!n%;4M2Y+yqAaz0Z}R`1?EJLGWU-pffDUII}yz{azdp?U_7n zui44YPtltpUAdd*qthG_HNR{!GDc*)-s`JSm=O1B?aIiecH=F_oKN?bWn2fMV5W@2 zk>gd@Y3&_C7LEY(&9tSSPxgZLxTYN1zc;m3;T4kP3^&|=wQYYIlBorH{+sA0Y&tNr zVdmf~+FgAiw|*wAIP;dVy0*7DIzGReej(5B_qKIzME*EW4^<@?Yh|BjCBA zhF^HSRdob_@^D7{hX34J$wOoQVc2+e2LI~*;R0{%bNZ9HU|s!N&O}B^q2uq1xh{|T ztS(v~d8zMz&csA%oIlG&_=?XP-7P|hLG$sqD+fb_fIoot;&P?)6b}abxP~I{WP~S!GS3TWT#ZyR1Y5-h5){z7s9(-iYO z0!K&C_(pL_y&DZ$dC%K(5)?Hxu1({sTnxg~zB?Xse1t$nt$orBLuSxX&;@2tu{dJM z=D8-bD`Io)I{$~0>-YY&Fu7_}a=L=AGWSwPuFrchTDoa82&SeVhE#P4Ltb&Dpq+{$ zWqZMXSW`=DWvx4L)9d$g_3vdmANDiYY$sSefJj8hmC<-d1<6)w{rV7dRmXdLSwhmt z#M{!+rjI*k^8B{F30SC^TJ0XL;6md)D#|MY;gN)I(ReEtlbM++kE>-X1&28wL@*6} z-@c~fd>F{|AR=90mR}aBqUx3k{)4mvZGW``ZTlszI5(|lt2}4pCSEpXAfD4Zg0>SZ zYj>>loi;A@vvg4({0i?+f`-jLQk5#Nna%E7;98t(qy9$0C3!>;E?OZSQsXK7=)t-c zMPBc8%vm`1MIHelFxzWKgf!0Q;N2A(zeC(`h|w}~Je<|<&s5D1>NE}-FC#4p938KW3v}Le|(m-&RKS0r%Jwv6vfnA=~(i z9$21z-tUAKt{{!pvf37H`9-d!%eS5#5o%2J7~8rsZDS+kpZ_X&djLFiul;>OrWvx% zIRH9&%d`t-HEz{3eari|g4O4sZR-lRjRi;CpdtSW^8dozKm$5dx)8ff;$>{ZAeeg4 z5FQ$+gYA(wO&cbSp=b0!oxs#%o^2pb)1xw;MAJrKpdp({iZ;>uPgOs)qut%C@Xymk zv~MC*ChpLn;x5vVTT?zu(2&K%ZnW9OMo4V0UZgo?ko^->zHX$Fbyt8t$UlHn1KP~4_)o%>4&=H5a7V0L3aIedy1u zSE1U%1=e;i1db;;#gqNdK9%>fO&wlmH~@~DA7f7*l%A8!MCYD;^Fv0IcaLgkdtW>! z9gRpf$sb{VRW}QM^Ls1PoLfdiM5*e;B4kHV5oI*0f;NLp7wJHNVmc5Zk(GSi)IKfeoTuSnI6#vX?7_G{=6V`9&-8oE$?x zazi>5xE&@1ZHcZIbLdBU)nx&js!gD3i?%RuwzwF!pyolE2o8NfO((iAunW@=l4vN7 zb>+<^?{D<{&lN+1F4%;oS9nUCmAI(4$# z7F#CxV)T|jq)qQ7xanq4+XB$0;-Id%V`7esm0se>BUZC`?m z83my+C7Daki~8~4rVms_g{(;Lv7CK8ID?S`1m+ZLI~f$|MW3>BfUtE8#5o!kRHrpn z%~K-N+kcX-1OkTXyxi`uyG+aromierWmE?#Q16vjv*kZusSd(irb5W*Bx%f@I1-TT zt8>20it?v@T&qfEa-Z4=!tATNY?3nUtL^6fZSDx}ta?5;i6J!rXIaJvr&zy6m^+F$ z)CZhaOJ1>C-R%%kuzHQ?VqA>Hd2@E%SJ~YR{ZS%VJ3#rH=tDLm;;w&fd&Op^0-ZKA z5VKnKROzsI;R9-56^zd}|JsII_09MW*h^Mm#7(imHh!M|>z0CkAw^WSkywp+rFW~Z ziaZDi)mj%FaA9p@x{Z?l5gWkoj^Kkc`+RD%dt;S@KeSDSP3^a*#@go~#>gEHiz>)m z5~!vpWaZ~M>UXWIp_hcYJwraho%4>2$Rt z$jZ_B5%ZN}ra?j9`jOXrv5|>V6Qe;D#z{KxFZ0q9#h!Q1V|7%ABiaNK?}QdEtI@lP_N#S$N0XRe2r+!&=oLSyd`$3jI$(eQ*xP*?55H)kVlmG)3o-D1R` z?S%R??o1bMd~pjD2%rz9>d5UkocHvK!Q*^eZp~iEs z=lTY#;jVDVrC2n`WSQrgvd}-pMb=2;i#@AtT~H)D_%`4xrQQ4mPR%S)jQW-U?kJsn zu#+COv_DJZf+{F!293R*UO&jK2B-#ZZ*e>bY}t*!ZdV8nw(>ynRu6;5qV3jUFKi3& zS1mkH$J#l#$nv_8V1!Aa8p)<`n^Jd2bwlaRzD{98w+cH2=2PFDUoWoS?S5n=sP;$0kcb*a*Mc2@Iqc-X$L12waoU3K-`W)Ale1ziL7t%EA zN#-;(Ik=K4nZTWWX}kwjeCWMpBtJo!Q>AYwd-q4ZHiaWfYbe242vZAggf3iQ@nywk z8Gb(Kz|IM}``lyqg&f?yl{$Kbsk%~la|DPtR!)^3cv`5Fo0d=HqBwh7Q9R4!3hK&- zj|*#Mh=+Fe(CD`wfF!E0P6p2g%za`%2&<{aLZtEL5~6N5sFPEzx?M}{$*im%Uwm!% zNdJEmQf*Ml$v1}^6od7vP4n56ZPt5o3R(=_+SKUpb?OF9R{>?ht4gCv?ox7 zh9xyr3ZM(6vs$m-2_9!nFwVu1A6b`d19CUQODw}sefs+C`W(3%?dBAmEw1=(vXW{{ zu0E4g;5>EaxAmn0z27PkA@w63M%D$}n|6hG2irn?fQ9$&v=qtSTfRo#B=93fGru_% zc6e?GH?Yn@2wb9c%M2Gwezmg6G5vYp8dYU$y^E{kU__?EHk=I2)*TA_b#pbwuYG>6 zt)Q2ZdWioZGg2}9M=ql+u#|&2E6qP%42MhO;GoUIKRP%{PHVcWwc;sfgS%{@E3YQ1 zN!{LyYWr^PcE$JgszBq#_W#l7LaS{@yLY)8_H4FcOmv zy)N{APk6$br+T6```WdCxiDF;4zjFKCsWb)rOVf4&+(L2$KWcf{r($B+8LsdP5oun>|ibK#5TectJOL7_-jPS6&2`j z)<3BFfWXdqukiYS&ZPQ*QFvu(v(Bpsrgcu}t;e8Zw+W(6Q(h z7MuPy2kztm<=HfM@^5QUpVb?1@XH&-DXm}}gpejSO>xdH!ykXQgOfa87hiUPGUanM zRZUPl?LYmIdVxEGTy>>$hn8rZnhJAKX><3xRX%vLYz)1wTTGI`X&VGkH^UWBQ)+!+ z;2}y|(5^TwL#`i3kY(RkH*(Mf>lF!XuBl(^$2oDUiN@Vk^<8Mm zG_Z2DyJsI0Y|E)0+sY9vpMWY{?Ii^=L7njx6V#2gTmW274Jlz?wCz&90y3^>C(Fbr z=4{XE!V$AWuj#+Rw#zq$sPE8FhDW|Mk*~$Gkt7~)wv%7j!hpQ(pmFLlMriT7lnm>1 zqpqWyc5pC78jqHsS+6#?KvS<_cCXulAvfXjs?kZw4#BvTvlkY6RQl$o0?amC2>e({ z!_fyCw@JhWGaDq{Ci=3kJD0GphpXFf+{a2WIRv1zXp#dv?{aTAH|Z3C`|AM2B$ig3 zeeA1ca=A?X=y6^HK=sfrvT+V1Yl+64JSrbW%axCg=7rW?_C^KI*cJ+O%cLgVfzMwE zLwQvnfSO7N1GNf<|Ci>e=PkM=V697GPz=aLpjMOEE_^`6$O9@uY7)2W4yf$HG4A9= z+4!-heJS`Y$2s}krYQXp&b4GK@MHDMYxU!3RFXEF+5iI69^vx7OOK;f`Tp;6h|KuT z;xqg8xoHLuRFp;e$f!r@^YE8SaJ->RATGIDNfm2zI&a7th%+p|4VQY^N8WHvNF|et zLj&eYow_n+7;id|%EQs>4S5 z0gR}Z!6-BIy1!fQoz##EZvd~k;qIIcq-;>-<$J5O`}Us%U*d-5OR|~z+xA-;0i*i6 z5^i>ZnH}-TQ>MGDSNe~#I`l}F6mV%m8HI2%S1A_J7< z7d%9v%dKq$^=AP{)$)F{k6s$s-dY!RW*#R(ERklwoy3X^j;=7MHwY11xU^8OO}+&n z11472YwbpnTLH8Fg8{dSR&CR%b8C%qv@*mwWct7k#kpCO?%-UDp20X@4=OU>!IhY) z;7Tl1aL;e&tgYX}^`SsG10qz#UqhLVQ@#Bq%+`ClGnl9)ai2 zSOHm9uTXL8E?hrv1=JP9wLwMp4bQ`AzxdQZ2uQC892|F-I8}F-xLrYot>JKqFv$FN z5S*w-OtVcy@z$`qfJNF_=w!q0*r zGrdtLqU}6&+mo53u)d&b4lU<5oCEwzse9pnT}`2(xToz75rfn&l;(q@IKP)*h`lJ} z&$=l##IREN6k35cs6Fqpx{E+Q`_|mYI2&R(hlz`2jfu;)l2ovkrTtd8fL$FpLD0kn zTW3SvG^f#)f;sH~o3d%NrhOgQg{=zZ!BVyROe0A2B1yk)Tbv4ITWdod5^74ZAuimN z3f?KutD~+obyR+-4*cYTjSHUB#${~WYReg4K7CwIg-%k>X?HcZ-*UFMs|8DZ-8|rA zDWDQc6_{#KP1J6bnM7;RQpbquY7eYHW6)l*D?NE!VOP0rY*z^m6f$Usa#m4S-T!;W z25N3$X}8rZLrvJ)X&0iYV8b;RLi{zCrbM40tzw@bobcQGaA7f-;GwkIX*NWWuT|YP zz<$fKtWlX;Lq>e$2FcJedZI>gX%NZCmEg@>Z)Rw8*$$!7r7v1QxIHNjsE`RtS${dZn;r0o2uW8VC-pG635A^g^ zUG{zv8&xY=#~HWS&V-xjlKJubup_S&TDr>$iU}iL(`^5e&9l@?z;!pLkcsz5#yqZeu?+u%SMVKSZ%PCg=AmzSIqKuQT%1zuzMRT_1ht z?_KTQFYDC4xOW!_mTf3MDI zud{pgHt&Ysp3?eQbLo@xs_yZ84g9^&*G*$G6hkd!#uZ;qE_#m?{|9`k7#eM*q_^^S zNI1vCxYMrj_WGaXD^3fs3#+n$pDa9nW|}LEHw|sX6gZic8N`@QTYd@uSGudo>P@6YLC)bDYs{bazedX;{>qze;L+II82oN%=$CdMZ* zZE(7d{PMQ+k2m<m(}q+SPW7#QB!`{(m8(eGqIy& zfp|%C;!mZBroH<0&M~)&R^}knrn1u^)BF3m9SiOqO(S7~>BejNK`f3}Z~~rJd$#yR zH~QkKCZ0y`g&MxSY(}hQMbGS>ifyYMc1icQlch2PHlt+3PcY)klRs)uJ4stE{R%%acn{yv{y$;WK?MtMk~O{vgz|(xSh%ppbw*RoUAnCT*?W#g!S%z36TJ{m#N%; zEO~Z)VgK>T+g;^{&*Aqg+4eDL34W~>qgzjTy&C(4(3zIsUwwIQ-tfljlyAMaw{{chr9K;Qcs^A*TVCRh9ohXUu| z{HMR$sf_{0&I8#US6mw#;PP;^_ib~d3}EuYD;#hI(h~eWC-*t&`a9FG0n);+sln0) zrg?2UP$qz-ee`ll(_4o5fkwjPs;>#qCwA3J6z!05=|pKQn5Z(yiw!pl*l;hpFFy^~ zz?D(68Vu?hOu*I;sLF0pU4A8a}F%btHu1=_fv44rwMObcdi8@6z0R9 zjX-4gCh|!|HW=e4P~~}v0Dnuz;Xkoe5SOhI3AGR(QoSN}_QN~l5lH$GWGbH&dFhHP zRQZ0rZTK2Q8(~)y6x0`O7HpF7A?n-JXL!n%V3>g09!Bt5G@?J(_@iHoiwEHc>3haI z-FsrBDmlE~{~EeaekM1};wrUB*RPP(%O(2#o~ zd4iVxymiPoQQ|!C`5Tz1Pq~=Pw2Vi-x?#PT|M1jB4~p2F$Ru4jL|AKIyaD6ABMxKJ~2XEN~?aOEkDNB66 z!6{pa1&=_q6KBkWhuH6tYOWCMJsq!V6+_d0t#JDdZia_NM1`AsRcU<#go}5E7*9Za zv6Bfgj%@qDob+#E2N;W^nv8ab-?-x4&E0<4Qqty|L)Qezg(TJi#ff%xvtX2{Ea)GRDb^F#s~zFuy8q$WFXaWTb0tn5iN9E)u*96 zmL_n!zW4A#;C7>h>xIBW2k+AmvwR?cO<1o2!3uQ;i?rkHVk)ijfD*@phIt)SUj>)) z1OS}_m+}xYF#+i;c>=#gamFTj9Z0eKJ{Z<;^*ECPRi@*JqlBw_;NHL9N&f)N=`dd@ zDHIEZ@HtWKbn+$@-09Z_9Gv~CWrtj@&_w+plX0?14kd_Fz|+XsjdgA}(H~1V2@8ht z&Z;62+;+7q}xjv%rZMH z)L$6~5?RP*-n;6@P6TiHrv0pSi6o!LRCxz5ns-!7!Qxnj``IomXn5mJsM^|!29-tL zEU|RjofNZSvPK0nJ%qMyUA_8>FLXATM1s-Yl_y#erQceTL)_<8r5hT*6D5TZ7lLn^4~1U+q+a{EqP`?eL^2EKpA$t$e{YSI5IuO zA71h0(vbh*9{
    mS;><`7>RTz*llER_5dD1F?k*RF90sFn5nOQ|qSMr)}YN zQ~XeE!P)7!WqGPuyV%F$pkaTASi-WiRtaCg@?=bU@*ulJ*RdZwqV zj#+D+mS&pA{))8t56EL`x77k>mUYUBD9-3|MBlpu=* zhly#iS_f_xVo8pMO9|oyUrFMHs+Ov_uMUm6B1hc~<_Y4Tx*I;K!W$Nf_J~~Do=b2#$T?JPg>tP;~8T>jR8>$HtS{}FDaFizJRo1$RZioD$0!ja=i zznEJ6{tZ@G25$NtVHk!8vIO=#a+lR>dwK|3GDDZudtur|TLxmiFgtJ#)R{~3B|dk7 z)5;4GSUS{B2BILw*quf4I3K^pug$~i7#P;9qN@!-NoDG`8gi6_G!B!P8NCGD39}uo zpbiG?1e^T$Oa|QY^YNSfMT`c3pqW!-ue4aq3vz2Z0N*?9n6gDvu=;f{JP z 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 LKfkWI9>xCy-oQUj literal 166829 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

    ROJ(&zzlxdr$?7hA1 zykhFgHkU-43-7r;{&P57*WA9pX6g!jteRPUx*B?8lYfjn?0mSItU*3_1u)$l6L<4W z-oO!2-UHL@U9Sd-$3;Tm2cGl(#?(X`|9aFmPY(yMXWVNjl?5K|Mnxt(t<|Swf_`>1 zoaybn>(U+w{p-+lTIw^o#yfuFfxUAlk8SHR+5AFcHK$iU=d6=p;yRXKVmkfUhGB>L z*{k(Y{XxS+F&j9|Dno-^a5; z)HQH6O_1@F*88De_frmI_%o=YMn*n|wN3@cMp5@aMKG^<$AuABxoS>bbzb)$%}K$P zMprgkEWsdDOA6twX!Sg6a_7J3NyQlFxjZ^-aY5vpn`oAq1d5%4pG+LD`7{kz8+h&hnpf(A>-n1c@@9d|RZLU-X<8A)96Bjc0 zgxE_AYJ1aAOMJtM#?lY@%J79!Zfb?Mem^0y#+GT&Z~Z6*t&E0ijrochcsi0Y`649N z9ls%NjI<`kEBb&ysuUy4FCd zZIP(wG~jZIx4F#A<|J#>C>wEKQvPu`y{{SKDE9h*QS6C9-5sqx!Mt#wKw0j-)ZY?w0>#@5`Y^d>r3%XJtqfM9hZE#>Er1ub?LlW@``Z-Py}u0W7k;4qWPrMn3bjBIFNtnG8Sdu4r zL@{Vx@xtXV?dF2ZmIP;#D%OYOoqtM5{bZ1pH^J78*0L(GH3=eZqeTSQzI8A?V6EsM zXoyTw6e|A1J)8fdy(_^MNcDP1fdYX-Z@pol!c<^j(`T)YaW9tT4~eywKMZC!tofYC z+WKvxVTTUSP>tv%o9e>ie-nPzk@M#+|MWRD8ohM@Y`JjFOkxgX+xm!zCEQd@G2&k7 zO`$EPd6B9bUGHJFgS+`Y#Yp6v3&>H)Bixye%Ws3O){33_HNtUA7;o`iijg$vMe0ZK zoh8n6)gMiZL&4;Tyf>{kY0|`a+ro4D02Or1BhBw>@gDRd9e?)cph^v9>?e!Xo|yqL zyGNog)IU7J-4Ag;_xa4AoGa?JIH{S~=7q&K4W=dYbKI+<#0q9y;&@kK+57Nf-`8}$ z2}WhTk^O!}fdrNp@{>2SP@49igX7?7DHr$HniO&_D2JlJg);PYWd?RV0Z|mHLgW*v z(8GbRN2%|U1yv23HyGrIEeJbtP)>rKy!s3^`=fzAW#Os*`DWOBNrK=S{n4IR(v1E{ zNa8XW%7$aU^fJl(zBSbAh|SpY--Chj@9%QSo?GjIT@_FW8XZ~#lVO*he=xx?R#bz8|tu2 zh&JCpoLa%Qma5>fl5lr1?J4$Cy%Em-ujxwp28F4m_-(q|f1 zt0C*xomQ11vjWW=NonlZE9=~xj_5|~^eDR`B8noR$~2yDlZl(1kvkujQFy zuk{u^p5^+tC2^zM6k{7h4UbsSdcPN1kfW2Pq_KjAAJcrx=0kf)DQ6r|@u$C=B+Iu* z0_BPVA)ZSvdcWC!HD$cm> zcYcL+uxtM`<$t|?=k!Y)F_8A+7YE6Y5Kf2Y#1_lq+GUr;A)2dLCMCS3DpyJ^qn(Su zA73)`KZ&Pn~O29v)(UOZpN7D_SxJ-I@2(2%{=P5I>&^x{gOFMSK@!YIFaC5od=JmMA}{ z-OWAB94#MvD)BargT9ULQW?s=`Sa<*D2}H&JuT+@2HX5ap8+!vx9!lGwFe!To$hf%(8LT>Y9xvHA5eh}#uLU_K?7 zKd8c1#2X++mK;O6`nbL#oE+mm$XXRRK2~UMH1dnhnI{>6{b5~_g?`z|+sagnUW$^P z{;>TWw9s(+7IJ&ZmF_O$B$SubGaOO4XzqKE<5e~w(T1gFj63uqxhd#+q|kf`ex0M~uUe&cmmi8HS5b{-@8T0+HO7^sSS?=yjwB5pT8=3|2%fiRc;UZ8K zhZXP@dXYK3vP*~%Gohuv9a|(o7HYe7_r#hOEO0h9C+_@mJxC_H%~SUOBB0TLE>yrekakJA(HK*B$Z1@atoCJ8Ta3w0e?a*2dCIQIL?Y-LfVm6KD6$;HO zFBC06_r0Gv2>N_nkwlwf(nee1ZdY zAxyYFz8sBG>=&EBcsQ%I``A$c+~#W7?1I}Cw{Jz3B9n8Sep2sZmSVHdK_kr%UfQVv zM?Z|a_9arPI&@iEV;=G=zk7lPr%?%(>14lB4&`V|Y;2UITG|ABIztUc2%dhrf6@c}YFHP*Z26syV8e%(6 ztSIeCEMlM3Wyr$Yq|3>?yZgTK(j#+qDLMh4)cbmI$zdOkjJ&O3U4LCf)n(#Irj}s{ zN%5?ro=T3Kwm6Q^V(LsfOa0Qk z8qGi8WSaovu>u6|l>^Q@>%T?{ph-{8S5ev;SfhKQ!5q)pNgWYPDwzmHw@&d9elGKa?y z=@{^_JR#Jr@w1=MiNS>_5lFF1>~E=>!Ih>wry2*~o^y>`%kICtU{V%N#KjRKCC{Y4 zjFvoG$r>#o9kF4s9JHGG@(KZ-u?bY1A^SZ5o@q$g$lccrRh;uVFwul7$%yMn(Ij`% zZZ3U*N85sRoKvhaz=mGN)^k*udgh`VU!r6rsU8U`N!9D8SMd5B^bq(k#1l-X{jScQ zz29kri3E(}wX`hyR~}HT(jJHTS%6LF{<8$yv&Y%mqxyhTNve7Nt&=f)&Zk-yaygBo zsG;WsqebjA-02R(P;>u?E5+`+zd6*Xeh{4?AIPZ-Qka72ms8x_k?$ED$C+b+v zd2fiUa%gqRKI*Mr3}IK4RtlHpSC4!{)r@=zXyf+W+pQQVKP-TjYw}WcNwOSx_1xz~ zl=u4`H8OEz1+?*6I)p+Z%1;%03@Ujzu(Sh-aY_)zh-qIHdMs_W1zz3Y;C)%a%UOfp zvwRoRnu9y?5|>`TVzmcrG9hOj>spE0cUa(8#^33gzPfME&R8qHBFttwgy2;qrP6iO zNN3|$C}moQ3=TE4>@L0ZOXkdZ@tqfht6~ld@=QwR zq}j3b?&PUV2=z9L@@&`VW~{UI7Tce-pjMfB=Rz>wxxu?xBPyMx$qf?yDV;ixuW+k? z`2uXdHHYIDKo#GJ%6n@Hqr+zY78D&<3rdDAqViA^r^<(}f3LiXpfb1v7j`voYIZs6 zk6C%YYz8@`ri2_i1MuQwj|0;W^vcdE^vZiVd{{n|pt5vS7dZi7r@U8v>T1v;vFPGpDyasH*CKt86pDIsi%Ya+Z+_tZ`_r374@a1s6&! zwqDK%b64ck4iq?alOuHkd-b#vzm*zRZ0l$r7J^0QX0Y_Nr81W0v_I2PyodW%*i{^2 zD{4tmcFbyij)0Zr=kzD+;mwPGK0Mwv&Hyih^}&bRAl_=3NT- zZstFPF9jTU9S1`NhJoj_<#fS?bwwtcVEAf$Sw$!D$R0SD#kiwz56^gPlXOf-+Q*8d zO}U9(agJLn`vd%qi~OALKaF=qSYT==d0Sp%xj7+GWFb9GVx*?G8iMj^MvP6ayZ2ZN zb&>=TSIdb*5ZIB1^ev{IY6w&R+-dA+XK2x!$J@d=;12-wn|i(8dyXhOk^93Jkl=eL zuKkcEmM&Y~+t)Cba7qXR(;#8p`R$&v8C+3W6Ox#^u6Egj*H=**F;?MBE~_tUK{Qw? zIFN&0=}i4?X74wx5ly+AohU2)R~4}{bfWKbIsHR+mkFGEdV9a4bO)_h?HFoO>_z`v z1i%Q2xH?H929Qu9mPXX^2fIrhj+s3>*?6I5LLu=P2O}|)c9vNRgTz#!O2Lr{5&1R_ zwno}6BMH4o7=D#fFGx)a2JLaU0C!YjzyOT}R0|bx#0gXSw%?KxLiWZS?o5VTi8Q-M zRLl?7&QbA zJfp*#?`=f6YT1dF&^Qezma(f=MXg%N5R5BMr{-!ec4^9=r+R`k!N_0wB10Xt%N~F*NJKwl+r8n*IT-Pd)8ZnWOHv=n#vYTlYdXhL5l z2OGxz@K6u1yD|35i9rwzC3GZGW~{RF&HCJfLX@7yv+VyL6dvCacT3a&%k}>ObgVMv zZIKDh1J=9_#scR2kgy=h8myI~=Gk|psy8$zU8X4IG zejMp)Jk!^gf`9%$TaxGs2G&nkSCvthTo-uu0<1x3u6x+b3=0qzuDo&~*9EMOKAiB0 z+?;j>tny0I+!*dnJX+CN%vyQ%IROUTnKlO|_kzl+I}&4fbB6Vtb|6Ie5KA8{vI&UG0Z&De zkWtFS)ieHt3es0kXqr~MqYC!?TnmKsG)y^)Q0h0__-&Gu@r=;$2)ru85Z0S9x zXDg%K?Itm}QH<=X5W4gJ`@(aN@E77mR!YPkG2)^p99claMiw6Cz@8`FoYJ8oCmOfh zb(J1AQckxksl39sJxiCgA;4yt8Q}n$ce`yDQP~vDd6}OnklHhy#CSEb(IT8BPD^3Bma=Cm?8M(dwYQ)lb=4W)`# zhI}u&Ju7a3XLUlqJsUQ#gL78>#7TJ5(+Qz84(8>^6JaR5<%z6KTEqazB& zULsXVgk@ceswZ+5HI;A{b)A+^f@JW@%enB%T-C_0;|MCkXg!y6dP6Bb1inR^6`yXd zv37Gsn>}q3P*yL;E4!~pFSBl*yYX76mck(NmadYlN+_+0+purP`Y~gob#f7%tdk`A zW9D?KqZ(RP<43zB(J{@)|K_yORQIGYlj8N^Gc1ikzpi;`d66GVRXATPcg=n=UiY=L zD0hC>C%c#ZGFKN!Bmn)PABE3;)oa}dY-=Ck?zRT4zYX@_}O(VO1k zHF)qlLN%J+gBFakDZrpdjE=qs808qSBDbV5M|a+CJ??&9FKPN0=G>*^L$tzEOH zkq%335|LYK;SBq<`-0yyDM%rvq_gN7Fp!)kX%b;)EXkav&zw0|!Vx9QoOZPQI=fu? zP_;lgmYFcIeH<-&D^%hefb+kLE!*EgAC5OARp*%R7ZtJI?~7)rRoYDtHPS_^1p?K) z?KrcVe&b~2J8jVhI!38dM@fLtWD`{b2lZ)nT45gc?M~St*TmhdESu5!JStFJaZijq zPQR6wDlV4I+_Tfw$NR@KVwwBZ$I0#>Hhi`+TSfY)EJVtmwqmyA=S<$NrMjr&kol?& zT!bU3YHaYx>x$;v(#L&)$K&qd&WFn0u1gn7j|aEz!{+Y&q-*jh%3jWqbS&?s)5nX@ zhjW?x?c}Ay<2X=ZbFkC-d#1(X_U)TJ1bBn6t%gf)uVwr3M&R)xGxYKLaZ~2sRQm%T z2l2({$?cgmm+pJxX5&w~CC|VWp_kQ<&5xJIj|<-(B9s4CoHLkqi!YzkCiXZ|G4>!| z7&7fVJa2S)465&KmhpS|Yx=Mp`q0ajE+h6^dB^!k{KmHHkjaE=V<$7DVYBpw-j=By zM!i?^^A4FHIMxDtn-V!fWA!k)^mvt2Fa$O2{|}k==e=L(jRXEl*YUC3b zwdUHb`6O=;;zWF{JBF^wIPK$w?>_1Kj8n>7}O#g zLIA$g^V~Z-_w3<8wW>#2ezNejXmp}!h^Fp@+IgbTB4CIs$8V0Z6a$0C-UW8OwlNI! z7<16>60-$LYNVhy$r#q8UMIpWOr^ndsl$X-Yj?2hy&GFy9 z=QZG|C_QnVr!r`J_d!O=Hw*hOYrHZ`V;(OiA1`)f9yd)N7G)lGH9~I(Wxj^CKJM%N z1dsia2wjlJ{2*4kOWwXLV>+txm!@+4E2;X$Tyi-!caSKG^=F~6WK@XZ?)OlU0B$J7 zZ?Z+$^~$9B@%vpp;otpj$MS&<4YRH_92QYT$Zq+)Yo~Y4+9OvC5#4IE6}VC69W2^= zyJRmjwupL7ZKQeq1Y*9q$F2!HPZW<_C(Uz9Y$>`M!To*g=Oa4jdxxh#d5Y+4*^pX@ zjlpXo;Pg_Ag|$+44Pv^jY!jA82(>V>%}*ss<&%Q8BZ#|`6lAitEnEUNbB#`8Ov{^A z^(L6_JES%R8KI(WHPPeYpU?uzsIQMc{7d}CLQTP8&CapH@^^pg*LA}~hgs%2nC1`& zGT5mfSXvwONa?;CDkG=9ZSA<-xSpq3|D! z3{PjFrps@2qm^-x+!3ou%5qYPT2pMFSc!8fzlVck8b41yr`46d8*>CSvfS+Y?RZe~ z^QQU)`Revm8S7xKOZKU#s{WV9PkHR)qWjBtz=U0;^H)A#aty`mjsR7wFeBk=x} zPGaUT#$OT|R%&CQcFCd{A)ov@`eu*R>Oj}{iU5L4a*r{;fnaV~-Ky)kJG-&1L)*ns zTH4vp-Hz1-(YyE(+fTh&l$?-B+q)wtx_^tR!uH6bb|SL!_nNbsk`J|866)L#^u5G=a3_!=G9{ zPl^5glVWO{##=Bo|{ec`}`ZxO*GV};F@rRxEu+YC7`-uX2%QDYTy<2dG* zpP6;E8{i|}yga;$w5k-$A5vU29dSEPLX~c#+soS2e2mZ6`jiRUiNjfDa__Z|ljfs# z^0dBs1$t2_)#yE>eAmTn-4DA-+T!%n!fWgN^o9_TH{E-Pg$I}Bp$3lelVAfGj@@8_ zN%!mXkZWnaI}9FSGvvXv=gq&O%J1 z{oW zu$k1V`2G52UdH#TBCGH$idc4REd1ieey=vZU|oJ3ll1tlt8?`fN~mQ)aN;$}*4jwy z%V)-LET-D;>yf8Lm_aue42EAb@X07_3SI_@ya)h^6rEDL22lmYXLf3gV7(+=)$ypc zQfP~44EC4CTK#i!ek*~9L5ObD45WRxI(7bF8zFXsWw`soqn8W%3cc@OKD$q#gGcgTvR8CEDpICY zkn#Er>DfR3C5fV!HdaMGW3PjV@mvJF{Enygc2-=!`~_YB!BrHOzS((5?AL?L zD%HKrl2N4FLd;h{xjYPdHyH~gKmsF%b4#b|9G2K69pE}E_2TUyeNMhXXh;9LYIh?Q z-g!)F`UU=eq_@Nf77h7}LQ*J=TrG31+4H;j^=J&GVD`-?AAU>XJ(U&(pIh@xmv_tS z*PtT45Gl9HKF{XzG056l=Pa};!F6D{i~Z^}Ztstu<5}0QFIV>S{_lN$>c(z_a*U@V z-*?~@;}j{q1f9&&p4Yhgt2#v`Lpa%2afV6I_2-L`Z}t+Q9S+H$I5QfTGp}Dc?{q-E zuL@(+zV5iC;TQb2_NewD@N5}g@#V`I&q_HIV$Gj&OS>0hB|-vx;nhSVS-z-+lho46 zrho0h>~~-dJRC!}2cEPmk*VvG)O+&{oq?0obt+B9VxM|zzu_6{bKZ^Fe8Q(>$@IfP znRR8OX31DwE_)I|ixZ>8ne*b*dugKrhl|$c%E+74xbNz@p8veQ$`~a*HhcDzH>_!IhubGRFQ>iLiPEn~c%|K^0fJ~6F~@SlbFbwD;b`I6O{Mv%;7|8_Y5(XOg8zuKrm zJa30hgz1|v(o!Ov>Fi6BAjwu%n?9yO=N+-a#ITKN4PjLaMx;a^EqcNvo4Oo=|XutPXU{` ztXS?D9-BEqgqAzzPfFcGA&Mw)bGhqi5k+5xIRUjBJsXwo{a6_rLBltPg%h*`<$!2# zf6E|bcgHRo+?+*ZNVB5?Q2Y?kg-IX0$`~POp{enG!&0lPl6$CWI(V{aWEUg~jjG+d zDzEnvPZEx-akf$&0-u;F1%;1aIz}(i{s`#0c5IPNG(X2Fqv>eFw3cqEJbXhRZxk zrMdBzA5p8yJcWCOQ#+0Whm<bAtJp zPqTFTb+fcc%3}`A3I>W$7`ZqVE=eo0@5ai<&s3hd+pse(Jb6?rH#Y)NF|?OtmXaKx zm+wSGlhq;8Cl?}F07(t3F|&gCH8N9)7+RA`NmWlQ$9(m&Y2X~Z)Jjrx@tWdnK2Psn z|A3;%KjRnWCk8Ifz>2(0>q1YZ8%`rtj$D9zL7TV#Imrr1lOVM{5BNrdh@? zWzI{Zv+uL{e+&gLIW~J{^G6K@;T+30YEp~p>I>EOa4hXfrM}txZ3DqeC)gK$*%@#A z62P0GcF0v5tv#8!EHcylnO#SUj(D6|1Ghd}M?(yKj>#!fJMh+SeKvp3K=#t8UMs<_ zoe+C2KOHDJv41$s&Nsch(TM_BQS!LKf(o!4g@QY3(e>W4J{^{JGEV-^nwkY^u%PasnV%6E|YUow|f$x55jmmSP7xoWQbT94le}Q!R{e-kEwC;x`R4#*l?Yth>iBY+9+G>H&S{;EU_HO>;llE0-Gs#&Wv%tHo1R zL!7MU!D_7kAuYx4KaocZo&rlioNR+ z*Skd9g!fkOd18}U9ed`IK7g$gKj5#+_|9wUAZd#OmZcksA6wB0q^0fy zf2XjAe%iihb?Li>IA3Oze%f!@!4rFFCYZMWrwR)#^!8SB2=3UYXzl##pN=(Q4Yhy< z$3;PXHDoabp=E`nB)|QuXNBY!rOx&SWopguFDL6{d;2}?ylvF6LgJ_gm6AZgNKKda z4f`%rZm_;`tDBfsGduTw!cb?_jDj`8ey$&5ym#Bks}NJ}b;=ZdHsSN^Gn@>4y#aV3 z*2f_jDHm`MFDOM{Z!OO&5^R$wIBodqGj~HZLv`YK@}LzFftA)E6&B@eF}96{ok8;5SX6iA$oSo4<(qp;ep(>KRl6SmRb_#>Gw zMZx9_;0;L`%z=X1q*M}{Qn6f0q&XC~OsD1e?#XZ7x~uRXWR6U-taVr1iWUqA%Xt4TRbNGm!^2&G%v4aP z)S}GUcE>J2>j>%(1_hQE)Lo&C((adY!Riq2fAZ(5z)G9y2T-e4DUiGNXJn3Fr4%d< z6Di~2#9mX7Ku1NJL(jM&7zf)Z>^_e&8*qwe!;^_q^fjuiv*8+81r1l_Vctk-0tH*3 zQQrSi2LJwn-BT&pN>Q5Ud5^uNM%VT|e&dBSf9>m$p>HR(%!FU1xlL6wV0O*h*tN)d zaU?_mw!81mdb7W)4zWv=PP9gx2q@Y)YuEgNO?kx4KE1Hc6GeI2s6U<44}6T9pmn#K zhlG2(hy8)|w{#or3e`^lQOSMSl!240@AR1Pey#ID@ljI!5bXZ#$FTtJx5E2$N7uqd z(%cP*PqGSIM4XB?3pRDN zH?VUa2iV(vyI%T4ZJhT=Dl$LOR6i&518!mMc!$P_mX zL=AYVfVkQ;N>U{qDMns4ZD2|Y)Cnwo<5;7aj`YhrPAO1~Mv6yVx@`Wlqc*tnqxe6W z`A}FRLJF4sR;dW7E%(`AQMFpj@mO=pKw}wU;K<}z0B^Eo(Q@prP^kirAHkch<!LhbARXP%EME2ubD6%Ae=f4#8uLfK549tP3F9B9KZf)|4BO| zF^zWN{EF0I6C(_CFTXJMW?yiHB>pN-g4Ey+V*MR3e^dr{QneES4m|s?Qd)i6!&SB^ zeLx*2ZV?50pr`9#+hvP6+uP@J`gc&?SB{}lfEIXW{DB3(PMAQ&0*LE?eLP*DZw8=6 zogA+m1D~@t_=tyDBcab2sA$MrN|^gEK?Jn;(rq%ceD~= zbv1~Gm(-J4B#vqBXY5%&L(*2R#KB|KbuBts5q~^vf08^$elFIJhZke$SUA&gWhy6hGm+vPPBeJ+{-rvHHSRC%fN|?s}k}fCOYo5a9lMesS{1*x@i4F{R~QN z#`f+h)@GAWNiUHUc~-Scs5|2=WR`>>dfR^F5^D9erct1!>6B=MvK;y{bvJ99QYq{E z5wl+2w)}VXd#Jla@O;R5L7T~^txxJjaeD!1c`Zs}vS8y__ew7#MV)zVOMRct#zr!l zHASoWy0YX`--{Qa-0cW!_n6M(iTDFrwkNdLdNkY>j!X;%ZCB;$I`b+pny(MvA1LN7 zr?sT4>FG3$H4?4ofbh7k@m*f+p8#%^0!M+t9LLa~1+7;{q~q}9uhp&jcy+%~Ps8l0 zI~Nr^r83yZ;j0~X)uobF<3NO5bbe?k@|@thws;G5t3xsW5T)oYMWgTTESj)}x--O_ ze|QHV?dky1m9PQqh}8e=i|3(lU#es1l%mIB^2cZMD&BOJU)I~>w}2;fQXP+(Qj7}m z#jGBJYEXbcRVt&!@%WVhIXJvj9^4AQ7TvGv)K+jkZ20=8s#6JRc!xpJDOv$7Ud7pZ z9^mL&2~g__ny*UP1NO_=_p3PA{tr4M6)8SMn_B7QXo8&~yZ zc=`Xs(^tne8Fc}Rf}}`yNh6X; zX<8Eg(T|TZ01;X}mSshWOihh-4>JIl%$CdOYg)pcS-|df%N#TJ^8EqmQo%zEHj>lwoBPaJS zKKgr}gWHQSnKsv`AB^EJImg)KbB7%PR%@^TXQwTPwZ5h%=HSY@)Q%4x{>6>|I6){Y zwSv`psewzEy@QI_8m#RbXtimJ(k+Zpe8E$Sw7-3d9Y|dRT zw?|U&%gw%k3_ur41i1S-9Vqd0?*T1adc6nXOnqkhF*h0F59i9~6>9*&+ zfSx7lgkC-K1MN(bBMM>tGlB0Zz1%)0RJi4P+JTgJi^P*Ugu8K@s>5)? z%hM8~%Yi-5_Orb%W^29>c7$Ki?fOU)bSU9UNPv~2|5qoh0CU1r?+I($YT()EB>}c6oi%uG*?oTU4^gcx(X@&FMiekO2VN2Z+rTh&i@ewp8Uve z%IKx@RH!IHoV1}@JF8J~dz0uLS zVWBdZkdKd5H^csOwso<@sejROT9o|neC^Y}6V>L^psT(6w!mlHYYzQk->+;(E!mB{ zgWE7r1!mQrIOVocKcq1r_{&ouFjn?vB(n2hxU086Zb_t0{u+yaA=X;riUHSDMh0=) za=n;u3k@;(WQK2yT~cbuXocRW>ZC?J775;}ny(lqI8NziB%SzIdJ{aSjJ_dG94oyE zu2Y8J5T@q;sg)aV*ajN-dLFb%JO6)2t2L7{Dbbzt!))NrFR3cs^XY6LwDv!hC(dC# zYiF+IKB>0sT9#Ri>_kC0g!!b-9PFD*>do++Hq^PrY+H=4xX1Tj;`;&a>Q$>^i}=71 z^BbMXKQ_Y`T3}KZdN;Ir3n;9rP&H5$K&jym!Zbs}N(+bg)@-Zp91uS+POQ4kY=>AQ zDDRp(H#L*{Mc3y=*Z5f9oHAy?wt_(pcT zoa=|@vp9aOaQ>oen=j}9KYbI#;@LTcBQKvg zRk%~;5Q_m132U(}6UV4c@4Mmf1UbI$K?>(0k;cJLL)3GQU&=;OrYCv!Y_Q8wyiSk# zU(qPB1hh@i-5+97RMOH9vX!G=J?hi!AkCr_$IB0~^TjVx+852!{`kD~b^jyfTi{2% zWf>cW2Q;5@HXOq~&e%oDT6k=$qVL_u2s;hG4SQ2>;PEy5M=GBh`N$dX?G4dPaWQg_ zmOZ)Zz6pnKZ;abqubw@deAOhq&o!cJ^z>W!@+O~Uf4FjY!i-_cY6vlLY>))Q5>$;y zGCXu@$F4Li5^qjBEbXAiw7ru2n{y1!;^(IyVloo1{`VP&wgJ;XfYA>{4wlxD2b^LU zb)t>^N5UNHO{NrzpHy1m#a77=)F3Or0~k~!G?jXi<5lF<`fcodoAfAXKLJH3rc7aZ zoj(^I7|9oSN-%7SB`|Be6FGe~HdCvwStntCQSt$pe()vRUD6O0IeuF^p*Z18h4r$8 zM-xlNLiB4@inooadyzxxK`;_6(^V>_R^+pD;OQV+M&>#jkSMn4|YSJ=2X?$-aisx33Y*KGgifl4DYwiS<8f5Y3NOm%C zBqmo_dMez)hxPnmxDVh6bxkt7-)F4HuRryFn_xcM6sDLG zL<880oGG8aTF66X^u40Z{nAvH?<(Y*<*A<3;Zd%4{FIvFMG4bI*&;fFv1{ASrj@-P8mJ{>haMb1n}B;Xv9SqzetLYeRaD zRil69+oHzOR<78JR!Zbw_?wAD;$pAT^An+dwOVNnb;`8v5!FwU-Z>|j+#(^VmoN-& z6xkgOubGui;_tRKaOJ+V(%3UP=6Z1`Z+OD-SW08PqdJ1hwWfs$2GCqM_#_ao1a@cd zj(Pv*dGXCu!nalbJ{CZyLiaBUKU8Y^6PrS=FWMYn_eEF??NQs(qJIztI|NnC^X1Fx zqTgj|;6cmPe)$EC39EgzOZibFtMJAUx4R!yvU_~LdnZYV3nvv$RE51)xBC*7gv1H3 zAskbDd|H+oRkIStzk*JQ64l;+o7|bLdymp&((!3YrOZ4&-t=9XB98JlK(Jrpt%aq| zXHz=*+JiXk@U4h5Ne#I~J(@Z8IX1--ff2c0vYrjIwIGe`0~YvRUDyq9@L ziMJYZcuflS%(r@&1HS4Tud#QO2>(VY&V^d|v^l&l{hhiR%xw-YyrRiaoD=22X_G}X3t8tb!~p(D7) zSLCeew}4sHE&4ts%Lb#TuAZo0&!6yWs*M44Y!#xaZ0M19J ztpN*qZHPzQe@>~vp2MZKyFr7shI81fw+F2&K94cj!jk4$ILZ)%Wun~-#2%SpupE{? zt;1TzdrB((+D%7#Nvk1z^2>^P^SPHmM9Hq74i78z4{Gl_uODFMvh4%Q-Zf`F3LFqL zb7flEGN)~RAuZ+Ap2&o}6x;jIJO}4tItBE_1kKrtUh}kl4t;k($PNyjDBOg zM(^*&wL@qet+k?gy5L0fxje+xX;$4*U-#wp~6L66t<|++06k@quqiWO^pfMlq#`uxFH@MY9 zsB$q{3FLAcMqfzlAvB`?(?R|32;_Q>4EfCIp!1$a1#=SlDoX1K3%(QbFLyDE^)`le ziUt`<_lGh$73Cr+;M2Jy>PT$Gc@N)NS|?hQm+?W=TlzK^_iw&YR3&@To%U^scxGyo zP{DuFavbldI&(rJx(V>dhVl+$O8Pht60qjaQlg+jJtkF-w5jVry(FY9-lrSm`=ZXp z*+?r`gSmHl#i#xcZ69y7^1P34H{^qBQwpJNDG0 z6^#FhE$(TN@b9@(RP&GvnaG0w$y|K_ljaCI_z8VIdB=}0VBYmjuvhfbTP|c4!+onu zHO~E&wXGNxuFzKhd5Dl7r&m$HJPTFDvD|&DDr3?at}?}W`OZ|*$3sN6w6~ph>hgz) z5H2OuXK^*x@{h}@kv<;-=NBIKV9J8jk|~pJNi2OGl?(sHes_+>WbNRAAZhUPv?+$$ zWOw^a=Y8-~@|$6N6U&SZ!ycdi-e`(HBd%Gu)jnv4Bq^^Zhdz9D1?H$uc1crFy`1x> z07S=|-L&wGZW{!dzQDJO&81(=kr+8Yo&J`^K+P4x{`^PzgwYKl)P#g`@iSvXHF;iRCzRx!1@qkBpp@o$vecjikzO_V!X@c6sqd6YZ*~67DzxoDvkmRtCA1N&CCY0&+e_5wcTBe;3mVRVrN$)`2gTx zspc51g8j4C%VyX7>J|@J*_D!3BeXi=57*cz?%!Xs8IAnC9g!!jV<+FN&?bm;0g3y6 zo)W>9HO&hKIxuqpp6P$i2Ksi;W>B%a<4l;CVD^L&kqYGV8m_#PMCSCwA@2?h%d`2h zhD;>oykYW=7UI!m|AHOYS@=q4e?kS9JiJIU+9tA;%b!JV0Pg5+uET;r!=r9dra=cvlcx}@#uFx3iLg&MBUz3R2qE-n#yf5`)}i6a zV@!n*NFqjYvFzI$Esm!2()pHBH{lt{TE)d?HZ07tE_oTH0@qSSK6~dzT_e0_#IPd+XX9Paci< zlk6pd|6CF=*>XrhrZQ-3QHvk!A1U0`aIr-(bw_h8Jey?h6GHr$cXm4I5iQ|N(c)<% zyv@~s#dxz|fnVgbwy0fgdiWl9$U$6L`lebiME<^iF1L(`(aV#b(&fgn_ZqRbENtdYo)z~{SNVlkZc@Mwj*TwA^eNEqP zTz?W$M(dvkLPiy}I79L)uKT{0E|dUQv^G^fsNfG; zB*@q;YHz(7ONQ^p2^Y#IY`4V;?cSr)M=gr}*i+uj3tZeO9&3K~6cR-AhyGNthyD~m ztN*VzH;+T_pu5X|B3#G%K$7VM(!+Rv=^3opfANbos*FY-)tU1vLVqzf2+%`clQJcC z%9B?kq;i$346#aK*4>UReK4p{OK5zS4$?#WOF}9!aM7mJe=$8(84|{{7)$U!GMi~p zvx3wZSwY&Xkpw<{dxZE}2nf~?xj50?0v_0zqoZxGbiD*fU&rcTy){uXx_ME>vWKzH zBw%tFCNBt{K1X={Ci@EMsHq~PtH@eSCO(gyyJ29a04s92Ut%P7Y`;z3-8!n_=9*tK zdLFtD*$VXwD^t22Gl|C1Fo%G=|J8;`{k(U}6|8o1YPO}CdIgpHaz+ArQhWLX=R)r3V zwwF)xwULsOv!Uk&7gg^n=h6~-p;Vb}*%dZ!j|z|GCKF(g3*YBgi}c@Gr}-(G-<8J5dNuiF@NGTyNPC z5*}%kYCU{1zd^^`bOK*uOLWcCA8hMB_A26w9dc0TeZrx5P5vR2-+%&OF%37qBQQnx z#oh^M@q5}?5>BV-%Q^*z+mT3J>ihF$N{>4Loxlpe7eik+Bx-LZ1Kpi9baN17a6T{- z;4ywER9s$#Ze>x{5&+t)`+oa;bh>WJ#i8s3Hx517 zavLsoRJh=&&rvF7+B)Uv25?yy-c3lqP4!le`u#ZW!65O^O2O|&|v%Tr_+pk znoYD(oN%Sbxf#A?f~rJvtpmWko1tr9O#AUdvzLnY)ZOSp_Z>>ir>#tES?$8p=Q~|K zqw+_!4=}D9U5%^TMA*~Fw!fi`BNm)eoNZ*PT=p4C$cAIY;daZ zkFO8E8q{ItTrkMxmq%}=YHcr*&;V!5t2tITXC(>`{9m7{9ELma%$EIty`zps2N_JZ z^*i5CcfJUVcNXk@&w+I@?~CjaGx?DlXHCaL8Lk?m668j#LUkS;4Vl&3LlMuAZ)2<4 zt!EfyuABV*7}zR=y|@3Q>Bq3GB|3j_Bu8 zMepc)IUT|^Mmo0FeMa|gySs(@^YnAD4!&i7MLqTEg3(Cn^{Qw?ENh_Q_Ph4y=*AX z<%jS6nu2~n@9``4Kgsv{UdBrw=enE8`zzK4j3EHV4a$k5; z;9#Td`It+#Kdu+`aPEzxI;YaLu%9Lg1{bNW?W>r3m%Zsn?LFHXTvsl5Ar$_?aZfl3 zn^_v9MfJ_kzNb{ThJutMX#u_|#9qz-Uw|*((ZP8>I#&h_e~ra|U~@QMzdLW<-NeX^ ziV=Q-Lf;cDNHZ(l%TMkxe=XMKa}N+~p`{hQqoSf;O{%%0RJZ#%h^4II8&}Y$icki7 zF&Sd2?Al(Cth--mPe?cwHe|e;jWZYOF0yp-wpBXh&D20zC%*)y^Ex>e|0;_f4i({@ zeW3Jr_Z9t?0+Xw}y4MwBALA!23ME(5)M&#?)!yJ&ps;ur--+OXBacU==vPM~ zqm6b|8O|mm%!S6^EHZ4zD1&^TAP%kk##nFFNMsrSE~?j36gneyFb?l0%OZDXUEi-% zJT*0NX|5Jndpq^Tjm@Y^=4c4RDm$*tr_+L`)3?u1v11X8e3NjA5&!wK(;~D#59jVLoe95Z$A!>&n0AOv!Cd zXrOLNt3nEzL_ce(n=ruxChAgmw%rMqF?=t z^$(rktv?b96@D>WGE&{jw8=tqTpy9TW>4RQf3W(~{XFKG_=}#Wx#Y`*+9W#ctW=)* zk(CvWd?`Wju2(PfS(XdsV~UQ7KUnpbMfubBD+6ZozZy_^KKN7i_Tg<$$bI!kshb{N_cCq_mEu+_t|gpM%7#6cj( zF=ZqjNc?<-rW6R5foWr5)(Y;gpiN-c7zy@bSh`qYS-OzPSz3HYbL(virT)RIFiSO% zbpSa(hZ$F%{Y*3YDnkN*nFtsT!CFYGe@TEeDi$M={9=`ni|{4D29BZ!xa)PBzZmI( znXq^hhaE}##x2Sq2UBo%C`Zy%r=N;5Fn`pKc`Mn|L&4)W`+0FO?S~#+9M-<#A7fnn zgpH0<&f?;m0S|tgxT+;J9&sJwkemg3<3jQo0tE6W0zJ#QH2qqT zgZb0pHCtb!sbp^tIb%3WIAkyW)I4fwQ;f2=N7C7Qm_-iePtW2Ux7Cxq*qkULJ`?+g zTeznc{Opc81R5W;*eg?0cV0<@$>n7*Yq8(~{fLC`GA?%3Jt&l*@q-I=HxhNzVD84H zShe$~TLmqud+tQh=err<r4csG7|j3BV1>C8~-u5*68 zL*=g`hPA-QtZTWsR>};Z!eWS9kT*Ar{+q$QJI^{CrRu4 zjB;IfyJj11DQhoCCfveDUB zhLa=YJLfq_Z?Lkqe>m7^67|!{T2f@J02r}eqL?cfwQm2dpCvCAW@DHtKEl3os+}sn zE2OG;Zv&nFal$YBv*?W2))#s1<0jN?vyfe}?C1C<8P2B;Een~HrA}~m%4{=BL32Or zNLvcD#w^+ROLDXZYW1q-t@Vp~9g9p?ucepVO_Ihym;ndv8k;FC1SA$tt&ty}Le<3i zb1ry14JO+3t#nZ(aM36@JK%)&I`aF$?wHGvQw4*U~qCT zd%&|t)W`%DiZjWr(u;ZJ)vB1b8s|_wU{#Zt(bSB3<0S5RmZlE)+|)d7;6#|BPU0NO zY&<1HtzdNZcWE=u7d_3*X+};k7|N#Nt&+vs62NzDEk|^m{Y2%C`g)oRSAG+^IXcf^W6DHLrbQpD00j^GO`3&xFltdBtlCNMG}$|(Z0+!; zY$3#XFz!^IS4=F+Y`sP)Zf_e>tsG**J#m7M%r+8gtsDw(d*ON|5u-N)kXFG}W8O(s4s0s8q%UfA4!6IoSi z%nGAca6&rMM^_={sj@yHrDvqz40D9!h5x-a*L^==tLS{IT8p<$Kh-q=3a2A+n_o+| z(U!v7rgKzIhzqz#iwyQH;t*hmnD%!;h`==z^gPW z5FzfhhucKK2Y}lvQiN#+p)C0TKu94QN%`hwxv3rlg8ZWXPVdt=69&ZebPBzzTbJz@ z=%mnZ^Z@yfMjZ1;xNIo#bncSyZ*C^SAN#Ymh+Tz%Z=G>$3@)89TM zJrfUsl45CyU~aw|9{`WL4<#CIXPsCJlEAu^-;%&ggea_9gbe0qOInRdK#X-?9(oWm zpn8DG5yccUd2>vR^OY};5$|~|w=yayPFGunjTUB6%mP1{96o(4sPw@1nnVR1Rj6sg zuh)&E+aE0Jn-iO$sx5NnZj&$^sFw#U zmLSl-)WJSO6sSf$Cc*=)d^(lGGQT5!5Jy5O5TOn>Y~B~r9azsSDKtpO>k1$C4t6R%VFl)$u%a&`8!=Lmx1MQu74G>buE8$xODf9HPV0+vHjV(s^-{o{!h41QkT9&3|j z{29ccFgE%@Zd0(e^p;Je7Ef^n&Fuc_846BgJ#$*;LEOUq9-a4Ovk$xO2Yf+1*HT9!RU%#&oQnQiIRrnX4V^a1(4x z7x)OyUeAxXZELIv(IP$z43pe%3?(FXmmB%Xyzuyl2S#W6c`yPQ7mVv2BBWU!!t{nq z&i&0C!bCSq+OpSo2B&sCiFhY@*uz);r9V6v%0O@XSZcq~Md&By?igioYVb!mIPz?< zr~D^}da#c;?L3xgy26~1kU5^WEyhJJ$WA@DR5rHyXEz3z5PYf}Vyo3wTgQ}>N{}M@ z7N2eHZN@{v!+QW-fdt;U?3@5wwG^-e)wvD%p$|LXTuCLH zih%H2&uF}<w>|7ecOsi- zE@B7H;Ik4WJPhmdK-Nt31T?THfE$zd)AHqZ&wB!_lO@4a zM0T^T5t88Pn1F_RKT%_iohXZhd^vDVz8sK1$*oX>v-Fz%k$TkY!LXJXM6)*RmUc8! zl^L*z3efeOb*EGSXY#G-vde>Q2(30-=F7P+q7LA(N18?|`Eqx&<-t!)AhWDhxyz_w zxUbxBK4yVg#U{?4=Kf9pxtp8fKe<=%XjV>>0%z_sMYP$v2LElCl^b`A+3M{w$ zr8~r-_|HL44G(ZA!86b-(K+Zxn!j8e`Cbw{$*)uZjLH*;@mng4@;iFp-4dX?Xg$Yr z0J2H-mjiaUKs3g29e)-;2@W0BLD|tQT&eagke7A1eaCL!L5=4e?NgvLUHg`IeArl3NGd=wJ_Kv1V8cvdSyO)H-w>0r~%UBk7Ejv!QcFQzoYjv{UXF?N}Cq|4JwqI_3 z$A=lFet=0-;z1AFcQ=o{vcs)Q+TniCZfS;eHd`c_6PO?%p@%PG2xQgld(;acU&;kg zbsVuDkTO=odcp&v8}RE%<;o2`(e5{sGsFCuX@)bp-0HAae$&AV0ixX^wnJ=X{9enY z{>%Z`EMUa?!{s$0pvQz;)70MG;Onc&3#`jJ(|p^_nKR`q?mE*Z?B>9PXxps4oo)a6 z)Nd=y=dy)pPxV@vXctZfb}J5fzc>Els`8c}Am?+kQX{)fk}cyrNDpxI17Lz5yR!Y> zjw>HfQN1~gIUo8pm;Vrw^_n}^_ELJrvcK}`wPnA_&1*`F#xM=arrtkVlsS!IuPK{0 zi~0z={8FCT`nKq~w$0FF1{uj!X~*jyOi#*ivAiNrvX~$?t%#55u$;F50j64j7}h zzTJLy@lt2|;j)lRPId&SLM^3j?!Yk(PJr)TC84qMbIsLC3^229< z0Sk>MB|#jW<98j+kmByd6*+0Z4GIk9sBz}W`I4S)eSsxF4htz4{7YTdV>`V?6}x3o z?tv}(jhtmA!iCh{(7tUlH(6$PPVBUH7}~Uk*k^?x5lOZ z&CfW^1<|#hGrHh6u+Ezn$E#~@E?(~b#JCF-lpIT_izO{-HI)*Nj`dqsJ-ON zgqDvsG_M*y<6(e@l3R$GoqQbq8}Ry$IO7e`JGDx^g8T0+Usw1v)u)D0j{*R|if*_y zcgi8^^-A{FuQKBbVJRO?Fqs3+FJHPXe-_T;ho(Be71{X=qZMu({zm+wS@R2VewJa> z$FDMn&wt1oU~(z!ox-adU;LVG6n1MpYy=7jyFry~U!zwa6Sp*+L{Try{U#iQO!w(rUadH6#bt2T_k2p!iH9Ih#b6o&n+Zt0RJ(qv8L&1g=3;`25_^@ z;5!~RIMcx0Cs*(82T!YN<2o8+V#Y;m+b#`OY#E~IysWYk4bkHnR#^px=m-M8>@t1> z4_Z}4i_fg6_X`k0{Nk9n3;(c%&UeCdXD1U4&2bm&1UiTW``7AkKe0@SH4K3VaD<7G zelc@HcQbF4jfTTwu?buLd7(Ko*?7hVpP}bH{h?jaZq2)ZqY`wGjdeC%xevGW`sB#s zc>59%GX8koleO!=B3OFX(wVWI=QTN7kd~}QBnm7C z1mce^B(3QU<^n8EUG_SPSw{X?4Q~@IIYm@Ax}Zc zNw=vTz z4r=8#a*|>Jo$(I;!%Z!8>ksuZBJ1;$6Ow*#6~if;He~RwCr@0^u+LRYzA$L`7w1dz zMN_FqawHJMmM}yAM)%jis=G7~Kx78-i>3-goh3-Tg#~%ET-hW*xR@^vfS2kJ76HXD zlCPjYCGT;(*%ccSivf^$*aK(~Y(xQfpU)_^-6htI3zFdqk_E@P)wvnWYzp#A%Jzso z_;wvdNUqe@mK~r0(I1L0L;6f;O90~lul`DC>V*R|eHmR}k(&+C8^BDyRw&PUC{p_vjO0E-eD$I;bj3WkZsd?JUqB?-0 z`-<7_&VVj&y273H6RSqd18?@Oymi@lS{yp?eh|GqB2(f?OJiKYUtj^Y_ioA*kP2Lf zRV?$k?U9BH^ryt3Uoo@Wt0PQZo-{XBmYx#?X&?4nMy!pPM4kg18}=&l=A1*85sMI$fv>f3sB~ke=}pD>G2A9(`$z1orc2zcv%)x*C8Gpkk#tPJ&lB`#FA(w1 zo1~rX{mzeqRutDPP=S}ydHvZZ$!B|&PNNYP^b63w`YB*hMikJ2g&y0>LjzBIX|XNa z=4y{PaE`(CRzLC$0#TJo69TdVc)%ry0}{s8L{`AD>|pADyL+S+$bOx<4h+uJ0GHNi zfJZsEe7dkK%8>{c$ksIl_ps`W8y*sX10r}Zr%6s(-t4EpuM2tdopGTi1c z2fNDH0d#|q-s6E_6J3tNu{K}e`YwxbJn3h>7vQb?k;JjHy`E;rC-!%)hG|=&ZXoa* zDl3L9{g2ox-4F@}B-FEWQt4<(Y=({oDF!gpU`E`_3Uq&0(Zap@(Pe<3^y}x{ zKADe(b%7r9XW1b#{Kyr^8GW&3Rzoq=EkGmj%y{Y+=tj}gY&!(wD%Px#x<$;jH^nL% zhc5qK!_4X1QWIBTG_}*_HP=U=w%yi%F+f^I@75+Dab`VVq!;0B2e-`PkT@aO3a5X| z=uD^I^3L_L{cI{CBj}d?E`0#@y695Gi2$5m>rX{s-(?Q;W3M_!i}=8ZiGM7`2vFQ#|ru z5Bau_MXgfKn1Z^n!+ys=AJC|=3#er$*M=daW#=D9Ha7F#!QX^7C@fdS9nObk`5A|D z8c11&5BHih@`4f1)t=1|#tn8>_euRQZvqO(edx*<0N8jre-w*Dzt$Xo<&TBE1l#Px z-IZ(Sj?sH98$hw%4<*`Qw_f{oQPy48Ehz>hfy9bj3r1qytx9MY-m6P@;NLOR&r~N8BX%jb%xPzK7~<$VblGWPYsP#t>sk-2 z+7&dBV`J*bzf8O{KWG+Rl21h#O7KPW-?xP3|Zihy8B5MzN-GyWYt z9;G4@(d?%JDF83;HO)n&#eD@>IT$jtl6YS7^Tn`h5JQ%B z7<&?9UobG6(9W-}ka_G-u+8@lihW>D55EOMYkgpUZbdA&DnvW;NGqKEc|I{_BKH=E z%7e&i^zkBMEJdz8QNik;Z1eM5av%!^Id-zRJVC=5SEUD_1kPtONQq}NW4_~VD?GH_ ziE_p?a)Y#s(KkFX?0bnkAnuz*ghk{(Su4H+?7H{?_K{X7yLi$q(2uBFa)GaJ$yL(- z9QGtewh}C7WdFS&n#sN<_UIC2{E5G?B$ktS8J?$Ww=Bjs@&(`rjR0YTlCAHP;szkT z%g};QtyyQE1eA;uWEp6ao{A`iYRxiT2P|0h&cNSoos)V4WVfZ{SJB$tQV5$=g;n3M zedJerP;0-}5YWm{3NfbBGvnN}qHaP~b{-z+v#ett$S{2ilziR6xxQ0!CNY66ApNWZ z{+6)bkL}xhLY07mW=r3_kUoUpqmyPH1MKeFU6a+Vb4N?^5$0xy?XvToc zY;PTlV#F*2vc8j%cX|IMeYF=jGKfRbRV)&4E*7wlkow=i8#5?1_ zn9ba&?CV5z#xvt!z%N0*Tj!A`*`e(01f}T!Lj9%VGKmq^Mk%bs2xTM9w7B`g`-R*r z;a~-Hlm}(WB5^wn=$w?yin$XgOXu)lM)cd(=orF@Pl&lonQ6&UdS>d1W`M9VHyBZG z3J81AWWj9!n!RHH%Dgj>n8;E*<9qKeIpvDscfL2E|5P;n+6+LKJ{LxUQT2HJVhh43 z^{gtp{wO`D>>NmB-y{$n&dE(=-EOhiGAC`;7F9Ob4G#`D*_m42V(b507;k}Zk&SeT1DJ+3x&UDG9Yy|+rDBxs02kZueg zd?wf&AVr7E){692e#y46D)Z4>xr=>cRUnqY_}8suL=I@CA$wQqM&XGZOr&g!6`(EG zY^#mnAg$hr@?J{gZ?@z8ov26qTg>n_TKG$z>}}llq^EKq!qsf}6ye=h`-6E@nJG>o zcMV=co6d=Xfd0M84XUQN^fTZ6%C|{9=<_?L)3Zo1bGvq?R^-v?7~na&SnZWz z%wb<)$hkb*;+z@Co+0(>*3j9tRvSa!=ZcUW7Skn;Mzy(uu3zN>p4{I{b=`$L^viVJ zb!~YEdJLq(2n+*dmpkZ&mG=XMhN1Q$rRI_tGloH^s5DvTBRQaB(>uOFU3Lr5lPKX+ z`2b7IQv{R3a@8^cJesKYU?j1PVPv?BW=+$lyU9RDUQSU%o}dTTOntsqfXnirJQKsb zj)Wa79Ypg74<;SC_|%QeTjXte_RW78!f}-_FP;c%+ljXrpwwUdbD6)xp8PF^={mkw zILW`tMg6*Vwd{i9)>_MXyEeE_A8f|0xgSa4#IQ-GX}cHw(d#h%kJ-DLJ|%>mHymD} zWG95U5}RV-8I^TY!^a9<_A0WCTb4qL1+_fBE^j z|7pPH&n7z2r+zDFWBVxh!yeIvZVF&)pU&4;)hT$XI`wZ{Y9(e1IOm8pXB2k&T<_lI zSBe(qy;LK}7oDBnouvXVL8U#He_hKh6oK^?DCt1;6-F~JKG zVaD|M+uhU_++e6jnj%-?I~nGm4xT`?ah8B8{BsU;h;?9G)45P-v^NX6G$jE1795Wq zvFr1Ue1exEg(A2ih)4(aGl1;gqH*C{la%~|BS$K9kvC_+(`JS?Zsz(*4c{*e?q@dw=<>};on1!3gxUS{Gju z%=@Q)mT(o-41j*$XGm4M{jo$TQY@02;`-elit*jllMU221Mp$;% zdq3%{7c(W>A{JRjeO8KabMs*y8cc~31!sd?po1d6!T7kfmsd2|T{@?jSAor^y~tV_TCFDz2a~0Pp;Vo4QiE$mHm| z0XOyPMWQS7SHTVWS4!N}dEAE#-H#74apj9OF;Pc?5GO?U&Gc(z^}|EF`?)sJHKeV5 zpLJ>e@G7Mg#psYy4k)LKoKMZPE{f3){rrAEL{2n=j;_~AdA&St_xk)EuD-jUl`bt2 zdEMVOp0_sKFZf?FK4!U}zv(Pt18tpOm-bKoU7W&#{A%DI7U6yu-Vz&Hy|9EYh`1-oBHp`!upv9TV;PKp6rVQHV|Vd zl}2nJh5xmoxkqbHro-brf97U*fBNoL28bwMcwJvja&s!` zr`;g_{hD{@li{iF*re`og_@y?R4a>Vv&L`zU)keUOIeRa?&p5@*&767lg3Jc0vcP3 z68+j*jX2h+OV7#I7x&&76ot=~S5r7~*>&xeX<03S7|Qx)H2LP~V@-B$oVlz^DJm~R zdzyGuOHVjG&=V2NWAoCwXf`XO+mLK-|H_wv&5oBg-%UtP7Cke+a6>4ujrSd7WZ#Ie zy_mfyV;rOHXP&(3zW<(5*0Y=V^tHBnr9OVEZ%=-b!qaMq3|Xm=HhsJB{PDI5)owZ= zheTF0XMZ=^@BF_t6YOc|@w87)pFZbWUp(hpXvp$~l;*_xPUl;{iR(P^vY8*0kTAg9 zOC+*76o1p;&Z()1@-+y_rIm{481doaP9kzKvS}2mvi6_~fjjvs){E!*9{MKodCFin zA}Lrrzw_Rk?0OD`&-A&v9X9RuW&B8n>=dVmd6r9AJN|@7No}9I`=Dk$H|pSLa-}tN z;j?|dGNjcB(~@M>LfR923p_8^7q7i;CFl z)!~ts2C-QJ9x>Sz?H(uTLhT-TtUOG>AcXUk4o3M-vmR8Wo;2^Rz`QCD19(C&PFVJb z=~u*Olb@`J8!;+Y^@j>w-ct0%pE4Aw$h0!>ubH`IUzUfN`@_=@>}UQBecTn-QTRo> zBJScln6SSh{?XWcMf~_}F%i&46!7CM#+5=iE$LII^;CkaoPyryn2BWI=Vwu&6A0l( z7VdPPEAH7~R;G*i@y*>r!1#V+pfeIs`1@VBG9JKVXnce^LH(iC#GC1adg9|8Sp|h*V9qB|Yu~Qm&n7dkkm0i~HhWK)C8*v{xQXslZ7xd9Y#<$r zzZ{H;m*Kv7wLiGAxYNWEGuko~KJ_hN7N&JcHQQA&by?SPfksxAa9)NxEk{8nK`tL~ z+ravUGsBDNEl!FASz!WikJ!&j=D{}~mKci0`D>-f@+f#qRAc8&5v7B;W8X^87ydP4 z$Tc+1IkZdrhD)>zb9#FS!J1ri+eBW&F4T9YrSvuG_~+@f$N3_f zOnq$z_OiZ1BsvFALV19-?rnz%vpgrXV%8^EYtB}2dtI1Xak~Jb6s)z_5sHiS${Czu zb?=|*AiSU_=>F_Vg+C@WS+^NMiuC$Sg@4ki(GP2um&;03yT&l!QiZ*P`$332aCQ`7 zQy*6kem0~@PRYD-lS?FSedD*30X4$-^fm~hlB%VF1#sBm{$5j*z`RC6!_Ler(?=%u zxHOVkX!48vmDFFPsH9M025HfF|B5VNfJoIM3t-T!uBCcQGJbpl-}?3aJIU6`B|hd3 zvBN|yvqo`qzv}B>hW~M3nAOa0OfsGZUjH$}-__)6Y3gnNO_)(vyo||ioYbbo&D2tF(;(6Bh#!^ltUE*#Q12`@KM{Qmhrr?aj z=sg(zT^Rm7HePDIz(sEKG3Dp;=J*6hvxmpj`0tX5pN`7VQ27Q%?lCcur_)oswG!!O zY;}~9xAPW2{Yx!k$gLWnSz!?Mdxm-WZ^VMBE*%!M++RT)SXy`}>x_4+=v<6+<>aUv@7sn_pgtzt zkmEs-IOx6ZYri7C$I zZ+v)NiZ;4`y1kUISlgxT+;6gd;jME!yInJw)QfBB4q6G9uLUfNDV`BfIQif0sjW{4 zD1Cy1yDy`d;P1ij#M#x>XGJBDTN63_fr+WnjG~(J`rV#&BB#Go#WZd62K3UP(Awx{ zB25r;RLW*TeOXK|yl&rZRb>%Xqt!%K89y)08UBrSUfS;SqY|WS5c&xO&@E+72AAr zxc1hYKWV(Vb@*glZZa(S;nTdM>T}yqx1u{zU*`a4W{KFM8Y<5yk8dRqp0LBLZxG2) zlHX+?g7lM1AhSO+NdcKuA$x?MVA4tutC7gL!y);@!H|63 z_L_Yu(c4Sy8Ii0XKg%e3pUrn$k=8&q7MK5pIL<%5Hes^Os8zH#PT(yf*PZWaqlfFx z)AZ!k9KQ{QtR)9SO4BS}TGo1yqgUn5Ks>NWQ)VDFA^$|?!c%9_S$|5v5AnKUfsIB@VwF zbX#kt9xe-r;H5oAT|ND})m@t^2{!XRMtP}px~<(ZWr2dUB`*W%;8t%W!7ci$^@5z? zTisIOThhdeV>DYAJMwH`X&09I<3X}MgrPp$rTB7H?38Ext!T)&qN_uDs2xwd@rEp> zn(LYbM|?(?s%u9aX&+oVwc%31wSq$R&j?$+%^nY30_q4&$u(Ph*Cuk^=iDORq2e7A z_!C8MnF1!<)H-%A=nHoJa75TsLf0xfIq20ljQU?pWWB%b_@npObH&PIK0aH2U-5@& zTBV!NwVCZz@A-~okO{vwmMdI+oN2nai^vrz-NjV<#`SFC0^G~1jkHf_FoM)BAHj0p!f~6T z-8Qg0AGCjBs$E^w@L-U!JJCpis6HoVooeVAw7TK2V(=iVyT;BwWU zpl>x;o~1R^29)Dv*~Kyf3%yPJMZOU&XKH#HU?Ad%J8MkKA879~?!PHhMzk%=#<;I$ z7GQBB3-E!d1sFJ*?|JXo=~3~PlF%D#nur~(ZDEA+hHj5{C%a{zy$Ik3?~ zEl+)9A@()d0)msZ0TjuS*J#M^+4|ZY9E?zeRov9Hkg_ZwD9`g6^`oo9-NBftiZHjt z*n^g_V0T-&28px3a;Aw9XmQS9HVI6a+cMdKLCsUXMLZb4FrH!p+JV_B^JO(pjjt)$ zYrM(@udXgng~rtm&%G=)hF(u6QzG33$9XNWL^VP*9dI^vF0@w{Z`VK_)J+_}yD6;Z zal6i)W1M0Y%N_vT9>m?=JmnlIbHHyYPnMTcB=UyZ_k?dvvD2RWzQYZ9?YfG3O^g54 zX%$t+_7U20T2L>x7PvV@MWrF3N7QwQ`4Nh19lmK`z{Y^*#m@87Bs>0y)x|NO zrr03-mUbSyz!$L!*2NwyD{a#xAJkth%&GUNml;K=lVV-Idj&RDO*a-f;E&y$68^Qt zlb*4}G=|c_BpWPqVChzTb?H+`bM31`!0rgt8YFV!|H#LHE(g^zz^wNWV{_*0ZO%et zwM2I{qM(6F{o`!gmB*umt!AujepL%KPEpYCr-5#_gs*I-P!QI(JdtFR5B1%^eZs}r zF$j(#ynMFmY~Jf!;kppU(#|`M?-z($%Ro^1gLi>t>L)XaPB>C#M|nWzPir=@AQ((v0>!cP9xa?HRNrnABmY&~rST;JNh{ zs{2!W|A^xDI~fst<~m;~HQ?TO*Qa2tzg}armL?K7Pp1W}u9|`KmB-e^ZIBjT%vzhZ z59ERKXVkdRup2aJn8QJ$>}X2r^2P2$Sz|C}?T#%e>I*|g`2Hle>mcWEZFh5)nw6^f z83Vy(Dl$NqKmWSZvu<5|KY??2?{hfho^Zp1Y^u!fSpo!D^ZW*ia`wp;=6Cvzq4u|u?pG$cbx-+SxS(taZ(l$m zrGhU~e*xx&Uv*?5-`<(1wRsT@7ecLN#r}`3-2Ga;(@-ga|LMZ`4L>k6T%9rjEao1>L&86SQ*XX{qo{ z27sox(sn0SV*Qm`eCntpMN*DyM_Hp=;keJmA4Cr1j%$Zy$meof z!dvylx&b?CWb3)8&K*Rtkn2ID{M*(1_ApQ)*uA7YqtU%onHJeP=syd)gFO9kw{Nd^ zSLQ6R=2ZH8q$j+Uec9#;(${o$&mOka{m$?Xg8Ah+(19$_T^wL76QcS87$dGAlvZbu zvxq#Ws-&ovL02FZ3ETj0c(hhmYqVBSgANX=@e{leVfc~fl%E#aGU#B&TxaCZT<2|$ z-{ygtA@A(q!=|H*3r!2JpbZ3FZjhQ77L%gtu)>y=#X^^D;e>4nV;x+m`&W7A({uoM zfZ>)unV<>;!HY;yj>YoMfC9M9qm>I2d^65mr%TLS=duTkq9tM5peueG!u1en%mHYO zEOc31yqCF->MiEoASo(Un=+86^)FdnRx_nP$f*Ux*(&r6VC0d)S}sDM*Bz@;`DdJS zV@xBz380#ALRV~!X+l9#-CQUy1h)Ak7P12)sU+jWyEjyP>O1staHOH*C1~5Fa?sJ(sDyKT|g;^INCI99}QJkfZ?2< zg#QQO8u{m(!Wk2qsD}xip$y=uc*)|-s4kj=W^$q4xg?$0?tfgXo3`q-k*jhCm~4(~ z8|oSSK>FMd22LM<84-fGnzv_J1%kt>pp|FjiK5=$pD#S`Sy9%b4BPu%y5`($=0*oi zwi19&^;noxY|uqzh+wY)az$lq&_wxGMACV&aYm4zt7jp2)zOjO|+Db`Ho zZGlf*eD|n=GK3-5cde`+=+&suM8i;ZjatbB>jvM0TJ~2^b)YJ2qIwtRp3{orZjTm& z;%>MoUZDMf+%M*F)cdKIjJzMAzL~*}dG!#QWd%t3yfVoep_1DnjaLv#B;3ORqrPJ1 zo~dq&u><;5o)v>#^x(MX=e&5AEUVnrbu$TqxS7zGY|~wK6lpq_@mL2s z$U_qy^tp0Po*QEIC7C74m8++%DYsy@p?b}kQhA7~{OiTbUar5nT9+d2Nm87RRSuwe zG}p-YFI09mVF%$xI|Mt$?&+Oi*FUFbGHkYwz5RF}D;Ge(E`(A|BK=4?5ee=<+;lm^ zEe3#{8hP(N5oZU&^XtkkGj_*$J)aQjX9S>V2%#-M93TYuD-mN&Qj1X@6mI=-MxM75 z8s=HFIsf*fB7`06%?7N5Y62M|5KZ}E8zF2nWt7kmq~GQYw;m>(9(>h-aQH$4t(GSQ z6uc{+9QbI;g{;C?vB!X;oY1!PSO?ZQDDm@e??&^o6{rEp84WAm3Ciw3=B1k@l+guR8v<;bB>O?S^7#;ky$2KKaud^%Juf?-ef7N?|JN{|#w!QjO+oNL4O-X~z!}(k7#Z&%iZv*V~OXQaaDcJD&<(_$r_Ws`Se#3mq zX3OPeYwP>R$)yU;hX)vB(F>%4Bepw1CI#u2{`m0#R)%2iZA)YCaU*V(to7ooVN}u zK>s!cGoS(`9g}-efr~L+a)XOeb>W1E@jneOSg}NE1SU}66xCq3fB1p=+|Lfx{N9D3TkN80oBayzHJNZbpdTe%|az)}bOto^n!Z6q!T|M*5Bj$N;K7qKd$VLfM z3?IT$t>9FRiXU%*o@#wmiK&d(eQ1JOT2*6Sw&ChHrTG*5=Nb99a)-Sbq2h5-zw^bGeXNAw}kA8q#Jon4+trCFqrdixl> z+$z7_0>!%j>!z8mS`BOLX4P*S+DhnmfZ~!w+h$KND5cC1%xg3osFfhQMjP5KXXFnF zi|PBZcbH^?)bHl?5AskUPMb+#@AQ22Y(w3EFi zMb5(y&uXXwA`Ids_jrq0m`~m$6XDm6Cf^sz(!$_6Px;=XPZpO_Nx2^X;9rg&?PoAz zc$<7KoWg0txX_LTDhPrUF*W;I#~HZK7<_Le7P05$Q%&*XOD!6!Rv?w;^O8l*hG><3 zyLiiL6WE@sKACk#(UC-7FU|d@oJYiuXsj2yDsJ3LDQ3_=b@_g*hN<$^cjIr~&~aNM zOH-FxXRb~;eh#TSOebLorySz_NV4)9EakCEH{Un;<0&W((b8lEUSpU+8U6g7E55Hv zee9}|R*ai5cML6LcKL^GJ<-r7!nhjugZ4R>K84-dm&mhska@Ij%`!W` z8uTvu8mgXy$E^@WFV5acRbM1AIGDKouB>(hNg2T0jd|Ow5UxGujB=lnV?~<6)NDTF zrwak0LrXo0jZhx!@I3q4e$BIY3++}#J-eJbJBTcr%J13@MY_ zIH=iR=UvMFGG*zFr%xF}Kn0@q?s%95buK*$p+|6T8G*9h&BsMY{U(WCt!dzhyyiQz zs9Kk&7D4d9XI?=K>Q(xG+M;-6_Tz`>LV6|~IqzmhJ)QfzSiPmogFerA+Qvaok`muk%r&1Imj;%GtXkH3?gyqx!nh&$ev@m z3MNuQTcCgF8b=Xl^ZX03(Pq#i{@@&Cop;Hlo$t&SWYVAx<<&`en}S+EZE+=MB!=PHD@qH+fLa_W8olL{U0<9u zjA=`M$7D(`DQ-13+$IKf%ICN!M~pG1wx{b)@t{RnAEubR7E+t0nd)YV$vpy>JsR_I zC@?EB3TCkar}f|KVzf=~mWAoyV^+NOW55fXR+2RZNO32CQY<^#!GP&BoHA*;)Y7r_ zKYKr7#axy>Hsi$HmObQ|as{1vLa!98mOU&9O9X$~Oaa6Zy1%g77EJ_kp$?xFKY}o) z#iFG-hytfM<(g!jKLj!C@sT!3r%4Sn)oCT7tY(>JaBv6%r*T4fH3A*Bwl$^k0`^?* z2^*P@ZY&I5DOi|9-@(L`&b$1kabWlZetX-RoJ;Mk1_3^6OB>dUL~Bd7tRJW!Otsu> z<(C^cNE?})(b)y;<(4-nd8jeXqDkc0AIeJ4)&5+;#2%vj9KvE|Qm<-f!#P6yQaWa6 z0Bol~xZhqRN5_JL8S#pm+_LR0E2fzz23T-8&wIVt`p@6;jo&oRCh@p+X?2?v80D7q z#o=fY-eq{szcC4%$d+x2t4^8!cnH7XQ}RziYDME6RXVJ2W1t*k*I%MX8-%0rgR0as z&{T{S{f))geuWIO{V6vG6E;+9$ybLJbr27r%X(C}Y-s_36VRLQCQXOxm<`T3N#Fb%q)-a!>6 zHTuwF2IkE16OKRU_P5_`SeLmtF`Ir2lsaM3LC7$MTowNeVpHL>F549T{fKFDIig)d zgKo~LmvC>(`sWM1HuHtCrvD}L#k`|Vg~%OSp)gd=X0#dMeKn@gOM_C{%oT8yG6 zz<=Xzx=p{{@DU`$WZc+_y;-se&tT#uCFSr+t z*%_JMtTubIuKxepBk%vO6&+4*r;9AF!`mo!RMWB8*F|Ut$6eCwJlni(7WDQt5*Uk37JQue?Qh z^-fq%_cL=e4&~cb?wR-jnTd~;#&qP0D%R8WiyEFhYVRL6BmQl&%X#ul()J>H57tQg z$mbBR@%OuhLp+g>Q=g|fmj_|Ul%dbleRD+KaLUElX)$_2Z^p2aB(93nC(YaydcRUn zYQBC*8BV+udsJyR-TEYqg43~>2R0fU2%->VoSnvM4l(pr+*&3Ii}6 zZMJ%WYiJYYYNJcXYU8nO==sEr$i6gxsRn6HIR_E{c*sxHDQO#nvXV9+7V#aQOO-c~Fn4O&JKL#WIW>XnW(JGL*d~L*!(^3$+*E8TYT| zF@{Oe`tp4b%%7zagk-I}eTPS&;hBN>_u9I4cW+tA0(@g^QTwLWGEB#!wgG*<5TkK0 zl&b6+T2BIBU}^zLy>6LTZ@v@FUwEi0flly$H&$|XSATmc_*a1(rKG>!5aMuigE9e* zsy4)gMEoA~$p6~uu@)D;H{}=&Uj|Q?kvp?@dF1y1>3sFS)0&VPhWQUajO$Aqz>YuW zBR_b2`eBR=LD+p*IQkmwfsE*VH+}sh$^+S`W-^`D(CLA+p0WTtVgQFm<4lW(U(O;V zNN3>#QHg@Hh+NJ}kW*Oi!IK@qgnu1&&|zVJ$q#l-acgdM%5y9le~a#wo?A33SoL{^5o65Lm*dy$ zagsTL=bzVP2uJQuvF?Oz1@3R2k^@fTxIG?3xUXv*Dnw?WQt`g@r1sN#HaVu+@&TSw zyi4}eLf$zGG;}PD-hM2N4;omD=f=;xrkxA~7H`Ye3MaZFc^Z_bo~O;%k3@h(Wdc>KN$91ugP zrWaBZ_1@KLY%5nSXsU?~diE3$q1P>G)ZX|1qqb~-Jm~G>zFhctFEq|;Y#xlaGsTX+ z6YTyv7EP-v7Vt9HavSA;F%s-vwgfFOu9v)w+g!B^MBSvNaiO`6W5#B11fp1c6qhjT z%jnv2WTA7ouCI>*;z}{=$Nveu3k2L^V>3hoQFHmsq8z<|({nw$U*`)F%zC2(jCvz7 zx&P?*I)=}v*cx=T6l-TGEneq=5Y(fZpostacAZmoFE;up9}M`(#vQzp_(7uz)|73S z(@v9R~0&ErV8$k zjV-Um9`wjSc#C#=yxzy!Q*~LWjsuPv|8H6YhqCv4iYHBg6>LwL|LdNzcKluuo(b4k zzFb0c?kVXsLXfQ-aNONfj)~aoMt=0y*RF+k4e_xbhgUBMk1roxp2?DbkRwsYS1N5bq0iaZqVT%QrZGcwr|VR z2kYSImC#g2W9`kTDb6REp_E&Ep)v-7agG^pICshyz|s@z6bk?b&!)b&Ft(Cz4;D4a zIz@a~>5Pzd63%Pf$8Hv6BseQVsC zJ+tMGU!G?!oE!(h1T2w!8o(+ zi9fX!b1{=CTW(^|YV!_@uL3^2blzve>_;qNQz@qV!wqb5hiBGz^8SmT*)W>N6GlPc zZF=Zqwcb~Lt=L7!V%0;E?o*Oer`Sb0dY0x{m-c1_WGUR(Jh={RPPPK<0bC9(Fb^h! zt>!W`sSXBvxKJ5VOp6jGo|Q3QBVPDBEr$66Ef9ZRyE#)E&h5*tRH{5nTiZ6 zg{ufjyaCIKdx!5XP|@vTwur~@uYMZ4>pXn@m9;-Aao2r}1$#V~o}%*M;yZMv-kI9FCr zy)Pqvx7UAp(Ow`QdEnKq$gFkU6%JTc&AwMcr2E`3uVK)U=h z0*&#m5*wX31NUe&1Puq{^O=e$>9WEWrG|fpGDg!LZV;|>A~|}rCCeW^JB%NYMW#Q# zkC-Hw?|PyF(MUu{Eu4b`&{QOp{PTHP{^(}o9@&-NVEMrsbkO}Sr9a_Z?YV}wexSgZ ziuUqfZo?*R;+Yy{@|rfH3R*U`(-hf{1GT0j5e}xFOfS^9vnbx(}f~(u#zcoqg@;Gsox%4De`X{#sN(idl-nMYb^g= zqvdG31X`iYL=n+n3XofO23b`AXVfdcblj~SP4kPS0B85iR=GV~9FXXyXX z0$@zy45pu9mCV2({+B(nkcgHcG}NZJ++K1&A+=M^S@;d)` z8+}+t=q^SCoL08~nPvL0{0jexlW6=iN>K+ktZ2);Ke|Jdsk%mZ0aVFJq@swxKcM_8 z3JjGb%Rk=wg3C?cX`G*R`LC&^qucd?pBN0hd$}x-j^2Yc=nubC{sUqkr$FzqdW8{P z8i{7-rs$uagLY&QxO}?FU{~@R7i|i8q~JcV^Ce}Z@Baw@QeC%~y>}Zxw^iF&=La3A z;1O(bI+F38Z#CVilI`6xlkxkkm)L;V>M?yhAFh~^o)kR1HEMmlI=DASK72Vklxca6 zfP35)Kiq7=9Q-_P?3P;}t}YAeFSiQWz5boLzG!_u)I2=sn|%RUx}0iXqTE_^c)j_H zzo$yG;}O(VFJ^ebeKUYtknn#pnk&%(>OS#z4YNwm7OtB z-S*x*L0!7xZRPG`qz*XjE|5O*Fsh~WVtCu_-uxNdkiaZ|_}tIt%(QC2?(Exx6QZRQ z>y+gDku~>V|6NLdmCL~Gg|GNR`9`gEgZ|&cZ|;rh<`g@g!mW9u3*SrFx4wu}Y+Tj8 zYN&m@H8&sKF0a3+$WNWteUU?y1 zUo&{uTS(g*C~s@~;c`+fv$WgR}0PLR&{S#gw&3yEiy=Uy`$%9aRk1B3m+^Vq@*F zc?s3LZ+JF6pwsq#S5QRtP4VE2ZA5uDd)ew=dxRpFzZB0vUa1S9w~EUlJ@PRi9hKs? z6XKDL++Ex~!e4LT+=zYf8A`ArH^*6-KZHQ*IIRhMMF1U^;%>E6Y03d@nxP4AbV-~+ z;1TE9`sXg>YPk0v zp)NAJqELr!_4&^+%P;D6=v-`9>ug`hg~%Y5->hy|{bG5V@k^5kE@InjSw%mktQfv- zBYA5rsb^eZ+n*w``lI5w>f{be)An5NM0ajJ+2v+$mUFG?pCY8Q-igPoyFc_Z$y!<; zc7{u?$g1LKl(M9JWVEvf`T6J)ml0M;ETWOLy{Zr8$Vau7wC==0!Lmen4hT4vc_IXUPZyCcTJ1zl^>#=;}tL%Ku8!atgDBT|Xpb0b6rh3tf&iOK`g zGXMtZ>^w?0>>$C7ph@9j>+R^#K*_HTGVkmN+Y073tN zb@X6ey8?qcbRZ~?Y1J0B!qVf6BC%EIdrsojyZ=4b_hUE3wNBphv8-~U7kN(tgR99| z>NfM1KBrIb=#w4|67RfD4I#d>*fno@9;tP&u^wd-G5*GJg(2+yv)I#09I5qh-s$&0 z-hevKV)Mi18X)g`>`(@dN3m;xgSY^x=%_+;i)TW54b@e4t1PE?*Iea#=18VduQZH)!K-nmV17Ew`PJMnYxb;E* zVvZq`bN9B|Jlj1oKeA3opKfuJ(I}AA+AzfM zJ4~yMuX3D!Dk92Oa+})jwbo6S%j^z%t0;cW`Ro(7qnqpF<@HkCH#lvEgvKB{@y^Th zr#|h+KZ=vGoJHV;oSE!kpLRhu9_gRM4ch$zz#PyPZCo$lp|koKt?fKDxo6g+)=lg1 zUEyV>hez1Iwo%b>s&fCeFEc-*IPFZO!o72OGJzc+e&cVD>B@FSjc7)Z4AD}aO#0_z zbndmbKEp#h^YQe*biHWwlD>&%d4>+8N@Xk9-}OWT(tvdC_wp?5>_ zaOGhtWqC5XTswj=9N$Hb=QWtV(7%PSG0hKK7gf=;1QMrF|CaiY^X-~}r>jH2QTD6G zIyYnDc!_X{={Iq0!RteN++eer`q}Err=Dgc64C8LgT2#TGxeSjMehjYw5g?I_mB;x zB!?%o+vrusOg-kHc}#z2S}TP}?NVCk)X(ep`&Po&p@Y{|7FBP@gM^JAB;TD{usN6+ zZUhTEK)V6QK^v&da6nEY4@BuaXJD^A$Wks1hn3rnHiAhhZ90UrTqEsu7qTEOQ4Eqd zFy%thZ$hbhm6YfWsHGg`F8>VJu-#JFGN_Xa86QarxY5_J&`|yltVp;-1gHHC2R|yM zRRwdoA#vC8v=Y6Ml!Kr8o3!xX3ES|c_b8?6xb1&+MY2!)TSp5>pT4MHTh(v!?oz)v zTptXIYnoj>Z_AkG{OvuEF-;~k9nJNb%4)Msbs)2h)E3Z8al5(bi=r0|>?P3Z1ih@# z-o(M}&(tS>NrHu!HmxFqe+qlE`O;OL+Qy7=k>s=9=EW(zbN8@dV4pJAoqNOR*)n+i|Z(ZES1b%S-g-=&Xn0Q|b4(qim(!R)n zwFThgkEBVmzjxgWG`Bh2)Qo*KJ9Yp1qO1*V0QVdn;MfA1G6~$tb*jVpKgcZlvc1#Z zTdawMui8XcM8{X)eR&Amm<25_u*Z6TfFOO#@ZcoB(ZnOSv0=Ts=HD;o-<6ERI_ug5 zk^d_;5}bS*LjE3jp}bqmPk|=}uc2ILJuYw0mGFCpD8;{miiqU3I2zs_1Pw2Va^A*D zrQ%xr(T3f?Ajr4h1^trfylnhXLpL5Ud*Uotx#3khkgN+@ zInfDq77IKe1Y})tHA{9D+azn-Xeyxr1hOi(Hh=d!U65pu`4hvO!UQ0HiMIf`Fwos* z|8YQ~v-03z?=oZlCL{1q|3JG`;(e9&KLR_6kaVOuug7Q~r9W*~^C%IyA(u_Pj!(ON`un@ervSpw29822Zs(kC@#06` z_YU`W_+h@uQ!%Vr*}cCK(T8JTMKS(Er_87i+jJlPgbtm1zDbH0sW)?o3?mb_Q_KrO zvd#^+4Ur9QT5REpJO6b1w<$4mO>1G)Hl&TuYx}dxwch6Esltfi`Yi1XhK$5-qvfrB zdS&I??qMyWr&qILErBu;W%@^Uc2W2b|4g{svXM<}T-DmUAbFK6VufwhZVO!cuw$ZJ zo&|K+3(VZ&$=t2rk?~LDD!8VzySS^ExrNUt2^(fr2ZD3{5-#(=Hv_q#hrNzm|fN1KY!15=SYV9Gi<6%!jLhh<2*XmIZ2d^c3dCv)^)Kbh{O!5>6Uf2e;tGw4$L*hM~k;+ zF1myP+ii9Cx}2P<)l@Qp0P<90X_D@) z`p){2m+xFbLE)C3gv(3k zoaLcgbM3n|KBB1u(L;jAROMa@?8vCdQx^dHk6RoKpGcZri!oeJ?C1-0|K4V1MBG60 z@iw>nBZHTF{6D}M3oo55MmkA>-PK7^Zy>)AH(v7n7<*rSRe{$T?T0Chv7}&n0-Yy2 zb?_%U!6z7FM#cVTqvn;Z6skSM{{Gby>g1|Dh*Z_rd#rJ1E4WbBoenaT@|e*Z)%0{G zwF0Z*cE$JP3=xGf;e<=bH51UY?lGg2kixZxs6seF(O9EZpJt)eeAnBXgk+h3v)ns* z^n!dn!UFc%INA60Clso73RnfOp5GwVt$Pa9!{}t{*l1#KY&4u5;OO;}kA>UXO!TG} zOl1Yvcm->GLzqC)CJoGH2&?@!WYrCZOF+lgQL(|bd)}p4nBY>wa5dfFnv5(4iN9E_bCsQVR z?%w*3jlL7y`SC_Wyy7_rlD(_I$~sNWxM$gR?7AxT%pNo0g6NrAj}(oXN_M)MF)eed zyP1K8xUzqm`&mYsd$J_mw_GjZ#Aq54xsT?PI&&KsnzwvUG`I9aiWa71$Bo|Di@(O# zv{U=_F(%F*0Ns6FF=WOp;N^|$o@f^5vv-fXNUiN?+FfF3`)*@q)i|p!?>NRDxleIR zBH6(NXx9fJ#pedt$f3Zz@eh>9FI5}G?tWKU*oo0*f{D?-LW$AT9Xdc4>MDNE)PehS z5{HaudGD>(K2*$%<1u`mASUOoQyMiXK9`k~}C zVg8yRjj|mpR=#1#7wo7ZUzxHSR^WsBEjJBvgJbWZZrM8J9sMU7`g^PYC8P(`GtzYH zX}?UvKWOnxiqt=<+sfi*OVcRT=T(Ry>4h&MED86lKWQ-&he`zQLI@@&gvm9lY zC>5})+!i@PB;w`s1S3at14p|g7;Dac-{G!_XOOmxN zjiw=ru%9fHk5KXRb@#|$p}>rYT&wvGnuZ*TDn(p{OA8;0?SVC33@MtV`|GnYQ_O}W z$^(~+try?^4acFQX0x>=E{7gIi#G;V%1}e)ouevcT3yQGrL#TfkifbUDzW1>v0gA7 z##)6uzji+R9WTvDR#R3m93qe+W4#t`TB>^US+vAhEW4v9aX7B{4tXNxS}3vMR-gdu z-&*h{&OGsk^g8q~Hv+!!>1yz_?5VR8CJKSSQlN~Fi#dAo(8ar!YJRK07(5>b8G;Otb-ldUoC z{oww3pnueG5YhF42(s|O`pZRy*4;lL#keamg!&zwq5k4luhwDHu($pOJo@Z@=(g#) zv-VVa%O>g4`xVQqshNRyHn_+B`LP?Sh+M|$QB%WxV|J@}HX@r9ua!bZg%8g8WhfqK z={uU%9UTjn)?Frh(v=uPDus-l1CaTz6QTxknF=z&ADzQSvJu(iC7r|GM(kg-^2udl zlof4%WP3RSqwrGwI#apuvl%P#t+Phx>*rf;Twty(x0%FKF-ZS4ov`@U>FyO|>+{fG zpa@myCLJac0UQ4C!- z-MotUkDj_T?@o+M{BY!3c2&U}nJ~;SJ(-F}O`S7mqe4Iujr%6$vqOdNT;k396T?u4 zf-jzkxErz8&(BZo6JJCkN^Nu<-|lWX#{NIT-ZCtz?|UCsq(MSLx&^=k4=ipIK+^-sf=kVcqMjTU(MRu1umL zW<7N9{t&z3(=!C&F57b;sVkbTVE1h<7Hr^l{&hAuy0gK+CWs(2NpeR%<=*F`GIfvZ zRCB$S?r&|WK4u`U?Q31k-S@oDfptATc~gJH#_e?Jc0aPy*3qZbO4~?Vg_$x%87-i4 z9LIgW{C8G-U-v#ng`K)i^y(+RNafDA@d;J7u(-i2d=V9PN?@w)hh5InZ{uII2lCGK zlkr7B%9z<6s0^wUe34jX%vQOU_dlge)CTej!RnaVZ%|rP2}J&(@wgBDAVxMqiyPJb zYam4NT|R1kWO$y`bT7>Pw`U#|UtOGABHvbU!|oIFP)?$6b`OGXQqdpcLALyhQ45jgPXQh-J$E#&F`bcUR>>f9k$@$vScx%FiK?i%~%UeDq%+beKK z$v@)+xzWt!ef_W_?)`MBL;bi?P}x^QuJCJC0OP2gT`A~rPTPU1E6ZNtG+(%YMv(6s-gn723l4H5;b zWlu&0s|I-6^!rbvssoHq=*h^@*Y25j|36mITIX-oJBEUe=Z}6#7bu%3%O1)msx*nR ziT*6|;%{eC3YwPakjU<9G@yM-WqCLadOV;`x&Tx@9C%lV|Jwa&?R;~?+3eDDZ~Hju z{?L8-IUyjhBG_DlUBuvI(1!0(8H)Vq|jIBf3Z(7~X$ytb|u1AZCS)(|R|(t$R?-EW~o;yhbljp`z#=DXAeTL!C41E zkB4~ELbKF=SI3=4a8xlwd9Zs7uctIhlkS6>{(^AFWDUw9u62#QI=vekCm#dbxIH+c z9@$~7qHPc(Ytlad==TA|>x0R|y_HeWKao{?o?!1EW5&jrhnnYh>ar^(pRY~WI)>(H zTCd+rs2F|ss=0jmH)EZDRXG`OJKV!zS~C=7GGouhhgSFc_8{*gAR;jGj z(C8EEl{%FnL-~x~d5oaJA$9tNL#^(c4*>D<@DC$q2cm2T)o+)}Vy{2y@L+0OKnV?3 zK;_Mvef0|mB<%J2M7#tsqtu~+WeggKF{3v(4QyLIWA>s*ukvk^0NsPa(|gsyyE5}V z0mf@Cq(@b-oNB_1!IX`*geQh0Bydku*y>CDb`K)9U+M| z&%G`z@2{#C?;1lcN06RdInVjf5ij0JDpO8s*kdCKsK$EAHz9qOxi`|EZ$(7Mqc|3x<84TeMJMRlL>oaSvq z@4;CepXap29v{aXl;kVIs>Mrv?v>Z(HB#uVdv5vaD$rarJHCz0Ecai;k$PsEQ)Gd4 zM+)7l@TE|Eh9sr3S?~E(!nwYBI1zY`oTZJ?CW0uSc|2+$XrybGsH)1Cw87 zwZeP5@c`m3G`*}XK$n<0lL$By9AjfbpADG3&7EDkZYo~Je;WoVE$hol1`Xz^7}>$U zyq=Bml^61*JT@;zhMq}t0~iflFSfwE=x%mD8bqZkW21yj7O9SMln%)Me3{Ew@k$x$ zzd893NMJPwQ;S&J3gL^qMHth0^l$Ld(`SZ8rePWX`cR`{q)}J8%SS&KNqPsiYI)kZ z;7nWG-c>&Y3AGfL))v=m{sjgo^9Pt;O zOudXc16emSX4X*ad^o^{loRShSoizzg9kt&M^n+A8B+HQ*Yw6*E zr8K9|!h6iXctN5m2qDAo+_U^5#gln}%i&R|KJ-V8e2b_><4$05X z8?C*6l(P0JQ zoEsAX8?x_;QBCDL54)?VL^QzLPI>nl=Cm2P`GhdqGlt04&(gzTQ(LZa5schc;X{9Q z!-x9#mj&WGkWKJPSL$cRL!4x5lO`K_ZEL7XOZ+)o>dDpPx-Wh5{`?LYgC0>185ve? zjUyF4^C4n&e`mrUs4N( zv1Oxuh_BS4FqTMCjC5-80UjuF*kw>K=g~dkbDJw%4+&Uw0TofHpVSO8@sD_f5GgZ0{;E(v*#`qyu3dm=8}-=xK| z?K@Fr6WPTA-eq5TB<}*1i(=GESW0(+IdN>+>R|PWJ<>YTY&uZhRO!!K9Nm_muo#v2 zC+PGv=geE7?6RNXQ>6+h!9F~6>fHvLP_}YF=oDinn?SZe!QRjnQ9#>H!q>=TTam53 z@M6V6(xyUThAAt{7}LbP;Sz=q0V#66iivw4K0L4Mzp&bLY*CIE1ZAt5y`w26R<^On zlC~pfil@VC{ipiC9bT{G;C_zD=5t|d{C2&`2a8zDw+^6-zT9%BL?=!~xa~2&$?!wb zOd+tPzYvSr=R%KdPuS<;^D8l5PGK#50Yeo!aZ}HHIajKV!lC|%VDAf!-aF}Jt%f8i z-;beyxLy*sqKVJ1_WEU+7)%6$pPlaJ!^uibFcNIlg?vALc3u-zOuq>okfO33a}@%C*YTiq*XiKahA87Fcc2e3gG6}7VK9SRcSaGcu< z%{R9fpU-+q4!kx_((M{2v1P=m47R;hEZL?lbp+TUHqu16mub6qghkK#EFx1YmuFpqDXE{gw9E^TKl_(Y48fN_lLq3H~8SR0-RskL@4NQV882 zhkq!oWFfE^WSJS^PfX*{UW#2rXDD?N5GPICN7BptD3xVuQKQSujG+m}wgwjNqlkQi z*vi`cnm0ukwq;jD>zI#~m4|{^Ceh{P>G;bi6-GTJqp^v>gSki2{!Z5&5!1|A$+bjyS#8nh%kwo5 zcE`Tw7eFtzzJbya0j|EJ%~*fvOju%_NMxq12Z7+kzAqBrmJA#?x*SgeM!^!`QE7QY z@w&+VCR5?>pK-tJIB+{<>jgG=+?go8=?0f`#d4EE>0&o$Puqx%b~rd4O;*eU-NM0G z%+(%kiJh}nMa|5P*=b~uI3@Y%rrr-;wDMs0S48!rN>bBJv0}Mz>_J{%{$;fP)RW8| z{NSLU9l)xetrPRvW0c_AjL(k6%z{nm%*bxTx5<40;r`r!wf!vKi1Kpm_}4fFJ2b4u zCIbV1CzK7dEtTqgZ3*l=P6eG1G5QAX-ncS#z752a`z^#1`&ruZ<&jB6Gh>l)M7a7p zq&%OOVs%pmD@Mzc^awEq%7*p~iUhxSSunO}m^g%;hUA1$e9DY&b2%=RZ|gN@aZR+cdYJUGXM4$Y+W6 zh~*$T`1MS+;#^?aZ?=I?6X@K2(jG zzOJHEPBI|ueO)!mO;#1>HPa%ptarYjpS?PBN|$MXf`_UqH7Mh{(hX3S>Z-U$^2*UZ z9^>pKR^#jkW@B-R=&ZGk$xv|$$)&YIBm)mFdDo77OuO;_eI)n!eY-B;3W3J9vBHfMiu z`IY_$c+N|@e@gi0BEPjZNb0vn1RB1sAupnMGLj@0uIrnYs;9X(Ys>vv?KfezH#Yl{ zP7iuQG2H*z-Y(gTy{>pAIT8B5(HGlYx2%)RW^^cDQ^nHIPsf4*4}Q-kGYLC0K4Far zCNBFc{F4*$9g`DTWM-fhINcrDIUgxJSLiN;La|eofYWbY(F!tzFr7= zAzziaEBn?L^pQ$tA~Rl>LcS#NEy`F-N}Fv*`f{PX9gB{(nRk1_hz%o%P)tO?XSlF1 zY`D;1>}h)f)%^cXG;H4T#>ZjV(Y1PtoL>JcJeTMxw0s&C6LFSDr3f*RtJ&egjp%g6 zJ`%q8I2h{PCzkGfw;|ws_hXD=)!_9Ty6mm)!sBZgi!X?ViD{zz;pNZWKxy9H-A{bG z6ouc%ClbG-OhnSVA8}<$w1|9XCN>x*PSHVymfP>+;!OGDu1G$DP=7QEey``=i#Scb zUnI+ruNtknw4OL!9VxKf=KB#x!2e@3DSU$WBYt6Ro;lD_n_6Kf8(X17>%GWP_j?gg z=)^?H_lZK{kG_Z>J?&Ujt)B1iuB8e$ws_-4hj0~b!omw{)z@|p(bsloc8DVi`58ck zg}whK+Eg}n-F7f)B!!TCS{PAR<>U;D1Q6+qi>PE~^ock;9HMN65L?9z^r+=05&02} z0`Ce9=xVT_FX{p`6(b6_m z(b79=xH89rhWCEv<6lWaJsni@T1D{C5FRE(yPWUPXh(>Huae$91L~t>L8fQ4gbU9W zxtpE?#lF3;U5UJP|2T8MpmH&qd+v3%(;z9kTcJj@IP_e0*IPYw9K|jyPY8IEK#*k4 zknMr{X{U=Q0kyfKpq&ulMMy|pZlTYG`GFAXS+{2UBJ1A-!4y7Sz`bDpq$EX0A?VL= zVV5->ExkMHHXu3Qy*YGpC%;LW5BQcYai=x$Tq%;hH4#`Ws#$lzNUY+%Czj35O}q1F z_%~kSPbI^50iNFA24JR8-646JX>osnGYN^VY<5PoSDT zYT6hHB+72MxUY;664~qq70P~q3yJ7K*}6-Fj? zPcX`GvC_V3v7Su*A&^9{X34zg6W_fcH>s~9n237o`V`3mi3ZxTQY%HG{Z0gaBBfR` zDqWQG{gWhz!d1~Dxgd_Lw1eZ;lh6-;?Jish%_n75uz#Q5;weYwROSPn2dEV{utIko zGo*mKLez4R>|iNi{{od<;TyT}{1bb0THJpMC^pY84NqcYhiGr6J8LvGR1)?08M9*!jB}upwCNBGpc_n(wxMLQ zU1`L*ux)-0%z#MZnPp1a7{y8M|H+hyhY;j;v0kBEip5Jno5FzF`XrAqw6QSPYD{RQ z@)3<&|M#&jJ)B$=s*7sXmyR3vg2t^+VeE_M?k$$3;+W4*=L@lW)e9OZ!x@e5DC?N4 zic}63^#BS1_eG6zOx90b1!c4y$f+$_bx$P?h4PCdy{)%z&grt;F<6HS5h|g{?CB^sxR{*Wmr(21?axEc-R+&0@2XB zG8WXjzd|hxTDHa)bP<&pshw#i6pEvihlN^~7EGpbS-(`t@`3-m=2*rlEyvR_N zaUbSq<6mC|sb_vv>QX>v5xNceJ}Nd{Ir!l%e*nXbEbfozBv+cQE+zd{<{tZc?;)Cd zJD5*Dp${PC6)z-m$DkgrqT{ekf}9dwNJTd%CaueqY`td5LoBbwb@@ z_k5dA;txmx@w9LR@Rsa}5PW@^>ig8^3jyp`WrKFkz14RvsvHJ2o{U=`Z$DR^jN2I1 zn)r4-S?CR2Zys2#-;6qvIUhU`>TDtbx5)CV_~8Fc+QI*swEvT0g8wsVqphP%+Gy+l zXVP9I^&#}}&uZgCRxV2Z=ih60VZ!ANl9+o+neZCp8oyLBCxmFbTSV^2+gd9IGt)ar+f(jEpL>09O_D@9=ZO=j70`O_A%o z=%EHF%hu^y;=p?SkG)_bO8cw>GJ~^S!{W;Ga4O%3&(b9Yq|(i+w`ZCcMs^l5Q!SXP zge>pWhPjQ}D)7@9zgbJRv{3bVcTc7x7B}j(L?*mtOk1?;HxjJ(VwZ8($v$BX!= zpIIDOW8$a$Te(2q1`IY8Ej0}a2CXzFT$6nnf39Jd?*Tr#Eu~#n!8p~Yc3d%I?QGbL zYtCEMv8mz?={FMo`;u$WE;Y&j^=PF#jOeKaNb3C1zBjEEmXv@voBPRM&Hb{I(2Hy1 zfbNQIv%F*p1@#X&QMTC`v@J{?9w<+zWGC}1wn;ns))dXW`Q~%5t(H2$J^-ntG*R%h z2jH!oc_C`>)40{TD(|yA=Z*^Ks#=gl;3d>;&5z$Rny>!+F{IC>lUFZIY_{0zo$ zeyZcFIV^Ma;^cn_2{8W07`QgCMd1e~tTs)TU}?TQ7-dR@MX$ zm2Q7BWwR}|_EYYu8ta?2;#m7v8HB9+WH>MwZ2hZ2Ei*LT7lFXdnb2WG?Is@KvwV8e812?cp z$|2GtxYqCBy7wMjbE20R3|m-}(8utHtx0$WW*s^ktW*bWIv@X#Og)1dDK$EtK{<#> z)>*Hhupe)$R3ERdXqFDQ^W2%IoIKAzB_^ymdA=+B>Qvcuz_PgXLlbfYxb)m?W)_~Dt0&ZxwM1`l^_L2{fM z;HF>ZHz38wtFG?p)@h>DnG)9}8;4GQCS*sRz^o-e^uu>3U~8)b#)|k06<7IdegfHg z2x}?w;>vK~+iYX2Cc3s+Nth`J~no$5K+1&KbF2*x5hkq`>-y{@(Gn{;JlJHa8H` z#Q$)Jfvq3tDWD&CWlm!n%`@5C{GQ<;+W!!Ga?8ZV(lJqn2Nzo|G#y17nqij@?ymbwdMh0Lg_Wirc&S zQ)Ari8M$7!3xJppwk5gZ&PiZs?vfYZM$5>Y- zPCw{jW7eF?F6DGpKV-6+^rg)+0O?xxmgdNjh}OxHNEGf-nN}M^>ok?G;Sbx3_)c>q zLdA)dLjV;=7lq#fQo2ldkAd`uu9DLZR}DYE4j|%8z%I@78FvWJ*YsJBa!r=P_R!`d z5}2cB^Z8FMXmi|^rDac`mk9q^^LdTJlKQK!?V{h~vX9Yy+}a|CCT~a86Ru76gw(a& zd{({|U7P5w*M2(|&7Ftcji&bBjZzm~XNS)(Uyo9__^m7u`K){?gdaC~WtHMj2ke^H zEjbteycu}VPaAxolM-4w9`ui>iV8T%FY-UxMZaB5(S2znjx`H5N+ir#Vxw=-b`9~u zI9R?LD44*K1P*sgcyGPm5LuLHzzQ`!Ib_H`+Lm+0u%B)nQuA+I-5+<})Fphn+ZAcu z3mS{mt!L`~79&L*@r%Zn9djAM{7^Pr2_ zlSiY43!8Lejp*k?b~r<*iaL+vW_VROEfBeSP|U~E(G>4eyBAh9B-;P4&hO=uq4b+( z@;1-5gNBDQww>lIG0Zp$FCIFI&ZSIIh0*JO11k-8@80bFTPm?++zsI&ROF!a${mdO zxax#~HGrXUti$c?aMYa9+q-1seFf~`SitCwwYxr=Q=+@MPsSpy^MjnfBW$rS zw$Xiu<$q-wMRO94{J!)fFP-)Tv1g7ax>_Aq_u|n-HI??H#Byvic#KeO-t(Uk{Wz5W zG|rq+baf{itMqQgpo}Tj`Ni>+w9iF*RgvJYmd&8F{SU3rUL30xirpW}^5_#CoA79u zJFocNtbEa)zuVk=J?%Hgs-t;qQtd9?>eX5$-8%L5u+<%JX4xx%x!+E$RnW@h<$i$e zoWM9#Fbpk#e(;oTw;B7T7_~XmSsOEC=uot2>CjKdzBe;KQDwMI@b^C7U0fvN zadSenm}AE=#o+f9YIl9i`(>6FbSHj#_C3KX1QWH_OH@O0^UvE2dcI-a3l!s^web=b zWgq`jd;U-GozwhnPFD2$XAOc6Xu&+nm~_v?oODLL4v#UOty~b-pPN(%7_(CZ_n9U? zYhdmgZZ8DiWq3XQMo%Jk3DumvXlIr$dN|%Lq;ad>3!1x*e5>;4g=k&-LHwL86%Z9n zqJkm1&Qip*8DtaccDKTao5^veTwAsYO}6Zl5BA4V z>NlTXncmojzm}lbiy(x`@U+Alo=oD=8>*lr+{%*I5~k#)H$8X_t#T-Z+tFGCA;w-r zeD6U*fV)0ftfJuk2X;u&U8L1iAnDSHm@czmORVYwhoBe_hoC@RfR8cU4h;y^(l0S>rYfy!niYO2v0;g)akd zT=bA@vP#IcLgF~o)R-lx)}rDSgx13n<8IzR+x?$h==xj1fod%}Ucnos&$+S9dYhlo zo6cSeGqbD^3|#u-L{&u+aJ;rKb=|g1@jbHZnj7}i2WvhYPO`K~Jr9iW4lc9xYNke4 zD`$HNe6e&+rE7*csA`*ct>~KBOg)G6jw4Oa-@y2DcHb6eP&m=w6YrH zp04>HVNh>~`rQMxu>QL0Y3S@%WzfSGa!z8Vpsb=Q=)rAAShB32r;X*oZpmz7-OS{h z5qF)c*~``^Z~qA&)myPA-PQBss#LQy{$pJK#~bUHDDrCGvupah*R=C3$OpZUF;r~0 z$8y*T+0FfF7}fprG(G_HQY!U%p`KM)IW9odi>v(V$#F+u>impq)@}KR()~md=88a2 zUeVA?XIMDBhvgGtT3ut&(`CDO5Qp)EMAXyu)AeXI!3W3 z5^~1K%MGtVXNMflhsL12A%9Lwn3-f?$-Rg7(dCpuq_D&fGfH=Zg=5~G$#%Z&%CoBf z1m5jRr7iJoU1VA>T<=jt>{?>Gl5p_s?n3Bs7i+8FO*zxHUYk)ID99X|b?(J#C(C8ydF(^r}SV&JWtU+^OkT;g83ytG6qU zu&2kM``o8FO?rZfr@R;J1v6sVeG^m-jy5mH3N(i_9g*ZnXqt0ALZvN&eIbDCVcuZB z?cT%KtLeqB!4fsvJct5B7?_`6&wklqw7z8B@N>s=O54kw!$d_N3;W?;gQ_BL<__-@ zB$p$8vLwb?-#p;UfzG=(Gj)d#ftr4H-g5xMIJ&=%D{o}%>l;Sf>COw)6f%pZtT?{R zG(w)k^|xAl1?tJ{X+h%KfIG0UdB|&Z4-tcIs2(Jx1g~al>uXt!-3xafLIqpd#y5)` zOO2)w96&o$Z|jd0gX|RO>3C+{oUn4*k_PJEhHEYp2gO=0F^9~3Yu{*(ZL7AkZbW41 z!@?X!lf7Z_xd)BD-b8&^>7^X)c>SWD-lm5|6HOBMxke0 za^-`9BIGURnI32kkX{<6Ch2xrCQPcSbLsUm=}NbX>LkR;!{=-!X{h(P?pPatL$8A# z0WS1|o_~!17-10RHS2QF7kj=fv$a3ut6A>$ zJPY9Xx74~vR-zJ6nR0_GgEzC4Jq^gh+J8dEDSRG&<{ew(uDD*`!ix#U+yxEDA=jTszj zu5bS)d4$XYX&wU4Q!FK^GZ&}*SKvb--jH~2TJ?6!ciD}}rE&IVmLGGrd;;brEH9KI z(We$nXMLF^ElG1C3`b3v6XI8mk?5LR9c#)9M@(ncvj%%zwH&l@4JGc)Xo;r-m_L;VPjhLs=w)k}4Nb(rbQmn|5vE_hQCDx{0x?dO8SC}2dUb_djgcHoYXyBJ8 zYrkmo)Jf^{30iP!bpd{g5CGTiTnEn>>krLe-m8}TE|bmGHJ$RAx_&TARN;8G;MdZ& z6NUT5*T$q>hDj6B+{8Pl|8Yw6+}oTl1@j@I^3(6B`e+PKV;E{LmCIL91C8 zZ~|P0`?ZNHw-h)*yBcHeOCMr$JR9R~a`!&sq);Y#nLg6rV#G67^je}KZ{V(wP_yM5 zSvzoH#og{MPlEo>s#c}eogjVrKU_`2)1KuQA4N6~OO6&8J(Q5{dC9bAoxQyF2Tm6+ z&fm2WlcirsD8{5UI+A^<(D*}Pm-d;E#GX(@i&15+bgZOdK}$>NAoxjK;!-|i&vb(d zV4|f5F?vQh<<-N{`nq`mM3THU=YDj`!NIiGvdmXzBq+(#BbBS&{IS?^r&SpwSPXyb zl>3f<`Ipa;TO;GrqzC5073F#_<5;~4(RUz>O#Sc?Da)b#RT-+7tL<7_B$L8@&3;Mu zNVaipnyVnaHMouX=~C92n=7F+1zgvu9h^8pKvRg=Z~X-7TK3n^tehj511{vtE;_A5 z8$R{CYGO)p%9Sr`4<-8pY+>IZ$CeJ#Q&Zx-O&6> zuPky?4^dBOAdzj4XjP^K^tCEqs=&9)TC21R8-6>te^^*FNh`8DFt8m$|EjZ~Ua4E{ zRz>k!RKJXd-2q`RCZT_eTeU+bau~_%85aDWdd|^{SonU~#v&ay{ZyEh#g2xZR_;GF zsAynT<@Wqb@y{W>(Vs>*sS;D=sr+PFz$M<+8frmOi8?&rzs3w7VXgb%0LCnAJ@ZK; zTRnl@3=ZzStA7{BB7{%$=j9E(AqcLR$P&k__s-(%o@>=-OKg7Fgh9m}Y)4L>c?oGT zvs7OdfL3}bU@WQEFj2~*FQ`1hzPKCqLvOTy#1sBQuf1by)Q8r3_Mzp1@0vZBerIFC z>xfroadfZR(!%Om09IXf7y)ruMB?h*{fZH5x**$E4>8O3Ru72Sckb6BW}l;XDjoEM ztLPH0Kmd#MzjRzhs|w;OHHJ(5udw`a@FBJ3zGqybqk$MqJA1V>Yp&`&QzE$r*nj*&(SXiuFs8|hK{ZXl@B<~hd|g^uvwEPe844dnZuw;%$ zscmc8GkY28OwnRJ^?1Ne9o;YeujkJr%noqbkcU6?L8%8(UC!q`9-4NJe*YdcEMQB+ z%JZHE5g-8G45wr-4Yc>PclwoK)9%V$g2^q zKJLeAY!LBEhsxHRZb+XDVMYN&5nPPyGn&5o45XBrzOs!+huX^nB7u1jM94X7(jNq` z%K9gJKiy%A7fYFobX&|=TU~KG>_sP~T8AcD}$pJ`^(cMgs6}B=zFlUX~9aW{CJ;E8lmP zYQQDsJrOR9ZVbc?L3id@a)=^=(WP1L6WTG=g9W;T8~*^dA~I$FYYgw?Q6dJ_#{p%6 zmL_cDj2^}9t^Y2SjT)b`0H%D3UcuZ12D%Wu^Yk-5G7+I>X$I4U`x(^0mP3jleHY{5 zD)vU{9)v*!5PoG>O4WG*Ma*h|1epblW2}ve2->f{^HwWBkyH@>4>>Ji(XHdHo!h zP!@~3R}ubF0Df`;40-!VV<~$q>Q9J{n+0im4%(wx;+fP^KN_M^FwNSDP75R{Q9ogh z;P=-EFR|AmWkgjVX?EL8pQJ^7@ijB$=__B}yDyc05PGIhi!qDV;z|I^CQ{TgGQgmv zMG!rWR{=FJ4%&XAc>um*H7sA~FU;Z3m0rj^ikrrpxEWl$VZ6oFTzOD%ZNvpMVug>8 zHnpBH-JmzM77J@~6&PuR$f2U6!58tCdTE$|nJ=F;f;p=VNg8Qu&>KOGQkz#)KOacA z-Kas#4I}H=PPJR;&=dljb2O+`7cb-=Kp=bdN_p!x=jKreIxz!#r{9V$-3{FjTMvLfTK4oqL8 z`fgM83xN`bN!aku3&{RJE!`x{R%8z#fzsq>+z?r%{)1X|D%G3-0^LHK-O-raS{+R? znf)`*QOxRUi`X8l{+TP;*Y!z%P;};j4^htN4s!mPI-IwF$~XU<&t+8uGppX;A~e-b zV2m0ks4F-Orx&~h9JY2l#}C!Q0+!YMGsDtv1SJ1-L#;9gbVHo05XO<@77f+-WL+Q( z2*pu->9abvE-vbD!*2~%8A>G`F7X_yBM&}|{UEhGsiXShzI;L@Cr2&`7HAG^=tt$J zBUfS7c1F-Ar$ZV!H%kt#Bx;yd5}Z*b0Zt>%(pVwR-~=e>Fh_TdJbdOFZ&x77A`Mqn zjPlb(M~@Yffp6e)V+!F$`K3grM-yE)6ewLBzhQK`>zxe9VQ^abOUckBUMYlWi$;MW z#n^uS-OpGW|HvR28>*ccMY5LqQga1~bld*Wip{l)==mY?t*!euO|a-L(Z3Jj^T&DT z(UheZyjSg-sb`bYZ=u z*KXpz<+7@-FNM%uTW{ZY2XIfP;jBxr4X|UNDm_nVU^qI@rz7bGi?dSHGdSJ)?%i?A z!XYJZ95A~89UYTu1U*`s0yT!zZg8*-$a5cAOnD-2%ujX&XN&&ElAY|e7I zzxt8{KTCf0{!P-|=Qr%E0|3?n@?MfI74)V^e~>f)(G5 z9@pL~f%*$B>U5w0!_6d1$jNGYV(@6m=H_8ve#3tzAntsB&b`ryQ5B|DK~ zT|%JJ8sC+k+TSyM?fYJYivx=cC1<$N7E#ZuwcfX6ouCP>aM&^~@fQZTn^!0^QwY3o z)as|SQ=?Y!g$@hUltR-W5q@@zrp}#YL}w!PN8XKDBN1*9c;kq@BSAW`AOz(G5_u=> z^vW^i+|94d8?iveE-zXOl(<_LSq8wStS*=XAS{L?qqvy2#H<5c)WAcg#=uq9#@z2q z@8`(g4|`2`S!Z=qLI{TsD&{4c<4=&%6b z8|3u9$FWxI1B@ci0%G;Tp12lNsy_@dMuc$vSWtjsFBXHwA&$Wpp^)^rX@PAtEm&R1 zqC#3UN%jgDW-j)=cwG-NP@A4DC)6=&rwE07!I6TYyh~u5sQL@2Pt|Z2 ztzE+*@v?I2;{wHe(l82K6k!*qJfJ+s8NeO_AeT3%u8j`{0HcGsVwlQ7X=)X-%~;io zzY2ToYp=rVx9sc8_ysCJgf-@Xm@Plj*m${lZ>GpL@cjQ?VkP_V6CKo z@G>_9fUo@==J+uLELe^Sv19%Vdd_K1?Lqt(1i_oP7D0mzom(Hjeh%9y$fRO|On4H* zynU1$#qXl#t>aiAko0+^_(#Yki_cf1_6#%Zlyk55Ft!&<7}} zb>N@a!6MQ|x!M$qrbE}cZ=I{W*IGS7A>@B!7OYcAm(`7tREx7nIvVA1h=r_F_d8po zz;Ac>l>4wHIvk08BYBaRw}?@an}iiQH?gm`;KueXs21H8w3(uH3mVzI{;s_zLQ58A z?~zL*8`yln_4i&NL&~07+kD8`%a1qVe%1%I--!%3a{zHR+mcq0#L=)(jjy6Z&P%!E zYYHaMTr7#cM4~;`bsPE+ zaOn@mkMItFK;$Z9+2Nmdh|xDiYw9y^URX`XK-4cl?ZigRn}!{YR@UT~1&VyA4QTi( zrXFur#Vu1H3C5wSDS1!acv+<4lF855Ffxhl#8IayX+{DCbLKM;K|K^#F7z+?S}ra5 zTJ+wiy41d6Y0#p2<`i)ma;EVN8fyF55%#=th3o~K16wEU347Jr2fcxdR$c?G!71bh zd?$A^JGOW;3pI#!elQVe1Ce8|^zsq4jhsa}*XFE3C(=A)^67#tA+y>j8+%|AIB~ zgaepWTw&hb1<;At1yC)TH83@|XQpt{Qtu5}#|V%CMPBg={+@WX_k`#ls1x0VZz*%t z`qeAADpTlPQ8)v3W$LHi1}DmQm7-=ug0B+StZ4^aEW@MLteXd1x>&zcZ$+;u_*gWY zqD8GW`N%XJkrKl>LFj@GN}-v1pIi!ApP@Q9gE>;&0!Uc{srR~_O%es$M$o&Vr^DgS zg@WPEwV|8PbhaBnM!&PA2vPe8a1%B0XeaSwL*T(!>j#XVFq+xpW`WE8JTbBd%%)@| z#`q&NN&2nREuy=*g0Ve7`>jm|%n=W68MRGS6uk}kHr<4`Gpb>?6ya{ub0jc&**7mV z$9dA(crG_F;}yz-IT7&#+>zd?a~&xUbnp$7)~m z8>wUDXP@2Rz9->%n+;m-uJE$wt{;S*wsGQ&oNT22^thJu?VbhG2qFz=1dY_5A?{=2kK*p%N*!;b;x+8 zhbk)8<64;E9A|V))$%uH19I(Eyz{~hzLl(ON;7v{_1?(}$6qOSDA;Ad&61UPe8lk8 zZto!riu7K4$<0OyO{MHEPU>qG^;C(AlaF6SjIj{Z(S(3IqnQB+n1nYIbT_02QwSnW zC-cUa%P-vy@D!_Fur#KJvj|QRZ_P%&!V}In4wCC} zTl!E7S5-)D4t~ix#HG0PAOZSP*}h=i7(wN-q{2BDHu_$0Dsem2a;fctY`Asyl?gNR zuX0z%RHL@7YErVHOXc4G5!i37&^TT8yKzwJ_gFMe2%#>jrIkh_?Uq7N^p?ob>p@UU zxZ9LMDr%XAz#``K45^uyFNQ`qaXdKkKEgY2_IqVXW&i@d=Oi;+)JKCc`wBhSGb4zBF5D$^CR|2hx(~5KiTSx z+Gd))6cU%-s(lkoYV9}@S?J*Ia02M$1(D2y$MJ~>@eUQXFg!EWjvS;tYtQ7G^=<>7 zzSs)>Bt{5O(*~k~N0X2(f`Bs3Jq|(ZL|&g1>zdWwJ~GxBJ*_R+CC#HE$$D`xaXZOi zAI<)ZXi;|&%xPM6+QQir+;bvVY@rU5_l7Q*PO5|~ePa9z(`ort={0QKH1l(OGI~!z zwg*^+;1r`y*z>*SE;brq7$ccNjeO5qV3 z_XpOB$)Li&?pynWH%-ihHl0SHd+^cb9f|vfyBGe9aPMNxY92j{=En4d zHm1-%@DuF_P|_+9o)jaX45DpoyYR*tdZG%vZT-{-_L$F3 z-`=Gf)faWAatazUq{3L0eThhh!FjTH*z8}OBD4!)Q{SUrp?+lwbixZPiNGY=*8Di` znV``{baxZAF1Ru@ewmchx>d-@XW?k)E{HYmdeY5X9t2;+4#4q+k`avACwSyhlIPfpaLp>3G;%sGdG}E$E|4) z2JP+aC%4xILqQ&Q&1kujkNHB&fSn})DFnw~$jCkqXk$r$rM@`ZFf45&t@kvCqhNC( zrfdvx-RT`f)c}>BM_z}YR^BZ2Nj_Z7@q9l$s`Yr1yI+^SyXEwEhbVBQJ$m{hHh_`3 z`g>-$rN&$BGVJ9SRpGjoyq7qo!;|e~+Kq!|kvoqm@0V$|r_#E-&8$$2%|DVZ`ZU zJerjT;Pum8jk-IB1u_!N>gix5t_pq7)V_SgA@>?Qb^l1piNJ099sbrtipOV4TRHit z*VpQ1>GwKdg-(-B&fH4mh$y^o@I|`*PGGC`ikI?g>gBh*!w3rJ1tMu+P*2@L4z2a! z2tk<%WFt=Ovz2ELyhbfHUVLh9uVy4FzIEiG2;vAhYG5XGB027>k1l@E%ua}PXC>=@ z2r>j&!6@kc3h68tt_WB-3h20(xM3YP^L#zqDt21SHe3eh$O*l4BKkW$ z{AL(LSQQ2WPf#EJ496vn6hobzmH0NdEBOqLoS*! zp%2Fit{PLkH(JwzEt3$}s=$KNp5PR`My~8em{Gq*H2cBI_`krmAS>B_ju=Y-A6^TH zg%|WGim_Jj=M@dbhs;yfxyj$~=hzRGso==rO1?gcUns>z!UC>$Ln`<0$YImnrUG&W z@o%2lEnYrzi?i0^-ymk8HJ1qsc3pyh6u+4Aye`hg(I+(L8Y?*_Nuzk<(5P*~+isDZ z{Ia8le|vW4XGcvgX(sfEzN4n_XYM)2XU{vzm5WOph^c@v-WN*z&3XaTp_fRTnkvJM z#{3tFlM2P7K~Z;#|E4ktN*lt&_8Q(OaDn%=r_2`-82 zU&-OzimXXBvuETH!c7cnxWm|CAtPkY z#+6%U>jcuDeXgwLsHd!@QT}6T^Z9sNvy=Hix7EkDw1XvhXA$pc2aQ1K@xbL~h|C1OHbhPMKZd4d zM<=m6VL`v7N>$PCtK}ZMl9mXCr`zfj=c34(tt@3^mpg-7xvQ`Q_bD z)DX-R0Hi^<6Av9C5j?d^%~D6rS2YP1^WV@Pi zLZkoj+_X*?v9>t~EF0td*->~K6UKHC9;~e1%2Ebx4rr~R7t==_ds>U?`Ku?kiR`6a z%kh^bKIce)*g??HHD zCNxMb_oj8C+&}D1J6;|RW%+C+LhMSNP*boWO zkJqvnX5$#7RJV7}NFFhge*lRav1~iEL{p3yJvQfIDS*$r{L)WEjLa!lJS14I6TJkT z?Y=mngekQ^YZd=k3K}}8y*dkOQfYopw%42)(M{M&$2cCqAC?U`G@7c8C!)NxNX%ih z*(e!u&f=|?s-^Cc^C8Xzi~iglysah!-u58cxjcu|pQjP(s_m!1MD7QpjXyp1dwoG) zzYAtTKGs0^M;yx7IgVf`qJ;cl9mF%1;=ZiM6f@)Q9bQqpGImO>n9D=@8OybhYzk-h z${?$$ZYC<55B|s8^#k;3KClDfS@7UxIP&Z>cYT9xapOC>`T>t{q+AvKjBOO%OlNH3 zrc65P2PD18^G%s5QZ&0+#bY%@x-%(CmC7r!`#3p~2*~P2ii+nI4g&S~#NG|^2Zy*Y zsRzZS@(*t%ez5h}Oa)!jHnArY%`UG)iGasyBq(DO_Xkf%X2-oke?BEe)dq4kLvhta z5T`0qmy)c%KPhKB#a7; zxI+N5&xwE}*;KQZ@47DZlZZ}q#=Fvqw#kgn*D9GeM@dZR?H6L+`BFuAzq~wK{ZyS^i2j{(ClA7bdj>I80kx(LuPQ?7v9=WPCNpQHNsrNcasOP@+@UXEjtV7v(84 zmK&~GUP299LNj?7zdsdiNvnu}*h|vo@q7XK#Pf0Sl7Gl9v6oy&a7(Q?XQevR0FXNc z0>^;&bEr5y4(fr|K_j)j0qTUX6Y7D4WPU(iqfESDGQE%z%?ie}&2jgnkI18SVt|ep zph08`T#&zs@Gf9NCc&7HhN?mkkT&Tv@eVMHK?him>J_$Agtr5{OxXcGtY<>LRe2Qi z3pF4jR6F4C%8g)iPR3-2@YTWZ!V4bU=p&7~^v-<-xpaU0Y@CkkMoDUa<>md6$^gQ5W6_}C%AImxpcc->Gy zxgsBGm^pdYHZ5hg(Y> zhY*d3U?=oCk?myCGml#mGA-B%MhI{Tb)aVWO}=adhIXLDh8(aC@~Ne77C00PI7&N} zXgI`8prA&wU=sJf+l{u;+e_ZNIqapKN7o$=Se=R5>@ifAc4pET3NA*Mqy+_yZOYS^ zxaL3dqF|8u?dsT7+f)gvsYtGOn=rmPztEE{j7@(8E?Hf8BLW}f^z6`TWl0e!r z5*;K+Ao&HlDf#;0+VG|nmgU>XbP42APkf35@F4v0iR-br{v-FkKPvGgrTsWP*sp%k z`6I?eg~{T6FrGLdLgX*p<1er7cZ^fLzxe0v1tCpNhE>GA<+cXjK%nB1+|v%T_Svk|N;KIsY2l1A74Do-aLz{OGQvLw)$BHsEvu&v=wWczpC1b?S4hb zg$>+`veI6w*+vcP!YhVbA>h~%O@Ved_((#4lH639v z5s{F)lO{b{3GTIsV2EwW(j)zgA)e_0iZ^N=*q}3y7$&E58V#w_rbEK{GbM4H2~; zFDQrEotOxV#k8z!RLhw780n;PTq==K+<$btZy#H2m;>`|T&fL^`s@+Ko3c^_-N$zM zDY%9_Mh10og{9Qm=RXFXzw9-~l=i;>q}FZ=3cE|O7uG^*3Tru5(w3FI`n-e&j{beL zhg7`~FVZuFSTwCB3&y!QhCRF1HQYXUMqQ|08|lolq#+;cR{nySKpnHBoXaE`0kUTm zc)NYjBO8yo;AVQ0ji=0ES3FsDL@(AJk%fh)$)4Qd{fpyGT$Xo8`Bc`nk+qCqeniF7 z52msgWbSZV8GB`1iA69s?;%Vf7()*g9*x?A!2|Dn?Cz6?DGKHPT%&>`me|#%nUGgs z=sM@j-nGa-QWWktr;G59Ff9|^w0y_HlR>Z0m4sqdkQ!Xwb$j+mdO!=Ra)4`f0b6k-1mNHe;Xj%7!rX4}1u(&5V~I@HB`Z zi|#p5w!2-;z*Yxe;l* z(3+knkAWf1frAWLfR+?f_skc|LubanAs9}7!`8aJ7U*NP&OMo@2j-)_s$}zUpE!mg z^<2;EGQWJ9s9~C-9*yw6B9oXoiW5Ww+TMBqt4MKBRviz*{B@apYY?y7Yh@r26oALn z1z5?1eF2z*^izh`NlVh*VchO4X2cS{v?xHEeh_PA&S71mZ}PSu*?Tl#X?W*3lRy)d zJr90Bq{llSq#OWr5dWY0pD#-v6J8WxFG5sqe0jTmKqE(>8DK?1JflTOZ@mr&a>Ua) z9~RI#7xBzP#Te%Y6k~jDDEB(G=;xt?ru>o!A0Azkuf0?xmtTT3Hlw4$b!1PcYHXg(&tr3{e!$Z!ZF*nEgFa$$kXzc zqFjUY`{vcz-+7?*F=+k=bt~)z(gaHj~3*4ELB{1W{Q{VqK4;H z7>)fg%98O3_WqjA1f%wR+J8pvn*SNKdtENtS++&5JJb=9V+#)W-~g%L9_saI;oWP3 z)w=xRxi^_|a6rxNa!9b!*+qhLXHC!%!IHfb99(m0jBFC#JzL<6EoopEFZGE zZ{+`LG7Q{>79Wxky6&x*u8DW(t3WJcCzj$|Yw)7k(?7;vChvL#?cKjtI94H}kD68oTVmV4==EjEYCvbt+qzx9o!86-Y83PYkU( zbZ#G8mauAkV0`iDLTTCj-1|ScyEGvK?8Hj{s_)9yxfvl?x&O0%+s!+Ok9t(IzXiQh zOgNb682ittZN5b?Y7?>qqqaFX{XqA>KIT7bhZ>mwT!p#T+#Fe@iMNl<=oF0{srqZW zoLx=H;6%l~^#)SBCgCjZ)%m$E7cPXwODkc#ylOp2C514- zs)q$}XmA(2DH`)dW!7^LO? zl2;}E)3n#3x z4R($;RSIk8VV8h*rfEMCsl5T)AIxJjY#Fburo{{G9{l`FOlk^BP3_Z|@Q zZPDKc$y&wfX=P}Oev;>O=U;193g&2gd)mTWA6-}HsPbo}|EZ`#S=J8U%eCz?=J}sa z-VX;i`x%NoyeIB=UoaZhmSrehmD-lmJ;vc{Zg0$7t7Wrv>wIETRHaaFVBz%WosPHf*4-5Wn;O)BC!1#agp>O> zs*xq>+-XHAqqw4(h7Vo170&|Dz0wXI#1vhr`sjvoTY|NhEeObM($_+lco86B5@&@z z`%sZ4xbvZc#XzVpti>!F@{A}VnhhcTnw3_XG5*`}N81V(U^!ue4xT_$w$hG-xsE=Y zPC-u{+NpWF*Xt?q`q+d*{WUHSlb2)p(mH#ky46mseF92U3=${-iNm}d&hf{xoM=Xn zT1j+O4lu_f>K^aq{}Rl_rN+Q2#J*tM=FLyzp{&XVvIo(rWd%A^NjSHbVv(^?{_)l}90>L65-V5h0?8nudR^OTsC^ z{uo^@>%OZu$1#7*6j@+fv%RUK+scHM?6SvbaGAt)t~EY3(&fdlm2{NrRdE@`RblUy z@R_+t7{%fLUVSKK@&54Z6$-LcS@1?E5cm7{1A|V7JzjUc=&^atQJGg#6J?cLDMnr< zayX-uXJ5unB&`)|+)BqM$^@3E+<4OZ;BG32s}Jv$XxbepM|(^}V`&Yy=Zr-ylghw9 z=}P!UxS|bY&{JsZVnn({91^+phV`!RhAGDpu*~udt1nBG&}D&6$rZKKO>gZG_DVLE z_)N)IlI2Z!#JSHgFFbn^RWK7vSNE!f)eO>`;u?L%0B&cSCP9h~fc+{YnCx;jc}(qwO|Vfb|L^W(a`C?x4zOE+P1zr90?6RNf_opXmCl=IEA{*BVn=uAVx)kri(1Km|6 zg`JZtNglS6AUdgXnQ zwV1Czep0({7}+A(^n&j@;;)H^GGu`z$y;{yL`BWd{Z)iy#R{k8L8z zH`l1QqG_08)w{X8X#}0!4C~rHHO&Ou+P>F0A{}m0?1T+z=kX*Luony)*q&(T^`4Qg zRCC)9S+W!XEF$1f^1yM6gFizWeIQ%dm>)gv8#A{%qkJG1dt{$khp1iie6~fGn0mmq zxJfDP?MtFH$!==Xyr4#- zJH|!nu9^!-&ZW(T(OjWPy5*aU{NUpjIR85vo={A0hp{dx^2+=40bovF7-tQe8!yy! zdfD!>5kveWZm#n+eH(a8u^ZIm0`hfvV;2ds&=k{)RDgRJ+D7*2e(Q1BShIdD5UC*Q zap!#`VRPzY!y7lJq155>6RJEMI+x>7XdiiTuR9M3|GxcbU>70QocxPnrnAbo1!Mni zm!%Dqn+BMXcgULq7u~8KIH#Y{cuVTM;d^9iwkg9AGYO6e-*l9z!q|UoCab~-#;+py ziLwJSaA?o>$m0UA7v^`2ptUV>g5~z7tW5+$`D#{s)l0%N0He2?YZIUV-$Bu9Am2U< z2#~froOo)19#eZV+tugddd&pxmw=cKuBO5&9+X zAlXu5)=LT;m*hqbUvZ=M)PXHZY!ciQ+byR-{HQ;jOf3U4baS2OuPK0y70*$DwPJpl z2t(Hb(p|ah95_6-JATb@*SW#Behq$7QG`4`{OBjF zVit+~xLz8+Io?>`59u3f$71-r{NXo#xDJTp)kG7CE%IQHHgyUNx@l1M??f!wDp0$d`Toa*|qC;&zVu>JiWCQFhM zBStkQyo^}d$ty=aH&l7OZsUR(nd?3-?8RHIE-O4ksK&>o4nOR|#XNZ)Ul;JcUn|D3 zRL}<$YbI+@&2Z9^@h}o;8Ok;@-k5&JvK6z^={vIPRqg3>Vb1%UrM~7uy$y3bA|abN z3-po}-q&{}O-p#YOlr#orvdvV~%{xoMt1^kulSJ9Ek`uitTFcbOiA z12{AyT-Xsywy2IVqB1hqEp80miKGzeSHUt>#pwBQ%~f9m*&VprvZqGJe`$lLfS`u!q9ZG_TeW7q}B^ZkNNuBWif`bG2bDnfZ@FUi$g=>n&?m^>XOV0qwM+B27{rpWZ1K*?pwzHjv#(ga zN;!Ed;CtTMQ~`59+@iz!lWyn;g`2RZtddN(=R-i4dDJWVZn)x{!1P1ls3^@)=rf&o z5Jt@0L9)xUfX&^!%Z$DYuINob#uJw1o}}4#7$2cbN!{UUqZYd$&p;yw*?Kc{-SA|< zvz>MUn?V`lEnj=a5G z;y{X?GH1XIdy!+6>sWh<(5zyubCRF8BQjmwbiaexPtkUQY5txhjrt#Ia0h9uucl5kTlJ-ILPg;1~cdp zha99(_Rl(R*T7HJcn|`f%UmDWq6Va2*v1l(cCw>M*pMU795lbcJe#v!UYsi_CkaBv zlbL|z6haU$av=zf{3~q9k`km;aQmnw>}41eP$jYeb;i!!!9MbNp5UzTQt;$FXW>({ zAaI=bd9ATUP^g>AXfhk*=Fcc5!$i&5<_8zyT#d#LB=dkZXcaEcySnvP|1W0MeGXH} zr9plMKH{Ny(&1ckbFr4c3+5*{hj4&YRG1qFM4mY}oIPndy8oASB94R}JNYDL){^th zQ*V0nE@de~{RHU*#*EQCm_yx#U3!3MLigD%^PM}SF8O36sF{U(vjix%`Hqix$i`Ja z>vJdaHr)B00Bcmq^UAon$neyM-hnS^?Gx?@bTBNVVtd|y!5~ObdJkxr_1|&5Gv_2{ zTNs4BEp11oMa9lX8fY70>GTMh^cRNaQ6`cdH9EsgzyRCW`E|Adx(U0Fk*IOcKW+fHI&F)tHi=lEavy;^#xQl@6VslPSZ`03_VLM*{5(_ zXa+F>X?pp(UmS@DLil+)20n0gN0edNfCm9oZr&ribc-5oyxmZbc9f~Au3LGl4IF7pz?a`-1%gGFlk`1l_WZxyZY+YWVn)2IKQ| zUHyBN=KH>VZr+tGf0rMnR@b`GKKbOX4HO-umfq6L20XToap%#Fc8~Dq8>A*H>!@|A zs;-4()YO*6)YOWJ*3j}a?j^y zSk{oIbjM|~ETgknmd}X^GBr+9`{u@@=jJN6Hr(@3>B>%ak1kU~kg!k)9;D~lH;O!ZO=Yk!j=T&=$r|xRlf{d#LRb1)6BjaWr zi>3>sb%&9vmlL8DFTE?C6$4}_J@X$itP^hBQ%Owp-;oLO<;2dn2=qI`Wc!4PkE&lz zY*qbl;*DeNUx1#1f6x!F)-~Q1{G(3V1pNZ=Y5&?7tb7I3NhXBKSLyiZH|v$M!k*s> zQ_Kb&= z)A4n*B7sh}@{bYFJtdz^X7ClRbg^sr`M+oJEUo;SRAt{UMLylH$t4pFf{#Ht5V;XJ zlh;8k**~vDJ|!>(u~di9s!&a<+&eK#oZMBJ5#{v z&jCo&GSc<{;awS*{0wJM@B2?|=PVl6nF|q!*q!%&QuvQaRtA!Iglo$;QYk#*US9U_ zUt_n!kVf)UPU66m!wRC+I-%9NA3MkHJ5&b_JN2QB!b6|K&V%wo$#=)Vw;A#3jX^I0 zprtPYw(OhZS(%vY8S!&=D9e`tRSz3!5#f^0 zfga6I%d6%>o(i&Rz?7CbK_N-9sF9#a-`Ge$htI)e$TrkekfXo?CUlnG5;+ zjcalPMjzQA_M+4~XmU!#)Y(>he8cM}?QK3P&bz0j;k1!G%04lESKEN2!C1h@e*k^? zcE3@LagaKA)@ zPM>+I0Z49;!95MYzaO3Heq9Z8%4-`nsdl@HQe8!Xug?P&!K2Mb8z{qrP>{Xtr^)03qdL3@{;?}}}Fw>XL=%Z-t1 z$#Y0fpZCo~HNv-*N?bbVq!WcBi$9x7uKIcy-<_5ZCzO7eOBUa1V^w{VG|0xCnJxLr zhG~#3yYQPND$A?W+L+C&lWwVpCk*>xk}IsiZIVm%gLY%d73kFFub9-Oq?+q~*Z2QQ z6)$`yFu@BJJ7ZAq22s|Tfe-Cg;*-l!}wJ7Uk6Z-P#G$rV2qvRu!wjXzV@*gG2 z7`|NK`s_qMH^*xA!h3C^snP6s48Jpizqx*P7X0w((b8W>r4^ZvH@%4%Oui^8y+)L1 z;*Qo8l`6#9oxKdnw}wUJSlz9?vVVu^d9u*N>E>_Kz14I*>KuGQ;6G8g?sGQY-4a*F zZA*FFh!C*M{=s(|$4hy;_2(XBN3!X;ITL9w z$OUB|$@RX_Q~3`3C3HilDE(ULWMWA{_*&;1H!~MgN_sjRQ1Rk!y;q8S#I#}e3xo3) zRMb`jw5UCPgD$%>l?{QfhwbM4*-YJq`)3(KlPPw42Y+@gOCG$)1xI#CR~6>2rhylH zXZ6lZr{oKaC7=g?RC(?dg&AuvA?g|c@r^{@_?3eeDcRaw=hxgH|K2%%i6~?DCgNZ25SjRcj}!iD(pD7SKJrIv?D5l!wO4hTiS|Zw$%pj zJf5z(D|PG6H{_>AJHeZDr4WJ>VX*kn&A-wR0`BTA!!Ta8uBIG3i{axJI*DN_$K7kjn`x zS6**kP8VoruX8~;66V%X`7C317I`2-z2W$gAd9~r3%kUCL)=RLRoeNk&} zZBRGBKVeKjCD0BII^R4mXez8CZ3y%Ve5vLqCbg4Lm(Q{mz?8mYZj{}mfc`Y)a?!$G z@AUGn!uD+KCJKG!Fb?(e4`{u>GWH%cRm)y6m9&H*mbkj+8^Q zd;%0MU9xiBH^~Z*Pn`K;P-+(CBp?F1x-YZP-;GyLryM|8&#f<8bbfs;!eJm)W`b7s zE*8rIw~f?Hpn24{#w;dh>4zdz{G-UHYH$ z_f^K_cdoxL6l?Wp25Y}Mmy6?Y7CqcKJFb15?{V+KO{P@}h zQqlR%$qh9#Q{xL`@bAItdjXeDyvC=K<2>-Vw7tFbpVi95nzaAOs*bJ7F$?7E3a?e= zQcSsf@822<46p>ZMMy&sRRc8e;52#f!FXsG)9QR|JeU5W#D)g*_`s!QlT##IcCO^@DKe9^A|@CHbC!hiffkQFye&^G%MCj?kb229%q4P)ElT?m z=_P8i9epEjS$`((c}nQK#hb`SRL0Jv1tW4<)+VZFXSxL-LV6@(?h{SemVNagp6zEK zLWu?1OmGop%P|l+D+JQrC(_IzX>Po+Cd&3D)YMTl5LN7e*oc6D03J3%k8eb5L>Ie# zM5ujIa)094G$LjGyCIJLGgfbI&7$8_etyD8WSn!AGC<^mSrzXflHF$_nlX}BdrUMV z!=6Mzl-@<$EK3+hpt89evLQy@oI>O>PDbhj@|6`JsfU;UZLw{_=vcMdHVs5tlM~|3 z*EB8o;_%rW#Cm|{E^?iunE$*^bl1`8)bXS~vPtybya3xZ!PkmOXA_yZJ9k-u@Bgyt z4PtvcL?k;xN#q=-?@Ss3qaLQe8v=t0Xp=Oj($rZK&!VRzMB#)>M-chI?p?JIp$Zpz zQi&>*-ct}6Gis1v84{`FMN9E;a)Il()T_S1I0O`skNz)WbC|-+y7qCVe1lu~| ziE-wCxCg)ZCR@q057)6C=2?WTMF$Xk?HV!d6?l!tOo1fl!nUMMz?m&XtuZsS8|Wao z2v`db$XDdTZ~baB;liiIlh;3QoCw*$i*VsfsgelzgMA!7xnn2R{C>*@LPP~ zy)%s$;Q>g2gsh0beD2mp4C9`TUSK|dUgN}z_f(m~4SX zUi&{-in|yO#;0$$1j6Wv--TZME+M%vY84Bi*xXnrKgNZ~lW!^%@E)`G@*clMk{)|L z44-Y>R&dAboT7~Nmm5{(Tk%^xSHaErP2v{3$g5o-fcx~~7SDM3uy<&aDwr}j%84=< zMnC66a=kpuaLL{q(1QPQ7T$yjTmKT$l=tvO6+!486C9P&-lUpI z2nvL}Q%^8RC;aW>8+JFc8@R{C#@U@K+jq~KOf&xOBqpzV`@i&JSOqG)UG>(|K7@%f zowL7UxT2}yyAY*ir5bE%4~j~$V>$X(fiG$fxR*>qK5?O=_OZsPX#paq6=*cHq1 zDkn)5{&+pN^ypnW-}iXiCipbnDdp9;6G_t7!lo{TvW8#fN25iJ;N`qGot0L#KctUp z4y0b=_iv)$O&^;|{@(djUJtl)KK;YGI0(MUd|0z_TNPieeN^{2Va@@!;dqIcBRrY9272eURbjF>;Plz_~Q&WfG#|%LF2OU zrf*vEtjMS-hIe{xdg-q8r!l5SfVF~iTo6rA{+7|z`4V#7`-=Wd^rLvZV(EEJcmD`J zVvkDoT*1|lal~q4RrHD)R?tL%gf+zx-IUKsR{+1bT%ig*qvY{7PJvX<%Boe^Nr1y=WQn!1{P<`7q^BWu&lwlkEMRa7%!%7|#+?T!*BVju*BYiDnueeJ!LRDH;8BmbPXWeyYQg!sYQdu#=YRzBLtr1z zHMB%xzR6Yd`6V#2jf%*QY>Ca#MwqCAkCxFMZ$?n8MhR9lX^A=Iv9B~LPk*GPS znmA+wt(X3ojMyvcHZg}h1?gluNG~LcK|ADX_4PGCNtgutN*P_vMNuJ6Mn-)7*>GZF zm*qC`u~NmuW)9b9AxeCt#N*j?M3Xza)FDxq`uO*4Kp7&Jfhmh*Mxx2l0HRru*F>_K z1w=0K!o=1?*2E$1)|5oF%+mosU-0M>O{V|58=``o{t|Ss7JIV{5V(dxS#JjB_^%Z{ z=w8Fh^G}_RznnS`ip)1n%@G24{5prUs3kb6=x#}lcsms>Egc27gilD~b?2_PQqKU% zHAlELaj@o+^I83j)n#fu68te*ro(@N{N%%O!$4%9)9y^z3arJy?elaqP7cqsAu2nAi;q2$VYG-N#DKtn z=p(WGUgXx+lH9zyAEuoAv!wRU8V z_|gB#X56yKITm_04br5#pzsTvxBgqFxW=IR9r*S0p*%&hc6nfa#$j61gJ!iPOHTHT zLydfOKPh(Yo&AdEX$9WCW)R&G0`b$K42-Fkx51ug4J@M_EItBb=3Rq7yle6y?ob8* zQ6&spQuia!%gop^4)Co(d*co@EW-Vy3@T@;la7j@rAYbA{f`whB++l~-Z~bejZ38T zuQI0aC*TYHOO__NDUS&!l>Soe@0`;#Clzv?V=5(_tMxK~IZ%o6{M35~gA}ae1l*MX z)ED-`1(pGH;ObYHKF>n+Zg9%mSms*ZKN$QOKGj;^rz$|!TAwK(>0E7*0rY#70URYh zD59)B2^yKNzhvI-#OXe-m%J0)h3|vbQA30U3C`U?GdixM?`g* zJS`Aj#>sEAmi%-R10M`F=uEU-aeA6%09qq+AV(>x%#-$Z-9V=>dtTkJXkMM^5G!ur ze)6_$iMIE`022=CtK|VS6D1%6W41N6)V=em^Xf9=JqRepdVrEpJ-{F&0Qh3I&YpV~ z+Vd;~=)m0!@V&EZ^jFk;j(!%p$JY#K5NalHQ21Oq#OxTom6w+IAF!~>mlZ$2+2d_- zGF!)ShuG(vBhd^OA8|Q=E`;!%YTkfQHY>b|4w3FdvjdIvv+NGK%`ltf5bug_W@8S2DGzLi z?i|nv#rRg0wbrX5+UuuOTI=Ps!hNd_!hOkkBzLT_4db4f?e(g?@8}P|Nz6U-OR!ve zwye-J)Y>-GHd^LM>5F;KNZ)qXH*jvM8acmx)jy;PvePBgU93~uviRIRVFuyBA1zWw zCpmAatj4o-d*jyRHM@}rAcYR^BB+H$NQQsk!gx=g3oneYnZPEWmPOx&wIlz^J?U+2 zWVYQ`Hjp}6BIuSmV=PBBqbi)M-t~Rh#5fJ*`udvWGW`xbb-rMB(>=i7sgr}!1chx; zUCCgMrO0UqG*l|yH!Yz6Zt89L*P)_>$XJ#-*dV6)Zm_|xTD_1qev$w!3qF$4d@9CS zRT54@nhuj)c4gEQ|=BbFh2|Ne8NcTlfK_Zhz8pUk=xRX5N{o$ zyCFbIx4R+Uu}1yDKsnfx8yv5m|a3tmi!jO@1192w*$=`%_qhB;8 zx8iRq$xe#BT-OrmcK&CuII*S|WL*3G$(hAc=*XgXs@0pX_*Bh${-(Z1w6NtSVQdZg zwZ*S7)+=_sz~RlRX4*?|lfKHqcA^kz@VCKT@6It!25_ZUlz3`4uavsy& zL{Zb-m!Qho7Ons4jZmgsmDX0CK&rtgJ(g^~Sh5uxCaOV(j?k*$_RuQj_bsYAm9sze zDrX<-zd1@KqtzgcEJi`?d8r2N9@7r34XH5)BQ*CYZROxY1}1ywE5acgN1OpdWv2zO5Yc{)-#k=-(7ryKq7`7N90`VZ~;E&mRfpv?q zeS1!$yQ~Xenn0-XgUi#p`7bwHxj`2j&Nr8sW1Q?l_MeNW`E**`339GPN(MBIh{Hpr zuOD5-pO@}8F&~}D?i3F_x=}F9rPT3D#*0imGz)+9$J!N z#Q+JY%T`k1+;F!@4;Gv`Jw^s!>D2FK`2?%PcCs7)ONGaYMj9lkdOTS;IQa+>TDkIF zgSu3e-xG*UV(R^IZv~I%4wp++O{Y&c@Q&hDNXH|u+U##H^ePlfi4#fN$gP~aWXaoX zu|&UNVipVX*|e+$L%kC&~*4>*SC7&+ei%MWgR#zcxa!ecJ(-C zgZh&P=|#OIOU`zMO-{nuiDwh>Kqu5%N=y--))5SjvG2#i_R)x16uT1+H7mOsLuA>Pcg5S#CPCd(9rxY_hIXnK1e-*OCGys4^}P+W<<* zX_>|J&-C7#h%%oX&rr{yrm-CtOG6Ecn=0jv9gNZqqRZFKD=$kVyIjTwc6a*>d7FfE z8qEHDDcI}f|H_a4y>($OT`Rn_T5MP{y))>44K92p|L=>zqZ>Q9W1lpMnxUq>2NN;9 zH>S!uIsac_ZvhoY(6kFjAZS7$!GgQHyDydmNpK4eAuP7oV!=Xi2@Z=b8Y~3a;2~&` z#odD}E?Hdv;kEnz-~G?wLRUw>A1BcTO|--lXJe za0dMLrWWz!d+PP~>OCOI~^KYgJ{$%fa5@J=bR9dt$f?cmjA;?OkB4$HvNoCUy5XBR_qOKyu*WXRkGnx+f({jQWMo=;)a z;x6aM=ivpjrcTDbe%f8bA2c|_(ro^ePqLy?zY%3+T=^Af_({HJ8M z_Z#gAZ`Mr3OJoC~6q?^c&Up4$%T#KX0BOfxvxO);l8#YT0_A}pu1Y)MmQb)UiH~41 zA(%j8H=ziZ%U7dA;mwnZ=oPJ6NAiiTVWca8XQNc22pSsvO*p1Vzv9>i-|F#1Un3Xj zyLx85@ClknZ^RE2!y;8~OyNVDqPHhaCu7>`XiV5w?kA^uAs(ey_y=#XP@_z_jZr-< z(pcm|T#{VBj@X0`>*O0^UJw^NCj8Am|R|py7SqePis~f=}>(7 z4lGj?o}i+xGX;HM&R!BVZL5B4EH3$Sv|kY9~I@(EM&?=iij{6ue=bE81Y$JZ&R6*Bn!`= z+L3a06Nos#6WP~LU|hE8{(?KVBYPN_fyLlb-QGhXqQ~nk_hHG#%$Z~vW;Kl<3#q;4G(KiPm{jq7ntzdBpd_PT;=vx8zn?S-qCXIclA`J0{XkNqvX%-6G zMiN54cOeIgA5xm5)PBFYZ;rBAl^>p}zxVjm><=^@AaunTIv9|A>d^Bq5dm z=p*;jaJx^BhOAfX^X@?eq(l2~a>Dp=a#l9x?m=fa-G#9sNjNeG%tOJ17|_|8cSM0m zBBh*wcZwmuqxV1$9m5=$ObM61X%($)tv1cPK{>8 z9Fd)bn*@L;8RG()cLs`+wZ$S-unqq;G^=(S(3V$CXEAI*RkdL=_rvB{By}%iBw!&9 z51g4kh?LiRkyRZo&+zzMz@OQBPo_23Z9;jdK3x?jJO>?@FjNncc>Ss~(@i!~4E61~ z8_=#8YKaJfyoeJ61QJ8_JaePodbmzmA0gHqCj^NhdIiH`C_%?@m7octu!>B91uHAB zcs*h~d#1d3i6pwu_&gSbFM^-!WfDVOP|JF*D9)F2=UAY!&oWL?;pn(e9p1&b;R5`O z4%9%3A^%xcPtK;w?*OvT@4vSFyVf7>D^^O|614-YW*zL{VD94!d%*=n5MQG+`o7kt z(j!TRlZMdoKg3T9OAP71Gk9IueqG3}zhwAV75BwItET1U)^oG+`xVr**Xfwp+{*t5 z2V0dv_0HJ@t*O5=Sug0eiD|9BROywR`kcn`W`jE_t(xvve{g&%Acp|KV>%mZZ6X0g zr`xG3MWT04QlhsVGn?BgdrxM4#bE!Agw}YlFoJ#Ydtaci!1{&RqY^YpuZ1dXO@^-k z`Rp2r>4?lZNfxIW+YcG>MpM~vz({vJ6gDNd-%zNbe!rFq&s3-9ihI0DiM#n!GCOLU zqQ5>`gwJ9VMj#bGB(a|?d_x6AjsF~l+SaeAHCIatL_=-qWVT^z3iPYU>X^^qdi00S zHuY{j-?==qAdI#*a|>+LUqj~3pJB2LRa=&0KyL!8cJsaNIOJYWp=yp$a_i#$L|kv*0^ny^B7% zEdTsz!+Z3KIuF&a(Tfredq!h)-gHdRZx$p`lyB0DiVnf3>s%@e$AsV}Ohl#k=j#QxTtiPyI%syhtM3m_8xX z?Q41Mc7!+{94?rUv8@}C>0Y(FMyoB(v3-o8uq2VSRl~`tt|OA|o>X{XcN&N}gcN)} zbh8zLF=O(S$S&5ZeWSrGR&HJXSj)N>NA8NbJ`PnVj<%lv^$&@Vpo!-5fJaH!2g*A`6A1+h5ElZ=N_&K14IaOtVjxX~mnRqlOiW z!ak@Laqz~h&gPFQs10w9{_KYs^0^afWYZn`uWXLS4R~D~L@at;2p$V$NjKGqWcf=N z;fU@sU{r6GeV&3OGYR{7aaaMHS5Cl2gjRU>outjELPb%~Bepkfn`_@%!;9cRwrW$- zoG`r&qawUiR;-vd+Jm()XE*|vSWw(YSyX(Mm2y5J(dpUpMlMswu!7p3ja+$PFJLAr zeqkgybH5-6B*CgXWEa+g`vT_pG}_~1Y0mJWAO<{)9tR$l90%etI>V=nre;@vVZ!%` z^#M~f@`gDY35oy_;HbjUoQ8tp6!b5o5>;QA5PY#vTn5yr3*@BCxn?BOR0&JbY@NpTJ~YN>q2SU~y3-g!{2aVAI@p{&u2&|((Vqjwk) z$oE7_w&J-Prs{Hb*S@Zgk_SbXQMs9&BltzeyAjA*mH;s5ynyf{FzW-F7f}6)7(;1) zALpRC0Bi)%xc2lz&DEV*VS-kJDhgYY`E>3`TiPwjn&>fa71gb%uW=#-_CGV)nHP+6 z|FAMW|A%>Wh|!<1Zq%65k9mol6zW zO`xih5|)_Xr=T{nM#n_xc9QfI(9oa7jCeW#Uy%hMRmVdnb!>cl8LIwJO5D&-$-X#82|6IuqO%KC%m|Vwus91xXah8=OF{O`!&Pc zX!ht#d$-fpr_v&Yr+OSsj#C7(8`&DFX3?oDB;N?#=F<5sVj>AZ{m%n$nF!Ikhr5K^ zF`w(FZ8~Hb%omuqA&RLEA}XEnPu+GIem@LN<5<#o$nM* z!Swf<4N%`U_!d{bZ-A8re7C&~b*iDX#RFiQ0B?DqYxCCJtC5Cw_44buwqJNFGp?M; z`6^4B?_u**WzwL2^--&Y4+dPE?S_DBGSu|igOX>25-W{) zV1RY;fPO$hEn%Jg3wNwi`pQX+Dq4I~Em_r#D(KI8JB1)AO<@2{JYfHiWQK+d-u|2- zo!frnS@JS{rA#-c-nD?kDt?_#FX0~qN<@MLKthBxJd+>FENaIXu!cJ^2CnzN%>k^U zoO*In|1ivSECxBWCbOKIF|L3ebrij3F`AmBeLX*W)qgM^ zz~Qldj0p_NFYYA5$O!|{*-mjhJ&#)CuW2w)TD#fb;0#F*OH>@#c&oLZtm0X}kXY}Z zY-Fvy&Zz>JZ*jmt=AHoDs_9|4@uCFQ38J>y;i7(+6QAUVD|{;7RGW|^6N6Ta$;%zH2ZW3JxQ>2K-2wR zDp`JOV5sotb*yqk_RUS|QMW(rV-11AY}eIcLNXAp(9L9~p~-J{R%9*qE?yxAy~|}6 zg69`al*$!&c}}<_R(H=mPjKInr7p(Y7hzZ;v)JZzyY?R+u$lj*(Pj3EMrgrxx6Q%L z^4VJO>2>+p9zHS|sgLm6g}ZkHE@`s}8UOJm;()oe0H&L}DDa2fIyZwLmpgbLzJD=MvwOXA*1njIB7SbUh^UvIEg%#Hq7|C22e5EoFWxfg zusK{dmG4GQNEa)lx+nhi?2hzgLtCCV|7`bvxnldweDl`Ik~^^b?}vhZ8GYg-iyLDH zAZ($sd+fE{;3cZy<#g(8PRPpnrP%m-ZFE^(Wo6jyTp@~IGWjCAG~^a_dmC_jF?oCA zbbGRR+kJaRb9-GmyBHGyxZZ2~4~7D+B%bZ>cU$iA?Z~_jUsfMW&W*a(guk;lIx^Bx z3p}2CWZ@~}%$j~>teqaK7meR+&=mtMQd%(Oqarj8 z!ykTc7ETZ)<6c4a03RmMe*b%VTH9yvic?J;Z618tqQ=dyF&M*nDy|rk{2okEBF;B+ zs%lGgeEF*F^m@5SV&GZ^jNVtS5YbSV(VIq?nDV0Rn}36+1r>|R;U&!$tV>t5QI2lt z7p*>Gp=$z}vOjuzay-#*Lma%L7x_ovYsPJ4GCYeduSWX%iFL|#4qmic=gV8S(APJ+ zy$?mFdRGjUI8HTn9i9yRJ~5X2EMrv_1r6i)bgV2PRA_v$ylk4XMaPt}Sz>GESr1`b z@gtLZf$)Ebh-$honIh0dFz7fxAQ9-8u;VGlW0Zn9fcCyElHsM=-E4m3GW+fQN6uLP zt+yaGQ=@>o`Q5+N9ZW30a(BYQ6R|Na8tW-DEB3vAj11MjC*K!1R8w_AxSgBNFFbQ0 zCl7Hkoyg$WFCg~%o^C`ll@iZTQNiwymM9A0mdeWD9$zH(IZiKIL= zT*zzR7F`40(4kZK)9-G0B{ugpBwa{N`cRB+M!oML-?;Hb3CdQUI!e?3Z57Wf(PlCRT40v5j8L1B-;NQt7$-L z>E*Owo}^9lqgn86HcmZ=Ve-j#;uiH|mnLB!ZX<64knNGUogFY}yrwP>9&Pcqc`6mCk z#a31l{O}p%YEnH0@5%0$xx)O~SSvm2<~3)%c>N*n(FvsCk9))K!$ zjvkx0d2Lj8h<%#CeAKp^W&B$0c~+7oKL6+a-(|j{(&8xTI&wlAzm`A6&W5dOJv5OqXhV>Rh|D)?IYh$SXnp*g*ueHRb#rd#I zbc)OF0N6*gQ`BIhoMWkr{*;>5+l$rF>~tq`%?mvNCl!!PtTi*_py2CpmCGoog&oGD@IknnzzP z#)wm>V@IN(i~aPS#SWK>oJ+FX`}feFMt#aIFpEz0ry{lYZ$5-;PfA()Gbxtz^;Cwi zy3boJV7AJY^x3sMR`UzB>n`I|GZD!ZTU9KnWZg;iRw@x-ZeVrC#3zl#ENJ02bAzj@ znc!gBtCUp!*m!`<86$^ZDU?*|ub3>eslZ%%FiZN1zdTOZ;{SWXrRr`&dEosFBSGD)s^K^3?}9$jw&wgFN5nlD{aNqCom%i-+OB>G+>EN{ z;)PX}VHOI|*Zw@R!$@uUrPE4Co(Ad4AW1}SOy!S|zcJJoUy;C5j|IKk#2>vPddABU-*%`2)z|-h+dIxdhR2jrFE)c$u(~Le%|L$wmNvep)jd>>?Sd`q z3+OFv@GtDAlg8??&)}N^DnBd>rasH_q^HC%0$qNIbLxp2ONl>V(xEu?zN z+dvbS(OX0N?#Q<7bY{o#?--6bgx~?_l=dBjz;*GnMo_Fet#TZ10}Q};MeI=)$ScEEXG%m?QTbE&+T-(rlG4qjr*`^Slc1rR^` zXzd_QL-P9mz)_)C%#@HNmw7r{}`>#5>A*B(~Q?y(Cw&ApYsFqVZ?@;isN9QpdH?BJQIUk zI2!6+$Rfp*O5Li_E5@8!aR?IY#uyd)B8$($+dPL6)=|*?vm}wzWwT$5G=*BuuOwVO ztQ1iXIrGd=50fgYhoo9WsL!VL={MAsGrS{Brj~o1`a*s1i%rCWeuF=YG*Jpz&UKUU zxff|lg`$7n6W7fdKKYsqW2g!S*vDSh#OVItQq_+QPx+maRE~Y!K!w0oBH&q$bf91s z^Zl)v&ZqT6kH*~XY+m7L#^xk&VHPWEsv;hYjWT=|yMKJ-98`4g_-LsxWqov%P!JXe z#i%#Wr#ps-E+)n`P$dE7&}GaL^(1MwqBF?E$?E8?{_1EgVL?JPPBD5;vAA^G`8j*cg;uf{M==X9u2_w`-zMF@(uFmfm5E>G>AT|v>7Yhgbzwzpy4RE% zA;s0|%}?DuwE4CuxjKr`@lWAMQ#H{1S4KFJgB~=mmY}6ax?Yw!~}3yy84NLmtv4;&TJ+0inC87TuOE6QO&Q zKOij!M)7vel+eh>hP`J3EEvT_^KKar#>yG*yD#|P--6zE#)-V=&Y>zhuSTSaNWd7| zeT!XO^lJ7og(hk{;v@9=>R9o8cRV6Zjf@t2{9<(?EHK8_v6 zQD{$^WwFh7jP81MjB=?+&cDv^5)b}0>aD-LNy3cdh)oivXYAELmF(3J zWX7a^+D@c_cte*}G2x%YIlqmO)dJ4{2_Yd&MfPG8x;+mF+&qzJgGkV~38t$sMrYrL z&&FfJx0!x%8n4&48z9=Fd#Vbw@|Tb$d+<_52g3dbEs# z`DJ5%`_rquhb6755E7#B1sIPdQL_)zch#f4GSc{sS8uZ9@(57oX^Q)=Er`M^){!m@nc{uqpXu=d47M`zsU=YFyRf*l~v)U}hrW2fZy2*Ol z5Y+pKB@~<#FCUxp>9N*ErV3psI3?sc6hlZmTz;~3^&`V`sme*~i_6eFln!2rQXcwB zF>m%zC67a8Pn8IU;wCa__=`D$lj~p@QGc8_gnBeHml^WB0aGeQJ&3B)q z9})|&!DxoML=r-x66J@+*~BCmFy;-_F{GgQq&+X>P<})~NGv^UaVKoTqbB=lN7@aq zyr>+Ja&F;BWLJwm#1H%~PlZ+7DNGZR6|4y{eVey2L6o=geTK-9IRaS(Vr|e-eGc3f zO17%G8@@{+dDZH;O13chVVwkR1y-nOleRjmI1NzOR3|?S&p%;)8qw9xi97$5;S;h^ z3115L{VAsTM#JjdIEW0OZVTcSoH>`vL6<4!pgJYgKg(t(J1w2i50#(O4tWPC<`~6c zG`!$2e*FNLKZ3wTs*iwK=8;LtmnLI;U?prYaw0;`Hn;;I!*8ff#uvZLAcHt?kwYXj z_<<3MFD^kzel)%qm90+UV$ggbfEO=`K4pQ#v~`b(fp9EQPm{WkxhtVC^-p~2FQ?8K zU!F}6dt`~AhH)ei?L-n`+yWj?O5X1nH+(s_{)IeD7V-cyg~QBTCz|SOLz={RqP^Tq zUmUJ`=>J_GB3mCQfBhH8AFK~GtPdDyHi=<;_IBeqZ_7YaVq_YTKR}&*pD!%2nIq>BCV`@seRb{Jx;EEX(6U0avPGE{2L$G z2_X`!gpjPpr$;Pp-FmK5*y0-6*y1!0x{aMx`JrqK9t^5US&W8-IO7P~2PRG`WqJaE zNY7Gihy*7Nq-8@TC-^8;cG5DWQ~beDJmmd7nB%Leo<+UT` z85?LZa!XVo$1Z!6bVO87wwZ^`v7CrZo@|fmF^V_!Md!6E&$B{dFnZAQ`53k5RF76c z!>FOZI@(9r?6n)Ad5hGupN5vb9I>flCO-|WNe>j9gbbM*Ibu7a?FBZXe)A51ra?o? zL{1n~T?3#Ya{(|0jD-z@DtQV(`5lSopQsa2ed>NRVovHvOEod@XvD?76W$&&B`LlW z*$H=h{K*SK_BKN~?6AxmQiu8t2QK5L?k8FCe*MS!?S^`?;+f))^NoBwB;GYJmO#$P zGSm?532L^QcH(6U(S_}j<90KkZ01q(I0t?}0DeDmS_-wx(@5pm#af|2FUSJ(;YL%A z!_=e8^gv|ySYS}J79qmlAe zbE6N(Liaa4^dD^ECEc&oC2Tfn()zW z{ve2EaZg^y{p7_}A)M z`SCS7^x6a!mx}Iukk$CVcEBwN6yJ@LKP#=EErO0#y(Lxo)<9LKbL=)f5+LRIrKM7V zSjy2DQABvLD06dWZsB_q94m9PPjiD>++n-0x4fAL6;?jG3N5;(N|GKtT8UlU5^YUR z5172Y>O<5mx%(`7Uib{&HmuPETguP90ljmPbM zB||33S_0sQhuf4z?h-M_vD;$7!uu=HwH}R2GfTFVx9}~qn=_#8?z4TT*1oe7lyb#B zIk)AHvj8%KdrxU+Vn%QqPP6M-ZnxPr-N!2Z%a>Mm1%1lqq}G2 zm1*6sZ|kN_&9u>8%{mR;RXZzv-g}jZ*}m@UFf+K;0F)yK;MQ@bY))%{z-L5RD2Yfw zTK4oh^+E#eTF`pCFj~J@D6`w=_f{Z)9=8JOk2>d!ojn81fiL;M7n9>Jy~SI#JK-Y@ z`|#bB4F75B@%x`<>UnmNW4Fi`H`|rB*L^$zHl`|k$m<`z!4VI^f zK@sq3Y zRs-wuf*dE7-@TAo1J}T!3uz7mYZKwA!W1bY)-l6#LZ`v*>#myaT7KGvikOu4Ys2ar zp204y5c1q@+`eJgAE=60xMvp0+RE6EzkViF2MvaUO)1BMRskHSDb#k25Yzqr+)srcs=JmYh^FxNf!fb(dKYANehlpE8y;MZ*j>kfB$Zqk0;@8sO zNenAO4z^6pNu<`YuR>-3wymvDIp=k zntbtk;feS7oA^H>)cB&HSn>KJbH6#BHybW*xtl29e7@P$K7PF6=!tiNP+IpJ-wD~Y z$@Ee`F~NOLE;BL&DRaM;b0)cOa%t&1%q3yd+LRPmN{`ahYaiK)y@;k8En>>}(+vKS zZgt|qZXFigdtk)FmM(+8{=x1pkfU;Dj!Hsr?VEmGbo@SHJ+cc(f5TeioNfJTn>yU<8FPSSRb{HaE-aEF_nlVJq zZFVVfYDR0FcfaaK6#rRf^5UcqXT__9-1~?bk1HvXNym=&_2s6TllqdXD9752bD;K= z)AY%#f2*W2hXO&V;B#Ke58L>Nim z-U^s%%u3`q(Au-9nyXP^K;6ShWX&XO=Sds=^e*4zSBWgbzP;mbrnx6EZT&Ni!iUP* z`|3Wi%fS>-1D{HY$$S;4n|y=nzE)LBEMqf=dFrYBh>tNN8&q}QJznlx?Wwr?Zxg*3 zD*Xf>W3=r__4tWc99%-hF>JDN{KP`6AjXDg;Arr>-RSrIitcBZ zt7;Zu0}V_b1x4?aDws~lxEZq-}}-5Z%usQL>|k3s1=Ftw?!JB5YtY=;ZW{W2dQA zdkW2v&r9r4`z*Bw*Qe$S-c8xJ_Ur{*ipNPms6$m2IV-Aji6*&JTwofXI*u(S!KFJp z1=`cz1_j@3D+OwMk%3C=0LP(pNhT@8B)PiN?gk}01>cob4Ph$QgR$HdX03h@6``|Uc<|3miA>QnpipfgJ;;#pvc%|yS-&7rQXS4VqzF>hCMRg zm&*j37*FcymS8q%{;=LaG*O!uH)HS%I_>+IwXDxQVng>=gRUqMk94T}<7`G4(ZnGr z@%!stW@{>T^&B+PkuV|EUOiMlMF|xqBf0oUzjc z@6UZgrXQv8Ar3@y?k3;5gD^e0h*M&UmXMR>7@m&zzI&9IM1F5goWV5xhV`+)gNy%X zW=eraIj&ht;tZV}Q>}v~ovX9DqmzSqiHYUS3SPP&tXb&ftI%a`)yfVqbdLXiOrDr3 zEtD&$Djog!H>At7R;bO$5_OngHLp}qwM}D@ASrnA_3;E(O|_GeUFFOmU5H0!PN;{m zFwX9b%}31%c^~5Ss+kHQuAhv#b&ID9;u05??j8{Q&7CIaiD{SL1=S9d6bZiDI~(T{ z)1??n8#|n;FxX&}yT_5s<_%`x?UFwMmk8gv;LlMr-Crm*^#xMv~u`rJD-z9mw_Zbz7 zUzOsC<)H23C(5?WRy(QS5cr~fT{`E}RM;0Y{3_4giRVux)YKeolRixm3}%p7uq-D} zn9gYx)P~`Y=10VPu&OfbhJkb(c4u%gs(((*pxDJA;tsn$*e>sPkGWYb%1ugFMc4jd zBq&gF^_(bh+soC(Zkq|0H%p4@V@*qEW-*rdfv_ zn0M;rYxi_eW76~4h1#}6Oixpz>fPcu5k4462!?r+3Z|EmxjX)^NH9kiGW8jnr3`-y zvIy)dVe~_NFwVuUM`pd7^AS>^R{2!0SFS#3N6}Qqv%XzG4(7sGZ{j5J5@ZOTw6HBC zPIc%`il4igVk^bjb&>swgXgH>VBk2(WpNTY=0Qa~8Y5Rry0>Fr?mbG4Q*0Pmrui8PB=@kHg~oJUy39kD;gsalO@&Hvm(283M#-?gHHAydk+oG3A>Ff>=utL*s8w%`^E?1mUBYAZ?XG@ zb=Rcr)radG^|P!Q@F`n%-z}kpN$> zpcNqm!i}lBLNn4Y%Mz-8kIgl&s%fm_@70)?9$5qN#~z8Xyd0Phe)c#4{`&o%scXS> z6%D@q9(&0k*84rnbgt(m^@BN9$FPa^>H;<)Pt4Y_IpS5t6vb2WxALcQ6idIeImZ@u z-{v%PfXe80=Y#vgn4E5!hCMt_Y)LyjdCqb|!5C~Uvsyr!&pF!*o42#gXoJPn8lZv; zYqS!Gny^^J`@76b+I*Y~40g(h`9_wSSLJRev9%*kmlR1S@sWb>2bR=$Ch);EMkY1z z_i4rckfRs0UPS-!m|l}eL_YYnz?gSc9oJKp7- zEZ*Y^(DKsW?fHa-gvEIOjSBt?HR1;{+9v;oh5iLgO5)Pe@@QMTIk~%9TD#E--%;H` zZ@rzZX?ZlwZLRN0udJ=?&E=iEXpMLQ0zN@uFQMH?iP@L z@P7yM-68VkZq|3Tv^*--A3Urf_Lk;%uoBqP$;uvVOUt8Y50(SF+5a2(uZHee`Da7_ z-79XmJPJTFig!cciDE6Nt@7nq&iwfot^AAq8cfeiey8RzX zUz!7auzGR1gB`$5o?y2BV&U$p{F{Y;NFgan%LC%0z3T&Qph4hVu1=P3tRb{UJerCi zS{_wL;N0^6+A9EUTYEwNn=>z0Ya3kPLh|DB{^v(4EF>f#L~BF)AB+zW>F!4h{tw0{ z_&+dUw2AQog8nz%9VWo{e`7+xHT?h62@8n+-x$9TFqHoX9iJc|>;J$6`2MR6h^x8% z2W!`V4F_!}CkX9b_y1!otAcHuXaU-Pl@w`>B!zi}loUaHN`iuNq96rfd0{>wkb;7U yf{2&^(7X~zn)d%q@{i&F#vW>Y*N?zecY~O_LjKXSe8R$l!a}%AOiCIc-2V?6{(H>; diff --git a/docs/graphs/sup/dgemm_ccc_epyc_nt1.png b/docs/graphs/sup/dgemm_ccc_epyc_nt1.png index 304ab1fd583ac57572d9da25221f515800d01ebe..71eeb46c7e7fa8fd6b719a0a9e2211904217a778 100644 GIT binary patch literal 172554 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

    =SuMewq+f<LNyuX!|ytt+J$mezP`CN zk=aFbrG^Gm4BxCm7$C(YG1up<0{zI%Zz^xn_Gq;#jSHB$a?jXYIY;p%u<--wb|>2! zQe3b;bOjT(wDuu0z|6SW9uOZK9r-IWixxk|b8sYYEo!{bW)4y5OT#UVs1!ph%-fI4 z#6Q(Bf8lt&z$CIV$(I(|ev>VejJU=%D2y-jZT*v-tT+YnDbZk6^^yJ-9*3*ye3~WO z>ChyoD>|^|V^SBNE*dS%oz&qvXZ#;)oHX5jr}ONC{?xgs|3H^O@;ksNz0?oV+&<)X zM5enhbHfHxbhwbNLp;ns$1)#OuZ|ZFvyh499z7|XeU!d8Z{_W3*O+D+_0$dV?} z?XX3}b zG(e(iAYU61wC~eRC_xWhk^!~7(CA#Wt&10oF^TGQSz z4!hFySAYtbnd+B=E6{RoGBF;eEt>DHLZ)6gV=Q=rqkBU$J(Ub)cBVyOhl9C}Md9S7!k#Be_3 zKn;4+T6TGQuQ;J4-|1XBShAA-Rn$rzP1@lglA*zB98=?MiCS0UnXNl`?pP(T{_1JR zqtVx%w6#TVMIHIUY_hbDf2D${n*G4BA@X|~)4eVASZkR)C?GZtu4Nj3A5X42R4t7E zxXkl{A>qjsce+$!!h(^6ss^hwTj1MO^vg@LLf=;Ovd!hn`{RAl%X5;;xXX~m^dGQK5(SpVr)~Haxbc;XEV&Ld<9Cnq zJ`dH-0DTN_MKU|Romq0%h{yG( zIyy$WpE+N5nvSn2vq26uiJo>!^f!}D!h~=^NqKtfB@O?3;w@PvTqh*06oo_&8Q&>| z&JiAV>0pE}N3G?W{3j`CHd?xvsHpf7aXo@j&UZ`vIt7i_0cz2KHmXh+ow#kBFy&?? zFq-;9nkQivvs5{(5Nqz6a$$uGGbXbAk1%(_pFsaa%w%ZCZN zKW2HA3MZ4_nKVR5((SL4lhjv@0nEKSC0DKhI4p0`sSj#d`@^ z1fuk9DHl7xUVqZT81E#rmNEGJ;e%ktd4O7k{_X{s>sTW7@zFbeBEksdy=ptN8MiMx zu*O6sGv8GVYRTEeV_Z;zOdX2LUHiRow_rS)>`cD=q#C{!5{^xr1T(tGv$%Y2)xiq$ zMSOLUTfbODKGpG*gq&^{)EKZ$n}j`YdHajs;AJ$JLUAdn6P!>4wJD;11*)ips@FwK zSl!s1-arZ>BGg9Ys&kzgidN(!o#kp`{6wigSXcNlMHTu4Z$(nfmmeq<1ywBbm==yR zL&6xnXde|jC0xBw;IQmk84b&J&)Y8t%v?SL(KN9~X9GePY;}66Nr+NcPFo zquuW`aMs}JAKEY7GCv_SDL&Ql6|e|oj+Q-280EbiJ`CdPMbqF}(S)rtxfDF4{C)qL`@sIY#IwHM`_rnZiy6GhY%wagXzda z;X^@1X?pm%7_Ev0U5hqTEMhHIPD3?d5r8FBBIQB7;zG;$^O+&(OPIYD3ozKYs>;qj zm&t9E5R(}s}H80W>x+PmL$B)OwmYFM}JCHf^?MtBIpqVFOyj8D_m zw`I!3GE(?gb65gbbj0>_CZ47{avZ9YDQN{iFo@OPnY^DdSsqX$=|;4XvOHI)2GNih zii0}x5AQwr1-r_HEuU@}{Yw(xp{S+H0f{f837*(g zn=n*<{4DFs|6}eg!=hZcg)kIyJf7LxiwjQJ3pED3Pv8|uJBVZLmcvEiV!j_WW0O>#-+=s<5+0>} zi7^+x(ilEhj|~)$Rdw&B-kQu=*ZQ&Ef%$9WGVfri5I506i{Z%DP-}+DV^RBO zj9r9Xrea<|G}pVx@vDxLL|p2OAX#^YLbeaK#BAdXd(T8C!KQcgR3@)l?CF2)vqf`1dKTv}C_$TmjkxWLn=yU!L* z_&FT6vK(PbCpoZ5;)srXx~InCpk7Z&Ad`_2M=#ZS;3JHD*2bv%MI#EARZAAA)Pc+x z*ok0t>d3VKJ=up@MhV}KK>HzQT8}lM9AHXmwpUc&+xPXi$=XamxWD9>aXGrV>t!}u{JJp zT5Mi~C_ZbEjb)M#?^}Q1k%{D9kk7Ts@kz+_NztN>$<>Jo7ak*Q-HloKHlz3;wYww6 zzPO>5RxsTR(IbDl<8?B$JqUYezm4+Z6Td!1p#A}Na6AFNcZLt|->*g&c=Q(X3ci>K zq9_0IT+|#gE&aFWBDTrFtsxO4oiJ{H=IL$cz+Wb(9n|c%m@1~#^>hhv$8D)Iq73Nl zRu^khfWPD#iXj3nL?q=^YKZ{ey?={Bon{5EUNB8}d-=LsyzAPn0=r##l}V*CTRcal zMreFwWTc4qg#Mh%Nl?eQ6=p4!!8fW6Kob^5)qDZ^t%^ucDFOjnUq`YT8ZLi@ZnR%# z3qMR59UTQI5F)Y_Fn6K=f1!1oKn;pwQrh9r`Wg`;&Y}r_9yf||}vqIHLf#k%;L)}-MOC-<-Nn41s z@nK8-aG7_1tBHMsQpNNM(07(DpdKyRx{Mr`)i8F7}5_jXaOB}>=U zN_E+40W!VQhlJj;6Diq8OU=25Lo{~z*@myhw#Y6U%5?g%FKE#T#4{pM?(ol|iai_% zDR5n-1BFR`cMhW^^)T*z+9Oh->?ayX&^D{em|`xpaHF4#`=%v=u>*2jNNJx%mb;iYEII)d@^a8YcJ0ndRGB z3e2AUVwLhik)uS7=f9VIApN|ut5iN2X?1o(ju+&gi~ZZaBv<^#L*mbAG()jATyk_y zKaVX5sniU+b(u6H=({-nQjTaQ5vlR;r#wuYfjrs?RZzUQr>Rmej~WeU$gJUcU8Am8 zHF5FPg*y?v+_H7PBSQpV=I2}Jf$65;>gD*%KHxy|5Qgr@CGB5IcxAVqzI?trWFHH~ z-FAcn5f(&+K&5m7D&#PQ;xnC1f*>>9-d4}eGPh3Y8>wqV1!GuWY~jIB?IBWIZARk0 z7qHqzm9KhiPCUMxt9~07%Ni~{%10o@Xmsy}@k@+cg8D<@oHOQJlMDNFBk@44eD5Z@ z0GQj{dA(g@NQSa%=J?0WQV;(oP^NGlbh0@7!K=BrdEDPz_4oF6UTtmdb`KmBIUsg- z_q;n})o>P_gR-?jd%p)kcVHxrs&N7H_0D`Fu&7jf2XXcG_Ljp~JlU$`G&<$BJIi9u~e|*#^u-K^15-}Q&M|qSgIs`%0KlfU&@P73t>FFHAqGqo9G;Wex-@9c|4?J zX_+jV32d@#%?(((5^3Fw(<^zjqcoq{9Y@p zQ&LvO)V^4*-GCd0_kWs^Gf%y~+kS}8O2r=?n`rbjk8 z5f=!X0sDP46Ck!q-~WY~Wb8Hn@#Lf4T@x1>=Hxi~P}4`%0M-1K=F7&bs=fX{x?;iAiF>_^-(!(Ss-te_e+H0`sJhto-*Q9Uw8$Rd7vk~MqP9z1`W^38BA0rs zO{INea?|p2wHh)la@KwMQaad}D4j}bVtp0mm}8BEUblVQK43`P_twic_AyV*Z*3J# zYLI04BHt{VsQdMtn4M%qgTgPIN?twjmFc}@#<2?g;dw&P?YM=vUHz}lKQp@0k-%NM zI8>A0N8q~RCql|KRJj6fO;PwuBV5;SXM~e__cOape1dQiF%bH{HvGkYzMjK>HcsM(UX5zcI-TOkHVwj=FLy-Aq z{K3TM>dP%R#I|Qh-|NwC?um_Ca(C>XDDqL^TIto@V749&$}i6+I+~_)tFQJ$kEf>{ z^l%%sRNL0WIFi`~wLeJaOuUxpUhYoZ((Idc&tEKAamjyVkL`?-82vez(*&XN$XAMc@^%%JGLm1Xn2B(n9EFG5T_HAFG^*p=9#1wbdr% zRcBf9H_6>2_W*p8yoP+N z%&0v^L0fM>f_&z~7+l0{{n_tfik9^LRfXqr7ez08Ok`UfI192Q2CF3|e`M@&WQ#y| zU%W8F(jzsXpLG=uxY~71Bo^@x>A_z4B{7P7wB|5DBBbq^sSqLvM*yIYiFPBL>p$XWFRcFI1sc*0HZ_F8w| zb4&b%<8bsQPzJe7A3>cJRNf}${)F(w*LSE-Vp^4zK+V`f`^UOSI z$nfEwI4Jo6{W6@~hHvUH@^?ISOD2_2PU`p7`y$@_Q+2yMO2blATBp^V`(dvr0k?#Q zP(X!augb%i8pXB&hU56R%z#YwkMt)ivUoTzVW{#0@?WrlRX4DQ70u{zr2_#jDv!iT z8L@-apc}7+P2sLRto-ZCpm0R+b~qW!D4kQB0Ym|L)9?G#a%w-9vAuC&e9KyEpevK+<<(#%vcrygEu9HJv9fg0`B0*BUchqcgWI<>3-!Pco3iM>1DIF*VH z!HC0BGj6khVv##ddi2Wm-@}thbNRF7u7B{01q;JsJ^q#aDl_?={twLY8jHGr8Js=5r8G&3BgYn1)8l$cDq)4#_jd0hBqCc5I}ktka7d8Z2y?DougbD1*7xMl zQmqQ|G!{AyfV8UV$_B}c4|7a$ozIfRc6)CW7NiE~kC)%kk-UESu7M?OuC7WLDTwAPx~O1F;T8aE3PC2RH}*C zkxVwhm<_upBW`WVH7ai)N@3tGq9D4H=LYAFEYldL-@~6HICRQGK@_M*C-V zDOO7HH^6hX-^1g{bJh*;eQn+a{NtS$#1Wp|@YopDOe7_)dLq8-XrRBXZB*s3WaBiW zyta7bwSJFIJQnon=prXbgMr5RL~j`3x*+@Rt>&#a0Hh-jIi_~j8=hnA5>%+%E7L98 zQz3&g#t_E&+3D zJ}=etPXo$zIB`EI>2&P}PTn6j{FbmGmqFjB&e zE!n6_hAYXIO$|uyFokAoFxnq&NC2dLJEk>otE1VA2ma#}!@%>c9aF*WV~vQ&>3UgH z;xLq&c(GC+#D?g*R(;7Sx#{2!_wH%ji`;CWjO&eQ_R2AloOY=BqM(r;ai1!d(tmi| z?*)l=FsNF(tfNo{DeINLrAYk==fY`%AST~%b)rWcT@r!I=pR}= zBr}CPR<%iILULz>xfw*m?NtA^L5@xPA=a?v%FyFi_Z>>gg{c`=_Uhpn!`X7Tj@*C~ z&fbTpHH%m{qFuI6V9<;&f74f5I^?&Wg3dgWapzu+FIgdf&qFFcx#Sy<}X*%|Wi@|T+huT%)1`nL)Wt$4ed2>A(r3yXD)38_n-q5X3_Do|k6 zz!hN*T&{axegODcRA~-Vtm@ZXa$9{D3U;R2YZ{xld4eXay{B^*7lyS`(Kz+E|jj&j)4mJh7?&L=HGR7Rn1@<;rs zB#tN+8*Ye7zA?RLqd3Jfe_$}dywhR2WwS*cc-S?lX{)PKYJ_(h`ex8GZFCkN{2JITha9oe~=OdXfipy7#1>~#NhrddvEmE$0clHsYO?+ zKP4d{IEz|!GHomgSiF7couh|8#Laz+ulB+@`?aVsX$|$DHYKHejJs*H-VYJF0GG#P znuT|&r?R7i77r2yNK$>f2FyeXr}WFJpm0bVO*k!aSGD2h&Emn_ug|)lH~IFEvK1FuED|Z+*Hy z@HjrbGJ=CKkY-OpZ1V*_>m8@tgSj=JSm@23Qnj%_SB0>-pB99d@M({z>Pbj-@v!NIk%lSS>N7cA;&6PoE+BRQ_eEn`|3Uu7hFm@Q zMxJyg+P!HtU9Sau@4^yKiE`#W$XWlAYQ3x|N_b-f@@vucvBhukWpce8=0%6DrEVgP zh}YQZUsMGL12jExr-fRMt@OKTzVOa zsX8z2$oT{F@zD;NQTx%<{N9|J5sUN{4AYAYYatn1O#_`Mzt_DY5XwYq>M)&`>p${r zQyJHo5?_aTuCBYQ?#*3et$1=*J#KKq3~+lGlh9R6%DQh&We`nm;vE9$FA~w1S{9#x z*&Tv}(ts#jWahp{#0X(Nf4%LhVWA{@6<=p8*K!9zBfz|bAoK5PDfa8A&ALyFa^rC%%Jd%^-VD$4>lj0QTY$x8Y;D?zTe^6?MGO%&GKf6PbBROkwI$6;{llMfondv+ z(RiM_3xj|W4MMP)t`{uGOmG4>O!algWKygaBy>65Gk4XdGKc|D;Plp@kNsTUCLJ2# zpK=VuGSiKeAJXfKbB9@Ll+rJHE!MM;&&k94!3K+uiQbF& z5C`C@8d|U5$jl1^t`_eM?@qi&&%itT9vy}RXUh_RL?J9ZA6$P{P`ds7?=H0;b-06H z48%+t{^%`{vBomV6swogW4!ii4XJIidJiBOskRDGR6HJ-dJcoyHT=_ z>uZtHfLrlnY;5eOpt7kXUcq+?b0sf8`1UVL=al6fk=@_?0f zy3W;d&p&@0jQA}ZIx)|;w9ZZM6FGDRbD~+M8@;#z1JZWp3=Im(C%U?1$HdkHE{R>Ofp8*bD%C^ z(CN+HfmB8E0DPI^3Xt;2$9)7=8sJK1EhJ599rrd4#gT{0G#=Un9ov8xkDv+M7pMl& zFtcv+*RQMA%lE)+Y|$z64?qNq+NfBm1N=x+@*8CUgf}%G6 z&o{R@&%0P9_oIEYWFPj`&bbl5Hr?R#UVDXV0g4~3vmO86{!ih6^FQly84iG)2aFKF zs9=tGRK@atzo`%4rv6Pz{0nd7F||{G3Zp<2|MQi+D{x=lsF;_RS6VR53gj2w#>azq zCU3e{yZNJbxfdyg36f87SQj7toVjLx%+4B))^ChL0s0E~{?t*AWfYs7$b3zA6D(PH zWhDmFrR{>w#v5$aWo8)`&$#lpjLED<(W^Z>M;t%h@@D_RSj)&KnHe*+KgYYcqrzeL zptQrtUg&U$*$L3$wr6WG0>deQX>*HxImG{DHdMHWpqld@Zi(nd_wB7Cc)x9YAyxN-BWzPgBB2qE@JD`LuZ{ZJ`r z4zT-@BwPQ$x5EK0D$8`sdnZ}#B!65WLC2h{I<0%KC0UMNR8$ebaR8D8(+uF~fnwCz z0x(xVlcOB@(OdQbnb9J3t!j4=tg@key`#sEi|E0$3BsiN&Ns)-!DS=FL_{jHP~e=| zFh`K>);Imlw=8kHj^UWub1oA^^o}m)491~p`x#X1@>_MJ>+!SXQNoq1x9CcrXT z5(a)5V^zo^cr$5HZaUG^%~@B8nY;hG`1zc{G?ex#gR1E1|MlXZTxW^^3lUY%rn!eex|}**rR(Gnj|co@G$kKiv|R1;gUmzy8w$ zXR?61_xm>q4NfQcG)Md(V` z=5^(uC5CbhiMx>H@bJsqcA;*ACSBjp3(0FIMN?wqC$l8^q* zd)B5;I8f{U_0O)T8d(N>h+GYE8LGz?` zFb!7SUtx)Tx~>bbOB`0+stb7U$A1`*9Dnll(*=`E`oGXc|Ilp(f_?N${xdtGrpY^T z|KZL4ebER6M0fvd3MCE01_Gb|{WcK5Z~yPN$wmV_ynin7uYVIg3H#qOu`L7zQ~$5G zk-_*6?ERlNyA%BXpIdp-kMCNpS2C@VTnl3Oe=A~#HiUsczrIc-cR?ZOa3q;XbA6qV z?O37<@RQI@(D8!AKwR;_;mtYKq8JzaxkGJ+@OXWld&s*DS908!ogcr4aWZXYXiPEP z&oq}q=U%HAfZF%E+&;B>XXe>q!IPUxfYt$F&lhTYS^pLLfik+?7#5n$%)8et<@4q4 z?N+thQ$wXeL3GX91x0yI&mUEP**Q5B_ibPqU;X-LWyQ@j;jF8TI*c28 z3W`^QnBYmUw5+kr*Z*k=7ng*g{x)VW=48k; z^xY3&gl*QGGgnj8AcnHb%19u94r+Gc(1{Ly&c7ojs6t+E1RGazWOsmPNY}T}n29|Q zorj8zM%ef|40z7nex3Sg^3{J`&17#hKJZU&X$$Uark2Z9?oJQmuSGFNTsZaym(7vj z)CyP)B*(yy=jOcZCgx~!^63kT)0TMDUs%;L!>sg$eGcwxX_xvn7S3Glb&^l2AzoPFK;0M?y&}IRf zxMviXFZob)O_q9}0O}lsuQ9qML5&C;n4`EbmwGn#x)@UfEjh41IIRF=y`STSAKeyD zMkgn606%nisljQmOl`c!Ua|loJR(2@;w{@lFZn2?a{V37hklE@0+PIFMnn#q_U@S7 z&sXqOhq_O@aofU|=?T*lFFi|&*u{rq{TEJ&?6{_Q0+KRp;hIO9Pd2yfCSJXWrJo$5 z9NEUi3l8%5fSE?!-r>=!jB(i4Fe22LsJrPFhqvSm>Z2%Ej7P? z|K9c4iypuNuFGM2AAoYUPlpJ2Y<+Wz1l)84xTUqp0(;BH zS^NpTZ(pSf!iqNP%xMrYId74NXV0aW>C+ZyZ{LnKGBuurgR9o%+r7Wy*dFTzBP#KK z8bNc~G7t1C3?5=LqZc3d!99rBbRrNLui%;it=nesYLi&hz7fDj@!o-A~xS60OE_Zzx1XN<1v$N`6=+oTTNRV07%$2 zzq~9ix-;GSL-N3D(GGmr1klY3?9IfWPMW<890780S3oO~lau>g#18rfUy7_?T85^e z@??(YwzsID(az!HPUx$8s%l{T7T^j-TD~21Mt1My5yCR@(x*Q=4>RywDoK4=9 zcr7&fRNgytsrD3~g;V^wE!GWX-Hb)6K`0J*ie(ajDHd@sX(u?%8_=RN<<{&ufIyJe zAbuk^Ke~2nT~z&m&dLCj4k8c*8eaX-S5zd|B77DB*b1MOKcJ_o78qW++TXiA0~iH| zS=iZ;+>>ar-Vydy>*%NDO9wY!s5A=_hmincx#Y9(@!~c6(bT@fw`I4ivP4g#c*hr# zkTaT>jqbe>;C@tV5C#`37UfZ>jWQYpY+5U4pf(rDIde8!_r)?xxbsiItEQdc+b=u$ z9}8y2f`M0;Gc#GB^zWOVnC0c+M<9HMH8~u~Qd1T4z*7bpu+MCYFGrsBH5!Sg+|AuV zxm!L5ew{i&=@7SP86_(F!>U4-MHCv_n{iLHwLt*5rKKemR*=I6EWf2~jGY)&#@>Oq zN`0VFs0GxpcaEl98)tb&d{7_2itjeSCfKR@x7M3=LS|iAXHh*STite^`o~LlVD}dP zFnHP-KK`fspFb8%?02?Ke{ zE>7Ql(w_Z3%5a6ekCr~OXv2p9YOTFt$C6h)F-beUV-I7k|3Qr(ez(Q9i1L%~@%sIZ za)f8K`RB?l?}i%f?Gv6^$7D(7Hc#=4$<6SK@gA~Tgerq3q;e68aI}N(ex@9FAhvU# zmTPjy8r&8-xToevlNRvRnN9@g7pkwa5wP%eu^- z6lMB6?$T6Ct#iWhCdmvz)rlPgb&9+-MtzBk*XW>`_#J7ITj(*8s~q^Z7r8t^Rn_>p z#DET}ulA4Pd5WhwRxqqg<|M!=+6JavbHTJa^|JEfgQ_Lyjq!0vE^%1$cjZ~P<~Qi^ z@lU6qtbB%W_+Sm9<{+v#46rSXcL$>Y6Gd5RT~{&6O_?ygL6>gXm?=>gr46 zD0f@!13%TaUOfVWyXhZ-TK%BnZz@o+D&eZ?TnsI^AS>_=S7YkM(;gwz zUt_PTo{9n5cnnbbqa2h=Tj&6lo;#2X7;`?V&GIa_bb@zzUM@3Uo6jQi5aqnJmPMX> zr**#G{&ac9TXmW}@WrbgFJ2y=;C`;gl5rI~f|>5XnUGK%5)0JMqrdgC|6#485|b0K z>OLL5Ig_ewxb3|Zg7eL)|I?=$a}Z_#2Pn1vSya3!x3Q5nO~~2FPK*J(vtD@LtKAIUg?Uy>qXupk%LwnL+c6(OsqS_L?1BkRa9_4+F0YSE!Z~wk$b<@eA zy{Y6`UTrZ^EU*$(DM?LndComVAe#M7YQpJj3AQbywx5*ibpabgqwyNYhh2|MTj)S# zOQ{pK$<>B#Z4*7P1JbK^v+AGa6%~yEDpbHjsi~p|P3fyNZ2HR3@T$4|O4crNQQ)rl zYtaz!iOjFgj~=yJJ4kI$Lsdz+A!e(6i73uXf0=&c6mKnaA5a071ODBon(RB?4g=fC zgbaX37ayNn6-)0064NgzN{kz89>Mg*M!1g0hyhxg8i$0T#D2DhVr3>ASfp1q;5m+p zV4#GLhVz*D#8ZJeRh`bMh4eL9#|}7}wA&W&Ibv(kDy5swZL@p~@Xlb3>;XjU&{(d9 zuj7NZv{QjH_T@xe6K((11v`28Aq4-sSMpAm;hIbcGjY5=ba)OuwXu>(UaF!>crfoeX&F~Z9qPqCWH&=zm7HBJyYzT&B1((-;FWN zm_9cXnkCx4xhLV4x3-?wTCc%h9SWI1mlEC;zbsh1%rA=nE<^Y4;i=Mo5&*%KeLQ>! zpe|-K*#3(kM{9NBPRBYWnW1WFYl~Y{)Nv93Hk8t10=B6W8}XpY_`O^qzaX`2VeF4_ zewm=LP2!cuh>v{8Yki38%tzfp`$&pVI38oj!{SDHUE&q*5;xYLGBhYL4IDy;?G_0+ z!ZiDXe*Lh`nB>c+PvX;5kb09Rw3r8t-MuA@XoakhBhOLDF7cCX_6%G|1e522-Z|$k zXLBZdb0&rv#`hRxp^=?fYgLNIxheH5;m&mEB4Jk1#*gyJ(UD51g70NV#<|TJMpRe7sH`u-Cnd33fhO>{y*V1_3^x2Urs` z%IM|5hRKKLKa!4qJUxEi<|7n5iP6Usoblu!3vxxVG=TH77_xfO)q)4vD1)eB@%4xA zStCPa44RxVcu3G@ii5==Cmg}`Xd~w#H&=}Tr>!8ySa-_IC`}by@nD8<_z*0A_~9~p zslKA`r0Ab;FPS0`B-cwMz*C-P=L_Uohq|Q*U2+7_uR*Gn?axDxFqo4pw#>&|0`reG z*&r*JU)|N4$6DO*hqH_KUz06(MnCQYqW98~AV6wZ3rk2y@DO4&z;McX0Z73+GZJhC zKnLuvKyM#9?072$+mxB~@XiFkQ0Jt|X2S=dCW>bd{Tw39lXYay1|iuQt9R3@HbmZS z<8fF1r1{JOx!IPX;D?wozH4H0Iemk++)fo{6NuK(y8+Ti1O|K7<_K#~@>05R?YaIPIG_&4-SZTAL5O|Skn}EvK zB76{=><0d=;8}zD6o|X2pT|8}C!u(Tii^2`kTWKdI!^Ybp-R^8!~px-e*bQ-fpp;M zK2WUe8fUf!2*Pp_3h;rQ!V*oP7Csb#nmLpW zm!Ehi(X&egbt-W$x0myNp?EeCjwuNtcQJm_58;vhYJ=WU-oJ}|dDTYZ+(@)|)n>X( z;`u17lI3lO77SY>3tK}slIhD+HcA0uNL_5m06heT`K`4|nj1o-ZgkhZ%(kb}cz9*U zbRkY^{!hUQ##d7N9PBo9E?qA8YR@Wp(Y@sSXi&Be3I_<1j6H8(&jwvMqYlRmL6@#2 z`jyx~_Q5N8)~mMiUY;SuO8@jnQcD zCeY2J;`8|N;s>}4{(J3h1m_5VO4_MI5TCXHF(|5u8N{PD%UT(L5&#squv2lHy!Dr4 ztcs`d01d9KYmBm8!Sh=1vDv$BK3RxGX8OU3b`!&e|F!z3uz+@~;dqJKlyA1xIO=`U z))ssI4IlzZ2f;y9eBsxyN+t@iL=x6IpHRYp%=jC%%;LZaAKt37X9lH{FaCd_yS3X8Q!!Tudh^Db>z{1@RlrLA2n{DH(@ zcRN869+LoO40%kc7{YpUbU)MZl1`^UH`m1vtvJhs$N_x`UFzoN@P2brOXMM=6r`L#uA56SXaW5x?LR0S?rtbjbD9;*Esxa0C(UH}8E5;6Fhm z1)i46YNGCnCF6zO-u2O>X*{T90O667)|;z#bb?0}bua?B>)wu6D=iK&9V#8f!^ejX zcU=-DHky0}w006FbD>6DksuI(uav|E$ipc?E>W! zpE&j32(_LKYEPs6XAK*mp}5v00%NVB1TWLxb@}ZBM+#_z@6kqujFGrnukM|^L-9oT+ZBtNf&Gj7H$FwQy#2IT^jmt&<~r97ksjGS>)f7^x(Q> zN)EMNPlGse?8PIY%k?`dbr>J$m*?M%^ks1`ds_(rNo~C|kjn;ZmxhQj! zpo_+cqYkN>51zn!f_1%Yd=p%Dv$H9k2Hc2Y{a(vUQ_^!6{eI<}w2dydOQbQ~_lTuD zX-eh?#4 z>>EJsRR*>|6dXk9xV>SUqG0t{N+Au3XD>kyHm7l+!vWKM`)S+B)px<*?-zh?3Fa*z z*5S*0PVUo-X7QFOvJxzFviHcsswY;Y!9uP{qV**I7NfWu<}lbepE^?;1ur(OP}VK2 zZF_Hir**xGsVrZ%Y+Kf4=*V(12&?rfd%8n>w~}H{nLNwqFm1oHAhUyo@tUtDU!$$y zS_;HQ=MIbfK1&oVyWP0?A0%XT^=EnCUOa4#q*N<|K+>Cj-4EPLWLy$!Jtsbv`oihBpMS5{r7$JS9j6Th2MiVShtDL71jDYms*Xj)3@UfW9W_qISx?MfF z(&rpVu8`-Ffmjkl{YY@Yc8z%ACvy4#5t_$43TEiHvS-msz~ zX{g9qrmAHG*tiTI3JZZv9Y4AcCg^|9UMxMOP*RW%`@#S`CryR71)2~|hkJcNE_-n+ ztfNOzE;D8b!r^WZJ;cnxo5smm=$$GCM2@?K=C~|~=%l0)sJc-b53snXN&T@a|Na?` z;~V;^joEa35*quv?<~Mw2ION57jCF*QzOb-Z+8|8HsSZayakMj)wLgM{8=)+J~JIT z(xA>fI|R!>_%8gobsAcXG=3xrf$Ul`{EVb)tKAzdyCP_yc=qcJ94 zI--Ac)dOoBhCzq(&GGYFI4z{Dq6<0n60#WYg!EatvLNG8aZR@%`;72oc-M~>{zf?7 zJnAaX4|`#s_{n65mf}_cn?;t!^{CiRoux(Efe)e7KIU;8^k2^=5=6Ft=3BmD37tc4GqFalI!P(yAcl$bGl#JFu%JtO-EHlnIVCwI6$r zc;v{Y3kcV85)>6-_oj}m3y2RBd=O8VDr8escZBo2U81Wp7HNNneYrpR_Xtu*-%y|? zmseDfp#8LTtqzR+vGBDQ_b)ZEY-pd{k%3o0IM0r2%N^Ts_ILffRy??0=WaF{-#Zov zR~R2U0^+~w#S4aD9$8K3r+aAI=cAk14}YY~V!`Tu;fwnmCXCP~t8j3=2fbkl}}UrCFmrCo&E?z-D?a zqW|J3WKa3-Bm7NNZRY85d+6Q-jOfB{mI}_o+c7ygI1rj%u27>vK;`dLgU731%^@LZ zK$k&bSmPia6cm)J+RsCjmjU90zaN(VK_B&h@C)k`DiUTwnz?)-3HWGB1|=Xi6;z}O zWKFTH;Bh%BGAs1Tkjh#(6Q+`@gXH}H~A zU7Hf@m+#$y@L-K7i33d*J)HszZPXMffuG?O2pNk;N?-f4R)=~p879ixxa#8EFgLJVRVDT!Cbvf3~_v|bx&yK2sIy{r5?Pu>I z6FKj*+=_1NjFY|Vt9H!8>`D;zpgJ8yT4lf8V^Vzav8{8kf)h+MpsJuy=F>0|Bq^wI zt-%=G`;ai3K8(y}Q(O{}yTQP%VdYi#d=4dfS2@iIf|L*lNN_}$D~m)ua2C2ftrQ0% zFzytN$x&87H{g26=Cfy)iVX@F`1szuMjVjB|^K zLh2gCab)vSQ7D{pz~S>airy)p5^9%Px7xhh9qQ~uuvc9s{g{vql6gIc{Pv5Pu|2Nk zP5i=v$&z@K%h2=h$}8F9V`HKIlH7EJveFtQh84sy`IrnHQep_3?^n-=ZMH-(f*RJ< z$~VNBIwVd?k>A!LUj>)lqgaNR<&xB8y2L0zPKm=<=SE0ftZq$Z%8>eruAyf=4z5i) z)@JIeV^YEOqP7XSQ4bd5*CSr?1KahVFfP}5cai17d^YlM!DnRX^DnFJZfi&g$VSmJ zFvtPL2M`UQL8dCK2w?SVsY}g3@PR|FrjcHsU_BEDVq$Pt5D$RdjY?vDG05{aN{pX$ z?QtyY9o0My;9orA5g@}Q0371la^o-s-+Zw8@gy-!;7pjJMf7$Bt{&9QLYL(?Kd>{$ zYj&hK3d}n2;P4_mlPk2l1I`L_do|>VTgev|`I@##Ey?Ej7_+?mhD)wk{Is^!^Z;A( zD_8tFUugMyFwIp&)~Qa@Yd*aHc&j~=e`3jiK<}ts+oHhk_w$dQtZi7IxQt`+`ZSpK zi0bNA_$Yx5RxpOTk4`6#%dZpY=S}X0F9F6&yN+h@IQQw6R|PjP6wszMaBXVQN-7~A z*Tj|3jJPsPLr4)6Si-LrqC$UAe8~9>!6kF5I9uh^m$i!`tu^n&o&y?;_QPEHcS*93xC-s_FJ<*xD{sEDOs^}C1q-pFJ;SK63X?a4;nIDm(J#g5R6PY1&kBXJpV6b# z@B+>#4F34L2cN|WD*)-CSsRFu0))^MSP~)Tzi0&=q8!91fq+r~#9yOF*~#a5E3<(7 zWNWUT{Ni}~)r`m;M>zNfC4?!KYz3-Nq+z!D-;F6NuH~qJ-R~~NxRk4ItDRpdq&2;S80dRG3tuJqI4ZR(VE<^ z{lx>0#)Sia3rqSP!O_USU+X@(>O7ZX7ST~}aq4RiXvd;98_QP-X20jPaJ(#pwn_1R zkq9Ed=;CM=!g5eXMjY0kiLn%M&&AP%g7dp|2!}<{j1@i)n~0~sxENCb{mWJo409~) zyBc@DY2K!x`D*7sN6JJ@>XZ%?SzUudi*G@>FP2l*(Kr7yHxO0D;?RXTTvJ+#z5(J! z3m}&Ly|Iyc-Tol^z2_Xz%RDly(elqa$Uw_B19BmCqbHuDgD?32gG2hd)_UaokQ&wE zOtWU*y9H}HAz}cnTJ29ePq||S2XE8~D$*ZRTUzgwgD&r|&{SV|@>}k>8(gnzZ7_|Q zV}TGOYUB$jFgFJ-|0*JZ{5?GfVda{iyI~-t1it(wQFfUPPD>J|#OyAzKJEnJ=)iS? zS3m%SW8jJ3dBx!HfjP_02qJnBNtmY*usFFd^F4GV`}n$@ajBKCv@2$}gf!4O+u zZJF@%-#1YS;pm*rK@TBJ-p!u-cuREj-xbal&CpxF$&Qa2sfIz<9F|NKJB*~UK7Cvh zOnFQC`{jgvTkHqRP=*Umxh)axki0>q@O{w~K=V!oehcI)HO`AraCY-QOj~?QW8mz} z4b)|!NQx|p+x1K0~Xa2p*<>b}iI@%gOI4*B<+`Ekjw-Zu}>7n#Ux)=%-}~1BG9SD3jR>yjj(Y zNhja2{Q`Tm*B&0vR$!~xL?k4ZU=s)O3er|`5q3fbR`5(DQ&PY5q{nFsWACO8Y{Mou zT9+@QSU@z3o_8$tMA35~fOqWSUNYDSeWRD(7k8GyW!HX`h2J0u&a={@P`An0A3hYZ z&p>$|*t>vS`jUsifHFuVHjwyA08CR^8MneA$}$IU-eX?G*gWy?I<1W=^IyAJ*j?u6 zPqL&9Yso_k#`9lSQ8I6`vNMJ!Ufl1mU>~BE$Hy`|vR`sOY%^5sOF=*g_)yMhTqWwh zmi!(5j;?W~bL$oQJmX`eOir&~QvhxwxwsMtwE!6y$`Ti)R0L*xkqF_sO<1GBRsC&i zbbdSdfnqU=5U#=SZlghx8AGa%d-9ve?K$c-_H!v!4HEB*c0*H zzP-q19TNyu-1ubmtf-XrR&+y6?z5*LqcH3F<-_SqE#?j~6!~QzgtC!7Y*exDH#u0r zpCv%pCH}v}$r;ZA3J6(WK9Rj28!wXIn2~QsNu8yo9p~_B_V|kl z9pC+_^#%sIMFADPPvIcK=z#Pw`ISjqcAuMnT2Dsxk@@WLN6OzeV&X6}YmCwg%Sn&& zg9*dzC*GYRhrt75AegFd)58R2C1EJ8)RFj0dU@}9mV~wu^)K-eju=m$1{a6jGc3o| zi;9TJXX>!@0Lg|9J>BuMZ2HLXI(Azbil!kYu5GAawdh$9ac%t7d7)_utcyVRGL0(Dd})f$0oby5_*@{#zNH3auENmJ*P?N#sF2f(Db8jX zTi?frBH*BFrB9#O5Ne)$4Dvr@2gJ(`)~%SoTVYO%r~Z)#CNnielx-V9{|{Gh9TnyK zh5Zga^w8Z%Bi-HI-2&3x-9t-vhlGFvA}uHqlF|r*Gzf@DixP5f{Qlnco^#f6E&Xep zdFGk>+56g`>)JO$FW>JH--hwBiZ9_%VW99!Lp|f@s4pWTmyrb)QCLV=xSpu1$jR!F z#nn-RqEelyqTYFKu-@=FXnPUbXZRWT{RG3&KzEBZhqK?E3OI$r^(?EYy>pqzjP;Lc zlynFIYW%^gctr3*RKxY)GH?b>q*%>hA?e5lh$N_I@7m~`sX8$u=PSSesus^ht|kK| zQ0_5<0ml}i!iNxMF=d7%=6T*cK(rOq)>G!1q5y$r0!z+)h;i`K$FB^Z@Y@Uh%oTJB zx11IyLj51!2w$GIL0i4&XVor`pqUiw`~o;Jihja{>-RU2;r@O%V$xg4+06Oh@H_w4;8oa! z8e=(PBrc&O){CZ+V5zC|=6iuAbmEITUGNhGMc1dM9aobroiwGAMkEFX%EEu|SsfGT z4g}ss+^?!baL4DTq`&IE{mdlp_O*&ztOBikFg!?f;x4= zP{`fXxwjz$W*uKYva8<3l1DZ_LFQxq?^+~^MSbD?JaO5qZeZ|*A@zT6^&1R;W$kVc z2QOs)80m%e*kZ`trF2E)c=%Zs`f;^x-M5gz*Fr1L`oK7Gf?K~_#$dt3BBjBEUY{?u zNVU4~TgB3|bff>N{?^NBO5NR_Ke+CBeR~1}QqZ&sb&lq*yv7ZTQ2q=Rd_f^`d6G|D z&XT0O#u_vj1WSG-2tkU()UmG3ax%2pQ4GNs)Pt3LvP^sUhV-x#(e)AeZrB9k#dl0)hV$Y=Z2z%huIgPe)SHOMm-DG9;A`i?2aA_=2TW;>sKn z835JBd0sO;?<$D7e&yvHD17}<-5~t4pU$88E0Y8l`hPD@K(ZAK!OHpDVG|LS;JsKf zGBTp9mpcCQ%fCBJ>_nXFB;gGQCP0AJE_QevRs=cJo;}m8BmAc@0Y-1hYL5TuVciK( zY3H7lc5Wb2nzce9<&qdr)Q*P17!wWQtIw1~r{$vAxs1K)@1p1Gtb@QbTG7zZuyFJ= z-vrEi2>NLypdEG)Psl#R8-`eH7CZ_6-^e>_BZqodTMd`SCcT1oB4$&6NonmP=TXCO z>F^A<^`ja7Pb23*Rb0Q?45FqS2Cqfm)pZCI1nGa%!a07x&H>2R$iM(-E&x-)h(!dN zCg`{kH^JRglLI`J_=lRs((VVkEVc{B4iB6UVe0#D0-ZlLWI|te2#I>^{B<+LBXoJt z2Y`*!a}>opFpzZ7+y@)gzS>{>BDBe;M6@$gH zhX7mJ8wYmrK6~(G<+Gm9qGIe)^Lw7CP3>mO<^0O%@WLbd@fG7{-dK3mixQl2EJ=tK zi!nF7b|z7@dqLE`7V&N?5cxt3jk)OJw?4h5VguYqA2tW#y*B$}PZSX@tG{2(`BA9> zxbtBXVPryOQq^{WN|Ti)*|aY)BG@m(@=#5J>bwFV9T1?ofH46WHpYQc7$gOFgdLi_ za_1WG6=xiLg{sZc`wcRZ{g=Et9-Zf%03EU@WJDI~g9A6-tE|aJqSC6}&Dc~ycsP2t z_w$!aEMrOaNA&rI)ih2+@yB9Q$1H!I!S&v)17#PmnTwZ(u})wBqd(d}!YSKGF@kIO z`n6NPTJ>Omw4L>;izO1|6?Vszy}}378Yd3qNKl+TjF!Mt8$t{3dT7{|UL%3}?4hp% zhJ9{v@n@hyHtgs+It`1cjHZe?Gno%IU-XN44;H7AzL-Ab*FFuC^8AA~sA?-%1epAj zFsZGAU17~>;;{|{cr@Ol*&H;r`M=D(a{K?$9C~2<2=2$m!w;v5DZ%^mrus__Yt?Jt&t)tC4 z(U#$gPf>q;N9FMT$gT4>RgC*0AR@lO?2b;H>*eP${@B<^s9f*mXR{cRT~bJ)VxS4({Z48#7-Sn{8yOO!0BE)U=G`$v)+q9#A~6fqFnS{e3?qW^9auF~ zoR@kDEMu+9q2!2R&bT%+%O3}aT*mP7ID7X%%|k>xC?XB7!#6zed*6ynJf(#sKOiux`n6XC~hLnJ^Bu^g&^yz0R2bW;UW!0R`AXqxp^2PP(?Fcw+G&xLL zS@Ij|BkBfB@WH-bDk{mVLh+N`cv0$cc}2I*af+;MxkfZo`CUMw}O{Oww&#X)ejY`^) zAr19SPtAjHBbKAdrt{%_dZkWJ727L#&Ia~)Urx;aVN3Mh*)-C$sR<2g2|djFrBcy7 zFUY6y+V}_bSmNPH=_CNgKHZHjEflkKtW zW&c_3RnDJ-Z%|Bx2d5bz+OP*J9@LGljfV}S&w!}azT)2SJrbzK5Ao(nlG82^yR#n> zdRh9o>j9)oI0FZiw?s za#O}XHiV+|hvmD{l$xBxpG9`V-HiTg(ZB3WmliJDYvY6qr9& zSaPNlaUbSeAmLMg?zo#DZB34{aytK_o;+|6;nn*H-rfH?w;HOD()hM>BM6PL&f1&E z^lv*^ie01U)~W3U1{_rpp!Wig(R8rAbr>G%l>>~_4?-9S<)b2V6;7R-r^n64{Nz>K zhhztS|08?n87E36OQYa#NKOtFG(}SzYIj9`mmC(y-kvzzppcj!~LP zS>A~fZogn_V35dDc!LEGe6&}or`og&i(8v@i^0%Kf1yZEvipWXO9WSEbBd)cO7d6F z>}wW&BQCeRoMpwW;!t(`P37!yWw&a<*#OyLFSV5#)%(Nh#f4e9zY1LmNx83jEOOs$ z+g}Y~%_*A-)I7;o?Dsd9$ll9$(h4;HFo9~{pGtJ5{sMl8YF($-AGY<`IM=#YJD#M&GV^-rJqKTBT`s!Q95=CzM5)n}`RrzLess=+ z@eJ@M7f|YPtG{_7W^a%AuM_6828xTd>l_nph~bc1DFxNgu(t>p&F4R`Zo;?WIQXE2 z2kK%;z#6*r&a<~i?JLf@aic|#-Q{g@S&*oSRjX>Q*W z4D)44b&buWkKXE)wrzr69Ex;5>b~QUW;tCTxVVe2Jt-`w!Fm` zUwEnaj_7A*s)i~SJKe}4l#45w!8Fs^pfGq2%}A_P>N;b92#WQnA*QzP6L@<@)*S1s z*C>@{Dqi)~*uium3}>9!A)&$i^tXxb=vH<+g{&Q0Vnz<_@qq8abGk|P=P)!(cfHH$^a0!WGgr6ni*)z=3BI=RS!u7~XTwHupV(L6PT>;cq6m&$| zkp5!bPc?-n3&EhX!^RCjnfAm>ZIt0dW$>Eu1l90LhsQ7ge8|HaonH*6Uj6t&Pc%TFKTogs7#U$KUk~_`Q7l_L2 z%7|1vYNI1$@_zIjSDvTVSKMg%GwV?q`<;i{N_HH`9g)u;{!3kCtBw=w09sIKjY@cI5!xFI^nt z(Z@H+h(*_fT}&uI>Z>s;RSMniU+yP?6{MqSYD^&(#lFQ zIAq#>d<35zh%iCXRAnX@mpB}YQ74fuxxwZsZz^%|&I*U+x!!i36{Q;?XH2 zoC8k*y$U*R1)V1*pNr3%OI|&+F@OrF3l61(*NhF3k{7&eZfIclb`{ZalK`TYJ{wVI z{CGap=L?@YgHtvYjmY*hZMYge*62&Y3X?a=6`^PCf^zq-JZ&oldo=|Q76VJCy$Lb++=L1;yahmM z0Ng;0Q>8KCCSsyIeSY7bw+JBy3YaScbQ-0bV=;8AAS}0qqMw>d-o6({)8#nk@`HfAS6Uu`?T7Cd#=36{ub@PMHq2CA@94$z2$;J`Kb{!uF+>$0$B4_;uUsi%2 z$dKdJd6W@_3|e&{6E@%JTY5|qF7~&(IToTmpr@+x2}qF-fbK8=bU~pxWaBl-Y_#_` z&>4sjKuhi~#U6knH+Pa`AKw52OS9Jl7^(SW9UwP01$#kJ`zY{!Q!6X0!N;t}ouQ4+ z-XY^YKTKoyoPFXu#*b@f{BLisv8Pit-eHRn?Rs~WL+ljxuZ8H`h~`YeP*?TO*kIWr zL1`=aNrC&T$m1Q^LmT}*B0~OC6NWL6_&5EAY47)$;`VCOB8ai1<;gQ?y^OdqG16d{@!j>Iym_i3@RssR9^(`wlbD z%1JP?;wMHbNfO;Zu~Z5bIaNIf)#u;J(Cii%DNKm9uN#%;Ueur17D4mWw~e7tk_lkG zSN4K~h_aR;{2Kc3=SSba_k*NcqHK(xM@K205uc;Cg#p?PY=@p!X#L{qKUgODlkAsH zG1(0hDqpxjc7GX0^y3UEwDvoT(WV`3U+GX)Y!q@x5JJrC!ESphp%yOt{DR5?Ta35@ zR{O8127am@tu6Be-X=pk>9X2(O+xjRs+JOG0`y$8XZZ})pNhw9o3M6uzl9YSVVmT#JNdJPG*v?!7N*6)q%4)xjb;<<78278_qx=Hw z2_mr?lnZb?Kv8y1v;JA(Lf3KG8paYQK*(e|P*K8KzWk`Fr~&;Scy@g7u~-BhC~zu# zxnkiee%5#hoXkL;8OZ=-2|?@X)m?(8(Bgrw7}E!h#zr-fX=TQm(Abu%OwcU>)flhh7`Vuq4^oI59@-WLTL1LYe3Qr;rw2f45C>lr3ZmPX zf@^PGeX*7e*A$6|z#w?M)N1iE>3AqHnGx_*P$L7v*j^)h1pPi*P<2tO5PoJ|$+a^9 za0w(5U_OB@b@k-p4y3@#EWUm&-pZ%d(35d!Q_`5Hh1)m53f}62`UYm;s5v?h%+bwJ z$3wvZG6k!DezYu*Z>EOtnce!okb(MQ%{~4Re((qqd5^zjkY#Pp7k)t31nt`JUIXoY zzPQZW`g*(A6o1$|wziZ5ju#uKyA&LR7+K4C)}&F&O0CH;7<1vkeoo}jnC~q%elA+A zNj)b|j4125@-7T`3@;6VxW?J?uzju>ghqS~zd7R6=u@fAM5m!&#TO&yDe0Sul|469 z`T$gNUtYrlu1~|}2^6{*o8MvR9)kTjbiJ(>)j`F2qJl)fv{i@Mv%wext8UhZ#5!6( z*g~c?f=(tKXsRg%FVhhR_%Xm7qx*5vkj+9RTZlAo8vrqH2_U(ey;K7eXb(~!&=)je zn~;n??!0lZh7q*Y?Jp}%TXsYe{-BDHaZ?S=7z#yN=hxHfaN?l5`Tyv`rOOS1_2(nd zRnDB7A2b;)FQRbcRx~SZmEb&q(w`o{WH%qjI#%1^-;Z#9mD$Jm3E9s`Er~Ji;#E7& zxiJS9ku$pYQ@%Y=f@cr-4Vx@2-av=B+bZkXTCH+|2F~T%=JCDl9PEF#z+l#OS&vwL z{D*>p=!`Tl5zpn%#&^IM9Hfl37DcyPyGZ-Mtxm*9YhH8EzA2kv%J_6>+^wkk$|*xv zj-|N{DzRWL?;+{rbi)DPP@s14eHMBkObr)S6l%tU%bL|pI3$F;8BIQ$|LNVJ6MV3A z=7U|qvY$h(crat+%+TceAn8!W9d?6X54a2ITMBB(^tq|X$O=A^k=CFJ<^_Fffh?k^ zuD$oNh$$$VX!0L;{rYvT;QV<{xlc69Wsvy|9ljz=ep{S6CRy!wfvF8O^Kf9s5Uz_iyZ`-EDLJl$@cN8-MoO6 zdh);Hgee{W4BP#3x2@9)r+iG1VQWzunYn8 z%-~EI9QFW0jyb*|B`3#VJ7FuPEOX+uB{7F&tJNKMLkvRvfxc@o=T-1!G!z2llwlCz zHIxFHliG_y7r_>9*NUF=NGv5wzN5h?B(&-Ced~R-+6WF|96;1cE~46tV$sO%pTdaR z%?~o9_w5w>NfVzs!4b(4O~R@dS-)n=i{qD!jHk#d-Kg$;l7_ky3YxM=2+{V8f_BgL zaV353Gt*!RGiS5gus`-WY!XTNB6yAXEdk|BcUoly?L4r!E$=+=v8cdIA50#D@@oKp zcb_)^at!bj(Fu&eT7myd>AcU1K=aa1|Hze&>&H(A&r=oapcK#S{1>IexF$eh5 z&yDrZ$MnSH!BPnim0bVM#Onin*srtPHBHTRUUQ73zq36}hofN!$(9AR*f8kO+(8&T zs3RG4sr)=WVGors(C|%71#)^eM+&T4M4p+yOtoGHR|w~cj+M~GIE81kInFeHc@tMC zXAUB--OhpTsNe5!W2P1E!5C|Md=go1J-Wdr4)};%ze&wSIO+_WxF{Sd-_?T+-DFAI zuUAK{=*yMe&oE>uX^P~=rHHL?h9+}BX0&y(CpT61N*`k^zwd`xX#ElGge{uN(OSBj zx8S|++#z}84(5GSklmoi#K{m@uTR`qKsc^jvNItDmOZx>ZdF?n;NjD(1;7pRzp)Ic z$D_aJg2x9CFn^pfg>e0w-T)T^%aS0#GmSaCNlhq#iTpnkHn&vO@#?ua820@Nw>9l& zpA1DgL5|dT<&Hjw&Vk$?jn%OpF7_~*xwyJQf;{|o!64y(V+BVO1|U?6no{VIlO8@yB}GOgkc)V*P=>|#1FkkG@>v1<~xr@Nb5T}=U9pLJlMFgMI% z5l}wsEr{6g;~SY;RUB*qxlQdIT{P%19BWX%VW)1>zW)=;dOI4=dPBQeEu}y5?vLCu z_Udi6YBZv^3=Vi~am-3)8O*dtTzjzEyS7=Svugi|wxFkC-k}TjuGa_T8=0(v7h#(R zHTCq!IfFt9cs6ETnr1qcO=6n9R`?_J7N4r&l}Yq}$M$p#PL->fer^lPiobDtowA3{ zGvgOkVeCY-NOa>!4)Fi#1&1B)Ez(AIOSC~RjM(ohQ>{28)_BM$l~#`s_Oyv^w655{ zVMu;bLMTVlY6>M+@~3g~b0Lj8fQe5P!J_LAgSq!ufO!;LPGA{*Xm9|wNC4&jKNdtS znB9&~U42qEzk6Z_LyoF}dZ|0<$Eu1q6BC)5wHc#N5s#G%)a~mB6|m;SaX2iJ{s<#o zGe8>S@`s=DM(KUP#1)Tp2sj3jBX&o51tA>I-cPTrtjwBw?xuUB;>fp7XBR^}r3MEl zxg@a4kNqITNP#%omdLsm^jnIfh(DtpE5vDiJNMbC#w1W)BqJQ7NQ0LsIKWsoM9-u!2S=j{D$+nLd1H*#JF8pAeJhZK z-aBJ%Bt90@y?b7fM{y*Vs4~90pFUt~_d3n6c$XskFbM|SC%>M#1UO3C$@ypW|kJ!kii)RMdA87*-k;r zJShV$9K<~N?Slv>5uaZTD6G+MU?g;5Dxl?DcQH5=N9Fk+D}IxsDHL~3DB$CG=`W`- zXPVob4bl`pVec{MSGPbEhwdjIMLtLLHw;YDai$9}$uDHV?b92y8bX_uLiHq6mVi2D z8>%7UH=!v8BixTe-l6^ui5e6d^5T14GlEFjn?6^6{xWOD03Cl~OUL-MUHh7$;i6ob z=j{b0G#Ta$t1OB7rDZ$sL}})Q#T>qovY+MWg(Mfyqng=pzSh}>bEAODSwG%0kh8usf`oH z1@I1FbsgXajSd*kA~x;$ihe@R1+%akgoRiqX22P7bc0S|yoDaP+<=%=<1~`}E%PCe(X7L&h;>@KZ zldx)Ng#cs?HQ^6gd^g_GelmW@ea%3J#&t7DI%d9`4 zY_6;}-joz1e-R;Z0b+>woj}^2s@xsf9BrCKv*V(GzA?!AZ794k(6o+|pS5-jo}wPT z_U&PcZ`{>#hT2H+34ugOM_$R2vjuJSX}Y7s%GU2!C+hX~1_?$|D@B=3-AS0|@k~iH z#lqTPmnj%v=8eYf$O?03;wO-j>e(D(M<=}+&$~Ropx_;jHONv(N-9)aY=8B$z6h?KM z>dMI4$r)PuHqO3WenN2h^d-xqj5&zoJ=TU6-p4w&+1C=%Gf}ss8#qW~dXeY$v@_U_ zQ%FDUAeLrl`R9-eWrq4QY>9T?M&o|@Zp+r9oN&uuLad1miP z+r5pgpgoOa+CnB-{ss$$I>Bt&IlwNyqR)VBz79r1RSGHXtP3uM3GP*D>w41%I$fzn zaihSqNC6QsO-HMqq_O6?a|w!vibGLw&$I1(X-_FFE#1gxG|li-%wini2GUD2*CWI$ zaa`aFy}DEWtM}#n186!=6m3j4QY=K{iYdjZ>z|tR59iB^0!CG3$YK%u3cfP zf+KFn06CK+X;YZY+6kiO7`NdWz~?4T2BxESH{gZ`zV*Iy4(i5i&03%jfLadlL%{P(P96<74RKuH zfBE7nn9mqg8vj%m`3nhPxf+wfV;Ro<2p^24hsx_q|0x7AKg&8{dE>i)&H&kHZY$WY za+#T#(;|MUYE!7BvlC)8yHNmHGf*l+89AD9VB*o1aCHeSoWXLJpqjUcx=iup~AlX=veq3M1iqgQszWN3ZgtnM&y&BOeJuhK55 zhHP{u2*U3U4TbWY2>zpMK#95jy{{-XL*?l)Sjn4dxm_>nuLGq<9LIUuz{M+lzTBx?DNU#F;u|{un=l?I=f~(EeM}V-A1PS3P^C6 z3d>V7N#dX!MC(*r{LO(_?BEl|CXmt2SRXKhwlnA!XW{Jy_z7ac%TZ*TX0 z50gwGh2IyC>8SMl9#H;|5_*UZ#unKCZPE43&BFw_M^I2O4rmJhFaMp!u)cvnf-f>G zPPl!*{JEaIFv<+~B5HcPXXv;}eB%v!#;`bBKlcLhjPiqkmTc6BvP0;Vs#hkR^$DY? z^Sh>b32ag2kD$Imf>|6LGQRyoYN?6pxIg7$ zdU=VJx?54wp;P{`QaaJwt`+t>A$+NoJPihsNGt8HPuZuW zu{w!KHVD*vSY)zoKQ7-wW{bfz=(mdAPnh^FyCcKZV6K(6gCVE`SZY~DVwI_@T4-~X z8Bab4&g3vUYa3wJgfB!KUYaN zzDD6=3|Grevb8jE##fAwE&N%1HI(S{BEih%DK9|(PQo9}q{vJC@foGo%N{A~e+vfG zl2=_*n_GJ3|=d49Sf9u$Iq*R zGPdS|nPb~+#-^V!tq!mVP%h*s)4n7@ke}Nyz;5%a`bcD=g1U*Mj7m`9mH| zt#ghQ7cV!A!C9#6%y~a4$}_CPH%#~@F>qG}e?XZuYaoa9X)&A^|I1iV+^is>s)pcU z_hWFB);M(@UItX$lid9t?9qDi_s_XCDXO8J(WZvWI($MKRqD2gX6xF+B27<9EY{32 z0#h^e2HCL32IXTocU+$2J$~tzORQkrOH?YkWz}SwyDms6S~Ef5`(NQRPR4!M$K42f zYvGOi+&f+=(dAEwu@X}I74q3Tl$JlE@VcWmN2=4sfXpR<%Ny&5@xBI?QFauvPn;8@ zMw@N-s;<5Ux`Dy#ceQB08{XGTkS7(ifgdt3N$PW#O9XH4zI>}9(ggrtSyE|M=M zec(~;+|E<)o`M3vvK$JjijS1L91nKooacEw;4V9mUukC^Y47716jdGV)Z1q}TIys!!B@(m3tJz~aVVqO z*`W`qRiTL${N^okyC$}tsDXXL$R^P9dhsp(=u`esqP|k5T0|Cy;gs*m2npex(BJL2 zi&v*Ri3BI@t{+e!lWRR>5oR3Gw}KMLZBGz4KgkGt7~)OV9du#Sz0{G)Y&cnzHD38B zy(i2fG-sv(?g(lbOn$~OZRID-@J7K9^_idAjx~Eh;CjfgJfwwUA>oD{()DznDHMnN z>5_S*a`qQ7a$L|njwb9}>10FU`nbtIjL1TjWYWr4GPl>CtVNM{yv#I}rsR&HSlkoe z^DhCHO%v+JUqaDK1Im;vN4G0*rQpebf6;S{ap7aDBb6Ro&v21!DiuY*%Op?r zC~t0Th3^b%lW79#wC6rctz+~c8NYmt>fPsLC5){NLBTkYdGZNuF=1PW`m3ssyM_2< z_3r>0>o$MW@*KSgo!1;TRjnoHGovF1HQ`@-j=dWH84s>I=~080Cy9^UYa|@Ispd}D z1SfR~QH+P}$n#kMk_D!L5Lvp^XW3XSqrT??%p5!r^Ynk65mm@sy zeZH?K1i(MZvWL7?AdDm^R-=<+{~Qlm)ydHNBSJM4Ny^Sl`*8_{|C2})9sfXTM0>D+ zpnE7?Xp}5VlxJJja;R5Zk~R^%6P?-#Lb)DqTbOYKR8hB;3~{Tc3{N}siL&}52o=zO zWc4gNM&K{%8(>Fpz2ow(S8>a5%L4=fc-y}hH?29`;hrK{6*#Y_&VKYs>uDKHrq-^I zDC4^)C{L3avoH3-(YNv<&r(QjMGwX8 zO)E{%>h6q5sn;jj#Y^d(UtvD=FPK?TXgl;a5QTs}NT2|OKu&zMuK7rW zoFYM1lfgfi8ga9-ZWub%!cm3AFd_1ZJ3p$v?jf2Fpo`IaEoR}5O2e<69^9X19quT! zgETZSq(RgK&z2_;b6M6_lB7hCXS<9O@ z34pQfIT&bgTUXl7Y9y9AjI;inUH=_^)pJZ;m5y;%rTsfIR07!Gv~`*vESm^&?5B*x zhB2r-#Qv&Q7Kjz3M#)@jfX43Z7dRrw6aO<2Tuq%mINw>d&zE)AK)`r`>X7S$1 z@#boMlMZO|Cj+fIyJo%mvz-k}`>+Pe(SJYzR!2bG>BWUaE%TH?53W9$;L+`ypZ{N`1 z) zJl^R#}!zd-h(M56$X^>3Lc4Tqw@a|LTLODT8w%U2_xFATGLRPqZcx7*{%o_SQNAa zzFXrC_f>dO^xwJ22uaU!Pe_AN(?_IaVidX;AC#2z1D}iZaFpwK$QUW-{X&rq>r3b@ z<9yR=C7Na;YJ|AuZ=Lsx`S>lRtd<4RrpKI2%H}!G2to7m<&AgNGey}eW|08ONLnsq zFlZ5Pbh)GQSZYQ9S(P96_Z{b!*Od($%@e`AZY1gInKj}_l2;UH9L0hjJjqFoAcXB% zAVc8M_r142Cz z5_oF1g|S&Z`6v!9PQ65wDbv=AyrB*gCGikQBt%7CM&DiJp9$%$6@})69n_W z{Xs-VF+q6N?m#q723~$ckP9nCfK5(KjZ=yX(DjA}m)WpfE~`|)Gdy{lrIsg4rs%uS zj`Q?`#;?u{=2Hm?`sZA)))1_Ne1m@mQG?`0+V)3TDv*i}+@SZPbTzyA>aH%IzyC14 zU&>xl&lS_eA**`&2{{O7Y_w$iDXlki2&^khLthCbFM#IC>-wNpXt!HkLBc;2{1dI= za|7-xVy=%3L2MY)b1?__H07qbu_V-ikgKmgS};*l4q{M21EH6Gy~$j>f`D}OH4^S) zW0-#5^9656)QLt+IQhuj9=`?wfE{Ck$6m=-dJiEa++&+Fo%66nS1x^u8_*zh_$K$on`T3gkH5S2-F$;+Yw-kD_&7i6v zFom3477R>47WCu11}DHktfo9{_)E6qQ<3oR@!nN+eejvfn%`dQ+@I|)(hSk8{~jL6 zC*z>7L?vRA{PSKi5qN1*xLgO%$IFJx0`5fK1%EQ)fzyRve4-g@!?jFqTzOkg(G8n& z6iCjtQSDZhVl&ZUnrhSZ!gk{Ul%DbX@VjT2UUOs=Mu&d$?%D!o1*(=uzQ;BD*fqSb zC}|dLhoyZ(&2fNYg*mW;?jTo{{_UqmbU$pF4A+L1Uq!4=TedbO&B=Tdq4Q$&r*5E9 zow6Ca=>;K$|72)#UCDpW@+c)r16alV)$uxwIP>?qm#QBnK;H~jS*S=%jXgvX1Yb6s zwp%^_*{na_0u&Y?v1Ps^!9W3dH0r7lI*w5k7+{ygU3YTGOcp@xFf#Rd()D_o3DWnR zCY;bB|C-4JoA9$Tb+oSq3!PMCA0|7g;~z=Fb)^bl&Ma7%&)Y@$!bYmAuJg!oT6y81 zX(!T*$!_vev$w|`QeR&`g13J|3WD-M(qjzKo;N#hNp4I`co8rEljM+q z*)j5<{?V=1p!j{ti&qhy^jzB=fBgz6s$}g@zs6;Ncep!sb1;!0@K8xA>7JoilkUai zK@ZUw?&pwQ4-euhgLKE-S0{P=7}&BKm6U!L@1nT7)8PC@!J5_`rcNQ=vh)`4_Oxx~ zz22+tL&z{XTc0UZ&Zn;56}8f%iqK3yKf337e)d-oT;u|(x{U%yEW2e7Kya)UPXPfu zKwFhJp%{w#V^n#CWhqY*=1kxR#l}K=K3c&Y`trG*G2t< z2|V?g)hbg?kZswowvL`i@EF1%ft>c|>4;2-XulBbg;=~Z?xs$URjcGx5;J*M=6{zEYBoF?fQ=x2dnxPdz9tl&r zJBSB;jZo}2qZstP*@B=6x1W(dq_#X#%S||hbCWzp zouN$UW3|Yft~UBj;h`34C-La6dfF8K3qO2_!7j`_EAY+jlzYXM^ z_o(0h>m{^-SXi0J#e*%4_E}t~o|K&C*ylRmMC;AbQj5Im7jIBxzg*=XTBdz9V?drX zvXWo3l;;}~OwC+WlCJ^`M6_Ya#j?@mi;n7Z6DN1}a<*{ij~MzH?+O!xwFeu0S6PxC zSr!B^fjccrTP^*UFI1ybC<;%nXoV7RPp(R}(gC?w)CN;wt3IV0P zn=#_H_a-N>`^(X1^a1A{u$rXSf6cW^4oPc%qw{)|pf z2@yYQQ)<31x~T~7cufUKB+Ef1^A7I~eAfdq9Kfkgry=)knvT)138%-@R07YnipnGS zLg#DX53d=X5KH}p1_U5OpfuYICH1j${1@_Y^6jO3mpO$x^b0+@=jqr->HOPLZ|51t ziV~ErPAaVqE>y^|$p%S7+SXvVV;~`sdbx79VWq)uGpDzzO~aQNo$vE?Hia+L*h!+* zl5zF(>CL{~3G1iRhf@b3#Ppzk)fH1AtQHSr#P~%=NXcc{g4}iWj^sRz5@GF+W>0t^ zsY7vuq-C!oUJEqYYGloi?`~DlR-K1xhmeTm=q)sFOIJMfaKQLxs7?8$=0$CK{WCM0)=Cq@NHBDSdT6jdW%sH~fejHmTS=|N+ATVpNc{hD{;_8leHMYJUfbjVN)0I-3+F9I6 z{S-kFGlJQlV?Vlh|FoMrrx*F{=t$I{TTpuYXbITp13x2aPYShszrlMH z`KThk=Z&L5(vLiE<@E6o)U7xbdh%V?4p^{nhVri5*FYyLk?ZtSwT7V9S+oT7wAdHI zc}nvxZoE8d;j6JDcXBJ^{rS=RZ1lZaFQ5t%+3jNRu`1Z*$m1)5k{^E+=?HlFe!#wB ziPa1_{SM#27K*}25PxEynlwZXR+%yP2$ryEfV0hSw+&1xv^cFKc^IE#IQFRvX`Ce$ zCA)S#!R#jS-(F)s9$Jv<>b4$!Rc&Ku4$U+Yy+2CvkOzrM!=R!e0tvIj?%j0@c`rG@ zB7~ZZb?Zwm!(=Sq zwYBQ5HZGVS9wj62;ItV$Ic^~cbpCUe&_Q&7`NqNwtp3gCpBYq{Y&f`)4DGC=njvXhVBH(8~nB$IUf2+2>ST2#~00!hU(S0CKJiU;#e249-|p4>X#=w3VA zaH9VCcVYE6jmI5Lr)Y#9se?KR8I&tLe$O>muI%tj8s(#>TDsB~T&h2K7EU7_0|Rfv zl6opdID?8m4z!smu>a^>0J|5!HrjWcd95!La!Op#@j$e<@)rd7b}ev#LL=t`vY=p> zF)fTO37<0N+68|F_+Pl2(tEE*R!Xn01F0<`G8GukxYfkKGxni98!<)~bs7;sQXeGZ zF<#`@f;OA;Mw7yB*jEa4u1@etvt7^eUZt*)5rK7imMR^`>Xha;=|u0m?|9M8ydN={ zx>XguGP{52u@U~52p^3JlhVaz1I}?vf$Zc2NE@j zOTuP%)?rR$V3{)^o9h07#@gpp0(Yc@MR6|i#>V6;SFzBaL0iJR+6$ft$u)-;Z6==w zFT&^juhrHzh1Si(N(ZD9C@3ihk2=;1y6EkDDsFDSI@vxn5Yz|anm<=Q^-TnB+WNl`tAlL5QtS6B*w?4ps2to*E+0>54 zGWFD&uN`WUB3`T9CP{cyx_HM{yPWmWTknxr{YJzo4tf077iTB)fKWLU2`=pXfNUM_ zrx%W%v_sOu!*C;wP%SN}EB|b*6oBs}kSY5d|Iu;W@7`#p)QfJXLKzmYxCS^bU|`)$ z=*BKBW(z;wT+N7paZ|dP^pQvr5oFOkT;$yq2%($f|9W}7`1~f0;^a@nt&(}OB3v_5 zPKMfMG6U@ihgGToSd@U4p2f+o?fENy@}q&(JB;%PK^kqyf)Rp&>SG%A4-_O#j+Vyg zCasx6>`ADI{VXgdok?aXltYXi9~Acq=}9mvpqy-ineho#pH!P_>Auz4AKXd8Q>hq( zbyixS>_p=SQBQGAX$yUHG?jMLhO<~nM&)IBEV#(|vN~9HgIaBxJbDh8meM3Xlge4w z402;V_#?L8f$g{m_b0gbk>J^~Y4rY@2(YA-!!jTm07OhXzqITnx4NFq1MU$JMnyuo zm&D#E4f<5?9o+~Z)C24CN%vtls7SzM^uw_+@iNQ%$LN7s3MA?|%9}{dMT6N8M?IdXnJK$9qk@@-0El9rDX6=YJXy=(Q-yO2!vboxQ`&!^C zK|7^t-A&91HJqktaESC~2H6LiNY`KiVq z<}HC^K!n>(9TPMBIwZhveOML(EV8jqg%2s1RrO0?NiMgbAnF`{k*S+2??WJjIUfez zvd%6(hlb6LIp&9Z##fUvU=Lx;c)P{t@Am2#8jLJjFLG5;gf@XY>iwUh_fCEUF7`8T zl25kANQMZ$bM9EZIYhKW4QM@6RX_p)D(c2}LF|~~hIFV>!>{?PY1%S*^75dCbhGO} zc;D<@&_?8RN_(`0y+A)FS%zD`Q=`kun56>DTHy6TJU8D$z65XxpP4RfN*`Ch=dSU(Y88{BC}Ixc#~pUB605t$`9N zJ|zbdQ{fVY(jOJ1ZA90>9RQYxKM1xnQ~?{AO`#}@mVQKp8kqEKqX-a)d&Caj4@vK; z1*-rb)|^oZuPx-CqW6!#cKy=iFlj-SdVjDNcxPsbD<12}E3bm`s1^&qEEw`kt%;fL zTgruy(emR&$0$7f*DOlqddsQ(ac=SoY|hd6Zkp)ngTgGCn5 z_4~h9NFS1}<l0jV?i-uM0dp67SY`TzKG@6A>gYpyxR7<0@qKJV)qz-uf} zwri887yAe5iu}`ilsPh^i6quNF0|<5$De{o$}rHW2ts4>|FHYoKrSEmMCro*TA-;- zzj#F+^Qv8TWaju9LMhRz=p%Xkt2Hwn?duOV78kkf+x4}wa}n5?-?859;W>qes8;rjKqcf8K-nLGa>s%rHEt__fsdWPoC5 z5?1$KzrZO%)PfChg(MuIT^CUPNioUFUPU5dmHcbFTQYB}l8r!m2%B-m+o z)MnEps4XeMn6)IdaU0b9w)-#Qj{%ZzB?`tj!N++O2>m~V`BSPLUgC^a_+YsX|SGa}qVc#jpicLCAuO978(dX3gFJ)8pwQO$c--Ov6 zzfQ~8dS;R;8p3qD!{7+47ocGROhdp__n*R$15(&@Rp=w#zwwl)0p{vbs4^eZ`-q7k>v)l9J8IX?DWPn~`&))0guK0J1Vf)&4Qw)O}NLY7B5 z?oVHccUE~EbdI-rZ~(-cE!Q(mz#%^(ZDaeWXD2lsA>6#cjpF;~`f>_9I?g-U>A4b9 z0449Y1s95Rhf(pm&yUMn>{S=>nBMaxDe9oJiTrz$sd0(l<;y2 zEmHqEX+X0BHXQo9lKn$_HMYGNWyLGZesO#m1ZB7-~~{%SJJ z@8mrg^zqRH`@=k#92%j)K0Z72*i@wQ1CIFXDOupwu{K`>0+CB_z|;j zq?+zCS8`RQtk)hf3En<1=Q+vU?en8vNYzvz+_sY>UljfO?m`w-fIgySIA^tK92Y@_zj$#A8x1V&)4W_{EkJ@58KWs zE;rl%K{7q|9e9t5^L{A5J(|g3A0q8}?1z4!&_Ew*r`((PcYqS}G;ey~+W&C_X22^6 z9jBAS2yYMke2s0AamE`t`Gn<5i84$ zX~%$Rf|wNEIhSUW$q)I7dSnG*>5q6_~5MyU?VbV%{K} z-|2LXX^%=ae77$*>9Uk@JGQ2w?eF;Sr|~+TmYo~gU5P060*_-*jSj4cCo#tiaNMX^2IbS4~agOf~xh3RU4 zB)9!SAi|O#dsF1@GQdFROEwOw0`9b*@K?_ZE6g_+o_SnCGo^(3a2Kx}Cf&fed)FsE zUgNV3>){kZ|8}>UKGITK)77!eedOa{mafsB?!7Y8?z{MEps-LuD$$u6b%%fGS&&Su zSw|>oAU(zi?t!DM*7^oU5?058D_d4cYh+p8%}1;$$d5>03A!*3;x^|0M!M%2kFvR& z^04e^`N;SYKQSan%1br zIzvnCwjW!Mwqa~2Sj=1+0+s!j7i#-3(`dW+p+IGCScJ)34TDSkOlXx8+Gy5QTl zuJ2WJFP^gw^_XO@BgwSaDW_ODZqJA{3VuV?U~3z8%GABY$I`ZYGM4LN$ta8)OsFUM zYJxT;)nS_7L;VQ^{&f3BAe_|WPd`%IdX9=U^)No|cO zQ6&z;l>J31>g>i>&kszY&gcE3cJ1;8RexW6+~9sL>^uFhBlqXJcahyr%;?77u?Xj4 zogQ{k?04dwU#DBKOtQSV|0H#pDfLouL3rAZBWvpmdg(`{Qy7^P7`K730eB-BC8mtv zP|f#&B*un$->XN3J?!Ngv{>;GlCDZBuA^noP+yB?Nq3$;$mWp3nJKPX{4|#@)PT#4 z;Bv$T@+#7z+zoB%dWpsrLE^G1bm)d;<37Q3+=Ey0jlQGm%i`F%^@7Ktu;u*UM`67i zu6I{It_O^0orPvC9b5H_onF40`y#tB$Cg#_>vVyRr&9nzoaPf~$)VAk+64Uxdsk0l zUVsSLj4BX3_aZP!&+a*J^jk@#wu)!Ep@-x$k|wC*RU3Ob(F~T;5HjD- zf%X$kwjH_nC3K*7(9JRWscpqb&BOju0w2<9poKaiC=>;050$rT+qAj#=ut|^K}T^L zgW0(e7p#lTYu=9vWj#;6w}Sy zkTx^w8C}Z?=!X1Ntw!D$J6Ao2)LAdS4Crdz6gmuzKX4*Ndx#%_RR?aw)hguM?vO)v zJKAb&_EZGEWXt7*(@^Rf1g_ujt> z5;B72+OsCqZ<{6}c&iFzJ!3CE;0+G;;5Tq>8r^7sm0OlVLRq@1~%k}RSeO1oj9!3r8T@M zR{VLWevX#c`N#Fs4YHtlf?Kw7-#a2a-K6Frd$8C{xTY=UDvj@4P@H2Mv+0&sA(~;! z>V{QTOqHY3SEsi6TXQ)=Jly#~JrSf2)V`hv4!g#3^y+4P=XA?gSP##Br9Qiw$5#~T zU7dy^pi*Y~v5u|sMx1>u(#8j2lK~ZdV?F@gjrr7Z;RV1iTTSH3%w%9MPFI%#RN)zq z9;TaV0tg%1C_jcx+-3@wC9BeHJomttsk>9lzltiO>#!+@2sAg$VyC8 zYvZUn4L-u8tFsX<7fZ$DDK#WX9BQIS|TAU&jpK@$Avh#f*X zsdAEN;f}1UMSOZZoPZ6J%{yB0$6h-rspt#S@Zv3q87>$K@-J7l zzMS?i%d%R+m~;Ye(GJ_h)ll8xaSfeZc-uRj&h?Kf#rPZU==OZiVAM_KQuUIHb@U1c ztHB~I&kkLKv1BInh-0^OnyhP|q-5l{nZMLazomw#4Rtiq-)AUs2pTZv9#r(uHr9wl{G}pNGG}Yp%NdO$WW6jv>Xu zm(~BNmX7h}&Kd=7F!1OLY`IuGEWzosI&FgMqBPV=KVGl9eq{83l11PNz)HCl7N`^C zf8$6>HM;qjuqY0KhcuP;`|DN5QU5~EICwnz3%61QC!3$cl3s5&G!2uDtJbe*8ji48 z(~tgnU9gD1X?*JCH6^ac?hqb$h8=1Lh*$ub_~32=(c|Cm;w=d7UVLd9O(yXL!~-Gh zrQc-@>1fXqD%mT)6Hh1$LN>`Yf%y^msR1}laJ4YnKx?$J^e0xzu@^lO{nXmgt*sBb zTAH}oP%>@RR~aB4|2ODlr@(^qAN9+7VfxY2{FWuV_grbi2LDykVLj_)NsOhp{6x@ukGM(q zieJ!qTQI#2o%edi>~p=5yKXJ^VngzK&Wu&q zb?!-2yn3df=&wAlAgR&o=LE&{-0bAl#6%@qo{pZ_`l26yvL(JxUg0>972h98tgDoo zH+o(yQ0FLnb+axGrHS3HK6}Ni%ivP!*t*s7PB|nO@nLQ`YM-rLw;1b(vE}gOvRc{+ zn*{7(nzO0~B`~Lbia9{3!9|Izz`+%TdNyrO^*bd1eSN%fV`284#axf_aB&Q!o*=X5 zCxn1Tz(G8Uq4A&3#6Ax!$cG&hr{=D|5t)z9zN}(=VRTjev}`%lJ1HNO@AD*|yCtsU z>MkfGmQY!V*=Y=jxB^53BYNAS?l12Du29?`t801e6B<>If3lpDPzZ?rxb`BUHZiVc z(>@1LFh>!eBdgNgM1H1pB6$2#qU(*)@jQlZPZJ*9Hx_M19b0XM^KV>DM^= zGM!4GfHIw;at-&5&w1SF2cT|t+B}M$lwirz%eHM!tJ6NT?{$s=$y1~6?$J+ZO_GyP zcyYh4XS=t&_z>bA69Xr%?PjU%rY8&TY2y-AkV?4AsUcHQL&{0{yB+hsrZn$sp`Njx z`7{{t)bC23iVVsg3(7W@-qT!ETxT|5`vi=H5mTZ9@;pU`;ET3bNl!D@6(i!^%1WO| zAZ!2BWC~X=C&7wm=nc{j>Euz7KJkjt&0X+{Wu*F2J$}K$B*^+4-STXKo%W-P!lc?8 zzRE6KO6=bZl}u%AaE#Tr7;eAh%lDdhKZ=W)x92#@-bKHBlCG0CkYa^w@mnxt)aS0k ze~lXx&t&xsdt9*XxH?O}b4oLZEm6|lCYAOh?@FqfgzTema)w9dt`l?|5w2V5BAqt6 zJ6)&C|FByQz3L4*{UnacT>|F`!&kjBTf!ZMwA9CIOxuv$vlxZ?gsj(Ug`f_9P>}MG z?Y>eMjKX)b+|hsL%dGA;VGZIstD4o0p0+4vzCqb`Z2Bj;!c5b8CQYAy%sZKe4=Jes z{_J)C0CJCc3&I#L@sTTWLm|8uv@vIlri2Zl^zVOlwGSFYY{>P<(@E=Gc65nb|+X~ z%@iqLopEvz7a#`X@hW_eZl?GX`$M%SwtqYpOmL10ZXVl=aj;d=Ec~Z*vk)rQ;Lc`~ zG#Gj@2%?a_W)!Js(KC`)QtP`4savHlNJ>v4pA58!g*mefheVZDRu0fw}BWq}PK z>yzu^$YJ}e3#%qVf;8L~I$wp(i@2;nveG=lC0IHatlZiVx$+I;`D4HOJ>qY| zXo(r#h2-n5do!vh0sD&ap_#9^+~Vuw7Vcv&S+mYp(90%r>km}81o1iV-O^o!?N!Qz zlEm^VWjXua&6YlY!C)iP$WDYFnJwuDrFmcZSt6!gqatn>bxofR-462OWFWoQV28uEwP@Df@3*;37kEnOLC>(%mf7w>BN*8=OC9t$T$1`R^l?3 z>G~UeR_ci@7f&&5#3Xx{mTg=oWf4^6vSUzMw-3(R%zR?s$j1&MXTY=vxJFzo{nCG$ z4${lf(}y1|ox@klbQZbWMY`Gj!V2;E1vRrmY%?{cHoW(MMTrPUwbZlD&(*Y1br zd6LoL=X{cnC3=a-BrRtWquJ><%MqKO5aVjY&iK%VB#-m`O&rUvh_cIBJbJ^ZLv$yR7-uS z#JRTleGL@00z?ENCM|rPy-f>5Fn*20fW&l{h%urR_EK4DE+8{B4LQ-Yjt721#nxMH zBdPo{$jl)8s1gF6FF>BaYCf;x_1_F7KbB`IG(9GOn$g6Xc>XtxPTB1J-=I@34%hq^ z)*u`#!8K>?$d0^S1Bi|pN~Kb^#hY2F)|Y?SEW(ICvndviWbV&vE~Ykp4zILg?0B(P%X$pFdwEk5+EyfDvHLOU9e#ndsw?+fFcNF;qM>vMbZjfsI0Mi!^#GBLi$#PUYx>a83kA|WThucSXq033myDnDvqYape zAx-MZRx+5v(%0Z_H=ageDC_pwc$!o=b)%<~dh;DffbQ+DiA7J?JJ3IoM!J4;EeaQz z4HZ{VMVhnl7t~H5%-g~>e@PJZG-iSyfE|{e>0uaSfGGwb$^mTnw3EX3uP5~})0*g{ zKEpLA_eYnAhHuRzTL*-hDRyL`kFSezvik8FUP__l8d))&-MkX&%*iLJSb% z_D>0`BV5az`++olccbTsqLzvoU4W9LX2OpIe@X{2>T9d`P?Q}ZyP(vjuwPZ0GI;#c zkz5#J^48XTgKDfa&HlNZs@*h~4B!SI_eBS0HcG7(BR) zPC$y<;ss$vPF(U4v0iSfJ!yLDR-$nEMeB+ZMY7ycLR7O+66gHFK2}aXz5qAfPc{z9 zWV>jKC6!9?)WY7$GDrSN#{Sloa?c^t)X?S@b$_paai~F zY4y{eaLEK1@~9z+fw(y9_YQWe4z>|NJk6wpu#<${lC{uCCVllO54Yj2K$`qo!SA}rf)ZqC5CQA*$l+(3Q5B7I1#l`TEnqbG`(c6kZke^t zqU$xphv6uVNT*}=`a%yPI-2pUNqBf@=5i^4F)<$@Wm>5v!q34 zmd{-wpf`J4xu@xMLZD6?pgwn6Q~g8g^U=C%UR)Eh;0C@Fghs5F&@#Mvk3ow$@radF zfHTA!_naa96$?hUvO!-!!`H80`#W0yYgU(G-<~jCQ9ARqxqJ|HWQh2D=7{q;v$N^f zeK`pMD=ECFaqLMT)!Sct1bJ;*rBD+^8(qOSHl&Mp)$g()x;!g?Xy>vIuaCUi*JDSS zzAB9~z`hn2Kafj6yl?)`pzht9rK2F8no^nbIS$BW(o?ok>SiC9%k9mkyiF5B6Ozg+ zh9n;=^ukLLAwjvbighl!Q3B4C0U@d0TANv#@||i$9ou~2e4y_7Pr8EWQ4_|iXE=Z0 zi|i9dJGF+`9fK9_1Y9Ikj{G_dZ&T9wUni^(AQ`7lTEH(bu@OUYCXb%)x}^4vh(eu) zlAmw#V!1QCFi8-!+kQ!}7Vk6a1b{NbqNJRLlZM^Wnf#&BIyX;!@A07;Pk_#x9wep~ ztPz+}i7XPv3cVNh2@@&5l>qy%V<{5DZuX|ySFIJjPR09V|A8m}KB)at(vDn&Vy>*d zuC`wh%T3QLmDc%iX|bvf98OQCQo#>P*9On==RcP}O3$n4sdsfpc8RN~ocY*i>B{ha zq0?7itI!|1iyk%R&=#Nt1QhUGws}gm+6q1}Pg*+>-?Hi3_6d8HuSJYcZf!RxN)IIr zTZ+&*Xz0Gbm%CZW=c}Y*e->-H>?)y`s*jXtuRJI5&r(h3)^V^c%zgh7FG@IU(ECcd zV-a2J50a#k7P1D}K~380iE(gvXo;-7r;8ZA7bdHzo+3uYCZL^w&=o)_mi)P8oPE>m z@rF}Ih+FVJFxORoHT&t(xjoH*^Q)NW2y*yScqZ3Dt}SD6f+(JB7dtJ?a3f&p{9U7) z*@D!jSx<6A3%Yc|FMm55&tF=@9Q2+MOyXl>$#Zl*nVB%MN9&kh)NiSqMaNLZhU`aJWS$#_g{~S&_u+a zo#-g+fING|wR{?4%AbMH(39e2M8AAn|D_2Xy~OtxAt5%pg>mlJd*ds90qs)A7(2~U zYfDS6Ut(W;*AZB9*&`kiaQx(Id&mAvD_0yvLWN)(N#k-hxv|^vA7Y{p?6ryV!nVqR z>?n-Xx(C`B@x<4gO@fR{lYiI zGCD3piDccbVmIh1oJCr&AV;I>h+Y>jm14{_WnsK1GM{0DT0$kBDU3G`Ty@Bg%Pofn zgQ?<`m#RD7vt&NzM)UgSCj8Er*he}T3tE@li9-KO>0c@ze~FfjmI^#IOywNuJ&Zj= zxf_^<*X(`vYgr|o$LS?5&bS`P!EfaG*LEqoL83y1vlOslhf(%>fX7JuX?K$n!?7Bx zz2ZS|tW>Di$<>ipV}v!|4g-d+g*c;l5gTUq+}fiz=dLkuLY%)?n3LWSsO)3{cf(-> zGmYg$m$k@RexcKvgd8vOLqRDGQOgg=Agto?bJ!^eiF2y3Q;RNug_(~M63E@O)XSBI z60`eJ6e2Ltd`Yz`9<|?K`kKOlHp#wm;W2d-TgbrJ_hekE3GUY~d*bMkS9{!9%WUhJ zz{PpMOvg}5XxQIrSP?^Dq2 ziQrKb6}Nuez8d?NV6(J4PEI(~gxnofO&HbGMhA7YL=X;213=Gj`Sb=Q?AI)17`R`| zRGVPK$c5%&Pp8e{4|yfP&^=mo80qXCoPJM&lK2c8F`T4D#UBqf{zbv}boZUIoM|p= z3r%#ABb`V0Gc2sN0lKUnAlKkQY?ixNwg4X*0H~r>0HP;|x~puK;jR`YH0in#44!sP z@n|Gaz1Ltp#tK1t6sWBFp$tzx43W5Pl$)y0@8l^6%8R;zRC(Id_3e){pM*nsH)akK zP}k85$|wb_JpmFpVxmtq*F`L#Mp3N~vC=pII9)Ob#0#9Y|G~}LP5(D;mX^$NZ|Onn zb)}`ZAw~c+1K$;|-f6|PPDskzYI8izmvm$#2#Ql^(AF}FYqe%(8gdX{)8>=A05`sD z?0_Yq;+I%Uk}K8w?0ZpN7i$8ii-9YPTK#vJFj+DY zm=glQK3ph2VIBA}6)d$+{lWjr9&vQxu_f;?w^+CvGb*w9IyYBNUr*0v5cOs4+%Y(9 z!GM;vvh}swbz?L58yPS9cSVAX$G|CzEnNH!pm5#@REjJEX%r|`nW%cWM6Y{p|NLaK zTf1`N_1s~%obQ7Llcy>N#Gy1m^Q(I&jK9&>3cRQ#0r8+d0OHc1>X{PYMtzR6Mt-@8 zcGSw_DJK{cOi*=Q|3zk~)oDxKi99BN0LInJnjn$}Qg4mW%3xHD+6kXEp)Hc4D6I z$S(e6ABS0mZ{k;d99t1gi)6)*rKj_l=$HJ*aO;nN;vZG1AA9o)*$sW*v3DOm?WsGP zWgw84K@w}dF0^uFS??658v{8DG683>&D=n6dPu*QE0i9~&XIwJfTPQ>;>3R3)u5t;BBTm}u0Ab7Tr7G( zO(d`=oPte*`bD4`T)EeArQCbl5tK#ILsD<~9<-m1_B)GNFD*6ZnlIH_1diO*hH$Kh zgrLRm(v)L|X#wuUN-L5qK}6i=o7CR%NQU5-WlM>JKBzT;n=c|`B=I8HER|}Q0^i5I zBA7NYO@|tqP2gAbW+nL(&PihCZnm-YEd~g}AvvPyo_qt8@0Qqfj)mKPlouylzno*u z3|5@*y=Ze`;Ig8&Zr;a(+}ZZEx4XmP8jOK?7YqI>O9f2Wd&Z4Vh5`V^43yHhBl_TA zxvqEFXP1a~^9aapY|sNdb>cJAfN+2Sl%}dgMVW|&G@p(LRC-(-yh2)ASK?mxP_n~v0$>%O$JWwYr1Jgw*{(YI@663E!Hwufwe<9f)U)T!JnHfE)|SPq**6v zKlQ(65}gwdZRGf4;}R8}(70_YY=v5dOSE`xpNWljK|f;hTMDFN6ix9}?d0i@p!#k$ zc_>`Ep1qY_8L08wo;i+93J|c9ljAxhdlklID;%-IAv1!*Lk8x2OXlBPEJc=1*Wn`CxwFygp(+3Ph5 z5vb~TRz?(%(l`wMpe9MD=dx=f2IaT2lt@nv8z)td6*!3?tN`fQ55n08W?Z_Kb0sFZ zFA758LV4br!Y0}Mq?kM0e&Bd;qc&E&v4JkA9C+E*eBhy~8U>+G-9qA$jZ;O3atVIg z61=mNyVg|Q;!FM%Ft1q1TJ}h>O^2U|Am4uRx9*|4B{4*nneS^Z5vf(MxJgjaJWO}t zo=UaN_4z^Pfu!o5fV{p94wr=SPOgpsEm|rQ#(fBi#cycx_%EU2&wE2C)cMtg)3B!? zQgM{&KX%H`Zj(veqcDTg_*Dik%rpTbE7pXFWlcksHz=2bYQrKgD_M}cRN_^5xJ(&g zR&w_ZhdOE`@-vQm|?zApQzGd(=IFU8a!AR!QKnb#i+d}!bGI|@R<<0(Vgaz z1~-%FKL{EBa-c>2+}*pjnqz~{Rj;^J#*1Aad8kCHmY>~*G9|xm8(_U|W8-%jMNVYC z%1zX22B-A-z?B4cSr=uIDF_9w{7}xP0TUrOHW^&Hp!MEg{Z$X@=`vZ5%2@*!m;Uq=Ao{4dXyI)*1~J~S!^zeXQ)yMAKN{tAhSm2_bIL%dW- z(BA9GnBN(L;vc>h$=mX6)l+X$(2Ym_9Y5c?KT*!s(xAEGR9ZT|IvBw5y{WhD>sxyn`Wk`$wl;tf9@gSwttY+;*FVq%~FLJZ;|1)?T`{EZc^@yKv-S`jK zxe=_YgOX}{ORmV4n7xyeqxi_{@n+(^BboQpOdef(GZ!FQ<%e~TlJ_Z*aEqNl9~syM z2*q0jpHv@xcL{Psf0!vwvaALc*wSQv=g8=})or8LRb51D;fS}q`PI#M>jYu8_1(Za zk^%$NT^t#G|LA19E{ISvI5)=)_+x5EOM73OjwG`m$ zgH%WqLHQ*l`4t=on^Cz3tm202df|j8-s7_05wk*?&*YJa^V;2>bpBLA(#FY=5k-j& zK{tQxjD#mt`Kf~n=@W~P>AiUmJ+*V`wtM0@hejaEH?lYm%l1Rzl_-rkiAM52WCB4+ zs@lSp*M{5w+UGMBbI_a}lPY zq{|M~v>oBxTp?nk__|qU>7+z#tdY*YkH1&%gT7OdQ{m9o{cm+_GR35OJQvW#`^`R? zu_gZoBxHQ?uQ~K!si(MDQ~}>L4|4~AC{G1>VboqG#y`F#0M;onDyUj8OC57k=pU@J z+G@fAOHBYiDU}Cenf8rZN4EknRXLk^g@9eLOkocpStp7<`|VmSSs=me^x~Z0OaEMhyVUuk z{R*rTxwB-m=0{*c^qs6_?Ras3P-MCO@H%GMos|f6 z81RfkjKM0WY|&)a7xhkOU+KctUbjc?ogY@f$i|q#}=uCElB{0 zcLC7je@6iXW*0E}o}W2tA3||PQ1y^pDjJCDTP-jIAs?QIznLdg`NMS1fig+g#R1J# zzip;=-8ly&h;&Ru2draVJHE-PNSCm>uu$H;I(;J#)6Hz!wYBB8i zl5I%$Wy92N(@1s^6n@f!MNlX6jP;6sf2488RZ%vwjN~KrOalu`W&mi9x{!629BDaHf-c;ORZ! z08axp=kT(WatZRUhZs@3znPLXOf@MFFz=tXoL*x4cLF)Y-p+s{zQ^c7IMHT%Ka&R( zewy=7>e731&>#fQLI&gax=A7;Eee?}>xo#3rL)0|jsT^cGe{fV$YmOW&Ac_YkN0po ziIW-0zt0DO8g&X`$xVXO_34w6O6}f#4OzC?%cybV5IlNy z%i^XbVGh`KZI^R4H|pYuq(MGOO--$Y%}qw|+2;KgBI9#_A{)X?z3n);u=iVOqC^TF8FlnmwN3<0x4q; zX|qO{Af+U2T#US&8}5gD&>}-j9vWdEW;dV^yp>_vRrq+wK^B4Gd9Y9I3a_T~Px91# zG8oiJrKOb~i?ZJk3}fbUjdMibXz_W_l%#4T5|H|zVE+<6nPE#B6!%8dWb8J*f5P+X zajgAPF%SUltK!p~sAswTNm13kD^{=7d#ftcR^doCrs`$?R{7*6w%ud-f(c!_&Pt9k zWI+F}<_K4$!g3y1D!c$HKIW!1P?XY@4Ztm_9M< zNj+1J7ub+1O=!?rg#xxHTv&Z{F*ynLnR+6TmoGn3K*UgUF((+(oz|aZ-k%xF{1uaX z6tw-i3G1H!q@|#s0CWdaNA1^2CdRM=ERm30Hu6W`-lZOL6S)17i?bX(9RuuQOKQ2b zbtwz`nf&zo2(|f5Ubf52<6WM2y8j+QD7zS>HiOj%MT3}~2Mhw44ZyJQM8B#KEYliM zS{tGS_xMEO>kEOC+~NwfLo(~^X6m0qFji|aNMU7W8m~?CD?c;umKB?6 zi1kF@AAY|+*?Mt({0l=asa$Q>zN=TL$;cyZ=mYb?m3U9PhuZ=hhW1It)HaBQ zSE`a*v4OnC#~^5dcpQZd(-W#8B^Q3@gwp-EyxOc>`{h68 zgjHtDpH%&k5OHOQ@oM_T>W|6oZo}G?jnLlkN`otVSDjN@ud1X7=C%PtVigtYb_zb_ zcsj))L5-ji?y0~`f}t;W~vB<9E}qv}N3A%lx4vygwM|TR#-`7BqG~IT=Uhz1ojsml>C+oIp{+0Miof)uwN~l;tCE zM=A*zX=h5>#fOO;9c;`ANzy%yu)vFUQnyGt+zE-)3l2_T2f(OwKGZRtJEQZqzYIOR z#=+*HVr@7Mh%kE`SWo}?{_q|PV!QYo#Pc(a>#UN_Wy7h%=a}^dL`CioT@1pr6DIL$37lka`tmAWiNy9Ug$@3-}7DIPnB+S z%=vS>=FkO3?wRjed?_g0#iU8zDu#Xpqxi(%*cQPp2{AWj=#9p>?^ed3J z%2NG93ACx4#1(fy9C=MY0l+7}oDvon|GapdPfN(A6A?$p_WteoW#*>1VDv`dzCmUG z6=zD~Nr{?eM-a6HM67%6MgGf&COVZR)WPSN3^VS`6ym*0Bfyh#1#NY8i%st+E!(%# ztu$G7edGF|8{v_trgAl1RT^?h8_dB0Wx85bQCp3bUeZ$gl(pAO8+?4#M)AbVe%!a= zIh;Lm4JbT&q}jBE&3u?Wba9J|PpF+#2f`z98P4yMWmJAHn& zdb4x7-K}W7pk$b^DtP0c)%1_YElYE|A7A(@j8*h-* z5>0CuHJ(er9?8P~VoD%<9Qt$KHIpdB5-2L!F@gKFi1ud}$%Is2-|tuC;yX>Omh&*> z;xEb0CTANm4XWX)PR7aRW|~nAr=ubiq&uUIZwh2vv66J=7I%!E?vo@vLCaCjc0fL%sdo}sJP0i=x`vf;|4k$)XSd_u-$Kg%8VQvsM1@*9?Qq z(9CNM(fCJ}&fb7IVM*EuI}%vg+}bk8yyUQwD0AMsHlJLTxQ}km$8PF&}j?2-HW2Bi9A&K^h>gN3dh5;8}M=D)YlV%GFnLkrfjpW zYdDw={> zk-Xaf3G@ z;SvN1Ay0bU^z`(8z3wl<-~6FB7wm5NS?Aa=+4&o}z*7Aovz7~)9&w5)PnJGp(gegZ zF1dV9A-+Ts$#vix5@n|C((kiceWK#Nmml69Pj{^?nG~Tk4%=4}#v>_w>m$o8>{Q<6 zGiRUut`S+%d==yfzvW+&ZF6Qg4oLQQ-u&n|GW-2{b3px3BX1twt2Kp!HI(-$U!+3N ztNoN733Rh!Ks%WS52`wD?k>-oca)~4gcgOovMx@Kli`lj=SowD|0WA`&f6}@Gr&X7 zehzqy_R|VV!Hi-_{;SkZhODOR<<^`w>d3%y9Fmrt3{qyk_gf?YdO{L-`Jchcywif(h z#w^TPA&P9-^K{r-yxKXGFv9@802}$%R%tha{XQX_ttM7>+oypn11Tyh>0`l}za_kO z_PEXK8pKu=i?j;Y{@H(NoR7ks{rI+~hx*`XwR@(;t@^&Tz1==}0vX`#K~ecjutwa` zj?H=ekI<5 zg$ZBRc^*#A2~`q<>!%Y37O8uec}Y6vgLf9Sh*pn_wS#7xzSfJjM;;g6%`8@^Gv54V zWB_y3mHi>u_D_n50a!5JxUQIj9k!gx3jW*5z1(2)2?c{m`^G*Ee=n?&4C#TY2JjD% z5VQ(a#nG8d0Z@;8&~|+==3bV+c#B<64dsDFQF!celxo();P9;o@8_oNWEA|4PaGT^ zv^j;B>TM{mN~+@IO<{xdq9Zd2jx}+v^KMYile3v?@2hN_=8hdjfI?-xg)` zl4+F6UXHM5`~({#ngN7>eVHznvW?~e-xtnfij>yg-sHZY*qc9}d;qtanV|oNZ+m#5 z85*6g&+Yj%j|bg%`ek4z2Tz$U3wCJ2_gACUzlI#2S$0F&I-G~j9$CWw&o65H2{6E~ zvbov4J!WHLW8hcn2pV>z`G0>wY$CcHP`>>CephRmNy2#lqgev7^Z)!-Kd5;vp;hqE zESpb54-Vc(;;<0jHpsuVO;aDMp$PRJR+Xw z^>$Z_eM)I0$V`WB-mZGC!+F6AQ1gaw7Wt=O^L8?vQ{B#5=oj!sw0S#*1qv4mL1EUw z{RTVcdWQ+gRLO#|Py5ERZau@JqYnrGh*%*0d>wE&Kp^>M|2_hAK1euBmvGrIfF7nd znkkfRR%QwB?|(u|OZx-Z(;^}x^#SC2{J)MuVIb)1NIk;1=IegLHCTmByJ~hSCaXuJ z8W;QT^LpQdw-+a zm=F+|W-4#{XAYH-(Kj|m1v^KmuOe)~XKyN3ORvWV$2RzSaNj~jz}UouLs%F#Z_`fZ zD{l&i!OM5li?Y;8iUQEte_nH;_$pDG6D^^&3PEWM^RA zwmu6PN0+>q^LB>n)|>fpTye75<8#ARry=t#Zk&MA!w-tRyMvJ+czAe}7aQ5xlu#&? znZH8k&*tVa=w5u2iK_MfbvyzByEZ1^#zb&272(i1`H_zVm46wQHjY|{IQUL3VEy~> z_ki=ljzwzGvpNJjI3slbeGIOiq(S=)l@Hg2;o-Vq{^z=!|7U-L!q-&^s1JSs@hz#a zCog`r^dO{=w?YRx(c?6&t)}?0F=0PBBcm6zOyQH5C~!-FfNhRmutN-@7OKv=!@NXL ztN3dDZ?%7sC#~VbrpWVlE{aiPJi9KtMgrF7Z-*yQ=k16OqMGsk`=A7cvAUfXJ}1sM zZsQMsS27K9uHFmaeMg_lv*?KTaQ|I&ntnfhE{_#wTx~K+4yb+su{X7+TG4|i;QBf5 z&jI#$U2U`a5LM5tZ3%$hCZf;VZC~jL909Z;f85G|K`3mUMK**Z5{2m(nM2|5_Bq`(J1OKbKy*%y}VVxol#;Apu-^3QIT=IQwk> z{U7jo^#rV$2agwOGNQ}Y&?1)>@%D>(qwAfe~tS7>ThmIR1hSkAL@G&H!Kzk7NO z^t0f809pMvTkH(_r9S8#cYi^@@Jt%8zczOyNuFac>3+94Z^yY8yx$-INQ7RQ&4c%OF+rz%`rl`roFZ8N;qCVq9Q}-cF>pyYt2>L5(v-e_8wVg+54VyB@hmU` z&DYrtveZMK+u;8kw%|(mJGJEuw!o-kKIwtp3+_UkU}QR~jPfd7YtwLJO?G9RwPo5b zz%8qx`0w_2e)#*T^8&*(7YL==ZMT8e|8PMrdT+r6K_Gs4Rg&?*Hk_^bwZU0Pv==J- z41SqjAUWbzS63&eq;z(4ybERelIOO#0CWF4^%FF4*#htpAI2RI$DjZ6!<7Uq;R_TO zk1|f0o&3lgd=^?Af7-yE7g~=R)o%ou;SS29S9+AN{~81T``;QJRm{IT{o4qV3 z@c$ex&5-`f=KjCNR4B&(?Z-ec{?Ac&;?d_2!~Yp?AKojOumdRE{`WVkfe^0!@83b3 zkMaY|@&DJmfG=2l|G#`FWK2CYxS`HG`m>7vkq4j$cE#2qc(I@pmKUov1mN0to(cjt zSCv;jR$XXy?je1JWhxw+bjM$rRi zGV=8JwtF)ig~b}6W)1Wikd#r=27n3iPJe9Skhd1UR~`!Uut<4*rP*3*iVXgP&E@zF1P;WIj8~o>5|5 zZ8#gGqEdG0!S=CwuOZPvp@eLDf=Edd*ijI?u1B3{+cfjb^au9;Ijl`^WP{mJKdA@Fy7Ym?VVh6t8cdH=0g~8RHue&w0B`x@~9bQ|R zim0(7NzDgaaJs9bMsEnB!s}$(U+mLKWy`yS&J{9J3&0DgYf>o^43P}XSu)WJ&`8i8^r zsKTht^pgia^7c&g6s%>rZG-&-KYK}Fk zm19W2vVqdgesg%`>HRe|adeXiG~~@MZ(iJAZ*6S>anN1M_VzZ4xB?*%T@nHEbXnYh z(amAazIl=+rke+Z@Xwz=H;4A~h!ApJ?lf(%74ufELaY{^GGIi=C8H^?;?&6=@$hm0 z0qI5LSWP_qxUs7-CojsZQ8w@ttsz+5kj>@=AQS`ZmYM3|UGHeo`p#V3C`0G><@}x{D)I6z#P@U8XvJJCa{^^b|P3otF>IWa@NA+{Pk<0m!Y%lSYUk|A zyzBr~Jl{;)rrIvP8sQGdcl0jFj&as1c?KslVycT?bh(!Z< z!aoDw{RYxjYxtl(7y?OsGTjGY+n00tgP>YCDhe4)Md8ydh_K$@W(8y}0nZB_Frz2! zgER>$D$j0hPo7CmJL#spMgcpB;K0qP+&#fAQR0^=!B!mkHQ6^c_KoT}^2`l4DU${} zH78esz^AM=t?ig$okuQkfIgehcm7BM#h+UpW64V_zK=RrmfoLpO+&bayHZN{2MkEiKKUl(d9|5|WYv(gM;$BOxU@ zAl)D$ol?TxMm-B}M{ z4i5d1nN=2(*gF+an6L6qq%lB{gWV9^^DLXLa!M*bC5b{`$%^~6)2D@}XvbjLkZoXQbYzLJxf znjQsoG&HAcW#oQcPe#NSY-h_X` zWQ~T17O3(O5g`S0usY%I9A2iCE|ZrMC#CqP3ogB?M(yLU7ojx2tJS~DotSc`3Mc?J zh4ah&UXs&ko0_Y4uGWpSu%eS5>FuvyTk+z!R2=GfrnuNap9J3FBy$=%k-1oj0j3J- z*tK(5&-!Zr3k(qLRqxXNOQYsHvRTj2EOT~hoaG0v2oBuBh1a>OJjA8C@iUD#uk%&i zm-=}LZu>cV3D-yElynUPvCXpoSEc4!#8g^%|9{qDYLy6WvDL_tfW7CUYi}ORF5pR? zjLP|(mRT%(7Y5A{#cM*kuVR3T@ZC%D=6r4Xvn8sq^YkeA9r!YkYwX}eRchLh9CQ~V`r;?i&GpD_%fgT$m-@RFw4(xoa5_XsB+hreI1pFe){y+uV+(_0ptk8P#&l2Dry_Bp3okDFHgx0|`4Xz(V-{RIlVxxB*$Wey*pqrhm-Vn0x+ULmz zD?(*AHKoEe|EuMw!8?Gk>+x>OVyQEW`x42fU@(}H(#!MU%fbgp+sk_PHDEM#aJ9=1 z(~b2wquD4siBN?*$4`1_W*-FCP%68if1*R#YYg^=evpDr6GG3np(oHw?x&R~6ZQ~i zVi&zwlqP)Y#vNe8SrICX`Oy`nMTY*6OuC(}&mX5FGo}-t)188!0Og##qd&^}`-9-$ zT+0y|=G|OVpX6_-f<4IMP4K4)K2T%S2OM(v|28Z7a+5_m3Z=LuKbNXBjwvepWHppq z@;_JZLurjmXDI(2AKwC~^DClJt?PF5kPj)`ftut+EHT?G&@{}DFKpc&*btK+kWGv5 zWjoaAqw47&>|ySysKFM|BLu;e%xTjH?k1zVAzLrLzi!xmsze)$giq4 z?sWv*8;uz>A$qlNuERUr_KTB(Dx@DX_;4R(EeOs3cO_lVI?2JU`DeP@t5O52aZiC8 zyr(Usqu<4+FGC1BdpHrlM;K5E{M= zdK9J&*(0Mm!zH7=klKHJq)hO2&dh(A&O9o|{}8{=kJc0sCgfzbv~)wZELx0l_P=(u zt^3qixjcj`8!7A>zoT!>u-t0pVQm;so6fUZCKY4m`e-nZL{Km5LWo4nO-ItuGZ#8e z+N1GpTsm6uwJab9fzsZP%^=iSRR~_kXn04&@0hP!l<`5~(_?H>7mw$?mjceW0ejb{ z$XAOR-B%rTk7zr+aU1kU{C~0?*xl~7`2iblK%sdP%b3db6x2|AQsf_=QF2dpn#C=J zU+uvOMY4mKK(iB0ZXOA878JBW6f{vbr@GGb@H@BLL4Wu_fGm|;%bmZjkW=k9r-pToq&Iu}Hv|CZ z1UpvcFK=sx3LKnp5VHnWv=)ga7U2C%d4jlJJ-t*o=KsJ;(~jb&W<^mng-~ThkLf!l zbRZZpgNgAeT*D(|MMV&}PRGwBls?ooUKG-OV}_mnXHL*vLdZ^dPMA7amhwMY{^6do`q;&D5P{a}-;z2i?K?IPr?Ch_$sb&$NEyPA35H~RY)w?+z-fhP;z~A-3uqdj? zq7M@?j6UcFsdf+vIu-#RRa&~5v2@M)===-erFgu{oX=GAVz~dKI6w{$JNW?S9{`4L zC|ybjhf{!J5g(+6fIQT>dJu7CIt5x<(7=Kpz?*k%ZH@b@5Yfo7znncKNOA%lbW;T? z1boqU69@*JarTNbvH!2VkP{<`{jQvI|j5P z=dXj#F|WV6U1I=CnP`hYzYN+QAx~B)1Q6c$Z*TV3Hc~CXyAt@I{r1oP8hQIUI%IiR zVn1xtH@9oL${LfmmG~pG9w4?K{YqLVosj{u4ZrxDEmC1m#;+&gA~be^Os8dlo~;*gMTqZD$yv#i)wgzCQ6Zq3qxcixdJ@R ziYub+HT}qzns!a#Cr7G>8BT$BrOba@&)4noetP65$x-s1-aOPaH26`{C4EtBD?{}zqOog!_k>D$ z0Coe&ZosBoPtQW|FUSPIilyQ{9iUyLh=78y(T5Lr8@T>r7&iCcv-qYbfPgnjobXre znmBWlo;08weMRMa_gB+ijMLG@pv`@dTH91{#dxP2L}NZpFTAA!&sI+lc71-xY9i|< zZB_l(4u-)5=&XSQ%6ql14cqdJ+WQqLq~Kb>g&+i%?D~K7D{jqBc+$)`r?g6d_~E|` zr35FMC@X?JSXyizgQ2!c4b}*wS0*Z=S3Xg!4mZ12)4L~0l2{+Ld8rfVj`O|U<>8Op zK}lYpa}@uhYRy&apeq6DU8(4xo1ao^m3y~brZ2Y&0-FQ9kGv26Bro*_HSV=9V@h2@ zKQ(jjG`bL;-OQP{kh=BwEnS%}J1$?$Y#yeP|6z%x5slCcIM$gi-~XEY+yLb{WD(t8 z_|ym%%oVH|bc)EeHXuQly6D%u-YkM|7IRg=^HwiFG*0vyBnpjRoRX~1w86*KnLahq z0OkJsgK7i<WYd+x)w1rb9Y|wkjEGsRBZ9 zy54N+hNc%dQyqkJDrjG?hg56>(C@MVlOf8Jc)%s+Tztv+$X%K z#xRHzh15e!OWQsuW*0!N&*IrEIgT#2uI#H;|j LI&>t$@}MQ@6` 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 B9I*fZ literal 154203 zcmY&<1zc2J_w~??NH<8QfOL1afOK~^(j|>_cL@kecb70CEh^n0UD8tD;d$eG|G@kh z?p$u1v(MgZt-Wrvnu;t2DlsYq0>O}%lX?w-z^_9fu#3ouV2c7BMG*vo!e}cgsb*_# z4uN>jrzKgdrAFdMOk4#lpgCrg4t&qiWJHtG^-VL9Mo3@QO{X%G{DLfn``k8$QXB?O zrc~~8l-Uag1{3iHIV?3Z_Lz@_ixh2~u19%yU(fcl-Y)ZRkCH-S2q6$A#KdH#)!Vk& z21$v5*%OSU&QXu*garCKYKkEU48*$->5*K)Ly7JgOrw?qZ=f*2 zL}{rnA!6fjkQ54RV#MG@Scui4u?P%g^ka`d3?%aoB8mjTMG`9>4A@X#xemI5g?x0m z2@RXgG-wXe`%FonOffKi?p|lz!OvG4aBW+MGR(0;dRO!9F_@B08v`HL`@%4l-Plcq*2s6aj|}UlhiA zm^W3R90PX9mlqXs_{j+eG75=q9}sQD^b!ja(Y|tT^1OO4Btw_Pzp1*(8B@fS8qHKl z{1N7xc-u!L;$SDKjY)K_XRK0JC0aJrzQl(THAQcy)HS2JWe7NWKN6y844t!M{tosr zH`QSof;O8E>d^j*YBKMdgeW8LQn*5Q5Hko5M3s**g z7B7)WzUsrshv(nXZL?Tp-q7nOcMVT%vTnX|!)eR#PY_ZzDvQ$KV*Hf~QJ}IUD2@59 z(k7l&*je(rf=Lstl8rm0Jw;DiSh7nx??Yg*{G^8sW}}N9zN6?N%^}kv$01ps%1q(H z)W8nx-#}lqdx3lY`x0bHDdR87G zEaU1#6dC1QOU*u9$~P&-$+60h$S=r4

    nt$|WcSrJIiM4bu#hrtYTu(8Z?wOu9%L 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 diff --git a/docs/graphs/sup/dgemm_ccc_kbl_nt1.pdf b/docs/graphs/sup/dgemm_ccc_kbl_nt1.pdf index 9b41d6c73034764be83c4a2625d4b2a5c2f2bae8..9ff9de2023b519fe700d62ed661c4891d5c7ce62 100644 GIT binary patch literal 223817 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

    {bo*YMwH$wX>^}a}g(nEd;PJ7w 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

    Y}xg(VBdNQEZtVNiL3}w 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%0A;_CokLd( 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�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¬ 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 diff --git a/docs/graphs/sup/dgemm_ccc_kbl_nt1.png b/docs/graphs/sup/dgemm_ccc_kbl_nt1.png index 2fd772cc11354904635390435fe9bb32f53526be..4f99f8f7fca1e6048f515c01ed5219e09ed57a01 100644 GIT binary patch literal 202376 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℘&BYD7FnzrgnuX6?Ss#h}lr4%1ekkjU$-u30 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 literal 178844 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

    1qjl6?08Az98~+24zX_uzxQ@g_Uoe!&}__ker_ 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 T1tcT{Bn0uFK2_0E#sB{RHcykd literal 166784 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

    d#?Cqg5ITKyB7o`xB}X#RIV#5qgj$p$X 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 Wg#6R9f?{GKLIOCftjgLdIR6hYi83ny diff --git a/docs/graphs/sup/dgemm_rrr_epyc_nt1.png b/docs/graphs/sup/dgemm_rrr_epyc_nt1.png index a680f3a941ce4dbe46f0215cb4637422683d3ddb..306bd40b0f7fbc3c7dcca8244346298efa43634e 100644 GIT binary patch literal 173798 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 p8(d&{3&2@lan>G=06j9O>B`d8~rkU}0) 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

    nk1;(<(rxVR#>kUkZks4p2Jd7P@< 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ŨlL4C;w2+w)wBf>zw5LptN?9Hh8y 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 z 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 W=pXQxXK@Yy$w-plzOAXRMgBk5k$cAg literal 188174 zcmX_GWmFW-*H(T4(%mUYFI}>vk^<7Tfb=d6l2XzkEwyw@FSSccH@gc+mxOdlx5VrJ z%lqxl+%q%x-t)|zbLM&2v=o$h1^Gm9*($4G)wqJp0?e*f4!BZMxcpk~t~OrQV0UKD zx1TJn?ZC`Rnp(^TV0RCDR~Kd>K4CrqUR{m1TDmHldO+rX+bFnNdpUz$JeA!oKiSz^ zdk86T;quG7gDpM(El{xZ1T%9g0EGkuB?QC-gat)K#03O+1w=Un1UR^GWn^%{E;j!= zS?K>GVCGi`yV!c#F$@2j(qZOTvUl?Q7Y)CX)4#nGz}BudVCH}8JUss$;f(8(gYNiH z%P;A%EZ&vBE*pnEt|9*8R*b-cPJncCfaqI@r5*8-kd<^O?0sk8EKBU6@r=pD48@p1 zg4vNo_KzP6ud@M8gglmCZ&W498upDRToYXs zJ>4xm-7c*bEe6FW2mPhvv1*o(4SLF#ecEb%ddN4OGI!&@zfY+lJO09CfB(mIaCJYv ztM1eNR@dW|a$bl_>)-NY^QSAON7le6*$1f16Jg?Gm$u#!`rt8tb!_9jE5IZ^=;?q7 zbi82QXnJM$lwxik;T`z9^n74WR_Cd0ky`&@Zf;F=XRb2%;lVcF{L@}d@WY0(qs3?q ztL1}0P#T%6)81o6%}>Ai@xTUJ1lc?3!>HPr`^2a1{{OlrCuD*i`O9Ymewsf8>DP+> zVl&6yPnWTkMjF~1a#eqX?LA%W*p@y``EG3gFQ;>+$0$$wr~Pv#*`UYIT@MGciC8y7 z`Ke0^UogV5?F@;JjBmDIU7;oimlq+eTG+-=l;s!`jzd$TD)@sLv1ev)y3G_NSx;69GJ zxcqi89-w-Bd2l3=Kjd^6v?kar1%YW9x#`SNIM5wb1U_yu?s0DfVSaSCis_n|V|efu zQ$LkhHNyE@#Z5gD1m}8OeawEk4SHC8e5jHM9Jp7eU6blUrujMg^dzGUd5k6ojF9farZ8}cUu1GJ6Udg=z$6Xe>B|d=?$52`*rQg*e^#W#oGgw z>pEgft+f%%&&F(j))kHXHSr%!{oc2Z(iKhdnR;0tdqU6jEq8LA%_0lE5LFW|j7GYE z>Wtaglgpha8!PA0errrrN50}ez)wJ-njeG#^>eqFv44<5_KLjc@Y4{BTBCh8#*NCj zZJzc@@&q=|{bgOv;@$hUQ+`hz?oe;^PK5Gk)udr%%l@{Hg5Q^FK7oH z@;0z3Ydio1a%`^=HBJAt>}9Pmdf<}5-BPnHgw#>)ICFZ+Ic@z7Z13NZ(n@m|3*0M) ztr?yc&3%c7S2gQR3Yr%N{wdk&ejQn_fAWlHpPsF{h#Olrtl0C4AGK&GZE?Aw+gFyb zw0iBZ^=pD~VO!C3R%f(h>l6#qgI)RkfJL8mm;0#1M{Bjbn^AVNUbEgeIUnNkiyC*d zz?cUgCzQ|MvwhLWPlDFoe%CqrZ&_@y-a^DJuD}q~6Za@(oS)XxRU^5iB`r|u4?F>l znm{xptYKCdec>yKVsyA{4Dn02E1UF68#pLCLJ~qvLK36ejf5M>Y1dFdbxhQbgpvO( z@(@vsjw#?#&9`neZyCtEyPs5j0t&t}9-x{&O`@0B$uiI$diGYh@a4uv_~l}PTbEzJ z4Al91k=JjWZ}w`r9h>*`y8pN}{e`w?Y`+RE2EO6VZh= zSSv>{9$p`&BJ+l=()3Z#-9&S7nUn-TQ_vou@>u#DbG(K0xKbF&Jq}$QQx-L5_OOBHYM_Hf#d-D@ zwlyxEm&Uj+rp9LC{xzq|%qXp?Lc6)ek4!=|M9{gXLek?bFq;;7{_uL>tlJ~;mygaX z{pYoaWo5=Rh_yD`KkjBJUiiMG+Gp z84Apf>EpqqqCRACs`?WQ`6y@4r$!5A)dgE$IU0l?&qLJPr_<{H8$EyD@?bB_E)x}* z-itI;CRvoN<|0Gk%OrSSy3P0ol%Pu0s|O@H>m&rULrI2D=V0X@#Vm_LGy3ZL7arc= zEW|}u@deP|W;DL3&#}oCoCr>9{xNAMN1MC=Q75EqSdD1)C+~TO6tg~yWH1R~t!AO6 zcQh?}s*g+44izn543Ab`HhMm83c)-b&vMotG7QIDhuIqtADjP0lov18xn{x2-lN zw435cD4lvSRjL-4o$JM@uaQxdJ`>GhiGze)aw5$aU>dm@f{TKmVGEPvx`v^Gp4B5d z5DLmmu*berV9!YvYO_DU+l|7Z&#KS5bNjWHGB05U@RnY96_b@L%x@e@b2s*ypu%gN449!eMHw}C~(?`$t(|tZP*}s>7 zW`phA<3qjd#df_cnVlrhgWcRWw$D*5^(*|6DUrlYFFg8slAB=aHODzlHPsaKQy7><3f17_@7yjxi#htprbdy)K zCP|9aBf9EMP;KkkX5@cM8*U_GlGjaqB}qaAY}worW(U!lU*_v?LIvFbOQd+fQuzjX zcu`Zl8laxWBjJ+C8|X!s4s5TR7+GqWChU>fSsY}$yA9{fIMxmwJ#FGWjqkzoTJl~%L+9%BJeT?tWE9=l(koz z*h(7~1>2S9G_A&4i@Uq+&mDV?*j=YcQ)qg6CCVtAT=;B_DFMPwMExo|E-UINg>0rD z4;%2J&JSw07In=PD0she;%HCqwtGnKhZQJWDck(P0My>esRj&kpVAe2Li5u~W_x5p z3qjh`>CPh`ocbuYT;>2_w}?1YN|o3(w#VqeN~zO^P9(rv>{^Vk@kPpCAwJ9g!qYlA zLdho`46VJ0nCEaES1 zwi)^~Lw?q2>L#p@w^NgOh~@1FGNVV@pKmcFo2* z)N3K5-{^)dfWX7)6Cp@x8>bIv$r4>PWzqk&1)3J^O3&_I79ot{P7hH`w0m#y!pwu^ z9mqU#d*pLOtKOg!y0GC7I^{24LWYF;ur;($!iSuy0g0ts9!Pi=sVI=hqArV?d>t%d zzc;FHx#o*zqZW0%{VR`+ftR0`fAFfDi+Gw!PEiu^rEaA?A;Cw=Ouzssf=(;wb!q3v z$bMug#}RWt3b=EiKD`i~*c|X_;}ALjXRXO-Yfgo|367!j`1}Gfu2REVjzfn-*fj8w zL5@MOA$#c-qdbE`JINDPCK0SE7U!)jIu%>MeqmZl0`4AVomOxeDVupqAocFUuLgFL zear%@V1(Onn@m!EvU(B8xVX#*Y{Qt&Mb%v{8FIAMJY|lnAF@MIxpxzXF)vw#euMQ+ z!5dk!K4_X|nN}$mFRC zRZtRl`oLD!fLZ5=C_PytCy4U>-S8zNR9C~fjtpN|!UY-Y0*i>GBhMkk2=hz71&n`K zAisfXE&FC}lu9N{M>0WnaO`cui&VjeYOD{NR5E)BL;T>)3oaV~gjw6=Old z)sSOpbODDPSgpIgf5?kpy$#2~&PP*g{JAWxgQ3|=FR3WGC5ZUA)=;#r1m)W^VlOG) z&qm*iHKi1`rUZf~4iMSWiUh2yy3-yfgOM~gaGfY^kTR@)V2oKxiNP@Gf+8#?p%~6$ zL|f~N^;?3w7AR0mwGq$wJ$c3&_lI*J@i*j0md+?g+A<8Cq1|qVLv?hRUP6L~yhoZ- z0y4I))DokK4)~3Bu`f)|3~Cpy;W(T!E%^PajsLZ1LlH;CY1kEK+Gp4=*-XqomJZa+ zv84&B7Ax7p9cy|IIxou3AP;5-scX|dX?+!U`hGdIW~x5iD2pM{0Dc6TWJZ7oSLe&e zoeb_;YvJ5kjf4vLqX??rDhNZDz|glGxQ()A>cQ3D0{1(6g|ceu_tCN#UG{VQil*L& zeeJ7k2OJ~hdnz}$$Dp5|UchMm20ir6W`2Gfl5!=j<91AT*AHBtuicVrW@Uu!Cv#hP z=_Qpm(X235p9%d6YCg57D)#PIXu7`sBq|aSRpoU3AJ)LfxF}#dkoFN^-FJZ#>~%pU z&Xr;)(G9Fwf1l|bEoI3NOCnnfrBYdrySx;^1`QPe>$lbY$JOC5MMtwofL_3fit``7<)(I)FumuQ1u-n=Z<|L{tYv zy%HG5jg^bPE&Vc}z&7!6xu_G3lSnl2q9FN&wC&j(+Y|BJ_u+B2S@(1V6Pa48(Yi6< z(THssv6-R0GG5qCSpCorsWGK)T7Or_GfSqo-IUv5TVq;m8};TFa&=s)A?pXt^O~L< z(oG-~qe1J>xddTr!VawaVYVSwhdPrDov7_f~Q8Th(M&9mXf zbH_P~^t}fnzjkj|qzu)z&wRK<^-nQ&o#oQnV*L%43fjWft4r-0eB=z?A~+RYDgV`u zB$+oN(zLKYXFFS%Fk$RYSW)#cf=l{g;F0b38k}^pf4zFvOR-5Udt<({!S?Tg8Nx`UlmB;Z04R%UN=c?ub*RtF z6m6NM{u;uOgsM8ZCHQW%Q|OnxUo>GH@P5_Z6@SKWK8)F%5q-#|?MDS4z(GjmRFWlB zf>G_vt4?^7_)N-Mt3F0{@KidH;J^Nj`O_BLgLOLq&wC}EqY1~n!LuUOatlawSv^3l zKW*xp?nE=Qa8G^M7&zdE^)$i68?)VQAoP(lu0-|f{+>z6W(nK%uVxXv&eYO3H%G$^ zK8s`({;QNaQZ%RL9G&0GAq09jRG3AcP8=)$*!QZw8RMo3xhR5j4mvzP7w9NB1lb>n zWvA=U7)RX?h0G~W8{7ME2&43-krlW>T4_`%1Bq|Q1!J$NQntKW{#Yu(_KkVcd7W^Z zJuj0Q4JK2w&XUXg045UANB^;rF5_~dyly`>NDzyq&vGU|Um5bsiS3ecf1{~9+ouKhyk=fQpKb>Gv zwunE}GQm@IT4IvMbjwx^#tVmU4bwarj&O3TMc|ed8p_y(i1;OJr?njuyqprp_1s#~ zS2#J>|f!#LT>zTn+`U zB4rvCdexAs4;4wrd)~m=v-4E$9r1HgspJFgK;sPXHxKg!ism*WjQBkn3+IS@59|KdvEEy6Fi zU_r^A2sY*(Xl4gRMwT$GS{RtC_Q1xT<3d_f1`~egWSI~_d~s(F3>a}Tog1twO7m6q zqHJ$Ftcq8tLMf#D$<&u21K3h(7~;=1Io3fBXo~Skn=0F?)%Ar~T9qk$y!@@*H|6k* zGlN81-)$xEo(-p}tuM1$*UDKb;;`N{b@vZ;DZw_fQMmivV>V*pQ5 zza$xiBttIBRv1vueY~foB=)j1hycex>Ia$1oJAtggyCO)>T-4sAIkNc&h1!6Vk2N1 z(XBlJLizwT^Cy3Q^(te^xe56JrOvNlu1NOILoAjKBQbh`uSN!v#trZ<3LYb5l9hVU zA)31VGd-ez_{b6uI2k-4E(BDLYYuIG;7%7r#Prcz!0h66;iDtLW z9@q@=9!-teE3z-`sShSyKt~)X^f{`qiR3wWIAnrS(Tv&Xyqkw0TqrO3TcW3G*E**n z@r>3Whlc0Ii`)F<<%a_ZXEYJnHn0RnZ_1gnRg-p}+!}|Qnx?5-2#7fMWRU2L7VSP4 zkE2GIk)zJ+c;-BOeR0#{9dyURUSnE(sQ>zZ7yy3fe+7FXwfNLzzj`REX*I%RrwqAK zlItGAPrd1;(7f!DZE@%ps-#mOe;E8=zpBQkHd25i8){~tP+yro>Qm=C&6xtmVMoa1 zCN&!yn7p5XXEIj2$VRAd!hZub!Sc#g76#MUq2Rwa&$9pg46|zbbgASqzd@hAHDNFW zcUz?-dixq7H8PxShMU1~q(E?q#_Ix(!s2*dAuMmIY{aIL+e^h%MgaVdR8*DXSp=;A z(BKL>hC%^XuMj{TOmt-Fg$0zX_q}=d2HglC-KF6gctbJ@>&)UnxZlu=ApFv>5vF{t z%R;{Gs*uKde01bu1!T6?5ec?u(u*XbVaim64CrYCs$AJ(KrC+Rt72;}P=ml28_HtJ zrkSE849JETOIBI}r9f30IUn81hZdN3Y$fD!ODbdQXGJQSW`TSHu*1Pu=hZVe6-y?- zeL&8DwE&3O?KI;UyEGDO&nkyp`kz{e{nFAySUK@z#Df{p`}9Q?23}OLDAjXr=#2fx zR;O?JFEeIbaC#TssjZos7!W~bevt|AI2MF1Xa)W2BoxIP>iLGx5x+r<=*jOt)Jzt2 z#=&8oN-cnR;yjfM+4|rG3tGGkFpab;+IiJup&*cqk8WDvf59`N2Ze|r8`2$~O+x$q z-rvZDmV85}&aIR~Ap8BrL+I2!3qC8jn(eA`I!F%hz$qSnA+3iVP>;io7cg6F85M2a^515CrC zPY`Z8SpK6I0~L4rOeZNH-RlGlNZ+9TFaWhnXH3=brQ69Tixbi~90Ka3>GN7%4PGcv z`j;_}%Qv*DHBS1LNWw!TX0MTjSVKhc!U_FvcrLS_6f)U2^gvL@rUxzp3~v?rW4e1BTPn@h65_qI+b{KYB< zgQO%Rq}9t2-{qPhv*fP=pV-sCm!)!*bvVM!LKD*X@8i%NjyedIdTIM!pBHJuj0kVK z26|msh<(MC&LH@K{~XZ{u+H}WFjE@}a_F6?PqFeBKvj+LZt3z>QAq$$v07zYr*tiV z#+z&Kqf#Df@NKPWlW>mOfJtB;cU6B=cfve1}s>hmC!{4}Ikd7U`8psWhcDf4-G8<;IT$ zH z$VO0&Srdtr#dttRG4;=vQJ~2We<())lnq`16zknFn8h(5vE@v4@Tq3Z3pM@P+nNZi zIx5+5QOhW;x(LWm-@{L}M7fG2dEwC>%F$o`y?CJwUp6qu*gK!2TScD3Y!L!SN4Qhh zH++-;UsoB`Cw9uifoi*@wRhG%?&86skKC?O{*%UvOy~^aceeG4trcE*+C!;h>Ah0uVbgr~LYq&9oW@0>Y}Tw2cv%i36a%a!CRds&KIihcjwi4u<%meusm-%mu6nSpzv z%)E;gk%}c0J|W@N!H9PFr1%?d6jOVblj|cO8P4Z#NhuIJ&~f(c9%xpG&&git_=CCR4jf0I%~4|GKaFj3YYoI@B5VN=YXwO@b@5_^^teD>~%3U;(ZVxK4~oXOoFRSzTW8>I()uEUF@!4UW~=+ zdKMYm@9^fs^ZND}x|J*3kKJaYzn(@(_PCtd^An$`mH3(=Dx>NGdi*8GaY6@DxQU(} zknj1uP!kB8B(Q7>=ctqNvJCF18e>tms3@z}JTZ=bLjIHzz%uw|h;0$2f|c)?SI_?X zk*80P5gf&Sa%$eHxnLV3bMLtBGyyd*@9lE<`~JodeX>K>PN+=>F%ou_`aJLw?b#|I zjB4Q#HTU`<`~J`{aQe0#fS=JHI57E1sL|CLA32@WjnW5Srg`$UC6u${g7@t3v|)lEYq z;#R@%6IcY%gK8gx*rcF%9U&r8D=rT%rX<5786Ij2i>3*x!)|(6N_wj=LlXkSCw%+M zHl~8+?$X9bRO%$J>xi1iT=bglcq@1lw` zAO0-Y{CTjbNF_Eb=h0#iaDQ~mUGnKQBbJnudA#B6S}m>Q1epP$j30^7&08X)DDum0 z`Zl(DA`9s~y0%6Z()-3!pVKBXYl26lM?hXLDDD~4{Ux(N=zD$h9`mT2bA^A+uC%NQ z->thYvAQ#~OUK*nSb6F0=S;m}B$wlJmDl%wU6-p`U{O|>vKSUROmbRO+24-dAi`-QWA}%M)MYk)$gV;i;I}cU| zf<_x^Ye!uE;ekq0J;U(JKoHpTSxiFBW6TpURPQ^3uNFr4q(WJEAX1Y-XKQC{_bZQT zh%QU{pqO~6J%Rs)*`mL|~ zWyI7v2So7vVBI8k@NzBv)Nc3-zEKvF__;Sa1B>=Qv6L=Ke^B&uwP|;E#M8S9`8A)z zOD*eeE4p(#LdA`&n@vbPq5gX11S3U>yKSHrP!{xkt|iZNdi2_zgES+H^R6e`AeQk! zu?BtUkyAt7lDP(wbb&6YtsY;TA)Tcjq+q6QNljXzbCj1Vq?8aT}v7)(2 zq20Q^v@Dax?Y>3()0^)(No&znoKsim(pRJ?0ml&}u*YQEZ^CYY=DprFQZbP+L3;et zbF*zE7u{vkH{&9AFp|NKO2bf2zjXyY7nRw=QtzL6p!hSi7IptdVJ8NJI3mvC_87p^ z6Nz)q)7yzDbL-4n0;jc_HP|JVNK&L7j4oLlH+kSBwOWa(d12C#B=G(w7Rno;?_~xkhEG&swPVFvKXQ( z@rRBu23*p3%J}?}HNfz%rg)zPh)yqA4AqYw=FcSbTPc<72gQMnoR#iuN8NtnBsavZ zR#t6$AldPlrwpVQ`*O!QnCk@TYqBl*=&bZs?)UiX<%b&DF5up>k3_z)XXmvh`}h8} zmG__LWCKOEoVKU!DeAhO4$tfH|9t;(z$9z@pX1fHz=gn@lm!>tb4TezTUq1y1)M_0 zt3FrmvqW2s_DJ1lO=2|LSNtCkvDG-E%L?Q5S87v-q$UZe8B^e=r_Uho{96$XkFJ1c z)j0R&Rx)0$Uxam27(AY)-AT_{?|}DCGKRBkn;vP%dpqbyS>{P1+l4Jeqv3Z#*+rgW zzC|A6Oj#&6{XIpOkCRg7RV@lm$9NtKKit=S)PgPt0TP{in<7a{>wZUaJz$^BKQ6B} zF^yRJp9kNQ2z)Z}Bs8WdYfcH-hsy4ao}Uh+Mj5}Zo|=%Psx^Bv(oDtEE%vC*|4BY? zZ0lsWs0sW-il>$!dlDE!d#Q3DMg0)_=a{_7^7Byxp7_+nitdJ&$9Q8JUUED%Gd^+Y zG%5AyKx)XB5w$q`r&L7mS;wN+h;4ld**PxiOFHU3)oT;n!27f&C&QGy^|0?$rEXi1 z9O5afaGL|lJ1s)fxr^~1YQ8pj(_Po@#`GQ8CSvKj=#slOHGe(4tl)FLFR_#>Y$gb~ z(9!eUXfM|zDsh9-On39C;=}FJn<8YKD$0UFSQtlhh)Qq!?Mqfujbu0LcfVgTj=vI| zu511%yX=n1NOwiidkiVBR7~5lIfPIn6w`bGfqm+dwgbpwJ!T2Z{dF#@78)Qj!(H+{ zCcnDdjB1lsp(S+*gW4J6&gKDrf^P#9!EO97!6gu*y%Z=ZP83b01Ce5bkk_+sMgLYp z4!!9u-!oP;DeI;!`J?TgxGNFMCG5pGo8_zEF02tw#(gtKJ0UmwiazladU(D4{PrEP ze2w}+*sph#?5tY%#5NpoDik5?8h`t5%&Ys-bw;6Vt)D<#bC`e&ky)XeJ*0X4#s*~j zDf+OIY05EN(WIha=uw=bC?b^xFYc(uHrKF3xl-s=y$sq+(QFk}SbEisVPJ0N}$s6fR0y z)M28+*NJ32QZtdQS1J@4*>TsjWOg#OT>1qniK^L-W}hUhLk&~vHj}tda-QSuT(l}y z1qtTc4oph1Yl#$YiH~yVI$57EYy>oG^=bWie~B_!(go9Ja%|A!8j%euUb~sNETeVP zdG#$iC#!*06Ri5gJxbdnH&AY3{I%?ie8otdzbX{vu1lo9;wU61V%{9Rn%=vhR^4ge zFM3Ai>b_#RVxisV&vrI_GAOWt8znzpoT()p`6_E1sR3iQijmUMY>iIVusd(z=c%{QNE=Y{-J=g>WomVJKBrccqUfu4xT*;A6&h*j}p_ZUAZ6Y@!DTnlVoAjq+=b zcd^}R$FUqj9&g+Sw}##jS%Shfa{Amj4+TPP-GN3==4rOr^a<@I3x%=*_R_SNqIzc^ z8RIcNkijkx9mjW^#ah%Mp6OH!Fkje^cY9xxe`>bRc&$W}Ahp-RnD6~IeH?lL zc^>Qb2=(PmxV4N^qNT6P&HjKPMZQ}4-Fr%lg2{iT(|0iQkMg$y z8A{>7EY=Fjes{}{CY;CS9P5`D+C;nz0>x6fy*t6mLfHu z{r;6%n5e&5=J{0j1mFj;+FfhuFfR^T3Qu$VVmDpl&_X~lfrJYbF4!7K-~m=ogli6q zN+VzJ8F~5I)Y;&Xi4e58Ie#HJG;iVyDO#-Zc#-hfg9Sm6z9IcYhr0Xfy6w2_D^=5C zCWPx+e@pU1RVn0$?Z7T)d#Umu$KbZbaJZ$e)>n&S?F)rWu`MAMnxY*X`P`*bJJL5w zoLTvqE}#Zc9BvMjDQ5G!exx|nuReB_BSD(ip7g%kuWA~&baV$G-Y9$B?=e|ItFITx zEBx1_rd=Il4yWm=!$mSlHk(LBmgzdrtY_QXU=7iE%C`FkmsctzdW@-=&hsY;#1j3Gz;oW3x(HbN{r4(j1xk-uOcXR!^4sd-mB=r&pQ#VJV+$J{)GhGN zmohi;K3LxO7KSe3l`TMsZlzue^x`ciLtl+RnOT4koYD)hassF0oc*7VyV{M1D)usQ z##n4kZ$~mPMRKdsoc4N7vdmvpS^PcYBx=EvoSXz$FMOW-FU^z!67~`DdWnX>I)q8U zGAI|7u*o|CpKtj!io6qg9bI>(k@XVK>pKRMa7p<$T(Vg{wd579Xzk=3snU6g=^%%% z&>h?|$AIgHJn*$AGNthQ+Ed7klx#Zr{;f>T2eKZwy5^6UDyTIOu;!mbAG3OWbE{Sli zz>5&L9dCF@F#AzT=87*L-a9!_w@BijBwBG}E@UjgXTbZ?<{I^zotO77&bw1}{<+y= ziGLE0DH87vt0?Apd>~y4Fyb|yywHc2dA*lM>5=KuFyniE7jztjVp$fj9+2a#8JS>) zChTT;8X#J3Uf9Z?_JdFb8u`Zp zy!ZdKhhWJQ9P$@2dDga5(EKK?36g%N}sY>SGqHt50=R}dRBAadv z25f-^qEl^{omZbO^i#HV89tR?zgK&aa26?LC8f+v8&Z783p<8dgLZd0t=L;oayxs% z3|cQV5%8{?a>yC63{c4T(_i41<%n-*&^qDTM*YjLsdEh1vlh6l1RHwHd&3vKfkS^si_Rj*xQ#z(aSL41SB}|4TNeA@zyJiaZ2}UD!bD|CSZsU^s-=*wCzC( zrU2kJqv!X5X5wJr)OM5~TH#+i|!v*Pfq4KEBx{I=p;Dy zi3GX~XL{FRO;Ldy5^-Q1g(qpKF zq?Go|8Ap#nSW-*?kJlFlq)cvOsmC<{^9oiQkJ%*Z`%aADGhu~G8xjU#u~5=Z42|s;4J%|Y!ud*^$MB{>iHVKbZ!sTy z9BLTt1)nLdQ&tsUr_74yfPg z8KHlb^nM(=6B7elxBH&ZqFr9qy1n$j0FwSEgp!w)ecq9v**3Q%6oBhb@PoLpcEj!B z&6lY;!w>X<@u-lUT2{6t#Us&Lk7r_6IUIExTM2(U+3>}tCxz#~O}M=^T8U4&0?W<4 zoww-r#g*Luob}WyXLKY_ru!l8lUiOc;S|l1sRu6^zGUZOF@T8ud3|x_U5AFI^w*hR zvA9-VK`gJm52McAUyzZ~9q+0fs?@3A42Z~t4d|;9Co_-N8 zl4wLeteT~@Ro`%$=&!g(!6=D*e8p@Mb+9aPzQB{X#U63EkyoQjl&J4ke>P8Y$OdwV zWqyAJ`Y&yebcCMu*HHTg`meI59rlrIO0?KZT^f(#IQ2_c@cw|M7k?Z#QV%P;Eg`d? zjZ@b?v$65^x_4ShjiR{pQggaQHMWwkQA+|#nBSbA&mZb`@!6<|F|8DW#UaEN!L5tO zx+)bggQtr(N*;G4(poxKA`~+v%&eE8y0h2N`>R4gRQJMbA^0Cyq3B2S|hQ<8+;UoE+2~4 z3Jo2Je1Yo4t)V`p6tfCjKocw{WxY~;j_`eksP_8z&1sw?6_|}mNd_G+Ra%G%yDN84 zDtlRod34&mWcKILgj@#Zq0UNv+C-L-qt8IF#^SLwtsbY+>gKSYT>nS~ zfz+XkU40=`fpc7C}3aA>+fC}4(g#KemSi|WJwnv<{x36T%*cE$VVqZfR zewt%Ig#UPNPrA4YWYhHWl$h<)q1{nm6MnEy>j-7D%*Mj(qpH#<2> z5hIZ-<2J2=5lOCB%>tl3f5m^C-ES~W|2vyoKxB#p73|AbSZ5L`C~~}jBfLlO6`WIY z+{*R`uFXSE*&9l>OPuAhH)6tiV@Q<(5opau;%g%}0MqO)wv3`3>s!U9G1oGG_JFQWXoFZ|ym+wWOm2#@8=yi-gU73Jecm!Sm0$~V$eqBECn{^* zC^v{==XxLmMf9tSRePmUDrZ=V; z=!ZDLIk8k8dfT(;*rVt9rHgV zGY;NK1(LJG1_{*tDjLKaLAF&WKvO6l5@Cdl!<8YW3I_2GZ{g);`#yNtoe?8K!5SUo zHY}iV8+kh1R4}MjT#S;lYARoA0Zq*Ai3M;4RH1%YES$K6f*aW)kV2)iqt0JG_FwhD zfqO5ZCDA!Z87Wc$H59n65ywwDV}|!@GHC3N?Z-`%Za~+vp4bYxK$T zj1Lw6rW9#?r^J=cU^%$|&TtUC5Kggd@Rtrfc_3WT}B0vDJA`Hu)Qi2np)q6Sp}x`x_> z-*TmG4cq!OM01g&k`w7mG^4-ifCwn6^}OL^s9)dp44glN!0&sVt-h*5%>`Gy27i&i zMkP}FH()wSCvB;frHv|v9IlD*RDHt$WzA)%^OE0T!QaV~55pJEHP*@$DAPYWa~x{3 zqvU)tmI3i_IS>Z4si=S_1>7K^r0+bJJtE|Av!PtB1tm~?6OjFLMt1=nVQU+#&5atN z2+FQMN=1@}Ym-`h*RBI-&%9+j>`r+HzI9*H)hKlO{jPQF0|inDV~vo#TD>XmD)Vg{ z#Rz4dn~NtC8eE) zRc!ojqT<9ONqUq8Nr7orVh1tMQpybtYc) zz+@xwLl=#r$Lez^%M;Ck1x_s!PWZz^DRGJ4!Ri0~qiUnax|()?R*0y)`AoX;aO zKEC?Z2x`r}U|>1`$6w68l98K%S8^LP9==R#O91KdR;}CWqb9pfPVaOZ0oMFGO93?c zygZH;S|}u#8(Jc`V9+~X0Hr8_$AD?l7?^%kfb;+dL~&sTvrK!~6|m2;FLgj5l~6tC zbCU!3&oDhordLGiV@=2$1B1?6W@uWX;Q;(XmVaq(r3$>)8CtTKDqIO2NU8rJwxg<# zLgLd*!|%Y^rUs=g1?g<54m^E!#AxqrCZn?1w}L!V)!dN24Fy5EeZH85Pq~~BuxW*r zLFrOK=B4uYx5B7TkZarkG7*GOMJ2>Qf3q@^0L+p#@N$Us^I}d(5y*7~YXWu?{9?k% zC+91KCPJp#rt7UpRU+90EO4kIUWIdew20%AbPmxlJU{K=Y`)>dH!jbwos^@UYt z%p_GNgF4q5Thr|z^}&`7@4cPMi$IqeS~CETYNmOsAbC43n)PYnhbVo~199EAVyMG& zY=fOUtcLXiGEc7gQyB5WWZZ{8L-7kp7y~FwhQq}t^Cv^pg8c( zsxq5beetuo_hC^R$lfYxbl-?vN|Jfg3*8|2R*a`lPam-YS*--s%ZE7`n{o$e&8qq{2ilL?qe49-J#*x_F?I$V-aQC)`P8fkW1`B1 zPFA?`8FD3vR!PUgcF?PxU zMNJ}*w<4$)9T`rHfs%>{7FGO8P${fW_gws&L9PhJq!5hc{AK2E>QuzM6zE7IqQSG# zT0kg8sr(a^>oqs+&rb=J6stXoh#gmxpsOL5SK!ZAff>M1iIuV24}DeC-(0D>OvSgrSaZ;G1Xc-HrKSl(@IhT;(NM*Z(I~+q zimC#9)?0!>_#OKGbPPCt@L&0W{?@kTPmWKrRKY7yxLZKapD2;MG_Gpxus^>b1i*Q66W}~?JD8yTFEOdpgh!` zrYSP>_%0wh+-u7v8??HTVQ~KJsHKK9R&%3`G|0V1*d9i72-JB|Qj(rJToWD#GYK3J zw);=jrYJs<#TY`#`+po=bzBtR*OqRT1_@CbmKKnf?uLb>VOe_VuCFvmN-W*dy};5^ zQoD3_cS);+zWm-l=6>eJIX7nR+%xl>`;3^_*GTU@8w$=V&x@JK+EW6xYyqlQ$8N437EE9XX+Nxh3|K2H3vwryMaPg7B(W0CJ2DGba8&Ia!7{ zHuhu|&OI0Zg)F&B4M7yAizTc7Xl}v_DJ5WOH+A&L1o?!^t_kw8O}tZ%sbWl&LzDR{ z2)F<^WG!e^GvK8jXX)(ScwtDy%k~kdGwEPx0M*7jL7J{M156XG1SN9{4DpuAwM~OQ zOZV1i{ngEPLf|N59uZwHL5_nT=BQ)J_Ztu&K+V(y@38u{NUdU98;|MY8shoW3 z)pL?Y?OR!jNEkuX%&=GTLHJlTkrsJ*)se4T@~R#1&C#l|42@bHd`syHFlPBf-4jn9`_yi?u zgJ}~5^=wL!@MWCMqCb*6?zqh!Lu=~yY;LBqRKT|jX_n^ovFdwt3;H^+q1M{;-0EO- zDM;K!tZRUG{y`aUCGO5V+uiTf6uKSDrH@~SYvYOr$|F4LRXhy@8E7RS!X!m2p*&lr zx4|Uq`a9Pufdz}vFCCO7VrIXVE*fk+v*H0ElR4hp}A``r4?N5I@u+?>%1rc9}mh))hh!enqcC8$7!RLheWwGRLJ>3nIXf4Fl> zS_{)j5ZfpIFl8Hk&cSE!Rt?#`&1uXwt2-Um=51goTKJ97SM3^Q^Xv5*`Sq;+S)jeV zPYIeIzyi=~>PLH% zPWN+P^hc#|gR59atXm54<)uf?@448%C2&aowf*M>etJhyKB5a1f_9_8YpPBC^8<`d z2WD|f$R~B~1c@%$&V=I2?@gujv3Z`IJe)28xR?I!#WBn-*w*CS$Sz7#)^=qp=0Q$f zYjZ~qB0e)}8_NSs3Vwh0L7DtlPx`o5S%*KqjtTH%`azns0%x$j1&293TyzU0!2RPN zl%IAzKZyR$PccWNrmZ!WScz=>ZgCqO>&qYEc`y|W_G)h-X|x;v^|v=L`geKWBm5a< z&oXVE7BwT!`0wA+LCfQAy6L~)OK(PP7QWU$1Me}Ww%1YqqxnyEf;Oz-{)?~vX$3E3 zTSR?0M~biAdmTZ38kO5g;RQ_p{BQcL5|8RmqR1-29o?_z=)_)n(EiNFv8OAvCYI+% z;h))VuRmLlaOQ8EL|(s_)Jpk`?W;!<_tS4Nw*Nk-bEQpk>O{RgOVg%2Bd-~Ki{c3= z`w^{Y$WeZB5BUS>2M22hgMyGeBRsKB)UPndvnui)WdA_^op-NEB|Z1|bO1N^Ch)Xq z=LQ!2WjwX4Jq%}^fWq;3sgKkpY`{~{(JRUk5J5u8_%7z5pvw64KZ<6qVaS`;&O_MS zTyg)km*B3p-UZ3%E6gsJ$oH7#L}7Zi?sf0x^0bM{iB%KD@-u)E0ECmpcm*{et+oZcau#?VgWMu zH}RCf_7Yn1c!#@@yedP{l(J2R{)cM>^6Kr`hfKqFX{%YQGXGwlPYmsQ(Dv?b>H29u z@XjSXUhaqh*$nO0tg|8%1&mXTqyKR`4VEdzC~7=Me1(#e{gTP@#<;YdEpxznPdRA} z2`kRucV-7OUd7(Sc1g;LSU58n8r7VXxx2z%4N7ImmtE76Y939ec+fIl%G+uTkv$HH zB#Rp3s=zh@Uh=#z zF3Q{-aDgO>=QDY36@Gc+QpKIN->_YsgX?d^oLyqwd=Bp8#m2*h$l}YI5lG;7q~WL+ z?2-)9@kfWUK3RV*OuIheEY2){N06eqX5{vED13`{2%q>`$6$8HI~W|HU0vUk;1RUa zb@@v@R|Dh8jhb`E?xY^~8z8`Ba8RTNsTSFw*fswqU;Gqwbap&7><0jbwni*`9km^C z6QMKzt#ZI_PS;kqV2vz(f&G}VMPPX68#i^5HGL;iwQ%i84~Edbqob&4&l_orvoFq1 z_n_Xn#Nn`ithkB`Byc~9OpvyBgMj8+7}E8(0Q1#Z<+n$VH1w}Vk-F}02kv4R<8S9h z;v14Roe@ZV2LYQ)bK9vM0iXiKVn6!Be4|)C->ptvjF>bfZ|@q3&HOE<+Q)MC30>P4 zJF(ZJ!f2$1)55l;tfB^u>}Him?q*;orFKjr1Zd_gXK)cJ#>|4faYMbs@2a~l*j=EP zGqI?(SR>Z}@HZL6FOfDbGsp}MZnVM2u7D^5yYE`#$XU)8+v|~GSFBc{aY6K{E?l)A zuNO|9d$}Ac&c2~z;_cCBqL9YACutZO`$DS@^(U5m5VOxGspi!CB{mGjMWlC3CtnFq3+kHXjG@6K{D-Mt!|*H4^&`GgN+}MB=vWn;dP;m?vEmymN53vywA&Li@A9;>jfT5lg66aQM4j_FV zj|<;?zxXJfAwFXwrkFd`DGES`q^ zo!XME9%R6;Hil65TT)RmrEYLBF5QY;YWtEl}x&x%6w-bFKKs9*7%vRQo;_&SG1s;kFgO0r2hbpQ$CJh_Hol{LcVc63`+2ak1l+9 z7uwWTq&oKF#&MbSiR6;$@++XYxhkhbKW(4yR;OcJq?KxC7mFo2@&2Nk4Kjte`|}m& z6>1WfizTasB@SqwCrUF{HI_z-fngH4SKjUQ&rQW@wmAS$)Nzg*S8I(o>gLUF z6}GVIwJQ{tp#nROI|uNwEDv)W(ghE=fvx`)=L9AM=QT(TvZrl`{qx_GegNm_JoU&9 zKEGFVQwbgp;kOz3P5)gi702#`|5=*ZTZ~m`8U;wUA5SNeK|mU(AUndHmSiY8s}jLa9-rChg7AfNvnL> zE|8{w_d8Bmr~o-z_wQ3F*5krMTuiL^>ARl-EE@Z1B4$DKya(Th`IVb5n5-()-u(U; z?}iWuy7wY~y34 zTIxY-7G@3K^euFq1>ifSn^a=OSWac=co|pFh8cgF%24p6sQ~jr6>(t_8sOA=-R$Hu z*oa8{6onlHItlob0GGI%{bZ=*6gqi?A-iUW<(&qYME^6S-#+dQv6_TU*avz)C$Y5U zOm}YD$%Nya!C~xku`vswGrM)$YQm?#IlVNAZRwf!9B$lTlSlu|@zi+5pDQXQmBD#m z5>dXtzmMq!dlE9*x{UV!8iD|3GHpc|o2beEn_|BoHH)>WKXs!nCL?pPnL%^d4IDhg z?=i#>FhXx1{}XqaXXsG7Qp>q+A4mUlL1(48QPeG*CBb@WM^It0|8am6@A>UDsB@45 z>o)f3!)Z3X-w&;kYKv_{(_GQ_oid_bD^#T+$rA#mz}?QlLu>!KA7vR?xhqtZ_)aqi z+k_7r6^!M-2XE}N448LrT-d}OnZIk5B^02u)eKjJHR!(cJS`~d{(x1>Z{(DjCGQYK zC+#LYut}|8CGm}UdF`Dl*0j}u_r>CDQpP8vbLZO%Z&OV>@IDK_7_t;pZ6OzGM=D8?mtiI#o}<__IAmIB7%ABU0=k({QMgnzuEm8umdTW6UI7n#tFrTnLgTuE08Im zQ1}7^YLrTec8bU58G#52KRHxUtTU198h1EMK9lbWDOdb*68`3C5nT?gX_T2zpcC{3 ziqXVqvTE7DhdEK&;Oiuya{)lPn^UPD0=nK9C^#$H_+k0`61{oXNLJO{d`rrY%65}L zxR{POmED6~hRDWr79*v>*MB0{(H?r-Pe3}erO90&h6SDj} z;p{y=+(dwlFn;!#o_pGnLY*~2fFtIpA#F6WnDkwvXQ2Z{w0;{vb10(=qVWd_5o~UB z2Yu&fsSv3lNS9X@^%2+Kg9nla`ynDo`Bz4)e6;-K8=ZvxMe~6|OVvzYfa0k0UP65o zhyNkq%VfQPR8$|xp@>?qx^ok-wu*c?TkQ&i2Anb6;oBY^!MyeSA{u8C={d(c;GjIu z+cZt-sndE7A3|$LBU!nQzG&O$0+5OKOyOK~Eo2USTx`3Y-(Oyt*}{__c$MxCnOz)ov}WFTd>dSbE1g zNM^BOf!3&IG)^0iFd*ht)m--&P%+@8p|`Q{9#!EDB5KFW&?l800r)5h1K;gX%h(+C zjl_lgQMd7TSEJvjHD4|We%Dw1KPh6txbb#l>-Ey)Kt9GQcns`FJk&}#3#1Nkymi{ zyg^A!WU{pQv3Chvj^1~}kG?_+R;SR-5>`l$6pAElZQy?UJR1Yq8~$2zUK=9R&HHpv z909F>DD1e6qn&StLTbc)kY>&Z)N~8kj%zzVJ8Z9GOS=SM^;j5_Kf6*PkXl~|QkeIY)i!Sw;3+hj(WWug&I4p4)Ao#YP8iw4S2S%tMQF_M8-&HD z_f@&CL81qysQ(yVgKWWgNhMF-JO=+^!TVoGq^rrs0Bql57k9E$-^x9I@_xO(~0Z#|=( za&JbnvH!~|@7hqqH4*k`2pRRLL8MeR2F%YuzNW&vFgh?48p=XS6qp zltB!4McKQy*pvqsl}$&erWMELk6%UO`%GK#auBXeNY;1NOqJO~1^;AN6T@qGUVLOK z_J~Q|>rOM)^Fd)2s~28^gf@M`b7H%C0n9f0?Z{drV(~}4aJI#48;CCKaVd~IBBRnuY+v7tDkvH+lg-)h%=C@{YBTB=h>t6IK5+-J{a112C0ty1Mj)Fw1;KOSD7wp6G(;~_3jJ%Gis#%} zRU5upfu`ju%}|%`8+LfNIZgr%=iqO)pXVX;cg{Rl%&j{pGNex_*W+s?MDV*q5=!N8 zh#~#2X7boYN(tv!`~d5H^comI|tyN*;YT|PG}lVUA?0OGi+`< zfe8MKxi&TFIiy4D$7kT7B#$^n4R{&@ATqYm>V9B#fN=U~kLbMSNZK=Y`v?AD{28Ed zkZUQf=A(@UPYyQqtIh#&BoKw#Pa%Qy?UJ9(KLemYhiHsq05l|w1D@p$yV0A!gS zf+WsbK$#rrpo*VHH}&#Pyhsn`@;TF`VlW(O<4%0w}3eX;JZ5l`9MhYU=;W(1*xpg6N*5NI zI(IFEyGU4}qd%@b%9}-gpx(iSjmG7u0wBoC8*I}wsmP7W<%Uo{sYBf4Sr@a=-9q4i zc4yV1XV`>L#}^>8{T0BYdm~ zx~lOLF-Ic{87+Wi-wV#FQ7zhNK#p!mqtz>-3CO8jv)&{x3Q<@ zn`(&B*5^ZISLeZ<=_ROTm02eX zp~rUC#z13*LEgM~cECBO=f%e6N8neUWCfkMkp0K`*O9r`%md59}%b+#Veo4>m#cl)0MtpNX zL#3hIj|Rid4^nwdU>hGKm%V-z`h$+B(Hb2Z*)roHMd|V>O?x)1c0z%OJ{vFV3L_ZW z@cn)f{g`{Mh3LpieN6-C4QKy>Cy8;QP5V10Y zWJs&eTUDu`Klc z#mLCBa|(6hL#X2_&lrWtk&*n`NPkv?y~YnnKRxSV^9Xn)289fb!x0{ow@9B&wN9fc z=c`qsT^o%A%#8EU8e&`>E_AFbQ8>5iu3{&+lku#oa~F;|&Ql0L)bp~}sHMW`u`mm( zHAN7Y0G>tS2C@lk=~{ykk`CU-Z`y{h>;x+^UK^<^6^nud3CO2NN-b=%L+12ZRd0WK z8L@zwo3cKs;&FjbwS}g~g^SYU48PbhkED|r;f)o91No)c3)6DgRqUu616K&}?F27V zNQ{&RE5d>1YA8U9NaN^0_;m zp1ESEQGB2XXZuo}2_w&WGyh0TloKa0WZd0oD3D*4Pwr!Y)*)|r2=Q1R8BJNd`P&aD z{S4yXu^N*pr|nB^N8Q45YuMj})rxL;IO7h^U4r*ri5<)mLftZ*r8)&rmK7=!l5X7X zA#@K^TdFAl- zp!{*p&md(tis94xj*~7Ka@@=`GHtZ6dlPT8F`y^}sGG)_#WgAteCCQDYJ-)*nR$!X zg`NQkym4gqeq{mVd~Y&ewvTTDLt#d)A3_G;+vT--uqkFLbelysd+UXvyS$v^D6L|?1|arqKi z?=(LVi}a`A)mqAy{+{jknLX{+&jsT-_(6_5Hj^&^_~6DRt#*gOF>w}v9-OH}3)E?Q z#(c$-sk`i{`bBkmLY)mmaQ~)vhOi3R<)GU6*8o)5r8Oc=XGx1mYn~PJl@_pyM^ET9 zCKWlY?LTCIuLpbC(=vb#WJ5iXG{+m5_sna9{CC%l5jBSM&+Y*nG!X zbG63FfX+yI;c;nWKj=0rKtUN=OT4XV$opc`XA@B%kelU;0ZSD*F$Yb;Y&i0msZ{Iv z$~+(26@V4u{Oc~>IxWzX2^lJqKM}IGDrx}|$<*UO{TA?JqI{6!sQMvO?qqowvq~vT z&cR9DNsi)3#WjIR*SVWDL<^-4cuE(3!*h*5A!z~ts5Ol$?vG*p@cPCJ<>o!HN<(0} z-T>T4su$j_LXbB1c!-8V;+Go&f%d&{_zV10qF>i)z^NF1kSUyOGS@Z{kR_S{TjDGD{8@MNqr zrwU6uscK(?3L{jk2S_NHPJD>bM(&$#LWcb#$v#(GPrZ}_S^yc~Hv(!4?vmQ?IhT+a z$wa@%m^i8TF_P1QOf2AWN5b%^z+;UxM+X0v3lW}6{*O8|l*$e#?DmYN zyxLVd-i(1=>-lc`^WSqo#{3CHuU5xY5;CGw7g+Pc1Pz&h<;{#iSV-^zKimqWsf!M~ zJ#xl?-TIZuuA*Bhj>@ET5v1jU-tnZ^gtub#@2_rK@4>}y29eW94v!E5xvBCH0xE8l zdonwWT(88?+u8<6v3VQ;F-_i%fr#~ota~%v3H)(3e`ixC8H8tUE#$T&I}yy9196@r zsta|#D?)9my)3eTY1G7R=t=SL1_aLuCzIoJF=UkBi$Jxjai3RFH={)!X1J9jTN1N} z-&HGH5)qoKMAGg02->i}ErKEKEY8G!`tCD$r0oJ^=0dCbRT%r{Xgr+^g|+{C6XOC7 znWes_@-_5C%r_{yV-?&A84z)GXDWQ+16?ZoomP!p8uUW~;7fmLgIa_hSF&O>I|@@C zD&I7j1V5eio)AF2)`ope9_LDjMZG0x6M&Wa5YE7?c^KnyKStgeb0Qy~$Se;rT@~(6G4i zOB`{W9}RB9+IMo6dDYuM$neWL9!MW+JZ;*^qg{K@@B@!={im2a8u%B2Tu06iF!Rdl zk5Q58Rs&myH~)@-(o(0cl!Fo|UY14%+0K^0S5*C~yXqZ;IkkX*{Uq$e|FY!E_#l~v z7p>n18X!!K&Z<|;d=N$ci)o@H_QcyaUD05yXA5qQtKr4cXuO_L77iACRJ|?88Ec3{ zs5ee!kA^n8Et1Zrhb>`@u(Lg=o@~g*dEmU6nfy(*z-?n`;6f7I>2H(t=gCF!`-(su zuz;+OZ729ijw+iv>}QM#J1>xjl!8-zPa9BMkvg8`K9{mMc_U->hb@vEUQBP$XE zcb>xrOKfZTuN1!cTZKexUbv=yanzi%UiBa|-L}CGU?}Dt|Lp7qCZ5jmR+B=e@U(jlh9-BBd4k& z(G6+HR8D_L?q`dGj4#3^3L^&Kj%?{I!q)(y#`}W?^ho@;y>hEcd1GO$!EJlPp>r|TCX63{lF&18hr91lLEYwou9Qol`@@u~hdYR`qThbRx*$=^6^|YyC zeqOjtoQMW1LvIUn?G+gYke~rm5}>2&^do1VWn2AZlAx->r)S!mt@?Hus>r>h!D(pQ zL|T85UtL?|fA1sd8l}zMU+&dsDiatkMA&tGK=6z23Dd%KaW(&5dCvZ#g<){isW-YC zj)WFb!8S1RA51ZqCPzXoFPjtyAs!_bi)!p5gJFV&7KW*7p16Xsa=d_@jBBN5o){US zSG>)>nO25$t}>RgtB$?(alhgxP*-mFk!eK5I)-b!91#%L^Du%`Vy!4kLGkZahUXEP zWZO-=_<8;O)&kBKhvshyQLD_JMN+AK{;YtA`W&2XSxW-;pmvV{ zS;N}m{UA0>A(L%l0A2DV;q|vqxYfRkY$1D&d{!EH?#qWacM~HOs!zLWzCKn9Rfiftzr|B;ZE|M&CmqWP`yCmAHr zJSty(3E3W=TBDQsR{dL*Y>{Njec}zux7|B#ep@lXW?rF#MeiW7WM;rgE>!1`o^N#A zJVirTe4nypX0Gfp*|UB1&T7VMoBa4Ks&ploDcgBx>VEr^r;H<^4o)`1xZCO{CXXry zanQ!sYf@dC+>_6Bf-Ri3r5FjFjyZY4^wm;$B=`_QlrgdVgP~RdkSw3tXF{OB_tor%Cg1`HF$m`n(Nw%Rw!fD3`1^Rjy z;-Sk3A8~+$3=Pg{6th6mu2d{5gxl84^oW(8vbB|iJ)>D;PqMCn-8RjX}rYSx?TlBZ85padsW}MV9 z=zFiJrn1k*fzqYVJ&)j!40WMFy9FO^4K{kcZMY}yY9gL+#W^mG@?7ii%d3$(@}&}` z+yT!QUb{ZI&2xG#@T4&L(AT;+D}0LK@$om=YzZ2+6Ou&i>1Ge|Q_kHg;FxhH>JMqT zgIpI?)6d2p+{E0lAxzK`nj=MT*79nl6^G(rvbPnPQBwoc>TtVaWp&)O%y2NOh3eK~ z=;=h!BMVpkWdu#@49bzdTcST#U_5#>cmP_jTkd8fytdN=2tWN;rHpS%Ma0B8oG(-2!5=Bpdyb4iq!Ha zC$o*yl1-{NX5nmpJ%;-^fQtMcfwHW6kI>t7E$$ztLk{Pw6vNsN@$>Y>ADPoA#qxjW zao7DN1@WVPbX~eFpQsh?l;m;Sek`rsLT=tY-Zk$1^0F6Kbmq~Cj-a0u znmYXc;04pUj-3L}?62`KL%PmX7#INhQWl(>b@}KC7}K-_6aFls>!n z)c&t<5q)vU|DVY|%Q}gO_-w$8UmYDq%nFJWqqzUkID`5`4^HeOs0ooJMqr?$aTFE~-V)*zF@ok4lI+ux_rmD)+&vR4Ga*=R-$n^%- z>DtiA(Vq(=nKrOw*IO2SgkoOQz62`~cmOk}bZXEgARU{BAN)0iZsP+dSGd#|?gBdwE#gKCF_`{l~pn7Da%Mc-ZhCrMAe zhYulEw^idQP2<+B6V_Q7;ado@^;|goU~+iK|AZ_+q6i~T)T7o=UZZ(`79&>_@70CC zckE#0Vzp4FBcevB+QNdGYP}b^?zQLGYyw@&o!Vap^#V=uEZE!BdYdLxh2lX6$~}@n zb3YxMjwD&W?iXkYc3j2?Wm5|pzIP)ut-D~D9is7&85;i_pU99H^GPS~{8g?;<}WkP zpYmwu#jQ7436hv20lxPsuPNGcTE!)$(%lrH=N`+4n&tPYa*|;Je006yLZ`BWQrrc0 z(?wl39MrY!i~YDK9cnU;eE0F0fxHo`@7_A(rPFunmj2tNEk%*A#5Xex z4hYCZZHZ`*fp*7FD-^bt1!8yY;=fDP8y`#wJMRhhLjZ<0&;GO$HSE6xPw2d^@oC!` zYQR;JaLZb>H}rF>F%-XSV(hULlz)ku5_9{MQu(rI*|R$f=cyrug@Mrfg}bj>m%g)I zF~D=Jfcjz3H_1M;pJsF@u*v==FF39D`049AiWBFA%3QwNd}_VrV#@#cN3p7MDT2R1 z5~WqV1gkk!hvZGRFe{51GiZZwDX1^Or-}ZFe3Kbq5An#21gYfP9oJNm5|M@F{_W!D zO<*Z{8qG_`W*t}$u~`ovV!3UtJ0#XdEH#=zo)5IMe`%yacQ}uftf9r#{uDnO7}~0| z4Ra$Z@hTMyNiiZj5Ow536y`f|;IRCA@a-haj^Ww}-ZKY$t+UxGfd>)GtY51BKD<3K z$S*sV2$|fd3trkgo8^U(%%p5~*`vqT4wPPGOjDBC*j9Y03Fk*JV6@O)lWU5G&%p_D zfy|v!b62ewk}HnkEIjE4l1$Xy1r7sPK?9#HLUY6we+(p+Y5M4RF;GLsjUcJ=Ds1~) z4L*IFVak)XJ&NK>$$5nUze4}_o(?ce>bE@eJ!2>utPXl>U2M<%!!;c5r z8FNp&UtlpFy2)(;kadP18$!C~2C9{Xi_xF1wsw*ij{u%TH!xj+Q=riG>3x(G~${pRBW)C1@N-Ae|XV!CsMFG2E}drhi zV&@r0wkhVLFbHM_r%YiK0?=`oyUY^kHR?UPd(0V{!)rWN;xr1Aa>`g1iuHajwl9H{00tjII4``KjBPZ^KEGyu2M(>~YXC2Xnm;g$PjWOT7Y>>P@wf z`j56!`;cY;YAGQPwu;xi{$=cUr~@dxtS*qJ&q0y8D@*0S1|#)X+~pK5YK|^7-k}bP zd%RM{8f4PVg|NKYge;55%mj6Ghar95kE7@$Iy5{U1+cUq=|sl%P6^`Wbae_+dz|uG zs47u`wcP8-SLG08oAH6hAoMbb_L`_wZ&Pta2LI&UR^AMp(D?04I(`|1_`eAf8-j8= z^4_yj2E$KWu^N$`_t>+8Wg;36?V}+^^r2P~>}Ma%3hr**6J{g#v%Y!HhDZj;@^cq> zuM#xgs(pW-BShw>A+~%}RF~#AUNy0c06igS?Tu1ti6}1LKG6ILf@LNQoT()tEn($>_K{nl#WkE6sDV zs>RJ$2Cs~WXP1vFww_Jj;{~aP*qf*2Aq4%*_t+fiFOd=Id|0#eGm(WSY|v9SO?$Sdn#oN(#fVt=STc=kv zLJEfRXow-}Ni#tigfj_m`K=$ar{U#&7UkYwPT0@vSe!rZvnQ7|6-PJqy@W`V(vg?N zE_)i2Xo#%~*BR1;+RN(ts?oGhgO_=CpX-%Rn7*npmh9N;BGI5RUIn8I)Xi}~w_ zaAKg2X9w6~fpXP;FC%y=xj4S6UsK3C!F zXF8xED^VIRFZ&<8{}1r8w!+Y$$$AcOLq&uOHC)0a6dJnhQ^?p{oOIO0q6`Fz-Lsrg zP2)Qbr43Ezu~p4!=s#mk+@v(czQBjzB5*U{8(6Jtz1n*Idw>8{RUQ|ct!9h3CVMx{DmBcHm)Yy68crFnA+Ej-5H;`+NeC;ItdgT*J> zhj0<|`e%CeGgoyL$DyZsDPgMv%d=MF=l>_jg3hWQ#H;Bj_pQg<@Et+kP2{SomSsKE`~H4eGSV7VSYdwv4zIvg;t+>ZxbK$eQch3A-#b{BZ^!voDm(v2mhS1 z=DPj6R_|5B&vJ_|j$m_NlZWq?14g{==2TlMDBu-00!dZukPWGja%zkt0| zX*=u9j2uB+)2t?|u06O)4MPdQ`T3k~N~tSC{=V5RmB&z*QVMlWk=R4%<$BuR+Kof# zl>RT#bpvmjxBE+H(paaGZMxnl3#CV!+VoAByqb^AfiTiJhV)w0LEDp)U6^cb`Y6MV z+UDNrT?@{@{Q)FXJ8hM}%yR|Jm28b4<2GnRm4)k2h>2a;8^y^XRaa6GL};TP`kYi= zfVEb1%5Ym>Y;V~DcqYtC=`&sy^@@1V>Vh8lsyUizcX8$C0ynYKR=l}yIB$}WPdAfX+IYcs%=>Vd$n9=t=qC`EmJ2w_Lpn(guxFAs5R0-W#@oVF% z@=H(aS-wFeN15#*a<%0gyEhzGsQ-fwyw_@m+7W86z^lz3lO#hnBlpQ`YJ>`vprG*d zAL%fukWF_&3+fJlex3tVEWPmunONhfBlOR*AI`4Ma~*b9^DT?dJJe&KVCJqxA>fZ# z=xxG##NJ}r+u=CFVh7_VD>*2QLewyHNUjN^qGA=6KePT6y9j$#m5v3|Yp6*8Of4ga zNh+ZE(rBj{z26X`LUQ(~4Hx!I6OC|0;JZNA3N^ec%4N6%;gRRO=4MObd{HCO#uruz3q>_h-q34|r2XHjTx7>&t+be1>U2&)>s%oom)c7XQx%Q?~<^H>?@X3INq z@)hYjp~Uin25JqOq2(pz(1wPs`8n_YN(5b@zrmxp{tCYa`K?k{Ao`CzI)N}++kh;} z74KS;f$%O_dz!qhG=xzzLo;Mc`c-)+K}Wut?z$y)*dh?y_w~wEbNSi1>f`YqV)|a% zxk{aO7a`gdx(@74C};^H_wVB3RNcGs>!#w)F5^3&hIo1T8zW2xUv^0OE>M@neO?0& zMi;a|erihu13nzzBDMo*ZV)C6h$)8@;@JP!)>|VviGqR!yOxDM zWJN=l9M0ggk;YEX)0yJZ=5RR{+Mgol6k98nsl3Tgc+!lxf5L3w;_2k`)WqmEb9!i> ztb*e4-hV-({(;!)l6OR%;NQu&NK86HWwWDa@ARqbn)iM!dH>cWU%Be@uM1?UM8pe| zw?W@Zn*k6ONh^bvEdIvd|8{K?U_U<)e9yH)q+MwI&2JEeP&pSGROhNt@aLiyB06S& z<3W?CW*4iG=T@&ZM-g9QEcs(}b!CqE`?_~-*5owd_^uotHec7Ub(W0YDABm$cQI2! zIXNx}Hq1PWsTu&X^_VtadJOZIHA-5*niGXLL|td8;kAI9kahmRhsT#@7YH4dR`)*~ zon4@+nhP@DY<7I(`x#u9#CA9hrnhSI$z9+5(<$sI8Kt84dXbBz@~`zg&{uWFcL=KI zi>kTyZpFR1E7f5fV=6&ge~EOX_B8O$ZvCCL&`Yz{ca=4rr|yg=zno0+eUginoOBq= zJDV3eWdNPmn5@~{`RvRd`9sphh?U1P76mi{ldsdqy$p#zTQWNpvar@)hns7t#m@jq z_qe!sOdRjM_18J}US2$Bm38ew%8O#WI`3e2E4dR#Ud7AC%$FSBAxYDEckJEKE`OE@ z8-h9qTF`7`f8Q1KoEW_)pIR@9F4CEyj=qDv>X`hn@6Nit^7&Xk2&GWFa?9Cc3|0EN z;SS&(pRC@MYw6pP4@NDg-GryU_C=jy?8VS*?X?7|n1kMfMlO(rJp26rR9#@y zbz|#HQ~7ca3o#u=1DZs>aA~7mVuvGLc6Kn=@qZh5s}d_2;fx}k#Zm}rinWM0Bhkt( z5HnJKB`rF5wFy6QU1qw9Zn3?qf{HI-D}~^JMJ;dCDc`T@dpXY&ncZ@91I6I*med^0 zp@tVOd%8OQsIcSQ2k?$DHToBqeyl#1X5IHaUW*{KT6$^r-dkGZn-8%rf-?uPcxOjFu*AyF@bUrZ_*R0c|yNdzAzDw zj}ia*h~B!@q>aYSEPXJofcZH#ft^rL|2tOe-^phkd1xGcB@b+BrdxPFURv{ zLWf<~EMf^4=bU<Zk<}Sp9S!IDNL(xASL1Dk(9z3s$kaf3L<~Z~pD49#P|G6pZWmCE7e#L*!&JK2oBY zD#w!2JB)j86}LHUPs!LS{y^Qk*Y73cT3kcN*!sBs9D8exnI6fG(fUDvx@WJ-*@o=L z!te|3x3c`7QGYNnT91Trbn&g?Ah^OB)Yz_mxHOTf8?k&Q{t?vu%;)lht~;!#*UsNB zY>d!^fh-i^q@#q}`!{Uyx8;8wR#R$O70|M2=s#MxzAF9KWz z>f<)wn?s`_R9%_U}AAIRL>ntBPL z72Z#$9#sF?{N0}JiOy#uarcZMUjv}=mQ5JQ|6kH7TGDu$C26wpruDDK7rW@$sSFpQ zvcJrWx3;;Ej#W~dty-sEDTx5T6&AuwxAoY{3obb-;oKOe zsg;+EDUj7vCYKP{`h!=}F0_BXNeY7YjmfX7?#$i)gYvp$#(a7=2e7k7OUXAsAIs&P z{aKRZbVnC9`maGBO~m6TgHyMNdM00jImsmv4e&woCNzcZ6!K_%fv{STR9_UpTfgfr z(1p7>>U2gNTjzRE$!Czc5WfulfX2Q~F=^y2D4@I!pYxmUlwTGm6w*j;q0}%GzWI^d z@;ly?RE^do(?g3(kZ*OkM_%gQ6HZI8zAfvdXkfLeQI3D7ZW>KyqBH`7+atb)5b*d> z<<`_N@VSn(=Haz2zLOT%z7P3~GWr7WA>fQT;1fP(@`;t54tkxs>r6vC2n8}V8~eSx zx*U}es8~zrwnqG3)O2srdh$Qr%7wC;VG78e2jN0KNq3-xeeY zQZ~6vXm@2dr0~|)lPLcii{!*xM}GP1$x7a^&P5iMwQDGKwAQD1=kQCD$)rsKmTt36 zQ|+^|>pXqt4e3tYYZ!R625WX8vST8BQ(60{Du?tT<7Wp zXUi%VFEBF>I56Vgl8n94QOi8C#*zk{?uZCZQ_KHVRa{V99Qs%MJ1;k3OQc*?MEJiG z{}%1)#F$pCrDS7jrldV*u~diJ_)Ba&zN-{4t?&~QYR#%WJ5cF|TS&&5Yu1YAitIod zLPU`BKE=%hHy%Aw2>71QZ6qhoZME7y`_>ufVz(|S^gA(akVFR;?s}i3TfT0?=Gl+7 zUS3gslFrtVwlwS(Vv|-4;QgbT4NZ#jC z{giUZCDX^ojip)C!t?@_)#Cac>eY4~{J|ym?`nFy7=zd|`1qn~Jz0+|!o_4oW&8bH)~8B~F7-tuFNBiPy{V52%M@f7-6ZXDhMA70PXgRB`RXUA(f|GM; z4RdsS3qbideG5>eRXRL=VIUJ zGdBqB3eg1J3su(G92t8;W67BIRyc?~K61;lar5J4y5VfAPq$d|29~%mAGl{{GX<^m zbTxK4B!6e7-US2&5UMtwbEzj(2dro-ZIgtWZ>_kW$^EPfq|py)ynyQQj3ZmV&1IFi z6r%%FH-sid9%#M$zXb*W(*S`h(m#Zh`-!$S*0O)q$n+pvlp*OQE;Nxl@eA8e`BA8gnxcE}RoZ}yE=|nFAR2PHvsW)rC{r($a{(VsU zxbrt?B0DH_q5og$kj+=WZJV~g>E>Rjw8EgXhn>Xk0H4=ozphuzga7=wEh!7J`1d>8 zrtALBL-<0odpYJ7@2bi0-|rUjFx!gyw|+KI&4&d#?|+ew^}8Acg))}5A*%l}94}G< zrX(lW=hlA~e%=Js_VN|%^Zp_L56k@im-_ilz6rvm`-HaIXX0gZ17-KA*2Ckbmg?Fc z(_fn(d6yqn&U;$}?uBM!H=cx+vu~iSV*gD@P(^)6HbZrlIure)zP9*|lG>$H6ZZRu zcVe+5xuZocp1l4y!RO-l&wqb7*LyRN|4Dp$N1xUc#K0$%`sN>=Cp^0Y;&aM|G@h+3 zSpfY_YUcftUVOzft_v}@_sVzC2aiSysuP?Yd$Y|A_LROD0=FYV{*R)oj*IeX;vh%} z(g;Vx5lVCL6AqA;PLb|7I^>XUL_&^kIYhccKw4Tj?hq8DJC1H7j(qR^XFt!g&u3?M zW_I^^p83wqiuHwB^W7KR24xOaYb~)5(FT^b`y`i8zBDsCJtElWoDc3s!-}8$p1bHx zdAZi=?R?*xdzJFE%e_S|h#2WmR!ru^{UUeR&x_OiVz=R_PVm|fH)P(!c-+`{q59Xl zbktx=$2KeekMJU6t|r)$F_7>agECkyp>*gGypEB?kr)v8hT`xeehqC6^Z8|qLlRaq zW+ihiD;yBVM8eeEo!SCd9=3&hh(+`^R}hMgzchJk%cr86w(;I4En(yE-H($mUGXWT zM}Jy!of&?UL;SXJ4CmL)E?SbrA8UhtU%B8E+#U%Tpa-`<4nr$SgdY1{%`0o4KAnhn zE`2m^{Ls)fExTV#x&mrQ)eCp56`Z>Ai2Zn*T2iB8399UDM#qa4Zq86<5=PhbA3Q72 zU|9Uvi^(3lS3pM`l*#jx@0K5p8+e${Cw2>0y6(D0{d%*sBE+PXf&TS17|H%jZrSX0 zowWt=eP8&0btb6x`2@W8D#pjTjaM&{#HO}|HH#_SgI^9j%1kRX^ZEWg-1URL!S^PF zV3d1Kl7+*v>N?R(^Fl*`Y00coM?vq3T^2@s&VR+7!gv+Syh$5D(?5(CL4l96ZHPJY<5`#51zKQ$T22cKqbuY$@-6r!z@mV*~zq@?iO zSA%9k?Y(?KSCJFG@BKAG@CfnTPHdsl*-*k2hkh6LAn9A~As1)+{2pZ943a2f)p#w@ z%N-Io4toVXPoWX8UN|i>CJ#=$00?{7(m9*eb8t6jh{@ot6LjE@b!fvjw(z7BGskZ- z3C)2H=Djfbbd{VZnU6E{9wDB(?t?F%yl^L6*KYaXIiJ|WmNtCK14M;3DXZ8v@CXIk zeg_JBe@04bE#PHKSkL)ed(c;W@UdG2;Gzj)o@mp*6tnK_SU>tZ>B*m46A9d^|EAy; z?Vt1$f98}qM%-Vt(Ej%qFUznQ!j9^*>sP)~zGB`6*K{Q!d5iz4mXF&j$X(rxhEU^G zuN)~&ha*!jDLkEqEN$JK=L=kge-&*b=6bW-`s2x_6+=5#C55w2H1#T%8KVzvM4#oY z@LXU|vsrHNpC1jL{ng?$vrv$gf7C{1_rc!{A`l$3qAujMaArKuEWvp74m$5Lao46Z zhjRNK$#s$Z@>tKFMu-j``LQFv9vjBd$yNoASqvz4M=TyNN&`7N-I_lA-P`D(F3@6` zc1#xg5}Xy_`Z#V}&42hc{e>6%`bU9nVA#tRt>Vbb-Mgp2I3N7zkyHE5fw$w$J$!-^ zY^k0uK6&k9~GiAixw%gbTjUA{;5mv?Q8p9 zq|otLoi?vg?!VL-zuDP?MUj;pZEC!b_hU}^%YJqf8NC6Kl?2jadby{4@{3R6ipksrt*IL3V`0HXYv^xF zohcI{dcM2R2dbi4x!sazAA4B{Yn-!RZGd|T{QjmkoqI!boc6- zYBJL1&U+~n>|<;Z>&;9D9>7#dU0jZbMkbtuh{=c*zZlIZPQ0<5#ej5TwP+J4<7g6)2}5u^ zB_0!NZT~hFv2p<&BLZrK=Td0CEZZXjeh~PWm*|N{tnARefe(E6?Qd-_+!Pp2O{}cE zKH-b7rZ-`L*xj{W@T?=8@CS^T+sPzA41Ok{2!s=E*E&Z8K1UVZS*?g2g^5;1M8bEW zPq3GmpDsS8WWdG{(IUj|XVUY+=K07U@TeGl?g2UIUz*z_e9pbk#^f9fUiRkG%OxAl z3}#K)cp(#I|MeoATvGKI+j6|@@AS6u7$hic?EkaOls#u`JpZy2-U6hxEkBd8ROOdR z9}dQF1jF-Q63aTI=?*3}wg6X$^6$g@kr*9yLa90Na}vn0BMcz`M#A06i52dpZ3mLm=6P%o6+)B> zqoK)B>|0y$6wvz~N@eZATzueG7d{0z$A&8UHbewhiJ)05f5_)4v(nTup7+WZ#uqXG zp;~}oWzTbHXfqK952J2h^5iI`U{ICh2Vwh3%eMYi7cBjOmqiE?u$1EfC^(NtP5Py97s7wu0esMz%WmM z^~PAg3KJ#>(vxzozJi!oJ?FU=&{3tiB9>Z3T%R6#NXAA19lux%q{xo3M%W(!$lkjx zE9f>@nvf|**4zJ}`VJpE|C#z-mg)!TV|IQMp>!hYjt{?INeXV65eNek@EA7w^q zwUXE+0PeJJ07)UYu{>cNqJ>+~E~xStB+!{sdunepbdpl*zN1(V#62nhnUVzfM9P)|Y;~OKv_XS18ou$-ceY?B09N z=e9g{))tJo+~$Du>AFsq^-9WWb2+69&2hi=5pCrJA3W0=ylT>&8ZT91O>Hu$U(RP( zLNV#Ji?mH4cYlKesVKj#5~lxK;#bf(4`y<0Rma z7qE6DnldMUWUh>qUj-G5&(~=4-j)YN+Cvc9e?qRtLm2aQ!-L|py|?_}K95e8)3S6J8DzopKoTfUWTkD9 zc)MX=@$=T6Rw(6_eMqMO(F@mJY~Uc3EWpMzbL=`a1tR@J%)B(G=idgM;5lSM4JZZn z;c7@j(|uc=VR~)LvlYYR3u5RMZq$G4z@zvVg4AD-{gzfD<#Vxi%A~0?Xvg&N*MQF8 zY4ne9#jF9H#3u!Dd2lN^d!C}I74;i0sy}HH8eG26FENAKgW`{3?ZW}z($G{Gi@1j9 z8D(FPlDyEYw^X6RKYP+YEzHXNf6}~4{z?84Bc82uVU{ghW^gpZs;a?(&kZnau*nLo)_r0vF z+{pDB&Y_qm3?DLbcylfqw8^t|q)G}2R+%Nqjv^CH*VpBY20_)z#Q^$QL`aaC(V)s2xmmwW9KG~E%(}t1$EgxXOlC?EsXMnvpbL@h<%gK_$nL1IiDaDdaaBS? z2N7=v?fwnfvs3Gt%(ZuV$l7xiLfc3Ekyl2>OmohHC+TO6lzNztne}evM?wSDHfuE@ zWq$|s?{8f=dAAC*lpz1U+vbK)Y%3a!9;LM+uPDkRL&Da0?FPSUmfiOlgc?*)3O$g3 z_U1F;JLgP7sTplDDG20_cuw`mL{=NpDNP_PPfOGY^D)VGd0u~$w@5E^ynI#Dz%Zgc zXj)C!0B}ZZzI2a=tVS9B=){kzKsrl`804sMh-Qf3^n`h5r(`4Rknu?0cLlcb3%4!CuxSBzR^cef- z9bq#tm#U_bHi~^BV`4OX2MHdevH;i6DjAImWo#p}nr#iVq{*jZ00d=u zEmDVyg0j5LI0e`Bn`)*}osiCF0QMvDCbY&=RkHkCCluY=W~{SHW9FZ!mPr1zOmwK0 zBy=*CzbxxD9AYkPpYO|TdRpMQLW0wD^4WWhe;rxnY5Gbpb7GGJ2?}lc_bZWS5PJU$ zVXRF~NsMaEt7c-%`u`JZ&bNelKuC@(xk%>3!6O?0j~2PGMvM!d4M4Bv-_)G5RMS%? zSGAr+IXWycB{n4V3$c>P;4z=z)tBd}d=j7|ID}}8e~VgTjbFn&tggm1UlrxVqyorM zLs9H?wfyt96|if(Vac;C6R^sTF`LVFMmgnro`3SO71*+*at#pBBD4n1ff#P|o;c2( zKE{jr!3dcH&GnGIXA^J8^di7`w0S!S^zZL1y3CB24tiSJu@Fg*XUZl~2B7kXh(^%C zHui#Bd$Dc7FR(e30%F_XUsAGB`BKVDS)hpA>$8mTHx|oMBYA6A}F3}w<$UUIRWutYL(d({o}KZ=x2 zm>bx(^IVcPz&8Mc<~Sv}3jXCTrq`dlP!7$tfuMD>)98oO_^> zlUjiSH&gn7OSrJy_5WX2x|CSu&dPeC{oE==TS;AiexwTRh44=4%$z=La*}oJ%cS1R z`3m9w#^VO4ecOKn0%0$Q-s(! zT5q~BL?26{X??Ce315KDO>K{zo3aUZ_Eh3)+iz}pR4Wy&>+~~AGTO))Lgoxbg-nuE zy<)EWB1#j%nL6x2l!Qbk+U=__emYe_^O$4m0*E=$%%Vv%rI}zXd_7s0$ZU%L_*7qx zAnSyI++TYJB*^&VAW;8N)~fZZL~dXN>hT(p3Nob!Qd}i5+-Re-0_AnE_BUZbAKZxW z6rq^->9NbL+9Nc2>==~)2GDNaVY%k-ib!1YC!|f-OOkEF(msyYEpmr~5DwMVR?u z@!4k}0v371R-npu_5sr6|4Z0zBvt1^AU%uC!T3{08ZGnZ_K zg$LuaQFo3AeO^TqHi=wnjvj+#!9^(5@6CpgM_GD<^-m*2+nHRGsaoNoX+3B{GD0oxsEUN&khjvFi@o@QsKpz@uNpI__$B>|4Wg~E zNbAe~Uo#EYDv1_uy)z(~UXXz7yG+@m=mLn$u7guRWb;{C`RUdbJOaI-uaK!%_`+RB z_h*kV-a+GikLl>JS!CunY;47C#CJGrLJFGrB5PLC(H=ALEF7ZUM{lfM^f3Ywm<8i2 zyP>S*Cl_M8Xb$*IZnQtleeG07SwF%RM9OcsY5nqnh`)&8?Mrr#yWZcRSC4@x<7}>f zfwYuBR5?usQ)zHUhOAC60^|}oM;T}5WO6}&nX;of)A0V>W$_0gz4>6RLbHG%(bzT= zSpu-ot{eRWS-_N&iL`3MDWWq2qCib>mc#-Gz_j5oK+m}^)09IajK(eT7r#(LoF?~j*{s#4;?bI&d0V^I#(?$&ey*G)>j9W`dhRiO%ny4|R zYJi8OCque^CqvRB-GMix0;q}My-qlfCIaM_k^*t&D`UuufK>0v&!tD8{}n~?kw5Qk z(+L{P=uTii(dt&OhlYkmW_Vi>8*RpLn&-SwCFL*s0;<RsG2=iC>NhBiP&qS;`Cn((6I9NBKM_!d z9()1OMqzmrMg_ZhmEsHdwJMo=jAYb93T3(6z&|_*vM@hHnin3%d8Zv*81Mxq z{A{hkvNE`+?VMokGY{1sP|{z^@eg-d!Hs)99r2K~ckXisSL>!tf9^H9W@UZR`B+cH zF%^Q|z16UZ&F{!}-7Q{C4_bLeT)zCgDA^^#neYR_>h4<)at1MbKe}7b?%QWm9Xi0i zhwpq6!LKft^L!uf35Q>qJX}>Ve-lb^jJw+-x4^LG7DSp6Kc(5091Z)ca+4Fd%^n}U z?|84r>Q21>JRp-RZ0f=F+9?Jnw|_|p#zC_4;Qh!g_>_UF%F4_x)kySw&F{zO@8ZK% zIUQ#mGIL_W>OEee==qhyoq1iM(93xz&+(Sk!`oM^2P%0}oUfUE?!9H^g0sR9D!Cq~ zNmov?IO5BULF5>wFqFy-=HYhB^UBHS-R3)JCq3hH#lS3yIiBCEIP~w|_0RJfZ@$=b6| z7_8h*Pf1rI1)L6}2!a-xU0eRBhC1{9S}zFkmT!Y$8h7W@yc zBi-WaIr-YEfn#6LvjhHl`w1$&IZEl>_1wFrnQ9)OQ>7SvUb=-{q%z=-;oJhwt()3i z;L!C30q$*$f`!cpo=Y~_>UCk~GxfQPBG2-`I*FyF%GU3ex|nb5<~+Bf?YKftQXEfc z%dbl1CQaW3y5hCIG!`K*>Y5HDlutB0(Ps6FFF*Ce%)E@`D-Sq&*AiiBrt7b#t9kF} zCZO~WRhqj5S^+poRmxv$ZuOY7-({Vi`jFzaE1q0%aA~wNxg2{kRj}#^6Q_X0auaOm znLfVLUk2{rd{Uu^R+`t(eQHCY(qq_ob~jhcM#1rcD1CkQnUSjHmeq3`Ge!FTx^ndC zHH#~2Y*;AX$(z~-4S<7W)T-l~<_w9s#NZT$0tCybjHhBr&SRVEeYVT7wp|-Of*M!c z@aTzLGn~IKISEWC46n)7vh|W&a^=m|q9e{Hws_eT=g<5p47qklaQg*epb(0cFT%LS zADK@DeV)`%R`1pwfVh*D&cB8M-6aD4QSvwbFlYH-;6i7xVkgcbP*T_z4pM&R_0{)x zt~8ON`gaX0k3H?Aar4KmE(0!jTCS|u>cTXe4fhD&Q!t4AIWeMD?!Nt6wMRMb{+mB#k*f2DlwK4}_I>MObyh8Ny31PoDEn zKfP_r8y%J-w-x+N7A{)-=d*py98}wS^_9fI4>y|rBo99Qa00@i5@$WH?VY*=+vL4O zYmJXpE6*f*KkA1*~-0#5|{r_o@_&cl$@3VVY%bgwkEXz4oq)nFw^CI#P!7T zca=kFWzBa&TU9=s;fq5UTev}bGmuzgF`-?3n~h-Tv69oxFF@1ZcQ{02DGm|j_j?oT z!rRYJDY8r)CowF}RGh9QQf-Cmwmz>|V&r|p$-Xluem!}<_&mm1Dr1?X{A7zDN!ISw{z3{B^TCjShgQGV(@;9d`J#YR- z4w%g&vqBt0cFyWglx-?V(ySss`fa^F`SH|dBn& z6AjvC)^h8VKRSBUGLq*E=OzrbqI@?}y!1V8wiv`{^wtEVSTMw{O3t-IHt7{8JVY|Q z>Kmb2q1eXfFHWXRgHv@+@A|6T@#FXw!rWYI2n7F(Mt?87_wW2qc+6L_nrmwaS`Z!qBPuTo;0HN7ZzmTZ?SW?2Y=slM<*$E^YNitbM*s=0#xM}VOaw-3Ct3c!nN;b`NWC|Fx6O`8l+ zTL=S>6OIj23~~5i5lQ)f1LLgo7h*G;`*8Xa!t&?Y_iSaF@`R^mmtX37&0TqZI;Z#7 zx@`?)gBy4lA#G#@CyQW_f#&6dOWPqF$qO#_bnO~>pAT7`MP9ob%(27eRXxt--~KS_ zl8(j6-{R6uje9nMr&T`x&0PUZ{lw+CU>FdZ`Z^yYPDJp9`~&}Ad$j4>PJ+mYvi{`F zOjVBfoJGFMQUyQe+;~&J^}X48UbpGI7Uce`vTNNZDtbfTXH2zTzU^i7|2J&kipS`$EU$)7I zzDr!+{4K|G+(}2WouGh20$8E;U%GKw$?576|4l4?VDQxQs$y1`Ah)N{a-q)2+5EhD zx^d|?_Xm?8>y#_e-M<8=6V+>stw=dpL%HTgKu0n4O;jp z#kLRHo+8iw4*0p248L0_R=DC(jqE=;mIJS>;JV(&Ba^CEz>+Ruoa)D>VaQwcgSm%@@XN7 zg!AF4ynlmfwr#rv3neak<2l2LeTi7)_!6l|SW!G>c>vE*qEkb2!oj$fb;B2{p6S7) z=cHPONzAPmH4SQy(k88RFAVOzan(l$-{W&RmNgM^HCj=z4?8`2ytH!`#aVSk*K{X|>%X04p6|D8i`e>7|HMWu(D^({lTQi3iGSJ+`a107mi+o< zuu$PJvgUEN1FLxC@O9C}@|{Xws@Gst;%5-E{O}yN7vjGWA`NA`*T2$M_bJt}2BY4Z z4jto$DQH(}-!(PCbAUVOeM^hnK!M?XO3~Qzu zqhQF;>XU0Dy(H#lGhwtDUtJaF7`|?t{^4UztUg7hrsTjFO{q5ZWVq!^$qSBQb*mPk zJ62-VDH2G9-=)Q)RBu`#++nA5cHyO=+?R>fq?e97pRr&om1Sf~+d`)9#=?7H`=;vg z{6!jRr#1lvglQ393W{@sSY8|N&#|4s`=8u@wx-z}<;=-{HBQgJ48H|9Qp!y!8*hKk zgyJWEm%i*WzsNaW*D(uE>V6ec2snHiZWA9%9a~c9lcI?5ABi;x#Ff z1Z>q9*FOn566_H2>&7+{S1DztBn^g_My#_|*5CH4ZGX$Owd|3*#eEc5O@|zu)?z1q zHFcVA=C@ZR5I!_Va1b1?PAR2bQjX7DR;Z_tsE=X79cpV%PF^4Th%2Ez`8kTwJBO)Y zucaLgQk!C?MMZG3l|Q~If&lMQaQmj2#LkCnSDki zCKo6js=vEEKl5u6wjHcsOJZB!ccf=uH-Dj>?8V!|jgT{bmFqFN6!p?MVF7M)dZo0lK)P2SjxrCWJN2htryyESgv_enO5EAnSR=Hq$^ol&A^ zTWVVVCysBF2ChUWJt|GMzzme@=DHfmCtF592RJVuvFNBlH9kXGs_CNy{Rp0j!Tdc* zqgS5JevvRApWZz89;M$`-Yqx`Tb0Pn`0+@~V5J1_UY6d$itKpn^;;RBTlL4!N6#5) z#8^2Rc&9kDkZkvxjZk3?%DM0&Ebx%w(qU zlRhG)(Y~E1jxa_%7~JO{vC3%SLlh^^FCT?egHba}y9bV86REtf_Ox8xW+Ls_<(pse ztY9ObVL9yCEP(Cq`X*r98^nuJnUH`G*K4E7LPQ$jOY=xF-l?2xKetfye5>^O7F-8O+U%Kn|=O7FTKF* zxt(+4d!S;@B5uxCQbsPf1#(IgV&t%FEHSb{uWvwDgnyH#TVfL%xUm^~HH_(#(~0IT zx*ZCdR=wRI+*)_{42t`LwThmmvF>M~!<27;p{Mbp!GN!cecf)z$%2jsKyOMuOp0KX z=_IY>;3v3h;s}c>`&w%1j@n^C(P5(mV&qJyZP_);$`wWWuw)Wucvv+JTNox1BZUT* z>Tt+ZB0=WPA!K#2IsDzcBm=@o zdg`>dz;8akn*elPu+lWS{Rqk7}LhAkHl zow5Vh`iqFJbD>)JkAKIu0}kb#?;xEWar_1HB_~|?}?ou z$g(YJ2lYp;5c`SBW(w+f0TKY`crys(EE?ow-tMT_d0U%~#Ad^ds#P@|9*nuUw|>H6 zhc}-5YT95@jmsS2{xzbm9i23yJ}RGSJiPzkui_0F+SoLB*>NtcZYP2I1(-a9gKM3o z{ANDZhm)&JUcGpONiZ%QZprMG>TMlcY|nzxRM#Fu6x)Y-kEm_-{&+Dw+?W9#e!*&| z4Q<$iXoE6q%q|`$+A3*->SQ$4HqnVMhF_S2xG)Ag2Lhw0^bH*&AQxDiiYuo`STt3? z(_Z4vkzVoYJyMyx5?pMI{J2lMk^b8I>+l`jx9R%xAwj< z4!oc`^ARQOlj#bCztgsrc7Ftr8a&%g)egraE+=N;RtTACd@!bHHggaNymr;!(^=Sv%bq7%}%vS?=p~v`>T2Ht7Uz=lY z8VQZG`2>5B0YS?3(4}wG)$o@gQM_dWd<94_n(ZyPZZL`$@4vl*cd5GQu}E4yw5Oe1 z#+ebU{PeOfoG(m9bs*zR75E9-Wfz`t<`!Fi+9FP9s9ky<#k+NrGOilgOJp#*cV6B( zbp4e4Ad1HbE+!b(5=O2=;Be+Kl2R-*L&k=S{LPgna4qV)t_V+H%g@7s7;0#L1+CwX z7&=V9;pXeV#6uUAddZoiHw2OPkY*wKTF`E4Dd%2dyWvG%U|FZNVpMDuta*OyFsBl( z$(K_(qAWl1R@op^6URHnx)jtfM>5eJriUK;7*P>yv-G#QB~-~kIbr5|1&O9X7n>WV zix8M-4iPv{^O^K*(KeWZ@~iDui+wJ~BJN);V>HZ^8n9YV&5%uqs3tuE#I3wMf* zo5a=xJO8;A1lu)(o`4FhRyXtu`CN16=LNE`HS=H*6TlJahV!&<>&)_jpxypcTCWV7 z!ZVNmpOCB_t%c>zRm6c0i&niy-#&`1y>*5KqwTkT21A;sZM&eLCJt=z<^NX+_Fd4^ zAOA1by$3-zz92g=hE>!N+_nXB%)wJG<_~M9e1UpFKxqfQv*+aJvD4w^Z#?5Y%g~qR zYzO6Lg3Q1s%^(Z#W%M@Ei3v>;aB0uX)R~rD3)|+(TkawJlX1qz)dvci6tMx&$)wKT z%)O4nqHR!;1U(68=0p$ADD+;7L!c~Np%^PeWwXKm#w~b6dCcTIB;jajuee4ykM#zB z8Et|DDu0i|87ynI!M`=8f(3&mP_^6aqac|`rC`SZYDaL4^cp`;%PVdH9#(}?fvql( zI~JgtQT&gLq*TCr-(d=ReL7<5kl#08$}NN~M#oMXTy3!_Y0R|i65~*9DX}PN%7ixf z(d!XNsDP%qc2Pns7KDjw9@(snYtek!64x@)RgA^f!p?2@eoHuJw~XY+2B3CSa$4cf z6dVK_UEK=>Cpv7_K(eybS^8#)nME{KONu0vD9 zZB1}UJS`jbFDj;OL`YIE%Zo!Io_LUJ6SToq@9YK3El0uqgne>Ik<{Kf(3}DD%)QcJ zfo@jHtYHc9lgxk$odJk;E0uT75n=#4adoi6R&o#wn|tI1_Q{At-FjrVXjW(!3ZxMS ztqGh3+08-!`RG)m-_L4Ix3wDihEr&uJPV{{@F20o0Hj zE0A8MH&1LMycUQAF;4Ix8%$%qth1G3&GS?c@ExyyroL59!^lze3zTN3Mmi)^wUmF0 zB(6~t5WL2(57Vqh-@=s42z-?9cd)$pqcG~&Q5F=wS9g83ExSi=3sG6Bz+db>2hB{$braE`iNZhR6}a zO&fVPwAdDQjfJMqB6lW*Ex_WT9_Jc@bHtW|Jb{_=C_2k%FxpV*dU^+G?l80sRZs)A zo4;jNy>=PVHZ&aU1D6>A8tOrfGqLrzY$$0CKy_8MzD(b!yrBuC*t~1MsL~wRlKnPA zN?YE+YnK@yhB>%(JAa8MP_;1U{SiWNib-|qyY>!vG_|U;T{e1?z3CHZndl9>FgUqq#c2yF) z=R(AMVWBBe8H7l9(r;qQEZo)zgXL}&s9&nSMor7w9Ejw?*E;tu5Rj4(l602+F!B(jWpu zL*<5Q7f%=yOiaL4JcQ2ZV%*VjB*=(u@S(L@OpUL9 zsVT?7`iGfn-4Tks9f0F47yERs8Zo6e((kfZN5L zC212wK*uBExC19aLK8IEhL&wEUf)AvZ3AqnN>l1PvK?7{rrC~^knVhm9BoHFjdhr> z_L?&AI6ilN{=qZ>D_M^EyYG*X{9(bCblMt)$mcg5m#cH#z)I3j%Cme2lm^lH@%UxG z0=W$!0VKa)cQ8?5uVCI+ICQR@29V;_nYs=rsET));x@<}@cC^9Wwp?vcCB)%f%4UAYD}veg7|hZmIWyMZaeM`Y;F|q5nc*yhMd}*&NKu1ve$B8I zN%yODQ95VZSjuHo4aNXPAa7)NiZLI(e+r!SOh%|_ka0PxKRzw~^i z@XKUXOzlM@H#GfCXmYM6K)z6D>xHr@lDfP5GNHP(deiK{M>u06orj;1vq$O(+fj1x zpszQdn96?;%-g$w1z^q&>Z+CsW3NQ7AwHf(`Cs(@r`%yY>JYFFZK06jpFl)46n6_@ ziS<^r7qYATy4C_vU>-*O?u@2MS1jVJfDf|8@#6gra+n{Zf1M%HYs0%U{aO#b@JuP= zTVK}Uvp@Wmn!BT%6{L2NL0bv@6{MW612L0tqqn@j|IK=x;j_+P^U^rA64Y$pRajpM zD*S%ix4?w1se}>v9W~&-F^KMP3gE1t{Z&{AjWLWes(p|uM79J-Ix}K>rPvJzx2&8} z8hrWf;M6jEU0)8p7Urykr#6@JLf<$Py?JH)6`XEoaJW`m2%#l3~u039K}-D&p5U@D_=dDEn?5=kY(rL!CT z`CBE(_b&D4=X#bZUUK8uqs321-XfZfN(a(^R-iwbI!Dhk?b^Ld?!6MUnjTW)E|M%T zW$t{_XDP3aRTF!=Cy0Zfck4$CDt`9poBKVX?s>e2g?n@u2Ggx5_poD>S2-OtwulXD ztzsT7TILy82BDOP38g_|jaRJn8kYxrcb<$@Yr%xuIw_iWKOXe-JxqRcWn^&?*9tvE zKU@xF+)Nh^A4NBaWjyc<{<)vGoNWy{wJWu}tz~Vz;Kqn}`-M*P;$uU$lX;0QMGtc9UybW?@aZlOdRy?EoJF4yYR?2tw0kiyY z=C|JfhU2Cr+Z3)%N!B=)-}XC?&s$i3U;n*Ek?Um}H6iosREpnFy#CglVsqIoJajoi zg*`Xpa<(kNB0-MnYxo&)GK-Y^z8`sT>?e23v*W`{B3Mjhmi{73LBA!sr!{#F->_t> z@w7aqCA?;<;`6S=nT$XGheYO~IkL9G)=RyV#`d{6c0h5B^$>fDUD-@#UrPDR-4{h# zoLz1yAMZCi=dawt@uLwPQiS&nZRukx*A71xw^Scq^qgGthnh&mT=?VYe%3rMZt+S) zv&S3uo?vqcefi+WWb~D#*?1x-af%gwT<|Pd{uQWu^aO0D@nd-_mIFzCcc(!= z>x8V~m$!ek#l`jw+|1)Wu6TQOSOfWG(LUW!rpkqJptp9F*Jr4|(5cRr#B~6Uz>4d`nt@1)2mQ zd7?3~;<|GbSEzV$(`+Hmr0W3OZ$PX#^NYW_Lt|iRsA(+zzn%nr^Z~qohEUn1L6!b- z#TaFxnf%{&%c9kDOcdVa`_u_9(k&t?kLl(s=#YHw2PJZujqC~R_6y4UprcBPb089} zH>5FVtutg&$Qbh;lYMhcMHMz}D1CS;a*5gaQ1qq0K7Ex{o6Y80)J5cLaW@xSq|n92 zts}Aa(<>Qkky^AJeP#1Y!)?W(O3xIf6G_5i5t)3mFGvru%M@1a=&waBpMoS|r_w## z{{AbZJ$P;k69l>eNp-}PEGxeQg0-CH!lUbArlT02J~s{W*ZO1Iqp<>3bq`9!jD)if zkkv_qgrMW5A~t(oAZerd61}v_-lqp@H@!95p8Na`Pg`25(@;sm2mpY5NqbT5Wm(jr zx1D_M!YcD^YZa%&CdNoNb<+?&ApI3+BVAssBZiRUET zQN}m*eg-NM@@nKyFR}<{$k1!NMRu>eL;B^35;eGXCm&}d8TQ%4C^6A1EMHiMBU@f^ z@|$yMU#k*wcL}f!OL*d3E(s^-s+*&aN|eL?oQl^Vrf58qhu1POo0y zc~LRWwRhIk*oPbI_u*KVl2@=^Qf_;plS)#Vslkx>xy6__oLXv-$SL5ua-BG~b)2WA zFD7a#Jh1yW!MveWgFUkoqfG12VstZKHq2e>*xIkiMdR_D(L?8%)!gp-Uw7yEjlag+ z4!JRNeHGs{eTP3SSVg|EYaO1nG^dRK*%@cNsvm2XQ>qZzUM4SB_Qco^nnp~CyJv~6 z7x(p5oZzvJw0Re1GuSaoePHC}85+MDwQExz79r|>7x@n3fJ}r4BE41nY#ytnv!Ism zAN`zphRJ66U~k60v}zFoGQuWUHOS7+Td-a#I24^uTeeEny z+Q0tN(WUR(Rwd{oRxrh=*CAk}VSGW930OO8Un&1uEjwj+aYpLgM_B{leNk1G4roz| z{SPUG9@&+=k2E`M^Hu*GUkv&}?>#l5#D)CqQ^adGZOE;j>($KrBKvIrxqG6$C^Cog zm}I13P*SnD+GOo);EkguSUp#tq0iZS&F^O?pox$4*2RoYJ$K?x%stxi@CWe@*fo)# z2KjkM7~bfxN%L+B7P7wibh8-znb&(fyrr>T<-Qteg6MaA(eR5ywrM zvXSg~JdcL6Avhp@(0@+{EQ*e0cT^tb?q3r@^J?eF52R0@%-pYAspbGE3eyAF9{qTh z54L0ZO7%Ygl0a?0OYpY5D`m_LTQy^3bH=QdK`!;r3G;&~zN0#4%pkl;$f}l#ri?lE zk`iWA6TO=N%^5SC8n&NlPM9y5Z8CcAZ^ArLPJwmm{wB=W%gB;tELcjIbp(N^-=6x- znA5J9Qf4NFamvhQ;GdisVkp(OsgyM{ON-NH_NV8x87#f}yo(ISSu+Qlm^7z-eM*`y z)Pt5)6QEf$kxqWe+$2HE9T*q%v%bhOij8C%M<)r?5yvfk!95G4Xe>& zXt{xFJ0(4_c^HD!3G&4;(gHCKj&!9m- zMWOC+)HtNjYGHGV+X!rCGASj{$aY{T>Iq`ZpFuW!&UlL1GnRM>8(uL?*)#aH0HUw{ zO`Z|LLa8X{&hnvU-IQp*c>bI_!)yIPMcn)*&y19C>Re$+*>TF#KdCdZDLHZG@-5Dr zeR5~rH%MG^;P#U|%dNe1lQ8EBX@#APaqf&|^?p4y+K{u1k7;tAlsn_7?2!;* z1~rsBOWY~P;Ee;>{(v@168Tl4i_kUE?P$_xBMY{hGYT8YWc#=P&ZhD z6wfDle!z*4b?1G4NS+G{!|rKRWJ;dpIvhVs#`=7cXVi=#Gw^4Rx$}dQ_gmI`J8q)f zIgOu~JL4HpjcH$xa%WV8JzHWuCeIHlx9)3a<1u;06qb(2(Al}Oth#_&SHakCs5qy@ z8Te^a-_RctX9y`cc*=P*%8O)Vd!CvY89{`C)8>go<)?aC7N^au2*Fu%hH@!umVx(T zOJ%DdWzERDWG;>Fyo-yaBqZY;dxfI388fonZgI(JbL|+;9pz`=v{_Q&7w3(hAyL|l zg(!FzbKWfXhhmApR!W<1l*&tds?QH;Ga@kX8b`1wZ7#TlET;EQX){WvP+$4{ls2Qv zf6L8r(kug~qQ2mM?r+juz&)9MvO+m?LD9&)cg_iRh6h(WV74XA1xh>Hl7eApwX{ZA z`1~+5a#1kD&g!s?Q(^mr1UsX!5AV#kAq+c9(t$s0naJ^$uW>@=crz6s3nByCtH=gaP%n$5|q3$nG2-;@`v> z2n{M+ALIHE=8O{ue8Ttsq|Ir^6cJ}eH#uv@wsk;SCS=V>rBMSnZ5j~d%nJym&2+5F zkh84JQ1L3`n>EV{c$X7cIBVvfFy?$AT0QhSU-2T(L*0!>@~|Gb#jUpR?xsjh%94u>UaGtdB8eP6H*S%tJ6 zfJ@EzQ7Lbhly(+3D(AdeG8dTN%^$MnTcvniw41YLj5~~r_7m1D<6JUA`9$wGYX%`1 z^Tk4OCNhU3g+ycqKXS+e*+Wp$d_xE7hz5VK<{RV2Hh!EmLuDJ2h8JKwuX?jeW3yNn45W63eX5^gnLX>_!S+h!E zNq+NF(ya0o*!bE>xFgL#GaiU=)gQ9v37poYy*O!xQp+BpoH9d4N0O#Ceqd@q-vAlS zuq2gJW+r8G#(YEbYI9>LW5&8$&%o!58TH|ZP{bLt3^gRMPW|PK8RY~LhOQrY8VOHM z8FPWDyF=6wYtH=Zm@*@E!I#+ZbM)wmZfcA6YR$qlrDq7zJ0McTULQ4cdDXf8ME`= zekPnNS2)&hu_n%yFN98D7|$nJmWP{wnHDlYxiX%+ZmV!km9gn7*Zd(-E_z?rrJ+Q5 zPSpZ&9ZX7;i`by>-ZyF)bu#FsdM@$~eacjnV;Y9j4I5e8=A|mUYPu`S(BIQvJ98 zn|!N3i&cd`Es`)=*Ps4z!Hu6f@()+O`qTZl@WlW0EwPkzd(i!taX$7x-UCP=dk6f_ zzk2_nF0j@C|I2Uoz+U_M^7}8hDoRKe^b6(Z>%FfI_@96E{_C|{2mCKT^x$7mpm?yx z%6cnZkYw>?k3TckwUZY5ba~ z#)*|DK>x!-#)I;2#>()NYiwRP9{;tap(-QS6&k1yvFUgEg2TrpR-U_ZT7Gp9Tqk1x z$``@C`HN5=e)WrJU*Z?xu6)19zYs@<+GHpiSpQ(V{1+(vFmnArQ!ImTBT3~84L>OH z{-3Irk!}N7`hrXy8=`+zF600HzoKO8FYG1$U;poL*Z<{OB0jRU`18MndxqY`|3szj z01$$M{pao~0U;Z0$av(gRQbOJ^Z)IC{eS#F|M&mn(;s+TKh~fB!5g??l=H~$V!(}M zDQ*G||LBrrHIM)AQu7$Uq~?LkWH$u-38D9=A5%1{;PK8u1ERpykB~fu00hJ#Oi}x!ByYMPFu^4gCQ0BE7ih zdbIagvEaIflJHfCEpt#t1+=)Td>YtR$dgRANH@%0nlLz@04<{ z!T>bg$Abl)E2nz!mam8Nh6^78&)al!zOHKEAFn|QhmQe#uk_W{5p8sk!f)h}8!g3c zv_Pu&8C^alOhZtFuz1n8jG}!+0au*E(vUyln9l|&nq)xLYBzh%;RRfH=6EiEc-kiO zKt{(irO&udK0{e2bZCOp5Wv(wu>AqAyQ~j3FXfJ}K?-3T9IDOLRP@AS4N??$-p^}q zcmjXJVYYl(Tm|o#r>~a$-&kCkV01)!Zk&uxg-aNuhkl*1vqS*GNV@0Ba!8`VG7TMt-g(> z0Oe8!OJ+<~qNY_#<<_+aSdW%Ioe_wr|uf$W1i^x*weFStP}~ zEq%yGUY(P+eNLlqVk`CBK;JMnbc}+y1s2j8HV^z*ERd?R(X4Zk7jEd=%oRs*F9==B z1Fd@vJ>6Mj6z)tH>MLGr+Wso~jpw)*|NF*4?t7gfdSpdzoaDN&bneFc*LvqVK)dSq zf_H*8Wh8VPp*O&`=k@miVnXpa3YjQFzqL&lG8>~XfsqBPyw(QW-q!~yeG*9lD{3%x zjLKI9klYpayP*l-I4B~KOCPVMw|XE&kV5gNg4#D^HXI^_xl%y^fekh-{_{Y3L&^WL zGw@rh2`rEz3xIUgvmzBLFuF%l7(hXT*Sr7dd6kXP`^e_pCE_3Vg@zF%)MaubLic7m-=Ig0%i3PSl@uGnhGf3_Xl--F|fhfp496{PDBLE${NEY14jl8)=Tg;mYkGDXT5*2*KGnjIWV2WZ@Lt*&728?;XJxI} z5UoS~%lchcTRj#iX~lz?+O<uWAg2W>4^Lnn;R@C-n4O46gKWLF`b|<2@CSzmm17Mj}YY3z8h@3W&P`0oW(HqNI1GmxJ-kphp z(>3jM-Qautn{2LTvAH}zd+<1l-bs}1>r0M$&a`paC42g^Bq89GR!%Ak&h%r&b!d7| zDmv68Yw<&1p*B4gy^)d`fPkiI4Bv_8ynPU`b_o>N^-EQms#OMY+-HJn86G?bqh z+>gDV2QA+Q>tH=9mfFe_dX=+>ZT#ubY9F-5zmPQSn(5@NcXc%ue)W-;g$)!x; zwq_4_B_|DqIER~@!Xj-un&37AXv4~`z~Fg941Hml^4Mj%`LF>BP-|OCqsbNg^_iBf z$GU2$qsiXS%l`WDZ!9~aO)=1wv&(L2l`6pot?on=5P|IVibY?PtnO44oRejuS*-2d zxoE>*mLC|}pgp>iQMjqz*RY)f4AT0}MzQLERJooGwB((QRuoUj6RouhB(?6 zBWl!zrq}aP_{-d7ha=VE@j!|-62yvYtbV-eW@5k-Or>Un2sc$atJoW7`X#ief zq}KMlA>dUF(I6aTz)M74VFo7y)Qouuc!h0Sf7X`b4Q91R;RGiG5p43+ z7NA!+;caGTf?ff$gAjf{&j)%{U%s90IP{8MO#g?Cy2AZWma+=-wLb}VZCZDCjYan* z*cI+#eG4cM>;Ia1#a2<2X@8Ozc4iVg7PEo3WLIV_Hl%} z>UH;YAUB|{xLY|pLxx=uge0AT)$*T&yQ+uc1}+$Pg%%t9fLA{v?ux5`pV?-EaaYyv zn2N9bNw{lM{Z^MKXWUg?wcK%!a93P))EgOhRf&7>9#+$VUGb{s#-<2#g(#DZ^0h-H z(6y;?Tmzf>PsUs!baaDmygpe3U2(6m9a0^1RrOL378h`29FIU(T!f0Br+-0L@Xc?i!Tf-_0_QXC>Yog|s!sdZ#}I_O z;yUj}1YKWcE%xC6X#`!N_ z#TYxMI}Ep~CNnAs7hD+e))!(gvX$ryIE{E~j5Cb3s`|SM^*9oH;8xZ6>yPcx32jZ6 zEw~kZ+x6Ovw(@`>v=vvu7roU#8El1=&Xyx$uvPWhW#6-wX+m51D-zfW{W{4(^t&an z6$`lRwW@)O1hzu=s!vNY8EnOvmT*%H$&PTV286A&%5bX+6C#qX?Iq!@h`HD<*+!87 z*EFgLaYb#KEYox43yiqpI!Gw2UJ~M}u8Y@j3^W3+csSXN`tFPXSCyOWG8NauMZ6XD zL@4MqOfv$m>9Y~yn)(m__f9t6WVHafP-7w5nE11YA{9 z5Bw(WJ>ji*A)5-pa4VKe`NJ5iY2mHNkzUv9C%9E(3O3WPVX6^tMH!pyX;B{hC*iGX zu6~ZYBHpUIG`z~TI)3n0-0X$q?Q?(dR)ovvXS`Jr5~!*zSd9Qzj2a1EhSNp7Ra3S1 zTBqZLw(9RaxACqBZN){hPkxqEF{7=Vh(x$mo!wuDJP2*Yz2uj>F^LFnZCX-1>f)FX z+=_lkjx4uZpC#h0cvCRt?cEUEfVk?;>YR~Bz%^||BjSpVs2cQKkv>AM_|W%O$|S^9 zH=8n5ESV?76_-tSK-fb?Ll_`wF%u(c3H$Q9i{>3~J%h`8daat^yA;0oMeK-zeLixF={6HKY0 zZ~7#YM{<(ugSX-xKV9qB{v^B=O%-Y9v!K|3w*t+P<;{#hBHoINWU@$?3}g;? zE3PW%%pk(84SE3BB9v7w7P;Wq767SPKpLT~z_03o$(2ohVQU4soWEO8@b7C3Gwg~S zW}Q6zKzHrWAypCTdLuuVh`P9#On2?TfJ{J_*{*;~Wgd*j@z{g97F1k5&KD)n6)zha z(QC+ClbXV+Nz>@v2UG*wS{1@kvFjwGe zGPEUQ{IXpWN8=SuA-*fN4>H8pn#Xk41ZzaTD`t|UUN#?@@Crd8 z2&ZasFY{d)3?aHJcAQ%pf!VIG%7G550Y^@ErA-#oT^Xw(x+|`d(RCRYllZQ=EfQX7 z<4Am0^}v$Brt3fRU4hNWGGRPpqPz00f%&fLIX5s0zI<1??%4!NV!OV&2+L^Mm~6mZ zsrN*8(#%3ydsLo_QUY$1ipqD!PqOob_sk%A|i34 zEQpf8SBWC{Hk}8->mZkzowrg{55ZX41ndn69SvyWZ%vD(KWLJ~W}QdO)<5C<%p4U{*w7 zS0477_ZOkC+7Ih*0%390yKRvOhfV7<0kP>2hLG5_@r+1p?nppl)60)YtTstpXvR2> zNGuFQ$Aq%5?^^T6Be64Nx)*YNkYTpjNJgn=8h8} zQ7j`Co8NoJV!Nz}j++K7Ha%H{V$&CiNG!(`0%Ft0ia2bFQUt_m+k~uDceHgQv1#~5 zAU31S0fMR<8==>;1QwNG$A4sn;*@fSk3GYvp7PrIg&;! zwyD2{7ibX{iza!Y)mRJ!#%d&;<$3JPBA~GuzKLioE}Mto9?{tRrXm{KR4i8ol0NKL z#m=^O8=M5CEAQp0zVDBsxnSfYuqXN;EfY?VZW$U}56Ctt4Tcww41C)SR zg2EVy1%SIfzY-FQ45!_mPZ1JZf>vurVhaMc%pp4fBqa92D70 zyWnp5dRxR|fsl+JxUcxd3kB*np9zeGD!-bN)rG1?G!}`z>_Dv`JE5^S%&F$rr(i4) ze5V5bf@ekIzsh5@bw=<(VjBu2=d^t# zs+F)45)1qqI)mc}Bo>>T;Zk^v#1^2fGNViTBC!Q7KD)Gqp;)zBkPx{h2@_zKB&63V z6Bdi6DOuX{0|6Fqq?igm^Is9R+B6^4#DB$t>r#G+{|Yg{VJhZ{{tDTL&0kOaS4|@= z>=ONz4 zM;~R=Tn`1710g}N+Wjs8s2Q0xQef3Od3c?B#9}c8C3ZRifjO`kaIzT9%W&EN#-ilY*xY6~EJlEgco!>(I4tGKgu>#tw%`hbu>8D?!s0R*@ZAfb4Jd4C zi6AV!cLrheBSjFFJ~D%_JdYWL<+~9I%Y7simKJnIVQCyP2um@5G1$};G1%050%19N zF$zl&ia}V2oy=ycH3Y)a5FiLP^)Mo^$lc_#7Vlw%U^(D021`N3Fj&fL7=ukOf-qQq z>jc44d}0VTH3bBg11}@6>7^3{%VCW%*xVLDSpHaq!4@E)@*f(CK#4?7YxIuFdJc5&LA0vrTI)Ktcno5n-fha zEP^6D0PDgP35Df2ODHUpi5P|D0Zt$+uYC-{e%lTT%b$}#SPlmS!gA0d5SEMi7=@)& zoKe`K#?|jvgFsuZvb7utgyn3DQP=`}6sCUbsR@Qn1A%Z@ej|p%7B$^AvJB&}1#Hyb zT{9rUumwCySwanjAs`mDl6cX^*^NLfzukz#V!l8D#%Pp;#HL9>NG#q3?2#^G(?%qg z5-LVw^DB%{EbY`8iN$4bKAj65jYuq4h%ywbT5m?eB_I}#kdKT1GZ2f1e$^Lf0m2cA zMZknKzrkaK#maT^?_NScP;BBi5*CZgaI^U*L9vjxD{lY5P%OTgblMeo2#i%ZveA}x zG-I)41kch0#ez)RcO`>^v5?V|ot}|z7>&h9lxbIuyG?K`>VV}bUQ;|EG#0Mw%?o50 zjfHIEQHY6fES?G~{^JYB;s@*WatcOcd9n~33mrX)TduJX;n;jxgkx7K=QO57jP0n6 zoCeer9Lp;$qp<@LtaTGy366!#R(q!LIT((GLzTO`Cp31znb2#7m=+7N_}i9QdBS2r za~@v#L0Bw2OJ${Xi50?PQxjpaMB_|YEF>11l}98f7IdK3bqo^}3(Ebl%C!Z>!f|Vk z+W)qk@qdvQ+hB#eh|M237Q=Se4kb7irx~x&xfzay8_j!pJsRP$7X)og`yc_bTInG_ zusp(82o}7;_BztZIJ`{-X{EZY7g7#54zjdG;-{xV`^5o>*`!Z0HiU?Z?cd$~l3 z9l&vVnJ)9X39(qY+m;4nLah8?gRp^#HV`8gX+RCM-AIX581+>2M@p>xW!_$5vl+1i z*{@Sfm=UYaKD9c1H8Nr!)N5Q$F=0k57O-neIS?Thcp-$`9up1-j9A!PZ<`xt#7-14 z-cHFRMy!1Nz4K2vtR`9VlIj+pz^Y(x$|S?Ldq)ul+J&(aEwaQkfBp)KXH3VJZv6h{Y&E z?e16@ZD7Poi=QG89Txs}<50bc4=Z<)Pqq~zh!5NGPGzw$^$;S&!rks|#j$f^#PS#= zLM(>Ra1H|#V&S6q90DaVVr5j0x%moAiG{Jzdl;0F5M z&m>9yyD}5jBp5LF+)895OCUFr{9x0WNR|MX;Sl8d$P!@SNQc`Z43I2=?(KFB8_5#j zUhOb!qbdR3`Z$V{BugNdUE@%eNS6SHlnyl|FgC4lEKD#|A>V7+NSgps@%Pc+C2<1z z0Hx_T`jg;T9g1@^dP$rB-?<;jOj0M{p~&(Ch#|L|&ayfI#>bX^B5?x#Xe3S`7maeX zdr6*v0uQSbq)|um1lU_&@8iM&s!lL~U=H(0XLSPH1qOii1IMOUOX>tzbl)wRO6ml- z3N^_lIv3RmaIbBl%jyLAswf3JG!g36VcaNBkh&k`3E+N;B9R~D3GhkAkBnG#EV#Y$ zi^T~LWb4+QC2fL%M0i)#k~D!_^~@uHOVR|=#ZfjdjHC(DCnjwIa#dhy0*ApV)iv@&pNj9~% zW-LyCoHg1RJ6fVNJGa0%i4$-@CvgHK=J(+Mk~jgcR#BTko@>Gl zWl^R{njp<}5+{(G$=3Qc5QD@C27E>i88wO%aD+2)0-h$M1&ep|Y`P(76AZXf@9Joh zf<<6P{g7#}Mk!cqJ)cu=9kpQ7$0sdV`3rImlVK+<*z`zIn*cAOTsUKJeD;XJ;y=Xp z*aS043^sj8QiJ8sMfwEt8?wvnt$z5hI#u3Hr6e`jiL7>0Gf54W7dTRb5*S5EfhFd&A~Y5Ej4pcriQc!QxBe$sItBda$|oQ4bcT zuPC!v`Uz1D7LoZa#k@yY4OT|V?EBE0#9;ABP%dca86*ZP?|pPhDQt3*8Y~`QZvH3B z!D7(?jeUOQV5gcn?~_-OgO#Cj-{x+{VzB54fOso*BQ@BG-7glQ45Ik zupIO7r&W-L)?f13{i!4Wv|XM(-G2*D{7>IfhV%B>-GBK_m)VX4+B)EW{?+?yH1Q7j zUw*R(_S(&1+5hsJKDX<=uMYU1fA#+BwOa@LFMrEtS3*C|NN&_lj(^l=w=N}Wtk*Jj z{z;!*3A964|HC83WAbl?%J7tuk8YCNZ>*+rom_*2-L^ncD~mv8fr+3cp<{4JZ^ z|B;dH{Z<@tYK?LITSm73`QM*kF|utqEsy+#VvtFWZ1O<0O76e54h@Ipo4of2dK!owVJ6fI%7(ak|t68NDhoW`!dN+Jy00nFHzvwqIzyP#@L842p2f5 zSz^ZW@3P}}prgTA`CgD)&C{}1YJcbI#3fbB(vI`KM4H#G0aqJyrQ)uZ8 z#y7|7rvY2qh%xMP9*52vAX5j7)eS-}G08baf*t38_1xA(Y4Zv+h8uQdF4)ij>u$gp zR~<>0Ht#@VfSuwltZyKOsE;i`wkt0<^6M9z#*p zR1Z$u&_`x9To!$!^^Zf^M(`ijTb{X z2HEVQo-~}8A0J!H;T;HYV7_f^0Xg6EF=NonpIJ;3rOPWiBnBCbQzEIcV>+g|W5$RC1BUhp+#Lc08#2aK@APVT zv>g@$c*5hcy1cHx@39nx@^_bx==bg@#oL(i1&>h)!m9wMgYG|r+$+Ws}YdSmzoO5q^zYgN6a_FzBH|p+>++kmB-oQNfI(}gds~{$)1}GxPQ>-Je z4%c909#@-s8RFh`2K>J^u1qL(AHbRY58%qg=)w4LFqUx-#bi9U&&#Y`~sR* zXw@P5fO3ooy)Hw#_U=JC=C+XQns{{|rJxo)-7LAfY?vxe6xJw(0`Xmp?kHJRATmJI zSQ?jgBAO15fkM9IBZ0?o!HHlrs|S!YDDW6A%}|C3Pj%U-ROB9OoXT);(ygq5Fg~)?X3Da;c*ld^<70h+%O?l$K*0}F08=K?t0>h3|^J|^v zgRgVL0Cur{I)E{7d32zHAb%VrI!?`ZYKmC1W%ki@xC|J0AnDwzsV*wRjV#Tnp9Tr1HJ+gbUb?laQRw@(j#->z> zX&tP>>5-H?C_DCFk4IA4dB^|<#ob0I*fp-Ef|lp?IC`UiXM240(F2F!zBgA6O(Sp^ zik@c{^Stgj!re(JfPgV~@1H9&dhHQq!{xPN!%K| zvOkhwY6BG9SJ}ebAe<2B^hk;Y#GTi>?2ZnLL1}c=X*g&*GzKhx$bj`rFQiR`A81TsRGG0`debFH>aK0hiqQhTEoqwS==z~*_q|MSAO)DJh*t`L#)wOl+@3omw zcw+gCI#9I;;r*&FzFOc}$=$pm?s{E^&gk$5PQD_qL%9vz?QP z%6}pYp;2l(?_#8e}F?f!UKop@IV)!fi24ppL48`f3DxT03?u4@@uQl zZdZjS-BpGCk{}6!i3cll#btoD$!9c5F7aree1@Y+n^M|Z7ur0nj_q9AE8EJJX{R?W z2}4VSJVynbXKM-EK1!9;GyOpyTk_m19+flSbj*5W^Rxm|<@X&vojqNjRa z$6BW0bJ}tLQajtkU&Tdg!yTWUrAMZILrg~eYH{4TM5x5CR}=bs{ss7}6rGQkQU-su z>#%8KntuVns;*eI_3U^PL168bQIhD$>H>gOj@v%1+Q461H8T6=j|>+8SX;B%=cc$) z764WWfGUzQ@=ictuLks%e{m$RE#voi+&>EpHWg+9gJoJT7%Ynu0Kv9miH~~?gTS_m zSr({`2`?hpR)g-EA}S!*AgKbVd%S9dxw$;(x zr%y5=EKIGyU|WgXY9Gy~H$BnTHdZ4AgH=s?n-B)6jtn*xxCMkwCEQ72qk{q=EZoM( zVBwWU1pCSm-lsq!SQ&swbiVa-MFb1~ED~5d;Hi0{^mE;`RtO$@M6k-OvFGv=f_=r@ zPOq^=1`8txB3O6?0>O%&E+R$*3(G_z*jHIrw`b0i!M-g<-g@zAGFbXyID>svA@=rK z3xu$*SVbAyN%GT2uo{VY+`njzup3td6*rjo_~uj@FT0kZR)BbgW2U^#fZGj67rF zR}FES(1*4X{I$*VYY80zY)j@lMj00Z*f>UsU$q#p7-oEK$X}H>Xb*1WgAu^0&3b8|9juS}!oY7_YN)hBj=Z}3-5`a*o|Mnw9Wju+vpzB~)) zgS|@iZBgW?j7;{*@dWm&BThyF^r{0+Eey%)t0Miktxg8IjO4WnuuM7t^xD3F3wTEI znjRw1Ys(R?o^e3*`YL^G9}0Y;*Q$?2IlGHB$*aEYYl8#iRlia?`QWt?ysD4o9W|uM zU8~$dPftn#cU45NJzkQ5+*M>ki2?Ty+*Lqh?f8JZRu#HFJWF7L*Qz~&vUgu|f>(a^ zKwkAM7xe&n)y+LDdfCoD5_#1(Z{aJDSA{60dgcJxYXc{1ZxQgdHcV(!zhZ!|dj9r$ zj9To3uez|nl|Ww`o3fR_pgo|k44Ft@c^@Nu<)a3BRbI$(KEB5c`l@`A?H)zR314~H zgTB5ZeZ@;76ThZ!EcmN(Oj^Q8KUl=CiURBr^g?OCuWuVCSJ&GRzsBVa=_^Mz@GGM^ z;8zVARR!-bANVzmdGJ>bL-1GFY?HrgTn8o^`76KW;I9fCRMw(DMetV*8C%BhJr)Ij zeU;4e+}-nv{I%CoxVnWc`738-@K+sBr9ArTh5%NT8%n(flmLMhI`z*_Ca~(r+B*V( zdY3R)UhAt{FR?d@Yi&nh+oy8DI+3%)iXYiIx5EizoxeV_*HLKZ2{JozvkaX z{;HHK`(_W3ANi|Re`D{6@KyKBj_zm>^i_^?_JQa-)ugXl)CU?G;p^K9lk7v!LiozX z2;nOy8^TxJI-4VV!Z_ipdQzTIMvw3nQwQNIeD(-m;bBPniUkDVYrMZeudt;4XrGU@ zV+-<{%yGJkTD#ZxsP6WAtZj*4l^%cgz~rle)w1I1C6=)438QV; zRZ#$2b=#)Q4*J*9D&mx36h{TDJ}ed{4?k%tV3mk_%}QvLz*^g*>+XBQl)x4Nw^=Ng z5?Fm`EmG_+2qdr;AqcSc4-FNtMa%zL-jfnoMF@{O7El7KjLqtX3RJ+RF1iF(>CE$~ zKme=W$pdOAg#lknD+w?@TNJ=rSI-gQW&x~{Hth!X?@vS#?_?jLU;H&QL=^jUfuX%J*uucgI-?jl3@s+{sNjZ+eQ1xzP=wTVR4WkwM)(pP4DgT89k z+ge2RM~1JMD+yn9ZTqy6A$`S6Mf!^5{7GMxz1|Dbbha7stESrGo;swj%$2A5RYfgq zeYGFG>w&)NdTmzi{0i_@>&mk4L#_<^s(w!mBiO43{c||H0D9&7K=!Jt5;7!wJMxU^ z6$K}VURf`J=#`%+ve$IT$X>P3mhE6)B!j(binZ|OzIszcujAri6%!)KYw9A{Yd&OSuPn7h_$t1k%$a^G z0ADrTywmB9@U<6msi&)01Af)nR8n^IF5*|+z^TmvedQ;L^cC|t=_}?@&{xdaq_4bW zz*huOgs=RZlfEkEkgaEj9)Pc@ACbMP$>P?@Y$JR{Jr%-Nl$auXRkb2}Mnmce_{zFj zq_3=h0{Y6bU!>RVgF8Om*{*3}0D+j`Wq!67*H!v%Xl}aFh6z zUwhzJ#Z1LZ!4SXl#RPukmksze{VL*DynTSLY>DVK^)HfF#ZrgOY$NLffL^(9AbZu<(5Nn>Iq0w*a;xWs~((%(ZdU! z=oR&Wh+fqX3&kC-gT1136WMF4oa}~mWUsC2Rz1fSA=qmQQovsI{H}>%z+O|N2llE$ z$NSWn5xy4H2)~-LVi_n`EM%Bq|qpy8w@1B6fuR2_DlM>?Bw!nAK3*y%**mk(; z5%{$#@SS;eps(qG5x%N0_3cJtWUs2BX2%)zC&^x`woDH&FalfOh{ktkfqF= zXX01Ar{}cuAb%~A+HQ60;?YQ7wZ^xJcZhdMUsVPBa_Ap%n2eM8)ur_0iQoEVIs>R|0b$SE9MbyyVN_oiE1F9%q#I!=i6wRg z{HQbwf&!BM`2PNwXXeg4bLO5q&&)md-uJw(J3}O$i^pbXXRxisz)=9x0QP9%w{ter z!mHNd#6kP}v@Qy3@1~bV-!p-?#WBzKmRPiw%74W(aden%IX`1pYin=&VK?fGD0xjA zTSdIb2j6me-T#2gCA;4dVCOVwyek~%fR8PYWmlCHRx%cXWFV@Y1u-TnOXbJ}Mh-#^ zKi^*c9hZ178=B5ar2z=zWqJHnE2X&9dd9aVLt`W9I$r;-Uk0-S7VG+%*6BOiZ1Fqapjh6n_K#Z2qaqj{ezuYyWN}UXg zg%o?_JHKZDXO*XX&2T0E(vN4JcGL2qaj5}LX+dtN+0`Nf8aecptE-s6kxxGdt*CD~ zyDezU_6wyMs6e_`10jD!`J^y}940`%pm5rxSKLh-9sQoDV90BH;vU~bW1Gzc7Cgs} zRWNaU-!X6#|5wQX_JMI6W&RA@aR&W}STG_<192j{0@idF`=OQ>e?WHv8>`@jU!Odr zbvb*u?f;aBhLdibv==U^-i<0rc2qU+^I3-cgA-sSim0l_vXwKRoE?- z?z5An0=eks2ad=!r0Yy1Gxt3W?-Z$RSq&Tk%;{1msQMu5GQ>{%>g!P{z=|f+#m!si z&Ukx_EhI^yCIKY)FYJ>8%gBy3Ub;8(^#F$3tz^BZyzz}oO}wuAyWB>$Ts={#9%ZWm z{8qDudl^5S3+Uy?y_Lt}v@Xn7PetpD7*{?zJFpB0T|d===s~Ooc6ge1`ZVaqAHP92 z9!zwJWwA@Qv{e*|iO5O$vJN-SXv!tK$gpqtx#tZvHjm?&d~N zu%jEdUowBLt-G$6Bwl1{xGBTT=u^*L+d^^jrQvjbX=J z(*HpoS7KZ{UeiAUgM>1D8d-d#o&hCjJICiyCa-w>>Hu~pKK4&}>3cQKLv7{pqps}BrWZaRAf1+pQe%3!#Uxk6u_fGH-P*cPk1cF;`s+f`^leHP z(4F_^ItFaxv9%gabyu1kNVKnCK8GRvMO;bTTM>@o7#i2$^<2(i(|buP?AI^PRb}fg z|5&t<8@Gd3M8}^@L}iM z5OaTXt8FdSMctO%LrCtCaO}!Y75Ks858(Sdb&ju8YR4-r8ZWTwMrdc7T#gFo<*;AY zRz^1^^OIke3@4!NnGEB8Cy*jmE&DTPZ!=r~)(-{OKe**74pE+5o?EjQ?);0aefFdX zIbk8a1i7Di2|{Pv#*CV)l#xSX@+Up3G%bXqR@gxV%T5{Vu?0x5 z6vRC|v?|gdk=@$-SJRO=_@drbp@ymM_2h923mCIYy77Ur?(eUOi;LWtV$fGJ3h+la z7cTJ4Fu)o09YUEO*bborlhi#uWBUfH^?N+tC&6%-2Iq)TbwB7@lCACg9z)t&Y4kFy z_pXpp5Ft?q@ZFjLW6A|VUA^MtJCscAChILpsakWp(^8?;cwYv1UAz2#em4lfL%LV5 zq^z}IMhh;gfB52wb?mL)70zQ0smRWrFccjFYk)<8|$6_x2F>!v2%iDO)5}pwps- zgj+*MIh;1ENI4XaY)HYK-&!W<==<Ud9j;PFnOP=_-nd;sNs$U|B*HDQ>I;gcCW9kEOAijVO|XG z)`^uPIA-`<3=}i``Smo_qW}(qaSrE$>A-GbsGomb2m{P(~t1PVut12`h?c>sh;1Ye>#vI zhtpdiQ7z(}U1YVk^X(ZmMn}r5Eu0p^uI2F-{T2vRcAU&bFn4Z9p@9o@Zm?H44+Gbc z^I@?TjR0!M-vgGwM(f>VY26I-c+OwP-m9A|_al!RkA7#_{klR?-6TC-tc*&LM}Ypg zry9%jkY0yw{WuIghJCZ8J&u}~uO5Vh> z=P0%HwfFLvE#|S;t%M{eO$!S?$Qd`^=8TVbd_$tU3qaDLKFDDYSGY%Ivvw*Irus+K zK3sv$h3Ex(%c5U^()(kiqjLh)EFIQKv<4(?fk<0W72r9ohWk^%KhT*X=~6u@t)s%J z1eQj+*Km&+C+h4)WB%zECS)}<@SmhU|e;*{xLV@b2ZC1j^W0NdC}~@ zl&rI2k(@$p?B8f!UNdtNHvRNxpl%qR*=nk!$+YBc)NhXBP;5zF)nU zqMQWduT{iXD;F{fO=xjjbbnCD8DH=G5ICkJ!RtsCDstVc#7R&9)t{YlX5J~yiTYv1 z)o^q+`2b@ouLq3y+g(xD~43k41Z?h^BVRp-(gLwQjEM z-1ZXDE68?nuMpe&yzA2*O7GMD^C>HHh!~3`bex*M&GINKqcr5ApYqrH7jHRmjWlM* zS@ALN>KD=ZoY)V{c3Gce&FRul-!7zNrT~?N!Scn@meY<-m*)5?;qS=9?Ctw!xh#{c z6i^~AqGX1xi?y}2CGkrDS*HKXg5Uw<)p=O?i`@j94cahV^D`x|DyWE++_(Clt^+S^ zCg_U$xi-QmoUh#;8b&SR8_}AmN;C42&%bJ@<{w_5bf0$8`b1T4|KcOx(RPV*aX6ai z%X6INfp5uc(*Ww<6nqHogk`=P`KqAdHnECTtN6|lro6S`1?zqkY6|KIZ59pN#^v8- ze;K4#S2-Rj_BeCqL`4{^4nKb$^{%R_FI`iDH?TB}^Sc^W!cVVGyEY9W^Y^f|c_Hq3 zYew$XU69h1o$V0$058BG{K3iObHZ!2kWq zzaPuzCHW0$b5Z}K{?poxvA8C5eWn!lGZ93t6-sFW_r<{Zqv;F3i zz)QX`n^4vOT4MT|%ugc5IF1@JMD4t98}pYrTA-3T9*a-i)*%#Rq$sQAda|tN)a-xA z<=_+IKx99b@U>iX2}Z3*9KxuFeJ(kYKV&Eu&{Y?gxZ3|&d|?+CkTZSM)BO=4!KtPi zQV<}xQm>ub4ZAhFq8A#hDz4T3H08H+*7#|}v>dmoSl8LaSZ*c!QdU{K`9sc z;pKfX2k(QD*K4c)j&1OiJ^9eW*@Ph3i+qORm&!)Z&0Z(&JhVJbO|YzY7+nb~2ofwd zx%feNXF`k~AVx&>dMAdL=G4S1h4J0Cef%@*jmZy6SYr6?7N5)I_Hz1=a0BO;@yh`) z7u&F@&F*sgv!v7P2jLlirHBKYc;hg=_J5}L08qrl>;rO>zVX7*sRk8coQ#QFa>50nE z^E@2H>}M{3VTC+Vr@!wipPmg=Z9AMN1W}**2Zj2!?9IxQ?{=TwTmt~lv@U+~wmo~9 zcL6z1xIFHhM(-~6umxQT7D%3=DHzTIPFZBjV_vKo_q|qgJ8k(xUz(9y;cRB&Z63}i z8iaKyh>alywy#w`?=u6!AgDBQR@>2v8>MIPZ8$fYx>Rz-7NAne~Uph8glj{l; zEiH==#mOc=7#T=v;4YzYJ)jC{33>J(b4puQDS(lx6^icRzZJObjz#CZWV^-u>Y92I zg^>h6sr0S5!o7=&zZJ{S?G#dISL(W>(5ryo2y|<=%hOx`mE$W@G$m_{UnQ)JAiaM) zxk0FG)W3LF|A0^1?(dSp4%d&0F5}N-m0{l7C_|o2Nv(C(FH>hJW_bwn&l}z~7cBCv zl;zUcu&gPIOmTO!)6>qpI+*n4tlXA9zKj2DB?neUFs`GzF3()w2w^!|rmc1nkv62U z*8atH>cezTsV%(e5t>0IE9j#>rc64sAYTymEESbs`9`z1CE?Fw5qszhg}6e-T?6aK z`JTz&U(|MZ{WB+Y$Vj}F)1KFUxc*BFP`6wIVoeCQ)NBEVw8$T+`n{7O6fwLG0l zZa%x>;zhyEji^RcH6n$pe&pvqtUR85eRJ~8@s~m5=JHNK!KnlE6_OZBfcEk=VJn{L zRZpJ%4ulPM5RE6xFkYo28_*&sRWVWA@}~`==_i!xY7e@5g5*E4_kZ>Cfsdl!7#BW) zV6teuZ;hiZl#{3j0@3M~Ma4hs{7&3dji0w}hZA3quYPDi8Nl8KjWt|5PQFL>@@y%f8SW^|-ylr+6Y%fGhF?28#FB<&Q72 z)v-rl}@2`7%Cl=QsWY6dGnms^SH3u;Axu(>6^Us>!7OSArEF9pe$16 z^0#9*=4awKKKw-xD&l*y4kmg00YFm)Yh`t=Wzg_4}6f@D5WW0UB~hl?h|&c z;h}I_{o^P556xHwrr;f5baTh(<{eC5G8XzaJfqn)8H*LV;LGny#sXCLCn`nrhIMnW z68}Z+r!Zkx3k5x~^6&TRxe$=|V)v0vL1~4Q$zu|)QI2vVa?A4^Z};A}?bx>h1Z>U* z)EzH`3H~jw9z4*rnG{caED?j< znFiESHw)zE(Y;`6F*N~yuxxlz^hT;kC=j!5o8%5($F|6K|FZZ@iUS66bB<#QY@;1p1 zQ$AXnVo10*y9VOm&f7Y&9vH{8ST4w@a8k?bOluiaBVg{d#N%&XK8H zO_~cDlHl4~Sp1LCL-EYN;Qg*>F5>$a;8Rz5#ypvvmE1n-2$YT(($2r;iB8pE)|e3uoc`C{Jf<=1 z$g0|7w{;D%@lw(;Ux{0C0V4v`IuRb;IfY!teui>+`c3}bW4PN{b2;>5 zSA=XCXh^!bnxjVJPCQYqLgCLXk~D(mIF~$=W@P}sAd{=;jLER?5Qn*3eb&z>dF%I6 z^m&mNQ2sI75_S0uoCS{YA7dj0FLLonNwrcq1IO1Yh^J3^JyID)$vbXLp0O@T&)X?J z{PFK>krLoaY8E1n%N!RZ@q_QX4>bjKK<8G~1iXiup740XLl?3}cE(|Gkyg2a>A+%& zbkIGdZts;g19y>L;~Yekzrf|C1_#nj{J<^z`%TIrL)5-`Wcq!K=!Iz!f8$d4(5P!5 zs7<2bRGdLJzeNgCx9@^}?IZ9t$u)4Z&Fkkm>+nX7E(emwKlqlZUeh~%4Oa!j_M+RG zb$2~#ICLVF>w3sfa^#vw2W#^Ox-)a-EFh5(4HusC8sW|iHgG>!d>?K?hitnlQHz7~gP4erFX%FB$pSl%aLL;~nf5AZU+&mn5=&zIQJqX&I!!vj=Q zgc8|_Dw+RnF)$!GidIGllnh9XdC!nF1?nWkn82a|sc0g|wR`7pS^<{;MwG1cfYf~N zfiG0^-%=fEDhPUZ6?!geBSjuo2J!gj2-+@jVjE|tGN=RJDdOC?m*nyDHX|}wBTR7d z+c5Kxgwk5DOcRi0yl`8ji7ceEB>YM^4ubkVUxUh->T^-99(7^=j=T@ttjQXv<=Ol* zC-4ekIJGYgkdxxSqg;m{>NuGS5KdfSN8!w!V(;WLmV9eu$*NVt%6)qAv$0n2J;Ubi zxj#f|G}$E&`3ZW1EZf&o4D#bk)1xV3ydx-ex@qWQ$B|oWd`zHcAQ&Y-akR|j1yf1~ zb#0&6sR$v(K9$#~NVSG0%C0*52lIjm> zbD?=@4MT+qn0%x|bv{08G+UZ=%>Ojm0CW59X(vfGD1qjpL9YfPZxd5Ghw2-3Z-?IG zYKOdOlkWXDY64Eqdq$sgzATixV)c9Vp{Ainpbq_3*AQRzUJ&MaWb`{e{$jq#kx$CU!6OBi0nOmce@eloH29 z%Ib_R5G+cIw{sB*;?osxGpqn_%O2+eJv?JPe4dd=740qbd)TZg`Y(f77xFO`gqWD| z+Ni{!kVIbPSeyJJ>Nk@;KeHyVL0YWet3B_G!CwR}?Yrzz$`f|b#=ov2`|21!HOR9H zw2a*&^9C#%lT2b2wf*yYt|%T6LYs}MqbFy-l6zy?5feue8Z8K>rQ=RIfo2=L8_6V| z_&RsC#zLUwd`21hGkT(OHEsfP??wnlAI?09sl7_%YyJF#ZxWL+O(vt!(h;**_aC`D zQhV%g@Rq#LTLkbVt@!wXEHYIZ$-y!TzrfYekv}5Tk?yIPig7R1F^V&)3a*#HIp864 z5g<~pxz}XHH@}Sax&v~ROhm)!KIy=QCtG-*{#Ly_D^Slh9_y=yA+lJY4C7S2!ORvF7C?WM&gMbay-YKV~dOresBQ%`(Xh z(7T(3#b9;|x0L>8#EXTutZr2{^;-l%SZg_`uUn}&#RN><>W6^@I5!hNSo5i9EH7Yy z(hSvg`vxH1-FE@z%K#0wk&FiO@@8JjtT9X*_*&kLUQ){jUHth+qo1rzgt^qwN%{nh z$6P1VTdDEOxG}M3`J?Uxdh^P6G&c>{&;sFn4Ufzd&cX40tw6T(b=7k_70wVRK9Z=H z?Nv!@ET24u*dN$QWnnArSZbv7gUg#4?rM4vC@OEbNQRrY^D-cSU}5LwKgcAHW5Jdz zc|}g)e1zhV+S1@37JKl)xGL;iSE@*D=f+e1W%~b;?`2_YiEr|cue4{t8kITcYm+^Z(V`d^XX zC&YdR5g5$?C<>t*#2^BkOp#MjL;qT;AWNfJrA+tZeiDON(MXVc^H?jhN&c#pMssT` zc@`oIvlo)M@leRdHbzHe{NPTKlnl24VEHcDnE&KYgZu?mfo6m*!qmmyA{jv6uR-$! zz{RC|*I1kL+tN>4YTlwt#Xh$=LE#LbqWIC0XG(KQDfuX%AgR`2B66tD&Bl#X31IV% zoZrg+8yaWdIySFYP<>za^Y(^}!Q)eL5!$b#&n>!0)0CW4zv)l9M=hn)rVu(74 zHJi3fnG`hT&@v!}`%EYqck2mnOU{s9Oaxietc?Q>mKifhcYL<*^Su$J)oXot^&FC{ z+L`SAz46PQ2qS%h5m{3v(@0V-Ya))d z8_GN&wtLISO)=nOupL z2#gWG0}nssjIDUczzlyRV?+bEVxR$-2#Yjs>kBl}QpWYI;ve%xvL^RYc?ld@qakUS zuwoJthzT;euh!l5SXx{NV$z=6_Z^l^BQ1g89A6DE#@$eaN^aubWCa9L-_v3JyTOlFMB zTnJfWL=j;Ca~$|sPO2e=7r^bxI*0{KkDMCRUYIRur_N-^-40!uicVrU!RdVhyv6X} zkqR}X;E8xQ<}Am?8kb&aliXihee4uk9tx;URt2HG9*ca2H zr=$$W-y=y%V3*O9DiEJ?Sp&rIuUtpp0k>T#RmJo00*ddsLiV5NFcj4TEFgDpGXbQv zNL<>TNNMPMU9})8)vN;>m?W1qj+EZG2$Df)*t1^yYfZ*+RVHVM?@IJQB}neRRB(xg z3uRn>2&0@-@S`!8b~jQ+WZQ{S6~ldh2)AC&pg%J`BNAp8_R)u07+DOe10jQe2hTLTl08ECHG=+}~B_>cS%iRD2Zt{** zzBT$7l?ng?WwMtje9UV|#(qgz2{;u8OVNln8hI%Hgw>o5= zrTDf5XGEn+iOVu2_Pu0c%R|y8 zyjXE0i%643tVq*y;?w(pa}O~V$$>|_9GpoBGd@C1jZ#1v($6oho%noQ^%g~OD9sIK~fIS z=U=TU!=u4CXYaWd;xm1q@`zcCl5m< zn|UNX*^sNYX_i!0l&QFrpt(T zJ5H~4Jf>2@Om<}Ia39CH%@Js*<@&xxTNaLnW=#gdLePn5XYU%ApO$(zB=dTWKf z(BD5{_ zeCWoVOg`d%sI`F$`eDUh>U&(eEu_|6Fah1>5;`D8L;ot93od|jZnXW~=CNl@V^>JT z+b72MbJW~xXnG_Vn^$_S_AoidIrWm;TA57%l0b{`=0)lWK$O`Y1nbB{xOz$-8ne=X zy$E-m#>o43tfwcyBC+etn$8Iz-~Zk)iU`MmPTM}C3N)R0{FcMHZjm6#?>^LJB>@C7 zlVA+8I=i(;7D?--T!jNZsj&2MG<|-1p+iZuUJm7F zw$+VMfsIEQU&RW@BSD|MJ}!b@^fgGY{^r&zZvY(PS)vw~kW*W6g5R^{xw7Wl11YA4wW@ z-+OUQRs3u?Kd>q-PixU7f&Ke0V&bbc3k24Z_gSi%f((Yx)ukzEU;_JLJz~tBCI3a= zw`$z-F=!T#N4yzFJW$hGx<7FPOrooe;Ll-q>&&9M$vj-T|N@+s=O(sQ!XM$)nb3s3JYKXf7pw zJK9ADTnQdZ3JZO)4jYv(JN_y6W%0w4a+|@sztHJeFVdAHr@+x&J{hiWNRI7`iGX_% zz=*V)*7Fz9iRr43x)+4PQ#Y??vSO1QjKgSpbOeLZfQvoGR3~R^p0)Kiv@3n}w!QeQ z3q7V9q|gn79Do(m*@GfJ15#B?f7PyoL6sSC=Y=fWOsp49^IpI{m7D5`>H8ZzonqK z%#H8odHqn;XD^-=JdNuF=(WuL?so_ra{O?enMs%5fgg3qGdZp6=q71+BGd=NRsPe7 z6lox#7id_RU48#l_eNwYEXh%!imv_-JfhjUJnzv-t&wBje~hLOpy~9=r}2h>b~Gqi?Grwz zIrS>HoI=i18qGxv=A4JU%G1nYz1Y4u~(UB|i(OV!AHP&}10Q~F;iws&^Z8xO^ugQ}< zf*!#}RlQT*|L+|HU1^&^mHDLA{#iMCLh5%lG5$szFnM%J3%)6Ss#IX%b32sd_Y-s* zM)?qlp|A-&{aJs}!O>FtdPoW%x?fA9o>W>0UOCWK=urLFMrR8YeI=chH-jVkK?!$) z4{o*VmIVHNgu}?Gsp|h+JIno#1Z+O!#32~C05m5^U?RL>bGxJ^}4@_^7F96$B!DA2&#tQpIzW>N=wxLEnL1?D#mxdgWTtko3@= z2F!3lIr&rl|LwK2k4T7>L3GdlMcm(mBN}qa_->X;a87wVmezk-D<2l(mTWHrmgD&Z z-l+G5pRwZ|D|Hf$>KJj$$PWSI;b&&@pXYjIptjeRRkbfNC-mI&w6>0q2ZhvDtD*aA?dGTrY#I<5acWcp;^9j2rYw_9Bt?W_Lk}B>s@xOB2x{iL?Sk`nyhF8Cf)iwRQ zwZIhmhw$Q0y1fEQem`I^Y+9c0ApbKVY{A=zy@h)(DsDX0ci!%m+F_opAF$$6;vz?F zWmT$$0n6kDUIZ7E<(S%$e@DK9yLXYR3*_B;<~T#88Ek0h+r9c(lC=ud{MGfdbpkK4 zjWSB{@do&$MEAGR2d;>{ACn!}X2ARVzq)st`M;2sj&&etbmvCqnc0pb5OujPtnP*! zNO!Ou4jic3sG54cKUIq*C7HP1Q)kre@L@t>zWKb`UhnZG7^D|=eWW`MR z1B z;G-wzu-cgp*0k0fm;ic%m$oV}5kblRNSwR}meaaY0;r&WXKBzcCl zEWfgWL_vFCoNnjOnE*cPO3FH{ID_BX3DWbo)8Z^9+GPzW5!PZ*!1i=Dh^UJ2zABG{puAHkrL$mglGV|HQl{52t$COcHOm zCh$L~Ay)hmYQqU*&|;lhG8NQt7_jrwHdIKUkyxR+NJy<=A=uuG*P^wZ?LHl3;~hV^ z`LgRl!?r(O1T3q+N1^u;?Se`1_}QbG^VZKC(U^q*JBn}yAWInvU3~5h-fWgs!g#=? zPYsHNnmt%wBkV3qd~F%s!)PDB6k^CCiaLC7Sh{gprEHST@i*fr*yzuPxnn^R&oDIl zBe|-U9WnKZ2haA;at!yU>cxep2HnBF; z;@{}R3CpkQr_s^yW8sT;X*iNMh}Pt>FJN_K=AfXg-MXhih2k5AHz;%s$H1z?8Vw>) zr9JX^`b!z+Jm%zyiVA5fTCC=Lgyqf`j{FsO4AkN(xk-eyRh6CE%1M$8U(0V=O#jl1 z5MbVi*%N6*6_%(hZuen!DoUc9_~P&-=K`kmcP#7>9OEz1pJ&T33s#`=av2WcRvd_M zsbKX!9;31x^4Eg*3m8ZsA~`hdU@Gftiyypi8dV0PB2vsmj;}1$^+uYW1zl7Xf5Aj- z7*lsMFYT;_)g4h{I25fe*p8*F$m~cLPY=uThQNr6bz~bUJa6Dn*IiE5rJZaeKJ$Aq z(nTb2luu5gvuV6w6K+}W=efQZ25PxI@xvHCT_XC(Vs{LVJ5keSdFoyi#gTNnf&_a{wU%l$vm9dNGKm@sYOtbTet`pjcu)w&~j zegm0Q2EI4XkF@-10R1gWWf3L;T9R~Po%g3QDa&Uy5ki-a7(j8=*6TIuWww*RptODY zJOk+iaScQ$8wt8&ZJjTV{l>VNy4O_=1@yNxWz8_GKm#>k^Z0V~@ZF7VWFXrY!*YNF zi3XyBq|vsEF&XE-a6@>Tsnv)N9~p(>g6spgzOf*$-pLQ(AKk!$=ZF+Yp!TC?{N<$( za{W<01QDs@jNW#M#??M-ZeLSTqN>Gddbs~)c+PE3+>B?&)y@q3`)@cGf^siC(d6CN zNycfh7D5odsnrXNu71bWWUmc~nXhwkrK*Vb?tLn zF}2%|Bqz*aNRi(4Q_Ut+ceDl1txWF}1i{)XmrW3zM}q0ty{qWcB3=nUZN->;i01;;;CyqE1ra=&8P65nv@fdT_!gx%lL^{OYKk_{)Wuwb+^qx3EG+jM$a>xq* z0cvl7*D}>}Hzqa8##>NO-6-}_S4+1wlOo!CwV|mFoE8MMsDW!|YT{ncId$WD34b!; z+(rNcZL0X9!O6TdJ6AjeXw!8s!bihFCELoUJ>C-k0@nZc|=L{bAj$1L24i_4u{ zaqLyG3$)OE`YMTQ2&|fw{sUs6=Q{4fnoO*3|5j+s$7Hu66`@F_NYacu$gtszow%vL zchLjJFJMGf0kv@J3J3!0jbg#?%Xb|f!GzmG}K%YzVhSs}qZ(6(l zNf}Dz*F-IQJf?=48E-px{BoU7%kBzGg{3i}MJ!Xw+Fk8+L|mEVp+6A}2+MoqEr?XEhCjJFn5KNM*(E4f z)Zf~~FZufALtt^)laO7yNC7*C#f`XEbaoRxB$zHKIykXXJcIipk!=YROo&?-X&k<) z=m9HUaGOUIEZUZdmM*-wG`6|{ZMp_0@oezKTRd$?! zT}sToWs_mgKsmhZi0n^b(4g_Q-aA8kWb8wnvHLwgRD^wo*O8Mq?2t;+7P(%=DOldT z@W5tdNdMohT=W~m>biA;wg*x8V6Dj$h_!u}Hej0(LhXFCz9m-{KBuMr#?14F? z=$z4oh{~*4^fw)_1v$a+JF8S4(!T6@=-Q%?jPH$xHZabh{1tS)*+MhzfGtk0{z5j? z6l;66o}IPH{}$)pXb#~?WcNVZQs6JuG2asFPr%)7GN1F}(VyCFYT7&Nl~*vszdc-K7Ab+nJkfJ3Bk97jL%$g4t{Fk4o+%(e;jwH8M!3 zoZtfxLWR>E{j#aKF25}Si@(%1fT7)I9REe%xZ(QJ!um!y!$q3^Ng#S#&J2R=2yh&c z--RmE)F6SqsU5bAuu zVzLnbC*Rz%D3s2Sh?0L7WF7%2J+r*z=?chc1iwXBB*&7=5P;=L^s$YgE7 z_mghOLocsBC8kr+pdhuAp0KH1S=Ve~t&veQDFS1#bw+h9+AhX!_9lhoX-WFI#zS#jxRLeFaq{DFu_IlDoN zVMAwyh+gWWR0Dz$Yj@e4k#Y!i?`rGW7OHva0+k!ixXfqT@X{M&nI7^04d{0ffM-AC;P&+|nTnwA6WO*~I`Z+>a&YVP^kue>>w z61;EbhT$AKvGDvQ^}%HgGR}9yAtYYJ`qJs#qt{cePdrp$io=SpS&N6Y&%P}8c_n%I zMLjH`q<{JnK(=P$MSeII0JxT#v9Y%+ZyEZ^HLX`!bhh_+Co$?5+&$o?nDX`){N)7K z^ecMd()Fv+=moKv8W!RA>lGeaJkP*lt%qdS599NPl$mY+JQl?NYMJmRU!6(<07z#( zc!{(M42!f5Md-A4+&lTI$IdBl+f(>Sc(bNI88IS0ji)x#T> z8?F7%q_b?zV6nFCy0+A>oTJO~)yb>YVTNYohX!VnUb%=Zcb00PI(ZGQa7@*jrDph@ zwndQ&myNWH^anhR7%g;JGuGCZgL&SSGxkPJOhHrnu7W0N98?r-9B@ z#LVO6t(GIzK^g|uE9MB5+h)>u`Py_v;g7ZxZf|j}3|?TK(m$NIdgJjr4yVr((BFY1 z3pa9KX{LjAg+7R{`)6P9jiuSo5&I_J(J(KW-}w2r4Di7PZ7Pi48xLom;A#1WVX49p z#LM6E^}tQzPeDX2Pg|beFHW{RCy|_}_4^a8065OwcAVeyW)rjJ(RZmtU%Grp{}p_W z;AZ=Y-cA_n0%Y7d!as7AZ=@ue3<1^OchLnB>*}_(|wK8TmsGR2$>VxU}Sa3Y8ucYhqJloJLvgd@(x7ZF^KtH0j6!;Be z1M2?#tB$H&SC;NM&s)|;ROPTdqC5$KMpm>%{(CPpP;Xm$V$d)NY7?|ywX*mYu*cOz zT!nvk{M^7y@b$;-S9tszT?&#!@ZLJ`F(aVPZV`Xn5=Q6sZ}|azWE)Wt?c;|p)6M(| zK>lp#;7bEn;ZF#K5-)sD4#Bh8R!`a}n*ii!+sr(-wXx1@U}{9PjHrPNJ%3^*T`nc+ z=aZH&XK$a?XHsMGKAsSRyhz%h;*t#M-|`&~N!lJIP=1>1ruha|m?h>r6*(=EwN1)m zrrsTr_y#@!{?oo-ZAb0T`GwUxmSc8GckI-KC)LgD0$m$wIlt{JuNzg61gpQ|pughycWdxFU zs1l4rdA0AYjH1rXGE0j8>I=0UiG)^M*Ozi*RC3R6h%chQV#Lp#SNM;Aq-;G;k4T!?DJGAeh1HZk;7TaFb{6~X_cI7 zUZG%N7s^Ra*tph*U-%F{PCt55P3oJ|t}==^5+!d(Od(m)(k|G?5dMPX?ZAy^0&PbI zElR`2wfg>qu1ky!;i7&mHP$@r(E?RFg1WXvDOjW}v`9KSirO#jCxA~j+m7$c{vU~# zVLDZRw1wyB#dQM+9Z?hbg{-dw9-uA~3cC6PAQQr&@$JJI#?r=9MXc50&A7=ZN zKGfLh#{G@-;5-{0aSOW;RxCF*^*{$sFj-x*`Ksbd*pP#GqW26CMa4BYideZfciNw8 zAd1>u9gbg+w}Nu61|t_Y$!|`4->tEC#!P0mOd$3%;6=>mO|=&TG(2}RG%$!Bsn6SF z^U~)g&|@^#R^OfQV8^WopkD{v%i>hnlAiRixq>=*C zol2}UNS8`3NG~9&W6nVP(V52Msfd%?w_wD5d0iNtxYkZ%QRs@BG@JeWTa5 zOg9EfE-2}a(qPV?W)k27o%NV{NvWAl^HE18AoyAqTbNXA9Qp3knO)nW!xNW3S50lt zqzcR=wmH_5M4)CZ3&$^?Jd!Tz6RCDWI-mWjZP3QV3ozcEViJ!2)qGvwW1K)Zql{J> z+FhfGIwr{Js*QEWHn-drTLK}REqljOtHvA^;4rjDE};^*(Tt~j2LAWM{T7_~Cni|^ zUDb6^Zl1f+8K=wdRK=`#9s#~y(^a$}G zr{ud&u0t9M&&hkdEY-+}U3oF^DUaa5SEp>@kCJ+7Ico1Xo1OVF@;g?qm9L#*Yu!|< zD(cIq9)W}JN5|H&>PvpU0fcVdJXYs6V^s<)>rbl=4vsOmZ7+J3Anxzi6b6RwW_VgY zK^CV+aa$$x&6oyJvLV;&?s6TvR6AFGb0TLuLh)T`>Xu&z{(qSmgQk7^Y^3*o1AErr2GO192^^0DV&S7{ zM_OMIAytmdaEna^tBhh*XP^2TWtk&Jr`}wD{F1_xIi2H zqT-^Y#I5D>aBkuJuVBw`ONJwstF%jBXweV;?{2ZS2ef#7GZbuRiY zK5brDQ26Z>6I+Tu>oDh~HT3q}GR3MqxcbfBIx`_fU5(%Yh9%nnT-eo@DW=Q8tDI+< zQ3W7oxYgW0q_$k$>MOwETIR6ui^)zOL>pLi=j3-0cr-4Lz4C?H7^r~g`+#!F`%3NN=l2J7$C2| zT7n@c&GN8EBL1n16peh0yI6()hhej+&HG!j9#->WCv%VTY+_NV?#bX$nIj~M&6 zs_niWS=?8+F3Oz=d6pcZX|1Yz6yQYq={ zzoC#zn6e}|Y4rd&APvpfnQoZ)H_u36uX>G$ugKKeEQGrs9)RP$NftiPyT+S9E>w#~ zhzt;=Ckl1T7aoI=xIco5jt*_Q!wzOVhUU<7UK9}9?wPxq^9$$fbnly`fGy=pY^ z9_i>Tf<953TfLSKpHWi>7n+^8xdr~a?s(@{qx*FQvlbuRIcr>WBoY{5zTUC9tozmZ zpeZh_+wGQ#M0zo>rQ&-Vh2{DBiqjp_wFm3q+F36t>(VUo{pwo2OFSkY*MB{-rC;D* zl+&h5yzdigj%1**$xB1h65g5yLbf9e>}!Jal+S#&^EB1K64o>+%C$6G~DW!AW zt6ffI`DUUH;CO8{oenD(*}??rt6MXarpVgI$74^8ezg@zEr*tsxw()q+A{X+jj712 zt$lZi=Zc9cimh%jy23w+6j`1&mJb|=_R4GuA;A}seQ?n@MJ0XNxVJ%kMv z*&{h}+i#bMD3;Eq-rpcU5{91C>}j_CIEv%?)q(u$F_*r<6antMVl1@Cq#J4^>;BQJ zI$aq3xc^5l?R39;l($oCn|27bkYL!O!bRg|ZPf3sytljNTp-Vh&z$XSOC?HwYlW<( zO@$RkERI_MJDW7L?F8$YT!bCiObLg9iKQtbS7M(On{DB&nYr7E?$2zCCAZ%e-_){^ z>o-gTc1mMiKCsWaM1f7Byr+J5Ns&qxw?5t8W>>ozXUaD;@l9W9X{G+M{E~BJ@aN+y z!Z76$%H2(w+wPDeuduJp=7`j=w)KWRwk6eEViy_H4*W=2mFB9}0I&mV>&h3KkDX%9 z@BawLIGdtI*gGbQj_30z_l|3s&26%lKd3kdk^k8*tCMgTnJJxTbkm-_jQAwA{JA>} z>bB4w`9aDmv<7a?;;OQeCRyY0yQ6%^1w-o0!q%lbB@F|k;JOj8Z*Jt- z3G}-VotGpG58dgt=NMEh&fneDd2GkSb*4`)ne0rsTN*x*Ct$|`pPuqGwo2HUeFR)oNwHbZCY(J!P-2M3o1`~MWks<+SP3u$P!|oL=BV|Cn1iw%vsF| zmlcxiYQibZi|Haelb@Lv1^tkcO2wD%Ml-&1qeJ06bJ+`;j;7O05P8(MGTn$I{5B-yiz$9ob#Z5 zF8#;OL&f||hw{I`>OQl1Bj1A^l_s0C1;)uM!X$-Ap;IPu+WzS0okFUKks`Ez()s;)2;ON+GG+kbpLwvJb#Z=o^B8i(I)f& zgk4)?+l*l$1m@PN_Ct!q*g^h8JP~9AE8$5~v;tJeWeUk`Q?^n{peq)hC^DM$N6DW0 zc**9KEAn=B@6b*5dY5KlPqO55qS>cnCEtRi$GD@&%$I&8IoamWi+4uSC`UYXVMnyR zpkkYH+3LulVh&3W~997uSplkJT zSjgpg<>eBKKF4!qz5a;Th|}ksDy6<`^bp+U1Qk8WfN;dsAMf@^okB#um0Fw*jj}D; z3tNEL0(@r2TtAK@qw5M!_H<-d8|{gu2iyz418Le?)-8&%H4c*tZ8D$bAd*f**i}kj zfWIIcnI#pDo;Y1xV!W1R z%dkGNM)rX#fBZmO^i7yXvbWRqdLDi_qT(bJflbF_ubSWvSBnS6eNtv;6)-tulL%y8c4zD21&o z=W)ah)&_)VlS*bg>BnQMs&KPh$tT7d29bAswzE);fQ`{nH3omUSQO%oN-}U{SDF<| z#^AzTg4pKCQT!D2EPrJPL+IY7-)y5bB|@I%Yzw=WtZg)E<%YER%=j zluZ~}8`s~3mV^=oHc0T#0)!c_z{K&AqaE=lztzy>v%Z~Id9U0Qe<5al7GgFQ`n_Mr zRj)3%HeWoI5`$bVca=@uu&A$xr?jkeBy>-m^&+=W+Ig^gt#|CC)GPx3Wxqp%M)df^ z9WD~70eVxKG1X5e?eZxVxSA1>+^7Czm!w?BD{kW(*g{~mYuFYGq*3to%AjCKYB)mD zTz25a6XsMl0s2;rsn1T6Y*v;3`L>HnAA=?eYi7%=2s|1^r@R#m9%}M6a+8wEJ!Hqz zz2hzA&~w9nH~a9aIN}LVLV2`JAgLJv^_BA$7k5rB8TQ+mHhdc=D8+0qOO|y`$+1KF zt$LI7H{!uNlU&hATTmCe6}Or;M>$q7jHtuOE?QTp5$}tMC(;ZQ5U$^~Bg@u|*eV!j z9|BD{M1rl4idE%T)23k42%!682}re8<_3cCVlr-Tr4@|;mNK6qNZz0|+@!z%69G)6)5?n>Hh2B!oY1jjfTb3oU6vE^H$fU19B8=tZ zEQi8DIS+ILu}DGPdxo0bK=6xtSHO11AfRoJZ|bw)LuDgiqHF%_JKqc)gT&5?4=5jO zQOWbHFOcozl=f>5jZ#wpF?3H874qgGK_Lr}cQe!c1u&r#_NkE(`1zpw{L6FoR_XoB z4MQjkKr@m}UEVdleP29}WdmUt;RrZ3k~CWT2TtN(75d1FDi}}Va4{eB?^akL0vwmb z1YRfctHf6uR-jmATM(5^@PLY;I(mj|+o)vhvvSo0BAsz|cgr1a?PM&eRx-F?fBVRg z>7jiD1YFyqqRe;9<^~q&lV(drz}SBz;WU^MC{TBsSGg9IBypoBf;lr{i=DMRFyyVP zeT3m=@U>iHYh&V@)IGF0`8p6rY zkqh#XNt+(fRsRFg%yjLX{EhvgMtV%3fTz2Nb~0Oo-aB+TZvs8g8kLG595b9qrFT`I8b)*mf>?UA5t;#jVnAPwu2%GM)RImeN(RJ z8Nh<&455=(z=EBDfN7bu{Lx;_;~eXJ_5ktJYn&z-Dkj8n4<>)R(1(EJyNcD-#1$tw zR66s}i19cc330<)RtZQ8adG;QOjPo^EAF+}^3sfX=I#h($HYcH$x_dK2SVgksLmF> zI`@21s$~Y6k&?AAI!tC)AGuSHeKticZw8X&77~}iF_&*O%MrO7lgI*aMm0SHps50< z5l0K$Vh~x-Bs(eb<)l<}a+d5d6^A;PA1%iKC@PWu|3tqKsk$ohf=+SM5WOHa_5Q;W zMu1#UWiptyO>j}}hDb4f_(=h$`sUD%GkRLHGI>hBKyCA+h@K&TrdU-EtQiwGp)Dl7 zIaaK?`77raLPJW+3>}C~%kp&%%nFFiV1l5RS~;-fo@DQ)udxNRfRyJM*``M_zLz{AaAp>}5zXQ#DsYgk7 z(}g1+Fl0bP0O1qfyBocO7A0c~TfYHl038x!Ag**t-0V_kl=UX z?Y%}kQlMt*+rNrUI@^=3&8KYK_V&L$k4rjJ-fgvg)}u|lurkGU#H}pP_1~G$uka*& z%~uUn&?8Mg+ouo1VrivH&&s9K1-v0fx6l@S@g4g}E z%EC^cN!Y^?m0=2x>BUtY_U8`01f(~z>9n%0 zbaaU+%rt9!mt9AHPf^K+wfXiVaR6`^l@%bd1wW8kZwYvK)R>(hΜWdjk-%f+iHX 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

    lK+1Q=ye%TnP}fw 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 ZVQ~>j9u8GGANYTSnu?}!(G~O1{{cIvXq5l} diff --git a/docs/graphs/sup/dgemm_rrr_kbl_nt1.pdf b/docs/graphs/sup/dgemm_rrr_kbl_nt1.pdf index c0ba56d34460d2dee768678b6c635650291d1223..d104363d113df3a2ce24e47a1cd8a65251d78c78 100644 GIT binary patch literal 225316 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 q*GY?ilZajpTcO1PZ2}YxcwDF7jN?z zn!qN7(5=mMqf!j5f|cmFDU9ZmMkK9@d@I~cp>#XH70)x4zI^NEE0p$0ZidnfvlvOY zIm(6zM$*L#0aGBYI$2xIF_zvi@ugr|n_^tiUL9ymg2=}VgVcnYQ42o!T5Bk8p8W+csp83JjA zLC-DZ7#g84g6RD28AQ{Sok4V3>M@8uASZG>JvStlzGRNVXj*$8o&vobP51pJv2~N- zwDw!sx+l@r@sa ztd?(#$0Z1<>*7iljHr99l%LKcY8eUJgicg_*`;_et^J%B+<*LcdL z(^k2~NV-o@b5de7ji2*SI?WOcrO)D;*Nmi9UfSlRnbJWdEyo*E3SlUnHn}A--DW8( zzGEn@a#yP-W+;6Y-%y((X~3Enmv*~b2Gi#T0K#BeRYbNgl+pCDc~Hq(@)5is0?F6S!u0lTXbQ`&f4@iiowSUnD0S~9Q1AvR+^mh2ljp4MmVp%C} z3a1ZjE=u8ag+M;TX>~r^FwJLRoPDa$N z(bd%%QMX1b0Y*Trj%ZOj0_sf=`i#Rq@w7Y&E(^guo^B^H1!08KIk@`=!Sq&qCS@$G zC}WNKdB)PR6R=&^45mfdEDgtKIwv@YrVk7fjHb0e-DDydO{*6~0+YdXJCKCg18QxV zaQ@DKdcpMm3aEW6L<*==UWpO)g}o3dq(%-mv1wI}NBqXPTHa}h z#MOG!Hghqq)}9hyjGfOo85gDkLGDOwd{dRkWhzHeeLPMgPsCu(d4pFt_AZ$KiRNVpuFhqpad2K*Y zeSv8qtfm4(!qnRR6uXxgS+_oTcu@seb%Ej&BWuY67z`wBC&4I*3_92v0hooKw^zOUktM)cV?TG6SHo; z%~xEAvn9P?WiAM_B}UpNf%$j{t+_iUL2Ef-{1#fD@HAnZt-Uj`L5sD zj!w|}V8RH{`h?zIg4Qi!x(qWS%zhPXAk0=rh;uBT30eoI%GDopP<_SNncTAa zgB47PS}!n+eU*P$1|(7I1UDIJv-B^a>)3mkxb=b&FBN~Jkb&fSk>*Xj3XjLMA2z2WrDBrQRt<4x}w@D{-!xFc?Anl$)?Gqc-Q>c9a zKrz(TDJ=(94z<_05M~VsOJo>k<0u5#2w-!Nog;7r+3C|}kiEEi17qy!D*GwK zPA7a8iTVuw1!M2OppN&dv)0%4DzRP&OUbQoMs19+7s%!%Ze594bD{N$Bb{4Ism%}> zxOFe1x2ckK*2O=_RA=pc6A^aOH(`W*tl*BBTbtls!q)BFyVblRz?LYIWm6box5jp{ zQGc3CtPLk1z}D)+&0`a~mS<~;k`_eRO8pNci|AU_1hb4Dp>-~8@X-3&_~sE>OEw@# z(1@(1z+kT&fpyY0$aNrKi3Haolorq+y6!5wRy|LCeWw`Nqw5@65@KIiT{F5?`pRp> zNwHZ|mnil@*vf*C_Iw@Fl44gFn5FQ#u(qD{)ryL(%MfE1el&=$6-$IhS}Lz@-P`uN zr}FCdA$SPN@@fVJsl57-9FF4FUaYR&8!z68RF~p zPK6&%u~%e)8DDD?sOeWQzFsdYwLoyattdoAaJ}BF3_x(*CWq?fiy2{?2ttC`8{DB7 zVCzD?EEEB@>i8^6!vI@BvlBf;*z1i=8H})BCEXrjuZI`bG02u6&3LE?uvh7$gv%=f z?EH%!U$2Gb+#X)90#4^LgGGebE7Qshuh$B(5ro%kWz8@mY)Q4+{4^qLsq~mH1|w{# zqFOe^Bka`i8DV$L*fpgyd1?t?Db+Lhez0}q=+N&fEe3* zHv(++?q3Jk`Q8~|qwtsU^(t9O`(O}Xw_mj_Oo*>j$3T4D?%PYZ&WbDlS5!gTzyEPv zs_iJt*8lYH{ZD8AY}NYt(~m2H{OUq}crWj`yT92T|MV%vsOxj1^DoO66)_~(JT74T z`K#w|3ygDK!1&8Iui$y?pEp1Ma>lyxOYh)w0prhKJ^$yiKNm3m@{23@2Xr(p32nD2 zxLt}8BGT|`KeFBDf3;%AwrVZf#>(^5kob?D=_T0l51gs1h_+bj+OP8;Khwc8{V)Gx z{X=7Vn-2f)|L32%!#0siueXK!eM#M>>oz64R94yy)PDYR=D+>%-~TxN*FXNF{l9`_5b`A>)v}z}2Abt6jmS zj<39zer~=OUc^`5OaB!3UT`(PcrSfm>MF1Q=)lz1+1GL@dC@Dr1SredqW%59Qkx{5 zrmJyF3v+4V{ePu4NjlFWdCYdqa$o+zTRpF9C=bdhlO(pDwqxb;G{@Gq~^ zX62Os_oJM0d`US)hh4Iq+1eAi&O3-)9uCjl1uizZolAaqZ*S<*nlCWhrVRX3fBwf+ zQK-I2Re95K?JzOlfRJj^HuGg|YxPUWFH}ReZm81^D^(+N@gk>9BGk`ix3F6Vui(6O3kwn9xcBq~~OXlvSz6LcvRFQ}^i zwH?=PqqQwwOS#pfo7~7!qqVKBQ@&LxzCV*rYr-9L?5X$MF6BBM*l#j_P;#Vwajos} z9N4Bk4nyHv$61}()`GBIedXNSKzsF+&Va6)zFjRIx?#@Pn6mW@%KhoFYO-9@c5LBo zqcg>J-A&dW>Lu;H_6vM~#db)-;o~sT4~ZRB+o30V_r7{w+M+yF5VmeV(oS^Lv;W$V zI^T{XQZG8_3|)dv#wZUiY;BuWu(o@Nq>P#(E4!&mW@Po%BrrcdnL~RX+qJhR-`W-{ z`E6aTTiJZN>2){`-P*{nOiu5n=Y^uC_R+Q3t)1>()B!fPVc*U@_Lb=7j@UN2oh58+ z)MiqhNU?A`Pdd%WXHE|sT` zZtDAU)g%r*d+8oE*_$>@51gr!8J^nOqb=$rpI(Yi@+@#=HxRWTn^IP_j81x58c|I% z7p10S((kSJ|2q2U-{iOquJCs&+>HC%lBq(?IxALdOGSgp_Uq^drf~7 zGfBSbq8=#NpF~unv;jG+Yx+^MBxq}&;w<;+FKbp3Z5n=B-*~#|)z3_!c`^x4T3Ftq)>R$Dp=*ALFUo z=AM%_Tt;dwk9``I%NS0t!&3ZhP5Y+|Dn8xx@HEJFci1|*>E-zowdoZ;{q&p}nRf4C zRHMPqc5t+t`UE$hPMX@*o~qYBUs0SQv%B@Qv9v~gpxUNkjoM5mUq*QP%j~FU)Jn(* zuij%oy%%@Fk`JC9V(+N(NQ;E&-s@mXbX4mja=M$zz&>6@{I9laor5Z-1Nq?1MB(e! z@A!n&M{F1I-o+fouzJt^X>z%fN6ph$+vAQ=M{P7^0V8{ zF^t~j&*!S{ZbS3wnO)anja#`Rp{c1ODhuRscidwDRa3-o524fd9F{h+u-ivm+C!T; zA^Jyqr_8=c2j*!hneN64DI#^N_W={+`D4J3`%)(Djpcw-QE^UXZhKk z5tJ4yQk9|IF=Nuh6OFR7D>Ei-zi74XvaH)?OnMjF*Dk}lX*#3sWyM~5cOe<$=@G1U)4FBEq*@Y~E{)o*5tm-_$O$Dl`Pm&$ zV5*-qV;|Ysl^K}cS~bnEUxsxvBdxZf%O|(GWd^2Ne#8zbwasjGKPam8Wn?!CPS5-F zatayQl^L2!Br|+CWL3A#*z`W#m`p08%ZyF6aJHLMNqoen_l&ybU^kzg8Z5mp1H0)k z(@z#vbMmO$XJC4tp4^v3-87idZ-#J%n(i5w-q@Qc_quZgrme|BWO>)s8JOykgglDu z>GlzsUY~-D(dmvQ^6csfPXwobzh_W--(CVbk`A|C>?{nE=xrTQX+KGn zs$m!!nK5P%%!TIs63GI+%f{vtHo4% z6b!0O*Q!HIl|g=V#|TKpYhvjkU%F`3eEiSL5w(A}P z>ER*;a-};*JgR%P-4-&Xn}rcN&ZovpwKmUKsy5BGW87=u-7K0=n@@j&93vjpQ!)A_ zN4j&wqy0K#86iWuI$~0_c?@!Q38v9gt7{<1a&8?lX+Piia5bHefK)%|bNgMwFGjD& z=!O*j>xfC!7K?S6%}uu$jUQIzEw8zC#HQ*bwkc9=_Y<7Jl$5etkSeZ*~na!;uNM$$gNePv#1fBX($vtA(D+=#knX<)$22$Dn)duc#C@Xpr z3c7%@XLT=WLRm=$I9zoodrnJu0@>qqH&X&x6|>G~Odu-_@7NPhAS;m||9J?6lbRb)Ob0>K0RqNbV0vg-8*mQ?aF!t&t%9HCji@nO>s=i>c`bDeGauzFC z{*W8Tu==&AZ3l(D%Hn3dps-i>;EK266!wxs^o(@|guUb>7X`YYu$Ojo#r8%}*h_WM z_Wm8iUXodjB{@*6u6`-=;Tnp)q|+Q5L4aa)?G^@s#$M8Jnx;{Ju~#oWoMR(s?6t!o z9ys>Wrnr!21dde(BOFkHW3Rpp8nv6Cu{xU#xS+8*%p!BpSe?yAchFcJXBsr1vHiGN zF$Wl{=Nuy-SZo^++QXZ1rNh|%c8otdjJ;H98p2MXvHiHGgFA`Usm4AFU|79Q+etEt zy|j5Q9<5_o9T3tMz_2>XSQI#HfB#V}4Gyb|^W2GXSRG~yZE#qfZi^jKK(YOW*q7-n z_LAB_sKEio>NxR}k)UuItK&lJ4m4JWEdaF>#wyY7NZVm-KFnFH3i4<1CQz*2v8SjU z#rA~X6M}%lrq9+nte&wfaGycjF>D?rjKk_oL8gFVUl(W?R)<+|3lghqEVIfNAXZ(( z42=hfO}!T&R)^dXmH@=|tB5Th0I}*;fUO2%`)Cww$2hExa)96*w!ah$@tnizJx^BY z5SGsu3|8l|JR}%w?^2Qb0fWW49Kxor3=p=TEaEjl*gmQltZ)e1zm|}e1&7sfzvHm! z>jaQ($NiBwY`?rGh#%fyDM}3xf!d*nX;TPj?dA`?Jw9C$T!rlMYT|b-VZ6xe5@g z!)*6BK&&Qn+lK`Zd$n_0#s?%ecWNiG`FxIIb(x;5a1^Wa83A$>+sD@+l1^ed^a8~8 zlTEpBa9CZV#fjjs8m3Gc$3blFR1RYM1ZT^02eCSxDGGzcril?Gw!c+dH$Et~Pr;Gi z1B&gPWNs88iDkS*600!9h$Kj?O;fRPGaV$FsaO@7nArM(zV+e%-$g0Vi6o9OTkl4yaA}c|__(=d+4Tp2j zCwOdMHXgs>v9d*IBkq_6!DG{41|BQ%+t_DI9?R$sJXULEBc1@VDZ~Sl)!6LV*qCfP z?2J+Xa#@MrT7(BKE5+`Z7r1&9%YAvN8#pvizj7l1mSj5n@?s>{@yS zSXNHZ&q9t&c0U09oXKh~n$4ON_tNLF++bb&gPRfKSias4|2 z&Z%V9wvE0@W+e$Q>lRrt+XnwXGL>yp&lS%FR8~MTXc(Yuso)cUvZa_TCAntI&8Q`^Yelgny9uoW(X%j$GfSCm**1KyOxAeNOF{nSV#m{rC3 zJ}W;+W_!RK<&HqJ3LxzIoy=-5AM|y;V6Akm%n@K#O9VrMAhRS80JEBFtO6BWcJb~% z!7Qfb#AS`C0Ln6GOHdY21xyxE6q)Q|^F>0kc&H$$i*bU#eeSgo%^Jbh(U8{gM8?pBHyceg@{ zySoO0ThJgy(xOF5f#UA&Boqh`TC8Z1ApHRW0;LpM+*&A53X~`R^{(}Pn8{s}%$%FK zXVyJ)_c?nbxwdSzdWt9hWlM?{UXHal^E?`jXxFDjfz9JPj?JjkjEjn7pi*qmh1K5- z`tHx8V>@z)`f3Z7L88tQw(ywGpA_0{UAKhB4C%;4DXIEGBi{?`+-|oc-*F`yn=vZ`j!!295UWzFkH!iPFu9VDCp;R-yw6uRT1}^1i-jgRm%9=l zCu<*c^uzo zJ@-XIg)BlUu1tT4k%HDA9q9ZR+RPny-YoDnXVzutD?G%V9H~cl*c6#z`6O-GqsbQA zn4FmNRg7thTcE@|L5guxI&T3*svv`iWX)=g6Wt|tVs5f}*0 z!67zmYau$aI_euko2G2!D%fF*CpTovPRJDbzV&5%N24Ezk0tW2Nwb!_c}uRhXeNFJ zdXI%SL+&cn$8Os;u0EMZ&t1ai!9)faxw+lRnLc1l@l)H~{fT{iN6-380VWvzj**aD zs{d$7U!YHsDG?W&LX0i01BpL5vf!yJy3H8MQF3w zGnl5wO(4x>hRA~8s|zH}Bk8Qx^h^u zR>w$SK_K_rR%8eudzHRfFw53B0)P`gMqBlGEI_=xL=ED)6^PeSO=CpW_wZ|^txq1s zdv|DD*VfxbGaUJ!&4u#A=amgV`$3nB?A0UYzu$`o49H}m-}wHtjO+-`P6rb<`Vi0z z+kGveK#H44rnqd47cw31WKejtOXE?|<8a!7Rxx-?B*2eSSu8m4IeIYYTiajdbuDU~ zQgIFfWOw)tzn{B=CAC1@Nu~?`GpF$mq>d|TX*VMD&S-V!JuHavbwk}cO+tF z$sFR>d8xfLSrOo<#Q;<6^q+@k8#e~C!Ww0p$jLqCL6Qf&1rMxD%MTmOknBjiCVQOG zfv8AMlF$~wNgDE}7y9GFJJP%2I+3Vgv>Z=NvT@HB3GmxuLJ1B^Hg9oV}Z zySTcv$u`k2Pap>@l>Sb;V4LpJamSr8`(jTEXhZugMXMm1Tn$*hDGkIy97yhU_z>V{ z8rzVvqfW_KZ+*%5ONk_1FiX0z;E+;Rj7%R6szIDo6je@Ag*bMuL-f*W!m0DXZ9IAD zTZvkL%JCG@%Eu|9y{xg2f7;lorMm|#8Vl(aAV$ReqH>o7%n5rTR)34)xQFw%+oq@M z@D91%=x2@Z0=zmt%z_{RAq;*mDCtTwpVOt1;PEmjr*jrKbATWUGa%7hS&*oED)A>@ z9Ldj=OfUfccx=bPUmW*~K!t4UQa+)wNp3Uj!`FzHIjg#_1pEc#Bf{}me1e}fE~m{| zdP=DVa3qVxTHuB~=}AB2MBK?gSkh?Qp(=8X!{ATssnME zB1-Q9`I~{`jwY=6Mk88~`^*epu)#m1MyL2u#btGH?HM7y%PK0DYp6Y#S5k`I#nxoF zs{MRVDx1>9_Bk%9I(Bp!Y>S^g+%Qi|gCx}K@RL+ueGHP&SS3Fcc->ye*w@K<6|6u< zaRtqm*RYM|?*J9k0KF%D&4*nio*5WoLsNXZtMer;IY`gf5@j-0=Dz&UNBE zmO+ZaM;Z&1077$~JGS2s_2q%ABQhYiNpbq%^1KXdgV`q7V+^<>&(0!4dGbv)YvkWI z^1>6qcx#&s`Z|&plC9M%<5D8>MEA38ZEL!WfoI3FY$F{f6^B&M8+DAeeWtlvAHN2|j=col7dCC8W^bx2$a6e2<9k}*F z7t;5F6lAGc8w0QS?#eeP&IvR1ea3!_hj`Jg!FD*IVF=lunC_qTu!;4mx8D&&6M7g2 zr$T_6U6+=V69%7!7mi#y4WIa>Ma0h@3TPfA2LY#{=1tUu7<-=WM?3vxUz*|QM+mMPhD(UPdt5z6?Nw=|#Ij_w41RvhN_ zJI*uAYSNT;7AZdpZFoE@{`S{VTRpkQFGfTBDv-}C;kyb56qEfCdnWL0r$Qy#dBitA z3OKr{2X?SR%=B}Gj=-};!{ns?<(hXsL}eI~w+R}@7+7C&SobrG=F zKjamKkl1$#GrQ(C<8n5OwI$0qpY`{@b61My-=LRh6y|q*ik<;klYG3$ddnz6HD!w7A6PBuChrpb^(*D zEfs?7U@@#B0Yi2JeKZ-|aJ1{-E36!if7f#Wk?lHFhvRx){=lfUbSG9;;KzG@k;n+` zM^<1MYCLuYnIOu|-R9^EpL*J69Fc^B^pV4FN8f1Vv-AVPY;f$2i9#;;;`|k!B%cJw zKf$W%DB>W{bx!Cy)^Em1LLTHM^&cMuujCb??S%8Z)ch|gG#{~i1}KM< z%~XgR8)Fq^waI4K2N$?{^S5&S*Bge8cfch2F2K)9({F_&Bk|@fT?$MS$vThu@`}K1 zwbPJZ6Px0lWc7N?x|lObP%evLy=S-rjYGIzDc&{bd%N=a^d^G$`il$(od;TGCCbX9 zy44uPAKh$Uk&(gK)rHe=@V_Q$)CyjdNXp`eU)jH*CokR7;+KjB%yFqBU{(K}hgJ2w zh0LzUvS2H+G<5)zC%v(rmTp&9>AY4&8&&VJ={?iEvcJ3&;r-A#2G2A$30NsVB&EXU z@JDPY@p%ph=8PThx|ERgDDT(?$MAa6Cp;L^c8+BEkl1l#QxfAtN1vpviS1lznxN>pGsE~!4X(e z=uaOj_x}CAZyzpJE6JH&-57ov^+!ji*!BcA->;dnQ1|eq;H|fA1eM~&EWCVK_~`qF zNj>H&a&YuJk@b$n1M{XUGnMnh5tdD&<}4^}SxWmZsF7`POW4i3v-TH>C#b>E`!7)v{mE^Eh5v+p4t(?dXBd^#ZRL-Tsn55(m*3n9 zE#bIeGugW_92|Wp?mUAQB5_tUBK!=CKW-o2UO&7a+&;F?yU(1a@K1`Ql$|&cd@uM* zRjP-AX;#?*X3HuV*a`m;9f8>YJO<=O@4e-lW^JY5~l zkXLV9YM#dBplBH9ajwJ`@T1xb`pmbl!KXw?){EXt9uRVF-5__Rp6{L+k>)f@QyFu6 zjTB{T@L35!tz7x&JlB^Fv$D@~FBA4>(x%ywo0(*sYu}Npul`$yoTnsIp8%toR@@X^ zw3#2UX2j|Cjf~CHo>yGpieOYlq~^x`$lvDNchY``zX~wl0L{$`OJ%H+LbLt4Mt&|o zh{76PQBiMRts6FJ7IqdTwb9<17dg-Q@(=E9%jWohk>=S9(Pl(Ds(9a86>E9dH%*mA z!Cpi}%WUoRy`MGx@3u6NY2sif2Em^V*?WpDFd)42Bp zt2%GI*eA5gSDtaB029 zHO|RD8utR&k(UD{M_C^-?40@At_(qYa8EDfMxG8Bo4rD6-)vNTIpVwaofI%#KD&wAum;6k zrUCMQS1PJLM3g49?QSqFp&6(KPe?AtVbf=(#G4U)WPuyNke|v+2Mr|p8vt}m_f}Wg zz*)&F=MB2y?!Gm8cbKL&Y0BC=sPhRk`@P-BShI2O+xCLX<(vb-23gx4U-rR??UIjS ziZh?CSK&ELEwo|1f7nxNox2mu+j^lt99z2XGEKyn|Cv#!*a+!ml%$?&vps&bVf_&u zaQaoX;vhSziIzO@`vmf9<+Xd5YPVnf{BUUZNWJjMe?CX4&##7^|5~^$!yWJ5X>rIl zZ?+ITI6zx^pN3ANm%pCw*IF>JhnKDK)tohEiaV_=16isIHX@-`7FPP>f*b$!`9!_} zPTJHb$@oWONUzo%qG5Q=<{swtO%_pt>1%VR$4-H=wC%e_;&kN2~%b- zt9t4VxLGEyb-l)diJora{#?}-BmbFW!g_6k(&aZjr2OP(mac6#TnBw`7b(nSU+9)t z`nw*&0`5qE_-z*1Rs>AXaaDGjv;5a*5AlUf|Lno7yS4ylxKEkoe+#UgTr{+i_}}4q z5^MF9FR2U^pgu5si+RXy$M}w-URlInGYAcB zV=~ly+=$d(u)3c4Zf?)(V-~5ixM2ldt9|-x^ZS)!jCHb9&Ei77HiwvawoA zdh(1yFb-Uw=PQ*hT`G7B%>B*!3(rj-j8wxXSer}9I5GetJr(C^HNxL3a(;D-DO^QU z)g%?xtswR6c(@0mZX4G|CT*UpP0~>(w-K}Z)vYb-$!aW&l6SVyP4V#W2*k9+gEML` zZyIlzzI$E94@6W*kfJZWchTNDq}|d)p(6ZUU{@Ulo7fyL|Mn)nH2^WFHQE1k4|H-kS{n@ZQ^+>{Y4e-cE3V zZyz_6a{tx4do?Q?@9cp1M1M%~;oCd&Fb&D1x%D2t7* z4a7r5&uvTH_fLe$d`sIj=cV2TW>`z^Fl)|_YqwL$6YKIu+yZK}hNxkRD$B}bB7e2# zqG1ykFWry6W!hcm^f?J1M-d@xkUqbfD}G=0M=@*Ntp$7$c8+zP-?sNmcGiC72IKkV z_k_yGKa&I*&DId9LjkLb5TA&1&EM%SZ)ACs|6gKy@3;0fzJqTldAL!8aS$~ta02v; zN=@|H$AnSeSJggFcw_wCgju$S0(fHv#-H`8vu&qtL41OG@Xt52D(qDqjzZ5*-{Gd! zS5w-GvJDWuJxTtmzI*!Sk$4p;?RtLEUJE%VvhUj)IU+UqJ1&5(Leh!GO{F<41t9zo zZ-iglN^SKAIWEb%W0<=vKFRw1(|BQp*ZEGbQZzKwRtLvrh|JVhzXBGROrq1Xkk&0|{C&exuy$0(A z#0-Xep!U@O7uL{C5agVNFxB|YhuDq*f2^2I$42Y2Ef&V`upy^i-=GjXapMJq%f*jf z4L|kmQg_>kBVq-ldz*?0I=BzJhU^7Vtw#s)G;cEjK6-p_pNb-31%7<_=^u5_s>=PqmM7`y>c3WEvS1<@aqZh%qrJ#*U-eKWVqY&`7E|3(LMm3;Z?A@n&c2Ux@0+*z(KGCx+s*P4 z!tPBu$uAK=gHaiX`idO2jTnp_-)-9w@?Ck!9PX;yAwz+Wg?YG;HVI=_qukkkS^#FZ zgh@BNAog`wGIk%1^?*3{7OD>OorCo`w3i9HR zvPV4@)Wb|vZ~~k)2~VHl-*m{r%xSp^;YzPNvX`x~6dOOLo`k&klF}_d3Av_9Nu-@T zp4i7#Lq6I4v}=F^Qr7&=h=bUOkqb66@wm+`!IQ;7utm<=mG3&-y01_j{|uasXQ-(cE{AjQPi&;3f{*$AY0>% zN^>26t=C?D4 z-(H_K2NS0KUrR3NguL77tnPI<@gy8z@Z>RZxnq7orCw|(kW5w`7uU;QQD#aM z>hyT#uqfF|-}6^w2DpC8J^GO?(7|W-n8ee*FlT>3+524rC}5GW2#xU!GL(TufA6E; zRwyxk@+Qu61#K-5=efQf`j=ASHh^3K<~VMir>+D;?&ac?pkwy3W|<+-4F|0}2-G?* zC;yv58Jcw)-9qJcnV2Z`cnj{yN8Cf?wSJ&vN+1VwJoA*KRwxaeIe_OCH>6W%kn zjwiwL$#JN+V{302T!6}x2DG@IiS~>la#~EhjR_;~=Q=gPsvIfB<nm^b0 zBLP1wPWilV3_+IM8jQ3ArL%VAzOe@Kbi^fG}DrV9c7lt;SrE)ZCWtWE=oH&${O_%_2j84;jwDkXBe$E6d7Dy5x6R0#}Y&|q>>FE65{ z4tUNS@`lKEc{++Vw;T-m(a}O!qz-rvr*-yMD(X`h+%N_Z?>LoYAi9aj$*hivL z3F-{jQ{J+bxZq9)_m;>Y$9<6YMKZ`lKOjd@JEU*h#cB*ObNC2_u%NUBHkW?W{DElU zCoMCOG&GEi2dyo?l9B8$+a|9VOqpiykdB<9x3UtaMST?)(HDoU3cR)*2D=t%h?lmg z4uk946&6Lt5M$rQ5D0kDQ}zx>^YUg2*oVnP)E=;j)DpEPBa4XxUs%`JL6ea2mYAzt z;N>SbOemjV!AAAdVPDL~i>4pGSRE`9L6J6U*d@3bUYDHiR|7=4^gXMBJIpsa9eW_! zUdd{1#viJ2Vk{gsaP@$Jd=ac!@RBq~#hlp}J9xY;=m{#=7!l#+i&k*xVEO`b7}iGo&c)?0J3G?Djf;DcbN?Jk|jY z6-?sGXQ#a<4=IPe#(8TNa9$Sh$o>-D6#50hYzQPr0UJBlEcZIWx*L>#APN*wz|IPr zA?z~k+#6eeocZAXq9~y5>Zh=upeHw^USSi+1>*AY9|UqJ^Y|cua^z>s^404}oKB{Z zDR3BN2Op~g@cx;tLOZ+!(k9prallW8|NB5hfuD`mw$&C&hO;MznCT)|U#ECrQJoxP zXZ|8AV8dV9HeL)L+xL1;1+b^JVWetJImNoJmn>GXAjSfhVUSO z%E?u1K1ZHx+)OY7PcgU+O0jt|F40RJ{cLB^XsS=1huAFTWXEx!E1^UX)O%MJKuBv8EMNKBf^7yXkfoE^Bnv@r%~tJG&WCghE7Zg!6D zdC@eBhZ@`=ghnEU%ycVuxF@(SZUxSyP=inNuJ|e`4U6E2b<-- z-bt@sv{Vj!A>~8QBc)UcTnA7Bx~;A)A!QZc?A@cf3zjF5y# z7=@*6P&mkEO0@d%(IF!5zPcZdSI_jjNx~jhN@VVgRQ?4DJ~%{NR>{4Cp_b9t0CQL1 zFoIM|%@qkurhGpH|2weKs)E-UmZ~O`y=KWi^{c8%VqIJk`qj({Sg_rJN;qcFJtH*y4EYu@k-r{xMM7@)Q-9G(9nt~bpE%C9g zD>^pq3%i!5A88tHBIuF`_Fvox+)N`c&e9bb(BVvTj`%zLyhhg!>6=wndcY|r()bru zssSpvPoGAx5NWJ3FCfa)1;y;CueEA>Mc+^x%q$c3IdDnAyaM_bg``j~2vaZ_dXTe^ zhBM3Y)+)T7M^r&LDWJ>1bxP`VOt0enn@{i(?rXht5TRSc2cm3DFFwD92XHi|3g34I z=scnBR`9kS+vQm7Iw_r}pVZpHIiiG^^0c=fB4*q9>Nj|2*vFUmb74MlW2;fM1dM~6 zo@^3@992sC{ue=FnA3lZr|dV4VjujQ&qK zFs~>~`?^ljo{LaD1rx9DVKBpY>lJFg>#!j->Klf6LO#`MF@jK~ypYWiiRH zhUf`!*>w{Xw|C#JLO|*XaPz?Ao&WUY{ke)7WK64FWCQy$&R%f8d z#^B5ACC^MZe3E_Q-~mjQftIPcU$san@GCqyugfd+$Bm}w&nk3un=y3(yihwt0rw@% zoq<}>0eDR3h@?f&7F11$h65m4fv&KgAD%k%HFrzhrC>To-*x%-n`(*3z?UCriqN?- z#Uvy%Nc&L7V6qwEp9lbB5!yoeE4`KHJU)w1R&jo98~6*?QxW%UlI|*LSYmzju2pes zK)-rEsQAjxRnf}xvOwdCoV)YnI(mXg%d-u&(N^^owki4kK)UnL=|A!+X^{yhdoeZd zE2jY~H?r9ZGw7So$DpYA_&HIEh@6?@#N@AF&-J4|<2TF>P)r9djzZ^QT)|qx99$g6 z^eeO+<0s%1+6q$caZ_6vK1PJgDqVV>tzT9SSlUcHyK~-JsMKI~ zf*%FfV89{zPisKMvwb7+ogmQqJZG{ua&!L9B*n9E!;7N|tF0!>kNxfM*W@?wH8?F( z6tK_5t$6JQ{!Sc9eJ27OoRET8w*hpbW`6!|%*2K;A3b(%VdOVH9R2RA#h=(7ehRJk zumT4!BsOIb%JjOKug%Q|}nQPp4miK;McrFQ+t#UT4OGjRb@EvWJID3kCKkD}$I z|wB}4v8i`*)q^Ntt4eD`EpoopEU zPt`K%nt_YTs0<;Ks4uA}>9tuy&)Wj{pZAV^c^-&-X3{q)@J8iy1Nq6n2e#aNQV}*` zA9e!&zWgb}eI zTeJ9A4D1)K6&iZgE0G^?P|XCd_Afs$=?paye?Q4{IrZ@3-=E!-bl$QY4sffkigls^bv5uC8Y;5RlOPWOpcbv7*EDS~R zlXP!Xli>>FSr*@aJ{)Iw2syDAnc(bwPcbFrSpPZEtU0gS5y|sTS?{U2wf%AO_nvTr zZt2%tR6WmBp0zGFNRPSV88y;9(_q>TQeM8o?Mjk)&E>*X)u8yAt7WRTd_CZHtLf(J zn-}XejW#_d|FtdKvkRnL$!lf*Y4!_tBv~Z3us=>&JjyVN%=$_O%#B?csp)kM$-%;+B;h1bs^;%+QV1GOE!j<6xwjsdm$>k3 zHHxIJ>$yS6-W0;Yw_KVr-d3xSN+Swm&3Fxm}G?jNm71mvW!w=nEn}r`w8PgIB z55*@L!|sS62>#Uf85U29%a>Yd1*~(8syL!B}du(9I=tJWsBMW zdi$=44yv|>R8|rmpE7CV#@%bsyuEYMuJIL*0)QqQ-qPax_9+RMuVnL9EALGwY5wZ? z?qH@hGOgn6hdkf14f`&B0Lth6b`%oG71{jM@`q}vu!EE@{$P0P(=)gHvDVLYFfRYO z+M?HJ4zqQ=l+iWQ+bcnS*Ai#aG&9o?4kKqlYn`&UW_fYV$d=ZMv15(kZbzr%8H;o4 zjHN^UnHNrfY}gut>+)$Cqv2wgWESS{4AxhHW_YPP-xd06#vuB)z6t|t#n#I5?-pSO zR@N&1-S);Q=z7XE-<}%UPOnPer)w<+v5%TsbGB_$PrsUQSo67Dgux!SzzIZKx*`L? ze8A1)W%0Wo<8wyrF=wAS#0=biS1qCpswyy!_x)ukhWUUjlc8yYv|#q0shgkT_F`?8 zVnFkn&D-SffqM(m61h)Di@pS|AGCxlS57BCRh{c{HyDUQ2Pt+J#4$(eBNxFg$PYFZ z5ZT!w>;}JkG&=-W&GQj0Qenunq*sx82nGX+6PXWVzc6H4o7a3;v#5yMb%plsA&zNg zN8!`pFGPu87br}nqSy`@>*<1ww8&qZ8G>9;jIQ4WF6FNd{Oh3jH#2nn^EKV}->~am zvYu8a=Av+)!Y6mveX@L~9Icm6T%hdJy(2JNM>~7kx#GxK;-5sWmEw8LEG^WIVb`+Br>w%*|5Ba?;?E*C zKK}9OJo$N$4*|BsEaof60)6OrsEpJ^jL&T!=gcGNH>lNM{Rwt4IG+zCpK20RSvn|5KrFC~j12I$eX{`Mz(8nm>%iJ&$=$-^Hf`@cg! zzcRcu;4`NXVJ?685H@^`3Vt?okOjQ#qF{(ySRl&H116&VPyU$M?X1xy;Maktq&4hR z%q7<@&&3!e?bu{R`I3EV8RLBNMSfTYueM>jejNIp0KjF)w`WQ<*P}bUoXYQe2j23hu=wS}_akpi{JOt3r4Y3P z*x9^WsYKd*7S_Ic{@Zi5gIRU19pl2S_o$JFO~4I{Qw@*qZFe3$f)>a5#xxpze+Oy3 zR`Cx*s%rkK=J`sTO^(#p1Ds8lrFacs-Pnasxy1Eo`V7I0EFe!^LE`H!7Q$`Ln3UHQBBxLmEmbZa_PoUKki>#TTn+QTZ+b_`qub?G0dvw$z06kZ0~G0^iiT4zt5 zb%sl}20x}0ja&5fWuK#n^O2Cyqb-77OJ59iMLeW`NLc*jKw$Rd8KD^}j?4tMsO-Q} z1z_h>Yn=l}aZ~{(lyR8_{nMVs+s&=xbd#C1G;pZ1&Kz)_2Z$Gda$-2z9rg)L+&|+8Rpig zu|d;?8~ETOstUHxIyBU3mV$_L9$Kz_5u~6V|M{v7VeQ9LgI-*QtjAeEiJ|K!dK!@e z2vzb(Ji86M=tq;@TWz{pe&_rE!?XJEf4#65n*5J4mVbur2WT(Fv4V>5A2nrc7Uc#;* zBfi$1iM%do{>;ymW)eSeoGY0YnfJ37-)mzS+LZ~q6wPJmx&)Ur=udVTQmbnmqk3O8 zdy9#Z(w`jX(`)FYvN^WfP2Z6Cb))OFfvIkD)%7PFC1-

    *O^Wo|Y{<5zZr^>yBEkx|?`_j2!lYo= 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 BtsejY diff --git a/docs/graphs/sup/dgemm_rrr_kbl_nt1.png b/docs/graphs/sup/dgemm_rrr_kbl_nt1.png index a383675a63670da1244b4af915af99474bff5034..dbea1b96dc4ea91257555b129ae545fc10f1e059 100644 GIT binary patch literal 211228 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 z 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 IN|=259~-?-EC2ui literal 188468 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%0D#Usi9#s32m2F7aALB_(!2 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

    |5PFRQG+*F(+V#rxK>0rpgW{>}6s%RGD?OeF2QG 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 1 && theid == legend_plot_id end diff --git a/test/sup/octave/plot_panel_trxsh.m b/test/sup/octave/plot_panel_trxsh.m index 405839d2d..e5d282bc8 100644 --- a/test/sup/octave/plot_panel_trxsh.m +++ b/test/sup/octave/plot_panel_trxsh.m @@ -22,6 +22,7 @@ filetemp_blissup = '%s/output_%s_%s_blissup.m'; filetemp_blislpab = '%s/output_%s_%s_blislpab.m'; filetemp_eigen = '%s/output_%s_%s_eigen.m'; filetemp_open = '%s/output_%s_%s_openblas.m'; +filetemp_bfeo = '%s/output_%s_%s_blasfeo.m'; filetemp_vend = '%s/output_%s_%s_vendor.m'; % Create a variable name "template" for the variables contained in the @@ -76,6 +77,7 @@ for opi = 1:n_opsupnames file_blislpab = sprintf( filetemp_blislpab, dirpath, thr_str, opsupname ); file_eigen = sprintf( filetemp_eigen, dirpath, thr_str, opsupname ); file_open = sprintf( filetemp_open, dirpath, thr_str, opsupname ); + file_bfeo = sprintf( filetemp_bfeo, dirpath, thr_str, opsupname ); file_vend = sprintf( filetemp_vend, dirpath, thr_str, opsupname ); % Load the data files. @@ -87,6 +89,8 @@ for opi = 1:n_opsupnames run( file_eigen ) %str = sprintf( ' Loading %s', file_open ); disp(str); run( file_open ) + %str = sprintf( ' Loading %s', file_open ); disp(str); + run( file_bfeo ) %str = sprintf( ' Loading %s', file_vend ); disp(str); run( file_vend ) @@ -95,20 +99,23 @@ for opi = 1:n_opsupnames var_blislpab = sprintf( vartemp, thr_str, opname, 'blislpab' ); var_eigen = sprintf( vartemp, thr_str, opname, 'eigen' ); var_open = sprintf( vartemp, thr_str, opname, 'openblas' ); + var_bfeo = sprintf( vartemp, thr_str, opname, 'blasfeo' ); var_vend = sprintf( vartemp, thr_str, opname, 'vendor' ); % Use eval() to instantiate the variable names constructed above, % copying each to a simplified name. - data_blissup = eval( var_blissup ); % e.g. data_st_sgemm_blissup( :, : ); - data_blislpab = eval( var_blislpab ); % e.g. data_st_sgemm_blislpab( :, : ); - data_eigen = eval( var_eigen ); % e.g. data_st_sgemm_eigen( :, : ); - data_open = eval( var_open ); % e.g. data_st_sgemm_openblas( :, : ); - data_vend = eval( var_vend ); % e.g. data_st_sgemm_vendor( :, : ); + data_blissup = eval( var_blissup ); % e.g. data_st_dgemm_blissup( :, : ); + data_blislpab = eval( var_blislpab ); % e.g. data_st_dgemm_blislpab( :, : ); + data_eigen = eval( var_eigen ); % e.g. data_st_dgemm_eigen( :, : ); + data_open = eval( var_open ); % e.g. data_st_dgemm_openblas( :, : ); + data_bfeo = eval( var_bfeo ); % e.g. data_st_dgemm_blasfeo( :, : ); + data_vend = eval( var_vend ); % e.g. data_st_dgemm_vendor( :, : ); %str = sprintf( ' Reading %s', var_blissup ); disp(str); %str = sprintf( ' Reading %s', var_blislpab ); disp(str); %str = sprintf( ' Reading %s', var_eigen ); disp(str); %str = sprintf( ' Reading %s', var_open ); disp(str); + %str = sprintf( ' Reading %s', var_bfeo ); disp(str); %str = sprintf( ' Reading %s', var_vend ); disp(str); % Plot one result in an m x n grid of plots, via the subplot() @@ -119,6 +126,7 @@ for opi = 1:n_opsupnames data_blislpab, ... data_eigen, ... data_open, ... + data_bfeo, ... data_vend, vend_str, ... nth, ... 4, 7, ... @@ -131,6 +139,7 @@ for opi = 1:n_opsupnames clear data_blislpab; clear data_eigen; clear data_open; + clear data_bfeo; clear data_vend; end From df673028969b69f8a6f5762d965f6eddfaeeee48 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Wed, 5 Jun 2019 11:43:55 -0500 Subject: [PATCH 070/109] Tweaked language in README.md related to sup/AMD. --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index ffcf9dfcc..c69a13730 100644 --- a/README.md +++ b/README.md @@ -79,16 +79,16 @@ and [other educational projects](http://www.ulaff.net/) (such as MOOCs). What's New ---------- - * **Small/skinny matrix support for dgemm now available!** Thanks to funding -from AMD, we have dramatically accelerated `gemm` for double-precision real -matrix problems where one or two dimensions is exceedingly small. A natural -byproduct of this optimization is that the traditional case of small _m = n = k_ -(i.e. square matrices) is also accelerated, even though it was not targeted -specifically. And though only `dgemm` was optimized for now, support for other -datatypes, other operations, and/or multithreading may be implemented in the -future. We've also added a new [PerformanceSmall](docs/PerformanceSmall.md) -document to showcase the improvement in performance when some matrix dimensions -are small. + * **Small/skinny matrix support for dgemm now available!** Thanks to +contributions made possible by our partnership with AMD, we have dramatically +accelerated `gemm` for double-precision real matrix problems where one or two +dimensions is exceedingly small. A natural byproduct of this optimization is +that the traditional case of small _m = n = k_ (i.e. square matrices) is also +accelerated, even though it was not targeted specifically. And though only +`dgemm` was optimized for now, support for other datatypes, other operations, +and/or multithreading may be implemented in the future. We've also added a new +[PerformanceSmall](docs/PerformanceSmall.md) document to showcase the +improvement in performance when some matrix dimensions are small. * **Performance comparisons now available!** We recently measured the performance of various level-3 operations on a variety of hardware architectures, From 2bf1ad11a76ec403b77b7f938036e849a21bb5f7 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Thu, 6 Jun 2019 14:17:21 -0500 Subject: [PATCH 071/109] Fixed formatting/typo in docs/PerformanceSmall.md. --- docs/PerformanceSmall.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/PerformanceSmall.md b/docs/PerformanceSmall.md index 3cf113d71..52f15487d 100644 --- a/docs/PerformanceSmall.md +++ b/docs/PerformanceSmall.md @@ -190,8 +190,7 @@ size of interest so that we can better assist you. * MKL 2019 update 4 * Requested threading via `export MKL_NUM_THREADS=1` (single-threaded) * Affinity: - * None. -d affinity for BLIS was specified manually via `GOMP_CPU_AFFINITY="0 1 2 3 ... 63"`. However, multithreaded OpenBLAS appears to revert to single-threaded execution if `GOMP_CPU_AFFINITY` is set. Therefore, when measuring OpenBLAS performance, the `GOMP_CPU_AFFINITY` environment variable was unset. + * N/A. * Frequency throttling (via `cpupower`): * Driver: acpi-cpufreq * Governor: performance From 78adbe984638b32e209becd4caf07dc5ea74726d Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Fri, 7 Jun 2019 11:34:08 -0500 Subject: [PATCH 072/109] Added missing #include "bli_family_thunderx2.h". Details: - Added a cpp-conditional directive block to bli_arch_config.h that #includes "bli_family_thunderx2.h". The code has been missing since adf5c17f. However, this never manifested as an error because the file is virtually empty and not needed for thunderx2 (or most subconfigs). Thanks to Jeff Diamond for helping to spot this. --- frame/include/bli_arch_config.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frame/include/bli_arch_config.h b/frame/include/bli_arch_config.h index 9f9eee19b..12cc01852 100644 --- a/frame/include/bli_arch_config.h +++ b/frame/include/bli_arch_config.h @@ -177,6 +177,9 @@ CNTX_INIT_PROTS( generic ) // -- ARM architectures -- +#ifdef BLIS_FAMILY_THUNDERX2 +#include "bli_family_thunderx2.h" +#endif #ifdef BLIS_FAMILY_CORTEXA57 #include "bli_family_cortexa57.h" #endif From 6e9b1e0244155ea65be25067ee79b9a2d367fdc2 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Fri, 7 Jun 2019 13:10:16 -0500 Subject: [PATCH 073/109] Adjust -fopenmp-simd for icc's preferred syntax. Details: - Use -qopenmp-simd instead of -fopenmp-simd when compiling with Intel icc. Recall that this option is used for SIMD auto-vectorization in reference kernels only. Support for the -f option has been completely deprecated and removed in newer versions of icc in favor of -q. Thanks to Victor Eijkhout for reporting this issue and suggesting the fix. --- common.mk | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/common.mk b/common.mk index 999df774b..4551ee1e3 100644 --- a/common.mk +++ b/common.mk @@ -763,8 +763,18 @@ endif # --- #pragma omp simd flags (used for reference kernels only) --- ifeq ($(PRAGMA_OMP_SIMD),yes) +ifeq ($(CC_VENDOR),gcc) COMPSIMDFLAGS := -fopenmp-simd else +ifeq ($(CC_VENDOR),clang) +COMPSIMDFLAGS := -fopenmp-simd +else +ifeq ($(CC_VENDOR),icc) +COMPSIMDFLAGS := -qopenmp-simd +endif +endif +endif +else # ifeq ($(PRAGMA_OMP_SIMD),no) COMPSIMDFLAGS := endif From 428921c2c58e4ed75bff604e6d45a1387fe04ceb Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Sat, 8 Jun 2019 11:00:22 -0500 Subject: [PATCH 074/109] Fixed typo in README.md's MixedDatatypes.md link. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c69a13730..3f4f7a1f4 100644 --- a/README.md +++ b/README.md @@ -331,7 +331,7 @@ table of supported microarchitectures. * **[Multithreading](docs/Multithreading.md).** This document describes how to use the multithreading features of BLIS. - * **[Mixed-Datatype](docs/MixedDatatype.md).** This document provides an + * **[Mixed-Datatype](docs/MixedDatatypes.md).** This document provides an overview of BLIS's mixed-datatype functionality and provides a brief example of how to take advantage of this new code. From d192d4794513286b1cc3b881e6c36ccd1e11a43f Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Sat, 8 Jun 2019 11:02:03 -0500 Subject: [PATCH 075/109] Trivial change to MixedDatatypes.md link text. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3f4f7a1f4..317c80d00 100644 --- a/README.md +++ b/README.md @@ -331,7 +331,7 @@ table of supported microarchitectures. * **[Multithreading](docs/Multithreading.md).** This document describes how to use the multithreading features of BLIS. - * **[Mixed-Datatype](docs/MixedDatatypes.md).** This document provides an + * **[Mixed-Datatypes](docs/MixedDatatypes.md).** This document provides an overview of BLIS's mixed-datatype functionality and provides a brief example of how to take advantage of this new code. From 66c43ca427908186d96fcbc6f5e86fa8253e5006 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Wed, 19 Jun 2019 13:23:24 -0500 Subject: [PATCH 076/109] Updated BLASFEO results in PerformanceSmall.md. Details: - Updated the BLASFEO performance graphs shown in PerformanceSmall.md using a new commit of BLASFEO (2c9f312); updated PerformanceSmall.md accordingly. - Updated test/sup/octave/plot_l3sup_perf.m so that the .m files containing the mpnpkp results do not need to be preprocessed in order to plot half the problem size range (ie: up to 400 instead of the 800 range of the other shape cases). - Trivial updates to runme.m. --- docs/PerformanceSmall.md | 8 ++--- docs/graphs/sup/dgemm_ccc_epyc_nt1.pdf | Bin 198669 -> 199206 bytes docs/graphs/sup/dgemm_ccc_epyc_nt1.png | Bin 172554 -> 173487 bytes docs/graphs/sup/dgemm_ccc_kbl_nt1.pdf | Bin 223817 -> 235127 bytes docs/graphs/sup/dgemm_ccc_kbl_nt1.png | Bin 202376 -> 199556 bytes docs/graphs/sup/dgemm_rrr_epyc_nt1.pdf | Bin 199556 -> 200122 bytes docs/graphs/sup/dgemm_rrr_epyc_nt1.png | Bin 173798 -> 174763 bytes docs/graphs/sup/dgemm_rrr_kbl_nt1.pdf | Bin 225316 -> 237509 bytes docs/graphs/sup/dgemm_rrr_kbl_nt1.png | Bin 211228 -> 207461 bytes test/sup/octave/plot_l3sup_perf.m | 39 +++++++++++++++---------- test/sup/octave/runme.m | 8 ++--- 11 files changed, 32 insertions(+), 23 deletions(-) diff --git a/docs/PerformanceSmall.md b/docs/PerformanceSmall.md index 52f15487d..51f0498b2 100644 --- a/docs/PerformanceSmall.md +++ b/docs/PerformanceSmall.md @@ -112,14 +112,14 @@ size of interest so that we can better assist you. * single-core: 57.6 GFLOPS (double-precision), 115.2 GFLOPS (single-precision) * Operating system: Gentoo Linux (Linux kernel 5.0.7) * Compiler: gcc 7.3.0 -* Results gathered: 31 May 2019, 3 June 2019 +* Results gathered: 31 May 2019, 3 June 2019, 19 June 2019 * Implementations tested: * BLIS 6bf449c (0.5.2-42) * configured with `./configure --enable-cblas auto` * sub-configuration exercised: `haswell` * OpenBLAS 0.3.6 * configured `Makefile.rule` with `BINARY=64 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) - * BLASFEO 75a3dd8 + * BLASFEO 2c9f312 * configured `Makefile.rule` with: `BLAS_API=1 FORTRAN_BLAS_API=1 CBLAS_API=1`. * Eigen 3.3.90 * Obtained via the [Eigen git mirror](https://github.com/eigenteam/eigen-git-mirror) (30 May 2019) @@ -172,14 +172,14 @@ size of interest so that we can better assist you. * single-core: 24 GFLOPS (double-precision), 48 GFLOPS (single-precision) * Operating system: Ubuntu 18.04 (Linux kernel 4.15.0) * Compiler: gcc 7.3.0 -* Results gathered: 31 May 2019, 3 June 2019 +* Results gathered: 31 May 2019, 3 June 2019, 19 June 2019 * Implementations tested: * BLIS 6bf449c (0.5.2-42) * configured with `./configure --enable-cblas auto` * sub-configuration exercised: `zen` * OpenBLAS 0.3.6 * configured `Makefile.rule` with `BINARY=64 NO_LAPACK=1 NO_LAPACKE=1 USE_THREAD=0` (single-threaded) - * BLASFEO 75a3dd8 + * BLASFEO 2c9f312 * configured `Makefile.rule` with: `BLAS_API=1 FORTRAN_BLAS_API=1 CBLAS_API=1`. * Eigen 3.3.90 * Obtained via the [Eigen git mirror](https://github.com/eigenteam/eigen-git-mirror) (30 May 2019) diff --git a/docs/graphs/sup/dgemm_ccc_epyc_nt1.pdf b/docs/graphs/sup/dgemm_ccc_epyc_nt1.pdf index 0f6e07e9a0935c847435ce46d3e71bc36e091748..1d272c7b4de607f2b83ccb11063ee3f822726770 100644 GIT binary patch literal 199206 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 l-eiNMe)SFD^ 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

    L!AUrqIgY9=Ps|kPe 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 nfG^k4M#KnW#T*T&=@ZNx|6^4)tzq(e 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≦EL2gF4$os8V#{;0cKFd59} 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

    k_Po;9m@zdc+a;IWZJD1Hfg~0~P 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 literal 198669 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
    Gor99U+z@ii` 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%0A}DT~r0poX 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 z z$!|oc&-(XB-=vu5D!EH)Fg5$ngPJFi;;UptUd0}Hg4~OLth;iCtXu10*EdJjRU+e3 zrO+jIy0}eOK7gnYlbFNx5k-O`<+ovEAlUAjJR^h_CQOyXD8j)K_*uzSQpqaLVJVWW ze^`P^j!==iNIe9?p(g9N#Yzy1;Y$8JlQxB*7VIjZ@iq5N-2Sex!d$X!8I?$*u`94g zrGPv7UC8+#))p&rnm(eB47>N*`$3Z@ zLp5v^2iycS=14=f@APpb5O*JfkK%01;SN?@pynAaEcXP%NFqnjQeFU(`>1e<_01S` z;jISjt2^ujG%+l3`ROg-E7Pa8(JTs9l;L$=nq}cYaj|<)3g8RQ$ z3$7B;|9bSPxs8`Fk3-E%&#J;f>jaV@8frO3pAe#?H-r5DG$AjkakU zT{l-8!*Rnvcc&aB#STIUakNu%zV$)rl*|ZJ0b@ABUNXWrt3V)xAqYAsNdpGN$k0LR zV@zjQ&aHNg_!61dx1eXy7mZiMH*n|Zcu#&vLJj+0u7o|hU9EqbwJ4(87QgVJ}P!fQQ717HSIz2^~QfD# z-J1sFble_U1I{`TtX@x@&Ip51vA@o2g^YiUagpX&{=_nt-;9F(7^4)wkb|fczeovD zVt3(6{ar=7)c}>}XBP)x5Y}L-dR~O0AV%kPF91+_=^5IJu*EV;WI z25-aPPDe^vgE$EMhS`(V!zwWAVVuMDu)7e=3>6RjdYE^9;+FO&HCso4d5(d_E8+3_ zkAV0uTPPf+M}*gqla@RIlkX9 z%+}mV$00Pn5)x|W{7zx)_7;@KeIBNnvZRz(#T2TEn2;^8(}jgKUkQXY`>(Awvt9gH z7j`zr0_07b`cP%#_WSpH783=UDO|alUNv7e0Wmrt{Gy$zcgNpzg=m)y)~e@muZUxL z45Q^$ZDQte?$Ven1FUCR1uhKUb`cP!7>f$$DE@m4pJo zo5HF<21sdnk5=g*XX%txgl6gBmR4yr0xDm#SxsY+$lCGR7rpoQ9vfm!xN9aJ*@)&P#Q{J?4U{AN)_w)xhe#wJM?fY ziE|!Z8oLGS)$l0NzMM3+>N{!d3Tyz;cNJ;u+1~U5R24K0Y#E*{+fMuG=v#gb?7F|6 z(t|-qGp2vQSKM#v@DC<*KxW5i_;2PHE_TM>w?uINesN9mOS`9S;YAj+i&NgZVNVvN`3u`M1H0@Fb#_(I^!;_) zJvDQ#$(4fdn3)$n8@kodl5+2ufwP2Oe}IM>oj`KWJ3B*~NBqtfJwp0)y=p*@)n^dj zCNc@mNWb^15VtuHDfUUUY-R>&=>{5y%TeBh`x@kKl6J%+2Lld!SDgCIO;Y2$E_WHa z%hR}QN>mIxf{_a9Tg-|M3rTx-!`w?0GF4I%+*4Ha122~k#@VvQ|Xq9Bd$7ixqVRtQ}CdIDGc#duER^5pSbE7;ZvFl5$t%^@6k>aL<^UtL&|7|4Lw$+%1FhK``7p;%Cgo*NPcEd2)X*%GVnH=w#gnDlN%j?CHI8Yk;Z1SlbI-_*7^gGlPDC!NpyWe zgFE1uaM=|EUN&@rHfE|~IN3}Sk+*Ipw5)P%>vkF8T6HZL9RH?lt)J&;H7)ok0kY2^IEkDS@>7F={qoYBk;=0iQH@p}`OD zrl>h;jZt#RYK(Vez;MrSNE&>`9@KCkfwW+AsrdO{TEF69zMK<7ea5nifHpQlRpIk# zHd$%CgzV>7VaihC&l;N8cnWBrr(uaMhTQ@5#XW=enI!FrF_T?dDK7KGdq-9~e|Xk^ zo9>$Y+i4Lju0Pe)eXdB{qQOFyvD;UUEC1afn9DFW|DhbKi=|Qxc5H;}YMHj2m5o2+ zNEyjsewg2GiD74%QGggxvi~RC9eG$KauG8td>zKI+ORjq>uj`g6~E6*vC*&-K+Vv& zKwL9CSLvVE?-<(|vZQUO>Z$U*=3`?yw~82?8i-qp>WB)rBJ(3$+^jUS`J#a7Y!imU z&}rP=(FTSLG-5jU!}6T&UH>XY2a=rmLJJ_XaF^0<=Dzwf zxXbv}xK@<{y1+MVmgWH$n>T8%->@@WA&tT76G4YW>-o}=E;xN5YZEpHEO-5v@3&a> z#s9EXdDqbOSlNa(y_v#w`B5kbX;=u@q)+36)L7pP7?W|R(Q&T?$U)>Ep-o$=H&CK!6RkU}LsqArXb@e8F}h?152JENm+6%)88Tt%p$DH*p6QpeUKMD!7M z@t|P9oyC{1_RH#L(}j_m0XLqkq6-(bJIo&0115n&*HeELympowIshqW`M~{(z@Vxg zJOD|4mppg{8-xVlYHpqJ0ZLpK&8=TXB|}!{*}MpT9!Z*YK;Ip=X-FjF zVW6gMES3f^q4vuE&0mp~a+fQWMWegR8*^Z4rf|C^?ao{YPgYhQM`rGxWq~K_@vzgl zP5sJT=N>;cQ(=8_vB~(q10Lk7hcjG_4P2az8kKkyvnBJs4DZAe@$ZzL{MAUMoGg zHj&l$f3;CR)^}-m#_qVCJ_VRo4v+@#k8%iPTx%^nP^S0{?V4Vgp8(BOP>>$BB@0n+d?!({ zPy=*)HE*#d>F<-)S)X*MB_leStc^9y@NyKZ<1o?$m((M}m@mRZ^6vw+@j@g$~SSq;KuBkg)v00S- z?2IeH@hqvZZ0YEOE1CSPZh5Q~$}jaSbvJUXV((V`sMEo7`c~yYZ+(=jW7*9Tj1@R*<7NKQsyJzbuz zdv!dVEnNerYAp3VKeRsIcnn4Z-fcUuV&2WIT$b5@3DRf$X)HQ@EFH(Ytj^-ivZJc^ zW$(v+7|Ze4Ky73D>qcFZ+YdG84x_0Y_!uwRtGhBALu%AoFw72wx7$f|2dF6cIUQWT zw3QF;1{?>*Nm@)SGdb95x2>>g!OVw>;-|7Gl88HxbP6VRDUU*rB3RW*BjWh$0+xR@e8xip7ruWi+%C0{t(iUR>JavDmhzW$nFO zydt67C&!UJ(il*Sm7Het?K53OqM}&oIx^gTpw*wl|8ey9HSyy|ZHBEvC3P(PyQ5US zBs;k@Z`F*uS8rtC4A$N-sfJ6UrQf=ecwzi}4%8D2JEwd?M!8snM+~ayrKlf%`0uji+-<*^xQpw3&H5;Uk88DP0@+Jxer-V_yZ_^J zS0Fj6@&kkP3*TBT?kpNREtZm|&z?Vve&^8sLz0_+lL~DSeE0dotN(yUqDBRR-?_hI>KOzHRQZyvn8zWCQj9+`>E z5iPCM-u!OIxJmhE{JUDXCKtr9E)_-I)Ecj>#7btOmkckPKS^}R>-O62+v%I=eY0w= zFs?Mvy(IMcq1WzH|95`+yyBPVr9^p!aa%S{Bg6w`x~AoBXBL!KHun$Ke6kv*6WRjwQM4k0z4FiBuzKWpKvKtJbf3WtbHenP20_bxYGpUykz- zWk$e{i{ouBu>vfA?a?>Nrdrk>wdjD$w>bH6yi)F2eVwmOD1H)C`$ExuTv+PqB5#_- zY(KcwjO4j_YB%Ydv97#mVjBGb6|x&;j=p`<$JqVDm^r#Tn?X05;}7DBT0+KT1z6*< z3$1NuXAOJf9Cr;encUU<$`aDu% zPs34{Z<$Y>>@c`d9w-NeWR<%+V2KH{d+?5JLe0I>n?~X#D&*(hD4l9Ujwc)E_v%TyHWo3DWiqN;0XHMfT<#VVmkd#{22#0En5%le3TpZ8w~Qx z#)9rwS(qWMDzdm5A+0VBdBo#_4h*nBBPuJu_CcU4Dq;|#sMZ1l%B2A^TMnWHT}c2> z(B$wyL-!;oaC4$p4Jh#XQWb3^GnzmGkWF@1Ck^N|VI&WLb20mxGzs*YC+R)iFcwr` zG;lxx1S!7*Obi<&z)(A_pfaH9S|keSwInV^3^M4O`&w%{==JdgMk*5Msu=@}n?N-Z z3__e2h1RVY3T{!(In6S%aslZ@BJv4>9eiViJ>mrls^dnQmI>NtKHbI$B3Fn#5s6pI zH0oLz`jsOW{P;ylDwFj7awzdpZ!TX9)Zh++d;HnO0XfeyMsb0iXD=8rL9ZwKxyeAU zt3CUZNkFsv`JkpMioz7o>xtcdVi2#S1qftAq<}<)nK%apsbGb77$}&!6FnKWfrIv= z++^XVqdNbbiuU)dyG%8TPekk`52)vy;x%puLLRe4F7JM$TpXK@yb0Z@u?k!$ib+OLIevzvs2s~=@Nn|wR#3^-r8E^KjG;f*Q~T5sQB|I?mUgH8M5 z{@2}?fc=WVl^6H8Y{d7tR_s@A8_BM$;D+n%2jZ?Ps;`$gSX@`=vbt8p_McW(tFJ+; z)ufm=`#9i-fF9O;{e5xxN?rq2P=r14(-*B)8H$I?PShLm#9L^G{5kQ{jM6kYT972u zj?+wCi-h3azApIbk_71)caHsuS{s0Y_YdN~bxx1tD$iCF*=U&igCZc|&(_UX-t96S zCS+sPq-Yo7Ki^*%u_R@Y-Ce4q-T~F_02Gfve;;w{b+0mLxP?WZk?yIrX-uY4dM}?O zo`ZkF@AzM%3Rhk4(y!)!d##GnN-vWT4ZR z^$Cg>P636-G{3{hJaW5RvQ&mrO1Nkv`Lp`+VV(qQUYo&pB{d;2A>i#E@vq)*aZb1+ zLojYGil>fUkipfu`d^vBfnjNM_w_0}8dn*!@{6#LN9(`Dm6z%%Omfuyfd%vQC&+ih zb8p_LCq5k&S92A&PiZ9F@h5-n4h|1 zV#SloV=RJy*NjuPG9mj#-t^9Z_M#BrC?6e{E+gbkzodyw^GK|v?lnRKv@Wrov{UxH zSbVM!jA!#rzcXe%W`(L(F_B=la>T9A#1rjVyzv+1UolWfmTV$x{uHIeqai+1e zx<0GSwEf}zV>03|PgYdMUJAW{a!}(Fo#&a#_7U@A;kWDw(>mEZz^MPO1$?4)H+YXq z+rcgL<-!Zuwcvtuq>Ak^;Pqb7Sqg%nDjtgnvgH6F^ zeK78HfCnDZgTgynF=YPn_?HkpO|;z0-$b{7%{s1w?S zR|8JV~vlNlQ1aOb~fS}o%5W9V3PGhNR4{(*iB?UX093IBQC z4g6H^M+WbhiGX)_@&IjJLu7&^RSG-&IkAE&|Ga!MG#Ci1v^DFPNrHBG>Y|(=s#2j( zhAGgeX0_dFN!Kw`9*xs#<8bhEy*S}&hcFclXqE$`FOtj%4SEWKTt_dERo%ZOqeX@% z&QgM`|KNb?=+L0IpKw3|G06mGo+SjUd7)vTb60H46U}@=Gb!JcXT#ADkbv(G0y7gV zex!#e0t8}%OAu+u&rAU-x)uX+Q|3jA5$y!=uKc3};oVZV_Asw}K!(SNeFUXWwt~%g zh(NRN7(q4PIY4G3W@yj=GcX8`xU6;Z%MVo0kjiHiIHFQG-!!Oswd1Kb_}O>8Gbo@b z_&?wE^CiNizUjjb`H5+c0X(SfPiIiuLdm1#%T$VI>U91J-}c03b&=<+^_3vB2M5A8 zW+x!kP5JA$8>ts)KlQNo>mgJGaIt8M0!P0|}}E!j>K z$3ht=%ayzD<(3yNVtJR1ma64VWo!;yFQxL}B8`>oQM#)w#1~vpr)D!#6Z1BXOs9}b zW~yVycb&d}epbB&(jqA-xNoD@CZ(UB_c!mj`Cu z`}Sg#-6fLKEwy<{=F>Oo^BFw(oZB*fVpwiSk}5 zibOd4_j2thw936?pXJ>6EFVT<$pa`%`5LMGgZB-S;2sXp;QepHU-x?uSP+pFGSNyf z0x$^isAPb9yvw+uuals3$0&({8josqRxu&Z8hf>=f~xlWt@rSM$FDYLtHY`!KR6rv z)vPv8N#Y-TQLA=`9vL=5k9;Lxxg+dK+!02V?ucd8G2@H~8L!Ie+!j5WovLXXcfirH zd4D(Y$k+Jgv7rXi@jQ`c`#$r(7DsKkT>>(wdKv|aI73+-&NXrkM~5PMNkP?@%picO z!w2=T{YA;W6FTsDvyV`N^OtiEt>w~#8(bv;)DUJ_5uSy1AsV)N6@6#D)rRQw ziWm^CvYbP|uaC3ppoaA8G0lQnO(;OsjrdRmB^YQ60?T~60y@F%?Ly_M(}nK`Aj8F{ z^uX2Ml~7wl58-7bp}46CKax~0#nM#7KGu-<$MRIfJ$fnv9g`PmmG{`}{g5~rC8C*A zhwnJf^#e*k+V=>9kL@{|oBG^Gcrm1;S23sR?v*FcJ%dhKqY4WCHq$Fl^U(rW^RWegx^U9xDV~jqe%^HWK4EYj6Ds-=75Y?eb)( z+_lICD&GzE$=%rrp*(IDFe7jIeK5J*rtPE@gfezUCYdp&4%1^=qsODTO~s+OF*9RY zd&Qvufwo={#_TJibfy~r4c7le+!-vY*%^HMx<6R|btyBt0(F0I8j~n*h8nK@Eg@K!DZSfK)+0iLXmS(BCsGWtdfS5-iYY5W38#ft=`h9-f$3(J6?0(%hr z;1km7r9*hNF*_r;p(qsOcH~RAs;ir)0M#!;C_>*AaDLGLtfmCjpKK2S6%=HFsypaU ztx`n6CTbQG50j2f>H!qv9{yOiK7RavOM^0OkevWgMzhyuQ{mxYoJR4G9Z zg9*TXX)^FDcqCMx-RvvWfeIg7Jr!(p96c(gGyMe%Yyu)|@wy4*v)pO3~mu+t!!MWm}8*oA(bMPyUgR@-17?9UMa zXHdJ_vEQC|x0}$JnNn(Zx6k+i`8>Ktot$d`_Jr&gNuSfC>X4$x((l z#n-oZM@H-cs;t+s)QJO-&VWBN9>v}5wQL*#*s2E^QMN8>;3G=Pwm{pAMg8lDkpRng zrB!LbYs|{zt}8XePNLUbb;}ynnR*!gqEcdDQjh!$?kQbyZ{Dd^h11rc2&JQFqv{*s51t);Y{po0x z?&Xtk90pbp_4rW1!wb9Alr;rbku0E@@C0tk{Z*h zgSZ8EAdo}vF7a`VaqwdYu{hyCAQv@|X<--$+;@vs?c|X-OkE|tre?k2ij+m|R`o)yO5$>pw~K%S%LoLZi)&vPEfw@BLSg?j%l|j(0^e z6dtNYccN(&{+}zazfe3_2c&>@(Ek!_na+!JAdCukH?swK^Rj~idz$tWRSJ++J4-;R zBB3}SJOxyEH5p!(SN(DJgGe=nT_pF3>9V}=(>_~gkSX85{7g3Q4M6;!0D}0^yQK0L zP?Ph9xS+zhO>Q7$_g^CC?5khD%yHA(2!Q~$L)?^15Y|LZ+Xl6C6AxP*Be{5^V_~0njrhZg5$MU5>GclD-ZW7 zC2sCVr%08jXJ2M+E(iPx_MV31>VjX@&vkg@xwX=5e%`+%ebfImY&TZa@^JqB*wDA4 z#P`0sqt)qtR6R)QW}ipxIJmWssA)j@`KGE+TI`YHX0)SKJM>+)^nENez`#@pa{C)IRCFAsOSGEf-HVLJq}8nNIe{8bok#)#m`7uS|DZ&r%n=7 z=G$|B`Yvm)T!|L_`+xpOUoX`I!BP+RZicf1&Ar8C8=dd{IV|+GlJgeRNA0MYjT29bjxT?R;f42}jhe2MqPbBH z<}COH{JcI)x{?kID5gj}z1?;?7T*wYNxhURIOcq$2;h9qQdltv?c1@uJ?6g~G1#IA zV0~`;&!hiof}GU4MgT>SkdVf6vE;zl?}oNI{P~qV$yU_TE|Y`j;^%Xw+R55Qvrm1b zTv8?X)rs2eRf$4*ql7u*0p!vd=PpV7K~|O)Irk0=TdY z+l>d-VsCkvKE`zTu)DD>s2r@H|NC#C!`lDfK!+cKo<_f$HV%2;{=_a3Jq>JOiCq{q zTd0rb`l3O=AQ0j5TStlfeH^YFFbqv5~Q;J4Mg7*`z=#@0Lec z^yG`){3>+)%lntTG5yXi=@ORv@yEQvNsO|%ZWP~d*8~%r!dz0$v-<3_5>3@Tb9+-6 z3Y-v^Xo7K&Fc&@9iTrFO^>r;rnNWt=TYrNK_jlsf+1g8<$mv)P5D9I`m0)|?7;@_k zG{NZJ84Sy5BAOdqiP+lKW2ge(poEa*dT>xDZ*QPY8yIKNEBv&{pD?PiLp1Q&vkbvn zB+@p?YJ&MsohRnJ(W675*7)grR(ba22i-0A;h@+xAarj&uj9oneOJY#xBKvJ)elJ5 zhxg|lc8bZoGfpb{*+&%HA~9;Z&rP_Ly{ttX8W~Zw>IJ@m;~eLFRL=6c7NH8)-ONhV zxWBhY1)Pej?z~4+2^zP4+j^(+R+Zg55uR=QJ~Vc1mL~pmdS8_OT;y8I+nYHyU8MU5 zJ*@UDzAUn(i%is`-d5HOF4*p&CKSU*>RDfEQr&9yk|&@?QJJL?ak442$~#i_&^Mhj z>AjdxgW&fV^sQ445Ey0iX=5=j-!zC?)c5KAk#XL&DfxJozik_~W!iJ=wyfV#Y&u+f znqKDXC)M94d486zPKNj6UI!|{ViH$g_E*rDXPKzRHh9}zE7z-h3?ceVtff-!EiTo@ zevOFcHjnODKCi}1nZ&4<-q&fbyne8gyET~p=qb(`!$-b&UTyo&lDezB{2({=g&wiW zpf1!$ylSv~@3)^i>bB&wf-OBY)_TR~pn=Wpmqk~%h-^!Pk}HHCrJH~EwbZkAj#M8Z z-sd2Ra_#r$$MuzE4~^RdD!5utb{kcb%w5lKHx11fb#J80U0GrxFrE*!vc~VL^6Yho zUx%|lkUA{bzWgU$o^D=wPt_WE!ew7R@Km`y5_iZSKQ3Bda**T2Jb^JMt;bVeb`TV7 zcOkkDe3F zsWK6W4fn`AbM!yD%_1*|4OQ4^UXx!HauMhZYm}x0)@Jv!s9I z@u*!99)av*7A}1Kk_ZDUD)S60(F$9VwvEr52hkN_2m@3TbI4_OIca0R^6Q-TD&nhr z5#!3bYjzIv_yj8xZ)4mV0?sO96%gixvNxQOt?Z|m+JG?z`^q{sEus-PjNNumN zK1-fNz_9w-otnyMUcOzVk8a;gDyF2UBJ`9q*>=W?H@#LBn?Ydj_L{%4ndAydB-Yi< zEFn?B;DwP#)EAiO6t*8(Id>$%G+#{YKXMNR0}E4T>@`feT)}~m+2+-;OWp|hx%&k3 z8k48hFWN0$6AS$>WU<$&ffQD9@LThjdeV zsA6psKZ&4w_75(8G>{OqLe$qvmdz&j&(F@MX~`aa62Y)YbBe2oJ!G?flcbBrkG4-f zrK-TM0`YJd+Rhc%CSXXnl~clTv8-18^0jT-{CNMS zC9J8|Ys>$$moxtUsQm$lCB4m<6oFf|0sljVLU&TRuQ|ly?E#y9tcxX=L}LVmFDdXTOT$A5wBSrz-+qM3lKjzD@8*j9{Hhy)n*7t$VQF@D9{lFp!Jx zl}jniU#t1u%~FF8b6S$fk3nZLEbW77^!wXA)ruY4eicf|5uC1>FSUE|v&@;TslVHV z63_K?lk#G08LDG1UyFa6wx10~@xT^PjXdWn6+*`x~Q@(17F)oHtGtjJ){!PADg(V>&Dw+bE@6F(H{=9aq%jR2vq>~&))!f1`$>PXkWd6qp=a1(OHba# zEdzG{esKu<=u3uWb)W-DXU0M|HG%iJ*?R!#fjTI2p*xnh#4V$#ALLPm-p>4U#Irr@Br%=BNY8LabiAdm=cQ_pg4M8ADGGZA-QE=@G8J0+Uxg${SWXX0EXv{n_c#v2I&x#$|P~e6H)Yz;c z*x}Ua3W}G(Q=l8Gx9CJcI%Eow>99D!K6=yY`+$NX`Lgsy`jK*stWCq6Ia(;d>xHTp zWU~az;??V-8J9O5@uEmFzDJ?%)y3-}lW*jLymAF~y$Q+#2+|J>OzxwMjuo=2Vm7 zKw@}o#A4f@Qgn29ZC;I;jYx5JW=13qWCl2c#ry&iMe%@e8CO5hw`)#RPvzuwn;s6vLE#8OE;@gTb(6wFp@BNx{tste+=yL-bpN{ufXQ_ zqmcPu(Hrak6HNz7Y@k_B=H+nL5H&K(j@D6aEhLM zj!0sK-z7QCZOUX!a>O1GsO>@23|^E9Jg_uR`Dk^xDP-*bx@vD^652xTWk-tQggejk=&WNz`@E4EzAXFn5%IOT75qLGxEKkC zC-~Ylt-H1fNC?FG+R#exW&M-y+8E*Z7U>8(SB_MG)%E{k^D=Q}eD_3koJdoax_FBf z=(v+c*MK7lEYs*iS((b6G?!=`Nnj>NLkW~^^aX;-CJaJln#X)b)85tyZj3mFE&BA4 zkJ5U1atU6HjHR^f7|1chc3`IgKX+grIegNhfu2dP-;UxGt26s5#1$A_+IKYX-ST#E zmTmVIu$N^MU=8Yy7JVq*n@gIBlhn`l(7K0ov=NVEjOxIf>3pvqa{a%FLQeUTMln1- z4%j68mcNbpBwOV#3=>ZpEt)GnBM**++(LLGbZ%9Dh=z|c8yBCt7#K9o_I;4SIXMA2VB8tuo66T zeW?Xbna#T4SMQ}3$^+SR9E9`F=Gc{hCphn=>P%Vv8v^rA=4j}{M`w8c(#Lx)TK{JFZjzp)?JERj?NTLN&7X7NiS?DJ_=YQ!9eql zF#7Bc~u2( z=`v5soI57k=C(DA$<*1Xp*SpEzmx^02*tQr{9g{00v;P($krGi!9@V^cft81!StuO z=9oL1eSY3ux`kf5VBbHZ7o%4fr9sQIqewYd19H#y(|J#GWk5gcI&z?4 zj))@Y7LIy?TuUuq8B?9E^04Z{Om{a?Hjgbq0lR z{%o5*Ktl9Sv1-q>aS3&e@;f0 zu6y6{e!V8rcok;fJt?mL&^?J>`s(yzq)_toVsb93)0T!VPR;Kvyr_+{W;e@-?$>UX zoiC8IfNN~g*6A{6TqW@ZG18FKox~s2hGHnfR6C0v!%*$hUHoIzib*pD&m$~s(a`ug zC12{33-63*eZ7dYv>c-SbRi2E$nVfk7!_>e;@g&@m|e`Agww}(ewTud2dblzNlv{r zcmE<0e2yJHZm88WF7Fam5TVEV?Wzjp8_gd5Yl_oE#e%kg+;J1iu^mo)T=ql-ftLy6 zpWcM?QyjJ-Qyn^>eEUZKZvo}C@29V8J9LF>J9%;d3Tr9n-bzDE6u-iXgZkA~C9<%_g{joMp)QLemK7vpDfPzebjCSBuaBfSvjD zg+_qta2Wafm2${CJhr5F0P+4#^SNB&4r|7m(U(u?`h!GbomP5hVtCcg2fxix^Dt8i5HKvH{|lcqZc)abl0h$)#9odi4QLgC;$qrH&o?^N^J{*rUG^rd;-bEbX$2q70Jy6zWZ6Q<&|#;pI;xCA8)QI=BE-sTIm+LKBTLb zCi;9bw-g-y^Lymi*`+7D6@b?2Dp5JDjR^p{+#wTs);e1@r8EGkfZsDn0GMr?|B!f7 z%H7o=fd5E~zzym16hIR6YfLf!8<5r!Yw&X{XZzSd0=4x^T2Et?xwXjwnc&#o_>ABf z2i5O%G~ZzM@Kn*abGmQ)!cVtLXZ40M!HTG~_yPz_O3yz-=)xM^L+GBqKtihipCo)^ zNSvB2PT=_BRB@#B&vypCb9D`@?xB|3cr@!}A?s?(t?^m?`C5XAQDL*K300}eR8bnt zB`*nHH_@hHRBK!Y&pY_gRY_#pAvuu%3(?pT)h9Pmw0D#N(^+$J$rVj7D#RICu8(3t zuBcc>w)jiI`&6V)4F%NDtxo1#7!{-vS^smwA?V zAQri|Lj_nTy|lVEH<^*vx>Lpx6D52bC-EA$8F}hINaDb*;R#Ia|A77HEWm3V087QM z!35bC0H3SvpBr-%Y(7_dP>GbR6bYH^%6!nMyd3Iiwr1z~rv(po>!N`y$vlf~x;zV; zW6HvjCo7N#E<@(IL@B`a9~_V)iQ6bkVxxKj%(4E;44US4o?_vMycO|(88!KUm*W57 z430ZXW_@_EJg<^jJ%ME;j)zGseveKwJ6Dc;An~z$)~6)SVmnW@XGA_NDhs^;$je1# zMeq}g`!#&ck_6WPgFlcU`yb9wmjVprVPs%PB+K~S+Asbyrjt2@Ep(K`GW^7+q!Mm( z>=-^8s`jr=A01;}1ts!|8x%S6rNqVoxdUHQei^52Ua!9cE^lLoPG`R| zt4E;J`2N*1ztkiOpO#k!ApE7?!oBjroGC_@^Al|CE@B<=TGzk ze%oOc7x#xMlbf#v5mf)#(~yDvi})SDN{=sx!pG&6d&cMAFpZmNF^$J7(EUz9#(0c6 z9m7lsXA8S(0LuZ3C=6Ic|Ai~`7Z{bp`cD-d9KKgGU`aorDBOQM1tX@rPzI7{FP_+1 zG;Bv}A}O!xj;&oEA334(Q`O@-g-pEH5Z*P_l>~*%a<(|x%xKY3kc+2ORkvt^X-3mG zkPGg@{L(t|YeaaXJUG)$;B^99w0uh%`+LxKOdMA{*V$GmAwSY~s4q9tc1EDsXS8D1 zsfzm`mf;W0qPEOmmSKqsQ<>3%I^&K%Vf@P2N_E93wpABLvJ;Tqw<$ki^mm~@w&Ygo z7>9|M6(TdRsV50VNX3en9Jxt?2%2DU0?tq8)->-Dg`M1YmFHEZg%vVH#FUsEmK~*; zQHHZIa(zPI`5+HdK4uaM`YA)Vl9pvL)AgJAnLe59ehB~RQ+Pkc^4Y{Ppa{z}*IEQg zsM=Xvd7^c~l3uBf3FVWuj2`kZ2ZSqLz)#M3i&*M8MqnWeCuA$UT}&xGWpI;;>|73! z3?0%Vp*xprObHumt+Gg*t3$OiA*)JEO+(nk2=K%xDvunnfzwI7O$EkObF>uFNnaxg zOi27$89_}aZQ>UgJ5YdHbHwEO2o5y+enID97;dF|Gu8^1PY<>pCC;6T1r6&lzOEz1 z9FdqLB6wZ5q=aOXO|F-mImgdra|P*4v+SKY<`u1@>`ZG@b+&G%7Z^EEaJKg3v|Gp(A^Q$$PRHkwD zXE%2ioF>k%i5waiA5g0##zRS9zoz3Lb2{9uOYhbP76OJm*AJ!i8csZ4)m64G^(7wa zJ6`|b@Kbi)TrPbxKqMJytSB0&z$;B_#Sy7E_x~049nf%fUH=HtqIZHp^yrMzlRCJ?H%P zzGv@!&bhPhI{Th|WQeU$&lrSX(HSg=5?AlRh=d_!bi$EFpp6uNbaIX=e^wj9rrLxf zTN>hRu)sic$*Gt|A2|cy#8zQ^SwX#VLBd4_3+WnT{=`;z>9`!hy(d({=G~^f$!)p1 zm42{nA&C8ru~K@Sg1pFdA&3}Zjw(-V8$Yo*m?N;Q^NK>j`g~wp4Y8R=O8L8|SIeaH z{lspVpb`kiZgGXTc~X?Bu-_|rJS$hB2{R|J1I8=&Mb(=Z1n+)$sf1{K5PwPgf}iKk z*E=J$!2I+?fwN@HY5mwe@qPmZ%Vd*#uy~nQbjA09#U<|DrtpXF_iUbf7?ZB;feAc! zxrjXFi4K;VsPYZu{hIsvDNUAj z-}(`$;}f2MP}RTo`oI-Opyv-qxG(mL9y}o5&X`nn0<}1;JhAI@D3BQ3EwlFmf3E_c z%1eYOd!N2&Jz1rd!OOR3-^4^Rm0m`h^BX5mZPt%D!$n5|N0d#`1zt3H-*JSv_-$z;LFWiB0t>S;yMnxFr@}C{F92z&;96tX3SJ*i@ zFw#0FvQ(%^EbI=9ZLF!ws%*UK3-`s*kAsaViDO{9PsYWb-~OwKwX>mvBAS)W&d<@F zf$(jSUDUl(FV*6o*EZClr>~8vzJi~rKiDq(@)RAWE?9CqI0`tic0 z^&VTa=l0yCdq?*7B)f_p_xOXn>3fsXb6eWK_T>Nwa0;DF-;43R6RD0X`_oh~Wiin- zE2qAMq?_+#hUAC-c>@HV+n?BcU}$NSG6hMIaEP)vaTczLf(q}pM;EPC;KqM06lXT% z{1W8|rcgmC8reJBGacROZI)Y-+OS;4;=@-0^4h}P&W*`W|KM7`e3jF?wYU3!xOr9{ z{F$;7lW|hRQTv;`Uj1g>)jSgxkTH}e^sIvYu7dsmGvsI~FRuIewi_r6(b*cx@*Y!Y zRXCn^*em|BGkZ8AB9Cg#wd4lcU*&CvkXe+$*Y(B?wp_Kh_SB;e{x>#U6w>Fi zVL9$%ib{~wle8(`4p|lsza|awHt}HnXJRyTy2c&DdLrg&4v;{B?7mgT*BvS5_v}yA zGk%>s*=-vCFlFlif64n&d_&-s_Yf`AN8ehE?_}(kFS}dtA#0zQcJ{W6V?tm}Yl@LS z^hqE*^PosCy{cVYe-qIpjvjCHow#o~5d5dsl1aq-b#~PF_{3TMeW=@Hvg;x1Na)}@ zJbS>`X!KLP*F(FD%jucIoiX9_KiV1$-rYK;Sv7jdcObixG+osi)|csR)A!W(5kYsj ze@JIUA*nwQMfEnH$~jF8__MV`3ddFK)fS$3?S; zzNvZmdiOPNdc3&VdXu#O{X+iA_n{1mx7iPVjHKe36;X~WMoF7@$8-;6Dz4sfK5YM~ z^l>a9U(QPHZV7D%_D6EQkLejU%5?OhWe#^ilhPNc^|MY#h9C;!kPKtkr(=R7e|1>a zT*4k72*`@cgd1YN$-(BA^M$D9ct?6XX;NbDzUTNcm3dE1GOE#>Ol@}sd+#<&s?PG48;__1&Ih*zeF&zqkeW3CzMYu$LsP4A(b&kjF@swt?fUEBLT z;l;`(5;K{=P8RwJ?WS3I8;SkcUX2$_j~KY+0G+(jK*e}CpF zsg$u!88yd~9$|tS?mT6-ueQu|!i0~rE+QA7vNUuwV-5M#h~WE*>86U`)|+oy<ap)z%?NqE@VyD&xoi4Pm^bI}M34_}^i4RT*W*jbwVHD?WB z{Z0R#n+jHtxuVkml>U>8JD7$>61#c38(+P#Y5e8Ax5_vEpkV}-{0ptFwMTCWJbAL^|4#OY<=X{V*|VUb7{q6w%PKC12uP`dDYvQjN*W49lGiI_CpE&W+8~b+XKaQ#Q`jm3pA&-*3nj{(#nuS@r(d0+Sw@W#;HQef4ZVmg|*&YxdGN+o0brObcTG z3VF6Jq3K8Jrq%5Uo4n=yx-UYF2Od1!-s8Cu4@ZN?cScs@#lk|ydrT%N-tqbr&BYMx z2WYbIn}<9@9`sd`L+3vA$mjLevWr4qIgXC}V&>@n<;1`ADt8!?_-w)Fd7Bq>?oU~6 z?k?*AHo&`TF7(~5>Phj0UG(F#k7ufQdC~Nd9y65uu9BQ`=ojeiZn3U>Koj3Tyh`VX z{CSkr2ZkBK$fN9u`Wy)LJ!WCbMK}_gpz;9`n!fR?IW+(wMxt<{wBYpc6wM{3%fY*whCDO%_x183l`&hG?)!GEM0t5#^PpoT~)AJ3( zFFj_|Roy=qz;}O#vBR`q!t!hip3QDJu%F-!s?Up1e_W2<{zw~tvm}sRH2m3UP8MMq zecKPRI+~%I`rupZuLI<6!v>pLFDhs4X!b{fuRo-@^wj76RjCE5c#PfnhY9QM$f`DyN!sqX zCTw#o$K$kFi1W=QZNoXH=vKb~r{4~{k71EQHO>ykMR$^M31En`n~TBc;-L{uzi(fA z9Z(f^b{DwuZ+lLklFyfHp}ae{zpS3P0AKV$NP7zO^p^e9Ytp)L#Pu%N*4$|h3U_SN z6Ww^rO}t?%0c)t=>rz8TGkM7I72q=e&`LfArGY#wZHwX8Kw|2g$t`wXzxzngmuQ8^ zj)Dk`qhwRn9W65Onw~6g zl9(WFtOi5YTj%)uXiY>jy}t&dApF8k5+}b(Sc@TJt#(mLH+|hsWP)fN)uIL}n&2thLYFan)dK%}^>>AI7Q zAJo+`DkM669t@e(BzAg)m4Lci(?83nwG7 zIrPi)-d@C4Ve}To6#%&zT)|A&Rco>1c-I66&HG0#He9Ogi2xI{RXCH&nj+JzYQ=;& zlPi6&O26tmAX6oxvFZDk%*N5xOf$X==^Xvc;mNAys~}Z&*v6hy96|L+4h=|Ez+v`b z9|ws+rXJzUiabU2R6->eQ8r*f_4`h`*drGPuCvr8XDx8i%vSq5sAT`vfWXb)?ZOwg zm{o5uGO7vyi9JylVYv^B1GcWf?3HU7nN|NvHqO@9J`u30vXkhQ4eQ=*?BA*w-GmkL zXva;vJ=(GHkfcb9c^|&|zL_%9j8QLBFK)WZ(&fm@rjM?LHM3U(Ts62=!B0^&l0#I5 zsYA5H0_1?l2+K<1D*$uFv>QqbpqUP(zO?i@@*R#54iS2R+2X0V92ym4?+|vmH0eu1 zPmh&(&9obD1@P)p*QY2S#(q}Vv}(cWAoSOWU5+T=r>jbm&ebc^`y^Zri19k|a-1b8 zO4&czFif2Y|Y*SvWd1W>a`I2fI4NL>e zNK{P?n|PRAxcXA!jjnd9{y1ah6v904YU0|=SJHgP#p3pC<0Y!7An(W5OvT?T^j2e1 zLZ1n$+DdZvNuaNb=1=~*TIfcCx&Ne`mD(kuh#;xI#_e;$4NAvFxy`j1*EeQVj!G3J zK9d7AbB|zzT}KYrCPnj{D37JaY7TvCn`~~D`0p}4zhazZNn?^yGe;t*EB|bAm5Dpf zm_~17#+5jnG|!BuuabIWW?PD=9nuwYlMajHCk*W-!a^AcLV4YzZ9ucTI=TV|$4VuA zgcfBQ4l4o#J4bhf9LR}wCLC<739zmS^YpPwX|&5k77|Hx!6evm%{W1V@sDko zd|`8zQreE>ldOmZq`a+x>X&+;-v2!o+a(fhW%k`$0{0G)^g72J!Dp15&SVj}q)`{V zwRN*PLCLTGOarUkoLU#G*z5-(KW;lzAxKbKhSw8QB`gM!)H<c!9wwbb>^m}Jp8Ie=cA0%>dAp-8-DP&g z2dq)eaW-w3}jUuSR+YzNL>LaChDhy!Q6+RcNwh;`gm~f1xNK+cdRA?DW z`b;sWEjkNJ?!Y#^Sy@9PZli}pC3m8@B2=jLfM-8VNnNRXk_c#s31AD7+~I-1u=poe zEG5zfodIVIj|TRaNeCN-PLHh9b)rgqX*9?ufQ$AxONZ{*BA?f%48dqgV``y;Q>D-W z9OTK19_q9{k&Fb`0%Umljq=IO>M?SHotgtbhS&%LWb7ihIzea*!4U-|0k9rN`0s>f zB*7XdzH%kDNHKjRu_R9WV}(cdmen2#SMsEuas>p%MbDt?yX#Q1QFoY zW70cSreMVlkxMQrb4f;Q@x)E9bi__O-Ee8|`xrZ|Jyt>JOi_j4(3?8gS5MMWXG-Qv zC=KKu28C?knQ7SxrAEsSjhaLZ2Flkvyo{a~Ywp4$dACwsz7Cf^7EU6pbPKKM6ywx+ zSa;U=%SIpalFd*3NL-)|NH?f=wGS3TKg|gsm=;m^b3+}HC-$Yh|ou_;} znf*y0)l}SeZ=G+1Y(mv~33bf>7+g&;i-H)2>|{OJy3KCEa3i8>H|<8m!|8O;;xDkq zQSPK-?3Ug-t>MvdERkWzdavsfFYO({6uc2=Iz5K%$<}bm=#A<0W|pk2)GS2yR=V2F zCtG?937ojR2?SzE)V1UIIcr0#0Z}I*MK#+*nNVVFMy=Q z<`rED5)Pzh<=MGLCFVFsN53Kna6QHBgQhD)X|kGWl?JVLnn)8@7`%Lg=xfkO3*mNI zQXR#h?@Xk=$<`DxlTRhtg_yg0V}EQyjB zN25b`WYvoMK-+#+nOrU!#`07*(vyanvy6jYh$t05Ldb|aAz;KktQS%`*0Bt^-a)e1 zD75%MPGcHrs5_0Ut@LUkXT+&1lzWvu(U@Klun580APE_J8b2aQ0Nk+LiyKnD<;2iM z9$UFFa*d*-(E1wA+*m54C3%msA1(EzaP}%|gnfYvA*;jh`+VpaI}mz&Y=RzyKFtmo z#A%jWpCoFW9umfxB^s4iz3AUCDz|=`T8@E>Jj5>%Kg{@K<3xQG2anf`3>YZy(RKm4 zf-PjHN!qI{04R5km1ClTuW00QHBS?)ud06KI0*LQTfRl}r!hB2Wp{NSy}-YP;%6m|33fo?my`{6e)zYw(uYaUP-a5(M}R zY1U>hYSjM6S1iNEdo|g$ztVQwSdpn)mOKKSD~}kb2mm)3uk0}m6q&{XSfTvN9BpV>v|=Vw^lVF-|=M>}tgY1ewuRS=>+~uyXG$p}lXO!10k5Q2QiKb7JS{{f0sRenB_V9;3aFjr zK3T;&jttaD>yXiSx^*qWXW|dRRZh~aZD2%6M`o9oT+lr3{XMyw_jt71o31HQb6?-Q z@l?~iAw5%i%ZaY2DOdAEdasq_VW~LU-W`oeL?>P=Og(c)A7nATjMY5RsvQB$_Scm3 zI-xA$V5cJl3iJ;(5dyiIQ|p1>Gc(GUy@BWBnZwz2()h5s>(FVAj3#-zBT4)WEso2L zwetM{a1Mh#&MO(*$3r#U9ym=4?-gXP>`|B0Sz;&9ZeJ+%N>&@3_DF0li$e#)u09%~ z!G*3Rd7v?W(6U+u+}+Yf#Oks`jbD>cHJLG9eWa|FY=dC!_PGR}?zL-v!8$Cp0_A+& zfvpvMixLeg-7LK9SGiPKJnYN)yCs$MjgQ9C*V=VjqBLjdp&6K*_f$R7?0WJ?V@(@@ z+AR~|l#Dn#lGKb~3;qK-=ycdDhN(xATF>ri@Fg{LdR$djSNVvDOH;YMC(b(wk8(+J zV!c(x8Q~$D7Pgf*Ex1_0GG1~``DieU0EebTssk4cJ%$?oP(!)BlU%u-N(_gV;iU-C zo=S5@Q}swn8_ORJo~Yr_;2M`Cl&6+*`*9M`&;a*hh38eOZ(&|5%FAe(bwc0<;uGL< zjk%vnm5Pg+uf6js-;s&GIbVo4qhR|9!!55}!6x+KZdcX1_~>KTL=>cgDZ+#7(XFio zE2|+2)#$6*h?PMKRhc7QQ9u*XqlskpCbW}v6MC=FzM_Zr)>g`PxOd{$7hJczR(kJO zESSq^M>@MaDy73$uod=!WwfXC-nl-)D<`l;u#a-8dHsRjL^A|$&k(6fX-bKqKTtW8 zD-OH|YKIbH=;AexxUW&tlo`D z?YTT}m*Y}6nZ5czDrmgIRvca{yj`|Sh~lYXSv)1zm({02d9{#2+Err~D+T8xCzx^3iDHZ2 zo}j#ZpQ5~0$e`0K9*zjnMUg?qXjg%t!ph)^{K}pdN!>`({7U$|cPh$R$#mL@q1G$F z+H@McBdZJ1Ev!_u-%k13f9rw4{*@W$qEcG&=y?BZ=c zM0yk6buYPQ_stZg%eF$hLo~*y=5#1AfZe9soU+)BRAkw+=xeZG?zhCzz-u=-8MUTW zo`*~Xo`J7C`_@PG+|FfNvU=A};CV<(O4LCAj3y+=b5=?o0uc@D+o+g70)1N|VMI$5#Y1F;59*?zR;WnOkftNSbQXm(Ogs z8P%+>sk}`npE*#PS-oBtQe2-D%)n&4gpM~N9kNLv6IrGtRLM1pv;tXdZ#8%X5*B6L zYZmu#!K{=i7nz0Tm?D(MYS*zEau*Lx_gfykFXr)EbW3)@Al1ietxaK=yLY%I18u-1 z;thU_lmoTvdn(Jr1Yk}#0&s($k~klth|qMTB$h|C(9F(OmJ>H67|vx=_<&oZ`+~D8 zh_L!hD$eLMHr@y!#UN7BTyL{j##0w^ouiIJA-2Z)6Q?mkROFdiE~9azz9!;~PPimv zT{iARuGvW1bdzj323b4fUFKVk0n9}7(1t8-GHe0Ql+sywAbQ)TE<`ERV7vWHngG#b z@+qVXQ@ng=vXx3U+JlV!pKiSS_ z5h?h)7GlqjL24V-Vqm!@2rV8ASk<7mN&N=q1NRf}Q+Tnv(i!w!`|(rvh@M6A1fyDR z#!`1BIi$PNa>A2s8|!x=K2`@I^~f}!PwS$u_1CRiKtmC6mXS&Qb=-{9dL4gI7sebYo&K&$p-7rfMq7&Z6Q=5f$)0TV!+{KU5}s(Hiia3MaSx_ zO%!a0lM8p!DGcq>Gq5%SE8+N7kpE?pOF^<~R%1yYRX=moUc-NKH)%Uz8s&9mo7Jk@(HKoVYE!KfY+3 zvhF^2cBOZA3tgu6@hNe%a!(W_q72yo6#)bS6#wTys+hw~8s~YF2fMn&?u97t-pRgc zvw#h+x|3a;X>RlW=_|y8cVf8lB8LSm_qlYB&doZBRqpe%+Q?$#Wz-KVJlW#RZ;plu zTqMbL8{EWux737B=Y2dspA$TG@##9- zUgr7H**v}Ud+j{nL9`W(QOx;4r=a;SUF>IT4`(=RLJf6Mz0i5G20ooXxAs`=9lQR5 z2B+?e$Egba`jxrR+2`?L|LZuurlnxF`z?Nx+1bkYK~Lhc8w7F@jIe0%jdoeVQ z1^K4*3E%S>-bX@_urbF+RdpSdQSWu-`#Y3ei*BcA(`Aquh%$Ycpg)z&1nEDvz|X7N z4=Mz`k#evP)G{Rx7^SQC@*TKUK>rJ#k)_kXl7HRk3#VcwwHR3Yapxpv9U5{k zoNh_#Jr2A8<-{6FWv=>6G#@PYE3(aeTL{X zHRa{%XyAi4xb05_XPHB5**@O{vp8kCXo$J)<`Ym;bLP!XyyE}-hg378Xv95TdyOWo z!x`_@;8FE{l)L4&@vxg0(%;uG>c8jOf5~ zS!J>B;1RzIH}k@VGYbCZtjeN9=xkFm{&Z$BRO#W>gKOB6X_i&O#FGK~vNcZ4pMScI zcAg1gIY;@mUYv9YMUIp9vl8K-(kwfIdiJKQ{I04IHtJ|ANseEd3K24k?b9;Pm{kz=U`D&@un`oCe zeO4!F<0Fn4S@~b0>*%0Lc561b^{+`#$Z?0HZ!6z&;b40o!dYUA2&597@49ySGoc6X z_-H6Y_|)H5!F382-lf_jsaMv}LgVGlr^Z}@J>>BvwwdG)_f{xF>Y=|l#z(3jy?n)f zH#?XdZ~6G}-4y@Nm3Iz$tRkV()UU7a25?_rfI07i;|-_ZosQQG(-m&caD2didX0oD zt^S_Q_js|!QarT~R`isYa;5WP&0zQ(vP7NcVY=?@=pYZl^E55RN8iZ#5L)xq!kZKP zV0nVT8z(#jYEm_1sP5Qjifdn~C6CcF*ll{?vmHRP81ZPJ zdWMLZZf1AN%65Ea!mIXX23y9C(Aj9goDZUi>(!wJca0E+yN}*u1)4-(*W`TYd0!cw z*e-r}MHffU-4-zl7ut#5ezvWl+vB3o!4#TsbnMHJ8Ude|acNupA_5Ej^)0S6jNeSv z6z&qSsK!=TPZdKEsg`^gywP~3eJb9_GGVmiW2CUNgVtD| z4e0JB(6F#OrF_&KF%agCnT=MoCNzP<7n8deb3{TrI>@0texriAP|iuNUoR!0oZ$Ti z#`@;4WkM(?Wxc}5ljaX%K8ALpGDh7F=B%~NcyL7nG^?xmQDGo7UH@yhL#9wDG@URA zYDyTr zUifTiR#hc{XhMg`#js&#@7TsvH%J**G(_Ki+Wf4iy1Ak2`OE%W3MYDTVjA%xOX`iF z7cH6Cj#MARyC*Ad87nW5bN$CE%xL0f(HIk(xlg2G_I63ZY?U0N-MkRm?BiR>8?lX@ zY}=H{ji;(YKS6C7J?dj-agDxj>9svLA!Uruwe9vxU(e--cKx_D+GzK>oYQ{yx8JDJ zkI0nIan00C)y`y-jiE~dp`rQ5M=9C%c6*6Z9&iP0f!r{`M1(Fohua5AE6?kLO3%zc z=`w!6>m{^>;q<&rb4gr#f{b60`}P*6*+cG)Hg<_yxt_LH4)z8TX?Sp?l}}JdBHd#v zC(Pt*J(iT8N-Kjqe4{9&mz?g_q9oEtHQ{;j#SAt}FfAkddN_@Y2K*$YI;qssUxJEF z1=;zK$nZ1g7A_pJgSblE={odkEyL#IHAvx_vVjfBytKpQw4o$M037*Iu;wYg$X6y?87!dS1#~ zHd!+rniaE#osUuV@-wsa+WSev|M;QzUc3-hB5Ddwfs0RWB!|D!q=0jP$#4ezpnYA2 zMUwoHwNMfPsg7v1$Q{3;KI{Tms{BRtTHOoy=(`rtCxk_lr~>m6C`ib}GtzW+;k>9~ z5~XNX2$dt0f}vF1ci_8|(G;C0h1Dw&ZFSo?B@|b$VSxVmBmMX#>SBS>(&nfQLU+M? zDe-$w$#z^CVGqbP{%8a`v$z`xj-sx^7(YUkwcche68@^Fwe?Bj%06MJ34^fa3k*52 zF$)YeC!ewom9|EHWW^7z$+d@xjgD$J^+20yeQ-8)4zDJ2zQ@jsIx4!)+xe-g;dnUk zr#Buo-KQaMmG^rgoxGft{SJhhP56KpAa89+E26!l{OQpLCq>JOj`6{AifojyAumq! z)~q}IbfC9%ipz|puerb*Ti-l#i#Nr*GTP$kMfeqcnKsj4oga_;BemP2XWuT4q7WeTGqX#4_n{mK%Lw6!d#Acq$nn`Wx`-4&dC3QE>Q-j8#_XM-@I> z85@f*?g3u6MW)Bp$6@<5h4k;*?Pw);a87k)n4}f_LHvpbS&G4u0LK@+(mKb|OYpC2 z8)3zKe5><0O9!Z@E;ly9{JfY=T^*P7t_GbxqY@>@#SAbp(=#nz^R`X1pT2&(qi{G;f!ooys3UJE_6Zm|lyZF?@C?OzZ@YV_WU3@%oHF`nHTgTVR za|C1CU}F5>w2ZsT-3p@BBHl5SD^yQr6j}eBo;JXI^!lCf(`>racw&sln-!s--f#Tf z=*)SQt(5CO^UaoSbJQ@rx<;5^9mdV9O7XT1pGwPCgMWTs%UzlG(Wu!3yGBt%DIr`B zO6A3J{f@iF>CbfbF^`aW3owtA0e<6;2;ZC1?NT;c4kxOl`H>n%XBo-dgN}r6oX%HF zw5&)E6RU`SMpVA$?*#`@8o~#<5?VCDDJ^V=)z#EGCyG(fBf;&T?2n=hd=AA0qNomO zZgh~S2_w@HR#rv#vY#y8mAcU}woxD}y}%@^=f~4jP^7A3C9k}It0wyHPQSrP_qQeUTng+cwj1SOw)>QBm9Ui?UBS&*TWI&PkcsFD;z2C zd$3wI0-IMClv>NrJ@t3saWb?YBa^UnRq;zxj}q20v+KUZRRxMs@!i1eVc>UKq< z3I#pD7oR{s1;3^0gN|r0Qi0ye4d2NUIl$J695}w*nT`?t)gp3NJ%--MkvcnpEVGY~ znV(k$YN7km>H9PC@zYu&6&7m3Z-Q=GvHBI?MiU55++=wAPXuP0kwhwUHzQsbvw&4K zGe~{4V)qk$x@`zcDLqwp-!Iybl=?EOqSDo`2?eUZXQ22<^Cp4l#G0d`|18-MfQ$fW zstkZ+Br5vXqom&u+r%RvbmZUkO|;@S2ajLjx29}q=+`Ss>j#40Hk6WjB-RgLY;7MR z5Ebky&ZwOQN2mFtpJD-r_4?X}gv33i=!YY8V3&Ixbs+CH$oRcEBa zG8sXZ%OW0u&S7CzH5sF9C}rv36%(osXIIPp9Mj!kbZ|COQ$&)rK9W({Bvul}ZuKW% z^$&~SG-Eae%-=mYBnajTzbpmZ@u83bNrEnODMfiX8OeX4vj3nEX`o;Q{TD3v53Hg> z0Rl-_!GZ%qgWO=jAn+yEC1i6y5C)R4aP@>;)=XjU-mY2!;UI`4z#t_HRs<-thmOV&NJD^A7>Z|4R?;0RIpG2nJmmVnv~*_Ad(*fcmAm ze_Qakx_SWfrB2qNcS8Qs{}PtEM6_IkVV6{pgaOPi3>M<;=6VV1`nv_Vd;5EWB<#HX zHT{FV{{{Sqpi5Q$7WALJ5=rJ2&{hEH!Zj^biUc3-$N)54h(q{2wY@j>^AO_{$0v6_A9U6zH-KtN?*P zTR{PC*02x|M8ZNx4;L zF)6^L%OA-9-yq^18SCaDNa<^Rqnuc!dn z`rk1HDY^fU5fbF;?FS3`XF6B~1cZPtyZ^7bZ0PS100Mabsp)_qDl+m?vXb&rQi__o z+PZQ&GK!ko+Hz9TT6$7oIV}ZEX*JOQ&GOguxAu;JUG^g|>cJtdK_P$jtdydHjHDa| LKfkWI9>xCy-oQUj diff --git a/docs/graphs/sup/dgemm_ccc_epyc_nt1.png b/docs/graphs/sup/dgemm_ccc_epyc_nt1.png index 71eeb46c7e7fa8fd6b719a0a9e2211904217a778..200a29426b86480147b85f58555b29c859140afb 100644 GIT binary patch literal 173487 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

    ZIfOQT;^SztFWkpKf_&z5-g23fIRzFl1 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 literal 172554 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

    =SuMewq+f<LNyuX!|ytt+J$mezP`CN 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 LI&>t$@}MQ@6` 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 B9I*fZ diff --git a/docs/graphs/sup/dgemm_ccc_kbl_nt1.pdf b/docs/graphs/sup/dgemm_ccc_kbl_nt1.pdf index 9ff9de2023b519fe700d62ed661c4891d5c7ce62..ea39829f9bbb239b9b126c691ef26a936ac8d553 100644 GIT binary patch literal 235127 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

    {5bk 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

    `?DJ`^4e?4(e_0x2)r;6-?t5zJiJ9a> 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 literal 223817 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
    Y}xg(VBdNQEZtVNiL3}w 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

    ^gBB6F4C%+DhAp0{f;x)qQ+o^o5azVQ4KW2F;p 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 z zoFN_^JOql4ZwMlG)tOYZD|Y-6H*1PzuAp#3Ugms@|37!aw0?NLfZ}{1K@ZesejFv|}riRcn0n#VGJvM7`}!YWo$v{Ti0( z_OP&F!Op-98ZcX^jR|McAfN> zr?gi8k#P83P+vnaR9w<#UKco&Zu$a#6#*W$AwKY0-sMfks4HIO0sTJsIH^~n7@<>6 zL})tPH;>t9rp)o@lxK|w;am4=OYM&XkNaC=`@p+O#!i)X*4xUn$^A;$<%qt6VJWag z(Os{IOi~c^=?o@0(nq%G_YfNWtK|M1(Bv8Gtk#S4*#JZyL|h+0qkJ5lfXmy2fYp?!J(seILbgd$|gkF-IJZ-1Z8atYgPf`EjC|*^0?pilAJ})<1B?S(kP!7 z(v{X0e}TvUJvTJ%=h4TUYpH40AqLnnoVKiqpwQlH-dJxza50({Rb^5&r}O+|K==-c z5A=KN#s&X+Cb|ZeO&^&MP67^H3`4`DL$jX-uF67~jHzSh^VesY)w`Abc`JSNNe3c< zZ$?mn-VkpSwi}{#9(Wu4VIeDo^h8EG>(4{|K|!5XPUXD2^^ElEHOay@U6pBQ`nQZj z2;cOD;~US>=`#>V{G_oUm5P+!fkl>44p==CBU?-Jz6g%js@d;Fx7Ac-%JE|Jyt`l5jD^psC*tr zEhTY4d@+k3Dl_U(t>>@G^Lb+M61UhgY>!bF{x$ zgeGFXPl1Jk0lU!fzu2pz3)n)1y^e|IenZYuKK{kG_WefPBs$Ox zMiQZ3+^&0-u$u-oU5x!+4lowvpiy@A#>RhAM$L*|Q(dK1+(J z+mCB|RqKGPH!;;L5*K)APPl??!dJJ?I%USmLq{3- zR$PvG$!uj-sSs6~+)W12FK(ms0$P_!FL*u1ZTRPHYpqjE>7y;koqN^yuf7=Fs3M*w zOdY+zi@f-Y56i$AoQBBVCWTQd&CJ}aH~=I_;6DUYCnZ%jsI;xqRiKAf8`;yQYGhvb zDA!)JU}@y|jC|sTCC+uOemkyLjcmO|fq;zU*hQ5i4R6oy9*l2qxHTU$OQr8A@4;{8 zqI?vl%iH6Pb-3zUzt!r3cXmWqtIpgD?l+m4ps>`Ebm&p*ju+PK;23W=!E4U=hm)9K zwk>X%7S%!Z;~%Tn_eKs&QS@Iw1>g@PO?#$V)xXMQEUEeV`#8M7&-Vb6pqvvmCe4Wb z`%dW6yH6foWSyQqwzr>YFQZ*bSg(y&+^sq{{2K?SmtzxPV+-p*n54A{XvI0*Ijl@Ln@12TXJNY$Tp% zdrSsfP97T*uhQe)guar6Wa`yeF6_XRlgqIBug_jk40H{z;#{M4?xK`AtzRG?TJahi zolKG0l$T-W*;szEQ@~WN|H}#6$qo0{m8{Ql@DOa0A_2B}eQp;}#i^Gu0ZzaBL^mm5 zcyaGupRoSnB;B3daj_Ncd+WA-?}D>(y))}RT}#=NrkDDGz?J1ysr3HUaqnf$iw9h~ z9qRFuFBTk=gZCgRu5q>Hfo2Q-%YDg_ILg`f?;aU4KpyKOZyH;i)TbE&`U#oSRRPo(-F=eSP`x;(WMBV`rU0 z_N>Whlg??4eUL=$=IWJ0-vjk=)v8GG`rV!PN0IekNnAAFo31{Mw`E4MzqAB>#`vmZ zy&3t&^DJzK$wqT`azpp+hQ0ee2p&gjWNG6!@NJg+gQAlep<=Gl8_=9)a);SgM8ZHy#NG8adi1pyAJ zzYr?`Df1tG3y4pcG*}9xm*EWnFjj zY)p)VWcS<&AS3~FD-Ib0$U6QRqbPiVhK{rK?tO&_a^nGSjPHZen*EtFkP(OT2qd4n z&q-$G>N0WvxH-jY!Xa$GmnZyHV!t&i#B(aSiQ81zYn*;XD)CabZP&2PJGNKY3a}CI zAcyoZqzr5c@yc>rh~Z)rP{@E`tBIQdVuf)xa1WJ8)_xWKUT;yxZ*f$Mwc(=uHM@B> z+gELJ$Mz}KM)&tB*j3^*Ma4O1aUOI@e+Z7j58@8WdOEgs)E*LFGMT55Nvp!tptG)qR| z5{LJ4^ph3D5E~GR?MT`rDB`Yd$TK*WTcvEG10)xf2#wN645ynk*ga6t03_i6c=J^o z_4XJZb6y4Y^pFE{jf2C3cjM^6_T1p=GKv2nND_KrWG0e%P_soA{3qp3JK zxrz@8vhT7}N8GT;4>f~W5D_)T5qqrEW7Msjh19~<1 z3E;ii&}GV9z&pzR=VYCFe?NH=Cue#G!PpiodGr~zPTuY!39QF5GW_nxgk#rh+A2aZvJ-$)(eX&HYrm=jie(w( zby%ooB&5_@de?@EL%$ZkkobmF)oHo#@ay&8b@_dgB?cTZ34j_lcOPvW)*&r2HGA*NT|xOEvb3(}+8PUF+Sd)WIim1W%?*|@)GVZA+cMdNP) zqoI+NOZ1F*QbxOXBMf$lh%}f1Qd=;~ipis1X)zJut^fQ0 zJVN!W!S}b9GVCiEs21)V!^F}2u;OJSDY|+Ike}T%`a!(QJ-$N6pRT?Z zqeO~lDOb0ww2x`b;F7nw>?NB2YZ(*PFiiHDkDHyE1*&?VIK;r0GIKomdhL^kB@ic# znYi#J<)G~RkU6f@4ATTlL2n$4l>O7&*Z_D3VYrn3Y-yur)TaCwOj`zh5~`&agX})R z{|+9X{Q${)^cCn8vGDhyKl;fd$Ccy!9;kRfrh+wncQ3CA@XCHzA!)hycq$kCukn}y zh=2eQx7Ujk>l>kx$g7u7;TcEwfB#}Vz8-K=-FM=2+4Z8*yJQHagT#D2f5_7l)JfrP zU$QRu#RwD&*`a>nFZpu6h z|26@#vo7F`Z%l(3dSw81`e>m)=ibY;^ufQnD~`043SNKrlvN|GiVi*w zy`EwuvK3gKvuW0*&=YoUk$?C0tto`P=PbnvGpBA19?8W#8eT$e3LF;mJ}O9}X2EO{-1(i{#O|CTkgo%?^F@%-&&_>ZeJcrdK@co2Ro zBF)r$Hk@#>cDvG_{3Y>p)c1yA45$LU9*X1*YHU(1Bz*q-d5QZWf05e~l9=}Lu3h~} zty^pOYTKGWhq|I@0goY=J6uUfC2-Co1E13Wg0zk@aBIuy?w~91*YL@<^Z3?!Bzb35 z*F+Nr4#gT*N8q@y%t{@NJLzjin!^X6uqPh#yrde4SPUmtuU~D>-%YD|FK{sG5hpIW z5Nt7ItSvHR4D=Rjnq>NlupL8CsXAPiIWRe52cOBkI}u`+{|4L?x{jhYjTd=0N{>9K02Jh?dA~b(UouN_DTijb}4E;D`;w59>>l;Av`06+W<;K`}811`O!ocf~Zg%T~4{e_J?z-MJ8 z{JaTZ&~ayd01h({+Xj+xgh6it@GWZ7cfG2Kmb3u0A3$GN0VFgx0hiYB1p& zmLi}#bk9YA@Zj{?JL!=PBTgvVsgf@S}!WmiwU0?UtNaOVy;i9k$PLqBOW zZ)RmU-ni_EReoLWRm|U_KtBk@U|G2p3Qvpz&oal$kp_K`)+YX0N3!AiT!y+)4?JjQ zT>0E>+H8H=%yDCt`^KuMmw!CGOAGWq{TZth08$-4-D2^$hwIdQMOidDr}bXlDXDM8 z8VB*)%vV+NW59g%=WQFJ0Rk(JrBRl0M}-|e2C>7Eg~;=~!Rv4m=OMw>!TdxvGnHf2 zf_mR=*81tIQ8y1NYFYaANttyCYSmjO1KC_{Q=JMAt|b>WJ3V=>n-_M%bi26}_xZj< z^L|F&NzOJdaVxh+{iGBTo}6GXW}2_a{+wTo{MWybbAkxD$D3J)abcHBgo((>i$;db z9`|*Ws3J`=gW51;<%MRFv+JGDaSJ}pku2)q>p*yEePmof;2t(o6gICHk z_V(&^T7YT_+Oi1&*f>BLFaQ`xJCDQdcVCKA1z7dh z7CRi3Yy*B0H6g_fPnLd6wAuII(F5Lr03eC9D_bHI(cyoAdw6uj@E_zKQ0~qzFK0ut zPrMYpZ`Oi#BAkF3iY;-z-sL@e^DgZj zj&G7&Wk@i-IDR7qJ9ym7eNo3EaPQ-0d|ZEyKHC=y2jWl+>xE|KQ2b&RbdS~*TIMdL4J{pG-hckL1(i|Hkt5KAM}lX?lj^(;G?YjJ%O7oe+iX;nZ_O`yF0x`B z6AOvPOXeP2aEjEu`Nu`OL z*v;56xe*!ny{KNg&A0?uy#S*^)t>!vr}bzn^AIR4`pD0mzHJA3*a5D48sI0HjFc|+ zGZ3L=EC5{Z9FiaZZBnDI5&qDRl8RiQ^o5-xB1gB;ix@s~On5u}yc+(R^~aOtWJQ6e zxMg)LlrD8-Cnx6c&nzKvr0}gRpTm!(`u50nTe1~Ebg)BrxZLktZ6xrW=S-8K?mYod z0Z!=)w>F9EFGgLp0ELbD_^=u0EQowM?8D=|x5#+iqWun+MS5>OwY#zBYn6$^iPi*w>9GWwlww(^3?K-w0%W}!!DM-+ z&M{Eqzk-}&fZyckKpFf^M2S9g2bdzyMb9uZg>Njk8VQBM=>^#O9VJ6j=>_6Gklh;6 z7BT!iqc98o$*cTTgP0CmBLqDdo*CIW^7q&DVp2(6=mn$AJM}%m1mQuW)^_xm#PpSR z;;xrT`m*HXotDOt;6F2x5R@B!z&BBaMV)t)!Mpoa7 z5N4&b`Rapse~$1snlQGB0OK-@vDKx|r&!|>hp4qo90d(#2TZ(rUxVRAmvjfyS&@c4 zL^K^JKEf^(N=ELmB#(3|w6`NvcI-V^kNt)tbYF}OkZyi+@xt(aUN>%W0>b&;-g+9> z*jmIl&hw-J)bEr8AZx^M9k!C(OE~-yT9&e_%A-bHA-47B*PaNbOLG3rHiuZq=NzyO zabE&!99w%!o|6gw0K1O(^%lEU28F%*bCF+Oi;J?v=q6VRXcZY=QDJ5(hK=~}VIyEb zP1re$cy=vAZPr_6kT&H<up2AFQ7UJ*@~%cz@~Y^M(ud2dua~a!to4hyq?$rM_7{$Zu#YgF z2-z&$D(vtBQc9%I)W)npdQ??aPjeeYew>Ly+LCK3K&q`=Jb9RR-*m0p_+Sb*$nV@Z_o3X(Gg0txXv zBL8~|E0RicgW}dhiP|SnL&e^6VT1PV5;J>Ju5xuIsHDLw|Gb01hBAzc*p^3PQipYj z8UX_g$bQe&QMUcHL@G^E+@!EQpw5j)!!6)lLzUoT{+9(sF(lEIEyju ziMtzf*3kb0^~xgS^H(SnQPb(d>{noX5~=WXiSr^rBX$EhcFmM}w?KDn!;(6Bmv2*a zd4NrdTyEdbQH7>xfg@(IBrNZ>EexX|M9M1&Bk`lZpaO15pt6m?uvWZ`Sl91SH7|}mJUy&P2B4W#wbCf_zms+DYn6q})zZgG} zO!B9->TVrsklJ0=NsV7@>6Dy8Zg~E?YvcTPy0eo>N_}zruKE5|zbA^R9o^OgV=mWYeWe9feqj65mb#ynMG#jRo>^cIbUz zcK>@futcUw9y2)YS+iI4r&0f-LOVI{+dOV2^Eab=6VO%?yOUFmAMoU5(@P3q-0vd2pm2`^$MR`1U8jGREwc}H4AsS;S1{LcplzF1$cjvv zOyJ+a9xU)?s|*OpVG?nJsSPiiQnnD?pDeM{U+@oJnb7d4_*e z?53vo+DVTa6HdHsYB~-MZrnS|M5Sz7pxM7%Z(S6DF7acYDuou%*Dxn~6PM)oXSN$7 zsTYshkAs#|l$E+Uj={hOE_En+E)=sJreS*@-oAE6M*5yt<#I8R${Euls|N3O)E?V8 z0+H#AEoD4gX5ekHF3z?OOHr?wCepvXxe>P)FmT^+*vJ zfR`UMfz)iAQ`eBT1;a`Eu1&YMECkdglX#y5guk3!x$U4m8ao+={Tb1pE&`NoAwSRl zY`^3pQbH0lL5^+pUBsFR6?Jm?PC{@TC4k;sPx3>a7RcwW8#OiUzSB3has7Fu3Bb*N zIwqchGXaJHPxPNRHF#{lc>1@&Q_qJGd-M#;8StR^SYQwU=1cCbMel*)*$@InK0niF ze)GOM-e(oIWE?#4;$)yz;RoM`VBS)loWsVTti#@@0BZFpC{2gwpP{M}j{ZWb4gr0K zACJfD%xG7t#8aQCkJ#IWAelEGq)p0oWxZZax8Gg0-QWpH9z=Im(i}*!2YLPwLe;k7 zfXI>F3?madb>ODiNoRcH_s3Nv7$}x*`rJTod3+mi0A-M6&Za8J9O}x4Mb{kmziz|P zndBKkZrK7zNm-kr3JA;>+C>CW2O_ z8MmYqk1-wq*T?-Td)TmfIw4D#(ALYlTzomB@B(_yog@PmqBb7BtSpJ1mcJA_s(^{2 zsXaaIBy$N|d%|09(#GR9>41KO(J#I3?>5QIp8sw7Y*UF8B}(;*sSadWK7nfJvGKfR zD=CytZuPQ~<%JTv94w^Ob-G4lnJEteq=k(xmSatuQvn?Z^cnsvQ7jj6;`#8N-VUw~DP zOcD+DDby}9sXg&?5^}C8AyVR~B1_etx~j86%R)sT4QU)!8@!!(=p5npwyuRbHLv*m zMzZlWqJ~d^DQErqP0=U)H%w0W<=^(z^g8)g*bGRes7+g}9a|`y42WS2)b`OzajB~L z-Y2Hi4B9)s0Mn_AZ8jpioU7w3^Pa`GQad^C@0o+TZKf< zUOjWdGw1sCn?*wF#ZC5@MhZ1{-@bGf1&*Vs*t_Id$G~oC% zH^F%92L`JNH>xuTevwUS%Eu48;JtgxfSKW4>J%Ph7SPxRxF6fcJn{iEh#ecaYq1dbYvgpx1)s^rXGXhJS&Z0&M7yfu z%PHL2-l>oX1bQ6`cEB@Muqd>+TIV}O4*b&O=_^@mMvgprq_GTUOHX#Epn<~U#b~wD z&vFz?%4 zw-gz0!%%Pz%PuwgSUhSHy`exkZPIxSrb>1Li=6xLbFgINgg=KUr{v&2CP{W~6l=BSiC&@UV#N4|vfh3*ti7Yn+_CT-{%}DnK1D*nvzVpELWzAO9Vot8P$ez@ zuSJbrd+*XYc(+w=Rpp@R=*B>p%}}f~uVe?FDR%GG>XYdPOK>(F)|*CG?^$>iL#oB@ zvRBvRs4O~<9HUtl-5YgZerb_I5sOKCuMbBTDE~VnbIz&zWfGboJYD)OY9?_?EVbr4 z{-p-!hlTGcLBnqLAiGm4UetScD*L&rz{LAOy@J1);&c(VpJ@0RJ-0r_OvyRWA}&>r zLw8E14f}L^hE#5iBX(vdb1M;nBfSZZ1qcBym8p0gKUbXwL zUdc+>AYC#zlM0)PSp4=Bj!IH#agyP<(;r)aAui~A@mogLO*GU=rEIHi@eoMPL<7Gp z71oZ;y26fEGf*qw{x3$R0WeDf*9YHFyG6iJGBJT0wK?rRWaaj7^R6DaqKuk9y}|uc z#*koqW2Ang91#wJ0<+1)JLf)tj*RMfesj|9N$yyw{8%2{eI^7bR&#l_Jml!nCrfTW zhN7n=IfYx7=NTol(ktE!6=r@y1cN%$ue^dpi~vCv2r?Wt?qrbJL-ex)k?+5ApYOGn zES^3uyDpzAaQ*da$+_eD^&G!COU37;{dQ@CU7S2P$=mzvg4X#B^bYsJsclC8sk7{* zg`li9xTRjYeX~AQsxNsqENQ*bC1+{JlfRWUow!_IGy9hvb2&@;Yb65qk4fV)9vz@8 z$q=W^S+6zN4Pn#h$%#h##pfM~S%a=_I$cXkbiD4SKMAhtlT?PfER$W@cjs_7t5SBG zN_j1;nK^=eHTcv4p^y+|WL>80y9mL{-N*h#^E(ZL)je{wpBH?K6@HOQ!q6cIw_T0M z*>vV3zpuws{+09tJ2`tncw0k(m&0ApbTsGQ(fl0tIU2W$e>8FSdAAaV;`?m;Io)4V zXF(w?1273u$h2qf{Pb%V`k90qysDVFK?nbP_ewjg$m-0&BwHPDnosO7uWnv4$c0E$ z;qk>V$UKbC&?_bwkZzv0lPE&KGGe6Bz>#^TNVPP7hlScjLPMJRLLXPR^I+AN5KRBZuL;Zd})gFg$A0A8jMAZd9(QdcCO zc<%=s*X^5p|8;2@k*1`})1QE;7wevmij->&t|nWe#EI@W91id1h~Oxnm;ck-c;b_( z%NK!R)&wgi-UKXzy<)6AU{@eBj{@kYTW{W}Q=-p;j&jb1MR-s2-JW4}3Xu_|8ciCyl!#jaENHK|ljsTZ_f zkdtBZ_>jZD6&HYsBijF)PO#xbTG&0#Z16WFi-G6!+Y8XyZq9NGOv6jNGMi-hHJTLc zk30Ky3sBGVjT44duPYpNe;b`w45zudeNj}svv}L-dRTC;e+-ARd zD^dnuYf@$`u!DMa-#j%*^?hV@;txIoA93$cojGv3bP+4ellE>ybS zOyd3UBxCIx{rMT5DI*x_05PNY-3T6rH{*~R-M$tj*B=@$IaDqEH8Qh#efAFx+gGfMa=6eG+Tq00e1d;jro(<6VB$blI*1c;2y9TEMMuBpX! zdsHGmJD8*(Q8@hup#nf~!8ATmn*dp)dq~iK0{zY+(`+?EYEz`fU>1w{3SC@q^ZDfi zbnv)dCAt()GQZ9%ueqA&eBr5|&?0yp?dptkxQG01w)=4 zG9YM6kHV*r)MQNYI&c=Y=|aJ9XP2*9$e{p`PYEBk?XNDs;^nJz-Azoxa}Z{lh2CKIV?+vO_HH=?1Qh5Kj^N_bLb?)_B5 zWL}r2UR>G^*+jdR$vNzei5o>Sm2F0et5Q2}syf`Um(n{2_ryHDS&j$2m(Bq2!C|GJ z-cY?4yYxeKoq*N`$(j9x7W?)9_W$`>8xpUJw1IgGYU56Ss-PeyfX`8T<8g7&96@5} zj`SlVquCu%>>If$gxRr|-%P=Gj2o4+|1W?#f(d!1jkE+=vsXyjD*(s)(Aj*hUG*Xj zOR@qvBVTBtN{1sNI!KS15WQeZ;bozE7%pMRAR3cF*5QxUF17_a{UkNRbFdZv0r~=0x&n?M9LOD5(GKnyzAw z`?mD3WulVtRom@u+dgOAvX9_Xgn%K#*T!>xT*-1|C_1Yb>(BNn-75C6 z?ALmF!#gh>18#xVVgUzuX`1VT6(%5q_iGdjoli)lf!70F4BTnlyf+Ah00ErjVLlV; z*|$q-Gu{m{@FZqgD}0XX?zt|WF<%!M%hnn{-TBi__JvqzV;Wk*^5I(YXz|`dqY9z{kk@Z=>H%f4&{p%I|6;$7a|rMo(q=U*U9qcnlFIlxmDX4HBN=`KkW+j ze$m8Xpurb_U2(IMmNiq9%JYdyjfM7<4EB^M(q*LarjE{pL8-=`x5eyAiPkQ7D<>!k&-c9>?+>x1(z`uZUb28jTi^1)7Wsj>J|T*gcF z{4)vPoBTUi-J&iyB|nh(ZHus%w#J3~Ri~DzM#;j9xdn}aKW%z$f5gLG+I1PGF~;)S zTu+?$QP}4%S8iF9gev1=V$fx%3OBw-iQJe8-RwGHQ}CqR;Lr^N3^gZL&&u#Z3KjpY4?YB>1GP0-G-<$8I_ zJz1Z$_$*RnF~vf}bN5ap6_3egTZrq<^oz3^IE_Ks-G-=O+vxIgS9Y zxw^cNsC|cbtv-=^u`!Zrlwt1dS)|r}w1Z<;`QUyZ9>;E*0Mv0g;F5!5d$K(?(H609p5 zv-^>fd%iM~HCE!YPxB$0z4ZDI4c)mf_ir4>FnUH1ei(Nq=wC)6uwgitsx9#uy*-9@HR73>MO|kPEA2>3i%n6*`YXifNv(R}YT z1c3K7r)<>d{JbhaFX{1um8jDs?zP0zaghnmi~GE}S}mbGx)Tj{x`nF93dg|x)(;cH zv%zQ&2SiTvQ%!jS2d^&#Uk7rSVp|12d|LiY{}CdVu0`-CO}IG|+;0Yn|4=6?{(Onr z!gCG#t6&D5LL&&b+w|e-*ASW zN1#-sGo<|%vAw~J2mBE#dlLnm$FvV29tJdXBt`~ql%d9s3J!eYF`}V2^!1II2FThM z>a^z61`mEVUAhfK9W`$>vSLwTGyOh7tv^4_7{IzzowZ8m4#8>(X?-6qrCN$7kt#U| zf6#jus9Fgp8fu5DK6HGXZ9NiuTy;Sq8B0)7n={HTV&?oLyFRUX{sNtBP76a@s^6`W zN=m&`A>f1JHk<4*TSV#ca*VzXQLwUM**?`L@H`)lRb9KwK(hCVS}JRH0v*-*=SFXr z>*_atW;_K-u@8Y6e5~lOjVtHcnIU(5%?Jvh!X7;6;PPT{-TP>ssU2;w3ru6RxI>q6 zkADafevrv(0WkuY>Uw|4=faFVx4?H`o1EIBTu)-aNm(P0-Iofx*|fL98fVuu;=~RX^I+s=#J26$)PC{PN<3C8 zxlJ2koea4*Nv@TxKZ&^KUl)8XsadCBJHsI)w6(SEjZuV%8HrNSv0Zt-8|THN&;FZtwgr#=|fc#do5)QT0%D)ewf!8(*SM);|Cn> zvr+#TPbir&S?F_=env9my~i!@qBzV|u=UBP?g~I3_47*`N=Pf5r>}Q4eD-Nq25@=Fn|V*PkS9^5jyuyXJl+`C(ts4G2D2H zR+w3W%k{{ZwF*KtbZGaB<3#*6nu)q=X^qoD->jU*w(z!1CRMe>-DmPiq0vbnqp7#u zP0=Hpq-be_r=kW18V=&r46*LoBi|Ux+(*TSI#A4fuL@&Xv@XlCpv0q5tGE5Yr~#`< za{>`tvV>FCoeJ7Z0zSvBOO7tWRK-qp(AtTVd$@@gwFF^DN`*Q!-hk8j?uYEc2@2h$agzVT11jK&}tOvz|kiHe@K1 z*nevtirqnjllm|OZ&KtR3Q2Q=aq+i3 zr4-alLhgyA)J#E(yCoj8p~ek1Mf$ihIJ+IQ1frfs+Wi$u?5v%1!3tKo0M(TDo#f|k zCjnGxy!$1GizaojhM;Y0&uH_tIekI>V3DkN$G}DcRr4Rt;y}uug|yyzM~ju7?kYAb zG|1=2Q#tXa-+X<2Jxh!GGoT>%6oZ}p-~nfX;yrRaCg0tsmusFnKyw8VeCo4RDDzg(pygb*L3#;GiPPIBH!%g8os3;~y+=v{X?k(ZieJ7qV}(^ z^Mf)YOvwvKnhXV2oUQS-$ypn5)| zhYUqnBZ_5Z`Zt40<_btl_S}Hh| zScqK!n!$s4&!i+u85S{&o%Lona5+1zt} z@*tE;?z3eXHv(Kj9+cgNEu}m4M1d^XubsS&WUG=*71NhNLt@(j*NRG|MY=YXee}b_ za)jn7%z}=LcFW_6_(2K|}Um0xwH)7aZO?k4LDMTh z&ZhoiL`LI8T~0rZ@xQEYw|ZE^@u;^=cD`e4ce9#zRn>6+ck+6onZk9sEK~kQLqQM{ zoiwUHsH{^6;x~inHl!tOoyH14ey_XgIJe_5w(fp=wmajJT&S_wJeIA;8;Lv40(1k8 zbvx+C2OvRsWj*LJj{+9-dhFYAOqp{6Us`7`?u`LO$|W*Q>*P>__u@}>gMIg=)?Ngq zH7zYQnb><)`$=fyoGw4i8yDLr-g(r2scYDklI_!d5upHV zj57zB$L5YeXu_$nPK^h3vQ8|d{&fga8oa(;3B6_@BlY!G=HV4^MOMsivpYIG44wvQ z8Dn}3Cr2zriCvF3PCnQU=(HBafUb5kild{pgxm;@+^IqQBG?XM)B;h1mxDwKTd84N zs|Ujmbf7(@_k*__A;d=Wf3mmg{mA$jP@55j`}i_x@SWM-$wJ6t$Uy*69^&I+Y=}9S zC_;4#0XK0uF7}K3xaga)M|1n3@x_&5Z+Z zX(tw5-k-Fg!$UA7zT8X)5TBmU|Ki^F%Erxxt?vf({#paZ4%Om7ylBq_q`TulzdK&^ zCSOhK*rn4zi*|%2Agy~1;I_$u*+sa{ zg|^;M?f%wbY$aSwsm-{*Jd$a3f`S?63+m~M&{o_qNpv8`)f~0^*_U;ViEdK zsa`mWH}{w1?B}Jsn4=U92x9cd{cs;NNEJCk;3AKEI}I(ldke@~D@5M%357(UUo~s< zr~$L?P!q~0Kwgg4O*9MPqdEGZu;;dfjBA?OS|lbZKks7XX7CH0uU+$)aO@4$5LO_~ z=?i4_h4`4@l^VDxy__ba{;=eCcmgc5yxeWD=NnG#oeDvyl)=jS zJOh1G-{#Lsm0eEqoBgT=p7%MJQ4*5W7XwkDKQ@K~F3`ZPD{EZyFKcg8Z4Dayf@du? zT9l}hKbt}1y-ODm@5Ps_&x(kddq|}FVy+B23rS{r_vSxKIdLp_&9Own>i9o{!p^VX ztJg(Tppvm+8Vn!}s=EJ?q{-xY6~fEFlQ|0Ys$wX6r!Yb;2vmXEO=q3_z@gq4{N9vn z{pvm_m03id8ElEDcNut7ha`9r5PWQ%Z5BdUMarI zhGfgylPh4$E0?Kk;d3;Yf8v#gl4o+LRar`Uk=e3Tg7aQb221l+0cIS<*7yxFbrw|T z-$Qkpypj{ig6CbHdnHPr-g}SREdzDlN#Qe}6lgc*=tlW@ty7D|G+iO~hvsy1{g`7A zieUC2I*7x1Jm=nNB5*!CQKiq?<~9{sKEyP0EGNuGEin+(%WUOCUx4EO=+oU1Ah_qN zxVN(8b@g80YSXSm@&()rcQXknTp#!H7&b}h@j`rl`qxG@1a;~1GLdiBZL>I(>hX?y z>UPRri3v=Z%p+e2)NKZWUD$@?z!CyL38|P5g$Tc|LiF<0+vb%eDj2))mFw*GR@m_! zVyR10<-^PEeDqjKW&>btTK?syxGEyY+E0iem2Gf?HNDk7R{MWZygC8DomkeeF@ikXJKE33wORBX0C7I#xOv?O{{3HO`#h3H2%K`9L{dS&OTsp5_t zzJbXHa$jer%+4o@dT4*8w_VRqhoKj7K-3uGI?pk8H5{bq>-d6Vhiep-w$wZe(qSKI zr*0^KU8UmEw-*;XuE13KTndu($}gsEuOVn72@vG-tTwakOD~fjg&J3cp!(I3Cwowo zarqz;{fO2U+2MSC-;Yv;cuwJj6#rvzF`Oq2F{#+z`T%pC;Z7qnmk)iN=l zq#m%fYzj=H!#slPo`-?7ZHy#DT#i(yTOH}? z=y*R#?~k}SW|b4QU78ccWCla9mP1sMt#YiPKHG+Ul$s5me~>XrI|XxTf=%gW+K-ns zBvg&`)@W#H^Si}GUI|2bGRg9Mny8XAE@`c)R%_IJ4~vBc=DO9 ze^gKFn{Bu|I_J?#r+k}|6ZfdI`C&>3$(_RhG$pmci8EM}lnrG_Q;k(5mM~-)U{8Qy z=ab$apomuD(><0@qo?M>EjAGont_!^f_%$z5CN~H+W|IKGK4X}=L$RBKj*>7ojFGt zaehYe%lhW}FzJ&Ih3`2Z@un!n&*tHB;AY9gXb_4^+sWY zrx(t%WztkLG4}@Nl^(|?m61}(Yw#VvhbJt3lz^^s&0+pEZ~a#F+P2EaM*KJC;39?W zrsNzP9+3l|UTg66qeZdx3gJm}iwpoTsjS1ppbm)WbqpzO0P{EAp!~GY)wZT^^IG%S zXh2oNtcf%kayQMM4ORw+tB8jCX$yl+z&)5Xq3Toh{jCx-roO)3W}m=H36@@-&WkjG z{)ss@0#|3&d%1fBI>+kmLe*V^ooJzW17oD~Rh)YT4!F!a6@XBn^YGf;3%E{4Os+W; zz?wN z*}lLon@6|^xO%4odK+jD-KiM6=_)5ghKKW38MNx%)u0rb8^qAyKq=F%`!d(M{hBm- zaD7Y_kAMR?RwT#>W8%PTH!M6#z5v`YKY!a62hx|rZG-{51Du-L&NZa`Jr}jF&!3G|pX|j35Vim-dYds?hdHGRGr)UL zM%oBXl>rP812kWhngVH4H4ri+0iXN{86R+$(6u8K-!{$J<)Siod3 zD-N6&fkWEyG|Raxj3snQ{dQfdmCIxd008|2%uRrV?CgrB$7KC~pi_%oSRO&;gb0xi z(DLD1W$*#hI(Lb*@nU^s4P~=cmS{%|{f^-_G$Ulf34YOgQB(fu5_}QKILHtNtF;pD z|Dm6(fL#5p!Q7`O_*ctQ1G_sMBVb6c=eZaH;5NVf(C#I`w($w=Jor?wmb7_=ffGOD zlx0u!Y5^kvqyPs4`=(R#C-*B76wTV)T|GPodumBjEhOm24yGn!EZY4$V#MRuC-!U& zs@*H$8s|A7t7PIO&%jkhOgQm?$E5TlKreD)ug|$ABhCGf(o{&wm_4z0Yz-Ld&PSt~ zVe=k4b3`owx@tX>q*-dv558j05Y`6`c={))NgbA0Yacc@2Mp?KGAeDxRccBnMX1|G zXa+;GE|8u=Q+M2FQo!tFu~}DH&Nz7Fpp#5z0vQ~HliYv@Wro_GeJoJ#O>5NV1!Dt@eQ<5D_oF3}kTgt8=70`K;%bg?(g#$juGw+hbOK}RD2sOf>f;-4s^OECA10hE9x{qUiZ{nV?-_5lGPVw9 z9LIDMxvd(iT4oRSKhh=7wmi*6X9kq(E!mN6wwA(S8KgLh!wr{bo0Bz8teS>?kE`s) zm-$odK=%;CETo^$EBEy*lU4v-7y~{7pRF^?ZA?x#xvR(O&du<^1Zp}MHsOR|ahEvu z4QKRV`X4_afMt(jZe6!|y`A?FrO|Ai8wN@WQx*;pUIS_o46@kFRqycKK~6hx@2%ag z+XSaWy}z#gajK${xR9C)Hr*M)Fl-{Xj6(bIdj6S3ffAHEfbL~o95 zyGta2TlNlTd;wa(g-kr=6WR#@CV$*Ac*=^SgmCc~=m3*{{^|gK!*(9CH)&?(fjJ%E zW*r$UqFNuP3NyO4Ndc1#Ap7PVAFQ>8g6$RNlG>1VQx*4JQy3f!1!r#=Z-D1Mbm=ZZ zf6V$%AAr|Y)-w*SfIcAh|K10P|9TLh4{&s>2Pf$CkJOa(zSY$41Y@-ue2^1E7%+mw zQe(x3_orF0PmL>8e+OJ=xx1~H7l5e)vk_nhf^+tnaXkn@mH-84gsDNfzU&L|;Mu|Q zS=(ffG=d`c)2QfJ-6h-&|CuVbUxG0ab{GrYe!1njDuQW#8_@h&=MXA&zy>KK`I>?0 zY3O4l=w&fZ+3A)B9Mz^`=+s^p7NrdLzdP67`FH&iUGWL0dN9!PLEEF?r%&qjs@;E@ zg1*IzbVh>VNG&QHpBdJ^$DoYx4JZBEFzr9{qf3jib`gdE{@=f=bY%aYR*i{CSycY} z|KPQ&*Z%*Pklr*V28u$Ep{S_C3nKzDD_}R5uP*ij33La%Nj67|6_h4WBrr|@jw%9G zeC`rdV8;GVD?Zj7*p6KWKh7S$(6aU9HfeW(>K#Xu2#en;Td93lP{n-#2UF&@#8hX@ zv<|Sv&K*^@OvNUkdUW1Q0oDwWm=AW-i_zY7fatVYS1k3T>f4*GnmK#%{+L`@Lqq0k zAY_|pn%L748;&8tp@)Qvm>IiTQz=GuF_QWOfPdM_+6_Q2i*VwqTFSTqv-WdaA}O+f2}^7Ea?8Nq$|Fom%6*>@LHnp>g9j~Z2S!PPKS8&6k3 zeKVuL7D-M>6vDVUZzGk7)50I+B;INQ?RLtA+R;owW2RROBu3#5?+n3eJ$J0W1FdTW z>#Lqe)5ACJzBQ=(hoWgb;!HdKdI5bV?fu~UQ?MpT8kUa=j~%4eGBd}x7Y)W9#v+dW zB^Y%RFZVhyTQe9`JPA1>4Y3ior;i0ZT2PS*auAavQ*Z`QqmNWDr+6$M3C zU~UCw;X)SWlaBPD7#xIhJ7~ax0})4!onQ2!{|4B)fPjs#-O@WlCHD>T@7Ct{Rl2vO z<)O9&omvZIao4kfg4>p223v8YNjpsR(i=@T7|NlO3#nn;gb%DZ1DC(V$w^zm_`jY- zjBj}ew1Rx4I^}wLtC*eKj?U+SvXo%0eAnoxXuvJ=%@Uy9ahT>ezt2cx8=1V2T+bAD5*~M7&|fd zqH4_mFgzgMncs9M#hGF!x4;vb|9wniAzq@99gq&LSJS|2C4D|N*QWQ6w0+cJtaz^B zFrN3b>EIl(m^bh_T91Sx59CNm>r^y1;*bb-~ULvtLGdBC0UkMw|f`LeTU9f<34TDQOr zT7w&8VqRzVP-!-4aGO#nwM-it*;6rMUFre{BcMexL4Ev&Yzh^ejVOKNFdtZuM%S0c zR6|tI@M#8GTC8OLy)ECqFc$Y2I&r2_9*QjHoT*FLx~sBoM+`^qsvK_RURY_VIJ8i`LLP7pC(l zucZi%E~PZ&f4k>L&^?u^RKR*TjSGBDL-2?LQ(t$3$Eo+bCMi;bvyv{g`<;#-r}C=+ zB~T6STr07%9`@008bD3xCOy5bZ48$!>|Is9E^>Gc)E6>Y?-5?{C4z?FqoWzyN02WO z*TYMh16n>Zf-LEtEsfZC%yf5XR+(Rh%Yf(`1B-8HCy?dSDGp_RZ(Ru(M-zKW0$?Mw z=Fcr8Q7MHT&dB@#hNN#lsR|I8762ii8s}~Yg=*jFg{K&1*58Zse}*{Z>e9{4IQ&?J zr>vX{1M}+H*;!iw<(^l`=Gd3lw`4wSudm}#yxhR&bBT5r?MECuz7qCnI198*UHy{7 z{GhH*-q3LV%RrVf4e-d`HJ`O){7XRq8Wt2Lzu9yZ%dmwWxlb#&7fp*(qQQ^@DJd9L znQ5mdW}wLWOgZIF{dXAKO&b06tR04FI z7)-|*t4is9w|e-`ta&2e{LSTzvcClOS{zcjBB=~IFf?js%t~U?SI7UpxtsmYm7#+(TRH=e{rlm;+ zI7>qq)|m$z8KKh>2`-!$@Q7H=GfL!a=~}SVQIPfH-4J_IS6U>p*CNhCQ?O0=_vNHIjamm)pEwDiliu2i=0ULRraOD9;Ft>+HTpp6?ZrgSo zcZOQT*KRNmRx%Fekye95Id}Dq|3YVJao!RmAeMk)G#!P|?+7QxWh_XDSAV z+4mC&llywAET&?{OAYysDTY*zVH-Brf4U%4q(HJ~pr;C24qu=6xmo9n5T7SQ<5^Op zt-{H#-MNu8(=i@R2N{pwZku0Ur++EFTF2-zD-DTZ z{BRfxujuvrslQe8<_vmuWO#)M%tbeg%60sDrh?qdGTj#sD>7&V9vijhZAi)E3Dbt7Vh6j$`|2}Zhz!7=Ey%XR z$P_?k%*so=3DvkW3`B0U7U{!(+%c~xuR^9&!2xtH(NMT7Q)g;Xm?)S8J!vE%-UMQz z9NYHq-@jkuk+v|AMvlku=vMJdNJwx^L)LxDh@V&Y3^X=+7kg4ccK{skP$0g_`8y@2qG*JdP5 z4;+@HApU3TiBn}D8Chux?}|Q01zZXDCh=t^AP2h|Pe7{B0wm-ywy|3cm6#j8iwTpf zKhzq zLx2C4uZeEY(3n=O$0TXCo6z=Dym}KO`+|2n0{7F0N+1AI4rHD7Q;Z==jaz0sjiNSF zi(#Y0!WLh%Go<{OFgX=)1;T~s6a{f9c$A=yJ@oI}o3(QH-S6gb8Gc4xdEO9lQK2b5 zR-`QpG7%sd2?5yh<;D}>y5$hL-1}FKH5|hv2E86gA~^v8T(ExWv~c7yOeD=h$!jWPbO z4Iq~QLT(*D$W3EH3_BBaC@Oj?G3;9EzY}mxcP{Y%%H37agWE0!Js4mv!x*EK(}Y6o zGk~OB0_w!BymTKIEEiy2iLwAYOPSm|D3iYve$+nx|=?ic>_|qU>~jLwUU4t z6yS{x;$nU8rF)FN)pS}((EJ5b)(p_aP6#-yKzRCA!pcZFe4dK_3Z!ql1zZ;Q%&)}GvPUV zDhDny7#LJA(+p~KhK8s--R}H5*~us0Eb~{!6WJEE{EsQ=e}ZCT6S;r?M2u-32WsW7 zJ)emd`uOjVyN|$G)N!^9reE#uopsI6Z`cDGDEG}h!N-%|~B)ttIC*d&P(++?StPOh-SfR)4S$;Yy&Z zw(#^M8E)>ACXeI_>7725GFZKIH=7Yd^DO1 z@nw2I$@WK^iV#G7`4aF)PR6|PuX?j#J#Tp9@@7d|g0K|{8_qUh6Xh08ZxBy|MgEWU z!A)bu5uex<=bye__cW{)i}f^MZ}NYCAnFSJNEb@p>OqRoHFr ze?0Hh9Cf{xBV`8ia5&qAMA7aTC z`=TDN_qIMgmb}dMw#EIE00pw5^i-56&TEzB3k}|<%nM=*5=1xVadHWq>+e*OY>VF| z9lLJU=R@~;u)uBBD4=fc!-~u=25xGb$QTjjo3LvSTiG-8f2PY5x?*u9C*dVJsA;(= z{yV=kbZdkXC%bf%$ofgcgM5q5U_L`U4PM3I%^QRx6%Q3}7G4uq`aO$dPklbie||oH zouuM=P3cYgwQ?4;34ck@WmqeH&=RjBNkKG+(ry#}07+H@;qF)8c z*y>VZWma&Eu6r5X(Hg@^=g4X%*%w;QB{Uf-deTrj)Z>BnFXFpx#$|&~RC*N`GP}r}O)= zkR*Byb>aOChIsR@!4*vP=BtoH%7^{A2dWM(Z@NyMi`Q1aHB8O9@Em3^Q7Q~k%D!xA zz79=TL>=tn7={$>9E2-@ z18JYDOBi8}T1anT7LRNBy~1zr*ouWVbm+WT9(VlEubm4j-HfL3I3Bq{{$u0(_l#-D zB6e@|n~=12V%cIrc_8BHs_J5^slej2 z7iY%Jozga_)Ukj)I8OR)uC{H??g@@NPe-cNg?<|2k-qr;Em$fvivEfy5zhYNM(!=CHKS)>HFopOo6el;ug<(NehiOeb=*e-d>RsEI4N zPd+djX|(X6!KL>vytnYV-GfaYaZ`B4@dm)DVU4@Gl`XBNdHMHJ3E7?yqLQ3_O?M3N zIgRb^#>{(@)ECtA`(;W5zMxanDhrx#y7YEDQzy*NUnM%fm^V#kr%x(cDnV=qspD7u z_{y~_`RGpLxW&n8TC3AYZr;q!AH&Os7cGoX$=)VA&AqmZw3huc54-lpt?S#88=UqR zGYI(~Zx{{(+SjGeUcEsyp4vLMMJ-_aLsqj!>L~x4IL?AQ>Qndrq8lJMy+;FhU@ZzJSgCEz+>yLp_1b!xUsu&X6fV3+TF~`nsk{Za@aI&M% zRlAec|C%?+>w-vlsL>>Zd{Ie|v%f&b>P_~+#PK(~6Mc3*Cw&MrqnXjWU=SxI28dmH z{z<_1xHu-Eo$=tK7IsqZV6~?M%sPDQe%_rr-lm;+`FryB$g^5Od=AubCDRRENVHUn zQqE}Z|FNV7vx8cQbd?GXX%e=E^^J7mS2aJV*6uiOJG~0Ip7>p2&6mz+VEtqEiV=OO zSHHP^vmd?a7fuhGTQNPYB$w1eOy4DT|Ku&*H2vL9|9MxoMVbW{&rQGSsMzpL(Iv06 z=RQt4NMO7}a(m3WQO`@QGwNNf#u|O;o$=pk^!1*X0{i)s%+?U!t>x;n6Huk`2NVq* zi_f)sMN)xsEnVqD7L|s>*V~di5|FdwYHg>3{_|mv=H9ybD?bLPG1!Sa0DoTKF~6%P zan@U~G@2us>@5T3zaM;Cc_jnfl}FoBiDAAAu*}uwtMkEbK7B>-3`VUJ9`?ZcUqslE zhP$<^(O!ewZTOILdNN_^v|5dXr?;i!j>ehVZTQq=Qtb+d{-jm4Y0uw6j9o7=9?|>m z;Cn`&zT1bVm)=a{(=R)7bslkoVj!wtz}Ouir=n*LRo_)(4t5W z-cZ$Cqin1jH}op}B{RL2@Tz7`9eh{dhJgoM);KAI(-5yvAipSEJDxsm)1B|R5A2U@ zz2Wqy$4Sk7F2eJD9tU3jF1vR~fXo!!K&kKLLBoaa{8FARRgc+NGW)7sbzJX?Cwh8* zp!o{jEGQw-2V7UWaHMvz=8mhXohHqa_J(8qzW~&rR3^z0`DieqgWsku)=3+6Q;UVv z0d3Q9W$EzfXoyuRs1(~fFq203MN;jp@&%+IIntlFb(3$sBk%n+QDOB4=6;9C$<6X9 zSIn`cZj-Ml$OD4nD>zwF?+O@+Angw7H2@xuKV5J#f1e$f0cBDJ_IgcQAA~p(SqjIq-`Q7wFPejN_Rm09~kV` z5^Lc7CvAl!#=v;5(kJi&6}+5zTK34wYEZW7NDs2Mx5=K)sxd;XJTHUS1>(lPOI=M3 z{O@_z{3GZ)`Rd=)IEP>`S8$bH3nIiI9>%Z->CsO(8pyC^HRsFg)=cyT&Ki#S`(6O)82aXp z?t4aY_g(Sk1M!0BCe;TCOAGBdlZOlJO#X=W86Yv=EpJ3S8s41MMU{aR4X^0x_#t;g ztZ)X3uEcYXlELqAxZz}kx*eZj?(ww*{ABiCNOOp(suxasWT@yKiHbVQ*Bm?uG;QvX z-T&}Ab6h$1+3WjKRSwLCm&euJ35whoYZ#S>#QtyA^z(%e=cnx?F5TarF}Q8lp5)+N zTo}_hNM#~`k>(PZY}%{rY^PTtKHH0bUh)wkK=ae-@?iW`7{%_{0b8Qxv%=;jmrOJR zpd^Etz)ahArY4R}+$I5e&u-Jw_!KEd~iCHM%40)8xwBFhH}w zy9>Xya|IvXu&0ywj5q0fbF*Q?8ZqeHBSUayLsg{y{r|{f_!$qy)2aI2^Iw12Y=dEW zOTHFL%huu^YarP~DO{A~&Fdf4=lGBF+{OpUn%&t-HO}CjVQ}tYR;b#UzS~Qoat&zN zy~@}kB&G;)zt8rW2oSy;ozu;{>Q+7JdG*3Lm7N|CRyVV$xZ2c@cNFY$zx^E1%~8IQ77)Hy zhce~yy?uO1{DRre@p#e#NAX)0F)xnRZdmhCSb9L;X%AAh(4za^j@T0JrPUzQG05^T zpSLn!3!Wlu!OT1aI|0(Al8*1;u_D(mmsL+rrz-W5dPf_CsqwJ~q_2FN4zu};r-iy( zOnD$ld|+F^d7Gb*b;KKtb&OsEq*l`1#)JK_JTcX zUk6jip*=kb5AnwFS(72_Whbhz-SX+IlG`*~_%%<@`jO-yJ?ko{fd=J-;2_a1jguvt zpX!2i`+4Q0{j73 z9>HmH1IKtIEl{`ndW=p3k~_^)Ez<`HCYF|*GtV!4Y|ec!3Nlqh`cGsq#aH!jpZb@s z-QXlsL41Jij6kEKjIhbP&U`QX>F0l6UA9aA1Z2$G;}B}jbKDhT&CrTPr`|F9Ca)`A zOcT(T%&O!Bu!)B)V&lv;o^vJ=O7vY_R18KC7<3Nxwq8<+ay2xpX^}!!Gx4Z@L?Z&jIe#(}w>5FHjJ+rFnLXQAD&6(+rmkiHTH=M|3;eN}c~z6R~F#AVRh zh{%9)NS`WTb~*;=@qm7t&Gdi@{YH?ZC3+ltHlhodq+owS*lq;Gw7yAAyKMxuM`OCR zKy%n;1}AP^U3b%g`Y^pB zy}0?r10s&ngZOopHJBb?sR+ijJQ_VxBFfRKup|pOIBs4%%Ji2syx7n@Jx53bKZT`t zJJ|kL-G+{5-#nbh_4!P!e$hj9I>WBEv0|=zQTKO*a6qB4oG}GkT_@ZTUYb?azm$3T z1*~F@;ILu5sNnmV671dJQs?>dCAyXWZ4a}az+?YbB0ndYh@iqt5=ZUJcYkD}gn22g%NfHkPe0Ns$6bDpnXW7GMdWD(TI%lvw-xfLC-Q5rHJo$H`<_xC@$OPS5#om=3G*eyxJM$MW`_uKsCztBs&0!lTd}9+mqs3Vdmo6Z8<+_E_eSCaf zF?Rn$v&sU)GT^}+IE1zmIn-mZnm&me^0Hi~cG>B^6d z-49jI>S<4Hc;53=>SC_GY>R8+tTO2UC~M1>_IoFr53oZs{bEcZo@D4_Q9?pON2I{` zen^skptSx`E(pFH0Nl9T9jP;VB1~lz()|qqfdc{Dk|=;a0raUpnjYrrQ3&UXAv@YV@6c* zUO`Ih(=}3cz7u)RzfY=O2^P~LzN?rTyj31$GCcbplIzL#2WUU)maGMy z#atD!x9vT+HqwCdRLs+TC*F+!TthB zB<_H69s@}+4TJB!GXvDAZ$E9y(!w9nty|t38TsDM4x~5)Mr#tjdw%PBmS9<3!`y2}A&|3%jfQZiirjB=VZ_WrgdcpRRKXvSww&BeM=i$Hf@ivZc1P`g zP0>34>>1l^;g|q;M1*rK{4VSf{c%~P1-%keiLh>#d)tX6;v-J1XsGngM#23YtwG&@ zeGN`BgPl)VQ!5+DmPa3Ya!IF1IHzm(y68m_B`%)rzl7Cv)Rxu;{S#lRtgTFZU{XD0 zXJwXeYfe~PdX(&^#`IA}NuT;5?T|a=xqwhmb45`8M=3Ft#uU2^`WRmQ zV##0c)skUvW#EX%2BNM~@u0lY*S<`+|DuS{nnoQ|SwRTiGPe zaTZYbCHU|m`9~*EhRD|EhA=MZRQx9-TXgI^kidvEep4dVKC9%Ch`OpCIYJ))_6YMDmPkczI`q%cRh{W6WMlfCq+Heb0O6|@0us{s_8>WK>a7y zdB1y&nVW2x{Y%?35w$t=w(&iNF>OhbCyr##ZAEy)wOsTo;qP8w7?yp<&wXFXJ~XDt z=~NSa%MuKe&x=`gxnNpys=aLw~6J zh(b4S8YOEb=@ii7;mZL{I#^g{ijJJ?2&-}?8@w{YkME@AiTrjQqV!F}%LD>4qFynZ zjrPw+LT)RIH5Tc_Hlr(j<&(B2^cb(VJ%fL8fx+!5p!|c%7(~sFJ16CWH*NKd;GNVi zonyrf#^WVFEuYUEyfTDeogb=5oqc=OPaL+M~du*TE{VO4s$* z*E9%A7lM|t7eu!F`iZv(FK%uEKFh}TtroF*f-|(K=*%BQ{+G*7d~{Y1UKt2y+)zRI zb5VGAhb#w~{o-UPky*w}uX$fg z?w$ev`3v)o-<~YtC;I@^#1sWah=i9;(T$purAS@Byz(HGpQ135DRVo$q+rMfFmCH# z@-m3_@d2|(BfVR;J`$OWJt23OtZqzr{|qKmf$R47q~7M+b|8Uq^O^nWnGvHne3$4E za~4~LFt3pavG9}-rFBM|E0Y7%Y2vgnqv3dUl^wWh8T9ZZOU435zg#>mg7yMi$Ea;gl8y_kf z*&Ln~XxiP2Pgc?@T68ovz;&8BV9y*3lTih3bbG7A3M7w_3=eZ7U$|b6mK%r&NAO*1 zlkgKODg)^I0ncIFGhi(!zI5K2oR4*z=s9vWT?T=%R9CzkFvF9$lH-3o28mN5_{`U zE5<=eHwNygu*1eJ>2aTV(D2#_zGDo<%6pge->-=7#HqEV`zMU-XoMQ?<_I@NFqbya zUh-qV;1FHnQHb%>{3(DOrE!ZRsZ+>uD2q# zDSy?kWEU0|jv~`Z^&(xEb5q2%;_zyJTyXM`3?8Apr{_|)0q76L27uNJz;O-e z*&Tau<1|ib(e?KRAD8dd51p<9-Q!yRMjbEUNfc=m9l%zcYf}{)b!fPgdX4?X{)wj6 zZXcrK23m_4sSnXA5~)Ap)A@t*58@?#YCx~vn70IZ0_^g45Apn3Zk9@>M3FCWbCJ(J z@#9O%Dzp(S@sW#ee|0x*p)YJtF+BXehw=Pi148N*I zZSOgyA2nW0$1rlJ6nQelPsF(xE6Lvse)3%F-XfLQ_1E~>54c1|?3`8Bd21eL^ZfML zfV@dPaGA{3By}s~u~Vkk8KO#flEp@+c>mF}=M;J}|BJ1+3d?Hy-i8&VM5Viw?(UTC zlm>N38|oOXgh^L#k3AP6UD1hpE;8K#KtI zH%R(sYTQXNTZ?+j7aQP3Wx1C1uC^&acH&TQP6xdn=Jru9nh8Ny1Tbl zXn)0Syw`NWS+^kOm`J$%5U}-BGT=GPB6n^ub}?=qfEW5R4R9D~yIBaCSvgyPn0W_v z1iS>fGkyV3jj4l$a<(|dE53d{D>wv#a>|bS(%;LJ8-OiZubOM}ZtUcnF?0CWrE0_C ztOvAsK`lme zetdww-4Ip=%u+)K9xM?gpJx}8`&|#gCly8tw9yN{`;{$y|MO+@FSP&a5f>7-+(S>6 zLXHv{ALayENqU3HmVv|#q$umUx~A;!n*d>*IH0<)tvD0CiH(iDJh3)54r+6|O`smp zXOxnaodVT_G`9HghniobG8|U=PVl$W%lIc67KWNhM{16@#E)CY~vQ!ovsbh?c zj6McxBy+FHkBp20Kwpl$^#0zR_bkH>mke>+ebva?ntqV0F)et>hGnC2r$&^+K9NouFyOSll|@FDmJ8xL6Iz-EKwDZWTQt$Xl84(Egsq!7Ciu zn<~8`Erli|%=e6YaQm*GEdyq`69olUse^dCZS_654K;xpX-}2(>=8<^*|6@4?eqEc zip@Gb$`Wf|jUgJj_c0*1z@kTlhl7gwZNuZ2!3escq2bPQ@+N!jY;s!KR;M@Q(LybZ zT*&3#p7CG5KxNXV2I|sH&EP|i@|^WN@K>9!W{!$!t&11SFK`s4+yfSH3@j{AMKDEM zD5Dse)?i)nIy6MsbGGG~|H1}GU=JLDVz%-*j)dDnnRL@@6O*0n z1;@vu+6mjqq1eU>TY3~2@d0_=Wr2X5_R~%FPxTg;y=1&yP+qrA?(05qvogt z^>6BEv947A{_f6M+_DKU=$o6}IU}ZO-ZKHEsiu$#i{$YG8^~;4ovSraBE+}*Drcbt zrmC}pSea;xrT--U2)!KlEz=Z61L2mTEGe#kN_hQ6zRCW=GfQ|sQm(zu{t1*igU}0? zjDfYaA8StuGKB!2@7k&=@G$Ym^V;2$*XnSj$tbjEn0n`K{qmuPRFwhc@HEp4M9sq7 z&uCvve=B?1_1gLO{PC*wyMKW$CZ$OltPSlji!Aqa?@PCi;|Z(op-`~vulqRHPM0Fe zA|E9~f@X4SII6cG^$-&eug@lJP1`<-3uynMi9`*9?c_nf(BgQU65n$;7)@lpP($KO z$FaAwksSy$S`m1c0o|?{7>fGSzam6nvw>}tWgQ|aLepVI3--V72POlr3p!9zite7a zthnZ_sCXpJ_-&C58IzG)V%@`m@*nU5v*f_8i+``=uo=7~05ru8y>r=437$U}MBo8X za9r)C|NNOR0`FjX!;1Q31j|S);EM8soC>=Mo?GT4%xm+|)23bg*Z(pxJefavG+*tj zVbvB7_?A^)9;}2`o$c*^)nQ0aDgUbRYDMGi10mqAVDGmM-Ge=V2Z1^ zh?ObCiSc#kVC3XnjDFfQ{fCBsRx_4rlUDUcaL4Pb4uR@`s@%04ir8X(jqIEf7oeH` zJ&Y0Gwgoh(NaVjUaRJ5sPbOu9tIkQqqQzC{9u`b3?1C8z>$H+4)qytzji%WQ+ zt>9u{@HR;a3k&@8$M#}lVKHnqck1XaCzN)B#>xer%jv{?{@#=`(%btj z;M6ZPSZNF1XrI>K<<0TDcgKKR=z-A1a2u-Sjdm~)T}Gu<6eU$z~g zvFjHuXW$gE04*`zlyp)p_u?NjSEe z&Xfey^X<1~g&_F4-8$iA zxw{sOI;w?&BzfQOzm#eX1ftn}@(RVbrUK@VCruX;Hvn^5cvw;K{2Lv8R_A@88mb~5 zo?)Ek%$nKAZZrVw4fg)@c?q;W_x%~Rtoy7y)*!%AV&kq%l=A2SF0i2?aZs}N4h~Y# zZkiEakp*ymTSJ&rTz`Wr^wn}yoG{uLoV?gFAFFp#eu40KlKalnljaMsgY&5`%+-m9-<(6l*rYO$mCCgGF>R=J2cqkN4o_ zGUl44MoTd50DHh6YRXad#3`YwIUf2o%B1#7*%K9NnB`S^2+r#dtAXVz{=!(A^eZ_z zqBAaWmQ01g28?Si_TQcGDw|I@8&5b{72ODFvoX~1F~5vrVcdp6ZciqJ9rqBGm0%Na zHuqTwMTKg2+X^f*Vr)Wup;hm10KOF8TO8wwX*J3J{{6db-Sg3WwLQJPofl9xcT%mi zt~_~O9cJ-TwMouHVpA528t~jQM8T`Tc>q&D=&CphDC0#w&4@zop>7l5;o(pt;I~ee ziW$-e>ji%PBzIndtyEw7-n!);PS93kifD|bu$Iuw8m9!;>y0VAb}tma_Z_JxKW(=z z16Va<7YgEg%hepqbs>`D5d=pZdY$K!t2tK~avubtTKWe;j%KB8y|o8=hV18ApTG-0 zNsO0adUD!d!or>Q$sX)}5UG;IqMD>P?Q)u;0ZHelM#%5IN8;kMO8kK=wg#wyztW(~ zTYl*kY_M!S7kPf1c);J;VD$fGdl;Ot#kEBn~`l!&b={E0D_$zc-oD zO(E5r6#5Xo?PK5nXP+5tYtQ1i-0$eYu{HJrg(c)GEV!fq6vaJZmioSY^0L%PqimAd zSLBw0ImIyRShZGh@5`#L5yt!hRE;4GqzmCfVM>f`^I76}CW(ftq~LDtLjBs8zl zU-k}-$zq8WR8N2)SA!>Qc9V5*a+;c(Q%OuRTfGI*N-PsH&KdvM*kNhNlZuMH9mjf< z5V*9Ajq^!S|D;S(Fn-82|HSti$e}P_FAX4vh6aq!gH&WpMaL36uU(eX>sf_*y_6x+ z^#@{3*^;G{@#?Z3jz)Y%=FiJ_(|Ym~wIq18N1+l$n}&tyKMd{)GRQnaF(yk@$@Qbf zp1PCy3uNDjks{4(bgNx?G?f(64x3q)jq(C9h`MjQlwn{cEt8M#NBP`RQ8ClpbB~T4 z_9u7zdP}7lcdk6kuA08vCz6M?QsUlid5bMgZ<{73M>(W;fij@Sm%xOMA^G9KHirun?aA zJ;kJPif@p0opZPMC&?LVT%5ZVkYZRZVWzKx)k_>IEH6&Fjt1WHvLg=a`!FG@EQot| zPaT&cgWtx&&)(Q_DRChd3iDsoG&6FU?O8Iujfb~Iavfvs@tcKx4N6T*(>FFQ+UmJ` zNEb${j~64n_TSQ0&-tV*8B_GTdYU|usN!pJU}cacNB3h&Pti@y&-Zf}bb2@}hcSZi zcGslOYv4HrK)@9Lqco98*uTMU8_v}?w>}R!%?ZN=w|}hQ zGX=`+PbW0Rd#0Em5EuxGfVp~6Yy8OetKr1*!PM;kJ<$cAn^2GZAxtaS7c0qsq!Xw~ z<$y8HDD-R8M`rCf`Ih%`W3^zog!@>&x)CNOK|95aLE76FiC1ZwqF0ZhVV}w%(I#>< z?{>_s&Q$v5e_es`b(5mMpJN}+6of=n6t}l8xsLMDz@?%$^n%oTHnH}`V7Pcb+UTF^ zmjtHF@O}KjMuga*ZKS$hn?Y%mHzzrZ9bFsGjDE+t8q1OL?v-Rz2P2v@sXP<#0t$hF zfxgSOp#LtJYC~9ih`FCL4kM-tI6p9={G~WgBq0Q_9Im*#Kf9~V!YGVo8-Z3x{gI*cT3ZfCX z+2Eo9U0jM?H4E~9%`j`hr!yrO%M)MP3)*v>qH!lyu@k4O@hUrgPo6q;0uS{I%3N$b28RU%6gx!^5g zb%l~sgQQ7@+zv_XPLfF(5;yzDhAi)6$St%3s)Fk zN6E=pj;AYQdwb--c++B7Vc;(VQ)f9ZcdGZ?{aHhgbv=~R){o!cw5<29%-@dE8!p+A z<_a}QiFoWhNc_aXlGpteWPZ`K=5l~9UKk%lwrMq|1d+KM2(pk3F^A!0Yg+*g69k6A zU3N>$c}-H#R*}dHXwsEPqakp@wr%Zj1{yEE$!(;gt0^Z~$VA}~NuVEP)z)P5zVJ*q z*3YD+gfRx0^XcZPVYqZy9Ar!voM`u-E}k^*j{t?Gx|#t{-7b1f{`cb>W6OemMpu{c zOyZAmN*_@1_!wip*+nu`!3y7e*m^!={?qgF({8s=EEkvkB0^AsI|yA;G3b(_+#b6_ zniwV~0@WO|^edbtcs*-i9$xFmv7%Pf0o~>6%<;FyDHi3n8vP5Q$PnXn=ZoW-?4L6w z6*yg$@Ghh^#mUYK7m}c{IrOFaMNe}nIMa$!A$B;kYmd4zIaq)8^DG>kZ@Su6mB?F~ zDlQY^P^eRiAa0iAL>%ecoYF2ED|$xeX{laP0Vml6RdeZqk@x_}7GC?fJPN@GP47QU zW|Y&qTaO&jPYS!F8LL3o#@~&bYh$%zd;;3%tKgPY;MO`He zIW!8XjP094&;GiLt_}Yw`zzVfPUtSt1IjwnKU{mFC1!|o(pjeJ|HG!j$zq2c&ES!Bq^zEg_HWq zy6fn-T&kL~LT%>fEPZq5tKIp$69j-&{OzyUE1U=3910*|Mr_ivu;dG~OS`QhNkS_J zbn#n%AC>eZP{jgiTX$b*e{o!vRWcngrzvH1E4aD3QdUd@dlz7i@M`r`jHvRd7?}c1 zUOVNd3i{ID6Jp|+HH^)J5*rB$jEeU<#>GF>vUfGzT{xN0LxJ zC6pGdY(9P}>G1bKh8+2lVSj#l*nC3$g(p3D(?;fO6~_R2RONaK)Joux_d$>h?*DEO6M8_2)n_aQuR?Oac@qmL z0N-EtztLixfF>eZbGh=egRM8QS83OaA(nXY#!5hytN32eC>9Jv-(JUA)4;}5wd+C+W~FSmkbEm3;GTUZKeM0V0bYOKlHpWIUOcn&6q$@Lt>JSpFhDcQXAc+i)yt% zx*%z8?;sjgoKva^<+_v~b23)*c7isn?bLlcrxRRlI8nU5|N8pb@-Ns1de0hNC?lR* zO}Qp}TE=AhJgjM}^#@Zm-pXfT;ifMB>&loa%Ant~AFv&$hwxNJT!eaTNVZt9Ne>ZS zVP%A7o#ek%JQe9;Joyp+60Q19Qge{_ttD*Y0v#f5?9-<=^&A z$A$EnI9r!c<_yNR0RF4X$H4tY@ zJ@jd?rPNv^9IJ#&aI8A{1M2i)7Z9_$6d20tpOyl?6?R+CYsy$0VpI?D&dzI9Ze6j67Vs*lk8>Kzm`*`7$dzPj*QKG%?RJqdAxpt z1|4^3JFaMlJ)39VQFVwd7EV~60(yh};56W4`Ex;dU*5l}72^tdxRLlXMT!LAw%&{% zVcrs7^&`q}61(VzFcSGHAEIInX(!|VI>brl1Vu_=*3_9V#VHA!kQi9_FbElNKiS^N zXwq4KXHliv2?zyt)`JtfO7aL7amuSx%;`#q==$?*Zfw9g0T1AlZ(h?Zz`XrB=K*wj z;lK`Tcd17R{jo6-hGCGD#zg#+C78HHRGTJA%HCt$`bcJRe>WY1n<;uc?CF^aY=B-} zQvOmJfr9S-hNNKIR>Bz)kd9O6Jdp|tx{qOCX3U0U6DKCn7xcdmW$!*5Xg|7;Es-H} zW-be0;(maV>wzu35~@OOsBl8!KKD=P$k@XY^p{L>&X68N$Z+mmof<5as`GOS50Q+0)7EZhC1 zS97>fi*r6DomWBnj>(g&Oj1cYczomz6P5RTKRgAkv2ES3WW{mrSu;(r+;Fu zZDKip*S|7n;6kNU|IQGMyc_@rGll4Cw3C$n)syyv-uaB*Cbh^~?ePL3(5}5>obYu! z#Y-Z&5=T=mrpED#=Fcy$gU@}gN zj%<-jM%q0$X_h|XpJBWI%T+u4>w!x+O0ow3RcVlkWaN zNcR(@dMc=HLd5^OSyTQ2x;`N71sfZIr3XW-mplGx^9IM8Fq{#gbLW*Zez&Qf5;Hiu zKg@n=efHpj7~b)zrG{@nvPojuK>1YGv52sX$si9$QX>qrDxW?|CWh-f3^%;j0{pXjA$z31S4Ap8EL%wF6xBl^Yd%>BhvLqy^ z&LfNA!fpfjDuA;>GLpAw(qu-Yq|gSX2t_X)FG!!Pn6upL#~ENzx@u@$W#17KD#K0s zk?4b6f}FlwhlQ6H`Cc&ZX>-2L=DP(0DPmHmy zTMxj1{YqRItI<{%rTy3RCpNW8X=N~md<(p7OmD~Xbx1(;?7`LEgT!wzq@)u16A7Kg z8tKs%j(1gV2dV--S65<3Yj6E~|KD8Y3VZ^7js7xmLOhE(Iz2V+x`gidVxD~WQoVIj zBCV7?)_QOb$EPYA>CPwjo=G6#$ow9^{`>Po5KR8OSQGuep)N{5MSrwu)ub+h+<_9A zQr80o%}&<;9xYc57o64V>gv8zvD{)NF!{)vWLtW7v;8>mjYdfS;|HuvbQ&bYen;fd zc`4z*a_BE7`%Ui=LAxGhr);imZ_gdDu+i{X50bN6-gk z|3G<>7P=eS?&dazKR;1_e+6kcdMy2}^xnKlE7l|4T&Z<^10vag;vp$T!3zcM+Rdm| zq7!A3C0X&bPtw*|m1abL+Ubg$WZr{5aqR|+YDG}g zRySl_g(4I_wXz*jODK^e<~2LDQR+5roA{nInVR@UgG>UwyF=rhRx98t{qOdI2S)Wj z)Dk|4&-@}mU}v3W>ug0GP3+|jbHPq3Sit7Wpz@QOLREeXpnbcwPH*MRk=8Pgr$e@V{_czpNiWspFrE31t=#q@ZLafF0SS0FU+2{zw=Rc6Y$cC`@3VR^kiHHc;Kn?Ha zY7D2bGWC#XKN7aSJasWPIodHW$iMh}wz1_P$r!tJ6N2J*q3KRH@b6BKlA+3`NmkVI z@-ayWs7Wa(`KR$|Nf|>BAG6+vx6$OE6w2 zTV|RUZ>5k3MGjK=k5u}#3f*GG^N7+b>exXS0+N1HP6Qw#B1|x}*8h6ubR4`Bp{ejK(Bb6)?`y0y4qKS4!jj{^rhlQu$*Oe1K+AHq%9|}0 zT6jqRI78{Y`r9vL-82Xt+NOMfNp!1cn8e)i9iSx*#Z8cr3DW@l(cPvV&-D+@wfEsr zEScnmDu@#4Dk8-CjE8mgK<*p&&LFg_uy>FouW=>l4ScPaHd5~nmnHKRSF~J)9inn* zxMzk`K=;mBl_{0bn}mt{pFw4b6QvI3T&S_aa#tP>t@@0p$nN^g|R>qlq8`SSM zirX!oQz$Z|t(?9;fkJwR5}d!PW%~M(z6ArX?s(@f@kbg-`$DxJI3A|utHOUsA&Hhe zv9>9c6qKt%z50Iq@6t|A^fk%|_Qw`Wg!fGgRsRK#fhM5*Mx= z)FZ#QGcinj2v=qeR`}ZFlR{oSks*p`{<-dX2ZWC;jyG6Lqi^#Yrwotx8P+Z=Xu0c_ zCZM@)V2Koah_($Q5GW_w=OPf$G`EV|Am3977$MKpbKhnoR2Q-&YNB*G#M1!j&~d_8 z!h6H|@{kPJVny;4abuTdbZMrmw8P_%OQKVXr};l5NONbS?ZilX&Q5G^XmYAPXDMQz=k(LI`kLy>Kc-yzW8gd_OiA8BajoSvmdZm=He%ZS0S>iNfRQ{tXZ9ZpJ<{iWaBIy$M%m^>@dkZvPMFSJffzh@KT7GgV+gTN@GGIYF*dMF zmJV*?jD|G{EB)3-Zel{|Ltu3Y*P1PpnB?DQh^12KF0c1w(|r0gKEAvEkUvv`N0v5? z=r&83_6qkTFoHr1NLw#@`lk53Wi^_m-* zjJ5M$9Wj*%KY)xx=V16XXvP+r#fdJrdpx`WkRs#{KxP0tqMIWVg3NHy)jN^;N;MQ> ztxAVZc}oYoi0g#KqaeSLF^9jVG~7BVrq&cI#BzV%sCKvOdmvpTa2nxqDHHaN{iAtL z4k?A99ZH59*MBbAw2veph$i3M(HJhTnLt;ON+zX@e(R$J4OO_2)3&LYxN1`&$4~JU znI!!a6w*0uIKGiJqM^I0T@L)ppM%mrKxL5qnS~*n6q(qaDK))ComnyQw0xP>M@nSW zAGQ0fLq<$NqekS#|}4>*xm zg?4_IL+B-;sg%$0SxEcH59HM{&6BhxBgaVN@@CAT2A6z%BPM+eD`iE6IYwcLQefEy z1a>1e5N@;7besjI2i0S#)$)+x?(H{G_3HgZwAt;|)3|jz&6Wu)Uh6+49#AJ5O)taH z-e;=>`StExN-i;-09R)y0jq=<{u{p+7XOg&UO-?EK2FRV!rw{7A2uwtD;mc86xt?c;!)wGKX=bmbZV7 z*qVrY3_$d(lyJew=d4Ek9DNz1=`fy~dGbA0WI1#h*qZ#VUVo`ZYy%#g{^FePe* z1Y@h>@oKh+rft0~f*uOCLTebx#lDcqq);pR%}TI=1v7KZm-?|(OTsz9Bp{wDky4iT zp7_RX1x4}UgV4ywqKuzX3rH>SLm&YBP*C+nNRwp^EzEf@4mYB7=ab)incqQH&Gq;pPausE{}`kbj{4B zqjUS4Jkp0}KkHO7ww|c8lb&=)QS3Wo`XY7}d7z0?BJ%b88hZ+5baJ4P;IkJ+X1=;~ z8OYZXHVt0n|E6yU{T(mn2Y1QuuM+=pPLogw?@5BvfA}YltVxhD)1~7-<^i(R{8n<+ z;v%6`rbHNH5*^VC_p#Am|BjXdH7lCwbw*=~ znp1+u%pDykQ`ifNxmQ6##f!XKsp396?U8Vg5s8&fD|_g!zfZo!1Z_pGpyn%qY)V3N zZu=th*#zHfrWE3QtdRF|kaSp*Ry@hfGHK!ax5B%LJZ8Nx5hCZ#WQ3~ zz=+hX=Z1GX2u3y(~B(-<%JF&E%#LrQ7N7h1L|Ml>hUnl>9 zMp|J?mTQcu|Ito}+g@o~$X{%fOuw3!V-mozl^0%Yq@lO8ep@24TuRE9UiOWA6#Wj} z_GBn;G0}N&h$VXUOS*FALVXGt+y%~6Uq6Qw<#UYNzXNlD0qpQI(&e|RQvE?hMYN`T zIx4CmJV6bb?Tzli_R=g4I}~$2w#|m`I7wnlV&i4NQf*>hpe>YHG9dm9z$||vuYu9? zEik^4JmYO{MRV>fArh6iIAKP%L8q77ugjrm$%BwB{IWtMgOk>J8W?<%J2YU|l%Gy? zQgb;DDKLTi56-Tq4mtMsd>>Z@!FC~?SQm^OTb^P_9Oj9=jT;I{D+xIoCXEEoa{=M1 zTi9>N-_-a{RnE9Wsk?{?OaW(xam6Fg^Y_6&=L~NY&G_T;{Wi(7C2ZYEV-Ku2zhjqZ z1^3l|)YFqFi`ARKIadwcu`d;(nP5bkIEWYg#=X47%_AG^zW)n(x4(ay;qqPqp}VUq zKXc&Q>q|No9lyL=W|=#in&9>o+{7cKR{Ye&pvYEF5HBpUGfoD(TS-!>*?!l))fzfN z2>`(n9)dqmbCIhz127TpUXWz%?(0VgBtl&^J|!I~+hdeJ0jC6Pd(=H>(awKXxSjT0 zR+#Q{h&h)?9@fRGGf1-xn)bf=rJU0gDikM1-0hv|XO1PJ`ea2BJ?8VpNAMS;Dc5I8 z`wC|*LTuq!!yq@4{M66<26K}V6L{y13~+@+2CfPbL=L+Hu>Pz=`DFMm$ZUw^yj(%Z z&&15=-3sc9Q-xqLoZX;$JMX%5CFgp;roxG;h80s`#yf7&zl>D2j881Zo{$F;7xHr;*`P zd1eq^{i=m+JJxU6X&r*~o)aqOpGB!dCKxJX`Wt>V|CQG^%Bmy|lQAj>1~a=)MI@5km-i%QsH#Io)uBupdr41V8|byW0K^<31P zto#OPKJ{$^%t`JKUf&vFirpRIn^@&lCi2BEUzU2-JtcZ~bLNVj5oysE0u^s*$gD-+ zbqDo>6dMw507)yx?bPE}HDAJioec}VwYzPMcH_T;gq_3s5!@vq2dF&B6#if{{|y&O z>mXP=K6mdnc4;QM>hY1nLJn&!4$uy3+B*nhxoN`;TY{YKi5k# zDQG#zkk2pT8eozmPROp#-m#FRzvDh@?!<(i#o(G%NEWpv4%tn-^5I_?Qtq}kM{@0( z^|*GWlupuwj_-wT(U)pRZ0pGaYrk)g8KEwv z#5e*e&mGr?B69&R`VjW_??7?}uhx_Ie-z~6=+(!^-6q=+^f1SB;v~o+I$Ap`!euPK z%aiTq=Sf;&do|o49oh#cxG6@n#Xu#5_An+bn*i6?k@$4~S$rF8^7l4?1q+nI;Clx` zemLIcS|bD|CMJEx?YOYucOyeXz&YH0B^EB#mmBh*wqt0mEkEJ- zV*OJ_wAkv0wVRM!q>8-I`+}vN96gc$HD7cObH*gQB9x?}7R(*hWcb)kntNDezFi_y zVq7QM)dC(cNQmf*g+a}pPg~%lft#7Y_P=(n_z7fef)&tN*^qW8W%9=h!}t5T+ONpFV9oAwL6N` zZ~6fxBwNG#+rgzKhH7q9nn1Anx9EE9lA~t7Y66pPXyw-F&tdmb`zE608h12n5`x~8?OKFFv z60;sP#&LVd{9Nco%G9WA?(sZSyWOE#<9&~x%hzF41F?hQV(gGUY_N?3>f>}Sr|}Y* z#hDp^K^uVPKRG$Mh70^d2RPBa0W3sd%CK+GPC5Ah;Wl>_SL=47(6x4kW-N0W5uO?n zMKERIqf#ges(vN8I-+@w-S`yarZp>_-LGZ1d|HzEi6 zr#l*9$rKgzcw{{)-Fc;S0hW_ocKWb}+D%N50YmoqM;CcRhj>Oamtk*GaxyQ60p5U? zt0M5Dim!9EA!A>%*15<#2b#+`*Az6KUTbgWJifeMc7=BwFn>L}lfpJ!RYxt)`eEBP zi1QRnF3=0pQM^8CBG_Xjiu!X?Ff#hrK%Kk#4(m)IJ1|G9j*oZ>liUA|N77{zsZqpRBZ&i|oI=J=yNB z9XGuuG1lm<7Hq)3oTBFP+%M5JqKQ|~%Tk3IzV&EzL}p>8(L*aTEw+hlC_-KazbtUv z08O0%+6I{HKy90EvLkz?scbeMR>1ReS+BiuyE%F*(6>8>FL}wi@NW;|#t}gg~6EnMcOk&h7U_4k!Ln&Db6@m?!qhLP}!5 zpy!vDU%KB{xTdr}=G=52GHr1ium1F>3+5hUcB;xc=;#xE#u7;?6JM4muAr9qg_;k* zE5&L~1U2#feDg^HDG42sIWGeSt%?+>tNp9Tp`Mxr`WBC0 z!+}9RZD}u>9%=mrlD1cDehA_}Px??`JTF0dl`xyN`^icK5f-INGVX`e;FoVSW1jXy z%MC>w8uZw3(_I)G2AIeF^eb(sX-pMjSsWgfd!jkg%LItpc^ zv^QA$Lg~&^sjBzW-_q)Bh~`<_H?41O+XoKj+R>@uxzcHd>~5zKJUffmb!NSe^bVeD zs7D>hBe{$DP#dxZ^j*?|=MRlHGx!&dKWEQnaU&8dYErUH*o_2hefAhkd9O|#WB3d3 zQFA99%hV{DTeQE7!yCPfbXfnroM`xW*ubJdAkD-#R^rB1*D zEp>?=<`kH&Bn!oEAscZgh5I_?r{`{CA2f_fDiIfZrG#9*g&g7~;ANwcNzbA{mQRfG z1l#?Xko+Ny{k%Bl<o37gdeme%_Xotx9uiH6mCFZRa)B72<5A3G;j)dpjB z+%NNVwa=RbMAw_B1txzy_7H<}Ick`gxGydx+JgAFU1C%;T}XC44!*TM?8$p>{?5+2ve9m4|wfgG)#Jdy3^;jL%O zh}>>pfJS}GALE6ZYV{KT6CP)8!M;fqwanw0TN>wW-(%nO-5d zm&X`#HkM=Si?)pQzS^ztZXBK+u!fF`!y{-GzR|x(AU|60_-%q68js+1X!S+mTnV=__WsR_mG8r8*x|JjoHIrD8w! z#kdyXT;wnzgZL3yjBpWxf=kVW&BakbPT5Vrg@E~#wo;`xyA(m-y7vWmDZN(E$aHRT zmATTL6|h3~`K{@*u=eAcLANeQXVUt&seiTMw{bVxbXp#5dB2?b`Vt7jN&{^;4JGI* z6w^$?{^Ww@?B_%ntMQ(3;xeYJ27(pSu5^4{Hk}9S-iJYNI*7_@!COU}$Z$V#eD}Zn z&*!NxgSnBc6^r^LTv|aN`GBYrXkg}T;<66N<gtvvOY#e!JVv6g+`qzc#&FBswb? zirs=%vFY38n>g)w_?yP<8l!#xjIr=*$3b5zb_Ri`cNU&*tAq)`ZlocS@qSReqV-Y+ z|KIjo);#>R0=8D~(%TpOj^{B3?o&uDC~8GPJgi0()T)UNL22 z8_)#~n}FVq+m-*jF!zCaRm-u)cn2)2v+E=fkW7&ln1@ELV2 zN0+Gx#2K~FpZ!5WXw$_!y5re&zaP=IZ2s8Oy|@AL>67TZ?nl6iCvj`<54HBIFP4QJ z$RauiIwV$N8^_##{hXO;q{H9<0dH&WtKWhjxkPv#(Bu~RB8c>`4-+)3TUs0x9#}ga zW^fxn@DVFH5X!HxeO1UEa!kmdl_u_%Vn^;JI^=%35(Hi^9?NzU@gE=X!}kaxBO(&6 zsKP)Y_?5`5UM;cE>o>mB5Qhbt=!ex8&zZwY2%xio-N@s+%0`IC%-UpswGPLzYPC^* zZX}O+v<8|=K!v9nrnxVx9oGeY07-^xyX=yGfj|;hiU*h9Gw$4K38VwPd z4^3qA9bSBAKxA2%;RyPPK441yhJE_)Scwu{Uo&030&~R#y&~+sra)?$%EvKBJrigf z8=Eh|rMP5AZ(-}pg~s+};yw?)OmD zS{EQd5uxsI&(k+~KbJpArOnL4*l=*+V`G=N@V&-c0rPHeJkj%3IW}HD{T9IvkmQiJcXI#^;{=w@m@DZ?z`8OMytLE zw(CZGBTO3gXI9!zlw`A&1NZ5x>xP#KD-B)&m`?{2oVc7n8AbD)={glsDYp}$7?J(U|AG8D`zg2od#oa`1zPnDM zbn&5M(*N^~vFxrr#VezdB6!vymYJ`hc;_#?KmBp!VSpf#_%3ymB?{ckKSZL{l;$*is``@&%Q;3`aesG87t!gcPL^^KHyzk`M+hN&^-n$S zh7%-Ru!Y?Gq`h6+r~c5~cV_~>a?(x4WIY1QZSW3_VGecH`kp57@?U(V)!rPH(Exn) zI?zVjc0pmpUAH^W2V!WPkwCKYLeI*xKSVrnUuhVvm9r;CYjj;cr#wDAG(E?5^h@(S zO{E>}uNSnO_Iq5HF5LGJ=ysez@HPE2ZFk#Ef81Do3_s|5+OhJ{vBr;jQQ2eh?5v}8 zr-9T{o5?V!Rnz>8bC37jTp1~P+Maql!QiGS`w>m!8J{x}O z6dMG$LsYFx0z7*LNx-%w!2s9{-nDo=8$B=3`$Vbr(1SWJQT1lUeTbyBm;Of^LPyNc zr%$p43Sdb>j4QfurVb{%u#Vb_D3Ujb!+NLNqISiJrn6*|7UM>rI0CiN2)pz2R8kXB zmMBFE?judwf%$pWDt90o&=JrC)jcJDNT9dS4O}~~nGV2;v@m;D`G4o!=sRQ_kyC+O z5&Pr}T+ke5(LiaQvSaA?K7Gc~3PPxZfWUZqgC#HvV(JuNFNpM(DoPlba%}a?g>dM6 zE4Iej*Gei-myMd9^!MR3RMhwV?MCyj9rxl=%$s)qrq>IEN!=j}wTQ-;kVdP*l<5sb z^gq*HpAZcAH?lAxL~$Al=sHs7OObw4dXb-M0wX*<6Vo?`7w7m^LPA9Z^_JH4TKHqjZ2VE97V8HImDaz$ zeCa-Mkg^`zF1(k2yf%lV`PNa=ddPTPk(!p>fP3Z98T~G3e+&6uxC?Qh3k-@C4f+<& zFd*sLZ`A8H2d&H?=2A7Ghf5$Pf6HD1xTd{i?Hik7C7QlIr#>*Y!q)7S1J(tjtgrBROTi!4alLukq5< z*dJ3Lcs6&`3vtIDgK;bdXsu6D@i#+;E>O4_vr8snOE=(O6P?Dh2{*n!u7hx?|3ArI zg~>}QtA**cLx~teV`0Uf#xEA;KM|35Tq2wvN^&3S-t~~v(EldRV^SeUmGG-FeU<6$ z%5kO&fAm{y79_+V5tUiaF4ZOZ%(V_^q(KHZGpBdb*uz8u3~4jKW4xD;s*sJ_fBtMxTDl4KKlOtn+mtQi5 zg0I`Ou8F$%6MRP7CwTbp3;>*bBz6D#`~uO!&=l>fKX2)_d<7GaLrlwshO!wT(+h_ z4W>kymLntlNGV}!pc){naASIL+oHp9I^rnm3m6y}0J`qgvgvnLBb|}4*0y`>kuUd` zkCmbLTPmw=KH*cjc>}cDKjwHv+Amuiu+GraRRJtX!It-jIS#!a&@)mbYkwXbg{mgz zUHD17pQ$gD^U(~bDo?aX+b~P4`giUAIAO;-EUE34_F{9Bt9jv1NBs|bOxViG>TI!w zI;L~;;pY5a6n}lK%eN7UK^VGn@~zze4!bG~z}Ip6nrz@*KLFDG6r z%y(T757|L9Tor~vl*NZzajRz>1sUpK9M6hdTSZZ@con%V0b(zzkNO)E+zR4PadTVui1&{SWw+z*=Hncu=KkSNCeUN3lYU779%I3{; z*UG;>SJQv}tEI!LTBgLdu+Bc&;VXYr_&xhu!cTCKvVtw9Wym4cpUbhzcsAnDQ!eeF z*hJ?af;jsc2YyF}Go-g|8!4EDm^K5Rs%0u&d|w>r&$>&+g+T!k;;1lhiRJ#5tW26S zP^aAY`tuLc^lnNL5>(uf{>%M?1B|48{_vL|YzDUfTo*04fNV;{K_mnhp@`GkLRF6E zs~62EgmZ+_o^3&4=-Xb#yo}J&KSWpyzX{xzP_sSR>;AlKt-AMdMSDw3qN;PQcN_n8 z^orSS-I+Q7cQq81k(T*DC-{wasUD-I$eF6GO=jI9u@#N1MBBFWr_-6?9{R=cQI z>M|q#DeJE2Ynn?>hIm!VkCL~`8Uu@oOq=Hb3-;buVA>UN6awCxA|g-$Y!6#b%Kv@+N>HMb8`ydzASW51SXxXQYWQrUZ^E0E6czW~*8 zNPPfqh*F=Cn)(#wQ1oOaxkbvQ(P>%v2G3bh#LdaVNqB$ey)Z0j%ZXx+&2clyK`}o) zVL0r({zZsNLR4rtL%g$lziVafU#%jF+cp9)9^xMFO|GVAd$M7PseFoftAxMrFPDdV zSm3X}%ypOseWMPV%`WoDSA~s9h&jKqUPby7a8I{hQg8}+p?>g2)7C?+kDoxLgn~c@ zo6w$IYGXl(u(d{ddy&!DBz>O3LNw4~f{47VpE%j{mEV=lrEVHU5;WbI7~q{>8rPU= zzyD;tvo6OJS41T#CZ{;A-givfL6&gzZYn!_{Z{1u{(fRNjjS|RlRZX*J-O4794y2+ z=-1LwrPCcIIk4?KlkR-?GOZ69>hMvqiHK3S>He0;XHlnb7}}=amSgV)?NfdXPKMpQ zh7|sYgs$&>mwRVcu(jLz?UxyLfpufS`C_>$ciN;v4e_s<#@af4s6!TmrjTfPM!NX} zC6(}<=6>z))@^VM0o8^l<5jE=2RH<9wIfi4mBQNj-!RMG5&qO)0``;w;LqHu@<6b)qOcB zD(k7kZmz>cG8CIT{zt+P**Y`zP22O99z%q!;Tu+iMcwQGOzhPsZ!$!b%|%13n!5*C zB5-rxDHebEp+^wM)Q#HlWif7Fn#--R+x7FUaYw9vZk=L-N7|s#J%*P1lVLmtIyu5e z!pJ>2DF-56+$9&%>^sWyfZbKmUFc=%SJ^%xNTm-_`JB+K? z!JK8n5RZ!V#0lW#yo2`eF{a}W*0^s!eiXzrE*Uk=B>jT?jiYUk(mz{YzsW}u`bd6D zz&RNATlbtMgU++$tbp;uLgt)tQiL4B%ld7II$kQx-x+yCdyx}irHtFB%EkIol2_k) zvAvkF2p>sj)3ZVY>sCM#UMS~Msx2auqsKHj&+sQ}Y`M%<@c6F+Lp;IrVks}zA!$bMd{@#{ zf(-3oY$8Q-QVuC>>Bp*6FB62l3_tXxJG4p>T^Y&GgJXFIA$8u34Ib-JrJ;{Rw=Z=H zhG_7cC7yi$F>$8&$u~C==KV`!nN|V+^M?UUC~h};0x`qhRkz8NRf=ufjCmWMmY!ch zot?eoJY8m3dKy;urFMb`LpB?~d#%TvMZU-^`+KH}4OF~lekLNUJ}2h+8771Zz8mh0 zr`AZl{^u0*FTLPxKD0lVpG;}CH>0QZPY4WI8rdLPQ|WxwrDI_j4l0R8o6~4&p+j(o zi~s;vV9LCeK=cNZBG*ibdUpv$L{vnaH@(*bC|{?h->8XTCyIfAYT3BH^&%R?RRTsa z3!c0rQ*D62YujU@ET~9uAisJjKF)vzdOzG^OT!w!9%^O~D)7fl?2ieGPU^|^J+IZu z;)kG{g=NcK8CKn-d$>xl{IT`yB-3&}rCT~#D|k_3iKJNNx32>ga%JDSJz{k1qkr!V zljJ?(;-GVWjcNS*sVs-eOI8CM_frFuM1k;8iQCbOe_s3j`Px!UO^D^o=cZlODyL@u zC{+LJWuM*B5A3C+M?y3QPv1$Hoirt@SoHC-^lx0hnoQ5`f<=2d6vY0Z`_U!XNXSJ( zU?w0`B>6`1%+a40bKmn&cwhUiH#w+sXIApCO5(8P=t3wGar|`AfiH(mmd!(_*3|Z6 z!sn$xD)V$pzsM?Wsf7u9-vpgWEkaL90@Pn2VH>GZTFPvlxZ=n|66pkjH_E}>n-Y5; zj>4E>U!ib8y{vk3O~MI#whT%zTb~Z_;48hNh7Nv}DHyy#II`P*beB;I`uL<4IW$?B zG`^uSgPXIqsK`^WPjiz`sqdwdS&Hp^3BTTl0zb)G7NWUXOLbE8p2EA29Ti1!0gm;q z`qQQ!9(7%Us!hm}!FVxZsNM&3Sjkq$LM!|-kL|u9ka@q8wo0n?2S1B*?T@gZK&$;c zgXBlBjqEl+XaI6puQ*-i0-$+oDL19~zYC7mKuT(gz{^u|T(-5`L!$pNjP(T$z0X-ohYYl{2XA zX-Z)*r%5Qv?}~JBOQ!mnI*({M*H5%gLbB=92v1L@mZI+Dagk8etxmG_3mQ3^zS?5k zy9!XDvPEwy160d!PMN#uQl&p5IC{Y8sL`D}s-IiWX`@~C3+#vaVJ->G`&Ogm zy^@|sb9}h!n?=i6*KZ;>sQhN%RXcO`>hfLmg=N;Id*H6qu(pxVvmT_E7-o(V=CFLy ziS0whmyf2C#NLZ5W(ZWL*=|X z#=2j~1HX}L$zwn7IAgq|+sbgkT}zk5vCg{Q0*+Q8q%8hj0fONmlV*qgQoray_)@@m z!B)Evn-hkGXULw#VVlKFjrw(BQ}BmG#SSD%nOL89S|l8YgU=H1IZ{l~f;$2|GJRL* zIsSl+sES7-_N|V!n9AM80p&3xJp?;LA|L2t$u4w?1OsR3#c-a zhGdAgwqb)b7jb-hGJ53Cv9fT(xOo*J_6=@Sq3xKouzikLh1I8intB`rf|{t<*e8m? zJUB>au_kmVAv`qjW0gf3k`V%x_Gc0;hJU>YXy6sJdlIG5&!oORAu>Q=?ElM~%pZs4 z1n_z&g;34&eV+Eg%fxWJLBZYI-FmR-%>4>Cz3*3R+yK>&T1`}8u3WdYu}@+&__79E zCu6DKRA7A#EmV|1Sb=H}iYSI;d6oGy!j(cZm!!|W_nD_dC1k_xaP2M1KyH;(Bu~B@)JIAwQ?+nPEe3<8B%_@)F`EOU70# znOlcN(jpyJddlh$khgrAq+vMp{14)=P~8jf?zioC8yYZZuDFFawcSmKbKPM@*d&>y zzEDEmG_J?-01&bRL=V7|{7;qLGe7PW1?^2P`i#7+wD!2r#TAv^#{FEW=Z(-f@6S-xLp#c0>b=_HUYD#|aM}b!c zY+L|LX8^og>=h9v0l}*z7Md>gD37P;(z#jmI|9MiTVTco8*uISySE}>ZL#>F0j&eE z?J8p4RS ztyD^Gs!g>a2-}YvoeHfGic82L`VxM9a`wkaSly9GiJN|g&xQ8BW^*K;+BhL2BRi6Zb%s?xE`aPquJ_*jyu1V&{E`@N zDh3QMWw}&(-_c2KQ!oV4&gKz#ioR!(ikP88Wap@1rIj-#l+q=bjh z6{n7Iu*nMp1*0aaM^$_!g(7&R6%t}>0GBa;eo?TMtUmHA(VR6!eNWo;?=Q6|hLhrj z7*V)+B9bV6r64%M{}ac?f1OfEOmTgkuYCKq+?EE=X8`@|np z&a+|ZO?|jeE3MV)+w4W#oNr7@(=oV(LrclNs;Y{GMROt{m-FFsn!$1 zCnybRucv%3a2)}WC%|DDu5R8J7M5=9OAoW77CJfe8=S|+v{`0K_vdCyd#--rE<0?c zQi$I=Y>0v_LHIA?kMpKT*`1aDxE8ndrgiw7y%?wk!a~trzr}Mybk4Tz64fO~09r`b z8XO&_Ftzoyo$-#@ywGKU048FFU<1-Ek@Z=)e9i}8>P^6qK{F^_JvEWA>0bfEMF1{`JQyQpZ?n6nImJ5?=wm@`})0?^UF(nSXIm@ z$vFVPdjt$7*OqF_Zo$Vad1<03lo?dJD!F21j65?=y>@pyfI1Bhqyx5X%P_un@j}hB zUTyP}$Tc`Z-P&nCKOc9egXVOR$xZhjKz(M#BTa`N-M)_{L>-Oy<|7>Swh}}9d%lm2o}*qFsZRhpM62G8sYABoA^%mi0Xvab zc?40S5pm9^WT94OVYt=7MeVGqwJxMB@{3|t9sAD@yN<776pGCUdL%vBZi7W|(5N#q zUn!nHFD#H`fM)SxCyVvLKE|Z~yo|ma)>+z#-$=5DK({#ppUP2#Vf~&80rU=y1JjG zrX)iAI?Ai%VC~AJJRN>!XzK$Ngf3Yf|zacP!C6S7@`T{?I;1x3NS< z@~iK$R7S>y=s^;bUm_0+#g9`p*X7!Fp|Qh;lX+G?B}aezIEoe7gF|qD7x8TQW~x@l zM-Hun<-z^tq*#cH=Vy{AAS2CNM2aQpr%{zc zj~By=GiNtwo}nauVuVZV@!;8VH=#CQv(S6NYb}#4kxoS}GO#RshQ7Smlu`_masI^O z6xnEmMA6~a{llP-i0NU3%bZ*R4EafhFr@LSiS0))SaSbKnSkO*Q-P6%^hRWNl#zdY zorsCZja2e5R4!0WP}Rxzj9obI1o7)n1_g6)uULXeDO*jET~8C`))R$ zDMPztr$Q?ALWkH|6JjQM`~H3^D9HF%X)agdSbQxDL-a|S9eo&#FDyl#Lo!c&T3ucj z%~9ldAvL?{vRQW`P+%h{9s#P}6yG|E5EJf70|C<$SVVYQ4#4C{{Gk#FcvuWLO8_>C zhldwnG`+kG%yS^d7>S;|&klymX8gDg-()DD827GeZ}_hnTEJ&@-Pm4w>O|j4&K<{0QRFXMI9nVXD)>NEQ&gw zUwkCc+DhgOt9R)OzIU=VU2WLNFW=SqC``rsIm2R^JPtq&E+ z?Qqedmm@xRd^JZVT7+(0orOB5-RqKrr=&K>z-%;jAus z+ixn?k(>1Ksj^wrl76FC1V#0_w6et#=}h?Q)ldVqR~RLNg7b|>h38qn>q)e!5*q&K z{6Q6LQx_e0lKh0xKg{Rb#R@6f5Z6jSt+7~^^47`=WCPO<5k!qS2V=@Zhjy7Dg6mBY zhyIsB8-XUB2vmnBnP|P9WmEokWWAv&t)(X`HBDZRl14qx`>q@Wt>(Ea9fZbS(m&yH zAaZ!?@cOt3P5;fn&vt+J`(u5frh`9(T3XfsMD>11%My){Wh9D|a8Q>a*L>dC$)_(Q zNr4#waDD!2#dD4;NFA7$eY3H$QD`QrES`X{WiwdGst&2?3jL`}7WM_(xv18wKJ_5yFJwTb}Dq_3v!3kAgsXE{)jV%gbTX zmx*MMa219Ol2v2C<&tFhtAVHtm%16ev;yu7@H;k_SDR^{k$>3)aX za>?>g#T{p?F0+}ZcWIVWtkCAWP2^JM%d;vWM<{!Y4pft0*FRAtxDLTYU}rC6ZQV zREcHiWK@hrq#Ia;*Q12B{tOB5Rsb3P^5nb{IKY>4zTww>qBPIcY)76 z>7z6B^?5s=q`Igc(FKTT&V(fS1h3e?f64P~A%U>*Yt zB)G$Gt91eksQ< znGHUkE_zWyu&$0#nmDkwQjSH#CJ|k+&$DH>bHz`j$Ta2&5s^GFXLR)#eX(@jbvzR# zE2Q~U=;Ig1Nynq)qAm1lf$DQ7oktCMIA>5pf_GYs6=T4rQ_xcn*Zt-%KA*q4cSB#b zs=XfY<^M+@11}YyPd?q|e+W?TkO~U}26d%mfzMKnvnQ`D7bKFLDoazM(OjqmeloB{ z_E7)%)t?GkuddpOTYJ~>*GC=2?=NMX5b}qNhPM3)rBk8UzX(psaytGH$CRo^u32W; zcWc)z`eJV#1uL-LIw>(^HrD-QI;MehGw@Xb*>35OJm^Ttsb2c zOT!{>-LRS&4D7(C9|nu$w6QWgbnm^u#+SYTceGSfdf?X)0czWPb+aIqueaUSr5old zqj^8(EU1q0P`Tc%9!SJSm?+`#A1K4 zgm@GpT-=g6xrR{K`XnBC84yXldL+gV75qpw9w)7e_T;6NYKqf*#&&k$6CVf!z;2VqjWQ@=1@PHn3cs6E5ODYs=&RUCZ1 zLneKWG)fiD8pK((_=Cr`!U9j?A+qO>^ab19m20W>p=2o@rNiZ-`b%wOD)00iP%AH0?S@Yn6r4VK#a_BO-pkoq{)H#`NJqcVK;G%)mzZ~ZjkKdH zdpi2exH?GevmcF@cKKSrH%UUDks|u@k!O!;~^=`LxK0f zc%-8!TEEF+dp3NGf(%h0S8- z$`SIH@J&oiAjhs$>q>_<=Q%|Y{p_&S=_Apeea3HMViKE$+rLJuQg^7*)}ioL(SAYZ z3}^u^;KXO%fi+)B`~IN|dU;R8SeW=t`!&RXfSmckZFXE~EfQn~m&Y^i=$8i$A1w5N zl-s4*MG6Iw_8-fGCO^oc)T71)1^E4G)#O`AQ^vS_g zIMJ!PG#|XN{oxlCLlEh{WTl2KlOxMbUD8^Yutd_-aHi$UeDxP_N02$gj5BOS4b#j= zMi)nQP*clEb@5VIR8!3&4Q?Vrkfr&dD3&)|S3^$Jw+egjQ5fEX)BV$>qi)RWm9%`O(Q?J1s6{Dg6)xLB!`(5px>{Li_w9O;(bnu&cYhI)wc@a1WZC(Is30! z@N<2^!z?`h>%{n`gYwxmo1HT&o(&6Y>cc)pSQq4e@au4XDExAAg?`uR4_^){14>A= zSun5b*x)3Jqyd9a*6>%p&fsBLlx}`R4}7h1V*n_M=UzEJF5CS~H_3g({djJ8chGuI z7E;1)aDOJcyxXtEO*SpkMNiaHu)1~HD3fRqol9{NklZq4GHxsSGWIGxZulojnzC+O z$J>^psX!Gb<_ZqNBcbRo@=SaDoezo{u%>`mxWGvDw=jbak6Vp0l)-~Yiv?#|fU$Axr< zbW$#CbXYQg?BBexf@notFJy^kS9*N4x!t-g-z1f?NX@ATuk1v;tW|MEoU@l{S}E4w zb%GKE%xCJ0>i!DDuP47h5__2UIZ-4Pq(s#at+F@&{czQUcK?cZF3MY}u4Gpd|ExTX z@79LhpgwNj{?YAVmRf2L0VaxdP8-N^t=CnR1sgmYG2f0)-v)b#|3 zxdYm9)@5t!q+z|;Ve>&EIcI4`rTD81F`cg?U67$~E!3MWfFTk=np4lyi?e|qWp z``t;WJ&=cVkaxa0vAT7~5{VBxv-#NW*%p@K%NhAPW}|@^2@R{$P==yX>5YNn;8k1X zM-gRvk;>2Y3ZdKO>AASJY+Z{FLC&6|hRrz8CX5TrWMz>Ar9zE)*V)t$f1={W#haSr ztV6%x=WH>gnAz%{udc$eIfQm_fVSK#sz$#ddM^no1(J~kqs=&DZce>3aB=ZatBe0i zu(2#K9L{d>6(F-LzxOI|Dv9XYXVhlMF8Rn#ZO#LEm2uF~za4#ncU&(LM-$$}(AMx=Ie{FvjE)iyx{W>qFc7{U!YI!rhQ;twLE2UoV08M6)qQ3%%|(`3I(nJH3f~>A$U=si+zA3Gc9xRDnsp5U``T; zS}8ca{e88b1n*9g40h07D5X}QX$YK@9KDfqw2Y@yWf5~nN22j%oGTqO!|!w4)tD&{ zAN=JoWuINQm5Q5t3)^=L@$HV}C3UNBwHhx>+DOS)l!dg+#i_Bb>1=rZRM6e&BP>~U z7$Y|bT}2D6`+UR3;TJ(x(%tSoi0GQ_iC`=UQdxK0oH0xk8<|_P*1aFJ?s=}T3@>AK zs{d9hDN@=ajfdx-BPPV?FRJv*k6w^jz_iZpzR-tHiLWG{t8H}nGw_6xnOf56#*R_L zu!gw_d2{nc*^k#5mDW6_3F!NQ72r$=)W7A+{Cn`o6WE&(RE~0ZGC(g%FV}x zT=`xp*CglfIoT{0hzy&_dv|V35gBtOe%Sgj)W`|rNDoXpVs+ih#>!q=8e8kDmnxNK z58Lo`7+3TF^_dcyntgv*jYQK!u!;nozF4@Z;j?vE3Ov6wq};d;8!}$2F(H_axb*9$ zrA=4bgUTfQ${PE$87GDJ>-7(Oi=Yu*yYcI-@y8Ky7p{j0JOv;PyBowh-1?I+JOaze z6!{uZh2rRcf?hX_9h#P#LgA#|sZ2_c1~C*?+KAO+3Wh$Mh7-kFe#)8koSED@tyIAu@l za9FQAS)=-$c1N52Zor)HvT3h=IiLmKMX^oyR4)9xjn z5o}B9fy(b&?KpBeTzf zeY~55)8#17uk>sdEo=@y1=l^SdVY~uLKA7)n`tCHDdb7OcewVuLpIMiJNr%4aoX-E zZtj23d93^VidJ5KS|$&KLn?^$!-X%9~{(8hiYO7jY@GHrOJp4q|%r{2iZZBe90LaAy$49_~6q4{tz z6H{uyE-#ZscueU&X`>tZ3HKywb_5`{chaM3K|ArlqL^*#d$QxMSPWC|;t$OV**niD z>yMuAGaCN#@|ku8M+6yU(BC=vuey!gUT3fxkqdOK*Ke`gEq$&jYO82zu-Czwrhs;CH z!P8lu;^tC~^U#WRcMgTyh(C0!p%Uax2% zGLUa0mT^k`FUyOW0+st;o_-2I{ivhSExJL zZ?uvR(C=0Njphh4&N2~0i6KJzp%R#qWE*m?c&*Zn@Ua@iGF@`%nTxvN&sC8z9Eoud zRQ9bv+RVitz%#z$bV}na@ne_9jc`tuVP^tyi+Wkp?8|3XZ6^OcCs6e{R{~O0clni? z&3umEfNhTX8p1Um=dmfV1++qqlU?qqPQ^q?hEC3J-@c7dD@SJ$2Bgih+Xc^KMNi!ysMi>y}ZXcafsqR$(5gHy|g znTPwxJw7O2g4Lx^>8t0?JcEn~UtmJByW?7%ByEjrm{Z02{ng9$q1IjoS(L6H{!Fm6 zDE&bC<9h(_-I_GCTpiyTE0;^S(vserO4V`nr{LxufZV*?QZyK-y=)QpY$6bC?P1;w zVR735#t6XxX-Tk7aI6Q4`t8x35vUq&SQP@=9usjiVEP zLlLiLgj`v0q}hkACI+AROa}{M5Jw2HwAi#=Mv4U;1zES%x9OrbN30PLQD8|$SsJZo zMJ%XfDPA$~X>4mSKTTN(KlvPjbj(diekN8sX>s#i?$Z|(fr>{9F>&e#u)Qa*ZzTCO zDz^~l^NdKyASxH>baQVF zQkId1W^d}P9BpgqvMsAtJw?5yp*t(=(Ciw z*D)Dg`y!YbVVCDDG7pDlE98?0%zVa@Uj`Y-|GrENEhQa^#_jxBk!0E4#@V!lZvRYB zmzpZ^xi^;Pqv?`qTcZ^|r4Kv z7JGGezE^IQPYnGFm^AN7NfM&i$6SO&${wzz{mW9DrWkl8M{549&@}I{LURpu9n;I5 zUZ0RElAUzkzH!*hU#m%kq#0Zf?9>xISb6nIeQgv^>Q zT=a-HZKNg=w+5a1%V$5Ue?f3TmtHg>92d^5aw9HK4A)BCTzdkRb65Jn<7;j%11CCd zc#*TdOw%Xa+X#-a)<-N(yL<7m?~jE3`x}HpoalZ5R_m3h-{jh0H=LU+_PluKp4yQw zoU1Lhcv4Z=9p(_R90qv-#)>`Z{v@+2Q4K`r3`iVrA&gx+p?^cBR&0OL1>csXtG?~G zc}C|H?+;#zfmGhSlZTJU0YuOH>0&ENX!3XHpd#)f^GjvLt6NE?fB2x7(vwxZn9NxR zCRB}yc~kn*7t2vpKUIQSc?ejvWD2O~F)6HE@JcM{pRdp=H?`4nJPP?;oxa_xQ_qSK~|tm?hLOK&uh%CXg{JuC<1XHcIwDxh@H1372(+)HqGX@+nWU zo(t9SZ=)2;)Hyd^iV#E_ug7QBZ<3U=_HISMhN6~?l5BLY?A5Q6r9C_0-nT6fMsN5M zq3<`NC6x(}4b|w}#J|}L#f^SusRYB#0nLxIQO(y%y<6o-%K^?kq@j-}1hu<`y{eFe zl_Fs%4_nW3rD4h*uhZXI(q@IjGTGY1mqMOthJJsPR$SXFJ{N}w@$|(S5+zY<$k45 z_2qyzM&%lxPVa~dy6E+$2Bpv6jyTgfU*7bd_%(-&+Zt^EfxY#}fOmCC6e_D`rw~!e zeCE0z0`6Vt&#bESE0n!>nw@4Uh zrTRnB>S0@`ESas1KP+4qI1gLEZgMAQ>`g8j9gv(4%^kY4Nad!Q`*6XXt|>qMN)Iyk zz9DZqiFJJP18B=-^IDp4wdd3+LMztb#*_#2HGs#A7@B9Aro55;g1R{}$+#9d8%9Wn}bRKV%8KY)~%BPpUZ& zKZ{X1BP+dYFWRWF)kKdOvzUuUD{Y0zd%;kaw$83KU~y7v+<7pOL0u(?_0%b-sTCwo zg|_Q9rzXbl0r7Wf?TtE*YulL+WEolg(8!ab`(OPl>XP*InNaCjMjs|$ypiAS{GHU$ ziY{@<`cFkr}%Lo#~I{rabr^!I6jAqyl6nn+%Y0w`R#mp_T65X?8m+{U?xk< zzi`A#H$Bcp?zk-30~)89-SIJtg3YVB>ZUerJzbZ^7)(;0RHfAcBH?z)d8Gu_aq6j5 zrOvw(pM^u)6%#6N_d?~I4GEa^DC7-T)1&5f%wz`M#J!EPYa?Oc_dC~{{#Ok#5B9f^ z;UL5BePitK7Wiy;)F{$Ybt0d27lCoi*4ohSNwx-|*p2!OGj_S^1xq5NWe!w*-*XHAcNdbe`S z1;v&u_2%zGA_P_$o0{M7E+}{0V?QgZZY`N3MQYrxLtHvQdp zTA_T>P8xfvQisrAd`9T6$o!10ov!p$=;y&vUZLBQYMX_c^3R?w4uzvtf-#hrCyWjC z`}$keH|obet)F{@c4t9W>Tj>;>lVY+klhBm5yr^KPvG{|z0J=02F?=&dG~?fWT58Y zT|%T1aZ0W>jYFS6h5f7ub64N(wwJ1lsGTF9TG;{B;p*dU`!Xjd=g98(s0CqHLp-DB zDI-}uLv!wA-iM^REt~53gfrIAu{Q<`GM|@6&EK;pqg|+is=20s?8%)qgHF|>)otev z$244yO}X26)U@lV!u8^PK1|(OyL9*Fs|S$d)n76#dxa%5nA~#pd+4lWs_Hoi?dg8o zjwN1UsnitYT~Tx(&;rcv$I#=)bDjtOa6WHlAM?k8}nV z-|ClNrAvl~iAW)T02!*pT3wRW7J2%>{8AlmsH)0#I7{F|L9m)d9GV$YN+0U{c)xHV zP2|+Wa%6fCHqGuEmJ02>ypQ8ygs!>h&Bed{La`E<7xNCWD#`+QvOFt0W^*2ax9=&= zz*!S+026c9e@2YlR8$L8TQ(rX1M0G9=zICP;0p6KpRgO2=S^~fz`BP&lML-6cXpEul#iP zdO6}#R<3JRF$mD@+%q24r)|U}B(G9{{y-q0gi5%#Cn)A=4i;;4ZoJ2e7~i4?&Gt`8 zb06MRr9aD5ueGcHTs*g@8hoz-5`7S~^uiJ4#9rqt#za{;d!}0QBwigVYm|NJK5M!V z2GGp>0ePXfhU(-Ik@%zM!2TUktD-0Isy1VdFF*wV3uHxh#O}}9o2}8WF!<{#kd8U$I?f}1bEk^6UWZL&|JWaLrzzhQ>GRhc zUfDm zEkCd9z**PFhbPrv$JS$ghJ@U6w9+FZPZ$r_vWwmB*1XwQo6NDE5+Q6Wh32yTnuNZE zTvJ2sQ$^94Q``JNk&uf(H1I61I#*RvT&jS{DWp&qK;oD`jc!1xS*@lO1B+3p zNQa;b7aLV?ItL_gxV5y0J8+Sm zQKvSqW+Kr$>~D;r99-$!8{E?-)SLEsMbjp3$?;AN)1~xqBvUOY%ZdUMSP->w7yaJUFT09k7=eobD2rY71j!; zfcadIc^-Lx{KyTSeSCm!$?PNQqz|TICHQXnqAf?L;%Kr`XkYk$6;z5zPV}>q#u1h> z>6S#=K!gtlOH-mkW*jv&iR>Y3A@7I-SwDWwrVMHTn^J^m_vo^PXRnmCa;i^Bh)bMnKGPQrvH!Iv$T^yVOl$^f<0FeSOK{>T^ zi6}2`cW>|BZ0n;Gd&||TS=uLUO0VtAq_<;OqIaCgSd=!`o^>Vtomip+01mF>bO%PH z1F$V014ZvoQ+R22=zIOjBgmE@xq!k7J{Ls9_Yvviq_RIo~nk z-O`ay9Am~+by6C)#jR!Sna9j-@7XeAae1gA=$wvlio03ZJqeMX1A^$KvnUa( z{ROWL;9YL1dSQlPQhe$R#rU{^Sip$3L*{q(ecB05q3JltJN;}A$hLJCAGXh!a^iu} zne|idEj*`c4!UubcFDvhg3eWlmm6C}+ z0Fh=BNYhvY7UWL{b5n`t%T<nuKg=80nml_cED#W1mF~>N$El0X6yJUM^V7|9J6w!Gj)LB5-g#m0Z0T} zwTZ3hfh%Q<=mQ^z?@84Bs*ZYRTiX**N<|zxI_7Nm@0@YQ0Aoi@S@>VYtbC~?FNhNw zr3QmN(PX+e3ihu5Zan^?r~z?YJ+h&<#6LvEu2>SNyAh!14_!H_gnDm=tLWM_r!Ih4RWH{4?15 z|G#eBf7V$15w{}C=XpMNYgCUO*;q7@r-zG;V7IW;=fHZwWnA%W=$i%4L12yXe|)L4J70EEu| zLOq_p?R<^nqU-eQ{~g(Xe6a^-KVP$TXY=~sQlKm}!?1Gb-$eseW-X_QrBCECDagpa zp9ull1DO*W&!k#k=tiYm&6?CqOwHQRXKJ^F-sNKbgF1rCs$4J7oGfrvB<3Aofz~Ow zJl5fZHksCgHjVvjll9yFAzHisB)0vzY8DT_^I}NHTr^9+Dj>DMB2$ zo)rU6NuX)g8kXy38E_Dr0FnuE97OdKC_{a2FUo-k1OV!o|94YTtwmKDDc-J4STb+4OhYxxR!yHt8^uW)r! zvwxsn03ZX$MVqgYclySY3e4wY^>!pd)VtPryCp%kif(!^q#UgBjLJ5_B%(B5y z1pJWU7SIs|v25X$rD5Q1h|izw?}6i{J;S86 zYRl?>CoBg}n9>oPDWKO3Mjj=i@p5yEgXtZ*Ho#Tq1Y>(9JHx1z1eDbNPWLubp8v$r z?ng^Ters!M0sWtIOeSy1d8$G8%e)6iy#S+*TRR+FdUtDgLAy=i;(Ut#-uM4>127~& zQ+%}TrgJHH;@vV;=LReAR_Tm$ex(5L-T&nmN1FH|mNUFNs0S~&^aQ!O|4{N52lIeJ zhX(YHE8gp#{94Yt#yh(MBRCjjdUG4K<8BM}+t%EV zu3FG(3+iccwEu5dRK(Lt>L&fK9qB*8GSw{m{|c(Ps20>p|Jd^X4X7a6T0YeY|E~$} zzh9*K6R!TBKl2aS&+sFpj)6;9cyOuN8=&q?fe12Z>$QNu+-`s74mKF)B&4L^4OIgs zhdKvM#smfu3b-)@(llwPnQh5eT{C|}IZ;K1w!{6l6IzW?i<~}&Y?EAWnBaCWZJorJ z?!@u-DO(pWD%^3V#YYg>tiZ0c+y2aG1=4j}0Aj<*q!dsaLcrql;DEy%nFU1GNb(KRNvod@EKe-Y*__Zh34TMa6O zc7na@RV}DXWFa@>Foy4g6=39F?9U>W*+eUilk}o@!yd0;mEb?^TCTy6GW)AgmP;#} zH(o3PbiRM8oEwXe-YZsDS;MsF%W?_l2BGuU*FQ#Cr8TN=p6LuiDFgv?+xTdy`3Z>2 z@!+ZL*^&FfTz6YrTNV^Nx(>zCN(0jiTGArqY_NTAbW|0D!P$Ce^VzdX+wWlR07v}y zJ?WVjm_6_z?uzDPD1x!tjjnrBiL9bd>nNP9i*IgPBC|o~Q8`+60?_D|77<`VkWZ=& z!g!k1d&zn=`cgKQBMx;^O~2yMWY|FcAK4 zAT2KHpWK0iU;l&s)wZ0oVUqKyOs7Nv6E8P7S&X*}BUe$ymc-Fz@fjJEAi&OmXb1iZ zVEWbA%ys~jq5t(k&FJMvFqz1Qc|9h9hyb{iiHnAUGY;AF9*REs-RwFiHn7sgl2Egy zpwubO*f0TJ z)9eeJjoZDyY~#bMTNS>)1J=fFd3BR->g~5bXS|nN^R?#LZg$hPizmVSzzg-m()+va zmBqZ@c)w=L|OPrR3%LV?tz)udJT2U>R_wiTc)CCxDkl1B3DoFp)Vn&j23odFQ#^b%XN6 z+~cRGXVssM$^qWMuJNLwr@tS#E%5M}Gd#c(s)1*fnLMf1`SNo?WSz;QoBL*z?VeS= z;o9fSqqZwn_N8sJ-g@h7(yudL!FkHt_;-VM;+yMTb$gf9W`@+4D*ldL_t+AciyMJW zk*TG3=ggazchmCgmoFQ#uj>KF5kNO)Zp+n|{u&u93(T@PH#aRkq6bU^m%@GqZUKg& z)W_(u(o#cU8S~ukyQRa;FF;2D8#h%9OCu-gEW3N{`+{Y%5jpdB-YZ*^yQ4Pqxm|*F z-(RbR@#`b!ZTYi^(?F_&!R?xUfkRaj1=Gy0@K!TxmVql3$9oB zCEeMUYYew1~nd_c6r&V5D0X$>o+wPd-#Zev6pzBLaZ5wt&4g&{Xyto{A z^8qtEAMp4?;Ukg2BSwuZEqAUsrMz`sFzB$*jllM1&h2Z=M^$~+nkC&f1IE>#H|PK9 z09)6f`UTYJ4Pl8{b64-1%;F5|IIA;XqxFutJ=!vxH+!1c+KO%GujhHsxLfmkO$mS2 z@3>!Ez}biAR-ftS&i~iGZhKtS|992ahgI_~*PLfR`)N_&+XqSCch5OitnD|~suXzf z(8ib<^X5GRmc*%dZ??C!l`MC-JS}7QRh`r=yxCHotKX~++HGrWy!bO?=Ch@;w~p@o z1#G#PUcGRx?2ec8yw~?G0goAWu0CQq(QE0JrK|efF86^nhk`Y0zXfTwvRbuQ9ylSc z_clpYnhn@9`I!l<_?PmYFU`+1ne}X;EoOzZVbfK0*ky>YI!%ZDUwz1`hK@H}J4zTB z7*tDKBT7;dOH!?pi&B9UgOP!urLKXQuAya!p|O>LrIoRnu7RnQfx%(v5LOfox%nxX zX_dG&Y;t?E6R1HKWJ6|hvQ=_^L1j^9dPWI@GmNF+SX7dkmRg|@oS#-wo>-Ks0JPqa zW7p9wK#hhljVYX@UgWR1IJe{2t0*dm}GILUec^KP(nvGzZa})DQ z(-MALlZO03JW6(Z3AtC?m*E~K*b_3#bK#M#UQT*xVY&W>X|6WxLZ{K%=})uNfBSuoGZ5C^Ab%PuiIh%-S;ziw$F<2&JRjZEGY=Yikg(d z`unzRzDZVQVEz~*QC1jBGlBom|=to6QAQC9+4kU>NB0`fY9tzsfTD=NE zAcHDguRn&*XBmM*4613FQfLMy&OI7zI)sJlgRblvFh;mnDevk=A46#wbwQxtNg3S{ zh4>_#?;lq+Eo2!Ou5L+=0+EnF;rv%Uk4T{|{&w-8yw{-p-c|j#{89*N&@NMmjXeZO z4hyOM@TBo-A;d}u1QOGfBFdtD68jm`;4|9rdt9COXzIUlSMWha^%%bRcr3k9l;5L_ zHBnx=f^cPVe#sIxONr)1IJcrhe={yc+;U-RNTbgjlN0}b!p?v$BlidWNwRbrzLy*c zx4cj^&U&~neXt@k!G}S*N=4$7#C>_?B=;|3&4pH*XmcgI=K&Gz9XG-gBbhkVScW(tLmiF*D z7w&ebpM{wo`!ED-F{Jl$F8Z5A*F5MFL}-3C&qRp?>1}ZH7h=m}SAO|CiB+lQ%h;D^)7W;|?D9HHhACYmQ=6|gdE5!xG6NIE)J)2vwfR`)(m=}e zRwSjd)9P)~*`GU0-c+)_#rn$0|DiqA;I+7H*X#T*!Np2HJ#BHDT@8qxBoAI3upV$9 zQ01#bKf|U5{vh83`(xdU+za2Apv%gc4ywH{u#8fyQOx`v{hdOqv7((>*E7|&z_#>{ z@KiwYnYkr54mVnZV#9&?H*=D~;UVH7vUU0Om35Z&()F74mLZ#$(FEiK>I72+5d=&x zYE@LZxguEyKJ;1aTk~-{bCqSIlrhf4XMblmd-zUi&Y`HRn4^fQw5>d+Y?4CM$d!RQ z7N7ou)gs?2zCl8TMbWL){L7`%HXEH+Gs0{33Tu-CDQdb^&YjbhLIH|#+g_sI9o_kyVQsAi~WIH=g&Pw6ar)t{3%@Sf~;J7 z{5LatkSrS`hdb9-K{aQKR1N`i-TYJhG2Ft|r{B}e_N>~W&6DSG*==O2)ys|(M&n}r zofCn11DjW_%EB$|$HbS!qU;<7fsK4kM0y3^?go@6Sx3Ik+I#13w`X~&!ON=ORWsC3 zR7VIn=A!3r2*?;(!4zTgFcR;t-c#P=-n>Rm&h!XAM0{6~_-gk|@JQdZS?<6)g&$Kx z4fAf_mHJtJRu1pBHN|@5dE}mbjH?{e$*ijN)y0E`)owUrI*YXsw>1&<3q4v-Qh_lp%=eibgFr(Rcjb2 zpQ?*wH|J31EhWn+$0)WXu_ouFEf$t#W#kIv)#jR{ar~(NA(Yq9i})>QL!V8-8-SuJ z-Tt0Sh0Q@@&JwKV?Q{vr`<&;|w%%6R7G~%P-iPs|?&Ki`be42h=DGv7?u@TfVXZK7 zFaxXvj5yF-)@rrzFCUxG?qKdn@xFiaUQg5HIN0a-a78AfKR-e{!0591c?{7>+%Ur6 zpym-5VchQ{dpmbnwSxF2)PAKNW2R&^qRdivK7o*5)eY)tm-K$r%+_CMcoP1k5^WfF zky`8>he?61gx7btrtZ^@;@0*1wecty-JG{`G)0snBJ|a#)q9mXRT7$AZwO6!4IE5i zT1=)bbGF$+JjX`JZ1VOcM4 zXri{cop77@R;Vj!3LW{wekjup_I%|D@xcm^35euuHT?tsws&x+|G1M%lFm72lG6Fs zJKMeO_;fG5lPyknrf$MCu0vq9rR`|$T4 zTEpE@M;JGC7>AXG<@aPgObc5I{PLQ-GnovEyX_i)M{*|4Cm03%zWTi_+Y;rY08PYA ze3~Fmjz>cx5gW{RD|CGVV_MM2C_K#T)gY224A8kYdhpw*TkP>h9}mxDq+&udz3TB5 z8Ors)H{5n%n~C7uoZ5as=11S9O&`yzt3IeslXWw7kPOP;BPB%sDosbUK{^C>8hyz_oVtij^R|3 z*>8DYA3SG;kIwXmiQPTwH~ zo2U*pQBZ@`tR%SV%jUJg%_+OS^}pFIU+D1R1a7)308tG0FZT*)H_>$p2F_=T`SG+Yxnse= zP8(lR)%Px&4lBIxRygYBRt_hiZj^5-iSQ(@XxnQoau^dfjxSq!x?mnFU?+-Nc*=<7 zPri6zkL}+=xOn2{_%sj4QAkBXN6Q@~pVw~~vL6~Z`Wn~jjnhKP(JThiCo1d4s=l=_ zLCbQ2-iZp1HTwQ3iu%5DmghOG^bjn0w}wZ<<83q^$rdEAc;NflQD|x9L;XfAxY8QZ z*cBmz1Oxj4>m@@q4wIPC71arf?fbS-J5j}nuuz+kkH;B(C9ep6-K&X6yycnDzTZe*s6(fLYwpq@wt}&-v#Idf6!PHha`eyG$NJqU z%^R{F^%#TU^-<`0<+FzBp}v2he&X7;hu$r12@3Fpz*E^%Sgu|_WJClI&5Z<5)nmw)ms zfZw?vv4|Mia(_X9!KVhFx?zZUX#TrlwcRt_^Yxv$1APe{jdk`rWpI&%jVnkCJC-q2 z^qX1pqMNP&c2oitUNa72JMY#UBK~cpo@(q&z4VP`(?St%fAHrz@9G<(Fc*k%zOLyZ zq+}>^3sHVEJOD{Rt8!tVyw#VCHE{rbQD!=o z`EViyJGlymY105J{L`*3QHWSI%m4yLcBVN6E&1*gaIu7qpG!;FQexEQ4Gqb@Vz}tC z$+xLrX6!)2pU5^i;k*8`^-j5$m)?A81C7-LB&W3!RdPTa3Y%VU!NAK^TajjO#pN~r zIvFK|jv(eeDQbpQvU>Tw18mk$I6>CIfi0)(St6vet`5Sd_82g}<<7^?f1Mw%3?IAv z#CJ23aCUw7d7<7>IB3nm8G}Z} zQsG7Z-Le1&h`VI@1Dt8K#cDtZrvplwp>3Zzjl5z?iRJu)OLe2ZWT#l_R&@w^qrDcKieWBEm_oTzo zO$*BBLkaH+&29I6H-_WiO;)uaHl{2GPVe5W`uZ-Myg!e}doCI&TV<-X8>lcXqyadJ zbB_#o7lmOOqvOl%fd5h%$CWk9FZmg^%Dx~6s?P+^@ zb(gfc1Xe7%U9~Hwy+Szpx$OS6RKuR`TTy88uev|ZxkdGVt%N=BS(Ewd$m*^c*jZDZ zD>}=ZvN}2CS>9wt?2AfDqOG0W5ldh@yG(-Xzt=O`SbXI-&mgA%^ z*!n+N8tU9z09)=^%TQyg<&;}{16g+RsK@rRwFlx)llkZTd~})J!|NpbfL5bMIdZR{ zpsqqG_ZP!?K3-ItPxN&#cXv<2UPHZ#r)K-^PCUSwFMHryz^^v!eeWoxbj zUsWyjHf(OQr)1%8qmG%!6%X6j|VOwZ%s@n@Q4s6T2XV;xHrpvR~ zDlSkO7G_Zn@$#a^jj)Egl|Y)3se~~nQd~7rYI};v?gglA^GNqk5>aX=0ZNJTWNXOQ z0h!vWl8a_g?6e2@LD0rj?4B;lr?-Z4K#XXc3n3`7vA@435^?TR*;~Ex^7@0 zBMEHzkRn^iz))n7%O!t~Vvv7_(iXU86gv{#8HxG!P4f4`~o===G=R}ahWpP1?1Jyv5$!KzeSMkMugcUzO*%k7^29>2VqD+W^ektv91a!H*ru$7^RO zRff!xWkuz$d*eQA(2`BZmfa79wj9RV$j-TjZJDg*0Z%?n)bq%e*a<4W3n8V_ag45($rAFe4_q~Pi43BtbS*S_SvTWqkKVO(5XjJ$bs9t{SA z&CDbRfD9@s(jvP8kL3O8QoT53EGm!rHH4DO=r9cUOhNhaistbOQeVHZ*6-R-xF)5o zO{gJx@0mFFcbUH`we=eGY)@B)87kzGk>^Vn&0UF)ZFiE>miHeOBwo86r6$_A17 z&(0M+{QsrVih0T-YnQ2-P2>p=tmm-Yk_8`-Vyr*yZMK{F6{PvCgq1?T@%?BTi);`} z`|FGNccSew7l{E;do-CmM*F^B&J%Yg^2a_t#flu_r@;M(RXR^c**Y&59mEZM^f289 zBCN(TaJ&dBs;VeXb9p}p8!-@BNtR+qtu_}Um~Y7n4m8gb*32Pasba&-T9-oJiV~rP z0aq{HZ}p*c8+;~9Jtvl@c}e(_0;V}c{$K9KfDEhcTypywqT?hPAD^U%0)v<*DL;j8 zx~~WM_O#{cwbU`wss9I}m*L)5Dy1d(pjvij)1YVdfj#vZEImYr82}&qx-)|TZS0wZ za8mi*Zf%wm{Vd}Se`?pS;X?n>7Q~u`TItI!ha)kt7c2<;nv>BjH)KwWwaIw-un40g ze+tDxX?TmNs?E+x^znWX>|0}(9?@z`G;MccFf%COXU@JzX~`qDA44>EwIksKOZWotTlD^;_p=#`;CHr!5k@55guL8nW@_!8l zbeiPx<}iU;c;o4!Lqo9^&`-rA0rqOIC5)F3N)*IjafvkZ#I%^@t4VF$Zg(!{(iv-1 zWK7M+lqbS`%05;civP>qUGExG5)>W&xtOW~A>>MEv~UXjMnDPqA{SXQsd0+q-n@#}LQT zc=z94jlUs;+g=O&_jnnj;ksHb5#gM3XZsKca_=Sm>@>^jE~O6DzsX%qQe^}zoK-f` zFqUy$obLo9Eg-N;V|kN~DKrlrpTi4^j@T(obb{&i8rOA?x)l0Fg0VPg!|*48^voZA zoPnnL+2jy<%iGoCzP_?U{9f##)pUH#mBOSDuSQMghzHxHwAx1#zt&55P=M^H>(?-S z5j2IUIC*WRxeIk3jK4ttERU&hf9a>Y{cziIX6mR|J2ehl1AK7}nlL^9+ zE!`)m!ctH#VCO#J7Guw9!(X{X3Eq`Fnk}JTsF$cUK?tac0VS z;r&?2{I~@n_IMQZ7p+CEx|NxweJ+C8pU@wh*-3d(Gv;lO!^9QrK@pSsfEl-*#MJ=K$~w^gj&u?5`Qa+4)wF}clj_#P zi}XxNG63)LBkI0JP{P}FWXXrQdqTe2TgpSG?a%itLt2wnKi~dWMFMDs0Hk<+hl1Y} zt9oNkNvi46mAQj%6#V`a3Gc&va6pKBZ}Oc4iXE5oCopP%^v~KC+Bj=5bDLczSA&Gr zqI=Bly(f?Nt43WuoKM5?ec%)>u3H|HQ!6V8$?Cj^qin*LTbWa#;+&nmr;?9kR9Ql9 z^rGh655Y5PS!FS0c0glKPe(6cGr2MlHF1T{t*=if_sc70R1o~?wE8)wW-cmIUr5MV z&-KG@c`5)79~hed$^FCQ0pzk)fS-KcoZtmv#iWS%=<6}cd9S;eFZ)Q3sD^F;|onJck~!; z^((mBPh*r6ungQ2%Rhr4=Ce07TTdo~<+aovaW%W)>BMHK6EmGNirm7_)jhT^3S8t>y7q ztXX>|Try`vDA)}(2DiIq@zbUEO5mBAH{c;ZNHJhKME&Z9u8KoR+{ZL zL%nwLAqwJ0?GX-hSALtS?3Ef`V&sJ1$}BaTq##J$Fc2F$>NR(U+c6;b{37 zhVbEY*h-|9;TQzA_?;?%U2S7Hd4(6lsE&EC%*W$xN#t26(OepfPz=gkfq35K&;070 zLLrpvCQEnYO--^g<^(ZN{V9``;#H6+z8`zheT_;|O;)X?SNuoNPB*&or( zg~-G*Au+2wz?ZD%dupulKad8*Yd1|TaS}7&cX#3;d^t~XwJpf>*^aRcV@QQ#ZPleK z-C8aPxyBJzkI!VPD>K7K3|x8lXCt5M?tFt|&!s_a=RQw{Am2}vz@1Cj$QQZIKVf*? zQWh5BZ!xJq^;VTbxvWM_*vDREhH0z&<%e8Psh|1@dEEq?$PVe}Qv=ATi;Igq-}RVQyw`1JYZS**q@K3)69V=Fu#YHi zr?aiMM>bx@RD~fI@7&_~-1-P&P$+%~0{k8i8TCqc{tOU9!doi=yF!g&4BgjWwO5YG zY3T(0RzDF{kk&5}=0|A4JiM z`E92PG4(0Iz;2`PI*;2tVR7)2mxC<-QE#xh)YM+vJHWGfN+UD^*WdnNUNY+oBrH?S z?ti>@$1os)!NBqG_I%dQk=)o}GXjpi=osGQuGjkud_x<98*U-S#?XcCt^^}gVzE1h zoVt8zFUZNH#UkB#l| zpNpesBY3Aj^P*%*wfnq`%^OGo#{0?y+a+Zqjbm0`6cqvU5gx)>L>hrx6ruA#uS%uM_S!v%`H`y%2cd zU~2JB_6efvnh~uaNXO*uCvJ=R78e?)mgQlFTf|v}OVEd&yes;i_8WWk+Xut~pBHPQ z->g%IEXIFzyH9>(yvlr|>%&vmHP`!^WcJyUy++pS=MAi2K5{f@e z-LcEanCD4^_e1aF?HQ#;O#nW`ZJswkAmna?rhz?<#56G3CFB;idFH1sdcbGmcmCY@ z>O0QePRIk3U_megNslkLU|m}_K#*o|nkHE3i=9q0h@JmDpuFnCyP9#ROI9uw+WnI1 zyWar$ZpqVmG8uCEGxoXI!_`J`f(X>h%{cQY1kG}!Ctg6!!ti=ni{GQJ=MWsz0 zIsWa_Eep9vc(@x=O=@KIVz`KY$Z)%z@ATt^ng;P###0De-``LN32sC!;y?cnWg6yNAQ6Sc;`K*zN?`|!i+;f@7KAojMj+aC7A>N5rR*-Q4v)uF_* z%JE!3PnbaPm zYX@joX7waS{zz;()xASjj}P~@Ionw20DIQm+ZK53&Zo99vwFvv>@fjEgL@mL?ur}Q zU#j5}UU!y|svel>>Fk)Ht5u*J>TDe_??fJxiOg^H#NUP3RO7g52Z2`c7j&8cusLNf6d-da0y z-`~un^P*#U10;xZM`BP*TeeJ*l*NHvXR9B{$R=5Jh=n-7*_Z>=eBfE`D#}?d5fgkr z`1FX<7Y4I^7+>DJ;wlAf#AKnnajw(>ilQcx;a zfg!nGZ)M)rm1fNWWUO7zpLP>1^i(G<>@dX_GJNDfvzI~CS+Qxw{ItV}1G4P1I{uo( z7)45=5KkwE7j5NIz}~^3?YJK+z!C3%nnhZ6EFii=xPqq~Po)?>kQiP2m+2cvvpxGT z$^s%2s@)X|21?kBL`i-^rNRx3C``)mSSZh3ppu4z(QjJzPu>t%*uz%8HFg2ojm6=D zvaXl0h4t=@X22z4^7J%_v+1D7>CHlDK%t7@|q`cN>g3G6Tv|?+g=sV5!Z~!?pzxgnVWG?k8DRg+O zuic;;aedO!dH{YG_^ql+TmO%E~w-@d7&E5$>}V!Tl5GG|Fdw&CXu<_WU&pt`;SPrL7@@fo<}; z7v8pzd&sGm55$`i!s%D@FS3Cl9Smj?UJLi?v^r_abGs1u+>UOO^K*zx37-MK8T&I; zo<(0LwkoH4Q<*idO6Eg`mxt+qS6}e6Q?)X#s$Yp=CVG3?i0E@9=J#7p%fdCxAM5|7E+LXRy&~ zY#um5gGhi0<=7UgX%phym(m$JE4r$k%nXY{DC6Eh?$0!#mT2qc`O5lfKb3xfPh zGUB<>L|}@2Col(v-i9PAhA%D}&?iTm+8eB(zZ#<_h)Md##B*RBweny09W?axkOo0X zVtPk1@p$hR`0(TmH@Ms_{3>0Z$Ov>kDeWJR@O$wwW{9osF3-ZCJXu}##+9qq2sbWw zf!B^e)O#Pl<0edzq}+;6Rn_-(l!9>uAMsf4S*2uW{sQfw33BAK6_S`_yb$&~(HozIfBP^p6=fFk}Z3Jb)7c&ls^} zJuEl!Y+?t7-a(vTAUZ89N;rRwSbR^J%2q{%xB*!F380YP2dN+Waq+c5GlPmyuE@_hOIs+B`tmdnFsEb=AsU2MI# zuPa!4tM!|DKd||juq+l45}AEZ%P&-_{6lQgf|;#aHuk+TtW?|g2)_uRI?coBp0bWL z*0Z~nH#x0sUA9e%%L|A;fyS>3;U;VVHmU%|s9+~x2LNACWwdj4zJz|DrQ}Oiypl1| z3siYQ@X|cnj8re0_*p@3L1Ocw9tE*$?V&xS5XG6xVH{Z)bT*ZD+wFZ1Z%({Vh8tXFD}eq*H!cvhzGb*M%^dwD-_~n zr`NAFq==~=YCnVVYVR~h_Ba^mg&8{OwM<9y@P zByUJZ{#FoDGn94xoOlX{1}Ci#Hw6J4pG&Ry@fDyY1@Cw8;}){YcA2t&?3@9m6Od-G z9Izdx<%5r`t2lTX$n8p*)QvVlSQq2^25L1nk$>l6!C+b-M)vSBZlm2Oczvt2RwW=n zbn@}SuOR4BpONN_uT4^RpgM9|;BLIu2s|5p>C>|D2e&YIYevQ@t!-5`Tr&&zTSrye zDyj@6yJWZ>E>_~V5Ay%W1G4@l9|mY1g)#u3IvF|uq?0UB1TOXyjt)np!ux&PxmsgT zR-W51iRZSYXMc#F~CO zW*1d83ZUwPPmyM%mQDIcd0z=}Gt-M2f%qEW;!-0V;JULHYOgJUw;wI$jcwiClVCn2 zr=U<{&?JAoMH)P1S|31k5UGvpjpcCA99v`m$fo zn53Tle37bKaOvfw1eO%6TK_l}AME~37`SF-Rh7l=nu?v?N^eAF!FO(tmET|{moPHhFoEH^ zx51$hZkgTm++1(2OK^_q;|&3>#~LLUd5U3!*#jP>Gu|o+k>dH zhQvOP$ybcY_=J=vt*yE}SL+Mit>t#8z^DVY?s`23|J(2VCfz32HNv~&D3-_JLREPn z*X*x!+RFbqs32V-3SBJInW(5V;}yqWrwqq3 zCVq1i{zswjKKExU=F_AH+;IaSYQCgc*|1mKe!BXpa(`Arb06(@wtY=)pSmiMJ?B|9 z--G+*b%0LDt00OePtneNl436kGi=86HoAs^S|> zjMt?>*t~)Nd?QUEPlo$P(yStt!kOt9m+Ez!*_Uj-U3N-{86<%U=mT|=)XTZC>FV1! zIuTtPeh1&Mu9lDNuLfv_%}J9+&=aj-#32#Lss)|#PB6x^D$`|odOBdNf20Wjc`T6)>XRb z{8QhRiiZc=+=*fyWdO1pqoNBt4BTaoQS*0sNSL2%oQNAp^8ya5mV64Id=c9C^hU7B zk^tKl?2vX2cM?342C130S%F~rjDFKFC_s`i}^<%z-J02gwf znn>=*U`d-%J$vCKuk{boN6LYfkEf^M-}qUYN7nIa2gS%l*v>YTCfj|*Oz4{dosWeD z!*w7vAeQTY&ZC=emlNzPrvFsupPNg$s2H@{2blT7M)j<}z{z$)S61!um!Ws8YoP7J zMjWC?wE=RI=nvWZmSFM*z=zxI+nA4r^Rn?i3qVl#(5J8TI-Ohp~ zCh=bKV~2Uc=NjN2jHSJ_Ge-;TSCnS+v}F@0y;m8ee5RJT8+}Deadf4Qf$PBdA9Qy zJ%G15`HAdcaKn6Ih{UD1_Rxfw{m=0bZ-XSAHJN-;4=;6;qt3qe%pf=MD|?&W=~W)T z)66Qc+IF0Sb7Y{&z9=yv9s$ew$O!edN9ua^xx|=dxT`Jc6}>sXIroVl^C-yxmq3f*^&}<#%#}jT$q{nWa=sjT^`CD>g=yt!17ETQ7M!{d z=<6hTit;_gL55l*Fx2SzC<|S@|aq-uhhur9r)0xslL70D$!SlP1ZP7x^)2Cav>Wuv23nS z4AjFJce1a(MG#HWn-Y$m7oR`a_0WVKYfhH%IC6EE|(AONMzle9YTIPHR%~VH2HWGmOnO+Chb4VG&#NQ=S z5Fc$ey&%VtF)2mM&D;x>L0Vko0R1kC3YMX#1E-YJELos$TQ`^=o zpXxVg43Mm-&YVL9)n@7>*oH)6mUO~N(8e}{05$E&`HTi)%m+%fd?8#EmcYh83#rsIJ(60jWG%6}8wEM1$aCcE^7KC|(3{T1}kPYMj z<#O}qo9D4pz3=B6J`GX^{FZ`l@RP;v(T7)`u4U>j|6v)5SYxJU(b}0prZ;vqBp!W_0P_4Ul1AED$q9 z=`NhiJK<%_ll`giy=0z(GDoIa&2&`_7@PsfRs&jMxCZ%-{3c0jJDgt~1*|fvOLj$C z^2BTi8HL=xND#l&S-Awa6v36SWp_r|NK!{^0mANyag^r`@2_8Z0|nxy=6k<1j`yle zX|sP_FG8ue5=0FGwfX=-F3NfF{kqtj$^t*!c!9|N1S?#gpJbxm5+h$)^(i9zSjzLJ z?UuQ=gn!@20JLzfzK|!+E#TDxC zYMp2SgsckE!xf}~R35z9Sqd@ymR;>DmS9E-3|WDI^jc1FAigY1{b(#kZL>ZYbMNiM zsx^`jb!t+rd7iO04>XAWag7#3wt(D|sN_RmqXn6n0mwRJvwM%)O`vqeLQBSP$uk+- z@XVVCQz2dWE0Uzq1z~0^ku1Pnx0(*p@kQ?18`T9IBo!4COJ~{n1&D7?7HT*-In~p4 zcK@O(NpHD;3J>0g1=2YKWd#7A1_lP8BHTic3E@28F!G#w{cvgzkh!%Tha&d&_R1MY zi{Ih^Ioiz;d~feh0@NfR{sIoA@x0RE$YjVIdloMrBVPjW1w7fCtB?0RSLfv}=L2IV z{=08eM#OS5F3{kWY4u*oKY}GxGC5urlJp=My1tYM57!s58oOPo#bxcJz{Hs(o zRgWYod&6P`Ev>AKX|Pz`csHzi7A3jadOjU*DJ&`vOcs1bRYMg1yH%jy9ivk=J0EY#1xdIas zw?JM;&#-E6-x>fOJ(vYVkAy%?4McQs-W2Db|4N-@aDvrlhA7wINIIdSnt_fL8-tww@b>_v(z7)8`YLpfCx`G^fP;7Q-Gm zW?OVxSsM4PO7SqAZ;@4?95^%&Vjkb!)?7XtFXmg#CtEC=eog+exw-lLYls+i_=&04 z?7M2CwrRm`AcpO7fR`y{WsCs5hFH=TKDo)^cd)g!eLs@&^4^`GuIrNguXgcpsV!fG zQ(W4==XHrzNK!sP5um`^@;+ESpKs+JPSsG~{D|e9q8RN|N@6d;iF%mvJiO&YJ;F6u zPA#ldB{N06WUet2>j)f#vbSv`}t_Z_)!V;}xtohd;k&j!T)%+b8~aSBZfK?wZm5ZjR=;l5*I@bIYEN}6s=k})oXcnF=NIKiuRW8sWg#Gp1$ z^N+j`%Q_Kr!8Q#&p4k<`wK-TAAat0k|DEUY^$2qQ(4XB*iF_nVLf2oqo8uZ@V|dve z)61qFnV<60dE0n{KV;?ALd{e*FTXLEg}iqDrTxxVAPSolW;fv~DmG zheEH(I{xT6vP@}uZNb_Bko(%7LxDWR{5anw9qF^}E^J_Es3I0e-#|*!{ooIxR4A_; z`JJL-eVkgTx;-H(8S8{)m}#Ctv+$9M#dpj^BG1YH;QZBF8+?l` zNt9@xy#15#0Nwyz=De%Y@iHi&&2mkm*5=jd%o7|=Eay&V&2~grC{X^;)ZLx&V10Y} zaP$lBOO&N-fj@boJub$ zKlN&(t+6AIG^@9tWd(M+0ttA6bKm#w>ZA+2#*ipB?b0Me2WX!$fC7K}S6v>u-_vt6 zxI*puD*T%IvxbUniqn1|>FSWak+1&1oKwG_=YjmJgrHGR#*bq2SiYoL z#DTwGCjUc4IJv~GtD=3{#5=7qgyg8$dd4fmIpEnIUwqUS^C8R-GXR|8;NZNJ7xFn= z`r7o0r>$s^3p)gV1@JQ!6)XT^15S6PG=_$p9ip`Dh)Gz;{R9{-OX`Orf$bu(LXyTY zr%E*OpIp0ozW3Dy({(ELoiWe8k0spvl48kI?|TBh{$XQpYfo_d{2KOIGi&tYQ*9M7 zPn7&1?T8AS%o^QnIb?$l&ABkSFr3rr@de43AMvg$%H7GB2%YMA6te|#Eg20ZDdNv6MjQg1~p{k+~KnN_X})_d$c+h2WT74<1V`!V1)c*K$& zzTBa)z7|CT2OIx=lF*t-6i;#=jp2hEzo@f=1He_{jdtl336Vys02o(@G>wW)9_y=V z5h)IK8P!;k;>|dY*h7KjG>Ztc!o}zpTGT0b{H*av-G(_~uqHtowU`wy!1mbepIYi%F}-06dl9Y*GA z3~xO{+uKESs`dI#x5obZWQLU+un*^OrEo&x;SD!Ou{9`h(f?!Xt-`X57Oia+1*Dbk zl+^F?(XjH=AXFM-upZFPrM`!UY?jS#<<5cq8iJ@Y=dOW zS*d4cCO#;~)KwXq!X-NqphVgbooH~Epp#OufWnDKYet8rWD)rpB?Be!jg^XLq8@#s zZ#Os*08kxgGCfvxWim(>p(yy9$8N_(H@ zgu>NAStC|{xGuB8V8+ov9sfR%a&4=F){VdXe47p_;HKI9lyNX;@0PINvk)9}rsy)J zkK*$NvGSXFUhd`_9hf=|q$BfrvY-2lx8GqwCOKjGOVxv?Z>!EiC~Ane2-rO`XCA0B zV97ZYf%}t#O9yreb>H=~zPosthra%U(~y{lgaz{shi*+If(#@der;#ut9z=3%byOO zJhiP8#|{akhC;JR6A86L^G_E+9V@sT> z+h)WK(fj4=iXhZNPT4345;6Hs7V!a_n!^E#l>>^_wFi@y1ZQ9On){@zohDsDgKBui zLpbX0ZzNJd^_1i{r)vXD866dC51VufA5^Hjw+0hVs%v;!wVz^$KF)Sb6)$IJts+iL zS&*QaZb9+Z`T@BphWB^QUO&A)!GWp_<-v(xZ9ak<7Q!=8{-Yj_(HnTDH#q5{mW2jy z4EPdxpG6z)_O>}5P97iYmjQ!F*GbZs#N&!cmiFf`^J;aI^%ENMbWPrt>fRn>!!{58 zI@j_jIf`H6cKzDyv;s121XHUn7v2uo88RTjIe@nY1N#4YYkuGc63aB7h7%{T{1&*& z_Z+>fiYb{4OW>ieIwb$FIau+W2|DXt?6(i{pPx=sc6U^V7wR%jra^#DEJln(!mk!s zxpR$sS;XGHRr=16e``t*Y&aak8gZ6*AQD=-a<1v^j!hQu?d+&^4ray-9|+~pF@&K(bI=j@Y2E&kAt0I@`m{@?RW&ZQg% z`Ep?)9u2!03*QU*uXKhk&sD-}s=%>RZYG`Ch=~tU#z_Ef)!#^iQYm?)DPQchP{gsq z4;Ule;Tn`Qo*OfX^8x$sl{IN*cCGWG>~xDK7oC{QUH#}_ky4n*ZVMJJX=k1AY=DBj z%R*#8zDa~lKzV~L^BR9*H3CONK^UF9<~Mtra*o(Evb!mPaM^0Iy7^d+xYr=So$!m) z9nnXBA<@KBtF_@jS)r4quG}rTNlPPz4{hTfJB7qimFDJcF+ZI~LV*pD7>TI+BLW&t z@|PGs+dq1*uKeDw1#met=Hp)b#)t=;%yy6SWBkc!{)wI8e)Ur-^~U_$u*^+=!0!Y- z>A`P6Km>{`6xkA|p))R->{8dy$fY3jc82aEvXr!Glf^Tu>2xI8>g@lG1c+xw86I3bu*^F;+qr1q7s(v{keAua1w z_c+9D>ElG{tYOjXsAlyphnhAp&j(aNLuv6t_|Zr^O8Rg7dD!=N`ao6|%`HeZ^*x!D zTKI$JbP}`4$NW?xi3^z5(oPue`|7X^a5H~)sXqAwbF{>3%=vB`)3xG zZJ^1~JOGKv>UvRDM@?D$Q{req>Zha%%M8^Ouk($LLe_XbznQ>Y%d`rR)&Su0(7~*0 zz}=Z$zw6Su=&PsWXM~dPsU-=@TqVE%CUDr|5ykoFNAgTvo3VrqIp4Xow<^LY17q$# zjwW#|kLwkf^=rrc$L8}>1qj6yWw#lGNQp)KlJhQ?OoU1QBDy-%{@5}b@B18ygrY)E zZhyHCOB&d4q8vfjQLNQCcP;X@$<0|Db9q%FOKv47#X_$?H(~9S48I~(aR9c&I z-G&RE&)YYnkrA2Y<)h8BVIp=bVDvTup|LO?H{MXH4X@Z+S~ejG!K++HWlx*k+{o9Q z0SphGB#)c8h5K!i3NALDtFW+YO%KDbK>E-U7MBiMvN#8x?Bir}q*c}b#orm~t-a7| z4mK{vkM+AF=EkhOiZs4{PNhKU@M>2FKsdNsy_C{gV<*PUbB<(bC)WLq;grt5II<4= z{JHZF8nv#pTm=0i7XzW^Mh8^AfG$x9jGq_fqWRA;*iZ)4n=hV)gV67B^ApwZaZr|P z=f{Ao^BI2KuLp&ip=dO1)t&oRpXs~3udaltzfRmvJ1kf;)!wWXXgF`aIjT1$ zt*WZZ8Ml^V0*SEFvxCa<+dh?}7i?I|8l*4A2aR*q-u#`P0}&fo(dLVf>!in*u%mv_ z$cR-fl_fJJ@!lWS-dgvai6Qn!?Es;7J;_MsFu^_PThuf&R(Om|{^;dUwmb9Otgp-( z`=sqpgzo+SCnW$0<@B>4tyo=K|7^qYhllDQHZ2y-``vN-G;m3N`hpBQp+|R@ z$VkltPq33fCz%voi+vvPmZsPbCJ@)bL%8a567^seYBQKoi$(t!mBdgu}=U&076~#owx5i&DO`G&ZX@+?mX+i72B^-<^=5BpNNqaso zPo%*|U~#N$r3|lJ&EvN*52g=8!|8tva-GtZ<>p^(M?8OML}zdx&+D6pBwR?#ZkIpl ztUun3V&Ib1!Qrm^aC*;i_y>L+XAmle@5w>X<;tSpUH!W|8e~yUmXNz6Uk9m{Zrr~^}?1*O-VzFDT+HSQu|JTvBLpD9T zNo#vda$BE*&_cD`u;0z$i2KbiEpLTs$#!ac&2D4mdRWar1r>Dh)`>2&8U_b}|5 zL@821)7+RL;;=&+8n;s)*xF5XS)`Pc>5zS6=u`7}NLVD@hgWoUW!)ccnM9i+S59(b zEN~*Bt`mMF)J{}G$et)tIu-kI{7(vFZKVC3$E7a>2p_NMWCdUh_;+K(E5)GGN^z!j zF-!9j74_S(J;o(S=1&NgG}QWZwfe_XrsW~8Z-&OlqbZkaX`boc-hC zUmc|lIA1Z@81$*TGj?Ryv5DoRW(odTg zv#o7sAvpwX;^yiDS1NpHqhX*10FZfdO?&Zd7pP&R8in^8h$=zUNwNu4`%k^f0gMb1}$baK{D zr;kylFUq4{ZKk_BmMiG~-CaP2pyz(RE4<2p@oVRKK%ee)a!srnbXG|-PU(xV8G&2X zuH_dyF|p7MOnZomW6EKHX0ZTsD1f0b^*CZ&`M@5xTjMDG`QNxDyO63)8z;~`FLn5{ z+ayk%=*!57KebzW892T_aZM&!&a_oh=v#8!(#YsO6 z*WZ;m(>Xy=Ii`f!d6l5;t8_j3+8tF@i_Ykn4LmTZjx#}?L9&x&8g*Dk8n(?@pW#6x zZqzsm`-}ho!S{iX>eT~A^VPj;;gAOX%Eo3Wt8PjHGMh7mX-A@)W`5z<2=5;B;Av=R zG~7-*i!}en12KMVWQ0#t6pC%Z3PMHG9u>$Bf{V(0B)>AwR$z;?9Vdd`=PF!;ogsam zX2D=0^(_IjKsO*(99F+vK75wKaSGw_5{A?;#Gh z-_bITL-1@Goj;S9YTj5qoLXXD=u0BnAWaX@`vp;yrsci&mO(SO(sWmq*8AVrCd9k_ zHJ-~(jyxePwa;Z{o52va)WyCNwa3X{xeGddey29g7YSIk+{g8(E)Wa@>UuRnRH`))>)V7AVb8XZUg}R_vD9Ut{*vB z;|3q~{!|)3fB*Zb!>}BV)5Vzg3f^wEYABtxy#`(`1X1@Ny$djR9?n&Pho;PCvrmQ! z$UDHAETaysuJ#s>TEeE*=~_>KPqC`k9Si#+&W`!i;C!yy;ItseRxs@Mu6%AT{960tS5&Kg~pd&TMmdTNo?`j0IBv8??66_|x@Ibu8S_3y~3lyW!W%TCt>hgkt zPJ)td%Se;`&=6?y@qYk|kPqSO>`I*^-PUD?Pm~;N4^i!Y>k%o0T0amQG-?XjL~L!D zO7^cT#R~Oi81aNuzY7WqPR6}-8-RKLWuHt{gzyf5-gOv{wVDpAf|VQ+ox%eJMh7F- z`RP_apkCa4O$U!HUWo%SU&bhF5JZQKh|X;Ckd~|=1u`qWtjuw{3zD;SW*97&Di0P@ zUPCUAQ>P-z5D6+6LR$kMzVfiecc{8EBSijx#?dfEgPt7odB7+GS@|F2{R&<4j}MJ{ z^~uAzC+Hx_lS%83^nB1~#AH|kbO{75uIZ>fw)FUjJ+AaPy>x7KwOYf&S&E>0$YZFW zQE3`&!y>aZh$(}HpwrrrPq>F+hr1!|grXX+jg3w9w+32^6MtcF+Heq>_4NICe%S6o zStIy$1A@_H<0-+JLfLmb^8_bO5pTkm7?Y3{MV2huBebav9z!QjJUXpSb}}6lQ7pg<~*a#00J-UDV~fm+WIGa6(-R zC#R=h3ZR6Dz%z93S*L-}Z9Q^H4wg*HcADGSp-oZ>3S5JOgA2~vCI_>&9L2@O#$S<} zZwFO^I(3eh8a12^p+G|f#GmTC-ft;@_elX4V%olL#izY?BW9QTe4s$kUG3hV!cxln zZQSp@xb3=Az^t=J2(qRq5iJn5IeC4OjK7g^`1B%cUnXP2nXPDRyL|{v5}ZTmTp?_9 zgctOCe0&g2U82TCS7 z%3|~peXOSy8a*@mIZ#L0*pr)(>elrY?UO%;2Kv>p%Kz};ovkqf7e?kn+SB|Op)8!H z1jO*W&ZLb)AT{epe+v41fVK^m%Ny<(b;SpQTrb4~O|SAn?lUP~jHJO`h{I~-=Yrk1 zQ=Tku%lWV@*#G~u)?~<{?l$rlSit{jl00PH&C{Cy`I3_$TS&|GkTg%mJv!r|LvJjH zT}6X%E@%J58*!kWdHso`IuDHcvhbImc*!@S%uTxmbloQXYGE(}MtA=zgjsY!fCVv_ z7V1_5uvM$RqXJ~%2?qFMMwfe&z?7;mxRuj^u!TX3CG)fso6o}F-gp#)!L)Rp*KBbO zs8@3*1yPn&#OA-Ih=1U+MOPoM8;fj$LfEoY6(~A-7wu6W$uEg9$M&55N@ed*j2dqn z7AVT~qWRG4ad4OGAcuWLbKNF4k;3(-UL zjE>3X^Pr+3&jip(%vhbw(qL`^!Sz8_eYI?Dif&O5;qILQb`zQN<>dA#GyHrt!%Ml? zgSobo?nhBPXIfZv&Q!-GsNn8Oa zGNj626QOR>HQcXTDd)qz_t=NF?31Jg22fqicv_z(g#_#rvq!gXm7$Hvr3JLy{^Ma{PshYdPiO4 zXEx&9oau9K7^XcA`w8~hEz|9wWuDCt$GU36jrD*WhJibehG%0UNj3HABH9qLc{1m; zMrGt?e}4QQwj`A9eNbrRGOrd7+TjGTW*JqDTYTPKLu4Ss_Q}=>%$R`ds$TM)QiKPr ziGkK^(Ris0-c~omC1z=$+%V?6!y-YmG7yETG#bYHl4Td-OPuOyNjbhLlyH&4*-TwKkGw9uRvS$^cshsF=;PUf9lY)j!kiOt|FhD1^c9ZM z63$bXK^F4s`TQ$*hgDLxE(=4X$IWzXoF<|F*8e?Fsa^mdYdFDfX5kEev}Z~bKcobi z&}(UF@NC{E?EXr+hxOif3Y_zd<_ zLnNjVhbRO>yaOe649)aKFn$-&Y_s23grWM?3i4+v+I@4o^$7?F2&r3vYsVOqZ)Yvr zKSfCQxO0IClt7c|{M9OK2fa1?{2{{DbQ=}NuWggSVs0$I$t!Wsl&FV~>hY*CF#jA2 z!*L{ktZ0m%TVg~lTH565iLBu=C$xE$MK+-NyVkk<+qSfQ8d$EU*{o~-ktP>)k5=Zv znAyfwfi21d1Zia4G&{~;$yi4XIr3#Xt(k1vqml+>s#ghm<$bysaaK5|JpB(|c@&)e ztMniLvt#1v=D!d()Se_s>X)t|fS@ssn7N#5N74@rh1-tpieTz$aP0bg6U-T_0c^%%sRJ(>EJ|iPtME3OYeDQ z^=pG~e!uN`zRHWLEx=@+U$pE^A$xmP?~U(r=gP{P${L=Iv0P*?L%~HH|LkcDKIy@& zA$-669IndXjX4@%?Q4*4s{FX{W)mqQDM6>=tIOerGH5T$=dAw4TGDlDs!L{B!UqX zS*hM)P>k_B-N@B^{qi1jYn7e9d#2iVcKbx*hlWkB|TvP`a_=0ptNAQ1ySjCY) zQ}m_UAhGWlHazxkp4rcF4YKo-QSH$8+Zcx*guK<4p7eXbo zsc)6x5D@5}cM@*qHuSa;;eY0|$A6q;uxh(CMF~V9774QTxny=*9=gQ*^c=~Pc|Bk zLbsdNhwpG#5ev1EzS(Z|n?A^bjYo_MwrLlWWrr4kq?QaK7sOcQ-77aI{C=4yOWfRS z#|eEKwPZC(FFl$x#eA9;uW)opDkwR&OCU8_ZMbGw&Yc7|hmW>T5`ny7D^A+^S)Sq) zJs6r$b~gS+s1ZSC#Qu`(+kZ|9A$9fxGW$Q#5kUKb{1yOi0A7iB6DJ`(eqoyrSQTxz zSYcG)lERTL^|BPI1QI6s?W!St-TWc^ z8-L-5+6@?x>(fH5cfrfABfOR`Ah^huLz@08hoq;ZJ@SW-{&&E|cd2~;SMd^Y4z>Nl z+?dI5{E3D8kgG&zOw*`uw5gT9nxISk#B9?oso*T-F8RY`;`p8P-vdS*mmZLL^%hen z`Be#MdD(hiL;ufuKN+pNx|8WVHe6N6vK z?*{&uc(yxPe2HQn%E<(_-8CAQ5L!{zi*nSWk;_LWv_nUw8zd# zcU2nAja>A5JQlx`0Av;oY5x_6YOwR~^aM0$%P~QT&$e8g0cEO)m)0jgn!zeT17vrJylLH2J*DMd#MJlmCd1th=_9 zsh48-uCi)rpvZh4B=)o?l(eh^N!MR17k}*pJ$wQ6G)mFeHNCN9i1rF7A)g7m??sQe z80CW7ZkG_U6Gqn=s#BeMm1n(Wi)oNg}oajv*ujxdb==?~by^j76@U{stOQqz?*aSJwVTI(DewM^vaK#cnH za^tgJ76JD#tJw|nde>w0)|R}tc!2HE;=Lho^ZG%ZERO2|Bj6xjM{sN{@9waV^-srx z%2d#VHD9CM&NR#|NOZ~z-af{pi+L5$6@vl;gg208{)diP;Xp}`gKv5CfCTV@o9*xE zp*O)oDD7p9A;z>N`*&*@sqc>|OH*{;3KJ9j3L_n^NzPAMf4gKYKTt`{p!#q3ua`5L zaW0l5)#d5nX?<%$?cp?1od04p!ngHwhiRZodR(8VL$cmtC^37(cI;(QGYDl9;tzg2Nfq+gxPvIr3vB{TCQ8~VZay+c8pR1Q`} zc!&6LOg#E~ocIb4S+D{Y+uV--gnKL>YV54#cq<2o*I%gGG`^93g10=e1df{Ne7fg- z1*G~*tnxIr9j=Q3KBH=UROt71Z$2O#j|5z6#s97Om0DTC8#TOOQ%XLK+nD7OK`fL} z;>QlKRRhMR5!7&z$3BBqd*ErGYS`igI%#a#I7dj*Eeg>9-GgDq3~b! zb98PlWNT0lq?N(G{H3{#G&#?@3v-{{YGoVj+}*(){zepSse=*FoBb;(%Mw1He$<*Ygo^NTK>A-n*FGDjsMs*b1q-b&j0npW$Ey^78iCHai`B}48FjW zZ9-$3L7Y9GU%5-Jw6wr{&xy*3WIC3!RgHgq;PmU$_UPd}F=K6cLI^_WyoP7%k!FY? z*%no(REdN)-(m=G)8RDZlC!zP9%8W!YE2l~awVUghQt}(fpVvvKwJdkoEC)wEAN{H zLbOm|7hB^5cH_+pP(wN{KawCBZT1}&ePw~wbOd$B`E_+kz~WvOgx7g~%5^*O70oiC zJ$9Ks?lpjE3d%RZ%G*T>-8}6)Qdh+bGB=n^79_HYy?i4(#AyoQFW?OTeag%C z9%r!`pq9XBwVoEx4aUqNFP*|b8YcK>S-Y20bGuTs!}#f3tAD;5m8JK5DhJ76`2vLH zpR@`6fRrwy?nl1Mtac#YpW@*sshGR|6Fc2)uL*>mUIQ-Rk9j4A9~aBTOF=5R+L!XG ze&$dof6KAS2klTzQw_VF`;Uv(qmQzkgxViS>our7AG)tSs3<+(O6hONtrt6dWoBEr zZ6AB9hZ?eEvtWxQI?;r;ky|hlUGc(|f+re$oH)88Btz~N5aRRV`v-FXN%RFM5M2D6 zG3R~{`rKiJGe*5M|8|XA?Zsx|;v0k=k|9WtON^gO)n*YPX+k0=>ntEB7xitISBM1m z>&De|!a9>cY|S?s&ny%B)s~TIV{&G%6}p*^snys*Q`+=u&H&8ioe#5zO`2~~Ggfi7 z2nms2ig@f5Qm}@QLM*-2w0*D;5kTy=o%Ra)#Yy}k*E}DmnWU0z7^##8-ooK|IKjZf zgLg{XOMaO7B^$R6lA&DWC^95?k@s5mW3kfX%-VKL(y>Ks_PCcWGmIMN2bDB9WP3HT zAr=H34Ob4j40#DHgP{2OCN3%?C9gN3>EexwHV?kEq>F&^SZOWkHTvnAQRntyk?N=b zGvyrR?{e`k2rDh#T)`sGVw9iEL=~5-fK0@EO|+yq?t}8FJTY+=arh|^S+pOfG+rrr z>ff6d(n=7x<9J!sZ!pgaMp)_bn;y~6or7!{h;Ju{K3$r8_!TWWa2ub`0cPK}rGzbd zi{6H@R3gJ3X0lOZ#bB#IdSW8xNyxA(?&m8@&N91SDGEM!yW}o?z$L#q7$UxNZx)9f zMQ~*#pYC+oGS9?SH^fcKksgbSA!mtl$y6#TTwbAx{hs7~Qb=`Oe{Ni270zrqPSQp- zMEXl9nhfbEXF4^kghg;3f3Mkd8Z|q7!mnbM$4|j|uKG}kaK2@&bGpLg5iWwK8oqz5 z_Tfys9Qb^^&(7Y$pgxwdM;XlR=RT=xq}4+K`Pd5aWiA?wsP`%{A(J;ZeS1Bn== zO)e-P(QgeRX4J{wDm@;HL9v)@v{c)4vquS?2hdrXD;ag$-Y&OGPhZLmL*xe<_QUvR z28m=53}u!6s3FvlE}pvsTonoo1+XSIPrK0*+(>_a!wm2?RNJW^LRHad8%j$!Ew+?y zsh|e^JfMM6neuiHLP{aX<_wFOMd^rYul^(`R_`~r2IZ%w^Na@rhh@6|6tbd1qfhO@ zGd6bIFF%W)-EtQfi->F0NZg)O1~sLHCwdi6;09&NUEn~e);h&ewq)*nAQlLMxap+Z zs&sX1mtzym+F_FQu;f5&6jpkA=l5$WMN1i>dCu%9R3|`))y$7EUWnWnvm=(?cV~37 zeyNIIuAw#4_RB20H*uzlWLpMDxU;8;(4X=FnuPU{9^3*Gft+Ym1$0`Cbyy+5oM}Iu zISp~{Q)u&<8YlLE&nWwCcxhb)55Sep&+f$MTWLeRWTiW-Zqv+zGD^yZ_VV-9f9+4% z2KmUx?MKK6nwTkeB>qNg+qJ2aK5sBKT*}`#!?Dnzr#!iB>WlvT0yM+x1*T9?doWvf z9>m8Se{bJXCJaTJBo#BfecR3Zgxx&~nvT$Tag+m=a^wrNJS|V1qL54en#K($C_hx0 z6ZTC`G|cX=|Er50MRlhcK?)YSdAgR>pRHKFB@%Ode2+WYZF;4(|2EQY_EQ-kSRx=b z#@xhf_InjSg$QEvR_EmA`h$Y#`_dYV#l7YPkmdb8f=v!pN!MscNtU6(W~U;N#V+>k z3@hW2pH5IgsoKuF;Vo8n;18O6DUWm!DQ(WTT6Xec(UV^Vd-TdGPE4zAsc7uTF)Iq4 z|H7+iO}_sotLev1mO_eqDH6+6uM2%#XtP}eo=7&gb?l7wLAK+KyM5j;02RL*0rl2! zL+lXD<~14P@PKW~yIGUd*Wc#;mfKD9NI>0$d8Youx`T06iobzP%Ch+#9ZBV=x~%ec zRHKCnuk*2en>v~JiOv~iNfx0Q9n`2~OB||CBN6c!-ntA9*Z1>w{D@T_*g0^h#U+v& zWp&(p*hYmqo7OlY$DrT*Zz8xWqJxoHo;4H-P=H%wGNm-_yI@(Mc*$)w`b)J&4!Wb? zSP{kjru5n6HCUR>4-i)mD=1E8eYxO4-%<<)iyk!{>oKX4GJTQDkZz z350Z)$2N;;aE4egfI7JOG&OO-{0Qia8~lMZu9}TUIYKJ5>d9h}X-oXQEpn7bk%(Ek zq$QZH>=Kpu;3ON4Q{J=^4bm@^_$AmR4KY4x<_Yzse!Q{P-;%;^q~dkq{=V-`tTINo zjj@?;m7vEGUVzJ4L7pPbg(z@$;`aI2mB1lz-R=+*Ju+1N3n}tO zU}(3m`b*T49Ocm;PV$f<{v9~=1n=s=Iq`St6FoSY#i|<-ee1iBb327gAVkB%j0_t7 z6il6~tIC#^wHPCw4p<2Tcl{vKVFGy6pwkW#T9>Y&IU?evYvU#63arF(?X;@=gT=oI z_4S8>?!_p9uOL7?TaWsAd^bf^2p#knduih_q#Yd~kO1d=M*b`)zjH;rqvaB^}20EFWeKnGqBIZOjR*<5+haz6_Ed&)S<0;_3U zw3E51;xKH-O*w64A|RH7qrvQTmRipI=U!xM@f1g|TDB%OkiQK1J3lN$`queL?Cg*EZH14)}e?6 zDc!Y;b06rEo%im(UHuK|-tRt!UH@|A!m5OrCFmIfF0FJa-DZ+(YKZfrmWOpj0^KoZ z=Bv2`{%5?leyUHja;fZy)XsbwB)%>8G!VPbkgjw{P=}~up8k9beNON}&hv&s41u54 z6N22U6tF^yoR81fV1u+?`@4EOd#ysx$H%?TfmKapW3tMjnTlS@(ba&pNm|L4a`0Jl zopDGJc72JT;^Scoo?l!Ip|c#M8I5wVlG2ro&hUo412^Stc&E16S9IwX8qvZv%8-r@ zS<8mPdhs=(R6Qsva?#x2pYA;5dzye3T!4g(@oqq;LhAuwH4zyPgAX@dToqmog;Hwj>}aA=ZAsr+nHzgFy0wYJ~q2k^{A!ncVhM8tjl#t zohq~ldKP9bhT9baN4(Fo8OrK?eAg5x#K1U+F33h{ghS;k)n(Nm}q z3XSjqgdG*>F;bA(LNo3n2){O-x3*T8q+zF6!Uz;6D}?^K?6nnt!77|Xwf5;tI7_0S zGVUXJhGH;bK@lwc?y!J=trra8*6Nd6Sz{wx9)222Y7Igf2R*H!SBiKhsS<8j8(1x7 zfgKqwX;gN@7$e-8LWx_(Bpg%*_?-OgEGz8R^ey$Tib^er8tv<9^j?2Pwi&IUc4#s} z7&djZwww67CqELiIxHV{-t&z|bJh&;>ZeJXC&Z|+(fsdX)U~uf`n!gdwq#v;IwsIc z3G%OJD=<8Dagnth)z0=Ry;sQETXPAFF;+wf@)BG!`ug72;dHD|Ok0rH&Oc}W)NdGE z@q15Jc8<=qD&zM!1)*jIkIuGQaS{rv%iuji-FO7&1JhnX*^9(5;ttcf0(6m*eQ;nB zSdRl(yJX+PLQop{oft4Vx1HT2OQriOM(h_6m&?tuyRAXHS!tBne6nOGw$L zSsMre-RnS7A&uo9XO=Jcas2*t@z^8be2A-bd06wMYJpz$F(iFsx5_+acf7d`0`bAI zMrrIGHc3x}p#oEkE1u&p!}Umv6tC%TArcuea`x!2vk(PnLYcy*xWeoykUo;hue(_b zWsr^qbrLfBpp5W~3K?bc3ydK}s#a(7i6G1k;Ig0g9l9k!SurRO5ngc6#GO~)Q+2!Z z&T3K)A(6q^4d4wwAgog&0G5{nDZ2; z6T@;SrifcF@`*)d^U3ZGCpjfWH_MTu61q_4b*_7#5b!*>NLV(`G{}jK1(6jLl~GcC z-`cGt|FVQ)(oNTRA;0V}15r2&&KA4bOwjJCHvbm^b+htno;_LGUs{=E$Y-)2Cv|wm zg!9WZz}iUAg-poNmjV0WtF@Xfbhu(3FT}6;CQWGd&8(4X>8JkVS3h5uy!PNhY?5pI zv6oQKl>~!(^|7*WOITsoX|k<*ld=2MZv|#Qku*Gz?Ho%uLbVz1BVy2F??Tk-a*(-W zNnTX{yEpnIZKzD&=&dI=i#%?0;o4Vdrr4aH1yfei$8XQ@Ew?4RYFfSXYaWw*v@(xy z?Wws;G408w-*H@M97{%b62dHLGhXBxo{AFfKUb&UA2mes#9rB%3c6}?vhFcSfvdf`hNFlP<(S)gX{(zg2?pkmm}aKNCgXZqv#Uh%@~oKLd0# zfuv^wT3&*M+R!hg#ygm$$9Df{+pBqyM$$#n2yU@R|CA%wnP;6fLu;omGskYHR|TCW z_g9DO;PM__o3hBc>&MB;eE9YsrW^XMd-E~msQzpGyZ(gcE?mbVEX5D)NBr|BP~CTz z`?G*A4%){r1&Kls^3;VOtJA@s8JgjUWAg0nC7QM`rSD=kOD|_ZvC>`*J_gb z+6k6-103uHSnbT*+}yo(ZBkwhfZl@nZjrxkS~iU{t}_&!$$XC4Y~^^6sdlqESkPG$ zRS;M<<6u$C0IG3&yzugQ4{P)C0>E#cOX@uQXf#Wyga5b;Csb=@DL>}2Q;$?r|8cEv z`k3M|jhXp?fn<00!0@Kts1hOtcZq=9pYr?%2Y59EYc2fG!*Sn^MWnQ+dqMDh;?in# zu`j)5GVDY7Hk>}V))~s>eiZ;4Ihfq@yyz94)AD^#mtI+qAJ6%!;0KS(!v1F76Y+@8m&P(` zXG#{_R$fftbkl|M=XH`4L4P6*C^O9mgly>h$PZ2lJ|{8#uh9k?ooSz~r#(;Z9Unbf zXstb$Li43lL^L%u6Vk!mEH|G=@66d&D_11}+HL=)+wl(|=bFz?OijIs8s2_v6$PZb zbE!bkh4Mb7uDyzGo(%zQyoXU1vUT<7>?thCx%P3ypU2jNDfKrD>6`&+H4OGZyWB;)hlSo8=Ly+S|!2iJbb9Zd$=Aa^# z##tqFl2T@h4tgOl3QY?!AVJ2m%%JyUo@~bF%T_I=(^ohQYj}-*<3}Xx>+%=IlTcj+{p>0A!0%Y!`6KLq07++u%aK* zZ6Y87V6j>D_UxvX>(Ue0E}GG!b3o+-VDR-<+x!E=kP;+vB^vs?K1MQ72$&>`kj7G+ zionK#rX7A?L$wW?x{n`d)=^o2ZpqBXmH@36Z+M$-t$SKfSLe+4@%MEc2oi$PA>cLg z8f1lKkzC6N0Il`9kuD-Xz3cGPRN+}LEj4eoW_CEj;r@W2D7L3V*fnU%d z2^Ehn%m9X>bkC5dd~nYrA|fp8nR=b-MuDSC6_Dpc-y@-A8v`B%c?AW9kB+z&a{tFr zXT50zY3=pEi)@E%uM@bDUCp#Z?-qeD4QYvda}7V$OhTKty>BmA1ynJ1#=?=DcIwn<_(|qU202(- z)GRH|w|Cl)#z{g&#e)piTWAPwJ86$s_bD8F+2x(&ui;Uc{TjKEmyzdDox zfKe?omf>Qotc@8f>~<>hj5#Zn2i5BG2d`Kk;-7NM7!{VM^X%Wf1hOFOWf?$M(fn}i zH??@W^w&+bq_(-UOFVMZ_Php6sih(=^_>7*o(G}D+kIf7fT|U-a%mW6T?1$njz=D7 zYw|`^6<6&hoQA@omKHIqms+7f?<189l8f{E<9iHtaD_yu}1)3K?pz?U4wZc5*|CgvPj7BDPdtF=S zIaDkE(Ghbn|HDR5jM76J4;zO>m`g?{#vNQbX`5|p!AX*tN_@-j?oYocO`MN&$+wXV zBzb0xcz?wM6O z2atVUeTx?_YT_Cxw_!$;lTj^uvB^l+eH zR`AJSCKKh$lS|wC)Tfhny-fkavRfzalaHPK5Y_LkK5}~;)p4_!e8dMw)xGLEp6eVU zj=+f8XBu%2$;#9~igEZV&EEIwc(yKfx3pmmRxi)wW4H(?CG$` zXSUwn^c0-hM*$YTmGkzc4QCS1Rm#+8@a;RZ{K<{YdgZDE=%JlC*PLq9XqVtnUmCPf zC$7oH;km}?(~{@fpM zWfCw%d{i}j5})7r*z3-Q?i#uKXn8rLaP*VHuEBVx_AGVWaC;fmhRZpO^jP*hf^b;< zeCX%o{W84nJO<32UiY_hRksy$M3loYP3KO73RUJoi)$5Xw9w8x(sB>apC+Apw%TDP zQ6}ca9>p=@*6xMTgASiXZ?(olI-MF+%}VwBM7}(*j)rz(x|CxKhtN6jE0hO)p=QO< zySJ-XZOBq8;#EStLZ^$Lxt5!=wluqWxh!?hY^a^X&ce3kPIji{H%HIT)i)iBvO)g8 z$2vE{@KFX8svU1x{1~JwXB4X|8kG9_OHe~Q)q3@;J?bwiC3@7QChjd!I?V^DT{EuZ z{Vh+wG1MM*H$I;wOliScwD#(qIQ61;7XQt!5f0W=SJxnbW^FeGS;h_j;N*XH>+#&cupcko3)b@vGU*ct*%Mt0gUIP?)6*(6$OR%;+mzs-<@D@@xsu6JS<-4y`yNYytw6vxAi)jV{^6? ztvOMi-X;p=+xNeipxHvLRPzGDD&9}Q6Z353z=}HU&Aqi*Iq+IAU_jnC^F0`Dt?QaM zW7*}+{1oX&;X5`7O zAJtCp?&ir4_rCeAvnOWDMn6aQn78S^HYv=x3ggw+^>LZR(XfPG@ZBH@KN{fjMd_r3ii`bdO7^3!{Bx~GuX(mKdB zhQ#m4p2vn8-|#fjvC>xX$barH$NBc3Wd{{Y%4yO_tl&bdvBq3oeIPq2id~{ZNBBp?;(|s%pFIJ@$}_Pj5^b3Fnq<*pBZ~24W7ar0IG-ObNh8EmYuk4|TbDU3sN|?9Bb+|w zAzfjeK1r%ee3;REql^Ds>B)-^4kGQL$frMz;0h{M!fO(bFp8!#a(n z?i5>dZ$LP9QkB7b^y4|3jKY#CH(2$mp?MEUU|I|7vfj!bU(R0cUrARhg^);*#S)B0!6WY@Ffmd?sgfndq=BZCgfgna#C->HCpk0+3?S3NtX+`JY|Ksc|gQ^U>evhDn zl8TfxBAwE?C6q4dmIjgT+6aO)NOwzjcSuUNbZ%hN-LT;d+D z-LdXC)m;(w<1T2BRCSN9FG8O1E!^zhH3`xS-pYqOye*V!x)KyUYWjn0Mubzh zdY4~*h+$iX*$|1KsP(CxU&U@{@hpU)+V0or$yd+-Kb7!rZU!S4Q@XucP)2x??W6MN zV;1q6!1hu5O?9cfMU5JowVYj-x_Ss<^}tBZopJoW3^bMdH|)*b`M`BzXkFUi7o2fC zTOdeg<3-v%57A_E7Q(IxnK$!!UnJ)~PcoR|hoKY`qn^fzfihnU4iZoo0{(xT$=J+{ z$~2bO9I^oT1|Y>GxTNxKh4!}NRdZ5b1QDhMFF6Kuyh-1{Y5Fe8cb{j=? z7gk&6^VpL>kt3Yh+P!S)y+jc`Tq`}e2<3auCp`p|4)zw1Pc+!pG+T^6PLpSpGugOe z)~xil+b1wvN|Uk*Bk;&&(9mNH3S)(Lf-Z2JY5%yF<+PizQ(xC&;q&2NUHl?n9WGmw zqbhQ_@LO7s+Qpo0#k?i$J;rq#*zq`Nk$uHNF8ssb>ia#g2nQ#C9SJxAfWPNGMmcr- z0Pus^c5LLdE6hDtFbG+q(3R;A$&$oC9#Lsiw`lj#Sz(EF6envK$z2`)Z3Xox<{z`5F2)x(r`5uJO=6|N?SzI%n>4<1+Yg0a%4WVr85wJ~r z&&Kg=fm_bcuKSsa!AOX%OBXqMHy`2n%KGn`QIGB8G-QM(selnjnMK-Fb5ox@{o|K& z=_wiL`m%IfHz)G=kE?WI_R9ot_xt#R4aBDU>fe#{9@Ap3+dT7y`jzgsegmnZ=L^iE zkTB3l1g%4QohabT(kcPuv6p7^+$AOZoZLOOx&!GdF}spu@|!M>xG-rrr486*yD zNX4mu|AOoUbv*9K7|?tM_eGNWsHB>iM~el;cL=2YIDr zzo);Q+uSbB@UA&_EAeQyZuvcg{;<8I+jsdvI%%AW#0U+$4Jg*z=5eQw0IL#U&q1)Xj#0H|j`#eD zHzX-nNnigkJtEhFDzv))dI0t(+@)=dIQ5gBvu*$at62|ev1rcS?&ZB{MZVM5hZ?J& zi3c4^*rJOSPM&8s5pkY0{`F}|dJ1jXrE1Yex5zmLg}P(Pau5<{hG*)(Fxnz^-MbOe z?95^5L*F1DsYoW?#X9JFV0!gntUaDZ`ZbamS|0L_%|RBBj~@`-hU^bKK!pY*gurtI zV6&gR*)Fi7Q*nt|BYsRoXe?RjNGF5)iWVruHK;^{(+Ne z?Hn)bT(Zs1qxw)Y&RWh)qYq-Ge2Mt!tNCzr4_e~uKF&fI6bt!fjAHEaqHF~%6Ha~d}U-f9Bfw-K23e0Ujz)Ma7O5Qy!41uxc!T;WK+ z#yCIEN;V^;2eu~Jz*PXAR4T^F0L?gQP3j9=JAfdzr!~tdB=|`Ml}8}nG=O*}W;&R# zs{2MM@5|0)$ZWNR@pHQqGVO2}FMxE{birJ(op2F!Z~e1gvm7n))V?IX6k0ivPmj2O zMuV!x?pOxOAk?0xrbbUz6nXX9Ss&|u-B%Z<512_(*r*s8S)6xKX3dA{zgtygJ!--G z28=^*7wu~}>fLfsP z{6EC;U!OW&f_o59?Sjb5gbx}3Kz(&*0<4D!7D0qy+}UoFcW`hB$_G#V2ocX~rk}+J zwDVNm9Q0kYwQ@`}o+(TN{{)Pg4&jb#Vb8bRVB+%@MIm?~;eWc1z_=wB}nAJ_W-4wlQ!Pday{3gpd6g6rdyLd8eacs{fNR zcbr}3%SWlBPLEXItAmozZl}YRaE{tE$^#{$WJi8dzwBS%NMsv~q$wIVa749{U+^&N z(&Yry|8V6tJu;m^yTQ3ugsoet4R1-Et7lEL6_AbNg=Z?Nw3kMqUILG(XaD2!L-pcc zV$*F1@|~s2*7QoZ)5EJlGw6FN1G|&HIzUXa63;Gq71BF4IXQffNd9A-k-KTO%D4az$aHbg zk^~gM*t!9RN?*ytK7!ea_`hluX$FCmgIv>huX|rWR=%qJs@5%E;p68YW=@=WC&z31 znXK>E*7Jr^oPCPn_lw1$+DE(Z%^KK+oVLUS5nB0hdrg=w4Ar94P{^>fJif~B&Uf)YyeCe0Q>l)e8} zquYs+tatQW4>N`V^DAKBf_hX)H_)eFOh=Mll7|rk-zYF?1_?#WC@7G^Sdr&_1jNS8 zxprU|4tku*{j=0QINVxcSn2O2hhNmSk@kdd+}gDE#RA!ZQ7_j0Rl~?}owm)n?p<`> zFV>7czw&nxKVCt9xhR9i2bigEWo)%b0-w;P;xH2}>dxBdlbUPMN*gnnOv%!PL^wrJ z)$NPuCPGa`l^?#6w&5VErMEd~EWKSN#PKr*$rtd^0cG)4o}@Eqq$uHvcf_iQD=%u0 z_;cGurKL3KKMVA$M*qf`_J0M^MiZF{<&q^VaB+sAiZ6R zdMBH&NC&#TU;=mcciO=|dXt}!F&&zWAFMwdAsER|mSTDbH|(1$ zSL~~=wexT1m&=_Gn4WzA@1;1;S#(7RM!gb6n>$+z(cmzD(GWnXz42$Xx7;Pp zlljst$u!871rooiQ)>lG`nLKC-nL+y+;E_ci%2R}e~J)U3fWHy5f5=_kLI4v|3JYX(fE)wp1T;63dAKEdsv+llmH zlj+jqud^paT3W5axh<01$s4)JUmC!~)ZLCcUpVjD>%YZ(FXe72!;NfVVZ>K=aB@I_ zt~78?=s%X+K{4`tlQwegq>QS^q&yW~q>z4Hf zsz$I{;?qO_sM9rOJN06OmzL{XB&$GqKk#*G1xAyu0a*O^Urhcnt|xzNg>?xON=ijP zkxEdz@L(KI4j6a6o5mYxyf*k_Ts$5vfn^Nv`E7TbJbaCcI98*at6{*tfY8b5D4X2J zs_G%p%yp*=SCh?}1d_}hhVA)q`}Ubu=e1kMlIZvZUHpInuqc8c`--FwcE61*+wjJ{ zS|-r%N)k#o3l~oMhtVcjbS5r)fRQ)D_p0cT)S;{Bo|iYfiF`&+BZ+Mu4~TMLXn`!i= zOky1^(_AVdz6~_Zr@?^4#&Ks`h_OF94*rombVEuHVu5bMH+szj8mIndQ*$-cqye)0 zm>g!~DoiK0hLMO7!OnvpPlq3N^?}*75#N`N$E|`U!Q?DUsqIWpdP>DlzTE!Ar9t}F z^#^l`uO|=d+agy7-|ea7%186*VHS$(HjbXe;=inWJF1&HU)GRHw4C=-}w+A3Koh5ll89?`a* zT$@@qn6Nr*CYWnI?=*j#Y_-zj z)E&m9at0hplad7#(t2RA96@&{@woiVO^6E@M=ct^j^X)aQ+QDEghH8)PxJVx>a@XH z*COKbEjHCg+FmJo-EwRE0PAwLeJA}#EDyjT@#e8Qv^qRfYUuP4r6l?*nt~a+Si`7s zRD{;Nn1ANtB6qCb79a|G2tMRO&x@$* ztnq;BVbbeLOg${}bQS5qaI(hTr&5U|y+wKnEPU7;u^p}3G@rqzCv4TG*9-$bp$6Sz}t++FWHUCDZA3mI`?HX zQ(s175MTU_&H5>;LyRv9>L%b;KrQ7eNG37um$v|mfCx{T&RW(&kZp({*$VU0$8zqz zZ@~@gb$s!Os>OR z|I&W(1eprqQ@Y!1zk)<6LE_`K?4?^u0J6t5%x=R-uiJ}?y39x4;^SC0YUGk#ZO5rE z+&(A*%@ODpf%{%?TjW1)j=S@>`a!QclYz61IMv;J8$!EHFZuUJVW}K>nh;_cGtP(S zT4**k%}2hLO(kJ?m!<8YNp~6BsFTo&I8qO1+li&*1gF#D_hZqeWUG$oFH?sLNK_!Y z?1NxZ7$`(I_7<+$L2(2NsED*VnLn_^0};Q1(Q@njbvNq;hxLN!Fi8G+mIXs#;g&si zE4b;rDFA={FF-$f7k(4WsIzoliV281^$8eXmxb{XwCukEe?pr>!9OiqS)j|>rQ>Br zS#+{)IP%??LFk?MLEZPJ(tyfr+3QzLCL(e}UY>Wb_)81#?B{NF)uXq_Ynm@gX>wdD z5Wme6$3p~keru`q#7#Zvq{m)AHcl=cy~)12HdXM$?SXVoHaG+{(g(ljD#u?#(p%#F zQK!#^im#<;EAt_D2?r`2_trDs&FjubispOrfZac9>NKh7t3hn&`!Fl9%=Tt=J)a2$ z)Qrs^#IC1j6Md|DvZWPZeAW~gO?TnSf40#kzAbI|VaKS(2CIi@oF$H2^$P5#IPljU zKA0UYz}6XdZy)5*e!j2ld&Z7~Po4I*!F1zL(^#lgRjqXxrUbU<@>0LhFAwvMs?t|mS253!H{IZ?*x1q6aPJ;rSm=pz zowcQY`WI#X5$d5-s|5I{7OcC5Bylbebg|Fcyb%g6`&6|I37 z6+>D8X}YqxE=TA6s)3&48tXSm+EHt+#mAhT8gnA-sg&o(OtI26VRf1Ep^!9!dDkk1 zxi^Xg5u=wPWfPPk+m8Gvbdz{k@RQ=d<=FSrKinMPNN4-S4MQpcd0$2}6{!O8SKZy+ zW01@=9i5yi*3vvQP)5htrHhO37jm_9lIce7*9e&OYl4B<)TBxjb#*fOM&YVvOz=U(HmBW;(x}C^&UAgX< z+iHf6ktD%=X*r=T;ctHe;XCAreOC;W@2$Xp`?urle7tJzC&JxTNe-8$sIe`QO57S5 zp=Z2**Fz8E-%wy=d$J((^7|CL-C4_XLRDGTqbnIvx575@`5MziZes8}BP4%oIG-eqFXm@X z5%ODl_056axz%iF`&u-FlHt%?r+8v5wKR(~F5IX)T$i=%6J(<~$GI3mnO$VH6?JI3 zcjxXw`~+NcjHz zbx)pfcP!+A&#nDn7uKIZ@WEdKP%8OMd$B(K@X>vV2KMx$qu;~BLFcr`81OJGapL32 zvCP6lSJc1J3WgwdAP^WRC{wJ-?>D<}E0&L*R>qKN3=1byuN3QsDA2p-YN3tm{U~&d z>9^GmuzdQI?*0z`MNyDf1B>7ncw)39Ct zyq21qekUEgxR}f)=K02F!VRx;Z^W%0vvIGo*Ov3PFfYcGP4i&{8Eco&oztz;4o;^c zyg*o8L4nUb<1g1PwU(WyJ}E~!Yu!*~|Fzfh-6ql1iWWJ-BfkyCvvh?EJq}Sg&gJn+ zVfCc!8_!X&+f3vZK}vsUo->;+eFa9M?}L|h27E~c)HrYL{kSRbnX!-ozc_8f=HVi$ zKde&IL}U4URq?4c_hfj0*VQf3LHVja=3BjOEFl)cDN&dEryHD)VwRe4VmaE32oBO& zeZvIWH3FS(W{--ZOie_OD32th@fNVZA0nB3t0NE1^FjHUh<)Gv*^^*K^`@YFlCNq6 zspvNe(xq|vkKeqtDt-(F_l{M?tx>pIrNvI$Yjb_9-;SMP@@k$9dn4tPWnLD~{edEf z#uwJ2j)TTVZJRCT8)Zfr0AX|ErIKymmfiSuNEA* zyyH!&X=_H~s;hDGXz}H5@2#(vxt@AQi^J>3x*vV*Y#%l?K-?&~&GqDPUgiIp_{fJT zTl5(j!Kl_AT!AX#z6M#U>k-&^RhX|WnYzHID4)e1P8c=8HGAF?zI^(rl;#sX-qU1h z5t>f*(v~>lBrguyZ`e$phLlC=+KZzXTCb!*9`LDP%Rom_)+z1Dv=ifj4X^}f5Jy%b ztht|{oH)L82wHt2!CQSu26gL`*|p|Sg7??=YLhUxZ?j3x*KY6bc3ygs^b(!7)I$+B zTTVqD%+S5_vOGA9JkLASdB-PN#Kh4kxIf4Roy+H;B7odfxlfD*2@1@tE3O=4xp~o> zr%$t%>s;B>J{CYFZOk0;wDtvY$hp=3e0sFvV_9G9376Juxtr3dxnq#$g+F$Elda45 z-s@3Ec|}kqg`#01eh-G2TtA;YA313z*d46=4>!5yCxb(2wMz&rL zyH8Wuxj7MCR`>c-(wtaeqKhUBrHv5zHV85jD7TimZblczfY zN-pekwME@I)V3Xqelje-UERT)>#3dmW4$K@Ubkr0jn7W~aJK}mYpw{5n||MUoKN87 zppbs+O5CY&J9kJx#g5WzPIz@{havg8FbL|h-SEYYkJ$HFLfztziqDVki}d`(u6YU# ziQBJ{ehDi&^H-^Nr7ebkU-^18!Xi+tN&EeFxbl0duzX)w7S-z-jYclb*WNutpGqZu zr4xBzvPJK-ei>5PwVzY6UOq%D$tEtx*q4(Jr(fDuB~w-tF*A4hw>vbsoK6ZXe}uyY zXuVTrIs@bt$sa#Tl%?q>7v~BHK;n;Fy6E2K5Y%TC~3R= zMzg6j`*i+8LE$HnsHf!VPs!`E8=7WRk)jp36HQn_ctO_@XOPODg+`PLyh zb2!n**{Y$_j3Swq(tFIB{h$!V8o_IWy=8cXFl@(ZZepmm_kMg=s_tWADYTkM)mZB% zo62eOzxg!biwdKL{aUQ0hkIH8qCO=gyT=E(j^Dq3XAeX$pkd-fXgww**@LGZ3YIp% zzhv*DrsjyPqQNiJ-)2G1QQ>2hNo(*yH*@cI!icGxuk(@=IQsUem*%%^I}0gWfiBiZ zqx(&sU&BK2gS&dDUC;;u)*s69O8d7VZSC*mf{$^oRHPA49pf+PU$H?>UX(N4aar23 zw8XTgKag17I+rt@3#cTe1P-tA?p(Dhyb~TXNcy5l^Ii4i%f+`dbk?8OZ4dF2)2+F! zTYc+W%k+xTFZ+J+o8rXKn#)GVSg3ij%!&m_+AL!k1XkEm4nLz^5x!+wtu%Q|n;z`#^tXHNJYD9XF+z3^bv{l4YpZ%db-bt`QW7d#2>I?hmg7u;G1YmfL6veCg7nwWxT@TI3|Nw#qTik6 z+4c}A*dxyMSxbgw|0t{Bz&%Lj_#|ZErW&jYg_EVVo!Xu>GGbI)@Qwo zcjl^r<~a=y6sB}@vt7lOwIBD!dxunNZdB-a*>sc(Zlm;9@yC8L)Xw~dXX$Z(3Tfxt zB-}cnIY%58S?=$3Ew`qAet_P+kzi9V4(uVo#{p&wa>q*^>}{7qs$1A>b=KYW*QSFu z-o($J1m`#;_mZM|UzjPS9pQC$Dt}d-h`=WCSUuhII%dsxZcGRn;}C^`noJ7ZI zvI53G+jvo#FI6(PDyoa2;!YA_?_p0Z=?(uco2TVUUS(-GeJDJodP4`gO}uC% zb>5KSsuBC+4*xyAjaM1YCWZ(%e}g|uPj9N#KElPOu7s(DAMr3Rj#M?JZ+Ng?E5r$% zHeuK_1>pUdy$Jf1_j06&bJ5*j=DX2IN2nE{LO|Y|%&*$##I0q2^FHl(aThJ^3g^5E z^0z92ON=lI*sa_5+x0kE!t*ET&2XQcH}iofhY<{9*Q?d|3TLaT!=1C!sQBh~RN*5h z!I5kYrf_1StmyXMMe<<1X4=ZdFkc*IE}zkZLrKP2c7JF^N zeUY<6h<x3yrQC7SOyajM@LQ2w+c<0=mP$~;;j$8;-{+3Qm~*4Bi9G>>pIe3oAi zez-@QL!I?EUxcL)66Ct{GqqM^UT0&b%iU6$r_18gTiCHboUk$dJ#DYBz}i4OsZsyX~NIP2bPRrmlFs_ z0Z!!vV1{*w*19eA^Hd?7dX|ja*IZgfr}P(xAi%}GKEK_u3Ajgd^z%cr>(JO*OQali zxS-L4!cmT%wDKM3(d`<`U*sUpED2`# zK1N-sZI}$yBAxpKKG=~Lq*6Qc+@fo$nIAPCtHqHd0PxuJX5-lm_VQM%QPRz(3ek71 zm05Sx0t8H}G(kN-(3T_gg9#ZQF5Xb|Q~O>r;+)wrJoT#lR)O9v)P2yHCj23Iwemeh zudsj4dTW`kN=1*wm8-r@P?k2}`YcC(#i$M%8lz7^tnydK9N$2LUh;`Z15$n(_NZvg zA)|pTx|vpcFuJB)8N2SfPROSzi>SgN30=PMm*Y1#Umy>v==yf3Gdq(KQ@6VZsy6D2 zi)sSpvYd_MZ2cXJtDVAZw>oRqjpu49R`7~bNc?HC0Jg)<^fcR*R zS*KIif90pu<*(EE4RSw(o#1^Su+quxSwCBX>lb8ayo9A^cU7S@0C!vuU}Irs?7D7` zd?PW__8AgFyg-YFtTT;QmPPa8vVN41&Vcz_aOM1y$?xeGp%cEk-WGgx#DA2xHS1iv zgH81}yLg{i&wH_?7jY1;x#_KQy`@@M0H`gy!~%sL~ARlv{W-sal%kT&{!GWDpwP0akBeLP$5Xaapnujz^C1_ z%ks!F9i7L?e`<0+)i?y94{eYmU#a2W#iw^f-n~?#AzQ!HN61*a?GMV!qe^(A8Q|lV z4PIYETEZ+ZgdVHwEbo~<>+n1Fk?$#d$?kHL)!aeC9g^m zKGaE7Ms-6L-MKwe1vFA$g2iicSKBXXUJpm{o)=>2Yi1$BK2|PBJFpK$yrotp zi~xHc=>m(i_hN%}qXzaBXu%8!Uq1G6?W}nr6*H>FEV7-xN>$UcHy31k%hnq@Sk?qs z(=S&2YF9$j_g6;XEz$aNEA;y6p?GuHLY|XpcHQF-bf}XBdG;TY{c~^V3@Wf=Dz9|n zmZELCn|CKXKTo4x^{ThEKQLIJ9K-dN)hQDaWsNKlXAUkn`O_j9X|T@n6bL3mgh^8N z6YlFBw6G|NS?5Q#i<~ZvEC>X`uX}BsRl`c0#VRTsz4qz)L0X&L1i3vRsOH->qiOz_CQG^OrXPE;%%*Pm)_{kl80 zy1%f=`;%n)G}U4B_J)N;cr#BB5g{~W9YrAT$nO#fz{QJ80*m~)8Ra-f3*m|A)c%p3tl@w!rYdE7$o4O z7}s}|k}`qOLxu3Ao#2!?BRRNj2mvSEt4W8}K#LB?Y_YzFr2uj$0;lzGVtE;IA(nAi z1Ys7nIHpThT}!-J8dv39b3?6OG0~Kk!|JrxaoS6H`cpoKO}QYSHyF!q`q>Ss3VHSh zb@n zd|)0_Ejn7;)xW3=-am7ll6Zz-`JD4<%$~s3N}!Ob=rCY7j6?(fhsg_?=&>svwjuKe zoT*E-KmNHvW=Ufe!0)2hBe%0X_n8-{H$Dj`pM8^dDyn@Nl@swfX>sh90*wtrjOyHv z-9nRc7!@rYo;CT#$VNS>I||G5f-QLy8%vnIV+V1G9Q%RBmx3aFBm|AN8q*_Pqe~gx zo8!Q_^-w~U%m0G*LxZiZjv7FJU%qp^0yPI7O5{ngN;?HKZ2n&dN7vt75RW2+3!e@q z%FeFRMA8vRpmj=P^Nlb{)LU>wOq2H+QwypjKt*GW%)Uu4+AV2gO^hAW0^m)-7?qB2 zS*W&0<~EyLzU*0^7^DVOy9BzxDbe)f@60eujT{^)oEAR)#NbBy0T!!~$uyjpV|CiT zQu3MU=?H^c%@-4S+Op~lGiJZu&J1~j?JP37HN1A|s^_{RJ~gN}_j;*xl0F5nW4V4( zef+owykE7V2g^k)@1Q#ELj@yUjo33NBn-ME+2!z$M=Xz<9OoBpL=OcrkJx?<)9FT_ z;4v6WnK&$AZsU!%5f$&#O&h05&idKDSYWHhS>pfD!-ZlVQO~;A`m)NQnOfX;w1der z6h$RG0Kg6sWdS8NRBGV49TM%{eD6|xYxTj6I2EPnkI}glN8~nLJL5^i^HExZNzvPK zM4!C8pwoQ9JP?+G1huS8!Ss>Yvvc9@;m!b}FU~L;NlE(k3l~A&x6cMX&eR=_!e{rj{ zu*9PXpn6X}!R{q{rK=qz;-RR2&t$^GEloR7YOLkguinC%!z@xm0%FO|A;y;u03eM*vdV}~tcmT6ty&!D8}YvnGEaHyc)K8&mRe^%X>X^FKlki`kI-!u$#S}s$e{_C zc+mioKE776Wt5}S+v`ya$m@*;i+SnLiExqQSIXDT&-r4jSw*Ytl-6XPzr_~-*GUET z`0Y&W7Zg%qEv7h!eE+ylLDk7gkD3dyheL=Qe@IVHQ*Vr4@DEpItv$>3XT*Iwyipj} zTYlOfQr1l2+**ip6r-n`x}DMUragaqXvfOYQ^@HAJDCg1Fuqn-s0a0>0|OIMA02*e z&oNirxPWEp#O0IuXFZ&?6yO?0Tecj^{}w6y!*yErBt)e70H3%`#E-e&;`WZ>?Xn3z;$0sJe%dLz(8L+mf7(0QE~ zOYjDm2BOMUGFxU)cJ-P|tWRtvIJ?C(&D~V+B+w%KIfiGj6glEo{{;HQKQ9TBpdV{P zWz{_=E?!<34!&$vCn}ZygO8*e!$_>bN&WL#N2u))MILnJyN=^<#gKIn1qt3jtzd8D zR0v~SUxJ3YU))7tl|b#Z9t++le{O@tHc|tFDW+!>Z%h0y46!w2bibyWG(I()5G^u7 zGNu^p4A-`KOaCQ#^oKa!N1u?3#V$DXSV`|JYqz~czT`;pI1-I5LW0RNDABzP5XkeIKlP!%=XB-f(9Gkw(g z>n%N#>uQ7qvx{!L@jLn@ThW24+q4O`2x1B^ShCyIs?pVfi^IEcoH=ar1&0jp7eGE| z5DvMoYPRz5-alypVUooCiUQ8sNIDO7sY<3oi#8*;yEs&{?T)nx#{YLvV&cvNiTTVR z>ZLb_N&_L?Sr}>lwJUxE{BCwT>`PZY4h(TJ8a1QV#a9tRDU~O+N&}s2DP3ca4L02_ zewne8&H3BaK5`w$9zph8E^{rp&89%3vhicXI2J5Ba6We0e}9zzc@g`!rn=qmZ-K4d z-DviT(YWTJ2X+sIYfVs7N0abxBTpmq%UIf*&z!V!I2Pgrjb*s7mW9Fmx$mqbkHe(IaoRS^=!^Ah3?nlr5EUmXL&U?HfF(0 zs%FgvdhHmXVz9E_moq&t*XA%?UTC-ocU`|hb)83_e_O0zE~Do)|0r(p4k^{<;H$Ip zU#)9HM$t9aJvme$)afryUurXXD^v&kk;nm4b#9E zcRGEX$B`Kuw@`l`O&yipot@y?0r=?{QrjGi@qV$|N}#c|p2B3_nOY|?SMwOL4;Jyb z;EPXjSsCjbfINSIS27jl{#&_!{o6J-Ls+BrB5ZqKaHNR$qKjRqU56kS+CC8#hRVn@PD4W_8ZeRDdcKIo)- zy!C1>3O68tsJW@g@H1sr<*4=JCVab{KP%N(KRelqUGsw>wr6K&DuM}H(*}eeJ2Y!} zW>;1|SF;?*sqG)*5g4zD!ZenZ+!W0f-qkJk)Lon(B|)HiH=i?0G~EVUI1D?Fan9UD z)tM=!(8a+76BPzTI4%NR`Izl)hwbLeBSztZPYQt{5mn%TZdJje`HqE`*+QQmZoA`h z=US+dunN1qOgCo7Fp3GNqB$th*=JH_!ryg=^wt%*EIF?=2#p*cvCDkxANhdupJ#~Z zG}q7&R=p=GKg7^Po5~GW*y9e>$n4@wYIM;;DUkMrE;Qm&Y6V_zfryz%@?tI=a=mbg zJlnmg-t3DYkD+H%ecn&F+t^9L5oa)5 zzgTz#Kzye5B8m-aol|~u$i&IIKkP_Fh*Q1rf=*qsvZQqT7knvO`a)Uoms+ys8y#OH@YsxKbH}264?x{3-k*zm%l<|z}h|)CA0+(jjM?OJlcIUOp&)3Kn_8Gb`_q<>9 zoNT<`piTx!5J)poe}qT0{seA0+nLn9Y)a76m6vK{r)-Kujc?HQyDn(;22b87d_0_I zFN>nMJMrmGnVI6stPsD;WKJGZb5$_6Z_qg_$4%cayP(GLD_B_;(r7*zBO=9(*x26Y zmH&|7)M8tAbxF%2FXCmBSx=$XqFaNLcgc>CZOx_IQnFOKbeLd~gh%%Ac)zeaR4Yvk zFgWIVD~q4oWVok&oT6Mg_FB`Ew2OQj-KXN0rthf4m#R?2!CN01-|Bc+Ki@4Bx<(m3 z#SP#B*&YIMd1`k~=Wr$LPBsQVmPDo(YdWXbatT5TD6!FBeMiyIO?SjQJ3GHFH7B-s zTvh_3VnF@l*}R|)-+QD6Yb?bu^^g0U#VzQ#7G%3AwSIaXoX9L$md($TLXFMD+ z=0W85yrf-x|LQL;zve@uQSZV>`05z8W$CWkE6hf;GVolk+V1!mW!MeAuuy?uI`(XZgoNS8hQRC_UGa#S*Nz?vY(T`%3;8$U9a zVZ8`}Y}Fb$sb;o-_ie};enxn%$8t?~I~a7g^tyX^Fxr3W?ymnLB0KM0p%E%rQCK%% z{0{Gl$l8+ranNan;IOfwy)(O#fL_Ci#@{js#9g0NK}%mheI}UANOqIY#{8kL8L>aW zVE_2JX!c;B#6o*Jl7Pzrkbzqx^#`A793+={BcK?a<~#3QKY#vqaBz^DNhMlFOO?}Y;ZR{pHv@u{d(zcQ~A+(2K*LEO=o`mx$%jwT7{8?ge4o10Ca;f z{Wqs7TGrt$o}Pu>VQu}ThTvYs9OKt_(S9Z450U~}-}`2cL-fwjwC1O3iyTsiCV9nr zdSe4g6$ZnxNqF0rT0Cam_cRks%|1W`2oiTMa3$tHzWKM-IA(1I;S{IczrbTSj{VYY zcHrQvyAPN@=ixrT%fRqB-5eUSewxfw$_SxTF=93Vi@~q zkYj{RP;lW){$@;qd;_?T8Un{%3GZ^La_pGp(a1ZtugrKao7?Mmd649 zAcp(u>HEE@-Re6V5!lGart)XG687efbE@?bh5}^-qhUj6)fTu{5YKS z(N+P95)tG9T(fW>Mf^1t zEC7Nty$|Csoy$#L1P7GC0)A}AahMz$!DvxS3c0_6?afx@S@rbJ*IL2ufxr23Yss%q zZR;Oc-IbK*78y9_p<4bDK)3wQW!`qR<40|Jg&`*H>R)XeD`#AgX+`Qh5^egoZMkU7 zzHG5wjI7T^o2ZP83~DK0MwyG(duEXNJsPyCZ$!`J_74t96YK~H3C-P^nki%-R~Q&@ zQ#dmXKJ5zkpZzvd!A6WDfNzRo*elABphPJju;rGU?z{O>PUJ*qJJ??;-l*%*Vb zTzPIz&aUB9f$f6>{7(G2m;cYr>X3bxEt*1s=KJ68K~+;~iT~>@C-9a|5xbyZD2(^( zVqu_16wV7!*`DycQwK{`0qY(YEpw6z*qEgE0yK~`;^PhM0$h^WF9g!~ zH|JU`-VXgzO_1I<9d_%&#Kv|2VZQx zw<=R|pYy-hz)-au+)Ti9`Cv~Naj(#{<05({drzf-xtBm%ICmgv9eH#OZ2N9OYbreX zI2Hf3*k1j`bq>UuwJY2*T_0?TXism=2&=Q8(_oIr#Fr$gBDUDMAzxGdL0Jwqwtqgu z#N1zz{<+~cU(}SDfS{Ku;9?JGPe}b&;8R1b=8Z}PUW4a@e(K(N9_4+)*RQiQm`)If z-sFnUttvD~sz^a(oUmv0>nSknbk}8^KX#mnn6dMCML}B32H6^C4!GbNxX?MlRol3Q08#AGOr?p8|LsYm(=K>5 zP`^tvaCF2599Ib#=iW{1kMQ=g4PtehoZ`L__<19#Og(G0C03y}I zc|%Pl>ByOjRsx}6Z!9=GX@R8bR0ul{s{e$ZytoEu8?6r<7I?X0O^FUrr&d$hR zaw($wY{5S+cR5@NPS9<^WZP`)iyAU*IB4Ac82d4;&l%k0*ug34v3#osP9%UTVg$SK zGoZRUjc}1(iY5@Aeo4XkHQS(GRmpEd#h8iHEWpK^{bA4b3;}ioq$^xv8M^|UlK=Y+ zBZEp#?SD((6%c}pDnBZ1xzPF%5YTYFnVgLU)|Bky<6}-tN+7h<*jMhftHy0L=Vzj+ z5%=VqiDu;OnruyWRaKQ}4hSIOYiYZwmWA`6wywpEQDW0OVE{4g-5(I&cjXtZQ>%j| z-pQj!gA+6K|B&|oC{mJ&gmg)Fi*z^AE!}KTQUo?4(k;^6-LVCvq}lYQ zyF0$cbKdhi=l6bp!gpOfUOu?l-21-QnrqH6#~AY%wi7n#NW2jVCnTnb1N%c~b*ag! z`hEe#{j&hTij$L;hUK0cKr+F_Y^<-h9yKaI(X^R09YVX}j5S-l5=z$-w#X*~R8|w< zh&OytZ9Da>PHvokLajzLo(J4^oq1?Zhi@ko4(6vGxcGc5`UvB=NFktsPC8QmrKq9( zpOx_Yy!KfcBG0UNHc4YhPA6#N@5j|-+#Ea&>$j?iDhsJCo#kEm`S|&P7*Nl1CFWj=2OO=Ug>OcL$&U0mJXr##!_7K4tb|S2qED&Z zW>P_*u())#dCdPYX0K9-1O$q;@3*z!*^on+!L7g{ric`Zn>-k0o7j~vu%RhxANEOG zjR+49=e&BL6AD5Vu+)F&?tVt6*;_VV<;+jxT%6Ddmb;bfze2#Ekj~1#-<}n0v@GFN ztjgZCadbDv8^^1^^l2%Rj#sbF%&)Il3HOFgcSBGe|0`Ug`m;X#(_@VF|Nqv=7hKx^ z4yvdepZ>3(`hW5zm4&!*GOrV719`&`JOCUgh4JPi0PT${$?kN86Cdoemzd%pst4_a zVKIP3m?X8W1;4YE+O8GM9U}~wECYYz{j)r&1rAGQ5Tn?IitnT4h%Ns|&=NUnH0NH- zP2jdSs7PWp0_vjFH6ys&sJ3D(fQle3Q*one;5|c9Q^}DS`@Y&5+G@RYo0;P@h5?mK_{|Tm<|dai;rYX>I=Nw+XG{rJZ-uCPMIzBhD`; zTA+JZ@!9W$(xkbIynxheelRa5^~KIsJ+tujA`b7#s45#~04rwQed6V^jtfONtPi~e zgqveGMAg-Ok}~{L(&r$|&=i1zU}RF=d2=L!N6)E;IzF3s_hf>9O(HIGtoxvt1N8y; zR5kOy{J;zs&LxWLuv@n_-Y5mx1}39VgI@yqLI>;5K^oKtyR``H+x5s>RHgi*`z&g6 zcVt&?9BKneHHKBedB$DEAn<(mh;(0>J@87vL;+%Z=S+kF_?^xJ!6!}D-2CKQM|Sx9 zslV@w3B_!daXVLi!uhlN&tMhxvh9b`Ae5FbJAU1Q)=j{Zzj%W1ZkXaGYVtsNx-9&S zbxoOicenEx)TSufv1=4werjD%jd;&o2aYa0k?q=>Zv3J`^~ykLJ)&SBNER5RLVa*w zpp4T#L-Uyj84m!==$~KD%^8rwLZLwO4|;iUILVvSrlzK0HlO*(85xqsTg0SST4KE$uR4`yRRHL>AI9&7gWk?82I9F6MP3j}ODEkQ`} zEffJ-lAz#SgiJ^DOgnp1!4O_77!j`0iV<|JkzT% z`R3RqH|ZqEPrk=z=A(C^{gtd{zV>HU)z>Hj%DBD=po?CIWGE30%Y$j^RDdYA1$cAE z%_SxFo#lm=vkMCgUyO*Tx{Mt=S;N0V?*GkzqG5Qa8zd7@Br5OI?a;Zc)3@b*CnqaT zbx~p&tcxp%sfjfnkw}L8ef(0XGkimZP5?oE&@yyhMH5 z&_2!0oZU@tFqrnRE|e^;#96?*&^_YPqZO6an5g?VxQ674#i*#$Dg?lKG)fVnb77&A z2d0-xQBhHr^HO`t4fjieBm0XV&B0A4l%#P&? z`NvDl^w@5y^#-9Nbqe4x6UHb*95z|TIZ86v;A3PPOegUG{85f36POK3mjqC@0@oo| z9pw`U1was<_p)Ll)1MNDN!5^Gz^h@dB*oGvCmU0twp{!fE2^$3Mnvp9JgB&Dh9D3K z__Su)!+ay0WsD3e<5l170CahKavJJ)y3-9xFGiB_v%IGuy{gHxh&(ACJ`&KIFmrIg z1;+NIAz=AA)y*WA8$np6$Donj!8ZEyE|UimyItUL{t0muN&|pMbT-Rji%O_c2K(MK_EM( zFq0kCKB(XzRoWnj{ahoR_Fkjsk-6mIqSTH@b>y4lx7A@}k@rE?QP8}BY%r*-Y|?S( ziZf|j%g~U+*0bD=5rJR_$N$6x^S`e)5Z6MRpm$Uup}%49$4=$4Uv%z zmkJgOF*QR&aF<+X(OA;ZU6vH=EKi&&)G|%l5G7SQh5SWg86v=)2G!s3%t{l4^NKcb ziw!w;JlLzVj*vSeGwj@%r&vLnUO}c<$-+z!299+JKO`zDs)}i-#Z~;z@we5{_ZPi& zLg^*|->HqU^~eTsXBaBljUT}*tV44jw3$H~;lm%CKun={Du9`p0kxc!&VQp%>FRv+?0%HT78HS5pV3whYld3!Vm&-uY)q7+jd(T(O1W z?Sx%jUM8M>mg6|tu1$eGXT92~jk-T=;8Rd|f3StMtpMSURtX51$M8c_uykN%ozNtE zSbfuopit@?{#5RtIr=)EYP|~4I#^X`GDu-0C3L^kdp#KK8E_vVi{f(rN*!0#p#^IU zKKuJ-wD=h80A-&O4-UrYshpJi%ge_S_ntZ!p4P}r>#(gcf<#cd`Ed5ph8-8EN>`E9 z9K}B{Zz0pH$-);7FlS8yS7}?T(U4;UF6^75uCYL3SZn9}yJ)_Aj|liMO=SaelUs4sTKSg`1JEy2zQSj7|#t@ufk@LKjCDGC-KJY zT)eZ8cMWV{NrHz=NURxdo^9t@?(ZKS*#{~|^J-{h4jii6OI1t`s1A-@(_N~TATt9= zaPH=S%MJ&q##4RGd#hLTu>vL!KaD0(hU;*-?u*us_T-{W`KW1>k``20f z2&lTv5d5$DxRReq`K>zcBhmkSne#KnP$?XhMMA=37&HNk?Vj-0c$~#zXH9atJKG1U zvHKJtX&O3zds@Q?##R6iY0fILd(ei2`=hNj$qO@}*)$fW*6Hz0yh%V304RpfD#-1A>e0Y}LUHrurujV7@nU+SxqE0xX=EoyeOqgqt)9%@ z?+UIf#F7#okwu260+sYXND;tP;ATG86n6&{_bBWA@P#RPD>R)hU!Bh|a_?}-FoJ_P zzl%7;NBDQK8Q?hD4hCg*n{x+%dNK^SQFB#c0YJqB{3mY@ljok5u&|)DNQ1bk!X1IV z{o9jkJfp!>LHWCxPG5Sfpgqo3Ebf`1Z5qx_P;`on>?KSpZdKj?G^qUEUTJW4f=hls zsaP;sR%znG?_xO7`+E{xy#fF9V{jT+#rT%0Z`bN~-(y=c?!Zx;2gHp4$x2c+3lV9vD(mL0f*dIk3$;pW^K)O;47 zPPQhv8_?Qcq!mJBl~ z#;C@+@VT)&x+qs743_n9);|$K9WCP&Mbg)gY1g&in}ku|{I8!Q?l_`MDSqBW6SkFa zV)e4Pq~z97P|+@0hAyg~Geb*lDaF8E+stu*^JPMzfPrC}PFz2I)W@IytE?f#pDKLT zxs;I_Dv|XiOS06*AXING)$HQ>d`ZuBJ=czb4eN)cInmI(p*P%z+=-WnRBa8Vs>vvK zqPYZW1Ya@B*7lT-&4MC->&d0?e!OhE%Aj%h>XCZtyw3O&;uf6H|D&tX+oD`Zx zf}HlyA!H@PT$}!Q#C0poDOD4j3Cq9yn|b02q6@ypBTG3d%rt#fl$e@YE}d)_S5vWb zc;TXD!=5(~Bb&GKK2~6GBS&~{NH97-@86}M9EQ=GJcY95d=QyKCHzg<-w_3$yUvg| ze%}Ju@@vHE^6CnVEMdjm*w|<*XDm!$4!tiL!`oeBhSV9wGSWL)CyJggirh>X*f`3m zhMF}sS^L2?GSV&@pG}l&SEbEmYpK18NBj^RyS&`2VTn_{vR14s`^vcNl!?K;&b67w z0DI%zW_9Sv<7CPUB97bOf891IR(XzRqb~qsz>)%~gB3J^-<}PcSAfdHhzLMyjD78A z5RhK0J81)-1Yl_ba_+!ZR!rbQ0CH9Hd2&(Qz-kfimMoP`#Sq6$r2*4&#`L%TMn5EZ zlzyfVOjHu45S)snR1_2>&)YScY`JZmoqX|bQ#VQM#Vd|ow;(Dt?(z)|e$im?pJf-% zxWe>H350~>?_@q*z(h-D#N!Oqxc+?;Q!^>zlvV((K zhZL5f#b`|Q1k?sZ!OBOI-~otH^M!L__Pxw-RLLv19H%>}pP!L#t9`nS^RO)WqfRZ! zdo7#5^kZ&=y)?P}ts+>X*+_sfZpDF+@A&@46 zsoPvh5szxlf#jR=p7=~1BWuLDZyF04;3mKtOJET1r2<%KPo@L3&Z4S|#5i4>D|HNv zqkGA5k@&DI6`J0Lv=Kcj7txwy&U0=v8>{wmr=ZRsyTo@e37Nw4wvRoP@2WnLg$>0; z$tp*$PuPkg4io=B@PPF_m{+SzWL^LUO4n(f+D^DSlICQ%S+@;T@5pe1_E8i}_qtww zB)qfUlwI3#;J{L%7VMOGv==)Rk*nuDrsW@7)_AZ%Bu}Ji-ZRlA0QXE}>iraF%uuXC z*7N9P zC8e@X8p@@zm@awN$Q1KA+HWS+hT2beM9aQKfn5?CN-w`5|3zXEnSUr!qqCbHSo6~w zThxjl&%;g{1uOf@f9;k(q~OQ~)@xLl;)nIu2H~41GEMRsO6e^vEvrJUxvc6DYo4#V z(fnC=0*$n4bX=&mXy4;LQof7pH-{a|jz^Oj5q+0=eLqnyC55G6vfJ^8$6I=}3QaT( z9omuhB#gisG2_}%@^p8SU(O53TGNw{?FFCnw>Ih7Et5UDlWV2-F7`}+#4~F~IC^RD z<5TRz!j6Tx!hs~QP_xCjHi#&i>p1tAFK{Ap!Ui|Pjb*63Y&vh%NrU}H1AF5X@;B4DbPfFq)KaQ zYQCNeGSVu;!u7NTD+p{lRj1)01E+Ly3B+RIBH?vhw8}C8nGB;QN?Q=D%b!a_Q_j))+nr zBHzBlWmfq)O)2{tBQz*Aab% zZU$t+Kc+wYp~8HNj|grrC-&u|eMw3moSP8FCOD{mPp;Q{K#B0wGLkXh;Vag05EV}Y zt?>VZ&1yRic6Rnf*MpTHv6qLd;KQ2V^1`d{X(jZ(Hbc}$I5SC|W6dOSs`)7N=wn_1 z@(UI%YI}G_fshTX=A87?sZJPrUwUWina@R^&sio#$`4$yOn|tWDn$YBUPSu@<|t)H z7`%Tm*zy^i&PGIcV0hK}rlw!85hLP&Y`+^mFLUbNdQ05cIEn@9P^oycKtP1~(w?rQ z?6&0d$qQ6@hbNRrxZApAk*$88X1Ez^UwrRtg*;PX=oO2{G96TcAK{t~s`{rItSS5A zeDgzPxA^(I#qMR#nCD-M)!#_*-!5LeK%TIpd>%BtfJG73?pxf2x(-WzU@75QXioZQ ze9#tfejyO6sno~vuGNv)gAt>NxhH2ZYt7s5F|B`9U!d^jQX_nKVIYj(Q~Y6CXka$_ z|J=W!zwz1HQMAPb^_x~F0r>_74998|nqcwJ>$FT{HwpLd39!7pExC^i`fne8LUj0v^6~I=mzM;gpKM{WhQq%YOA;ntc-MLF@ zRh!paqMQVui^u1cC}$~-f!w~gM~u>*!5cGHbtSE{cP`wqYiy`m6S-lmpX7S9w_|lb zDlgVh!&aX!2&JD!VmQA1u!n3D#n(KL=sw&Gu_Yx^nh<#-4S)E-aIN(d4vW*|O^jdq z0*`eXDG|!TCM|aKbx#ek@1fD0_c?K~o4$(h`R8ZT#x>g+e%I0;4ZW~)<|^OUt4C8<_?oeW@=npagDq&q8Hd zuWl!rrD)7dRu*jTTrvHQxLaTskkX#OQtTlR&w|jRNgE6?= zm|gCl9SLUK;C4Qns%h<*N@B5DC4(p=ABk(J51j_gD+Df9iXP3%x`b!H_ZI=<`!G%u z=v~yqTn2BhTAbmZA6{3jMG?JdpRA5(w`*0wYmQqTI%|qZ2BawsRSn5A*O#jj`ogo1i937I6deuv^>Y&XVM$eiOk z>9NHbXwFFNR_wRzk}Z=dwgj|RUv%7DmBCQ?p;Z4Vhn&$zIBD^hs8RhLIBnrgNs?*j zkBo>8+ZeCYwDf}wy-W8v$nTBo0w-Rz zTPHb3i!k>n*)|5lbF>7XRQu*F{pTIuZi_x7W5(|ziiANMUgV7pS72bH`9YsY?V64l z!)wTy`*}Ns&!?a2z?2}O5n(?k3dEaU6`${b#qZSoYy{M+>XY2YG`68L78&qcy=(Fn z6xJ{O^oJ^P|8q@CilXm9v_K`~?Vp;d>Pt@cI?}B)4}Y9l&zxR7>vs3Ox)2N~=_2%M zk2XQBd}~y-&T&J<7Xr5(TPwVLvgb`}=z$<~z>2e$@KypxE~{uYiG8(~E~5E7up8$qr&JKrq|aP|}hbV|YWa>3a>vyo1wq z;nLl3km`#3O&rr>^1I`lgI#3Ib%=0dR|tg;7w}b$!tsko(I{M?GMwyhDb(wl7~n}2 z?HyBa&dtxYAoUmao466!|J*fM4P%2{KL>k)CK`bH#TVUg8E+0%+D(6>h3qY7+KiXx z)P~%g?X0B<9V+^GA7C{4E-Ku*&L(L!S-#0hae6Zga|hF*Z@w4&^*;}H{+ znx0h*9vWe+-pKZ{ta-`y)yZQLN#0wuxPqybps7u!(LfjX; z-wBmEyhLL0?zizcYnYcO3I>OO;p+GI%!{=MXqZ#*?aG=EY#vNYDfBouBG7k2YvJ3{ zyw-=g&YXm|XNcPZr_QGo1`)kjD5ZU$Fyij;n0sxwqkC|F3be~D zELRLZ`O-KKty@ATXt`dwUKgiWQZMln47PHzpTO6B5K~%q~vvopr-tBOad5 zVMyAt%9?~h1BCw~mE89tlR|Vur{(e|;XxJ{=M_X^zg%n&32SQ;{o3^k*rNH}wBcwS zXLAo<8#yxY)8jS3@Ow>TaweGf2_o4xL6WE zqd}-?E`Q%)O@03F!~tZGo?ng)tJUa-&TiIS-vak&ubp~k5Vrp$aYq&x7blM0g3Y6o z075!ZFzNhk|J2zmY!#nD%e<|Ou8aZc^lpBQ$9(U7*(a!D-*WAGE))ljdhTlypGRA? zUGhHvG+%ct@dPUjMV|FEL(Dj@Q1MsgCr%vvU*V zD>QZSP7b!b(vW6y%V5~^Mm%R|Y(x?kg{^QKJrPZ}%6mP{?F{>=da-%d+&h20p60Qu zJ8#_8baoi0TT{M2<9r|xXa-6ztw_tN$qDg0?_&A=L$-C*iPshm zJ>1Zal`K|M2VOO9dvg(cSC4u=?H&7|fC-Mka1}_G5P|U%OInPU)uQPBtlUE}K1&x` zmAVdZ>uqb6KY~UKZs4gDE%F2oCs2jSyq2Mf&ZIx>8XiLiS_aV10fm-TVxWx|XVFh#rG}=l{V6)qom*R~_as1j2I|hFq zW)VCYg7|RXHEp(Ndo8@VJ-@p({CFKg;(7fU<~iFtk*76*8+$VmA-jOFFe7QdG$|eS zO%9Z*_Izi0z|SgQd*10}jPb7I&R?^M-Z}(0tDKx5?*nTldmt~Tqn-PE#<=3Y|A3r# zH|nc*34_VjUCo>qL;9oY=4PSw&83!9PnzjwjUYS7t{Qz892k?W*K7fkw+P=g8h?*Y zG=C)!kz7%_9D!Fy7i0BS{ct%@nXeOhQSR_ygWWL=uoBP%W03u569@jm0JPvhS_3eE zHBV)Bm49mCX+r(i8N(=XpcjVD0H(NRDCO3*Y}JF*=c}WPk0-#v+rwO5xd_q>o4n9> zRf<-~$wU(a54dMP!XA^=@0S1k)Q@p-`Q}Qy!T51s%gt+;P(=WhbZVzm&^ICX1*8&> zuA{=!Hu0N{jVE{>hv6I!WO3Jx0=F8aA2qkaBgGGeJm!K5qDw8$eSI*vu-Zy6N>AY2 z4%ht-*H@HPx;uE}57w^e?{wcyd{v0;TY1Gsk0}lgiw~&e*C!0M3#VfOS7m++m07e- z*KNW~u(8I-01{SkG6Jx!Az?>oE@0QIVD7As}|XmaV{%x3hvjo}i$p`}kTdL6?C*nXnP*;}JopABGSQ^*2gh2nN3)2m{S_dwZ6E zfPi7A9Z|sWFJ%k^1=dP}Trg;h1Cx$ytEKvnoaVy_g8PREFwK_bw`W4%Tv_CJ!I9P1_Jpo|otiJ?@!c2>Du&*8GB2AV^JJ7l&Nn z_pY~FbdRYTs_nbZ-qebRdwFApLMLw&ruZe;4$yqpuF}*~KNe%WR_{@r4^c_8N~EE< zfk&2KE{?4e!QGROv3D<18fw>ZSX3~+uOMm7?r8|X6KMM4SS&zuuY(nQ121*YUsj*{j|Bd1 zxNtTk53V`t$AMENH<|+z48?wRP^85um6EyU2|VN(`-~kNzJc}@sQ1CD(PNe_A3d-x zD{5&;1D*gh(HTl~5)YTu=+zyWQr9FOUfydg9{n+|;DL?|wHn-~c;-|fdhw3B_;LX= zj|iInO73{`a(LIEI?KE+6V0LS?EE|hniV+FSNh^255K#E(UWS#PeAt#?wv{)K`S>B zPJ{Q^(pV`(EXYWPJt2I0wSG4q#|Nwq#8V{US`U1H_QTlshUywOYY|`_!pIwfsHB_! z{FF@VL{gY*Nn5cH2!)Ua&Ii9@{qnb(GwhVb*wdGHnev=f%f@64jh>UKp8aS)Bx4_> zQB2d4cW;Kyd?`_SOuvIC-}cObG%H2$=6D2Y8@LQfH|L1)+rfjsPiXB@Q>@Mq?kyfu z;gnjO1d-}_;0g(&zWGV|@p>kx#d*OYZwyVV!d(7B3Q1GX@iAdxvq)3PVHT@A-r$iG zuQnie(&}Vioo8k#(a{0$nS@}8vtCA$-M54G3kY~(Nh)MDIM$`akC4HRMku?iwu>HI1IVVbMIOK0Y^uka6>z)K z)^N`UyMh(7kK-9Nj)1(+s_vkY4H$p}niw5l%o{QU;B5G0mG{iaN)pG#-{pnBqe*j# zxYaP^q#FP;91aHBPma6J(oGC_SStUi-dR7_L1KK4KJ4c8=b63Y^|fO+de|8JiRh=T zdZ1XKxCwcM+Me8nvI{?Y_D54d5jF)o$gVI9GHY#yL^_RYKXLd(iR!VD;(mC1fEF&@ zDqMD279N9pN`FJ2uJY^XrX1J(VkK#V5ls%`*6Z^oj(n@ijUiW3*5Gyr`vS}D(!1uX zS^OCfM8x$jgKu0%8vmcHlDg;VjGUh2wnufF(<{l>Q&&XEE#azj4zhKL0lOwFm5UmL zQjGYT7@Lh;n@w0@5nZg0lErv;s{>EJB+2Ej$(g`UmC+pUkuEzKdwcukvh3ji6`12s z0ei4^>*SBwXX{p+c!4sblc%rz_m3rDlw_u@@!Y*caI|t^Tqa(M>ca3C(}ih~k$GuD zNfV;CQ>%k6t&djBQ*C>{PqQ6A8%CL zg$!)XxBJcAq{u2(nLg7a^xJ4)1AZt00Roo`+A9{^eGC|mVOZx{6pWld&NY59c1mKA zUHMjpaYz~(&MV_%K8xfLwd8PF^ydM2s!=vbfMs5Tzys6_zx)1_7t+P*H!N9y#->N9 z)Cmk5^iq7DqWMu^2`!%1$#&;uT#xB1HU*r-=$_Yr>C*c${b=s7C~nZiX8f&(MG2l5 z#y$MQ>gtgS15N#(XM8Sdgr@lhgcN@3@2WwFTIc4&>`*rOp+=97@BcLfQ=Mhv=>wCX z?oCVoOkxx?e@dho-+js>lvRYIK!Mzfo;e(Fqe-+Y*X78)3&Ti0o};E+%}_{POn)!= zynpl|8A+KsgwX-zQBLcGAkVf~Ji`R>7ZlkIy%{8L=9!1&m=M1&{5bRP4kuran*$HP z3!ClPxWyDFbSWVWegTDZ1kT}SirRhYPfufUQe~fhyoLBnFJKH7FS!yL_(!pX+6@Nn zha(gJ_@t??%VJt->gXjcN5g_E3p-V(tLaM9|}@8+D0#%v8DILkBi-jP!{}wGy4$ zve&RgRx)iU^G_tip!NDSV+6ToCc|pyS(P0>dO!Fhe}I=Cf|#KFS43R}1$2jTuCMkuuTW=pSP?EmKqJc`ULsH#)o#zMAUL zt31a+Yeq9icOv;DuprK*)tn!wLB+zJ4I%@{n%d3#%z`S*;XZ%} zdc%}?X$!hI$(~H3;%y)m2+l86up)rouj8ko&w_pdW)*hU7;LOPshMDwImKCFt#{-> zYHC7c$ac5z{TaB}e+B`k<7{9CsJgyuO8o;?e324d-;zfnmq(4FL~S?SN4`AU|2{&n zgiQSK&tIx>6k(4Cn)z5aVw*&)8>7tYjt@0{*$$y1z+M?ZVB zbhZy6_a}9R(wD$YaEwdC(hxk>8ovxKIrOj7$wkvIXFw~{v+TKziHd%mZMG$+Vu~F+ ziZZ7lQ#%$vD0|&IwZ{}7uIL5*Ye!M(xkp=FfCA_v1d=cNF$iX&n<6;k|M{{M5-Rn( zavOJJqLtXNsc+4-qBo<*e2IzmNB=`tK`Qx!z2#m+LK$K+FQ{4Qc=qu@4$00%wjeU#B1x`?7Vi_Zz`S(H&3y9z`#m)0?Z=<0=*6yo`VIV>Qc_ zyYK5yX)2-fHk@*=6KmIGGf3l6Enc%0IgB@>TMHW*l?V zu3X-ojzpzwL?O^esP~ok-?}7*0W4uitdk+h|CtLAYsx5K_Tp^;xSKsaQjP|;zt1*V zeTc4*^@Au*hK|szWm%gvI18I%%*cjqd!bF;cHTFzVz4>VSh+uc*~yv$#BA9-3d|G* zX4Kw~L-hHht39+6(y+NIo2N+Lr+PB>CC|1+(7cRt1$Mg`bY2AK-$=iou^C_uPgEc0 z)QKNS3$lYNGxO}Qp%5JH@AG$w;Q)(I3m8eT&y#FbHIHn&gaPa|lV!*}zp0a^lde?ljUAOP|S^vYy zW5WHv%kweZTyGkttc-Tw;Gr8qUNZk8b;}==ntqr zCS+eeEwv*eI;RBGjy_9@5jDV}nx;u$Y{7ounry3)!V;qbLkbDPz>#`2x70Q0xK&gF zMyoM{;ZAD|GBjgspz?B0mcnq+;TeVa6`?9JxddfAJM;2VOIqt!?c)UbFE8SSsHV1j zmP!LKUd@&$;%^`D|8b z1(;2}ezwUIpL5Jv0_B%R}{p(W0uoZCzgSW z<_^wMQorj1)sMnexz#2cVL@)<-Ov9KEXk{=-|<2N_O8m%WHQF09D`U%;y?0ZD^;N( zVKeD)(&xD1=C0wxpQwB=eB9>z&FgM?z#?%oUR+!p3A9BGPBU;E$9UJ&Rtt;QK4+&8 zEk(&FPW*n!nd(3=-@<38$J%DnkDRUd1zzh&mBeM2uNB*GP7LHWK#O6^1$THWDQZd3 zUv4s{ty8Fdq&&AD{F1qGe+NI+AzdOj($_`ub>NsRe{7#RGk1Uana_K#L_uB=oIKFqn5DtzEUr?OHRulzv)zBtSiig$*UZ(ANxg>FBUQs$ENM z$*9q+qGjIQ@c!PPpYRgm7t7QDs?JwW%M!in;D9**M6(`aKsuY-Yt#53X@CjPC;?M1 za~u#@ZgA6_2Y4eAJC&8~V1EfQc7ns-1m26u4u=5!0pAZyKO5nMF}|X%Bw#PbHGeo_ z2h;h2@#%u!Z9ir2SS=Vjhur=7?-S}2IerDXc-BtLF;QT4e#Yi9z^l9xoW`W3#5)oMgJmi0?jnt(AyitlitN21V+E3hdOCkQJHPT34E^BKixbOejbN#ZqV5z^b@k<@ z3yIM<`ubc;ouT4K$NQUnlg_@{XWm6PMjU)D>iOAF`I7~s!kuP-v^veYPN*}^mz!bC z&H{e}pr{MoDjzE6?0`b%X$|xBfSm}%G6;$tXN#?$Rcnv`I^~geu!7jGszChWEPg6q z8@=y^t_ZvgA$PiKCl^;!I1DT4uC@a=I!ZFkZERL5EC95LPLkr}Vg;A@`0a_0Y7@dQ zN7QRhs#csb3wob??r94s0B(qf=$zKCX_++MqyhsG^|P*gx`p)NR|R%({4UDuXdO33 zNZF9W?|9Jk=In=7@km z0A;771P5N-18f-T0U8g89w2#tF47BXf8wlH5gAwu^nu@cOo4tA=?C96U{c0TG@n*A0wpRm zc7iIY|Nc1uUZHZC&)!_qy;5oTYG7c%k)+D+&KC%${+6QB{qY4tt10lL2Ei=I%2W&b zo$~~XRI6MnAay^iu3zxa`FU-Vr)EZ!N8pg^waN0LKGtKNH}?0~a9K(p^OZZO3KYd* zV`x%2iJRZ1bS93jkF2?*F`Q0@qL)G?>WY993_0U_&+)DU0rgTb{Ur4RzwIlfx(MZ* z@^9GQ{VPs|+7-d~GDp9=+q{;~Y}WVGaHKDm@(qn+{ALBYlm_s9JO<+Uk=UVanfZ18Ka$Y-E`%1)0RmkBllq{2*?g!Tp zzBH{YQU0&#&_`Fy^u!D+;hMRRuCz$NJ%6omc_}4tEOFipsI7iNyLAPb9CFT;v|7m^J>l}v zPxxc`@?*BGP1}R9GP~LO=8T=I%TZVRDW^c6Tk^vT_XSVc(W4tDp|O*!}qK{uuo(BjQTw=%CiSc*I3Uj#>N?C3Vt4JbS#n= z#3#x|0)w^Bn5+$?*zpRH6A|U|7NaUBs*`Kg*;9l{Fvci}Xg?ycU3bZ3!#u1bOTTRy_AR?KAm1^&mOC~OqnSv z``DjBwNeQNt-OwWdZ3WaNJgdIbP|adJ-jy>c)j=pBqZX?Xi9wn1W6-g( zy1(Uso7{L(WWNGf#woD~MOQ|A5$gns>n-W*o>X4X-HP(KA$K3F)2O9<@^QEofIv7 z8j*gq=|fJ&hTDzHWZd1|gPx{>@aAfv>*6FHF%a{p7yc1wnHLw0`1ts&y}~Oo_(CLI zQ)%bV9QC=Kk|w0~u7m*c3{G5OefhGQnm89e&;`tNl2^a)|Cm+*Kvg!Y)DDoU97sdj z+R6h#7ZzmQO9}#a!OZ|t{Z}&;G^LgY()w0@Rs&}Yx_7&J8N_adC@BCg=ih5gOyQ3# z(b@wiK~nQxh0DgM;g#AK^UU|oiUV8D0_{UsSW&|!qfMgI#Qwxq+aQj^ch$Xu5+igG4>}W|J`R$GC9>`TB=kV`haT9xax3Qu+ z*Zo%ILG`bfT$Xy+P^vfhUo`S&Y)%=O5R1Jyu2B5 z?$nRZ6<_4DkdQthy^|1C12W-Qrdyo~=e2=%Dd}J-7nC$7GL$ra2d6%W!GMI%od}tA zJpkk__7N%2wlg9!PBdQ*%EqhFjRo_@X%gh5`~Zzx|M>Lu@5F>OQSjTAAxB5KwWi!4 z0wkcE;*bHo^yHQ48>55$7Ci}B!G+o!f)$d| zR|#X!GO~5z>-U-?<@r#;t@4+!>gl7b=wA*vE?gh^{VDN1Q5V7gnX4H}Fv{lt;X8GA zl1#%%m%kFmy@>%U;f{x?>91YBl!t(8&XU;q{`Irr+Fva#!Y?c~(S+dD4Bbp!WxlmR zRz}RzWvo~6*!<&OW4RWwnM_JbvagE^BvC|%z9Cwd8VDF(%5ndB@|TW&AJQ2#BrJ|+Pw+T^F1E^IGTwm=ppa;DS3wADadof zK88?FZj{vSaWi*TwTDAypt?mY1c6ePCu~8Koc@ys=U^on!`+@kp5>%;M^=#ilLv2< zBhFQ8_CT?orGmB5Xe-TT;jj+nuN91LEB-n_5(yM7;RMqz$`naXmew;S%$oH?Y197N zCmTm)H`cS^q%p5%JK2%?WeGlgwIBn|1D(HYitA`(1w4SC13M=tXa4b}#K!ivt=9ne z;1Ou{Ot=EQ-m@hj1+G*G@pN-_H6nTfhJrtvt3(Bp*?UZ#euP0t`^vkIpBxH+R155H zs_32%L{ESj1gNtP{x~MfZ1=7>0Z}gC?%{HS1>Y`P#b5^-1%W(FQ1y_U&HZr?k}xpN zxVWJ>>>oD?(6mkJmr^eTtQN4H06$*^=;xkx4n8G(dg2W+oKDCqMQ}QFL{W)cNH0K< zP#21E4HW7OM~%KG8asZ|x@>!6RFBSNx#&d?4m*35g!FXB{Ks7SrJ~-wDX!y1=eJvE z52^&xG`mRkG@B;G^r+_Mi{u!NyZjw0f$axy@<6bIQEcRntXHoX%z=w02t4`QlPG-R zsIsqq7!k$iq>Bl1$O(~hU=r8ux1$NaziJ*Vc6N^-7+|FDD*ZM*R;>SnR{#6(oUOu! zj*F%~(}v8wm=laQam=CHBj~Y*HH>&+XMz$ zOf?d9v@X~+DC8bc!`pJLmok}M%kjxg9HPKTF))ieReo7(* z){&;v%(OEhCqE%ARd305{^f#Vl}J4_Dkxv}GOo z%*V=$nXB|O(&x5x)tSDHiw$o6tLGuack>l=y!oAfhhX`&q~R&54bDBGL$-c(i`LY% ziTvw$-w6>S{AY#5n>g4AuuWcg4gB56eUE?H9Obj1D$$6|0F~E`&ij(Tn z%m-R!xcVUB^zq_jF(?v^GY}#f)?X}Q(4;q`jak}LeZz&aU;I4TqQF<~Om~dNJTYc5 z-#Nm2Prnc3I=(9D^!@_qif_YB-??b?;h~M;c%)upbd-lAGmFf88PIyK1i<}&kS(Lr zr$`O%d#lhTE(Kxz6}_6hv;|Rt$Q|KZHXASROcbap4w>=dJKCsza}s7c&4Wh6lr)7f zdzz}QGS=#*h{I>0!l{~llw*;*W04|byi56E;(tU}w+I1d72cRu+<4ggmA!dK3itH^ zB$AqJD#d+3mIaKDXbIVipq_7+Wu3aCaH)IP1}zJN@Ta+*L5c{?)6o z;XwaQ0r!KgNDP+)H??_^lz;(8QoRY#;Z^gX^GcQGOUcg3$uSllJX+r=BJ&~&ei?#8 zkqXrnG_ibH>^D{Zd$M_}P4Vx3#&_;y$+~=(DuWlnnc|E&{%&ZwEJY8#e_l ze09maC)whK-d;br_1N=n(H~buVw;>a9tbYxTb()B-rp-89S{am6e@f!oWPMlD5)Sv z-Mkkq^P2wFMZtpXv1%kGDj4>OUzhQ=cnb(fJ3zN>9ry|UEdp&|H9VvoG9IvE`)Kt) zV9#6hd(Rh;^U2u|Mu3%*7O9;^8T_^TwxM%(%ENS}7C!(!kW2j-Zfnt}U@H(Y~vacQw7A^cEm)EKC$oPUE38faq* z)t64D3VIU}6N5t$bV;+-!bePcK&D!z^$YMOx;l?ND#+_aw5x#OBJzeyA|OLaNlD#% zPkzk-?=ZTQcLhaIvrKh>H`#ANp2DE<_{3^DQMdNYoSl@Qg3|x!XQg#0T*afL-?x@!;7yJF#!?4gV zWMKIXt^p%OHKI*5k9E$!v76ttQUWy%6#=v4!l(JCSHXZGVGH)G!GtRWA<*#lH$y+#1AVeI?vIAtXk|H4GzB2(lka| z%XY(1%Sanv|D+q=cI+aET2^%r|bi&^rwFRaE8im^6vL}5|#pV)v z6}ixfl?zdUW|d+i@tD2?IF~VBzUqBS$kLt8kX?<@^UJH1+@K-0^&v&T#gSiRM@Za5 zhl>@P^9ese8EKf?LOWX|esFKcKzXmf^ebf0(=PiIg2)Zo)5E@@$ ztp|}p=+KTn#;^=&zb*)@&{#R9Hv6h401REh4k7rJ&GWZx_Nzsq?iq(hiLa%~71t|c zo!CnS4L^A>Od&C!p~%Z1OX(l2kr?&CyD=V+a)RMVR*5`N@v>a>oRibjeA$5Pcc5$3 zT?9CP&&C1y41mo*`e>}4lnY*LT6Fn;?_x<9lW54s9o*~c{O8MNxV>vwyuLA+*6 zh@W)6VyD_|_U6UaDAX-q7DXcWyB;jHqh7*CuX2{L!cp0A1g=$(`&Neo@y*T3uYG>E zu!=W-vI zXny|Djm57U-9(OIo&&MJi_!A`&~(;OQGajORzW~okdhJulu5`w?!e@$IZ*V z$&4;K97)~m=vhJ`2;hkZz4Qhd!{i|x#HT%m3J&e4-{qsBHrw5oDi4f_n}I#H-ZWuS zAnlr3Js~1Wo)i6Z26w#|l_hYV%*NqmYdpM(cX#|$MLSoGarl2TYVzE1sgQ+ze z$pD%xC_4n%_k@bTVbPxIs9(*7fmAK93+X9vW&vQv$*kDnCfq`UaK}F8hj~zz>3(4# z>x_y~zUDei{p(X(W-ewY;QixnGc;4?w}Xvx^# zLbh7_Z>8EAF;Y*{yD!-)E#TrmdOWrL!?4YGPp?UOS zz02jg|C})$z2*j=yr~Ea{yE9jYM#Uf4TEe>y{amlsM@N?G$4d|WC70a%iKa?EhVFv z6jzcw!{6$1=*hVn6ev5jpw@>3ns{7I0{%VZ5ne}}L-!Hk&m0}ZZ?5DKMr>}lW*O~B zkSADybp0#uAV!`v^z{Q#K4jqQQG>a3w}F8){u4k!V`gNOSNP-%R3K{wuJZu_kGMPX zmhUQ3@eb#2uUt@?BzK)=XCL>QW1@BIaCqd7cFp2v4r}g6lY!o{_1UdUXr=x}zn1%6 z#Q-Phjoa`j{yiY57LWSNIi-^DN&l%V+l1LrlBY!8NE!B<>0$*k6A#{)zI=FgAg?#c zh|-$7zyA(N1Ig`_o;UwV@4#l1E_z{XTd6uNDBbDtv(B6{&`fkA-)!6|Q_U`a&iT3G zZ2ofXHzFer&Rye7z}_>r^o?!_iOuoBg8mLU z?Z(Tm;I%E*YvZS$9JQfsyLefgLE&RRXY%CM=m|rOK2ui9NmOm8g7e#1z@TLa#!74N z3`C}K?;ayWa&ofT%m`lY8qm9c)76z#H#VhnPB8BrD-VNPG#GrA!@9jr6Ces4+>!F# z%DBWvEc_aPk4GzIy)vWLYNi>3_Wh)_$;I2xOZObB5xd7&B*-loM8$em#e&};G6f0; zzZpbYZ;TjbQN84UYJ=bTJMZs;qg{9oA~%8xUSs?08oVk3XvPk}pqF>YTjS8y({?}q zPT8~Y->Ib4OsAV(8v6L7_u=W}p#iw#)YWmk9=UFn1KCD!{~0m`u#dvx*N9IWv@yY` z3t}*-vf}W+4h>AgGJGRO%gyd%p8u~q_AY7H!aW&ed)Sk~cJZe)CGf>RI#l-!2xX~P zD#6j4h7GP&e-E1UpxaUuye=v3FK6iTa6g{Y%=^1arhO>3UzQ6*PGO{=c6h`sRsl&D z2?=Qy5M043%E{HWPFryt>}%-b0kDa8WwTJFh#E0sGknaP*6HnZR)(gNM-NTy(X3JG z-m>?6Kva&|jRh0y84|?T=LOKN^OM)#`B-bd3W<8L4rNDoyV>5Ta4fQR&P(swa~eZi zVYqxAr-JE?@%@CW8r$`9$z31o60|TY&Xiiy0K4XTaw(*6#mw}Jxnz9dk6@-jh08#X zgPF@UZ=(7Ezp{+(`f{hi=^K|?0dA4z*DGpmu?;CWi;^nc$ITAURqps+2$x%@5(^=6 zftT9A2Be>X4O+oOd7zTohunH0vKh8MLdq?W%pbJO-YTR0ikOI~z#Sz0c1w$L-*#|u zr-rg_l4L0cKGFwx`zIKRJvWy#J%M#T+TvE>xb?!OvYG}Sb^f21 zuKP7Jm4GY(aDjntJy)3DpGlsv^0%2E5TZ}-jBGCgRkDVs_&zB z7|;jE_>a9@rtZX$`l zPDiY>ENh8-R5uTOAK+HA<=-AfdobeIpAK<|f7dQrh4briol4)V+`B}&i~Ue3h(Se$ z>&xP8hahLj#wVPD`2kFG*D3bB7oYfS%r@zYwcTmj6I9ZB-yS%dYM4aT`y;DOEs2Mr z#;FXO&rD=BdwY1oE|p%q6ilD@IBc<;tAGu@s40v4IbP^rRv_k`Yr4(PS{nt~bCx&M zEj<$uo#QFxKH^p|nzMR?-epdTK10*0zmSE-|Mj$*R);fpJgcYNU}plvFP-%ZNv;z@pzc zU!||_(i?n@zASkw7L2X^=KecVEADCQPDZQe!-2(nn0lBI~8#<%S}Tq0O`3acjFH9|y?C8Ipj>4;J;n7WDKU^^ccf zcm&MgYs{%a=o=1>gq5wJu9|*V_HPev_wKSs1}m+46iVo40;=G1rQ{>6Q~c)s z{;Njy*OyUz(|vtZ4_=^FFyO2))FMS2Gmh5%XGX?hmFW;;pwJwgj_hBOWW?dMN@}$$ z`|oUKJ(Hz;EuD|;&rh>|&zvxA7){R8eJmM>zwaD}-#GUK6udQS3r4Pgq5D;J!*KDm%AdNA;2lDCxUpo-_DfJCbl$f9>qdpzoKrUD7ZsK?LQC z{+~6fC+ZehX@pgF4K!2(S2>A=RWSO6v~{XpC@|%g-mp9n?}`58##zX%tL6{-fwSch zBdoYTUTL-M-98v#HNxgJTYC{Y!SxE3@b4;+>rr4bUFU@y?PZIHnu_L()Iy9p>48 zNq|+inaMFD_;%u_zAH64ucNqRy45}RVl0IJF;$7}BlK1|44fPB`bc057{lu|W!`iE z>;2zvTc6Y9hDXM2oee1ve!seC*?+rBWE5Fi`}Qe)6LNL&`<5yq(|& z3|qqWE12(4dpmMob3|ik4nC+W1bJ=m4~p4}{aO;9eO!^61g?s#=EIUhVQ`<=yHwlibca15XQ@}nb7X^P!;MPW zK%>U23FpPR9+3VriU0fJ#*g(7y-pl-(TNAL4j?CIiUOY4$0MNa2MVp_Q$lrs41w-Y zp#f-8K!^C17dra-k6od+olZQMdjErp0z@YGH2!m)y1a|~66nmDfSvQbP-PGMqi3;* zt(lgpZN^LdEdoF*UbO4NKu1RxF-WPkt^!T~u%}L5l6~UC%{! z=;D05cX*gqX|&{d$OP_^$n+^EE<5mK2|t@k*vASz0^1|rDT-^KInVsKxPs^PE_Z`F z23dP2zoqW+R>~S(bcQ-aKbd2@_lV-YFBpGXJnlkKUVqV0%st@nnZN>DY2XWuo~Bt= z08iL_4+SuV-r%Ad4nbt4C*H?O*2GwI%I=ed97_=2Y4XDU;d9IVqfJr*PwIqMg4p4x zf;HBjgOf~;nF7r|W1Jahuzwoswg#O);BO1H;xduYksK&y&Ggg%;38#Q*QvnGik^yR z8u^6n!l{5S2#+!nKmFVlyFwT;x5g%|<36V;7!PgpGIcJ<{TBCs62mJD+YSBZc z?+&LPi|G8{pm2hGPqMdEWRl+UIVS_T7r~Wt@13Ch@#?BOS?MkyW4;#n!APSn-;&R*H?U`vS z-Xeq*mvfW8DE*OxPGShz5lscBrm>m2BJovprKQeq2@13WgyAAz{Lp z44gB!@cX~sJByJ`&De7wjfvdtNh93cSkUQrfpd5+NW4K|aNlUH3 zomgD_mc*B?nomdvp0>a>z7Lk>V6+@L1?{~Yb&C!O$Ykn+Yh9^; z@?bunJt3LUzp?s(!966H{2nhaSK3L)Nm#_X3zZx`~X3-5OxcHZ7^Pdq>+8rgwL_>*8tO=ZF z5RP+Q(?*uEKN0WXsVnn%ACI5ajV>%e#F{2%`r0XpjYD#;#Za1Cb>y)+19=pDY_|J z$O^{1>7dB=2I#z^TQ#~~cL?ghv|f{!&%wNRQ5IBmyZR>l=4Ns;R#MQ`cFw=f41$m%^3c zj2jjia3F201*_TJUyHjf?cV=%ZLuVd#5G({T{`?iSZG!w=W`Ma7=5nb7T^Ic1WbZ< zsNUWdv@p&Mvm^)^m~7}FzV{vgw1BJ8azjO{g#@vDjhk9t&U<=vVdAM?y?S;t;v~*P_{tOm1I>PjQsjkw!DNxZk?o&Rs0JOT^4}J#ik&ti7}b3!$DJeo+JM(vGm=V z;S>%UVe=umH|MsU-PH+p|&dIZj)V$K8p#@sMu)-u|`WLC4XOwPna-8(XIi#oI- zIcHxxcx0g#$EDgVf0z23+37!`uL+Fwg7U*l06zDZ8h-#1b}U(c(z2^BkW_TKV{@-yQk9fmA$IPNsU&7BG2*Xfj$ncGeo{ z!58c~+2@V9sR2?b(T1o4D=v&1ku6rTr#qZclaiG{XQX(^XT3Valn@ET(I`TUxU{bx z!OFk7!~v7ko&+4qn-DmHVnJY5FUoZ@lz6%PN83%&yJGcgU= zRN0L5UaZ||z8*PW4|0Qqj?+oPx3P*wY9mUpNybUs=%wb<)D4LSnPkZ{ar5vP={TrF zE|Hw~SzPEv&pX63ct@yN(#8{QPwOgyimbd{QBRGQtYe@_haHtFA%g}j91I1)@c12I1n>7-Dowi6(ehQ8k)=xvvzse?at`TI=a3t+q?c`O-vW%>$ z%4JNXtObK~dcdt*&eGX@Xm!vZ#H*lh00}#=k?ot*xj$}xpRAMd9NG3(jA_|p)%o~TR&%6E>=*5np@Ww`!cNmK$=EuA$Vdp; z2PX?TVeqJgm-Kv^AZd~a8dg(8>&kDDC6@yxG6kf$y{%Tve(1RSvzpJuh#OyiC`;CG zrK$OPdvDm?zxn7%WXUrQoirFtM--Y-d6r=i)1~zI-hxskfb5la(_sU*5}ZxIpLmt4 zmRjas42!54uA~J?_haugM)Y@2MZePXO9mv*XY)#rZECNzDMKvcTXhNxrmQ9ng zwS^217lG29X?+c~qhC?sb{)@)wztPJQt+uDSMMUZOg{j?39bA!oSfk{HX&5~IyzUzlYEv#pQm@#HSp(ITSavSJzhV-DoI#fK5vTrk^%@>bAubJvKT8cf=?G@DSFN(IE zU=Gzhd_{me=O_Efj(r|}Byk@LBym4OLZ%ZD;{K0F-AnT>;^qci9zn_Axxw4sAsPH9 zk33o#?yV-#7vB(?WIrUv+y+G(fJyc7cr#0>AjN}no^N6E%Fr2f+EeoduVVpN-u2wD z7{$SlJBEJ(0x!Hm3&>Si9h$G`rugr6$R+eltrQ%;Z!3!7uHE!4~SIqyn?PC!Q3AGw+ z@HgAZ>$6Y!DnyU+T|%AZ5hw~)6N^4@TTnIN14anoi&|jcOufVh0r11P!e50e>sGbA zVxxhm)$u&}E1LzYSsJ(^?G^Cyq>EWofj zWHXS!>!KdZg8$OyWN*%>!sGmG$Zsn#t)jEt!rSLqp0A~KKGu^RNO{QkgI!l|?9fV- zeEGyprl#F+Fwt^Ub12l2dYk<8vcyCvB(qth7L28!<4ox}G7|DGS`+KvO4~<~O>33? zg_=q=Dy&KSsS~lLvsP&lcG22D#7tGa&eW%@rS>VJi+K|-nyNNZD_d*%DIC_Xc9(k8 z+_3vHUN%1Lm6I!${SX_Jku@8UjgG|G*_nx%83#l0^AAT-QqsStG*8mnZU?l$!LDbp zp!R!+I$m?2@~V?y`46e98{icc>3Q>N)%gTT(a-hvQMIK}LEMHRAn=xl_87)sFH&Q~0hU1g0Fddk81umhdI(q8u$riT-7l3luj#3Ae&U81=Z4wo z(dK`SsFzw)Ugvt&s5xa=vzhv+RIwriI~eysvUsP}w@3m(Q)3$(NCFBHm8HE!Q1n`B z$2pTjlZX3g;G8f}9^Kv)XiF?AeZ77%5MS=?IfqbsbE(-@7Jsw;^`-6bzqJf9VW0am z2TUijeC>jP(O%S!ueSAbTW)Vzd!P9Mum6*Bo25q6x;#n>yOaAnM22F>D1YZ*CK}UZ z*7ExZSxy_monWbr@qW>U2*W#7E!-dqa#kH}`U7uXXH=!4_3>0j!XQQ{ousj-7wK zEo;@&65BD2qas<{B76!UBsZEA_AL0~3}gduIWcKLa0elp}nXoOMeV?yILc^0LWTzE{u0#4do04~A2q70}YOpSp~#_+r_*58$`n z?VmSq(5=ejXonS$GE_CL>t`#8JVV?yAg6EbpVQ*T$Zu45wx<)jJC*j#&Cq$S%OFsUGkd z^XLUN5W+pFQzhu8+L?Ap2SZ4UVuIExR?RLh+;*EyxKi1zl;f;?&_4@|@hhA!yvOc-I&}ma;wL_;iIl6-y3` zKIMOGy^Q?iye+smR=j8dVC1>iN*=I>E6HAS24l4a4G(jGDGh90fZQdLfxmJ+JOMVk z4*h~ocC8tGt81{!PsoM5|z*9cN!9>a$dArp9_BtPB_IAEwbS|3sR1uG& zkd>bm#*Vz+3qDh6 z55)eSN#h*8z&D8<&(^LGR5Q+B#s{Q|cfpGNPH*c4sqxrIsd)r%$MwEdMnhaq_5?-e zrjt@JBnPCN#mo0AM7P&K#WQ=Q28e}qJyM!Bww)R(0RYtN{#4EWV(!vF10Mu?7HTVK z!!U?-WyGN`=^Or{0WVNKs;+zPjSx5`q6`=M9l`YsREWO+4ZN#moEtF|z>kbQzV4ki z-RW~tB@Vz9#>_^S42|C*{J|&711cm~j15-~OM zOYd{f{7mP57|P4F01Kg*hxQ+&3+fkC1Jr6sxgLx=`_CVHW5i<<0~-dun{uST6k1L6 zJTSPsA$UFC>imH!1OIp(qafyHZNfdLYW%&kuiS|&6TxVC>rB6 z%AxcWml&i`?=MM(#wdv-=>$cw`{dAYtgdT@m_1CIlPIQ#^-fqbHTu19L!@YA<=6PA z5?9H?vdgs-ZlxNqo<9{3;1cC%WYFn1~Lc4($O%#b3d5 z^EHhgCp+UU{i6PVuherIsS^wc(J{Q!2IvvC$Q*;lYS)gTa<*6V=qn#LzC| zc@Gt>7Ewq^%Rw+0^;m|=yOx&b|znsr`)&FllC#?@k50( z2I_Oj;_)VNT_JGz)PteIo!tA?B+IyyNhPVMRzaYIc>qAwqa&r{=;FUNpchg*KDUuTlmbA;9-EVNN?xh$0vv&d^=6{3bsYCWGAzOB6kP zZdvY-0okWjNsY;T{jB;2Ho+5}J5Tj%cu8Vcsm>^bszl6-S@PjcuP-{Et;=7{tF#CA zr1<8)G3HzsZvMY(aq@QAYL#`T9ON@Y*iEd7zw{f_l1UPwndcw0L^!0=Oa?tSh{urnagk#(L#bw9ryXJgGBtfalDI zU+3wp_JMwWzhd=Rw2=+Xt(ZHfv{)P`_a~kKXUa3_AUoN>7Y!&GKE7TzN-9eej^s;x zr#}2-rwIq#0xIVRa^5>Chgp?h_VMyoW_SL~z8xc8=|P#mIQ{9G~6_)_hug)M1g0OienTJVf2WOg3D=SH074vg>25 zzeBgkat`N6`IK{-ky{EBBJBahCHhqzb<_pq(SUcB~J){%6 znW}^Jz6THH!FPFl*VWjyj+;3BJEM(h)4W&1>8EGg%1^6EEz4&oZ!QW@ezEiLY~n z$7K(t&GNO1#uNhC!i|u$qdRPPk|Z5(^3sdH|ApB?|7j=VKQX+vumkRh8PX&o3Y+5N zPN#4xQ)g*K+gG`wzv(ldVQajtBh&7@ zVNBGBPTx%Sg$sAvqV@;KtU&ZPujL*PL`Ak~y>_8*+QTfZe>>9X{KBC@XbW%6UH9); zuAFw@^0K5)WgF5d4Z0Mf(M{};e2Lezc6nhiH&#wUZb9>nCH~LVj3xZLF!A zmqTkMMw$hMdYD5bYND+A>LRkSzJmKpv1JhX2Df4`r>$IqwFU5~;R5$~+nSV?kKkcJ z%k6fIfW5_G!J@}Q$*Ye?M-5n~5197?kg9vG6yM|PwfkzdKI6c8Wy$k`pqK9T5hA{A zIJ;hLHzpF42(F9AD4;8LFL)m9`)DKZel%zUtY5&gea(6b{WPE{3iP$0eD8GDp>Mm@ zgxu}5rRPxz^V_b%6%07{QPO4Po%9U)uZ{#3$_O1Rtk|_;cSI7>NRURCOADL92t774 zgWSF|Rn&EOydBYwh{>}@0D^6n#NMp|M3j)v+M5)izBVTGo`3ff%s3kHqTiKT4xzsL zQHn%OuB|QYXvv?<79o?~O-7It8DZ!3AqJZxPCM1m4V7m}JIgeg{#TrE4v~reKp?^J zzqu4Zu#@y$gOj!0Ozl3sI*BKTfeJ@jHSJ>;#e!Gl?knPql}I_-KeUi+4OU3u>h8Oe z&devV(aOiBtlC?Bej54GQbpTK;`tB8MiWNcLA)cde1GwRXh_Lzju92V#+)41U*D%a zQhqLs{GYSa70u1p5MUA635iF_GqzWTyjiMQGK^O+CLGsdk z1cb2`dt-rzsG^J~?s6Hf%WktM0qw_>miB4hgL-YmmD&AEG^<=KLQ_s2-{I7rNmVR> z&wqcNwe8OBn<6Vqx@mhaCIS#ps!k~GEdq3{yD3q}C;`8we=tN3iMi9mRxBTOxcDuf zV#eet^7i;akf=#iJbPZ8B9kUEDgY-fjan(XV`<#LQR9p?Wvc9H;z)Bmlx*QMzpXqy zO>nldWXll){*>!P3bDCeK=1l9P(3Fri-k$>va|<1o&h zQ)w0@7xW`6>&uf?ojke5{)ucm9k=Dv^fI{!c68y?KlLjuhgb~G+wT2*W2f!4Otfgz zrGc@qB28Y)1at;_O`3I}E{Cfmss(xI!f@^DCuLo0WD4*$`$gvUe~sFQW~i`e6&t+g zffQoQyo*-Ak^=(79o)D52UTkrB#mJeZw1aMuyc?9aMdl~(BGFAQ22M>(q?mSB_-n8 zi$zhODxbM_DK=W`1r@z6W&wx)Wm#-$><^qXjgQ~@pQCdg9-XRt4XjICPr5&|e*3Ff zF^A)LqTk;{Ywt6v$d8A0gOM77S~A^gX%)6fNlxc2navL5I3K_DG}*Oba?-ys;%OOo z&>c~Ac=Cd|uOrW$m_VERl5PFvXv?kAdKzK9xu4wqQFIFMs#tMWf5R%heFp zEVr7d+^RQiU*k$vnW=kO<6~M0f>(2y3NFQZUn7G|K9$XK!d|50JFh2%Cy-VKdg14 zMXf()kiTTvKQ>L;DXUZSw*BTuVUU#Yg{RgJSFYLLSJNBSE-5KNdKyFAx>s4DbC1Pv zY7#izG2z6IjhXbVSB6i(GSr@gs+bwMFq(vr@G+SP>eY%Z#=mZTOt)UZl-X)`!Z`=t zYazwvT1*Ims%x%tXh1`vY3`nSn=!n%bBXYQ`A3jRmBM!4RkblrV^ak$mdio0ZeEd8 zYPT0zt+oGdSyVt>DLorsYstLP*!NV~I0gFXxn?46?n%8{ysQ3Lh00G*BC=godNl?; zt?R+dDUbPm1t^bcRhJHhrJjaGhOp9Mhw$bFvqEOL5{oU)a@_MEOZOJG73;|wSDGd# zg~n*KYCd+yp4Vbku!6Im^N;wk8Xge9bS~Cz_?=bq3N4CcRs7=g`W_hg>zZ{)okaB) zZaPaAeQx)Quj27`ME=RgGD*kO8RasUJn3oKX_^TJDa_K4#y7#LB08Lxs|{Y9SLI2n zZ%zy+gtTenW?980CJYpegqLS+9eA-?|9)OTDVva4m6V&);2?o-8oA%EAzyU?I^N{~ zgz%q*hu#gpZuOdIcJV9D(feDM<*PQ^zvN_aWEpj-$=ZTMg@lZ!af) zaf(K&C)?u)CX8QbIRKQ3rPD zy61&zfu}BevmH}vdKe<1ReZzC@&W>T3$7CZn1kYcVdiE5Z*hGG-m(TsP70}HPKp@T z`>-qx#*lipzihfVnp~cWKBXP2FaY41mjy96rP8=KFTxR!L9AjmGc3~?yQ=w*snW_HXy68n9LS6dEM26|ZLlX8LEjXM)jd46E{G;`+X&C_glT~Vrx zO4_Ldw}wTp)<#_~*E&hx7iAJJ6MD#;B%D1Vw8B7&+acBXLn?6>Nh^g?)o6Ye74|!lCOJL=(Ecu zQZE#dTG`KLtkjPacOT+6anWl~QA{GGBT=JK(w`qi=k8d*w{##Ul9x z_fSHb{CDiPUx!`$zGylRX_a3{jf$2e`b|ud3t}pT?|Ak~erfYz-3&;E^YG@>;;CH^ z+pUJO-i`-M(5YGnsh}-G*WmFL79$v=I(;7uHS`ImxP(J@Mjq!llFi(al3|Sa2)r^0 z;W6sUJ?MbjW?LHz>ew)D?6c{d@BxwIe_7i1VmSo|nUaYI`DgLHr41 zoHFZb8A?D;5eS?APY{N2(yEugNwHmUk^0LIK^yF?H_SZrvS~S2Mcrlvu@5&gue;qM z^-5#XYcKo-AFV98#Lb2!2wUwHTr4yd@i#|TA3YdADY ziXvNIzQ<88jFYAeom#5H0$w7`5SAhNqw#{$LRnLiRFZe8WNE(OnGmUpU-L&*%cnwH zRY>gCRMpdnCU&x7w@x??@5AA!ki`CdXD#DJRD&V~3;NQ8VG91+N@W5MKl7r>^kjmS zY7E*$K?tAD%xFaIZ(7k`^1+yhsrwdiA+4u&X zp9f5Br*!%+`x{|1HYh{e$?aH|{->5TMs(TRSLe#1QFohAeeah(u=Z3j<&B&?s!EL& zwE<5^WyOMQ5SGafw1o=Cg19gHwZyjdl;J{oS7bkQI&}W9a!u!M?93;=1K1o z$xGo6(p)Rkm2Dc6kiRpMPWK6E=y$q<1#BTh#Cno$q`%Ze?Y>Fh+tKj7LJ;OyL66tt zzs88_1Wz#{VxPSVD6mR_{}`i5pq^g)&!dj z4LXQ1nXcAb+K;cnrB&-pInc00V2(7XI#p?Yvtbh)wTN!l}9;?i2 zt%Ebd<4gjvm_T?+`eJ2aAuiYo#pd(47qUr50-EYORT* zhS~>yCB7z>(iNc?Zf}1AYUoYj7l}0KEU7TmkY4DqeITX`Db}M&&zASWi*_JWUHKb9 zON+k7TbpWXfTA%08RN%JL6+L6L_%^<*qR9Z(#j?ca}UjT@7kJkd@^1e*gPUvY#KJ= z>>1jyV~R{mK>HWv%Jj4tXlDew^mog*&L>@uNm3AJlJ0Bq0idE{t-44+j7G4tT@g<4 zI{6jw1B>bl(TDaNdBYT0((HF+=P-@TN@?UV|7uwl6-tltNv?J0x-wGKlUVC5Gq<$D zS6|jnrIU7om0KRJy@ON;o?v&wNaipjaBaftxM z(34lo{j%RnSPt`hHpKN4<(vuyNf!s}!sLy;n%hl!+0d;^4qA1IIECQU!99EFc zZ%z6H*^252MOUBfe2LYI)&fVgu*LW+u>LaZlW_VS3q1IHF1r^-k-UDp?e3QQ<-k%e z%kBQ!*rr(_2lr|g`iF;6y;%F8=`bjbAZQ`F_T`9Dtpf1`KiC>%JzQ83U*Un!A2wBr zyqS-6GM%5~u-Hrq&Xp7Y2af2qEbowH zfFpAk)l0)cZ;^JI*gjrsA&b$euXYHYd`=r0V9+(Pa_ZGw)l4MQ%AM+c3}VFQwzlL` zRlcn-cd{PC3U1a$W}Ps-T5Gk9J!Tme>0&I&t-$=sGW-RR8`lVSg^=}z zRLO!S$K|T~mszK+u3*(P-KpJRN^UY4K`D5C>ZP{P_R?}i zGDbEX?U`xF_}x~2*z5hiyg;Fr5>>1gQj+5P<>~2Oy*m|R@L(rzPd2q`n=prplY6s* zO9fVHMI^6--ubiAB3`|IlXE+MGLDTOA(ooeuSd4Jo%7mQGY!H=h-H=feyND=bB&!k ze?#{6ic_H*RYsLwg_pBD7w@grq7_?U^An=QoXVpXCnCzM?~l#LGEWQA_(<=yI z+^#rQ!hH{0oYGv$`23cp#TrlalbB?f{p!BH+;$wMKv*>IkkOF%`^IraG^-Y`D?d5R zXu4oXN-el9^@6`t;Ao@qQWrhTM~|`d*c~F?pxrCi9N>6x^=w7s#8i9JVEDe9igVn# zqC7^%jQMtTBF%IN%HOL`9q4@AL+iQoshqiAzNx8*&xnPHky=QXVdwIUlwgl!AasC{ zF4{V{c4*c-Ww_N1d|d&X%vAS<{rm(i{q2_g5U8jiC~b)=1Hp*R^`5oL*27>jqj@PA z&**}qGOv2RmCG*VP{RsBkL2rCy$?=P%yH`YVC7nfjGuMVl=LUH|J`e>sR625pF597 zK9-TtqI5*WbHOYq9(dc%!VkQ8cux1yI$~1KiqaXTox89_g$%gEC;^1;EJHN*oiklQh=L%?&nRsXzJ` zZ?fghHM_G|TU)Ex&m1G2pPxV0V}U1JBvAOT*P`$4ioKx&rf1#T&|EhZ6_Qj*s>mA}x~bRNdC!}3zD50_v=Qp7M7AJv)1>18Oo!r9O1muJj2RtqJO=AG+3EYZqD zro)kZ`ctby5N~6d1?PK~{S9`=u>0Grh~rkW$%g7)TzsDBSExpH8g*07Q+lAh^w|jU zvd@glX{5`l4pFC`Rt4e4gM&^i!XWF^ecGo^0RoCCy*@0}zCJUv_R2L!GOs_ua-K&) zBCpoxMZ%4tO8a53+sQz0B$B(yBCg5lULyv9_8HF(b^OFCgY;qF4^ESl%fAlYv2yr4 z%c*t05fw(WCfm9R&!)K$mJ^hFtDAr1lc4G*731x$>bq9(%JSMS$lGc<;O1TU7Xbjc{qb#s zJz)f=-6%$;cU!Uo`Hp~Fid$jK6YM^h5z5U zVWQr(w&4|_WZV0xh0IDT-jmN!RX8HUN%T`=NJt7L5ao?F?`e%<&zo)YHhKVY(Kg71 z;@O*h|8=#&V4Ee+8H-0Vyw*H`3Hyo6b=`-8tIysG-G|RJ-T3eriUgt93#9};x-C$o zu5^8_H&iOdB4Kubk>db*sUq_+vCz@W!86+6g)=C)ZD~oBqHhQYV`x=(N9MwOESIL5 z{L_U+_BX;dMN`7?L(Ncq{yBu$I{CP+9o_I)ttKz&;Q@KhW;>yG&$i<{Q zuUU9Ilha0;+39xtceC@)f3x^0xko}N0Uxf66Uhf|P>n!Vbo_JR)6=qEmR=I`x#LmV z`&*cKu!*RUHf2`p48R5-Qgq4d2B#Gs2W;&qUN_T9eZcSAoT_&IbOoPn*x&vU`Ze1x z<8AZ!w>-ax>I_fB74&_TNk8I)uaCpE`YADTWVONEfl2e~0qD+d2xHPKl~v&?qyJ$I zEfpSe57Da_bFjwuOU5}`u-TFpRHGi}cdl!=6feb&;8G}d8?_eGjLPZTx;I{3)aDz^NfM7#ycr4CDWs_w;ZqzJevAz+lROS z1LYM$SlfrYxmp!b<1YEO*zJpyk}m0}Pf6c+VV+-dl`c|!;rmWy+I^=B3rydvqxgDp zgGqb+T^Bp*1g<)ca%ADjD}&!ITp&I-<~}uMSkPq`;^w=35})H966edMV$O|M_ckMB zk^FEgSsP0j$Dyx)+EY`L#my3};HO?_=UP``{SPxF-mC>#QJBJiD%(r0c@sMX;{@(G z%ed~&%CD*eak`ykNaWiXlD9U}eVEL9|5+aT(EZ&moY3r^2n=3t)4CI4z0YJ>=7=$z zXbiat)m2U##kz%G?AxuM<+UVWxzG+`nR;j|9BNR@vZFoRA3~2JUA5bzUOs;u&ivI{ zPhvY%)O7HqV@Y{j5VdNpUO?Q|e=x;+ufUfHd}{sQlv{iD!w(CrEP0K;zmZV6k9rQ% zmStFA8NMTSj;ry1^KnvIN~M+?X8|!;}_`VtMzB%Q3?HCHB5j61) z3jfJL>uP*jeaZdzL}~1Ve+dg{1sd#3q{yZVg7VZugI|(mJv{y2{33j~rjGsIUKvDg zX`ME{QdY}@lUq^kiFT1L#*MI zig%n2hs%Bt2>6x0KPK)EOY>sp+!)Q!KaM1Qnxkm($FOZ&lbkoehFEo;3#nRCmX=ATuc{B%byMNmfuHE;4Aq1lbCg5<*;BV5N2E6XFKTW+m}LWZAnEN9|1qMGcp zTQCicoz5ki_7IN*u<hXrUW+0%qj-BX0K|fez=6>#F>9TGhwW0Rd+l< z)(?9cRm-sHEx@JiEMnF$yC9YDu+lKGgOdMFQ>h@ot!U`%FSdJ!yGReek}^RLo$@~_ znhE%in+|OgF47&Q zF*ePv`lfXqz-apA^!)7Vp#sdnfZPYH5~OJOqYDc>dom7LfRYD6<^Ibg=cL0IGoyml zuf->-9H60>Lx+rYGTDVyb+sw5*>&ha(9?y9#>c^NFxM3oPX~j_@%7lc92l=q@pr&S z_>_@?yR?OSn#|zry7j=$4@k z06Bb>F&t8l(o?n_-pJ$4EP$e8-BUN42i(Wf)vB}zBn57VFW9-!1@jdcATqoga;o%u zP(I(lU_apE!UY5gN4H!8>)V&V5sT|dU^Vh)j^`gcWScPR{MmBX45Y@!coiKG`>K~t z+)Y2R9e))ooa|xeyZN^gBf8#-=y{olzk?Q}&srm2PpYmL-54F$|?ERVn9=P>l1_?DY1!^-p4aFI1++?mMMdE!etuAdw+ciVznemtiy zGqhl7(0R}mRYKV&pX|u*xeKb#?_fE~H_?9Yw4GZ}<2R=T^D?(UFAN<~7t zq`SLeD@Zq+Msm~L+{ydianA3ad;f$x2DO8|)|%^?^~C4f<|52Np^_{y8$HCG*Uio{ zF)S3+bbf84?|*j&;@pz+{(H5z%Q1p{kG{Fdb2qn^T~ik}-9B0WGbTTu{l=MI8s0n= zy+&WbO;FEw*l31HFLFN9gM7@Y+<5Mx=YIQ+T4pK_QwbVtB|fEI;6kXczm!LV5&U7! z<%5^6m`eyFTOF0YjJAJ0(}`;(#J7sOwwB7v1jcIu8@W__c<)MHB}|n2?|I+m0(fqsc(jhfIMp=`pr9`g^Rn2_aFX~wxoe-*K2}109>GKCFCW& z)t8a@tt@xi7chjY7B7nO`jq#tx@@=IUWDRqR63D|#R7z0v~XHnm+`5$fxA2II2XLl zWykC?l3&zB{Sv3-6Ny~aYr|yCc-H~s@5n`mrV4uk0^nnK|xpL^Z9N$3K0Kt2Db;io=PbIQ>6ncGv zEu{9LF&;EmmFF4n7R=D%&ua43u+Azn)5_vHezINTB#In*E*=%Kh1Qeom8>ab`sOGX zd3fwBCHV0ni8->SDFEfTuFuA|qBVeba^rWI`BUZ>*bv59%SC3_I{ONJte-q2Do1~9 znWdi6hMLq%(`F3nYaPkM4%!cVXX*x}#(NZhZS8CH8UZCKhVk6ZdFKyi)iWK^R?)(k zg%XTjR<%1^8V7s|-+v3r$NKtYj~&jjOyo3Oejk)TPWjQkN`cbPAEA0fNwf=bnN zA^y#Scg$WSJ!!OzGwp5OKHZ~K+KG`9y2>5_`WhoS-d&aU_GMJ>3R?G4{AeK&R8+%~7gT@B`wXX|-VqMwqr zlNKiX&kLal8QWy(EP(0$iw-s<;%?eh`X++oDdH}YyKTwG13E95Zsrb4`N|XP&lffr%LEXzI<9a>>_|02>+`i;s0 zc3q9gwLSloJQF9zD}Q#8^YxOGK=7rrP{Z)EI?-cHB^`|qPG!j3PW375!iR^8`Fvoh zlFynQJx&X_H44S(HAK@c9uh!14@f!yu|hn;tPh%`z!R4G+)4=)SBiftbsH&KLV=H9 zf>tEc@EOr#CMre}Qp$4vrSgX0#p_rX$ zbYrK+M=%6Xp`UgI5%yhPP_GPt$-rcn>el!;PnxY%PL*gWM=kIOpN=j%uzpJ?6ydz` z5%w7w{=@--FXz$MJ{KBla9TS^plKVL{s&8JONzciC|V|l+~$uF%o>yEKWZCr6ok8M zW&3gsl%V%B#l-$E4&b{pO|9&geWJHj!3-MKTWKawZt^tmIs$s3#Ux*zv4N~J+d;eL67Fv+h>?d7c>b#B~7$YEVb$qbEU z0&9wZZmUB*o^B4bN&v^sp+aXeMvEkvvZaY|^3}d8=y;d! z%9e08Pp*{yjRoofq;IHkFeO*5y+iH0tY>^eIMLY2XBRu-TwUj&77f&Qqzq!=uedZn z7TByG`ep#8RhAO<}BB@5r293Ob9_vt%D7wHKtj2VtpNKk?kvi)qHD%)L8;elYOke>CQT z|KKr$-S%&U-*ji{u@<*j#oHzfm|`qJWqx&qwFH5UDVv`^Zic`PmK^lu+RfMZ!7uD@ zh2qMBDa<+I>+vEaCdD)FS^mSv#d?zc5Wnc4eZ1re=?t5H>v$W~ zUd-7-8-U2mXD~|H3R?WByO0Z3ZRN4f4kW3A{j)8kOS^TVeG$2Wjl8~4J=@-@7@3vT!@hC4mUCibO3`aAh|9cc>;y2IVi`JPVO z89PH6ifnH~j>ad%QqeK&e3N|AUKHR{D(p21!fs<%90Bb$q2SWJ*Sa zc}r8}D3@=0rtv4#Bo%d6aQ8y>JaoXU8d%NbH>g<8DQpRhV@=J?@zRovk|1>C90z27 z51%hLv4W_Ry?1m{19I?{;wtKrY^B)qbG{H_79|8#F9%+E=NVx^0f9$89B}XRt^h{l zz&g7;CjoZNOlHV?p@wNOvq~)t$!PXl*QVd=6BZnrvw7B?Dj6bF_nX@=DDx_!0s`A9 zY71=x+y~H7!&Y^$i^vwL&9M_%b^B1g&mA_( z{dxx$51;ew&vaV1Kim~{rpE5X)T*Aok9sw~UAK*_ntM{HJ$D>%Ql0Tk%TYKhaLNJ%q#d>`Ml=j z5SSv+h+l;t=WN@x%Kh`Ck~S1uphz%TB0GfX9!(Ky1!;^E9O5L$dVGFTfaQ-Y#^$}i z1}FAS-wd&2tU;LuxsqAFP(uO*B%ts9pz~_n-_f{KD=PHkk-1H`(pd&Xu{Cyl$(O21 zn_C~<;hIN>v2c$r&PpdM^WNQE8a5Sk9{S|kMQw5I@T{EoTt|_J;+`sBFI3IytLeaX z!`->Hlpe406`Z=CoP(l}0?9a=&R9`@Ud z5R_;;2NiwHNN(j(nte#kqDSFa!VLWT5cP3Z4u_;UsAHyhNPOi))Chu$q=ADJLXCpQ z4Z~EiO6w>~E4JFf_@~W~0z80jmyRDH z@fD0x!)GIP?2l^3&q1Ids-s4$% z9JF3Mm!=XRfcQV$Q{y6aMyC4-R0L5sEW?(tSep)nUFDxnvc+zua|4M68y&hh)SGy* zEOwKOQEZDYr_Up~U`5NoaMI1s9XCcwUo^3^> zcSa;qN)>3GiUy}~9bALUq1?PkFvB__k5yvD0#n)e=u-`0bb09e^HCcvnD0ji2ZtFF zi3`&_O8_c)S;5Q%`Xi`p1%Ds}0(1rtV+MGA@Hya0I;u)QIxy0&u|uke{fxXX`(xKP zIm5~6>C_|oAG2_f@(M$3fPYIX;kwM;JwgJf$DTAO$SVC_M1u@1WM%y9S~Y8S_hXCg zAX4{%ejX{(u-8;0ZP^k&(r0DPQV}KJI=@%AI&qKp>@ zM~BLw_4=EdK)i%$Hh2X@hgROQunaQ&*ENAGE>;I;5Y z$!w7C1&5DpYmXx2Ngr|NU6Pa2xB;;zHU2PZj`Qpm@mH@Vx7Q>7O&BYXL#m5_tdy1C z;+?_bm!~No_i*zTk|TR*eyKzNBVt#}p`5ce&1Hu~V@U%2nyglCrn4?p`Y%}3llBX1 zi!#^I&F5}k=sk%NokF%hUwtC&K6$bFlo*>OTC+~}XPy($&^lPlXH9=(j7M{R(kmpm zCdaijtkqLII|)in`1kkhH}40Cj-6E1m1De(cO;e?`yG9_6W4&UQ4%b?8+)_deQ%Y1 zGYv`{1NrVR<=QOby+P{ca}+s4b-P?(3*Xs!v7wE3kw7*WByk}LQk|m7copFM)<}{Q zLJH>ABlYY`^=xrPtI5lqrAy86ZA<4zL*7fEPGjZ!rlHs-mEaLZ>~SE6wPuMrFO*n) zYLu0XygLtg^!#Nx%<0QCZD6rpg~rA$&&?8FG{m7yhNi=ymJg36Hm8CoXr*+D(JK7H?WIX| z9unVO5cCpA^m@axR#?&;ZUyBl*dz{TEWVMz`lAH6-!rwy_*`mDqNhQ$nl>A#tx|8X?xRu7LmO->W%kY&`G1O9L#+l@g z14hy-FkG!DHemu45RhHgbO+#>>*qSPhUg_oTIPl20?6N`G=C#{bmkkr>pcCFX(wTL z-)-(O7#F0~u`Mp1+F(y*nf9RO+Wvz1&5PCzFA)hxUMUhY>Nq*;D zd>6fO;tAwMNWSDJ!uR*fifVY496krN2OZp=aw>DryfEV+u7x)Np5YoF7QhRvh#LW= zWG&{Phn>C&Q zmrml?X-g@Wlg;kwz@m9Tyc1FQY9VNh>H%fl z<0FNX!d5^McZ-wzCrbVD$%ayT^==zMd3tAzQ`rQStdb z_zk^I8tw4cU!1SX)}w!Z7~$Sd29Gqvpc-+lvflgrO(DNn0{1SU+*yAM*)45amVPQ$ zGYqNg>e@C7-n8O0hsa={ts?Su(p$EGYPF^!J8ljn1lt$tQG|-zp8tY ze7@7fioJBkey-1RBhs9~Q_SKusFvHrShAnF7W8tDf4Zyu2Nn{@0FD$W#t)AQY`YH; zGuCQja(^zPVwFTU_*9H16?#^0Ez)7Y%irP=Q3xK9pP$1i}nY<7!vZ-)A3ZI zjkAH22k&j!m3il@g(_2WVXmGI-nLHr#RtE(8dG#Okt2yV@BTOM{wWJg>V<=SDl(PN zR~W!tj^;b{Ti}+xQ==-ZOI(<&jP&N24|*WYII$Cqr8V?=Rm@SWb-g4z*;?G#{CDND z&18eGffCe+yy4n!rob}j)CDS} zdQ6f4pG;wT2)kQg^NXl>BXYzAX|Wx@WjpqCY%{?m-{mE=2$rvZ1KV-%+(obCenSuo z)tBeduGW`D$nYYwAV|AU{NHHZ8J!0CbL?39Qq9Oxt3HPu%Em*pxjqde7c1U14u{^F zer+Zn6N-0P_FXPTfRikv96k>S>zGHJ68fqbSV^Y!bOUGP`8}f%TLZS}KGLB-;yzWU z=iA)#0B1(N*uX1tcEx}n#dGU*h|jgK{$)JVV7qJ&>Y;SF=`ci`5(%sfe9yv++w=-J zj#v1nbUxouXt~YcyFy)^h04p=J(G395j}uHl?7~^r_{CZ$%u>bN~c1Tnoj+M=MP z$F_Ydhb~;IWZ+#VCb8Bo%F+No$pE9`{yvt!_!&}Tqt?sqp`Z%8D?}SZH*#zE-};h5 zZ!|EORDfM+WSuQ`af~L@tJ?1*P5%n>J#O|FREe-^kzHV|7ga`3EWdg$?wZ;aI=q(a z1l^h2szgWho%95mU+i-D$TMIIcYM_ENr8RDZZ{Z0Z1DRr4Cl+3AFO~!Ib4CzEwt+G z<^9`VXt=K}8q%_BJal*3Xcc1q_RK+bI=Y8VpK)}CIX0)@-XqZOFNq38G{pDicQKD|1-qS%M7&TH#UWp6q@8IvO14~RQ^+oj z`!hwC!ZIWNc)&bvQ@ zdy32`U2Epxz+O=z!;LJ6a$8gWJ&gEiyl4Eo*ELf=wKzZbf7Sofa^1`8TR9pgV)vf_ z`!8ygvFXcB^~5MP%bYsevJwC6}{~FLYVn2<)YzMgLsuO`4D~`D#F`O3v zUd_OR4EM!wxZFk=P^u##;tQvT+f5u8<-H+5`#e6$y$73gb*wSf`OIi^^jYu##b($s`zTckR?Ry$E^N?wgwJ~6wbsOJG|5LqHO^tA3FR}RmMW!$!yNS zi&M3S$$@u<_N|u}VT?_g(VAu(%GY)yXy&EnK`$cw+D2RBFk{J&4vh%b2A)d;7_qj>4?|`WGW*c*2dulk8mZEyG z&&c#jEpzC=D3djf6sc480p6Z>g<=+ZNm4+7)cGs}C9vJ1*>A>Ii+C1)1KT-ID+pQd zvY+ZWL9_hlm>XDaZbbl`v-m***sd1gC=W`s1cJ(iq=)R;pH_U|H*~2k5zcwrBMzEQ zGaQ}@g4Bq^khpVJKF=j#Rtx)0Z4i%*k&L9tf6|>fq3g(d@LAE|`UB53*#|*Om0tvI z^@HbYbtfgx8NUohbCt`LodU3l?HVga^Bu(+I*u-=I#;WSVy!)aM$TiYM!mb^S`mRzK4BGO*Fs#-)J?!Adn36nNL1CevuVdwca`oO^s4LR&qUjoN<}bp>@02-y zB4r1n9tjtzi^5!jhlB&F~#&Iph!@OT;cb zKK23q2b&5j{~0KZ%jSa!Ejj)`|LTTYq~FHl!x2X+6#aRzPr{$9cEH;GmzM>0{?V?u z_Yo>fn8HAIB;ytVf`I+5mWzu-y7iyjYi$c`-U1%G}D9z#A&{4=1mSXSJDTkFJVt68h{t>tm z$vd983#Y6RQ6Up6_~`2gywjX1#=M%KxKrzbt~O34Q>4M{idd@vCy4it>YJw(9&h&w zue3qWXTjb9yUDjd>8VBF788{Z)g3iqXV+^mGrkk^EVA4 z1z~P0#9?=VvW+!hWhOSSBhb;$8|~XX8F=KP>5z)@c-M7)yIX(XgCDleRXC+NOJCrZ zrq-Nso0I?RM7G-;Oq?JlbnR{YHjd*N#_wXZm~8}^&^d5%W;WW*(tVw<5@+s8>!o!4{=x>#p(ma zt^a)6GV@}c14Xf-Kepbg_)gwv#_ydpDi*8gi}~6Pt?Z)GE1&UKD@CPtq{DCW&PH@L z!s{R}UA%Dgzy5YiJ#6EdL#Nf(=ZaI#$`zQOV9%}?`<6tjAI6SoG5&jVr4B|3Ktuu} zY7{3)l5cn^cUV+Ie=28~{O#H5$uu1|i0zl~+j!2d#mVw)ekxlsGu`>P_11CyutG;) zQU_;e6gYg5eb(z#FNcuRxeL!~iBrpXP{$99M`f_T3Y{55!|;bguNV(eczmee za%KKo{|9ubfvwU#0y8$`WOnXVPa0AE?gn>To|N9Ik|LS<(p!zcPZZiu9Ae0Sp&e-P zudY&R0LMPF1LwhrXT4c~@s(sm>a&`lfDoBj&IYH~&kv7M>^CCW{P~MDN|upt&X0C< z?N)*ce-t5URNn#dm3k#5rmV=u+3QF@MyHkJlyYOsB^9hRzi|AFwuB|fgO2{)@D=z1G0FTuz#N514m$eg0m3GbKc{VAm?B}~ z(cf`36OXP+>qmU*+iGtnRMK-0hhO(QiT+zP7|wK%%fO(oL2tjczSmEU6YFC%%4k07$Q z=qZiZ2|iosQ#Ez{=Uq4=3l|_pGs1KMlF_YQPUxc$lXxk5S{zQ-8EfrAvu;dT6#B%e zHz@>Cu9%f!#Yt*mFrOX5@@3WdVcxTglW8_jRBU|HXW{Jw(UJYJBKIDM3X2m*Owb=s z&k_odu4sHN$ih6t4;kzQ?`@fdjNh;soXKcB4DU$sx*tQeRZYiEimb&w3|<9VN*BoF zdXUI$@#&O&nHqnltolZ`&?rGtxcu*29jJ+rc&bOIx>xwTyVYFZ-J>;B?4=HUd=cxG zfXa_@qM*JULbxf9t-#2ZEH@MI4Uj`u*zQ-$8~2--;H;{w#Ue0`2TWQmQ=+N~xp%a=#8DZZ})6*aqGm;63$+Hg^?pwc@y6 zWi2eL4GfF1_7qGnN$ouHl#D`+$f*3L1wCLc`6c<{LnAKQPW z92mc!VypHb#KkqS)t$se8K24<12Bl@iYoV)Za{q7g4NKCA4=s9F<?n{^<78p&!>rzTrIVM?Tk!IEGjG@zX2tcc&2vdcj{I6V=-MaZw$oU zEq>0GmGO9Fo_pI0TG4v;y^#7)uadFkT~UX~+Oq%F?>dk7=x3~dDmJtJi=k=Xx;Dz$ z61;bqw8`o33)WA$Z5_jALRV>q^c+`3;7*MtVmZwb{Q+}o8SHm-qEHERG5qDHY#wG` z+uMM)L|>8TIAJv1U-@K>@bR^db3*JwT%%GHO}6L#jtzIo)*cVo{wNujJr$lS_}PA~ z`G%v{erLsMtu1R3<&kT&`b)8^uTR}vXv~DHqQfY!+PtjEK?SxgZ~BBpY&J`=S8fix z9vZ7}-|jYRqY>RA&uLW;mnv_uw%23Ql!8U&z;f2G-|2^WU_{sz`!SNZ;i{9dbks6~ zq%9UL2HY~7o3irO53m1tn38q}I6Y10zwWZEsnRy$*E?HFJXvFl+E;%`Ge4gTw9|m| zx6r--mHqk3Kv-+olQq>f1L@6Rro;gjCb1!u2nkgYiCm=vVdiXh4a7;_eC4|nX}P$M z&!4|om_S{__r4r>%73`%O_-r|q*pfYO6lJ2L<|-2zx2A+Uvz2L9Dg%av#AWZVij`sbdi-yxgLPt#FCH>|s!tymxXGZ^{y&cD#At4N7HO~gc z1+~~MZLx>_v-6S}mxX%*CGw~B^0w94<51e^x8Y+YNdad#KVqN59T=#dYzR-pP10~L zA#-4hpL^7bEIhYHu~5BGN3j23y0C7<^3^Evxioy8pjkvm_y~nS@p-vC#c+{j zRmQAXhG77^t5C1)@OqC&yv;DftR~FK^3E zq+lkAT?}AEbzfDyI4(BAwKo1cT7Gbo`&hV^sZ?}Q*6zkdT7Ig|s@YB#YLRX%aZ-Dz zCb-HqI4WIyCiWGmLT>A5jl=pkixW#rOQuF~XXr0Nd6>+cs_t3tlYz}PAUYd>?cVX{4M|P>p`Esa zTI`$w?j&~4Gv2f{P4|m4KO!t;|0hL;mEkH0KMpjr6Z^C<)=hUdHxJZl5{)(dVhj-# zkTw~%w2(IxD(W>2a8l9F-8=3n`5u0q!|f3%)d#di0#^m8{V7jBb>86Q$}{*NM`Z-w z`7!8zB}Y1c_n>Qq)kCv`(9HC}B)%O(+d+;n9$pgjm&tAnS{(iaqagxxtm4|JYPG<(|FZz0l)1u7{Y2{QNCzhZ&+SBhdx|25&fsU#V>l87vqdTg|YDJ$|vcGRz^e= z+{AxJ^~b{z)rVWCzfo=d$xg-{h8=}Le4gbja%4KGXWhXKO&6+sEH?S&Oa=ohU)Xf? z=*1SY^MCw@fIAlsHAnxbS}Hrs;Qc&$Eq4B9l9uh@;k4oF0 zPa>=!j5?1P@p@zuwbA!${=|NTM70d{8J3o(<6mYUb4NueT^{Ht1#l7^IjTmRRM`bqHDoF z+iZGO!N96)LVa{G*=C3vyeo6d9Uo5G!OoECg4btBZ<6+052PB?PdhWF2Y?cjQhzkN zX8F>@s$zV54TJY7>G?5@TPx|#SdEggMi3vIgr5#gq=o4LZ@DD=K9ChQKM>NQFxH{@Tq74BAw0C zXhwc_E-I+9l^7+U(az(U9b+-p`1h<@8B+8i((C9Bx-_yC&eST`TA`Pg_ophmUbyLN zjN7Y1LXUVqYT?A~A0e*UdY0;SN?lmti#~_WGNl5Az_>pWya-CX z%PucuMS4W8Ui~|{z4jbltF3k>81HI>t$>xgqhF(5LX3_Ds@rqvs&S7froIZzCCxJi zmI0M3gJAx!C#MapzW&#$IVl{*gGVOfNQipyG5a*#2|9V6APUI^~cXfs@x1x~ilL(0?OT3pXNqWqLp0MnWV|~B8v45xg0?6DHDic0f z>I(O*_ReV91qOe}-jaU1c%fP3Y7^eKM+*J?>D!`uF*}vF+}+ovkI2>}Um3n-X5Y** z{1PPKXB_A){-V}0*4<_D=Tq(PEJ?KPj{W`6i#FnfUc55+@9+EjJ4N*Im->R~ZIY_0 zgo2!0!FSjXIIXAU6p=S=b8WU^6!I@w^(F++FNHNUi6hADIxwCd`pUsJ3NohE$ZVbT z7*{$nK96Vk1#na8B3?1O@PAw8p51KnF%UAhz#VXnFWoB0yW~FcopgkwaUQvdX5J%< z*7)p^{TLm=l^0l0hUhEJTV`p5N9Oa74NOw%?#cgg{DDFoTlGa#r?6IaPrhIpXjf?3 zq~S3xvJR`Rn$7dnj^saBQK0v)7o0lj`Hb79(k=$|38TzJk~TNqw2An;pc;>HmEvq7 zN+po8Pw+mJR`~9yDDma>RsY50h`4!V1@l=6`S89HbJ1p^N0Y|(SjcSG%YN&n zSQ*!>FD^b2601Q;d89iyg#^o<dvRNrkFm@<}-g@73u)CIf-RcB!rpKIEFroLim_0?W--zAQZ3R0_AElUy(3 zI*SPZ)G(-MYvf}i{ulvF9(2NMX}yElcThjL)**>&#w!R5e_AD4_Lfs5wM8u=c zOOoEJ<*)s;qoY}rr`uTKqF=n%d5b3{ve`rvOK0HLZ1BdKBwf)s#_6B<;Y47o`ZV89 zIhk5DW4Xtf#{zc5JQpMA)pJz_55@NBA{XB@uyBomqzcAR-gCzBz7}Izp$vWsFDVo?KzY_U_gZusQc`vwc%Nj+*At|h?!(*A}w;%DrgRSxQ5S!ypVR^vx zsnUDxT&Iq8%7|aWN#@caLp4q0Q1;MGQp)I2v7wy^yd0s57#{mK0iI6=aK!mWFVKGC?{_g`nxai0>l0iGQT z7cHd`#uM#0ryFFCWq1l)gKInl`jRm-lN$y4lb7u(gf1`KNli9WV$B3M-Tm*k5-m^u zpMQ(9H+N#NJZ8eyY^%gYXikp9j195Lt-oH&nEot&RV0z*>ob8K{R?^@K7BiB-31v9 z9Fb{2Xf{5`UXQl>G7|XMqn`L1G({5ouim+CCW5TRZk)H`7FKf#fr+&Xy4-`V`g+rt zlIWrqUK(9pziyHNl>w zgBW}rJeBPJhJ7J?~yjr5`69*STl;(Ecd(lR@nW_>Or7PeJS2{rEHioypyo zaNs(_bDNN%Mp(Gw*gR<0z(sBH)P{#?NUSUAKYf3I_#T_FQG)x*$KbdNwY0Oyw?ufO zu;>E~HF{|%Izfe)`K0}MS66X_!GE{h9);1ULJtSz!FL8~+FcBOd5aq@!wFL7(Mq3ZIo z;qLkDSirD9q6pt#a=MydRa!{|j{M!dpQIsT^;ekWLX{=d!L&xuNWJ7_W`coqj;`F9 zRtMuP^nW*pJ@^-g3H1{f9XPlO7G_^0LY}2|2@4K7ExMl(m%#DPE&jSi;YPWED#V z74?KdG>o9h+>p~d-`geS=59-nhdB5p>17Sc&GI(#4zU#&??8gBRJ{_8)OwleK!sl$ z73*Ion5{Sf>7IpWO@T}C2&kKHpS?9T@Ys!Jez+6qj{Wy6W8?+7R?`p8d3ui%TwSe7 zH`|;PT9mlHX9>5C{*zo#$6Sk_?5xRCw06r0i1X)K?2kUAYz}mm?#P(!waM}rh@kHh z@eQHQm)1z)YI{L)=hdt34gMH$nr}GRidoy*M=6B6T0SECS#Fe`|8Vcm3?GykHPK7M zu$i9`i67~YxE;Qlvb||jV?6B4$At7jAOTwhxSM<<$_{=DkEgrYkyU*(M_3V}`_B0XgXxr4_#nSY0@ z;q|ASlySA5rA6;_V!v}=DyU=EItcjk4Lhbfr2of(=FoWQ%bGG6YN82}Og8~Tz}?-w zLGM35K)ynvvwpo*Ex`0w{1Zv&zgKuV-_70UV~@JlSKR*q0?msD_ZPcD6~V*68FIVnfA5`> z!fCo{q5@F?NaD~FP`bj9FxiH(v$cgHl0UxfKr!vwU8zxuLrlEADj5cdwO%(=?Zc)V zKOGDn^UQ9O^FAmlDmH**aPR{Z3nf-F7h8cWd16+OiU8O}0mtt~3}W&uHP-Ql)}4%X zRSVT-gaL)$~SjGeSymF_l zx%)uX+ zr$Gxen;gN}?$h|C zsHW65#YwMsP@xp-i{_8e!>vd&v)@9$FK!Ge{6Ia!_iHf{UU{aT+J$qHVuN#z%qDSM z&^OM8(je7}t$WVo(hz}=gnw zo=G!wEvcbkL`Q@0%%*d~5^RPms*QZmJ)t$M@p%8wPw)I%DoJU!6p=6!S{v3@%6 zO$U3c!Q6T8oQTZ;vc~f^joinD4HgS&8y&>a`H@Gs8q>O|JXJ=4RIn3_l%+m%-(y+9 zfL5LmMx8}yNk;zZ;Qn>i9ms0ijtfaxs{qOPD+|r}lJ8=?D|@N_g6_FBs&PZj3BtX? znLU!+u)1z!yrX2IzU+!^Mmyb0n?>)lH_>)7;t^pVV(IjvHY^DY%XnfliJ1D}q+D}O z052os5sUuPi*)#;sKwY?{BNz%k3lo|h9pwM$&etKuXf+yo?`pgPTJVi)9c#Jx0D7{ z#54Wt$Kh<9ECXmau(^U_YLudDxCfv2JQLr3ycNt%9mNNN@fe)eV`UYy#Qq1e%FC=_ zZj<+`Y&udWGBHbns{@mEY>OKn=}SKeR;6;zQz^Z7E92@Sr5rXhVvR@t*uFbEP{rvJ zA4hZa#ukCxI&L~O=ApgD4L+)He!z>-okLa=u|XAMa=b3RsI*$i=su_gIcL|5DC)~Z`@J1SC6yF%4#Xj!QzLrZ{Q zGGlpm160MXQ>-{rLtl7`4)&&W-E;L1KNREatGb-));C76suc(qxe)6<}Uaxsjy$ z3B;^ncn7^gi8jf0^V#LDKPlF5sBh*C=L zUDw){UNk01p*eyhb#@ZIQ*t+$ZvT8FRWWz-|$XxD$)a05DSO*p+A8-DG_fc19& z!1Lksg{?evmi`jY9@A=Vz+crZTZU`|_);GC{n423-AbgB9yasg6w@j5&q~*~hP&o%B_AZ<1G>;Pf zue#pWlTismTmP=E{HT@WxxTq6W}LQq`L}KlSF*T)UIl`r;9nkQnXH~2)RJrCOD8OR zkCmu5M(h{s&DbZjup07dqezMH0TVUaG}{fM!vDZzNYGwAe!7J^DpC6=91e$ngvL-j zmaV_b<%>OkzBZw%iJ;ayi7u9t6oo0W$&cQ6y@MHT*F+sG*B4VRxcj>0JoVf-9k81j z0Oa7$C*lLI>4*S4TD@stkQn&1uSz76SimdDST!dbyyZwmtuPl+h6QQpUV{=tFpZRt zSLq&l*QcZ?3U?P5HBU<7NJ*Jrc%jC>`NSn+FgqBQDx=aDyYRas?3?iwk0zKcmP! zc$i}MDz0+Pd5FKGag!41#bzV*`FQG{1p#DEM~)q!_8-} z_NJ@S5tO$GEdUV#Ja(&Yru;awZU0<~!Ol-msDMa1s9VhHtDdzZrIHS(Q2ZNn&;)1I zn>Ov%Mepu9-lRPNGHww+B#sASJf~pAmPCRHZW8mZ)B3wh?Nmm3R{?o( zf1;xOPjjmI_G-pG_MJ1(I}ouU9YC-bczw;suz3^(bsT*_hFpE6`7k9wHNO}$`+DTa z5?!|@P3alj+1Z&uO0@(&a2{wZU|`)Rt6AyF63YHWePJsy*mb@KBPA#Q_uEk;B)!%I z6MqHV6!n}GY82JHZ%Zdkygat9?vJJ~Uhu4xjaCwRI0d@%lgf|Atki%c@~kH&q%mNoasK(N#0{ zJnDJ;udgm2Qw^v8^C@%i6gL^L6#(=D_qh*%`X0N+DX^m$kly|9%;;=qQXL+}WiK#S z<#%`OxMxi_R|%kd*1c(Q{}ehfmK?L)79B6^f$S}X8@QAKq+518*;j` z1|Pjm#uPt+9m&;*?lznyl~4@-bG6nGwCl0gA)zvXo?WorIamH@oByoR&m+y3Ie`DIJS7%Yl|o8A>}4kR=NM z{Z*rpt=zCZ9sCu;Z(oH0nr~8FQ@z%-4whBV%g&Btw>c)uM&WA6>Bt%!@%H=wZkGQX ze!|t-OfY?KsfPV+PfYQ*`vz`Y!7?dudnEdxlVAj5JK3A(iZmNz{u}JZc>r0RgTVlc z4|yUb5G?G#{-qiz;&i^@&-G&$2 zvAX!ARGPGIkk-HT&g0CcrpduT)J#wvr2i{7c$30*hnGYuQbkLfT2RS2Ne z$;B|W)D19HH4AG%KQf*_d4H3<&w~<|lm6d3FcUlD2E;&!_yMn|Y*Mac0JOH7TC-J=?+YI)f7pWdndi z)749C`1kq@4u}Ev{x`4yuN?NVmTj{dUwL;yU@F`D`x~o~Y-V8Sc{F+t?mE zXdCFD)1ZSE-lh`)y(zA1gye|NpPvB8wkROtuxs{@Zqzyn(p8twLV$%?x`F2938xqq zN?vc`4x->4u-8fA1G6#J@U#CuBMX|FYoHci&`$r~e3UQc#u|U}-z%J#3P4o)e}9>M z_S7!GO;*Vls_zih7>4%8#}W&ZJ;W$TTp-FoC|PT``S=k`w|QW7 zH*o3k3G~(!DVQVJ55=r;HKDGVbp}3*w(F_^;&YDV$Y9eqERwI-1Bd*OLhNWTzv&plxw@TfQW>kASERrg0yrap&;EQA>G|A z-5}BpA`IQ#jYx?!LyvS0Lx=ni?(cl(?BBKba<9FNdEa^BzOVZVXC0v8GR^Yl3f8yV z$Z)MP8o(`U+NO8epC153u-9cU3iB+y4543*WTW;TnLzroHr@V*GvC|*$_0{Y`iM;< z-L%^dsvS4vyq0LQMuAkv%^DQSR^TD#?q$eIRy)v_K@sVEf zJvTP*N*hbyjp?j&_bjPKlB`U?F%geUS>||7Hi=9=kA-}T=OugVqIcD;IpP#OfVSwU5Nk-H<_YO?V=tz^9Jf~ z@YRhXfO(TD0xTGN9m2mH-Xf(#AoJ=qcs>6PSi3swfDWo)hBj`%js#3LY`(#CY&dGd zw|TGuBq0ZqBI8zqNMf$sLFzjY=JhW(?FT|)Ci~!|5Eu_Q95>u^y0Qk0-U%|dT6+&4 z`&hgphycM%SlvWte5HLxdkvY7bZ z!eZmfv@|sIo<|Hvi}c}F>km@T!ZrG7V6bh=SAX9`{uI6c%R418K&7sA>7F7l)BvOa z$Yn_B9jXp9OJx!}(RT3ouP7`fz0i*=bm=&k201T5A-AT8J)lb6(` z<3B*%CQ-E#rp;XmE4VS7g_-py3>YClzX$$8f52UGH|-YrIp;#EmruO+-YsjMp^+u55u?S&inMAMq~v*j1$&-V3+u-@)!_$J!- z4ndEABX=h33*6p`sV6$uag6@&vLKLaui>`;8)p`{1cEk%0cjgRR*0IfKwK8AuktFs z?Epokl>Hf40xdIjg87*C>2t7gTiUAG-N1bLY5U7Id0$`QHwAB!r1BJF2CGW!GR;#p z5>@k>ED0CR!K31}pMo!a*NuZ@YQr4tc6Ao^FM`odV1pw0S;NPQ2}vWo0+@Z zN+S!i(y&)%=0E%5tG7J}&#o#-te^D&8zPQOc@x1;oSB>Fk`(8JQe82rvHB5z`bK8F4yx~$il#D^kT>JGDUsMe&|DkL~ zC}mHSdKM8l$=U(W?j6NQJkcxjWpRl7gK>`H`6#BrXD)61o>*{eY;0`g$W%8MwkvZk zu-hGngHPa`KcaW6JsFRORiVBBw1u)~SrPR_TgH@w4^`v5JzELm0q!{jj2e$$9_avF zZ}0^Lc@%sOu1%r5X=sJdPhQFbDzez*9Tx$LzCKVdkB)0s8G3s~RjdunRYt~8gIY1B zT(uA1uykCK-v$G)CmHWNkOXy=W;uq7FbUf!XY0u5&a(>FA1{ULcy%p;2IE zYurz6zVMOtw|U0eO^w5I(^7&Rxnc!65Gx87upM&NN*I`dYgepz^iNCjXGU6YdEJ9s zn?W<=xxhtGYSoXo7Xf71pqaTwdFcO94tn>QC;0o+s$gT627(kl(Hl)<+;NXar)J!Q z=3akqFlZTv{4mvNAn4AHJ8=bK$rc!Z$fOJLhHE(Zs0c%~6B(+6YUL5CK z0kD(kGWr7G=P78pjvTF{y+w@9QlxX?z z0Pqc%rb>kq4O8Zv0HYW-=w@}@bz`doJI9U`QY2WrGmJ(OJXL3C-5s~!S`3AYU#%(? za#Rz3^8<^=(OX9GVCKU>bpJSE0C@g-m`T;j>@$*43H~XBk@jmuoq#5PBHTW3#vZn( zK`|&36Jt6UO?dyZRvPcIdJHGlpO^9UfMYYg!;UOlYNvy#VH_h+sLm&~Wb1Wv(f;BQn4Ku8SsgbC2 zAd;J239NFQFn?ioFMiYrLL*gIO)&tTsx5B`BEJlE)8STz-wcUHkKtCnR5E=tSl!8o zF;;9lHOK%vNvY9KZX%1B?n~{BrnUTl*NW{p8JttQ=SII1<3d{cvEOm_C9T+AV={|j z_*k@I$=0|as0w69ob-NK45{b(E{y1xEu<9;T}e>c*i#p6#^l~Mn1v8Z1*uEM*@L2)(H&$HhEd$xeJ z5AdQ)MEV9t&7)@51Cz7;g*(UVN7nrTI6~in+c`+@a2JExgOJw>06+!T>9>H^NpTk< z%04TfTaMmA4aA@j;hU{@+=epR(`%r^%AAo8GO5fmG3y8Y7--NozDP5hA8!%GS(djZ z`uX_bbmi`G`rR`THzFB4hevB4h5b8Jh$+T;AshkIQy(D8)2$ zb~B#?b=W|7xI+v_u;&Yn^f|yM_|~grU-bZ|V&C;BkZ+oscIUOJQE#Io2DO{kakU5k za<-7&g$eBK?E%m0{G7cR;2|n@Cj0~hoRj!0^!OB+2QP7SfJ7X?_=t=EnI@ltv)C)M z)-C&WTo-yfI^N{U_cj27bTf>rzkm^zZOHykD)B!bSEBei3>Ip#g_hPE{lVDldPDfO z@zrjFrWwJN`2%nx-XZk;wN}a)_JfH`cd&7k%>$5u`{CJQG{~-~HW^M0t{1BZcEPPV z);yP+xg_4tUQSHC)8nqpvPfOwe)K~Og0Io!^olmaNl7{V@5hp02qnA+T>X=L6y{!2 zfiBh%7?ei|;TuvJ8k+Z;eLr_I_eB4Xy!k8o!^43y@;%~KV&RFv%|3+1eM{5BTntI%`H>rf2rJcvBp?+bx)-!rrJ8mS`8QKeCL#Tyr>XZT=uT zj{HFgr*Z!9#EL%^M=F#(av%%u-@Qzr`5FeHu6m#q@l^BSNW$S%c=BXQke|Tuz05xd zDn%@+Sf+jN^(LvuJKIX*5xr)*jU|CKe|$L0bE#7guC^V4%tCfL$Vp39{>5`$NgdBF zBqO%i&}nFKAkVbw*Cp{-Qv3hHRp39m3L5ARYE{-)(9hp|J*sbd$im#+jCc3}^N0C4 z1Ig*dp){e-bZ#Isj+-&YrA+Mt)@L*;^)O>WL86qABKClAD?$I2jym!Zx;{ROpeZU(l|C@#Q^dySAEd9a&IP z-!!`{ryi!Sz14>>|9}9gKu6LwZ*IjG9IF4@ncmMqgd`YFvlwa5~gxf(l z|2=NFj{1PBn`jmx6Je}XK!VOxM}s@LQeI0GY#}Cy8z%X%X3uP?471raW@%Jb;9u=; zYC5A79VT#E{)8(d_^vIGz{%&Xv-fb$)Xrs zdP~wJQKZUZ%w64D-Qe%d*hN8|Mz}&(v)zqX`=(LFt*cM|Cc^(`@%-#D6JZi@##dr$ zF;-kvFJu$kf2AJDl!a^+-|(&W8?w}=L6vpQO7{~p*A=hoKLXY3w;D5bxU12~a`o9T zV#)o&b}Pc4_N+(C-HK?cbOpjVH1sbGH)QJHs+*knp^7j1_Wp2L@bj}1&V)F0pgw32 zv*2#xvCJ?id4X%Ut|Ppj4$Q=-Uq?Lt*M|}}%aQc7=B4XoRJ@Q`YnO{ne2&}BM&~ym zf^KQD=Gj=K9lb(sX&7c}FBI!np0_-JJ{hX z6K1srrSzpZC;y4s8}il5)xCr48CBA7@S@)(X)+4RZ^0P0A`8p?MbGy_&W|@Nr%^t- zxGG%71TcQUm`b9Ax96-&_)vT+kJ7pS{N(F_!x$=|9ng#mmmz3H)Bg`>EQ*(dN%KMx z`E&H268u$Mm7Z@iO)kbdI-!&jDo*+>nHDE@q#!nC=}a{zfUj|iO?>saW|0o!_+3-e za$K8IAMR(5d*Oti^aJ2r%g5WQHQXP{9;UAYDU-UJs~@cNygg<$?I)(qAiZo9bJk25Z|v}zc5vhc}Kg2_HjrB?wvlU5JKB0 zueH&Kge<}NkDw2_45jC|2n7*X#aV6!+8c`hhPye?g%s@rJv0jJe#8ol%EZ6>jpyDI zrQrLK2&9ri>t4&oc?rdsr-C_$_w_Q`fx&1dXNlH{2sYVVM}}(~F||1zz5>kOl+O7F zhpb(=T@`AvfFy*H^ZU)2ZvCHU7>kn^4{_kK<6&qdo@_xf47@`@q4LC^pLc1p1R;h^4P--pFteenMB z6$ZTv1`q?!3S5*kH!3~PpzmMEBr>{x68-~!cQ=&;(4MQrP4rtvB@%|B_NCH4{5C>= z+%UrKALFm+dE-ZzYkqb`kJSCM{(J4Z>j3y4M>oLVjof!wD&?Th>Ic&fxKKv-Omo;O zH-rB-wA~-wZ@F4#N^tM(E!{-#4$vCb*A}9;$*;acb0N!B8T?U|GT0%Ar}4F?!B4N# zT3UYf?L7hw;Rk0qAsW>tkJj^&s^X;lLhcKkP4T;JR~Qp5U6CihY>Xn=YCFYDhGNq? zla^esNoAfapNDgX{(C>(-$X_h%w=THJX9hJw&=;fXai`?3qS;MCy$2xTvz})tD1V> zFB`&3U#k(wU^2hfvL)NDKU;;#iiIzGIXmjFsVy=WD4LVe|7XR*<#zdm^v~6(!*PUO z$+JJeZ)wSaJzBp5s&sgboVGX2sL}YP-R;txXSwS4H2>Cz765sCH>obsstv#8g^S-| zER$-`KE5+;?GE=})B$0N%-y3*ZdF5NHQm`8uVR`pPPZq&LFc}Eqcs$fl#O)WCIvd? zegeRg%o+Q_Oj5~1LvKMSj8^_OkPuD<%0pFemeos`8hq|-*Ti<3;hOj~*iY5RBA=(A zEy;9WaH;FLlCc0C$6qK3;7ZB1ZYXMC3hamE?|JpglRPBzma@(MJgXZ4U%~NBj+wuG zQn4KNA?xF9#+CbKhnUwHWT}@GYw^5~`h~n|>~29)^{DudmpV z6uyj2e!bkxyB=F#xih6h`lss*UX|1uS?;^Pj4zk&wbBaef#HXEgNlioEz!} zEpIP@)%BV%NCpEjiERgn0bnE~;kwlQeqW4nz9n;s=|kTrn6rYF50D4|rB*REH8p{# zIiO3S3&K4=t#2Q`o7w!zlkRu6{&&rzpE!`)!;>*MoHDmA3Wnp8>#B^`?Li>#xrmAg z3H$``(oNIo{EtsN9*m-3d@TFMSC|g_xbjH{9e%Bt$zanQ6*oxVf{#aFTDGEDZ)><* zW(e#HY*v=DZewEFR&yEo?TNvt+z?$Fe4u##AL&&`Pe%l{WyrlR74IS~MnG=G8&v~A zyXAY)u#Zr#EvMAla`#849rxNn49hvfF;k3~$F?6ETk!B+n7BU}!USjVyB^uzp4z%) zhQKRh;B&XCPXX~2=+8BBFMb#0py8vqi8WylZ z&f0(b%+uB*5M_>TCR<9UdhRq^6gQz@o_4q;@0-fqvhpZ7Kg?Kj-t(YU+i{rl`n+Gb z4=pS$~cp-;`e6HPC-f zK~#x2)f114R#+~@T1f=UdQDRLyG3gNL-1kbiLu5gy(UI^!kxIux;juCr%d zV95j9xaiyw8TteR_-Ze>SulWmyLbEcJa7~#Iv9~kKpADl0)X$Nz+e?sWhJ&?LjD}* z4n78I_*OGgI8h1<~pEs{p1!P{hz11kNE&Vo}KmJ`^Rj=L%c z&ex(7+40{4v{^;~I|1v#=VDOrDD$j^RzL^b{ryoL8=vDE*ko4DC14>}+GLhkn zTdr}Afi;!nvJH1q$D!A5ncPD=c8ubo#UjO}fS4bdzkbK8_~)M}iQ-3^@iWQ{w2jXB zdE;9@uYk!lFqEU~(@ezo=yP`MHtdU-IZn&_JwnuT{rLAE#WmlZx%(+G0kz*z23IXT zmwNlLwUP9;75U#Iu{eMHK)B`rbObtD?@1v%H-6(tJOCKr-7d)O`aGrJ#(>v59sQ!P zhm!?`x$*ax?b-Z+kqmxbK#CF7X8>GOWNom_5G_x7tF?mNPkUYU&_~G*>fWuk9(c2W zn*&eRRyQP{FFF8#;}#a+L_hNeuErYpV#f$p|CliY+qB#?s{euqk)KA; zr;&OB$RAPN(C0RMjR?Gco zH`s&~DuSq&j>Z+%l4-vk2~xOCm&qxVmapvA87>>HwjwmE&Ywnqs0npMd(eT{l!E}j z9a5KD{q&YXi9NW^UX$`yE_?Ss#q2d-XGFj-p$p z1b7FCmcw#wW&$4aJ`E5VkU=7N(-rM(gjNy|ibgYvd0J#YunD$`f=~cX>5z1ur-1pIQk%k20 z8npy5beA>0oh{kE9;O?{;%>W>>n)GI(qR(rv?1tEmAzl+ff(!s5!!T5yMFruLp$K6 zeK!DGQ1}d-lcR+0>yxkE@yYM_zP~_~s!!BV1_C+tCzBi+0rTq4VKeqyG<;gs?7vSQ zINOcdx90&VauKR6%>rI%JV8!oFns4tBFx29l`x^AO zn#^d0AwsA$giTEylAVeVi0EDCntcy#>L{*W2+K2dIIql5kAB=B5$cS(vQ?wf?nMEv zA&i5oYX=?|hsm>Jhhc%-OpBTc?W9tYC2=~hz@d_AD;ol<<3s$QmJ3OotCMZi&WAw2 zhJDMIfi1XPle49<0~#=6O?{=iINUqktVpAFrk#=yU~Pgif|ro|OW+K+$2wq?qwug- zKY`*o?iRQr!HAG?3pm|Fe)}{0ca6(Lvi-F5SEL*t zo{~1gy{`9s>Pt8cX=<9dW%pdEC;ukPy0Y9EaL)@dz0`x~U?hJ#g?4pc_07tVGz;o< z(A;Nfw6)oM3hKQdu4ER^Y#VGK*vi9SSM8iD9~3*VZHqfc<8SjS!GqKc?;`&UB_nVz z0dNSal3qkhQB}2;Ia7iZh+W48q5J>9v=s~KXU#~ zFHW8{_a_h7`u^v6x`tr6$FwMU{1*u!*sk_K0M6njX*<0sr^R4b?{Wm$>M^wvJf|CHBbB zVlls&r|PR>k*(7%zU{Kg4yu`}zYkxf^vIMmD-_dIE_@0M`y(N)I`vAcb69v@QcrOI zr=tkm>PG$Y<^fIJ8bXR1(Xt|EdL^LIaKCBsUMr-#7tQ66id$s5yH?%a9;%HkqXTyeLYHul z6)kw5^Hfy$RDIN47Sk3x_ArqWckSZ@sXZbHJXNolyye#39$Dfs%RZSp-P3K1=Rn>R z$fMr}ze__Aw84?FjsuGPVG}U80CcopTO7a-65Nj<3`TI1wEzF$toqOF6_B+F5*C^C z#u`XzamP4po)BcB`Z_YVKsFTXm_4|rjf;|A%N9&9-Fu!=^34etEu6ryej}bTyox+# z&p9|x|53Q@&Vu=3IbK}Q^T?d|Itp}9~2AZ=WovA2eN}&WZ+C{B%^s3roEiWvQv7B&PPTCdy7-nvOp6-oOGJgp60Od)`qBkitmEMH1~aL^UN#;4nJPxm%7dd7 zomDyy7bIz6>Er+RV93Y8$x}Bj5I6HE(g-l8AFbmd8|CkD%;FPY&syfc8RR**ro<9s znw~^Wxb)nXHeORgpFdcXcE8XQr4Lf42jM8c8I3+!&)zNT!K#K+%xN`z1y=Q*XW0Pu zCfk1kKsQ5NeBDngysK3SDATx7RYy9QG1$(SoI|whL60E_16lPHD34lRdinFA7oe5< zT6~Wr_->lbBOBoWEZ|ku|2tC&-0BqDQr1;+?=*k^H8bYt$i^+jnGm!Wp{;w~g#%w> z$wH=+Em83o^^_Z$6O@wNw- z4;cU5Jut}F5YVyjlxx`xgn!*LsX8rw+Yk#n2gm%&$p6{6qUnva&KeA#rlWSu3umvL>r;f$O5s1DSQor~LoD zDU)@be0Y}B=QK&j19!@A@iNbzV0C{yxZOAI{5qMg=JAXn;TZ@#b53{&i8w}DJJR1J z+Rf8wVPIrU0X3~74B*mM#@mFNc41wz5(r`k2B`nf!DwW~nODwrEHP=_$#LZNU~kDm zfS)Nq5C98-L0pa-#QKKW%w3fMy~NN4KH*3Wj~SF}t?KAtcYi-0xTpNR2ER2olPsNq zck?oB_!od7*iryTe$|~E%<7|~vB56w{faRK*gbJ(tv`o=)6rqmGy^N!LJz8O`%A}y zI@SL8 z8!@s3Mtaj zN0!_93;#HyQdGsb@va!*avE29<1;7cD9yG+o={KlHaW5VSzOcw1^YQ9 zhB8jEHsYib2=9PNG$08{<$d2ku&eQidTyAH$zyWVf_;5-F?FlT`70W9z(CBTpD+Qq z<;2xGvI02}eIn2`{Uj;ZU(s-Zxvy$EM#8HXWA3FNY))17iNpTP`MKbG-bmV+y9gc3Ij$4aH0n=GQfJkd#(XV1D_7A0K^2?Ghj&% zo4m#f01;_x=8zct_~g>od$pgL7wwgEr=m^AgHiSQ%>MtCWzB!8FqT|KGARVA^3lvc znupl}_Y0HnxmY&MDKhn(6?Z8*JALtaa0_ahT<_@L$;#r^+RdBB#2>sO*ynQ1qqh}Q zE$XtUF}x?OQ#Mu#4Ly1$vB}?k*e@zBTLnzvg48zW9W_3F>TZp8AHfgxHW{%2W2nze z<~$3?3&(KjqdyTG=7Ye6Zq|7#E|OqEIf9I|5$6TgcHKgiub@^{DijCws&30#hzg*7 zfem!!Lx(Z7+GL~bDF}$BC^@vht-eM?nWatWCTS&CTc?2o<>l>!{>-HoP?`cQ;-+6w zuQ=1tBW!H&n>OLo;0P1S!l^HBeJ48(&bBmg$nj-l9>c-0s69-8lK|(L-8c7d9S+on`~*n?|hKSn=0M zd^asPV+gs1cBvOSCrxxuN=~25hYz!S6*W9L_OSS<6Qsc1GIFhzLaokjo5}w(nA{$` z6Ju~lX?twtIk~v}`VWQr=g-GrvJWVe^wgy^X~Pb^`078WrqnpSK_6bC+sbzh96yCj za__XncRYQ-xbCZM$=7BcC#gTuG)nH|4h6qJp#?y(AT$Hr9kO-p2-eH7Qqgd^DbWL9 z!AKQOVCN(xu=gkrvhySBjj9A-=!m^miV&s_lLv|iASFrJgVv93UZlzKFSdE}gQKG8 z2Rb_eV1d3E&63;YT}-#B1rQ)}5_Q~w3i?WI9b_-RzP_Hm-k^02Fnd0Im$s$atk7ht zFlHkLU2+2p(?bhIjS$$#apSbh^>^x+p-rE^LFDI^{p8)w3+T{F*7{i>6auVN&{V1c0@E?99S6qt@_fSO-r z4XsNgp|Ax}+WQS%Vq02Vm0G9?pqj4SY>ZGz82iCyUoyv|COcI4Mz|c9@vE;vD4t|( zi=wA$TLIXwGux;00h#HC7%Iiy$+d8`X{ZBR>xQlA6!E&nmHp1i=(Glm9x0D8iK446k|YjKNo; z7(vOG^6lU%=OZX6yRTgU8!=r-Nn`Jh#8PiV1_E$XDjm5OT;@T-JP>KTtdYwN-x~z@K(v|TKz5mY3*4jGqEf!u5~#R97~LxXEG-ux*Z~Y_ z4Fxy3g53;xUj!UrI!UOI_+tp`s&y#k!HY5&kXo`C_CiP6>g0wIfDTl(qg zsiNLX3`88bZQ;uSI8{ztzs#3TL1a1%C(@r)udlyr{@s}+h(jkg*UqU$!_!z6aeY>! zyWYf1Nam>6Py(Zi8g`~kQucLHFZv4Zb&Fnw^zl(+}V_Pg{PWMx%iux;7&#~0Ju5*fQV+n|t66TUG;IgxEOQ7j{kt14noTxPhWWG`*u658kUcVQhR7x-Ga?fqr$FGJr~ZRQZ%ud4ZmAR)h1C7?Ymf~%JoKp%EClE)H1lTlJ)HG9)n>d&!1}~LxIv_92_kU zFxXfhzL3-)U+F`*L^G6YsV~IlLg9SDK3hZO0@l?}n!yIqhRevKph1mr(n5nYzHPQ z?|CZ0MKCflLQk#T3OpQ0CI=pIYNaF5Y@eK*yyoB#|L_4?q0~GcbUO0ONKyC`@(&vi zg=t+=rg3uXdo<5wjpF7kt4NFkZVD)rnvOIvJ;=MoO4Altd01#o4P zfhM4R3T`^-@-rl7M+dghtOBZ(>)IKZUxenp;vt3>tLU5V#( zCuYMp(xx0jH5rd4qcY7DW&Ty}wSglNU+&owm~=<0mub%`QKg%wR4;jx5{<-~SA(x3=Nl4;`YvAmr z=<_bP=)v*%mUk4<72Xg26cCUKj2*-}oM~p@p~2MyRwv-)#r<0hX!0YP9ZSAYjXA0D z;|Z$js`8}agmF^m=|@?KBx)Dst+D>8 zdz0%4x$7S-gIecE9ZWJ#Hi$7r8pm|N;jQoGQi@~)?!W~=!huFLOi8Z;aaSIw7eL&2 z;7Zwe6hT1E`4mbE)gwZqkCn>kj%7sZLdEy<#e2^))dPbbe5;o7I`yV|S|kQ}l>OTH z`AbisB6?DkAJvQUY+LsEE}!?`YZ@SH{Y5K&{=|8Era$ zKYzs)E4d7Kms%MEMs%Qxo=yh{-`ecEC-tz|%?MQeCi9+T(Z~5DK;=>P9EPFK%u3=i zALFq;b+A6T#+D@D@m`0eLIvYczE7^@)lo3K#SEp9R50PIYn`?H?rhhKAB}H8Y?Vn{ zX4zPm=5@P7yi>dQ?@C}usGwF})dDPDG4HNxph$BS`5E-Ov`7Llk6b?osaeOZv@{<;X@Qyh5~fQrEmF7{_o0u%N$GhyY=j zzsPm4@-vgtj5VKP1XTz&Ne0@)5NM_arBvyQB+LFsfBGM(D7X|apUk}xT-tEhPFX(A z8Q1ihS_O^-Z>W^_B=K&)NPfh9TPa)cJu?h$Tr zvw58e>}%N*QN!+o>eWjv-D#U7V4FVQP%v|*5~Yx~2$0Rv zPAMzTZ)ZKPcp86P?%$G0N+Rp8+z(t1hTxG`JtW|<^#A&9Thlti)qIQ?`V7<6cai-| z^O#4y^Ez|yl$KMUM=>V>zw(FJUsR49_$8|8xevd7al*-_B8e459>66(`~2v0;620@ zEOjTHy_&tbI&C2%W#QoJWNvz7$h~PK%PRRSuoeNI-s_BT*SpE zQyO~YfhkBHr8UaLG-U3j=N_d=ushi4P(4Bdw8FfTFYJPIgvPsOj7F#UI3_r9t9pX` zaUoyc6Ol&FsWVILeA1GSaOwSeX$vj7Nr}YmW0bCCN{Q?#7ZqXH->z{w!@ z2TjZ=7U$_YQ5bwLeiejBwWcxFl9Q89YU?^fHO1eb^w(x=Qr3)hn`xU#v)a?`Apd5) zF#y#Um`59H-j!}SIXN!%r8Hhk>TgjL>QqG0-%pB$$d0X~WQ!{AynitfV``^>u3$Me z;StjJws50JKmF!r8z=rd;eF>!cRG>5I_f7QRTEVzQt0Y%*akvMg@iOxTzoG!Urf%C zmo8xX3_)78RCDyCqP8*6pT(U%|jV4i-l$@8XMr^egTdDe* zcp=X8wsq@++ngwSW3IP1(;->F_KH5C2;Nt87CcT_F)8FP^DZnhdqff4pCDNOv&=j9 z^P10^j9r^%HNs2kSK9~b$grO2H#bdSh5;BJGB4T7??(#Hwo{BE4vSUo9w>OLAc0QL zmOE4w;oM*mUU2L5DPi*D_#oSn?aMG(+0KYo-Y)=_?2&w=ioJ_$EV;JOBq;ZoES_^O z{0DgtWbP>RVBhQt%!qXPN|Y&O^VMDQI;@j*Ig~%9L#VDZ5ERTQp8yu{GLHAyYn<1D z;_=Q&XlGM!0PeICV)wz|P6YpEh)NC(0Sd4eB?H8%>!U#=5MZefY#8=zpn-q6HNb5o z_U&vmfsc%%7iEBlRNni&w&2T~HHRODdxY*4?22>+*p$|N+Q(UVy!)g)cFfVR$M=z< zVXPXEU>aO{+w?yT3JR+!czE19qw=m;d?l04lYD#v>X`AWqtJ@y!7m?vT$7@inY1L+ zy8f9NbBCtfVDd;@-+C*$>*I+}vDi>yVwMcqy7M1HT(K>g2@u;XKjf38ZPLT|Vg-;({9yurzCS^G8A{(17!ZuHP&NK|86 z=5xVIE!h{iRDJ*0H8`=(RTtxdK3?2;)u#^Q6ROA?;3xH7pMx0mjbOZMe+Ak)pqtG% zJh_m&#xP;qJ}4gbNibyQ$#;3%ueiukxuJbCbXRR9NU`sH{G4AWW#MfYF%g`vH6iqQ zUE@$y&NQ_f+naDtWW)alUKnAainUN}A?s3LxXETR0+hb=oQ($s*2UN&8vzIbnrzM` z-_qxWR|NfGU53sSwyBCVQ`$Byk4-hFhI)EjSzT>sK1s)uIPy74ysV9T`amkOTH&TN zgnqx`L4w4H$Vv4{&h}@HRp>Dw#a{;Bj_F^zLuM=- zP6iH%DYTvuP938d%n-d8a!N!Gy2I=1tY&flAaNd?m}b1;N>iN_XN5zR|j8NEaacT0!Mh5IhXHN7ZoJK7fv=!t* zp!R{jf_z^2NzaoOd7uvKAIK3{dr*8ZUeHz-io2QbA?@_(h187a`si(X!oZ7x?Y8hq zW8D*90-95EduBcB?$qt0>`P6dQxCS(N8x<4j!J~2mDbHLgy%m;GoyITAwbMb_Zq1| z>NW`R9ZAEQaC^-h-20XpT4#A*V6T@8AK1|;zm}1(?Fr%oK(R?RsDUR)q0Txo>|5|=cXPEGg8koRNhV^1l}>=hl?-T?Rh;o$bVBU=KPFrqAmMRCc%;(GvV3= zLZD%zV_mPWx_iGhNic+rKMYkE-K2H05?Uzj|*7CwqpD;rMn|<>4Wv92ePZ~@C zgN0G2sb)d;KSM2p&G+MO93xK3;bt+F@3LZ|qk~bQt63isRjK=Wb6)}GrSn3nG2Yt% zF#lklP>C@83q~y7%Tp?RH$M)W1|$Wxl#D=bSJ2RpXMzrTA47m&W1)U95~}jUVpL8+3E`uV0_sGXPkhh~Rwn1$e8|{Hm zgtJ&FjS^V1uzSe<2x-IAHz^!=!p+6icQUO9s3Q8~`Le+FD32O1!q)e~ICH+j&)c15 z;$i7)<@U8L421I7d;d4J+~foYJQbGHbFUKh$M-uqMQwwd!KM9TDPd4erSlt=dUaB$9U+}Eo#HBzY4 zk}_QZ7i7G`A@8yT8pMM`^M=gzpfwJI4SrR$^KQ|O?_jIrUWsNdI2IpR2)m~DbtU&1 zI6#LV2l>c*=#sb01tCZ$v2{9m?9x21h$jdjbc!EDnq_{!uYa)io``S_S%q%rvhwvi zE}IwDn&%xG-skG=T#WUx$pk&8PY74Ph*Q?~Zc`N8Y$+^oL`C5I=d#I&B3Q!eejY0c zcwmR#zFkE*U@Xq~COZgs+PRW30<2vRkKQp|7m!03b6b0sc1jnaO!t%(D_37X2w>I# zA_}T~XMHMw1FcIVkob}CU@KjC^PqhKEqiPCelD&7Y=y~9XUXhq8Ch8je zWI`D-G~Am?BM{%9dL821VP*H)Tkm98B)hGAWo6URd++$xffsjYb-Gp|^!~QUv)pcF zTCt_1M`A&kXnuTZR5`exu^-)_XU{#mzwL>QTsw58I$*OWQpm9XEVzn#I?C!7$D|O7 zw0Bu+9eavaOq0*Yv!k{1HhF@XlWT;)CBM#De-)cT#6GzF1b0b0{ zB2=`p9Y|@PMmsT=i&KdJ>X;ax;3zeqOJ+fo3hm<#`AoIA(#Yy%Ho_SaEDWWc8XzMS z`7z2dBkcJA$6cueq0|24bd`+cT9&CMn*(a#q{z`=jBb`Y*-H-v#A1xVxoVb&$mDLz zewvqk8`1Y>V4bMJxDz7+yF+tms5c!G_sEz95-fQQzjqI%I}&vOo1Lwl9TM6uBtT*Z zTMby8#Ky+D)F<(~>>FL|FErR(wXQTp*)-|~=Y)Ufu(+L>f$!NYQa;JPXt0^e#RwqOANe&upr85OGkQ}BgbzK*&7drjidmaH9tlxxN1)5(sxl` zTpOZK%_weE=rJ3URSXdy@jHk7K_F0|)0+B1@O{M@o0bOg8{dC;6*<+cvX1G8#;NNK zUY5c76M+gANP~clQe`YK!4WGt5m;)$QVHtIN)6Ja0PL^x4s#JqZKc@C))PLh~rDKISaaM_!~SJSX2T=G8E9GPn-T*~q(tMWi@ z8mzW%GE@9UW+q=Gwx)CN18E^+bMaHK&2JQxBHNL*cvm92*FVlId+XJHb|vl zKG=zzXrn0@Xg{H;Fi~_rs4DRCIH}p%_>TfHyDvKGSNCR%`AODfh`v9@*o3Nhty{hr zhjUrYB}VSaRVd!s<8i=@x6AEhi>;quUVaX8J#(`2;;yDC`1cbCf$<86*`8CPqx7+M z#$E&76uh?mRuv_eOK09gF_W`%_sQ=J4*zD1?7_qF*5i9i%Vu8ju96E}n#o;n$&1;h zro7qMOFba!J3eY2zR!+-+U~T4xyS3LDIQ{_rB-@=Uur&eq$l)La?pqhi8(>ZU}^cI z5oVaUN~v1Jr^i9T+e^vDuMTR?8+z+H&$vGl!CIM4h{P}}PF_)`E__(s$y2iM)Df93 zekn8@*)?t37>qf(h}q#hePXv=IN9R%?nRO5^AgFctuMI!BM!@HFTI5E@C_OsuC1)| z9HOB+KdLd+wY|skbR}{7!fPPVcSzy_)6-jH%`YkZ@(G&itF3sS^MU7BMD#+8>Yke*|p|?D-O7o9{N`(m9n<;VtoXY z5@7Jgsbg+tW~Nl$*tnV`C|L50xbv);cA`r8yNPA-=MkFxS4)KA12-^~drZ&Q9HLO^ z`*}Gi*%QLcynzV&wT_b*rU{?8N-ma3n%X8DjhL(xY=aq?Yq2e@8vWx^X z;3;x089dpSq<{VYSUT&dDxa^5(;!F)(kV(vONpeUh;(;LH(a{AQIReI>Fy3m=?>`- zflJ5b(!9g>_x_=>l*L+)cV?b5=j{F2cEf5n@`$lmLpSR`5dAh^2aM)2jlVD|`CmWI zIfgAC50}9fA~1H=M@TSErRRwIHbX~l`#RDjl^%@p&%?Q%<`%(qUIP7@VxW4FDw#%O z_R8K^W|3kwX-+HrS(6cw{CfUsSD_#6MZCt}I{#|qw<&d5JY!4M% ztafrJh#Y#o&PVOAULjM-fQZV@grg)8;TZP`ivHiB82s)f1`_a40Rb}&23e$0%($`A zOGMVM(j4=KiQ3yCC2*^1+ZO%+!J74t0H@7DGGUwW0V|~IJIZgnP6;9MCD+A%trl0? z?+%{$GI`3$K@P%C;>Dba#8tnnFIZP>0pf!ZSRV-c3w2Rnzdi$xECUA0ONaIN2>r3K zlT*$E(ViNtKWSf_w%Acy=HOZQ5X`>#F*2@iouT-mk<>Y*i{|;_q~*#*^PHT=ji-Wr zP#^q*UY@!F)rwZ>0RvboUly>A*jX-HA{UZURE(63fLAG;uQA9Xk! zvZel~cGS%Ci6|y+k)xu>ID)u8L=i0XIGfWEn0cA z)xV3DFT?u5jTZzR@2>AJzYKbMclb2jX=hW?8s#Y_Coa0)T^77Ic`?eZrfI{J*SZvq zHdLpHUPqgeNxp1Rger<45Lr1IIG21Jj3{z@Z{K& zM}H3dIJ`Wf{WwM$NmH9PrdN2hDT{q=-GG?YYd1 z6}cz2=8$$rB>C!oWv6Zll^V=&tOZg$&08ds*xq%t1YoJ#^yOUM{v2O_Qwa zkhE0zxUa@Zs0n?H5mxsPfXFLs3ZOhVWLO#yKZ*bk-a=3wIz?Z)~va8*r($tnLLD$P_ z?PSlFEC^5G5U@a;=I-~p+m)#*^F+?H7ZvROS3>1eyIjD)O@r~H!ytsxe9uLBRpT9H z{J;PMceNH>YXH023{eok&Jg&ur8( z?&uPOM~v`xe+7ULT3Wh<8VLrrB&IDHo=mf39Nkd(Uh)STqO~sTPXF$bj1i+}8Y;TE zWBJOJ7{+HNC+71DBiWPh@TH`C!}H`_=}Ak%&{ne;GHR_v{EesLPwbi(YKin&KRvPj zW8*wgsv2n{<<*`zWaY;{61`V!LKJ0{<;m${XxNHTSar}xYskyIG76rktLrEA?_9yJ z%A%cZ9dNJt&|gNtmkh{lRTXhYG#Yn9Kj`}i3b%(67z5-V3a*=e({-s%@Yd{CeJ-WY z)M^>8pYgAWHRXJ*rcBHjh3iA?9E5voJVoEyqVZ)U^2aL|YI^9uBNW7jnhwpG&7xT9UKXxsx zdlZLrF`( zIpca6sV9c8|LM1>d)XkCQr(TN?DgEx>)sD?_b$CEQ1P*nG6W4D1aMSju|;8gHY$p3;G?P-MxP-Myv=e- zsNEd->CAEkUlDndSYK;}6jd*Vspxw?;W7%;DaQ^gTqt-H6o&ysYWXJ_rZZM)Fs}d; z@sYH*4K1v4PZTq9wr^CKwq2KyLj(=5%7Bg=u#b}J2%n=XBI#iAbXolU_3b4SDr$UK zrF@7t#E0a&M~lu-F&UG};T?z5zMoSm%x`+FI0F4Ekh?}n zzAmlu2W8qL>vpleY}wW_5(FI9L0`U#XU2uNamBtmd#>GE5%>8_X~j-5=ath)GAk}G z!B#|)#FK!Sh3y=a7QwHl`*>SPXC^~>s%$OBkmXlQ)EW0I5oAhNg~N?e;bQi%>$B44 zisv#)JA=8`5317i3CDR@RMXo!XLp6ih=pHDYZ3Iq(tv}1=ops4c z@l%E@nK2A(7mn#^n2v7I6QiGbsL_ZSF#GuA6(&8tKkeB<1GFPyBDnW=?RWyV<;%Kr-tKwg9qaO-3VIntItNXB-(mX8fz&y)Ill z!obSnte6}rIW(pz+oJ1jwWOqyZLaXa%CtDjIkCGP%I}JE2DTq`gO5qr$;76$cIsvR zl*GP|5(v#kDfHHlPzTvZ+We&TW%UYq-+!BF4GOTuvSo7cY3j_sSCHnHFQb_$ZqVY| zpmOnSonb1&bmTWk7mnNgA!(>Lovr_U%BZ@W+=n_o!uN5Rb1eQ;>K=%odeEICd?UU? z5{RI#F{&C=A(Lm+2nf4I0cb_Z%?`Vf#YNgdn(f|h{ULcWsjS&*Hf#3!9--TrI{2^w zUKxxu7H<_|%VgGCc3*F?H&LmcHoWz(XKb?yPH?-zGjs&c<&Q)pUrCcm=m&^GQUK^o z%m@waHHidcn6U2m#scO(C~rapKmMJ8Z>w|YCS&#oVv^t637Y>rWNs%=vFK09rsFwI z0#Q%IP)oc%Rwx zo9ltnoq*B4$w|vcA(Nq(8r)-on_hh4er_Xyhr$;dWJHo2##us-!4<4f=Rd#Rfu?Rh z1p^KfZaL6}mD3kDGMXR+LGLy2rEXGl?`Q7t(tW??>r9uME>*t$%8IYjHqnDZmh0Bl z5v@&}wU>_G+Qbk0Xp0I`ODbg(LWNptnqd~6s#uO5-+vcK2BJ*V>3#gJD`8(!GGrFM zMEIE#(l@alQ(khKwd+_-dihmF5Te$Ri$;-_=}^tdR0&oV6|qBT?u{$Di&w)$kdkMfGfj^|+;Jf2B+R8kHG zak|uqoDJbYE|hhAm`Xty{DD$03rlvb%OItVYxXRiuMc8$R9J<(JYjo#p`ZNb)Prti zI?5sjO!PfR#AwZFRh7enpm>uut{YvLDw0u}@j?WDoyxWixt?yd`(hF z8A7XEbV9qhWAV4`tzc;)Lwu!4zf$XQ*JMhI`{O!&ulfR#V~7XJX8=-gdgmehoF7T3 zl$?sn)bU{jwC;D1#9r80ScJ3c)K`8UB6>Oa&)Ak@w=p0OXov$$Rf#_chL-^`2`CFb4)oF+zvI+8egx#mgMO8<&|MwnXqJ!_|xY22zkh`>o)j0C7b?RU(|(47P~Um zXD(Q2c3g=##AxHzIa7mq=`&}g$C>tF%h7O(9PNSjqWe?%_^bzhN6fP` zR$#!4D#83ys%-dF{LV5@Vq1=pXohzxBEp)e+5&GYi%Ze?6AoRM<%B#taq8sn#Syp; zR*Q`UZMNVpXG#ioz%)|&iOTOh|5tzUr`6f&!y}_Dj-;t!IuJz#)LrPdc8}aMLXMLc zJ|d>EAw6j&i~qt=-ho0YC(%O;Lf!1-NLycl&x3R(OB_68ngcB)2!Rnr)rlA=?j^~X z0LB9xIceCY`*E+L#snz)u}HewRon)Z&;G}%HO^B zNlm}aLRCd?o^OsWP~alLTuMV>fPxRK&D7i&pkf6xu6fCcFnv%5WwONiG&l4c>iVMkxBe zFxKhM-;pwmn#0@yl_{fF`dx~nGlNRyV)ssOJ}1c1tUt`SJ7#=FaWmpU)CV$^@pIJl zJ6l=@rjtQLmTHv1Z~Q0Pt}s6ybHkH(Lw58V>Tt|pcL_qD7pK7#XtQ`v>a}R&J{CXJ zndg1tQ)b6SGC;F?g@5j%l*s)>g+B9&=2&uV30e>S>ybXY?Lu8qX+`Ht%1eZ-a1oa& zWiNzwt%^gMBZ90e?&zwF_qay?Q+y@?#phW_6PZS5kMj)3dXq2MW?|P2!-WUG=1gg0kP}%OF5>M6`?!VP*OHWr0BsQj8 ztvU*LrbB(LvRM?KPvvxrpRJXnAE9yhl1IM$()P4EF836btnfB~4cbuDal|=M>m5;u zWKT*LY&pRjRGn*u!?USSJmhVK6*ga-k-~lKZnOA&!eTY@f>1cZG@|taExgNY6GejV zpZ2XbOu>b=mQ5rHSa@pKiGrKN_BE5)hqoHV#vFON|HBeRq_`3g{}ZaQ?f2AlUHN99 zujy2&snM#=Y%`i((_Qgv0Rvy#XI0QKj3FF;8Ro z-astD=TBjUKR1snoy09`{aCGLatWM7&(D{hW_FWC!MNDeJ#sYJZd@-uJza=B>sA6 z^Y0uYWqNdv0?dm>KYHm{idG<7fIVad_K^HnSe9II15|eSL~%_J+F%r@6spYrR|F$3 zE5Pe@@pYNfok8JYZaCSM#hZ^|am|bYLky>$-aMKQXtPCz_llNdf^E31=(Kr7szL!0 zwADhk&I>nO)Dp(ET6J&l;*VPydlu@AiqPT6u5|&tU(N??aTuv;IbsXy1f#EYH=5|; zC9-SPVf9f(#@1t_dk1&9$Ss`=XCTX-oW?V5Q1FoF8Fog--zQ;6FlblZa`uzp-` zXI)*OxMHlH5*>kU-{S%yDpqINJp=l~gUyK?Gh@sM;pNMhz{B?lCEMG>BGz|XhAjEs z9Dpr0#wdvjqnd~n%#1S&%Jih>o4AQ5-x;KL;clOnNEmVFBbCp`4T7+8tcr%0F)T%6esZwMdm2~UZ!>e2-${sn_)_C&HoV{c z^d2+XJ}~cWiul5BDyV>MW@_{c9>!<;M&$iTn_E5+rR zfANQOb)PyhiUQE((q(&0_6W6I1QWMtodQq`05$*n2+tJRQ09tOd_}2tPZ%^6QqaA# zvpav`anP>cC1_TEaM`kYu>F!c!UOW}Ook@1gd`p^%~yG7XJq%W1PmJw`Z6 zp{X}%Z-el^wWOE5VT)KTNosDuu8w;@Xos3){iNp zl#?T1d&Pv2qmZxP$ve_lKeGeRYvYF4*yU32di=g0?frgqYLrL41womiwot0nRnO}E z(0bh}t3oOAHC#gWj=(h>rTOVsi|uC~lS)1r41;+|x%C_$-+zDW7@HFHCWK~~_rK3` zw2yFlno+ybB3lL*o8F5XBd|~^m5Pl->id@DoH&qSLeEd`ZhX0GaRM1NKUA1#LH%g6 zFZP-zDjB~jo_+Uh%outtTBb@yP5E_Tx}03$?E&8)1IRo+Lb^9pFW<9StWs;!FJNC7 znxtp*i;xiODh~P5`$Ly!PiSSss1T&*fNc!iG}GLIY78Pvz=sEpXV{C^Z31qGrr?B@ zAt|l5zB)zshtxPdYnBewtONs+Dp2WyNRT%r{V5*>R;o^K-PRhR=BOgX<=9}@igFZ9QBn4|5giliL_l4eF8i5tSHrRQj&Xsze`XwsD ztHRAN2)lqhyJ2>GQ+(<4tIm9r-*%~fj+ATb=b^;cN81x0sJ8@GuW*1(D4Wt+mzb@3 zooY=~V^{R`8t+;jaVJU0zKrw|5;AWxFA6(V4~Y+1db|VL3yvArpg0>kzn+xmc9&EG zXJZB4r>kB53ZBbtKkrLF=qYzA=GI0?BXSdsddn`gbozdPfzNC8dz8QIc}qrNMk4Ab zKS|efj(smGbzDlvMIJdGT2`XmK$a$5?#bCEe8^?(XI17~^%BAdGqe@l+lFU^@r*fa z=NwA<0@QT1yR@%_zq+Ttf8zT3yMIB5@Q1RNgB@G%&FxjgF;cI58WCz<-n2uPl4c{g@<#xuS+&(nvDWKE4ssKd#d_SP&QuORi|tEy{!L605#iY#Pt6zy zJ>oe?3)4?_;nfoRMgGF>vmBR^>kDk95Vs6k?Kz7nTCJj=q2dbx9jcM73lt2+eALuk zvjtA&)Q3N(ChB3%(VokVuFsG9pdC0vseBodZ5#z-57R34o6r(_qwUc{GU~@>(z~Z@ zm7^3UrpFSLXf_!; zSFWdXCa}<8Pu;)ot|TY7(hTU&;Nr>TiQNsEbQvC4 zhaZUIdDyXY>83hP$d4yK{ZtUZwqNE?KT10B-}>|W&jILtuv&>hUoBgO%`iXv^L`j%14J{ zI;Atod5i7>7gD3|%VtWM&OwZ#WB#yF&)LkXMEflGfmVww*B|06$gGxfg0jW$$C(a* zhVyNGS26qiP{YGZgd!)<-#=Al^0;6cC7dN;z()=Y@=^ldqIlk~I>8RK!#tYpxEu2A z`#q^Nyb5=}_wk2R$upBHEDH)!P?k*0Gu;0+)T$f3EmBuAjwWWb*2Xo4yYnPdDPk$A%Qe@=0IT%{FI7 zDR9SYzcyMEd`*?pPJE7ufR7|iUgSc&upyY*FSny8Eo!Dpi@9CHMaAY#>Jj zH{V^rKY&b+OF>V;OEG(q8I`?n{Q!3G`rx) z)R*t&Y-;zK9|csp9$N{ZtOpZ@$4T*MRPUJ}a3C}RLcn9>8@L1jY^`1EN#ARpYF(<& zCmU@l3ud#&5yexejO+of#wr3nf7KTYoK-B_Xg;YbjhAG8V5@JHe)adN&>>%(PHR~q ziO+E)pEAo{bj*VqIaTmVArGVbDIT2PnW7-i8`ZZi23+I^oa(~!lfaNT($+J}^9~66 zDks&7`Dq=C^+m2jfh|60rV?Q7s#vi8Q|lTvUH@kY_*KmU1d~8HPlEwEvo^d@mZ|?) zq%YeIUSd8bka|&^90}<|Ae{H~$gyf=x>_T?B?LENPxur&!iM~HuK(0s;~Tp6G)C-S zD&B1Hjor*}8zXw}k^UA${}t8AtES;^UCcbIXHUT6_M?R{2KySzDk7tFq$Qo-obeRQ4@|1;KA`sqR(%!1pW=IIcia);Kd=+&*L^)C0p7YTlu%OMTzs0?(3$cC(0&ZjGmGo89f{oI#RVbl-xx8eGEyCdNZ=M}A<)@2Xo~I0XOmIm_1jK2JH% zSc_|66u?PR;VH8D%8U}|3a{`JWa(ATG&Er+V2~r9H$G7Di?mM?7gUUqcGps7(qh3_F+F7Z+jlP}E zrD6d4o)U?@>H}ZKzIo8iQ~sr_*PAw!FnE>5l<;e{Ts8D8LFV6Ww#=0eF7NWT1szn3 zlMr@eG0Xa$Ibjegk>}J~2u;MQvL%OzZ$&~=N1$7?%iIYvTS2+dl8NOO{rw<+cjBiG@@yKFy*Yzfa(y232i6 zbWLn$L}m^OQf!9_RjM|}d=8xxK%LNHYfH$V=DN`D(%%=Ts334)!sNPCS~eo}tGm0K z@Ugy$IaxGf$_rg7Q!JhqMtV~7sbSvnj)W0poR?FUs|u$zb(|_3-4}!|a(j;A|D#qR zrDmTE1X1a@AQ?likSH!X+TjtIF*i4--1=bJ!<-x4B{V25#91(=Z;T8Da14D=)>_NN!?Yt$94)X}QqC7vZp+GEIYe@7He zVoCkyvonU43hD=v`3m}8#akt|4T@7z!ka#gkdRi-Q1a4(lafUX^oVOKkLGViOc#IN zLo$>hUOueMovHKhb~axbZ-1dZ?IbT`tJ%dIYua5n@sZSoO*)Q@IihVG0*dC&0ij=6 zTW_s-iv06py$V2;1w<4Z(5(WL7r+%;`3(3S`qqwa2aRrjTuKn+i0po}Ep8;|link4 znkCn6>v_*I`^wdtr>`_@d#qnQQhScTnw@o;-CYf_EiolOu~eRm$(NDqti6I`lba1t z+d1W1cRL~>h~J$*4EyW#`$H%>)(k~Xu!jw9gw}>b7opdPIVy|~JR8{$J?DOTk9%jDCfTzyV`E3JVp4*mzQOBuA)c;t5u#3SLdJ$J#wxHorfAG zV*P$JmirAt$xnH?ZKcYQovV(o^mCjk%`w=0s~({y*b{qR)0mdIGh;|O_>r)=sS>uS zru{()G5uyyoqtbq7m;JPG-8OUHoB{E&|y9z!@25=&mZOebAS;FD867lFlzVqG6O&v z2qZ&&%Q^}%j<5yRI3K@3WG+h1lCv3*s`leQY7*mg!qApt-}9L zRLMtA$}-Gx3@2`9o#nlyVG(rqrV#yonUMTB2Y;-(MzleT1gv5uueX%<=e#L35wvJ3 zwyfeK0bShWs<~j696wh9}1%73b3!2f&5Hc)?({wqntthWVd5OPdQ0PqFrx__7sYzrj$6sf>9JPlmAZ-0Kc1 zp+E1j-oYAR#*VGsZzM7`PWazt6041-TaYA_siV#rr&|_#wAz$vyB9srE5$B;H&}~N z&|?pj;_SMr;qnFLSpBFfyEj{)~ zL*Hau%vxme_wc01&c4E&CDg3jHf+^v{w;CW%p-EhCMf`GGgfVx7P&MAxS!h9ekQj{e&#_pi;Y|I@W;l*e$Z5vyhck+(a^n79c3C` zb@|2C5JCRk)^Aro)G2y}%_~>1)R6QY1=+7b60RPX|1VeKaRMS1Du*j5rEYEidf)@3 zyKyUn#OPIRRxHs*ty?#9g?E@E=BUBdu>vxa)F4TSEG(9^!>cdFI^&Erjnr68F8$06$kVD;0VJ)73zTlXp%-ecSJCLS*;=w%GZWu90l&Db-uLO ziQ7&x!xKl8A0qfpJd{}HE$w;y6PRbbSPOR*C)}Adhm;Q{LyCvCEDSt5id3hi7S(Ap zh0ED|Z5LyXv|_n@otP2=b?kQKU℘&BYD7FnzrgnuX6?Ss#h}lr4%1ekkjU$-u30 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 diff --git a/docs/graphs/sup/dgemm_rrr_epyc_nt1.pdf b/docs/graphs/sup/dgemm_rrr_epyc_nt1.pdf index f010da9aa60c235e877e65b436114799670d5bc7..ff7ea70559b41e51dc11c288c47726f75c7d3cb1 100644 GIT binary patch literal 200122 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≈VBgp8kQz*N_4G-hlxvjhYUsJb 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¾cWY{pXxA&_C!<+u)Sa$4Bu6L9w<-|Z9>ifte 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ŨlL4C;w2+w)wBf>zw5LptN?9Hh8y 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

    1qjl6?08Az98~+24zX_uzxQ@g_Uoe!&}__ker_ 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 T1tcT{Bn0uFK2_0E#sB{RHcykd diff --git a/docs/graphs/sup/dgemm_rrr_epyc_nt1.png b/docs/graphs/sup/dgemm_rrr_epyc_nt1.png index 306bd40b0f7fbc3c7dcca8244346298efa43634e..2a7b7a3977c09809518940a3322b0807356d49d9 100644 GIT binary patch literal 174763 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

    =$(R!N8-iof#N*W~H4$Q6dhSrn(Hmq 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 W#WNOufK4Lt%Xor54E1bsqCRIHJTr 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 p8(d&{3&2@lan>G=06j9O>B`d8~rkU}0) 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 z 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 z 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 W=pXQxXK@Yy$w-plzOAXRMgBk5k$cAg diff --git a/docs/graphs/sup/dgemm_rrr_kbl_nt1.png b/docs/graphs/sup/dgemm_rrr_kbl_nt1.png index dbea1b96dc4ea91257555b129ae545fc10f1e059..cd781c407999aef12a24ca8c256d1c7220a04911 100644 GIT binary patch literal 207461 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,c=0y+%w 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 F{4c|0zu*7> literal 211228 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 z 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 IN|=259~-?-EC2ui diff --git a/test/sup/octave/plot_l3sup_perf.m b/test/sup/octave/plot_l3sup_perf.m index b027bf7a4..327a152ab 100644 --- a/test/sup/octave/plot_l3sup_perf.m +++ b/test/sup/octave/plot_l3sup_perf.m @@ -10,14 +10,14 @@ function r_val = plot_l3sup_perf( opname, ... cfreq, ... dfps, ... theid, impl ) -if ... %mod(theid-1,cols) == 2 || ... - ... %mod(theid-1,cols) == 3 || ... - ... %mod(theid-1,cols) == 4 || ... - 0 == 1 ... %theid >= 19 - show_plot = 0; -else +%if ... %mod(theid-1,cols) == 2 || ... +% ... %mod(theid-1,cols) == 3 || ... +% ... %mod(theid-1,cols) == 4 || ... +% 0 == 1 ... %theid >= 19 +% show_plot = 0; +%else show_plot = 1; -end +%end %legend_plot_id = 11; legend_plot_id = 1*cols + 1*5; @@ -96,30 +96,39 @@ for psize_col = 1:3 break; end end -x_end = data_blissup( size( data_blissup, 1 ), psize_col ); - x_axis( :, 1 ) = data_blissup( :, psize_col ); +% Compute the number of data points we have in the x-axis. Note that +% we only use half the data points for the m = n = k column of graphs. +if mod(theid-1,cols) == 6 + np = size( data_blissup, 1 ) / 2; +else + np = size( data_blissup, 1 ); +end + +% Grab the last x-axis value. +x_end = data_blissup( np, psize_col ); + %data_peak( 1, 1:2 ) = [ 0 max_perf_core ]; %data_peak( 2, 1:2 ) = [ x_end max_perf_core ]; if show_plot == 1 -blissup_ln = line( x_axis( :, 1 ), data_blissup( :, flopscol ) / nth, ... +blissup_ln = line( x_axis( 1:np, 1 ), data_blissup( 1:np, flopscol ) / nth, ... 'Color',color_blissup, 'LineStyle',lines_blissup, ... 'LineWidth',linesize ); -blislpab_ln = line( x_axis( :, 1 ), data_blislpab( :, flopscol ) / nth, ... +blislpab_ln = line( x_axis( 1:np, 1 ), data_blislpab( 1:np, flopscol ) / nth, ... 'Color',color_blislpab, 'LineStyle',lines_blislpab, ... 'LineWidth',linesize ); -eigen_ln = line( x_axis( :, 1 ), data_eigen( :, flopscol ) / nth, ... +eigen_ln = line( x_axis( 1:np, 1 ), data_eigen( 1:np, flopscol ) / nth, ... 'Color',color_eigen, 'LineStyle',lines_eigen, ... 'LineWidth',linesize ); -open_ln = line( x_axis( :, 1 ), data_open( :, flopscol ) / nth, ... +open_ln = line( x_axis( 1:np, 1 ), data_open( 1:np, flopscol ) / nth, ... 'Color',color_open, 'LineStyle',lines_open, ... 'LineWidth',linesize ); -bfeo_ln = line( x_axis( :, 1 ), data_bfeo( :, flopscol ) / nth, ... +bfeo_ln = line( x_axis( 1:np, 1 ), data_bfeo( 1:np, flopscol ) / nth, ... 'Color',color_bfeo, 'LineStyle',lines_bfeo, ... 'LineWidth',linesize ); -vend_ln = line( x_axis( :, 1 ), data_vend( :, flopscol ) / nth, ... +vend_ln = line( x_axis( 1:np, 1 ), data_vend( 1:np, flopscol ) / nth, ... 'Color',color_vend, 'LineStyle',lines_vend, ... 'LineWidth',linesize ); else diff --git a/test/sup/octave/runme.m b/test/sup/octave/runme.m index 5fd894c2b..a3628b28f 100644 --- a/test/sup/octave/runme.m +++ b/test/sup/octave/runme.m @@ -1,8 +1,8 @@ % kabylake -plot_panel_trxsh(3.6,16,1,'st','d','rrr',[ 6 8 4 ],'../results/kabylake/20190531/4_800_4_mt201_last400','kbl','MKL','matlab'); close; clear all; -plot_panel_trxsh(3.6,16,1,'st','d','ccc',[ 6 8 4 ],'../results/kabylake/20190531/4_800_4_mt201_last400','kbl','MKL','matlab'); close; clear all; +plot_panel_trxsh(3.8,16,1,'st','d','rrr',[ 6 8 4 ],'../results/kabylake/20190619/4_800_4_mt201','kbl','MKL','matlab'); close; clear all; +plot_panel_trxsh(3.8,16,1,'st','d','ccc',[ 6 8 4 ],'../results/kabylake/20190619/4_800_4_mt201','kbl','MKL','matlab'); close; clear all; % epyc -plot_panel_trxsh(3.0,8,1,'st','d','rrr',[ 6 8 4 ],'../results/epyc/20190531/4_800_4_mt256_last400','epyc','MKL','matlab'); close; clear all; -plot_panel_trxsh(3.0,8,1,'st','d','ccc',[ 6 8 4 ],'../results/epyc/20190531/4_800_4_mt256_last400','epyc','MKL','matlab'); close; clear all; +plot_panel_trxsh(3.0,8,1,'st','d','rrr',[ 6 8 4 ],'../results/epyc/20190619/4_800_4_mt256','epyc','MKL','matlab'); close; clear all; +plot_panel_trxsh(3.0,8,1,'st','d','ccc',[ 6 8 4 ],'../results/epyc/20190619/4_800_4_mt256','epyc','MKL','matlab'); close; clear all; From 7366bf25aa50b181cdc08173e01610499c0e31c1 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Mon, 24 Jun 2019 17:47:40 -0500 Subject: [PATCH 077/109] Fixed thrinfo_t printing bug for small problems. Details: - Fixed a bug in bli_l3_thrinfo_print_gemm_paths() and bli_l3_thrinfo_print_trsm_paths(), defined in bli_l3_thrinfo.c, whereby subnodes of the thrinfo_t tree are "dereferenced" near the beginning of the functions, which may lead to segfaults in certain situations where the thread tree was not fully formed because the matrix problem was too small for the level of parallelism specified. (That is, too small because some problems were assigned no work due to the smallest units in the m and n dimensions being defined by the register blocksizes mr and nr.) The fix requires several nested levels of if statements, and this is one of those few instances where use of goto statements results in (mostly) prettier code, especially in the case of _gemm_paths(). And while it wasn't necessary, I ported this goto usage to the loop body that prints the thrinfo_t work_id and comm_id values for each thread. Thanks to Nicholai Tukanov for helping to find this bug. --- frame/3/bli_l3_thrinfo.c | 475 +++++++++++++++++++++++++-------------- 1 file changed, 304 insertions(+), 171 deletions(-) diff --git a/frame/3/bli_l3_thrinfo.c b/frame/3/bli_l3_thrinfo.c index 1dbd101f3..0eaf10840 100644 --- a/frame/3/bli_l3_thrinfo.c +++ b/frame/3/bli_l3_thrinfo.c @@ -99,35 +99,84 @@ void bli_l3_thrinfo_print_gemm_paths thrinfo_t** threads ) { + // In order to query the number of threads, we query the only thread we + // know exists: thread 0. dim_t n_threads = bli_thread_num_threads( threads[0] ); - dim_t gl_id; - thrinfo_t* jc_info = threads[0]; - thrinfo_t* pc_info = bli_thrinfo_sub_node( jc_info ); - thrinfo_t* pb_info = bli_thrinfo_sub_node( pc_info ); - thrinfo_t* ic_info = bli_thrinfo_sub_node( pb_info ); - thrinfo_t* pa_info = bli_thrinfo_sub_node( ic_info ); - thrinfo_t* jr_info = bli_thrinfo_sub_node( pa_info ); - thrinfo_t* ir_info = bli_thrinfo_sub_node( jr_info ); + // For the purposes of printing the "header" information that is common + // to the various instances of a thrinfo_t (ie: across all threads), we + // choose the last thread in case the problem is so small that there is + // only an "edge" case, which will always be assigned to the last thread + // (at least for higher levels of partitioning). + thrinfo_t* jc_info = threads[n_threads-1]; + thrinfo_t* pc_info = NULL; + thrinfo_t* pb_info = NULL; + thrinfo_t* ic_info = NULL; + thrinfo_t* pa_info = NULL; + thrinfo_t* jr_info = NULL; + thrinfo_t* ir_info = NULL; - dim_t jc_way = bli_thread_n_way( jc_info ); - dim_t pc_way = bli_thread_n_way( pc_info ); - dim_t pb_way = bli_thread_n_way( pb_info ); - dim_t ic_way = bli_thread_n_way( ic_info ); - dim_t pa_way = bli_thread_n_way( pa_info ); - dim_t jr_way = bli_thread_n_way( jr_info ); - dim_t ir_way = bli_thread_n_way( ir_info ); + // Initialize the n_ways and n_threads fields of each thrinfo_t "level" + // to -1. More than likely, these will all be overwritten with meaningful + // values, but in case some thrinfo_t trees are not fully built (see + // next commnet), these will be the placeholder values. + dim_t jc_way = -1, pc_way = -1, pb_way = -1, ic_way = -1, + pa_way = -1, jr_way = -1, ir_way = -1; - dim_t jc_nt = bli_thread_num_threads( jc_info ); - dim_t pc_nt = bli_thread_num_threads( pc_info ); - dim_t pb_nt = bli_thread_num_threads( pb_info ); - dim_t ic_nt = bli_thread_num_threads( ic_info ); - dim_t pa_nt = bli_thread_num_threads( pa_info ); - dim_t jr_nt = bli_thread_num_threads( jr_info ); - dim_t ir_nt = bli_thread_num_threads( ir_info ); + dim_t jc_nt = -1, pc_nt = -1, pb_nt = -1, ic_nt = -1, + pa_nt = -1, jr_nt = -1, ir_nt = -1; + + // NOTE: We must check each thrinfo_t pointer for NULLness. Certain threads + // may not fully build their thrinfo_t structures--specifically when the + // dimension being parallelized is not large enough for each thread to have + // even one unit of work (where as unit is usually a single micropanel's + // width, MR or NR). + + if ( !jc_info ) goto print_header; + + jc_way = bli_thread_n_way( jc_info ); + jc_nt = bli_thread_num_threads( jc_info ); + pc_info = bli_thrinfo_sub_node( jc_info ); + + if ( !pc_info ) goto print_header; + + pc_way = bli_thread_n_way( pc_info ); + pc_nt = bli_thread_num_threads( pc_info ); + pb_info = bli_thrinfo_sub_node( pc_info ); + + if ( !pb_info ) goto print_header; + + pb_way = bli_thread_n_way( pb_info ); + pb_nt = bli_thread_num_threads( pb_info ); + ic_info = bli_thrinfo_sub_node( pb_info ); + + if ( !ic_info ) goto print_header; + + ic_way = bli_thread_n_way( ic_info ); + ic_nt = bli_thread_num_threads( ic_info ); + pa_info = bli_thrinfo_sub_node( ic_info ); + + if ( !pa_info ) goto print_header; + + pa_way = bli_thread_n_way( pa_info ); + pa_nt = bli_thread_num_threads( pa_info ); + jr_info = bli_thrinfo_sub_node( pa_info ); + + if ( !jr_info ) goto print_header; + + jr_way = bli_thread_n_way( jr_info ); + jr_nt = bli_thread_num_threads( jr_info ); + ir_info = bli_thrinfo_sub_node( jr_info ); + + if ( !ir_info ) goto print_header; + + ir_way = bli_thread_n_way( ir_info ); + ir_nt = bli_thread_num_threads( ir_info ); + + print_header: printf( " jc kc pb ic pa jr ir\n" ); - printf( "xx_nt: %4lu %4lu %4lu %4lu %4lu %4lu %4lu\n", + printf( "xx_nt: %4ld %4ld %4ld %4ld %4ld %4ld %4ld\n", ( unsigned long )jc_nt, ( unsigned long )pc_nt, ( unsigned long )pb_nt, @@ -135,7 +184,7 @@ void bli_l3_thrinfo_print_gemm_paths ( unsigned long )pa_nt, ( unsigned long )jr_nt, ( unsigned long )ir_nt ); - printf( "xx_way: %4lu %4lu %4lu %4lu %4lu %4lu %4lu\n", + printf( "xx_way: %4ld %4ld %4ld %4ld %4ld %4ld %4ld\n", ( unsigned long )jc_way, ( unsigned long )pc_way, ( unsigned long )pb_way, @@ -145,116 +194,59 @@ void bli_l3_thrinfo_print_gemm_paths ( unsigned long )ir_way ); printf( "============================================\n" ); - dim_t jc_comm_id; - dim_t pc_comm_id; - dim_t pb_comm_id; - dim_t ic_comm_id; - dim_t pa_comm_id; - dim_t jr_comm_id; - dim_t ir_comm_id; - - dim_t jc_work_id; - dim_t pc_work_id; - dim_t pb_work_id; - dim_t ic_work_id; - dim_t pa_work_id; - dim_t jr_work_id; - dim_t ir_work_id; - - for ( gl_id = 0; gl_id < n_threads; ++gl_id ) + for ( dim_t gl_id = 0; gl_id < n_threads; ++gl_id ) { jc_info = threads[gl_id]; - // NOTE: We must check each thrinfo_t pointer for NULLness. Certain threads - // may not fully build their thrinfo_t structures--specifically when the - // dimension being parallelized is not large enough for each thread to have - // even one unit of work (where as unit is usually a single micropanel's - // width, MR or NR). - if ( !jc_info ) - { - jc_comm_id = pc_comm_id = pb_comm_id = ic_comm_id = pa_comm_id = jr_comm_id = ir_comm_id = -1; - jc_work_id = pc_work_id = pb_work_id = ic_work_id = pa_work_id = jr_work_id = ir_work_id = -1; - } - else - { - jc_comm_id = bli_thread_ocomm_id( jc_info ); - jc_work_id = bli_thread_work_id( jc_info ); - pc_info = bli_thrinfo_sub_node( jc_info ); + dim_t jc_comm_id = -1, pc_comm_id = -1, pb_comm_id = -1, ic_comm_id = -1, + pa_comm_id = -1, jr_comm_id = -1, ir_comm_id = -1; - if ( !pc_info ) - { - pc_comm_id = pb_comm_id = ic_comm_id = pa_comm_id = jr_comm_id = ir_comm_id = -1; - pc_work_id = pb_work_id = ic_work_id = pa_work_id = jr_work_id = ir_work_id = -1; - } - else - { - pc_comm_id = bli_thread_ocomm_id( pc_info ); - pc_work_id = bli_thread_work_id( pc_info ); - pb_info = bli_thrinfo_sub_node( pc_info ); + dim_t jc_work_id = -1, pc_work_id = -1, pb_work_id = -1, ic_work_id = -1, + pa_work_id = -1, jr_work_id = -1, ir_work_id = -1; - if ( !pb_info ) - { - pb_comm_id = ic_comm_id = pa_comm_id = jr_comm_id = ir_comm_id = -1; - pb_work_id = ic_work_id = pa_work_id = jr_work_id = ir_work_id = -1; - } - else - { - pb_comm_id = bli_thread_ocomm_id( pb_info ); - pb_work_id = bli_thread_work_id( pb_info ); - ic_info = bli_thrinfo_sub_node( pb_info ); + if ( !jc_info ) goto print_thrinfo; - if ( !ic_info ) - { - ic_comm_id = pa_comm_id = jr_comm_id = ir_comm_id = -1; - ic_work_id = pa_work_id = jr_work_id = ir_work_id = -1; - } - else - { - ic_comm_id = bli_thread_ocomm_id( ic_info ); - ic_work_id = bli_thread_work_id( ic_info ); - pa_info = bli_thrinfo_sub_node( ic_info ); + jc_comm_id = bli_thread_ocomm_id( jc_info ); + jc_work_id = bli_thread_work_id( jc_info ); + pc_info = bli_thrinfo_sub_node( jc_info ); - if ( !pa_info ) - { - pa_comm_id = jr_comm_id = ir_comm_id = -1; - pa_work_id = jr_work_id = ir_work_id = -1; - } - else - { - pa_comm_id = bli_thread_ocomm_id( pa_info ); - pa_work_id = bli_thread_work_id( pa_info ); - jr_info = bli_thrinfo_sub_node( pa_info ); + if ( !pc_info ) goto print_thrinfo; - if ( !jr_info ) - { - jr_comm_id = ir_comm_id = -1; - jr_work_id = ir_work_id = -1; - } - else - { - jr_comm_id = bli_thread_ocomm_id( jr_info ); - jr_work_id = bli_thread_work_id( jr_info ); - ir_info = bli_thrinfo_sub_node( jr_info ); + pc_comm_id = bli_thread_ocomm_id( pc_info ); + pc_work_id = bli_thread_work_id( pc_info ); + pb_info = bli_thrinfo_sub_node( pc_info ); - if ( !ir_info ) - { - ir_comm_id = -1; - ir_work_id = -1; - } - else - { - ir_comm_id = bli_thread_ocomm_id( ir_info ); - ir_work_id = bli_thread_work_id( ir_info ); - } - } - } - } - } - } - } + if ( !pb_info ) goto print_thrinfo; + + pb_comm_id = bli_thread_ocomm_id( pb_info ); + pb_work_id = bli_thread_work_id( pb_info ); + ic_info = bli_thrinfo_sub_node( pb_info ); + + if ( !ic_info ) goto print_thrinfo; + + ic_comm_id = bli_thread_ocomm_id( ic_info ); + ic_work_id = bli_thread_work_id( ic_info ); + pa_info = bli_thrinfo_sub_node( ic_info ); + + if ( !pa_info ) goto print_thrinfo; + + pa_comm_id = bli_thread_ocomm_id( pa_info ); + pa_work_id = bli_thread_work_id( pa_info ); + jr_info = bli_thrinfo_sub_node( pa_info ); + + if ( !jr_info ) goto print_thrinfo; + + jr_comm_id = bli_thread_ocomm_id( jr_info ); + jr_work_id = bli_thread_work_id( jr_info ); + ir_info = bli_thrinfo_sub_node( jr_info ); + + if ( !ir_info ) goto print_thrinfo; + + ir_comm_id = bli_thread_ocomm_id( ir_info ); + ir_work_id = bli_thread_work_id( ir_info ); + + print_thrinfo: - //printf( " gl jc pb kc pa ic jr \n" ); - //printf( " gl jc kc pb ic pa jr \n" ); printf( "comm ids: %4ld %4ld %4ld %4ld %4ld %4ld %4ld\n", ( long )jc_comm_id, ( long )pc_comm_id, @@ -285,44 +277,105 @@ void bli_l3_thrinfo_print_trsm_paths thrinfo_t** threads ) { + // In order to query the number of threads, we query the only thread we + // know exists: thread 0. dim_t n_threads = bli_thread_num_threads( threads[0] ); - dim_t gl_id; - thrinfo_t* jc_info = threads[0]; - thrinfo_t* pc_info = bli_thrinfo_sub_node( jc_info ); - thrinfo_t* pb_info = bli_thrinfo_sub_node( pc_info ); - thrinfo_t* ic_info = bli_thrinfo_sub_node( pb_info ); + // For the purposes of printing the "header" information that is common + // to the various instances of a thrinfo_t (ie: across all threads), we + // choose the last thread in case the problem is so small that there is + // only an "edge" case, which will always be assigned to the last thread + // (at least for higher levels of partitioning). + thrinfo_t* jc_info = threads[n_threads-1]; + thrinfo_t* pc_info = NULL; + thrinfo_t* pb_info = NULL; + thrinfo_t* ic_info = NULL; + thrinfo_t* pa_info = NULL; thrinfo_t* pa_info0 = NULL; + thrinfo_t* jr_info = NULL; thrinfo_t* jr_info0 = NULL; + thrinfo_t* ir_info = NULL; thrinfo_t* ir_info0 = NULL; - thrinfo_t* pa_info = bli_thrinfo_sub_node( ic_info ); - thrinfo_t* jr_info = bli_thrinfo_sub_node( pa_info ); - thrinfo_t* ir_info = bli_thrinfo_sub_node( jr_info ); - thrinfo_t* pa_info0 = bli_thrinfo_sub_prenode( ic_info ); - thrinfo_t* jr_info0 = ( pa_info0 ? bli_thrinfo_sub_node( pa_info0 ) : NULL ); - thrinfo_t* ir_info0 = ( jr_info0 ? bli_thrinfo_sub_node( jr_info0 ) : NULL ); + // Initialize the n_ways and n_threads fields of each thrinfo_t "level" + // to -1. More than likely, these will all be overwritten with meaningful + // values, but in case some thrinfo_t trees are not fully built (see + // next commnet), these will be the placeholder values. + dim_t jc_way = -1, pc_way = -1, pb_way = -1, ic_way = -1, + pa_way = -1, jr_way = -1, ir_way = -1, + pa_way0 = -1, jr_way0 = -1, ir_way0 = -1; - dim_t jc_way = bli_thread_n_way( jc_info ); - dim_t pc_way = bli_thread_n_way( pc_info ); - dim_t pb_way = bli_thread_n_way( pb_info ); - dim_t ic_way = bli_thread_n_way( ic_info ); + dim_t jc_nt = -1, pc_nt = -1, pb_nt = -1, ic_nt = -1, + pa_nt = -1, jr_nt = -1, ir_nt = -1, + pa_nt0 = -1, jr_nt0 = -1, ir_nt0 = -1; - dim_t pa_way = bli_thread_n_way( pa_info ); - dim_t jr_way = bli_thread_n_way( jr_info ); - dim_t ir_way = bli_thread_n_way( ir_info ); - dim_t pa_way0 = ( pa_info0 ? bli_thread_n_way( pa_info0 ) : -1 ); - dim_t jr_way0 = ( jr_info0 ? bli_thread_n_way( jr_info0 ) : -1 ); - dim_t ir_way0 = ( ir_info0 ? bli_thread_n_way( ir_info0 ) : -1 ); + // NOTE: We must check each thrinfo_t pointer for NULLness. Certain threads + // may not fully build their thrinfo_t structures--specifically when the + // dimension being parallelized is not large enough for each thread to have + // even one unit of work (where as unit is usually a single micropanel's + // width, MR or NR). - dim_t jc_nt = bli_thread_num_threads( jc_info ); - dim_t pc_nt = bli_thread_num_threads( pc_info ); - dim_t pb_nt = bli_thread_num_threads( pb_info ); - dim_t ic_nt = bli_thread_num_threads( ic_info ); + if ( !jc_info ) goto print_header; - dim_t pa_nt = bli_thread_num_threads( pa_info ); - dim_t jr_nt = bli_thread_num_threads( jr_info ); - dim_t ir_nt = bli_thread_num_threads( ir_info ); - dim_t pa_nt0 = ( pa_info0 ? bli_thread_num_threads( pa_info0 ) : -1 ); - dim_t jr_nt0 = ( jr_info0 ? bli_thread_num_threads( jr_info0 ) : -1 ); - dim_t ir_nt0 = ( ir_info0 ? bli_thread_num_threads( ir_info0 ) : -1 ); + jc_way = bli_thread_n_way( jc_info ); + jc_nt = bli_thread_num_threads( jc_info ); + pc_info = bli_thrinfo_sub_node( jc_info ); + + if ( !pc_info ) goto print_header; + + pc_way = bli_thread_n_way( pc_info ); + pc_nt = bli_thread_num_threads( pc_info ); + pb_info = bli_thrinfo_sub_node( pc_info ); + + if ( !pb_info ) goto print_header; + + pb_way = bli_thread_n_way( pb_info ); + pb_nt = bli_thread_num_threads( pb_info ); + ic_info = bli_thrinfo_sub_node( pb_info ); + + if ( !ic_info ) goto print_header; + + ic_way = bli_thread_n_way( ic_info ); + ic_nt = bli_thread_num_threads( ic_info ); + pa_info = bli_thrinfo_sub_node( ic_info ); + pa_info0 = bli_thrinfo_sub_prenode( ic_info ); + + // check_header_prenode: + + if ( !pa_info0 ) goto check_header_node; + + pa_way0 = bli_thread_n_way( pa_info0 ); + pa_nt0 = bli_thread_num_threads( pa_info0 ); + jr_info0 = bli_thrinfo_sub_node( pa_info0 ); + + if ( !jr_info0 ) goto check_header_node; + + jr_way0 = bli_thread_n_way( jr_info0 ); + jr_nt0 = bli_thread_num_threads( jr_info0 ); + ir_info0 = bli_thrinfo_sub_node( jr_info0 ); + + if ( !ir_info0 ) goto check_header_node; + + ir_way0 = bli_thread_n_way( ir_info0 ); + ir_nt0 = bli_thread_num_threads( ir_info0 ); + + check_header_node: + + if ( !pa_info ) goto print_header; + + pa_way = bli_thread_n_way( pa_info ); + pa_nt = bli_thread_num_threads( pa_info ); + jr_info = bli_thrinfo_sub_node( pa_info ); + + if ( !jr_info ) goto print_header; + + jr_way = bli_thread_n_way( jr_info ); + jr_nt = bli_thread_num_threads( jr_info ); + ir_info = bli_thrinfo_sub_node( jr_info ); + + if ( !ir_info ) goto print_header; + + ir_way = bli_thread_n_way( ir_info ); + ir_nt = bli_thread_num_threads( ir_info ); + + print_header: printf( " jc kc pb ic pa jr ir\n" ); printf( "xx_nt: %4ld %4ld %4ld %4ld %2ld|%2ld %2ld|%2ld %2ld|%2ld\n", @@ -343,26 +396,105 @@ void bli_l3_thrinfo_print_trsm_paths ( long )ir_way0, ( long )ir_way ); printf( "==================================================\n" ); - dim_t jc_comm_id; - dim_t pc_comm_id; - dim_t pb_comm_id; - dim_t ic_comm_id; - dim_t pa_comm_id0, pa_comm_id; - dim_t jr_comm_id0, jr_comm_id; - dim_t ir_comm_id0, ir_comm_id; - dim_t jc_work_id; - dim_t pc_work_id; - dim_t pb_work_id; - dim_t ic_work_id; - dim_t pa_work_id0, pa_work_id; - dim_t jr_work_id0, jr_work_id; - dim_t ir_work_id0, ir_work_id; - - for ( gl_id = 0; gl_id < n_threads; ++gl_id ) + for ( dim_t gl_id = 0; gl_id < n_threads; ++gl_id ) { jc_info = threads[gl_id]; +#if 1 + // NOTE: This cpp branch contains code that is safe to execute + // for small problems that are parallelized enough that one or + // more threads gets no work. + + dim_t jc_comm_id = -1, pc_comm_id = -1, pb_comm_id = -1, ic_comm_id = -1, + pa_comm_id = -1, jr_comm_id = -1, ir_comm_id = -1, + pa_comm_id0 = -1, jr_comm_id0 = -1, ir_comm_id0 = -1; + + dim_t jc_work_id = -1, pc_work_id = -1, pb_work_id = -1, ic_work_id = -1, + pa_work_id = -1, jr_work_id = -1, ir_work_id = -1, + pa_work_id0 = -1, jr_work_id0 = -1, ir_work_id0 = -1; + + if ( !jc_info ) goto print_thrinfo; + + jc_comm_id = bli_thread_ocomm_id( jc_info ); + jc_work_id = bli_thread_work_id( jc_info ); + pc_info = bli_thrinfo_sub_node( jc_info ); + + if ( !pc_info ) goto print_thrinfo; + + pc_comm_id = bli_thread_ocomm_id( pc_info ); + pc_work_id = bli_thread_work_id( pc_info ); + pb_info = bli_thrinfo_sub_node( pc_info ); + + if ( !pb_info ) goto print_thrinfo; + + pb_comm_id = bli_thread_ocomm_id( pb_info ); + pb_work_id = bli_thread_work_id( pb_info ); + ic_info = bli_thrinfo_sub_node( pb_info ); + + if ( !ic_info ) goto print_thrinfo; + + ic_comm_id = bli_thread_ocomm_id( ic_info ); + ic_work_id = bli_thread_work_id( ic_info ); + pa_info = bli_thrinfo_sub_node( ic_info ); + pa_info0 = bli_thrinfo_sub_prenode( ic_info ); + + // check_thrinfo_prenode: + + if ( !pa_info0 ) goto check_thrinfo_node; + + pa_comm_id0 = bli_thread_ocomm_id( pa_info0 ); + pa_work_id0 = bli_thread_work_id( pa_info0 ); + jr_info0 = bli_thrinfo_sub_node( pa_info0 ); + + if ( !jr_info0 ) goto check_thrinfo_node; + + jr_comm_id0 = bli_thread_ocomm_id( jr_info0 ); + jr_work_id0 = bli_thread_work_id( jr_info0 ); + ir_info0 = bli_thrinfo_sub_node( jr_info0 ); + + if ( !ir_info0 ) goto check_thrinfo_node; + + ir_comm_id0 = bli_thread_ocomm_id( ir_info0 ); + ir_work_id0 = bli_thread_work_id( ir_info0 ); + + check_thrinfo_node: + + if ( !pa_info ) goto print_thrinfo; + + pa_comm_id = bli_thread_ocomm_id( pa_info ); + pa_work_id = bli_thread_work_id( pa_info ); + jr_info = bli_thrinfo_sub_node( pa_info ); + + if ( !jr_info ) goto print_thrinfo; + + jr_comm_id = bli_thread_ocomm_id( jr_info ); + jr_work_id = bli_thread_work_id( jr_info ); + ir_info = bli_thrinfo_sub_node( jr_info ); + + if ( !ir_info ) goto print_thrinfo; + + ir_comm_id = bli_thread_ocomm_id( ir_info ); + ir_work_id = bli_thread_work_id( ir_info ); + + print_thrinfo: +#else + dim_t jc_comm_id; + dim_t pc_comm_id; + dim_t pb_comm_id; + dim_t ic_comm_id; + dim_t pa_comm_id0, pa_comm_id; + dim_t jr_comm_id0, jr_comm_id; + dim_t ir_comm_id0, ir_comm_id; + + dim_t jc_work_id; + dim_t pc_work_id; + dim_t pb_work_id; + dim_t ic_work_id; + dim_t pa_work_id0, pa_work_id; + dim_t jr_work_id0, jr_work_id; + dim_t ir_work_id0, ir_work_id; + // NOTE: We must check each thrinfo_t pointer for NULLness. Certain threads // may not fully build their thrinfo_t structures--specifically when the // dimension being parallelized is not large enough for each thread to have @@ -488,6 +620,7 @@ void bli_l3_thrinfo_print_trsm_paths } } } +#endif printf( "comm ids: %4ld %4ld %4ld %4ld %2ld|%2ld %2ld|%2ld %2ld|%2ld\n", ( long )jc_comm_id, From b3974dafacf81adffaf7501202a380e7aa390680 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 16 Jul 2019 13:00:35 -0500 Subject: [PATCH 078/109] New cntx_t blksz "set" functions + misc tweaks. Details: - Defined two new static functions in bli_cntx.h: bli_cntx_set_blksz_def_dt() bli_cntx_set_blksz_max_dt() which developers may find convenient when experimenting with different values of cache blocksizes. - Updated one- and two-socket multithreaded problem size range and increment values in test/3/Makefile. - Changed default to column storage in test/3/test_gemm.c. - Fixed typo in comment in testsuite/src/test_subm.c. --- frame/base/bli_cntx.h | 16 ++++++++++++++++ test/3/Makefile | 12 ++++++------ test/3/test_gemm.c | 4 ++-- testsuite/src/test_subm.c | 2 +- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/frame/base/bli_cntx.h b/frame/base/bli_cntx.h index 818534b1e..fae7b5f6e 100644 --- a/frame/base/bli_cntx.h +++ b/frame/base/bli_cntx.h @@ -648,6 +648,22 @@ static void bli_cntx_set_blksz( bszid_t bs_id, blksz_t* blksz, bszid_t mult_id, bmults[ bs_id ] = mult_id; } +static void bli_cntx_set_blksz_def_dt( num_t dt, bszid_t bs_id, dim_t bs, cntx_t* cntx ) +{ + blksz_t* blkszs = bli_cntx_blkszs_buf( cntx ); + blksz_t* blksz = &blkszs[ bs_id ]; + + bli_blksz_set_def( bs, dt, blksz ); +} + +static void bli_cntx_set_blksz_max_dt( num_t dt, bszid_t bs_id, dim_t bs, cntx_t* cntx ) +{ + blksz_t* blkszs = bli_cntx_blkszs_buf( cntx ); + blksz_t* blksz = &blkszs[ bs_id ]; + + bli_blksz_set_max( bs, dt, blksz ); +} + static void bli_cntx_set_l3_vir_ukr( l3ukr_t ukr_id, func_t* func, cntx_t* cntx ) { func_t* funcs = bli_cntx_l3_vir_ukrs_buf( cntx ); diff --git a/test/3/Makefile b/test/3/Makefile index 8f9f198d5..1a8aa3087 100644 --- a/test/3/Makefile +++ b/test/3/Makefile @@ -135,14 +135,14 @@ PS_MAX := 2400 PS_INC := 48 # Single-socket (multithreaded) -P1_BEGIN := 120 -P1_MAX := 6000 -P1_INC := 120 +P1_BEGIN := 96 +P1_MAX := 4800 +P1_INC := 96 # Dual-socket (multithreaded) -P2_BEGIN := 160 -P2_MAX := 8000 -P2_INC := 160 +P2_BEGIN := 144 +P2_MAX := 7200 +P2_INC := 144 # diff --git a/test/3/test_gemm.c b/test/3/test_gemm.c index e7b6a9435..508de4fd9 100644 --- a/test/3/test_gemm.c +++ b/test/3/test_gemm.c @@ -43,8 +43,8 @@ #include "blis.h" #endif -//#define COL_STORAGE -#define ROW_STORAGE +#define COL_STORAGE +//#define ROW_STORAGE //#define PRINT diff --git a/testsuite/src/test_subm.c b/testsuite/src/test_subm.c index b2de8cfad..63b48eedc 100644 --- a/testsuite/src/test_subm.c +++ b/testsuite/src/test_subm.c @@ -275,7 +275,7 @@ void libblis_test_subm_check // // is functioning correctly if // - // normfv(y) - sqrt( absqsc( beta - conjx(alpha) ) * m * n ) + // normfm(y) - sqrt( absqsc( beta - conjx(alpha) ) * m * n ) // // is negligible. // From 0e3f0ce634d6a9871c9c88fcedebdbd4f04ac659 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 16 Jul 2019 13:14:47 -0500 Subject: [PATCH 079/109] More updates to comments in testsuite modules. Details: - Updated most comments in testsuite modules that describe how the correctness test is performed so that it is clear whether the vector (normfv) or matrix (normfm) form of Frobenius norm is used. --- testsuite/src/test_addm.c | 2 +- testsuite/src/test_axpbyv.c | 2 +- testsuite/src/test_axpy2v.c | 2 +- testsuite/src/test_axpyf.c | 2 +- testsuite/src/test_axpym.c | 2 +- testsuite/src/test_axpyv.c | 2 +- testsuite/src/test_dotaxpyv.c | 2 +- testsuite/src/test_dotv.c | 2 +- testsuite/src/test_dotxaxpyf.c | 4 ++-- testsuite/src/test_dotxf.c | 2 +- testsuite/src/test_dotxv.c | 2 +- testsuite/src/test_gemm.c | 2 +- testsuite/src/test_gemm_ukr.c | 2 +- testsuite/src/test_gemmtrsm_ukr.c | 2 +- testsuite/src/test_gemv.c | 2 +- testsuite/src/test_ger.c | 2 +- testsuite/src/test_hemm.c | 2 +- testsuite/src/test_hemv.c | 2 +- testsuite/src/test_her.c | 2 +- testsuite/src/test_her2.c | 2 +- testsuite/src/test_her2k.c | 2 +- testsuite/src/test_herk.c | 2 +- testsuite/src/test_normfm.c | 2 +- testsuite/src/test_normfv.c | 2 +- testsuite/src/test_scal2m.c | 2 +- testsuite/src/test_scal2v.c | 2 +- testsuite/src/test_scalm.c | 2 +- testsuite/src/test_scalv.c | 2 +- testsuite/src/test_symm.c | 2 +- testsuite/src/test_symv.c | 2 +- testsuite/src/test_syr.c | 2 +- testsuite/src/test_syr2.c | 2 +- testsuite/src/test_syr2k.c | 2 +- testsuite/src/test_syrk.c | 2 +- testsuite/src/test_trmm.c | 2 +- testsuite/src/test_trmm3.c | 2 +- testsuite/src/test_trmv.c | 2 +- testsuite/src/test_trsm.c | 2 +- testsuite/src/test_trsm_ukr.c | 2 +- testsuite/src/test_trsv.c | 2 +- testsuite/src/test_xpbym.c | 2 +- testsuite/src/test_xpbyv.c | 2 +- 42 files changed, 43 insertions(+), 43 deletions(-) diff --git a/testsuite/src/test_addm.c b/testsuite/src/test_addm.c index c957e4dc9..f7c21b733 100644 --- a/testsuite/src/test_addm.c +++ b/testsuite/src/test_addm.c @@ -275,7 +275,7 @@ void libblis_test_addm_check // // is functioning correctly if // - // normfv(y) - sqrt( absqsc( beta + conjx(alpha) ) * m * n ) + // normfm(y) - sqrt( absqsc( beta + conjx(alpha) ) * m * n ) // // is negligible. // diff --git a/testsuite/src/test_axpbyv.c b/testsuite/src/test_axpbyv.c index 2cfdd416c..a82ff6e25 100644 --- a/testsuite/src/test_axpbyv.c +++ b/testsuite/src/test_axpbyv.c @@ -296,7 +296,7 @@ void libblis_test_axpbyv_check // // is functioning correctly if // - // normf( y - ( beta * y_orig + alpha * conjx(x) ) ) + // normfv( y - ( beta * y_orig + alpha * conjx(x) ) ) // // is negligible. // diff --git a/testsuite/src/test_axpy2v.c b/testsuite/src/test_axpy2v.c index f310d5cb6..eeebf15e7 100644 --- a/testsuite/src/test_axpy2v.c +++ b/testsuite/src/test_axpy2v.c @@ -314,7 +314,7 @@ void libblis_test_axpy2v_check // // is functioning correctly if // - // normf( z - v ) + // normfv( z - v ) // // is negligible, where v contains z as computed by two calls to axpyv. // diff --git a/testsuite/src/test_axpyf.c b/testsuite/src/test_axpyf.c index 7572b3a48..7a85b2212 100644 --- a/testsuite/src/test_axpyf.c +++ b/testsuite/src/test_axpyf.c @@ -319,7 +319,7 @@ void libblis_test_axpyf_check // // is functioning correctly if // - // normf( y - v ) + // normfv( y - v ) // // is negligible, where v contains y as computed by repeated calls to // axpyv. diff --git a/testsuite/src/test_axpym.c b/testsuite/src/test_axpym.c index 9097043a4..222fda33d 100644 --- a/testsuite/src/test_axpym.c +++ b/testsuite/src/test_axpym.c @@ -289,7 +289,7 @@ void libblis_test_axpym_check // // is functioning correctly if // - // normf( y - ( y_orig + alpha * conjx(x) ) ) + // normfm( y - ( y_orig + alpha * conjx(x) ) ) // // is negligible. // diff --git a/testsuite/src/test_axpyv.c b/testsuite/src/test_axpyv.c index 5f3f991ef..81d4f3770 100644 --- a/testsuite/src/test_axpyv.c +++ b/testsuite/src/test_axpyv.c @@ -286,7 +286,7 @@ void libblis_test_axpyv_check // // is functioning correctly if // - // normf( y - ( y_orig + alpha * conjx(x) ) ) + // normfv( y - ( y_orig + alpha * conjx(x) ) ) // // is negligible. // diff --git a/testsuite/src/test_dotaxpyv.c b/testsuite/src/test_dotaxpyv.c index 28d6c6916..391c119bb 100644 --- a/testsuite/src/test_dotaxpyv.c +++ b/testsuite/src/test_dotaxpyv.c @@ -345,7 +345,7 @@ void libblis_test_dotaxpyv_check // // and // - // normf( z - z_temp ) + // normfv( z - z_temp ) // // are negligible, where rho_temp and z_temp contain rho and z as // computed by dotv and axpyv, respectively. diff --git a/testsuite/src/test_dotv.c b/testsuite/src/test_dotv.c index bc4ad54f9..347ce9e62 100644 --- a/testsuite/src/test_dotv.c +++ b/testsuite/src/test_dotv.c @@ -278,7 +278,7 @@ void libblis_test_dotv_check // // is functioning correctly if // - // sqrtsc( rho.real ) - normf( x ) + // sqrtsc( rho.real ) - normfv( x ) // // and // diff --git a/testsuite/src/test_dotxaxpyf.c b/testsuite/src/test_dotxaxpyf.c index ca57ca39b..c73ab6c9d 100644 --- a/testsuite/src/test_dotxaxpyf.c +++ b/testsuite/src/test_dotxaxpyf.c @@ -366,11 +366,11 @@ void libblis_test_dotxaxpyf_check // // is functioning correctly if // - // normf( y - v ) + // normfv( y - v ) // // and // - // normf( z - q ) + // normfv( z - q ) // // are negligible, where v and q contain y and z as computed by repeated // calls to dotxv and axpyv, respectively. diff --git a/testsuite/src/test_dotxf.c b/testsuite/src/test_dotxf.c index eefe2bb77..8a1eca4eb 100644 --- a/testsuite/src/test_dotxf.c +++ b/testsuite/src/test_dotxf.c @@ -324,7 +324,7 @@ void libblis_test_dotxf_check // // is functioning correctly if // - // normf( y - v ) + // normfv( y - v ) // // is negligible, where v contains y as computed by repeated calls to // dotxv. diff --git a/testsuite/src/test_dotxv.c b/testsuite/src/test_dotxv.c index fb677a06d..da42e6ae4 100644 --- a/testsuite/src/test_dotxv.c +++ b/testsuite/src/test_dotxv.c @@ -304,7 +304,7 @@ void libblis_test_dotxv_check // // is functioning correctly if // - // sqrtsc( rho.real ) - sqrtsc( alpha ) * normf( x ) + // sqrtsc( rho.real ) - sqrtsc( alpha ) * normfv( x ) // // and // diff --git a/testsuite/src/test_gemm.c b/testsuite/src/test_gemm.c index 935f5031a..e941946e1 100644 --- a/testsuite/src/test_gemm.c +++ b/testsuite/src/test_gemm.c @@ -625,7 +625,7 @@ void libblis_test_gemm_check // // is functioning correctly if // - // normf( v - z ) + // normfv( v - z ) // // is negligible, where // diff --git a/testsuite/src/test_gemm_ukr.c b/testsuite/src/test_gemm_ukr.c index 8de3f144b..66e84d644 100644 --- a/testsuite/src/test_gemm_ukr.c +++ b/testsuite/src/test_gemm_ukr.c @@ -390,7 +390,7 @@ void libblis_test_gemm_ukr_check // // is functioning correctly if // - // normf( v - z ) + // normfv( v - z ) // // is negligible, where // diff --git a/testsuite/src/test_gemmtrsm_ukr.c b/testsuite/src/test_gemmtrsm_ukr.c index 58da5410a..e2cf10ab3 100644 --- a/testsuite/src/test_gemmtrsm_ukr.c +++ b/testsuite/src/test_gemmtrsm_ukr.c @@ -465,7 +465,7 @@ void libblis_test_gemmtrsm_ukr_check // // is functioning correctly if // - // normf( v - z ) + // normfv( v - z ) // // is negligible, where // diff --git a/testsuite/src/test_gemv.c b/testsuite/src/test_gemv.c index 7df4c3fc8..e6090e1c5 100644 --- a/testsuite/src/test_gemv.c +++ b/testsuite/src/test_gemv.c @@ -324,7 +324,7 @@ void libblis_test_gemv_check // // is functioning correctly if // - // normf( y - z ) + // normfv( y - z ) // // is negligible, where // diff --git a/testsuite/src/test_ger.c b/testsuite/src/test_ger.c index 961247e84..b44fe6ba6 100644 --- a/testsuite/src/test_ger.c +++ b/testsuite/src/test_ger.c @@ -303,7 +303,7 @@ void libblis_test_ger_check // // is functioning correctly if // - // normf( v - w ) + // normfv( v - w ) // // is negligible, where // diff --git a/testsuite/src/test_hemm.c b/testsuite/src/test_hemm.c index 8eeb2ad34..0145dd0df 100644 --- a/testsuite/src/test_hemm.c +++ b/testsuite/src/test_hemm.c @@ -338,7 +338,7 @@ void libblis_test_hemm_check // // is functioning correctly if // - // normf( v - z ) + // normfv( v - z ) // // is negligible, where // diff --git a/testsuite/src/test_hemv.c b/testsuite/src/test_hemv.c index 5aca22239..02e205392 100644 --- a/testsuite/src/test_hemv.c +++ b/testsuite/src/test_hemv.c @@ -322,7 +322,7 @@ void libblis_test_hemv_check // // is functioning correctly if // - // normf( y - v ) + // normfv( y - v ) // // is negligible, where // diff --git a/testsuite/src/test_her.c b/testsuite/src/test_her.c index 855679cf8..c122f6ce5 100644 --- a/testsuite/src/test_her.c +++ b/testsuite/src/test_her.c @@ -301,7 +301,7 @@ void libblis_test_her_check // // is functioning correctly if // - // normf( v - w ) + // normfv( v - w ) // // is negligible, where // diff --git a/testsuite/src/test_her2.c b/testsuite/src/test_her2.c index ee35cc93f..1ed6b3bb9 100644 --- a/testsuite/src/test_her2.c +++ b/testsuite/src/test_her2.c @@ -311,7 +311,7 @@ void libblis_test_her2_check // // is functioning correctly if // - // normf( v - w ) + // normfv( v - w ) // // is negligible, where // diff --git a/testsuite/src/test_her2k.c b/testsuite/src/test_her2k.c index 717bbdd34..0158e25a2 100644 --- a/testsuite/src/test_her2k.c +++ b/testsuite/src/test_her2k.c @@ -336,7 +336,7 @@ void libblis_test_her2k_check // // is functioning correctly if // - // normf( v - z ) + // normfv( v - z ) // // is negligible, where // diff --git a/testsuite/src/test_herk.c b/testsuite/src/test_herk.c index 9b557e022..abe4e70b1 100644 --- a/testsuite/src/test_herk.c +++ b/testsuite/src/test_herk.c @@ -323,7 +323,7 @@ void libblis_test_herk_check // // is functioning correctly if // - // normf( v - z ) + // normfv( v - z ) // // is negligible, where // diff --git a/testsuite/src/test_normfm.c b/testsuite/src/test_normfm.c index 8cee0332e..c4b9a0105 100644 --- a/testsuite/src/test_normfm.c +++ b/testsuite/src/test_normfm.c @@ -259,7 +259,7 @@ void libblis_test_normfm_check // // Under these conditions, we assume that the implementation for // - // norm := normf( x ) + // norm := normfm( x ) // // is functioning correctly if // diff --git a/testsuite/src/test_normfv.c b/testsuite/src/test_normfv.c index 8a473f5fd..3bcce35af 100644 --- a/testsuite/src/test_normfv.c +++ b/testsuite/src/test_normfv.c @@ -256,7 +256,7 @@ void libblis_test_normfv_check // // Under these conditions, we assume that the implementation for // - // norm := normf( x ) + // norm := normfv( x ) // // is functioning correctly if // diff --git a/testsuite/src/test_scal2m.c b/testsuite/src/test_scal2m.c index 3dcff3d78..e8440fc46 100644 --- a/testsuite/src/test_scal2m.c +++ b/testsuite/src/test_scal2m.c @@ -288,7 +288,7 @@ void libblis_test_scal2m_check // // is functioning correctly if // - // normf( y - alpha * conjx(x) ) + // normfm( y - alpha * conjx(x) ) // // is negligible. // diff --git a/testsuite/src/test_scal2v.c b/testsuite/src/test_scal2v.c index 94af24502..c200e13fc 100644 --- a/testsuite/src/test_scal2v.c +++ b/testsuite/src/test_scal2v.c @@ -285,7 +285,7 @@ void libblis_test_scal2v_check // // is functioning correctly if // - // normf( y - alpha * conjx(x) ) + // normfv( y - alpha * conjx(x) ) // // is negligible. // diff --git a/testsuite/src/test_scalm.c b/testsuite/src/test_scalm.c index b3f2066e0..6219c71df 100644 --- a/testsuite/src/test_scalm.c +++ b/testsuite/src/test_scalm.c @@ -280,7 +280,7 @@ void libblis_test_scalm_check // // is functioning correctly if // - // normf( y + -conjbeta(beta) * y_orig ) + // normfm( y + -conjbeta(beta) * y_orig ) // // is negligible. // diff --git a/testsuite/src/test_scalv.c b/testsuite/src/test_scalv.c index fefb23b4a..142b5e410 100644 --- a/testsuite/src/test_scalv.c +++ b/testsuite/src/test_scalv.c @@ -276,7 +276,7 @@ void libblis_test_scalv_check // // is functioning correctly if // - // normf( y + -conjbeta(beta) * y_orig ) + // normfv( y + -conjbeta(beta) * y_orig ) // // is negligible. // diff --git a/testsuite/src/test_symm.c b/testsuite/src/test_symm.c index 6e1f7938a..2ac7b4106 100644 --- a/testsuite/src/test_symm.c +++ b/testsuite/src/test_symm.c @@ -338,7 +338,7 @@ void libblis_test_symm_check // // is functioning correctly if // - // normf( v - z ) + // normfv( v - z ) // // is negligible, where // diff --git a/testsuite/src/test_symv.c b/testsuite/src/test_symv.c index c99941ea0..5ae5f30be 100644 --- a/testsuite/src/test_symv.c +++ b/testsuite/src/test_symv.c @@ -322,7 +322,7 @@ void libblis_test_symv_check // // is functioning correctly if // - // normf( y - v ) + // normfv( y - v ) // // is negligible, where // diff --git a/testsuite/src/test_syr.c b/testsuite/src/test_syr.c index b3a6a356d..69376b970 100644 --- a/testsuite/src/test_syr.c +++ b/testsuite/src/test_syr.c @@ -301,7 +301,7 @@ void libblis_test_syr_check // // is functioning correctly if // - // normf( v - w ) + // normfv( v - w ) // // is negligible, where // diff --git a/testsuite/src/test_syr2.c b/testsuite/src/test_syr2.c index 6b5d72e76..42d65c00e 100644 --- a/testsuite/src/test_syr2.c +++ b/testsuite/src/test_syr2.c @@ -313,7 +313,7 @@ void libblis_test_syr2_check // // is functioning correctly if // - // normf( v - w ) + // normfv( v - w ) // // is negligible, where // diff --git a/testsuite/src/test_syr2k.c b/testsuite/src/test_syr2k.c index 4ed2957eb..4d83bb88c 100644 --- a/testsuite/src/test_syr2k.c +++ b/testsuite/src/test_syr2k.c @@ -335,7 +335,7 @@ void libblis_test_syr2k_check // // is functioning correctly if // - // normf( v - z ) + // normfv( v - z ) // // is negligible, where // diff --git a/testsuite/src/test_syrk.c b/testsuite/src/test_syrk.c index 9be08484e..65d978bb0 100644 --- a/testsuite/src/test_syrk.c +++ b/testsuite/src/test_syrk.c @@ -324,7 +324,7 @@ void libblis_test_syrk_check // // is functioning correctly if // - // normf( v - z ) + // normfv( v - z ) // // is negligible, where // diff --git a/testsuite/src/test_trmm.c b/testsuite/src/test_trmm.c index 965c85669..a1decd37c 100644 --- a/testsuite/src/test_trmm.c +++ b/testsuite/src/test_trmm.c @@ -320,7 +320,7 @@ void libblis_test_trmm_check // // is functioning correctly if // - // normf( v - z ) + // normfv( v - z ) // // is negligible, where // diff --git a/testsuite/src/test_trmm3.c b/testsuite/src/test_trmm3.c index 7eccec83b..17ba2190b 100644 --- a/testsuite/src/test_trmm3.c +++ b/testsuite/src/test_trmm3.c @@ -339,7 +339,7 @@ void libblis_test_trmm3_check // // is functioning correctly if // - // normf( v - z ) + // normfv( v - z ) // // is negligible, where // diff --git a/testsuite/src/test_trmv.c b/testsuite/src/test_trmv.c index 85ee1e802..71acc90ba 100644 --- a/testsuite/src/test_trmv.c +++ b/testsuite/src/test_trmv.c @@ -304,7 +304,7 @@ void libblis_test_trmv_check // // is functioning correctly if // - // normf( y - x ) + // normfv( y - x ) // // is negligible, where // diff --git a/testsuite/src/test_trsm.c b/testsuite/src/test_trsm.c index 01d2d53a4..fa0d8e7c3 100644 --- a/testsuite/src/test_trsm.c +++ b/testsuite/src/test_trsm.c @@ -327,7 +327,7 @@ void libblis_test_trsm_check // // is functioning correctly if // - // normf( v - z ) + // normfv( v - z ) // // is negligible, where // diff --git a/testsuite/src/test_trsm_ukr.c b/testsuite/src/test_trsm_ukr.c index 1f81400c9..ee468dbd3 100644 --- a/testsuite/src/test_trsm_ukr.c +++ b/testsuite/src/test_trsm_ukr.c @@ -401,7 +401,7 @@ void libblis_test_trsm_ukr_check // // is functioning correctly if // - // normf( v - z ) + // normfv( v - z ) // // is negligible, where // diff --git a/testsuite/src/test_trsv.c b/testsuite/src/test_trsv.c index 15398b193..12543cd9a 100644 --- a/testsuite/src/test_trsv.c +++ b/testsuite/src/test_trsv.c @@ -305,7 +305,7 @@ void libblis_test_trsv_check // // is functioning correctly if // - // normf( y - x_orig ) + // normfv( y - x_orig ) // // is negligible, where // diff --git a/testsuite/src/test_xpbym.c b/testsuite/src/test_xpbym.c index b7acc654e..2340b4e11 100644 --- a/testsuite/src/test_xpbym.c +++ b/testsuite/src/test_xpbym.c @@ -288,7 +288,7 @@ void libblis_test_xpbym_check // // is functioning correctly if // - // normf( y - ( beta * y_orig + conjx(x) ) ) + // normfm( y - ( beta * y_orig + conjx(x) ) ) // // is negligible. // diff --git a/testsuite/src/test_xpbyv.c b/testsuite/src/test_xpbyv.c index 6b2f21734..197de86e7 100644 --- a/testsuite/src/test_xpbyv.c +++ b/testsuite/src/test_xpbyv.c @@ -283,7 +283,7 @@ void libblis_test_xpbyv_check // // is functioning correctly if // - // normf( y - ( beta * y_orig + conjx(x) ) ) + // normfv( y - ( beta * y_orig + conjx(x) ) ) // // is negligible. // From ba4a77177c82afca6b2aecdc18033f994527d220 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Fri, 19 Jul 2019 14:42:37 -0500 Subject: [PATCH 080/109] Updated -march flags for sandybridge, haswell. Details: - Updated the '-march=corei7-avx' flag in the sandybridge subconfig to '-march=sandybridge' and the '-march=core-avx2' flag in the haswell subconfig to '-march=haswell'. The older flags were used by older versions of gcc and should have been updated to the newer forms a long time ago. (The older flags were clearly working, even though they are no longer documented in the gcc man page.) --- config/haswell/make_defs.mk | 4 ++-- config/sandybridge/make_defs.mk | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/haswell/make_defs.mk b/config/haswell/make_defs.mk index f08d5a937..102b34237 100644 --- a/config/haswell/make_defs.mk +++ b/config/haswell/make_defs.mk @@ -63,13 +63,13 @@ endif # Flags specific to optimized kernels. CKOPTFLAGS := $(COPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CKVECFLAGS := -mavx2 -mfma -mfpmath=sse -march=core-avx2 +CKVECFLAGS := -mavx2 -mfma -mfpmath=sse -march=haswell else ifeq ($(CC_VENDOR),icc) CKVECFLAGS := -xCORE-AVX2 else ifeq ($(CC_VENDOR),clang) -CKVECFLAGS := -mavx2 -mfma -mfpmath=sse -march=core-avx2 +CKVECFLAGS := -mavx2 -mfma -mfpmath=sse -march=haswell else $(error gcc, icc, or clang is required for this configuration.) endif diff --git a/config/sandybridge/make_defs.mk b/config/sandybridge/make_defs.mk index ba18e4f32..23acc1708 100644 --- a/config/sandybridge/make_defs.mk +++ b/config/sandybridge/make_defs.mk @@ -63,13 +63,13 @@ endif # Flags specific to optimized kernels. CKOPTFLAGS := $(COPTFLAGS) ifeq ($(CC_VENDOR),gcc) -CKVECFLAGS := -mavx -mfpmath=sse -march=corei7-avx +CKVECFLAGS := -mavx -mfpmath=sse -march=sandybridge else ifeq ($(CC_VENDOR),icc) CKVECFLAGS := -xAVX else ifeq ($(CC_VENDOR),clang) -CKVECFLAGS := -mavx -mfpmath=sse -march=corei7-avx +CKVECFLAGS := -mavx -mfpmath=sse -march=sandybridge else $(error gcc, icc, or clang is required for this configuration.) endif From d44c42dce79d7663438c5248eea20b242590d252 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Fri, 19 Jul 2019 14:46:23 -0500 Subject: [PATCH 081/109] Updated haswell MC cache blocksizes. Details: - Updated the default MC cache blocksizes used by the haswell subconfig for both row-preferential (the default) and column-preferential microkernels. --- config/haswell/bli_cntx_init_haswell.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/config/haswell/bli_cntx_init_haswell.c b/config/haswell/bli_cntx_init_haswell.c index ea839e4ee..cd8a9cc74 100644 --- a/config/haswell/bli_cntx_init_haswell.c +++ b/config/haswell/bli_cntx_init_haswell.c @@ -123,12 +123,16 @@ void bli_cntx_init_haswell( cntx_t* cntx ) #if 1 bli_blksz_init_easy( &blkszs[ BLIS_MR ], 6, 6, 3, 3 ); bli_blksz_init_easy( &blkszs[ BLIS_NR ], 16, 8, 8, 4 ); + //bli_blksz_init_easy( &blkszs[ BLIS_MC ], 1008, 1008, 1008, 1008 ); + bli_blksz_init_easy( &blkszs[ BLIS_MC ], 168, 72, 75, 192 ); + bli_blksz_init_easy( &blkszs[ BLIS_KC ], 256, 256, 256, 256 ); #else bli_blksz_init_easy( &blkszs[ BLIS_MR ], 16, 8, 8, 4 ); bli_blksz_init_easy( &blkszs[ BLIS_NR ], 6, 6, 3, 3 ); -#endif - bli_blksz_init_easy( &blkszs[ BLIS_MC ], 144, 72, 144, 72 ); + //bli_blksz_init_easy( &blkszs[ BLIS_MC ], 1024, 1024, 1024, 1024 ); + bli_blksz_init_easy( &blkszs[ BLIS_MC ], 112, 72, 56, 44 ); bli_blksz_init_easy( &blkszs[ BLIS_KC ], 256, 256, 256, 256 ); +#endif bli_blksz_init_easy( &blkszs[ BLIS_NC ], 4080, 4080, 4080, 4080 ); bli_blksz_init_easy( &blkszs[ BLIS_AF ], 8, 8, 8, 8 ); bli_blksz_init_easy( &blkszs[ BLIS_DF ], 8, 8, 8, 8 ); From 06c5a5c4a9a5316be3dbd5b51795a6fb5c817b23 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Mon, 22 Jul 2019 13:59:05 -0500 Subject: [PATCH 082/109] Added test/1m4m driver directory. Details: - Added a new standalone test driver directory named '1m4m' that can build and run performance experiments for BLIS 1m, 4m1a, assembly, OpenBLAS, and the vendor library (MKL). This new driver directory was used to regenerate performance results for the 1m paper. - Added alternate (commented-out) cache blocksizes to config/haswell/bli_cntx_init_haswell.c. These blocksizes tend to work well on an a 12-core Intel Xeon E5-2650 v3. --- config/haswell/bli_cntx_init_haswell.c | 2 + test/1m4m/Makefile | 515 +++++++++++++++++++++++++ test/1m4m/runme.sh | 242 ++++++++++++ test/1m4m/test_gemm.c | 425 ++++++++++++++++++++ 4 files changed, 1184 insertions(+) create mode 100644 test/1m4m/Makefile create mode 100755 test/1m4m/runme.sh create mode 100644 test/1m4m/test_gemm.c diff --git a/config/haswell/bli_cntx_init_haswell.c b/config/haswell/bli_cntx_init_haswell.c index cd8a9cc74..7f222415a 100644 --- a/config/haswell/bli_cntx_init_haswell.c +++ b/config/haswell/bli_cntx_init_haswell.c @@ -124,12 +124,14 @@ void bli_cntx_init_haswell( cntx_t* cntx ) bli_blksz_init_easy( &blkszs[ BLIS_MR ], 6, 6, 3, 3 ); bli_blksz_init_easy( &blkszs[ BLIS_NR ], 16, 8, 8, 4 ); //bli_blksz_init_easy( &blkszs[ BLIS_MC ], 1008, 1008, 1008, 1008 ); + //bli_blksz_init_easy( &blkszs[ BLIS_MC ], 168, 72, 72, 36 ); bli_blksz_init_easy( &blkszs[ BLIS_MC ], 168, 72, 75, 192 ); bli_blksz_init_easy( &blkszs[ BLIS_KC ], 256, 256, 256, 256 ); #else bli_blksz_init_easy( &blkszs[ BLIS_MR ], 16, 8, 8, 4 ); bli_blksz_init_easy( &blkszs[ BLIS_NR ], 6, 6, 3, 3 ); //bli_blksz_init_easy( &blkszs[ BLIS_MC ], 1024, 1024, 1024, 1024 ); + //bli_blksz_init_easy( &blkszs[ BLIS_MC ], 112, 64, 56, 32 ); bli_blksz_init_easy( &blkszs[ BLIS_MC ], 112, 72, 56, 44 ); bli_blksz_init_easy( &blkszs[ BLIS_KC ], 256, 256, 256, 256 ); #endif diff --git a/test/1m4m/Makefile b/test/1m4m/Makefile new file mode 100644 index 000000000..74c0804ca --- /dev/null +++ b/test/1m4m/Makefile @@ -0,0 +1,515 @@ +#!/bin/bash +# +# BLIS +# An object-based framework for developing high-performance BLAS-like +# libraries. +# +# Copyright (C) 2014, The University of Texas at Austin +# Copyright (C) 2018, Advanced Micro Devices, Inc. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# - Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# - Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# - Neither the name(s) of the copyright holder(s) nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# + +# +# Makefile +# +# Field G. Van Zee +# +# Makefile for standalone BLIS test drivers. +# + +# +# --- Makefile PHONY target definitions ---------------------------------------- +# + +.PHONY: all \ + clean cleanx + + + +# +# --- Determine makefile fragment location ------------------------------------- +# + +# Comments: +# - DIST_PATH is assumed to not exist if BLIS_INSTALL_PATH is given. +# - We must use recursively expanded assignment for LIB_PATH and INC_PATH in +# the second case because CONFIG_NAME is not yet set. +ifneq ($(strip $(BLIS_INSTALL_PATH)),) +LIB_PATH := $(BLIS_INSTALL_PATH)/lib +INC_PATH := $(BLIS_INSTALL_PATH)/include/blis +SHARE_PATH := $(BLIS_INSTALL_PATH)/share/blis +else +DIST_PATH := ../.. +LIB_PATH = ../../lib/$(CONFIG_NAME) +INC_PATH = ../../include/$(CONFIG_NAME) +SHARE_PATH := ../.. +endif + + + +# +# --- Include common makefile definitions -------------------------------------- +# + +# Include the common makefile fragment. +-include $(SHARE_PATH)/common.mk + + + +# +# --- BLAS implementations ----------------------------------------------------- +# + +# BLAS library path(s). This is where the BLAS libraries reside. +HOME_LIB_PATH := $(HOME)/flame/lib + +# OpenBLAS +OPENBLAS_LIB := $(HOME_LIB_PATH)/libopenblas.a +OPENBLASP_LIB := $(HOME_LIB_PATH)/libopenblasp.a + +# ATLAS +#ATLAS_LIB := $(HOME_LIB_PATH)/libf77blas.a \ +# $(HOME_LIB_PATH)/libatlas.a + +# Eigen +EIGEN_INC := $(HOME)/flame/eigen/include/eigen3 +EIGEN_LIB := $(HOME_LIB_PATH)/libeigen_blas_static.a +EIGENP_LIB := $(EIGEN_LIB) + +# MKL +MKL_LIB_PATH := $(HOME)/intel/mkl/lib/intel64 +MKL_LIB := -L$(MKL_LIB_PATH) \ + -lmkl_intel_lp64 \ + -lmkl_core \ + -lmkl_sequential \ + -lpthread -lm -ldl +#MKLP_LIB := -L$(MKL_LIB_PATH) \ +# -lmkl_intel_thread \ +# -lmkl_core \ +# -lmkl_intel_ilp64 \ +# -L$(ICC_LIB_PATH) \ +# -liomp5 +MKLP_LIB := -L$(MKL_LIB_PATH) \ + -lmkl_intel_lp64 \ + -lmkl_core \ + -lmkl_gnu_thread \ + -lpthread -lm -ldl -fopenmp + #-L$(ICC_LIB_PATH) \ + #-lgomp + +VENDOR_LIB := $(MKL_LIB) +VENDORP_LIB := $(MKLP_LIB) + + +# +# --- Problem size definitions ------------------------------------------------- +# + +# Single core (single-threaded) +PS_BEGIN := 48 +PS_MAX := 2400 +PS_INC := 48 + +# Single-socket (multithreaded) +P1_BEGIN := 96 +P1_MAX := 4800 +P1_INC := 96 + +# Dual-socket (multithreaded) +P2_BEGIN := 144 +P2_MAX := 7200 +P2_INC := 144 + + +# +# --- General build definitions ------------------------------------------------ +# + +TEST_SRC_PATH := . +TEST_OBJ_PATH := . + +# Gather all local object files. +TEST_OBJS := $(sort $(patsubst $(TEST_SRC_PATH)/%.c, \ + $(TEST_OBJ_PATH)/%.o, \ + $(wildcard $(TEST_SRC_PATH)/*.c))) + +# Override the value of CINCFLAGS so that the value of CFLAGS returned by +# get-user-cflags-for() is not cluttered up with include paths needed only +# while building BLIS. +CINCFLAGS := -I$(INC_PATH) + +# Use the "framework" CFLAGS for the configuration family. +CFLAGS := $(call get-user-cflags-for,$(CONFIG_NAME)) + +# Add local header paths to CFLAGS. +CFLAGS += -I$(TEST_SRC_PATH) + +# Locate the libblis library to which we will link. +#LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L) + +# Define a set of CFLAGS for use with C++ and Eigen. +CXXFLAGS := $(subst -std=c99,-std=c++11,$(CFLAGS)) +CXXFLAGS += -I$(EIGEN_INC) + +# Create a copy of CXXFLAGS without -fopenmp in order to disable multithreading. +CXXFLAGS_ST := -march=native $(subst -fopenmp,,$(CXXFLAGS)) +CXXFLAGS_MT := -march=native $(CXXFLAGS) + + +# Which library? +BLI_DEF := -DBLIS +BLA_DEF := -DBLAS +EIG_DEF := -DEIGEN + +# Complex implementation type +D3MHW := -DIND=BLIS_3MH +D3M1 := -DIND=BLIS_3M1 +D4MHW := -DIND=BLIS_4MH +D4M1B := -DIND=BLIS_4M1B +D4M1A := -DIND=BLIS_4M1A +D1M := -DIND=BLIS_1M +DNAT := -DIND=BLIS_NAT + +# Implementation string +#STR_3MHW := -DSTR=\"3mhw\" +#STR_3M1 := -DSTR=\"3m1\" +#STR_4MHW := -DSTR=\"4mhw\" +#STR_4M1B := -DSTR=\"4m1b\" +STR_4M1A := -DSTR=\"4m1a_blis\" +STR_1M := -DSTR=\"1m_blis\" +STR_NAT := -DSTR=\"asm_blis\" +STR_OBL := -DSTR=\"openblas\" +STR_EIG := -DSTR=\"eigen\" +STR_VEN := -DSTR=\"vendor\" + +# Single or multithreaded string +STR_ST := -DTHR_STR=\"st\" +STR_1S := -DTHR_STR=\"1s\" +STR_2S := -DTHR_STR=\"2s\" + +# Problem size specification +PDEF_ST := -DP_BEGIN=$(PS_BEGIN) -DP_INC=$(PS_INC) -DP_MAX=$(PS_MAX) +PDEF_1S := -DP_BEGIN=$(P1_BEGIN) -DP_INC=$(P1_INC) -DP_MAX=$(P1_MAX) +PDEF_2S := -DP_BEGIN=$(P2_BEGIN) -DP_INC=$(P2_INC) -DP_MAX=$(P2_MAX) + + + +# +# --- Targets/rules ------------------------------------------------------------ +# + +all: all-st all-1s all-2s +blis: blis-st blis-1s blis-2s +openblas: openblas-st openblas-1s openblas-2s +eigen: eigen-st eigen-1s eigen-2s +vendor: vendor-st vendor-1s vendor-2s +mkl: vendor +armpl: vendor + +all-st: blis-st openblas-st mkl-st +all-1s: blis-1s openblas-1s mkl-1s +all-2s: blis-2s openblas-2s mkl-2s + +blis-st: blis-nat-st blis-1m-st blis-4m1a-st +blis-1s: blis-nat-1s blis-1m-1s blis-4m1a-1s +blis-2s: blis-nat-2s blis-1m-2s blis-4m1a-2s + +#blis-ind: blis-ind-st blis-ind-mt +blis-nat: blis-nat-st blis-nat-1s blis-nat-2s +blis-1m: blis-1m-st blis-1m-1s blis-1m-2s +blis-4m1a: blis-4m1a-st blis-4m1a-1s blis-4m1a-2s + +# Define the datatypes, operations, and implementations. +DTS := s d c z +OPS := gemm +BIMPLS := asm_blis 4m1a_blis 1m_blis openblas vendor +EIMPLS := eigen + +# Define functions to construct object filenames from the datatypes and +# operations given an implementation. We define one function for single- +# threaded, single-socket, and dual-socket filenames. +get-st-objs = $(foreach dt,$(DTS),$(foreach op,$(OPS),test_$(dt)$(op)_$(PS_MAX)_$(1)_st.o)) +get-1s-objs = $(foreach dt,$(DTS),$(foreach op,$(OPS),test_$(dt)$(op)_$(P1_MAX)_$(1)_1s.o)) +get-2s-objs = $(foreach dt,$(DTS),$(foreach op,$(OPS),test_$(dt)$(op)_$(P2_MAX)_$(1)_2s.o)) + +# Construct object and binary names for single-threaded, single-socket, and +# dual-socket files for BLIS, OpenBLAS, and a vendor library (e.g. MKL). +BLIS_1M_ST_OBJS := $(call get-st-objs,1m_blis) +BLIS_1M_ST_BINS := $(patsubst %.o,%.x,$(BLIS_1M_ST_OBJS)) +BLIS_1M_1S_OBJS := $(call get-1s-objs,1m_blis) +BLIS_1M_1S_BINS := $(patsubst %.o,%.x,$(BLIS_1M_1S_OBJS)) +BLIS_1M_2S_OBJS := $(call get-2s-objs,1m_blis) +BLIS_1M_2S_BINS := $(patsubst %.o,%.x,$(BLIS_1M_2S_OBJS)) + +BLIS_4M1A_ST_OBJS := $(call get-st-objs,4m1a_blis) +BLIS_4M1A_ST_BINS := $(patsubst %.o,%.x,$(BLIS_4M1A_ST_OBJS)) +BLIS_4M1A_1S_OBJS := $(call get-1s-objs,4m1a_blis) +BLIS_4M1A_1S_BINS := $(patsubst %.o,%.x,$(BLIS_4M1A_1S_OBJS)) +BLIS_4M1A_2S_OBJS := $(call get-2s-objs,4m1a_blis) +BLIS_4M1A_2S_BINS := $(patsubst %.o,%.x,$(BLIS_4M1A_2S_OBJS)) + +BLIS_NAT_ST_OBJS := $(call get-st-objs,asm_blis) +BLIS_NAT_ST_BINS := $(patsubst %.o,%.x,$(BLIS_NAT_ST_OBJS)) +BLIS_NAT_1S_OBJS := $(call get-1s-objs,asm_blis) +BLIS_NAT_1S_BINS := $(patsubst %.o,%.x,$(BLIS_NAT_1S_OBJS)) +BLIS_NAT_2S_OBJS := $(call get-2s-objs,asm_blis) +BLIS_NAT_2S_BINS := $(patsubst %.o,%.x,$(BLIS_NAT_2S_OBJS)) + +OPENBLAS_ST_OBJS := $(call get-st-objs,openblas) +OPENBLAS_ST_BINS := $(patsubst %.o,%.x,$(OPENBLAS_ST_OBJS)) +OPENBLAS_1S_OBJS := $(call get-1s-objs,openblas) +OPENBLAS_1S_BINS := $(patsubst %.o,%.x,$(OPENBLAS_1S_OBJS)) +OPENBLAS_2S_OBJS := $(call get-2s-objs,openblas) +OPENBLAS_2S_BINS := $(patsubst %.o,%.x,$(OPENBLAS_2S_OBJS)) + +EIGEN_ST_OBJS := $(call get-st-objs,eigen) +EIGEN_ST_BINS := $(patsubst %.o,%.x,$(EIGEN_ST_OBJS)) +EIGEN_1S_OBJS := $(call get-1s-objs,eigen) +EIGEN_1S_BINS := $(patsubst %.o,%.x,$(EIGEN_1S_OBJS)) +EIGEN_2S_OBJS := $(call get-2s-objs,eigen) +EIGEN_2S_BINS := $(patsubst %.o,%.x,$(EIGEN_2S_OBJS)) + +VENDOR_ST_OBJS := $(call get-st-objs,vendor) +VENDOR_ST_BINS := $(patsubst %.o,%.x,$(VENDOR_ST_OBJS)) +VENDOR_1S_OBJS := $(call get-1s-objs,vendor) +VENDOR_1S_BINS := $(patsubst %.o,%.x,$(VENDOR_1S_OBJS)) +VENDOR_2S_OBJS := $(call get-2s-objs,vendor) +VENDOR_2S_BINS := $(patsubst %.o,%.x,$(VENDOR_2S_OBJS)) + +# Define some targets associated with the above object/binary files. +blis-nat-st: $(BLIS_NAT_ST_BINS) +blis-nat-1s: $(BLIS_NAT_1S_BINS) +blis-nat-2s: $(BLIS_NAT_2S_BINS) + +blis-1m-st: $(BLIS_1M_ST_BINS) +blis-1m-1s: $(BLIS_1M_1S_BINS) +blis-1m-2s: $(BLIS_1M_2S_BINS) + +blis-4m1a-st: $(BLIS_4M1A_ST_BINS) +blis-4m1a-1s: $(BLIS_4M1A_1S_BINS) +blis-4m1a-2s: $(BLIS_4M1A_2S_BINS) + +openblas-st: $(OPENBLAS_ST_BINS) +openblas-1s: $(OPENBLAS_1S_BINS) +openblas-2s: $(OPENBLAS_2S_BINS) + +eigen-st: $(EIGEN_ST_BINS) +eigen-1s: $(EIGEN_1S_BINS) +eigen-2s: $(EIGEN_2S_BINS) + +vendor-st: $(VENDOR_ST_BINS) +vendor-1s: $(VENDOR_1S_BINS) +vendor-2s: $(VENDOR_2S_BINS) + +mkl-st: vendor-st +mkl-1s: vendor-1s +mkl-2s: vendor-2s + +armpl-st: vendor-st +armpl-1s: vendor-1s +armpl-2s: vendor-2s + +# Mark the object files as intermediate so that make will remove them +# automatically after building the binaries on which they depend. +.INTERMEDIATE: $(BLIS_NAT_ST_OBJS) $(BLIS_NAT_1S_OBJS) $(BLIS_NAT_2S_OBJS) +.INTERMEDIATE: $(BLIS_1M_ST_OBJS) $(BLIS_1M_1S_OBJS) $(BLIS_1M_2S_OBJS) +.INTERMEDIATE: $(BLIS_4M1A_ST_OBJS) $(BLIS_4M1A_1S_OBJS) $(BLIS_4M1A_2S_OBJS) +.INTERMEDIATE: $(OPENBLAS_ST_OBJS) $(OPENBLAS_1S_OBJS) $(OPENBLAS_2S_OBJS) +.INTERMEDIATE: $(EIGEN_ST_OBJS) $(EIGEN_1S_OBJS) $(EIGEN_2S_OBJS) +.INTERMEDIATE: $(VENDOR_ST_OBJS) $(VENDOR_1S_OBJS) $(VENDOR_2S_OBJS) + + +# --Object file rules -- + +#$(TEST_OBJ_PATH)/%.o: $(TEST_SRC_PATH)/%.c +# $(CC) $(CFLAGS) -c $< -o $@ + +# A function to return the datatype cpp macro def from the datatype +# character. +get-dt-cpp = $(strip \ + $(if $(findstring s,$(1)),-DDT=BLIS_FLOAT -DIS_FLOAT,\ + $(if $(findstring d,$(1)),-DDT=BLIS_DOUBLE -DIS_DOUBLE,\ + $(if $(findstring c,$(1)),-DDT=BLIS_SCOMPLEX -DIS_SCOMPLEX,\ + -DDT=BLIS_DCOMPLEX -DIS_DCOMPLEX)))) + +get-in-cpp = $(strip \ + $(if $(findstring 1m_blis,$(1)),-DIND=BLIS_1M,\ + $(if $(findstring 4m1a_blis,$(1)),-DIND=BLIS_4M1A,\ + -DIND=BLIS_NAT))) + +# A function to return other cpp macros that help the test driver +# identify the implementation. +#get-bl-cpp = $(strip \ +# $(if $(findstring blis,$(1)),$(STR_NAT) $(BLI_DEF),\ +# $(if $(findstring openblas,$(1)),$(STR_OBL) $(BLA_DEF),\ +# $(if $(findstring eigen,$(1)),$(STR_EIG) $(EIG_DEF),\ +# $(STR_VEN) $(BLA_DEF))))) + +get-bl-cpp = $(strip \ + $(if $(findstring 1m_blis,$(1)),$(STR_1M) $(BLI_DEF),\ + $(if $(findstring 4m1a_blis,$(1)),$(STR_4M1A) $(BLI_DEF),\ + $(if $(findstring asm_blis,$(1)),$(STR_NAT) $(BLI_DEF),\ + $(if $(findstring openblas,$(1)),$(STR_OBL) $(BLA_DEF),\ + $(if $(and $(findstring eigen,$(1)),\ + $(findstring gemm,$(2))),\ + $(STR_EIG) $(EIG_DEF),\ + $(if $(findstring eigen,$(1)),\ + $(STR_EIG) $(BLA_DEF),\ + $(STR_VEN) $(BLA_DEF)))))))) + + +# Rules for BLIS and BLAS libraries. +define make-st-rule +test_$(1)$(2)_$(PS_MAX)_$(3)_st.o: test_$(op).c Makefile + $(CC) $(CFLAGS) $(PDEF_ST) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3),$(2)) $(call get-in-cpp,$(3)) $(STR_ST) -c $$< -o $$@ +endef + +define make-1s-rule +test_$(1)$(2)_$(P1_MAX)_$(3)_1s.o: test_$(op).c Makefile + $(CC) $(CFLAGS) $(PDEF_1S) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3),$(2)) $(call get-in-cpp,$(3)) $(STR_1S) -c $$< -o $$@ +endef + +define make-2s-rule +test_$(1)$(2)_$(P2_MAX)_$(3)_2s.o: test_$(op).c Makefile + $(CC) $(CFLAGS) $(PDEF_2S) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3),$(2)) $(call get-in-cpp,$(3)) $(STR_2S) -c $$< -o $$@ +endef + +$(foreach dt,$(DTS), \ +$(foreach op,$(OPS), \ +$(foreach im,$(BIMPLS),$(eval $(call make-st-rule,$(dt),$(op),$(im)))))) + +$(foreach dt,$(DTS), \ +$(foreach op,$(OPS), \ +$(foreach im,$(BIMPLS),$(eval $(call make-1s-rule,$(dt),$(op),$(im)))))) + +$(foreach dt,$(DTS), \ +$(foreach op,$(OPS), \ +$(foreach im,$(BIMPLS),$(eval $(call make-2s-rule,$(dt),$(op),$(im)))))) + +# Rules for Eigen. +define make-eigst-rule +test_$(1)$(2)_$(PS_MAX)_$(3)_st.o: test_$(op).c Makefile + $(CXX) $(CXXFLAGS_ST) $(PDEF_ST) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3),$(2)) $(DNAT) $(STR_ST) -c $$< -o $$@ +endef + +define make-eig1s-rule +test_$(1)$(2)_$(P1_MAX)_$(3)_1s.o: test_$(op).c Makefile + $(CXX) $(CXXFLAGS_MT) $(PDEF_1S) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3),$(2)) $(DNAT) $(STR_1S) -c $$< -o $$@ +endef + +define make-eig2s-rule +test_$(1)$(2)_$(P2_MAX)_$(3)_2s.o: test_$(op).c Makefile + $(CXX) $(CXXFLAGS_MT) $(PDEF_2S) $(call get-dt-cpp,$(1)) $(call get-bl-cpp,$(3),$(2)) $(DNAT) $(STR_2S) -c $$< -o $$@ +endef + +$(foreach dt,$(DTS), \ +$(foreach op,$(OPS), \ +$(foreach im,$(EIMPLS),$(eval $(call make-eigst-rule,$(dt),$(op),$(im)))))) + +$(foreach dt,$(DTS), \ +$(foreach op,$(OPS), \ +$(foreach im,$(EIMPLS),$(eval $(call make-eig1s-rule,$(dt),$(op),$(im)))))) + +$(foreach dt,$(DTS), \ +$(foreach op,$(OPS), \ +$(foreach im,$(EIMPLS),$(eval $(call make-eig2s-rule,$(dt),$(op),$(im)))))) + + +# -- Executable file rules -- + +# NOTE: For the BLAS test drivers, we place the BLAS libraries before BLIS +# on the link command line in case BLIS was configured with the BLAS +# compatibility layer. This prevents BLIS from inadvertently getting called +# for the BLAS routines we are trying to test with. + +test_%_$(PS_MAX)_1m_blis_st.x: test_%_$(PS_MAX)_1m_blis_st.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P1_MAX)_1m_blis_1s.x: test_%_$(P1_MAX)_1m_blis_1s.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P2_MAX)_1m_blis_2s.x: test_%_$(P2_MAX)_1m_blis_2s.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + + +test_%_$(PS_MAX)_4m1a_blis_st.x: test_%_$(PS_MAX)_4m1a_blis_st.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P1_MAX)_4m1a_blis_1s.x: test_%_$(P1_MAX)_4m1a_blis_1s.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P2_MAX)_4m1a_blis_2s.x: test_%_$(P2_MAX)_4m1a_blis_2s.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + + +test_%_$(PS_MAX)_asm_blis_st.x: test_%_$(PS_MAX)_asm_blis_st.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P1_MAX)_asm_blis_1s.x: test_%_$(P1_MAX)_asm_blis_1s.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P2_MAX)_asm_blis_2s.x: test_%_$(P2_MAX)_asm_blis_2s.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + + +test_%_$(PS_MAX)_openblas_st.x: test_%_$(PS_MAX)_openblas_st.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(OPENBLAS_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P1_MAX)_openblas_1s.x: test_%_$(P1_MAX)_openblas_1s.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(OPENBLASP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P2_MAX)_openblas_2s.x: test_%_$(P2_MAX)_openblas_2s.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(OPENBLASP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + + +test_%_$(PS_MAX)_eigen_st.x: test_%_$(PS_MAX)_eigen_st.o $(LIBBLIS_LINK) + $(CXX) $(strip $< $(EIGEN_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P1_MAX)_eigen_1s.x: test_%_$(P1_MAX)_eigen_1s.o $(LIBBLIS_LINK) + $(CXX) $(strip $< $(EIGENP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P2_MAX)_eigen_2s.x: test_%_$(P2_MAX)_eigen_2s.o $(LIBBLIS_LINK) + $(CXX) $(strip $< $(EIGENP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + + +test_%_$(PS_MAX)_vendor_st.x: test_%_$(PS_MAX)_vendor_st.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(VENDOR_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P1_MAX)_vendor_1s.x: test_%_$(P1_MAX)_vendor_1s.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(VENDORP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + +test_%_$(P2_MAX)_vendor_2s.x: test_%_$(P2_MAX)_vendor_2s.o $(LIBBLIS_LINK) + $(CC) $(strip $< $(VENDORP_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@) + + +# -- Clean rules -- + +clean: cleanx + +cleanx: + - $(RM_F) *.o *.x + diff --git a/test/1m4m/runme.sh b/test/1m4m/runme.sh new file mode 100755 index 000000000..d79d53925 --- /dev/null +++ b/test/1m4m/runme.sh @@ -0,0 +1,242 @@ +#!/bin/bash + +# File pefixes. +exec_root="test" +out_root="output" +delay=0.1 + +#sys="blis" +#sys="stampede2" +sys="lonestar5" +#sys="ul252" +#sys="ul264" + +# Bind threads to processors. +#export OMP_PROC_BIND=true +#export GOMP_CPU_AFFINITY="0 2 4 6 8 10 12 14 16 18 20 22 1 3 5 7 9 11 13 15 17 19 21 23" +#export GOMP_CPU_AFFINITY="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103" + +if [ ${sys} = "blis" ]; then + + export GOMP_CPU_AFFINITY="0 1 2 3" + + threads="jc1ic1jr1_2400 + jc2ic3jr2_6000 + jc4ic3jr2_8000" + +elif [ ${sys} = "stampede2" ]; then + + echo "Need to set GOMP_CPU_AFFINITY." + exit 1 + + threads="jc1ic1jr1_2400 + jc4ic6jr1_6000 + jc4ic12jr1_8000" + +elif [ ${sys} = "lonestar5" ]; then + + export GOMP_CPU_AFFINITY="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23" + + # A hack to use libiomp5 with gcc. + #export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/apps/intel/16.0.1.150/compilers_and_libraries_2016.1.150/linux/compiler/lib/intel64" + + #threads="jc1ic1jr1_2400 + # jc2ic3jr2_4800 + # jc4ic3jr2_9600" + threads="jc1ic1jr1_2400 + jc4ic3jr2_7200" + threads="jc4ic3jr2_7200" + +elif [ ${sys} = "ul252" ]; then + + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/field/intel/mkl/lib/intel64" + export GOMP_CPU_AFFINITY="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51" + + threads="jc1ic1jr1_2400 + jc2ic13jr1_6000 + jc4ic13jr1_8000" + +elif [ ${sys} = "ul264" ]; then + + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/field/intel/mkl/lib/intel64" + export GOMP_CPU_AFFINITY="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63" + + threads="jc1ic1jr1_2400 + jc1ic8jr4_6000 + jc2ic8jr4_8000" + +fi + +# Datatypes to test. +test_dts="s d c z" + +# Operations to test. +#test_ops="gemm hemm herk trmm trsm" +test_ops="gemm" + +# Implementations to test. +#impls="blis" +#impls="other" +#impls="eigen" +impls="all" + +if [ "${impls}" = "blis" ]; then + + test_impls="asm_blis" + +elif [ "${impls}" = "eigen" ]; then + + test_impls="eigen" + +elif [ "${impls}" = "other" ]; then + + test_impls="openblas vendor" + +elif [ "${impls}" = "eigen" ]; then + + test_impls="eigen" + +else + + test_impls="openblas vendor asm_blis 4m1a_blis 1m_blis" + #test_impls="openblas" + #test_impls="asm_blis 4m1a_blis 1m_blis" + #test_impls="asm_blis 1m_blis" +fi + +# Save a copy of GOMP_CPU_AFFINITY so that if we have to unset it, we can +# restore the value. +GOMP_CPU_AFFINITYsave=${GOMP_CPU_AFFINITY} + + +# First perform real test cases. +for th in ${threads}; do + + # Start with one way of parallelism in each loop. We will now begin + # parsing the 'th' variable to update one or more of these threading + # parameters. + jc_nt=1; pc_nt=1; ic_nt=1; jr_nt=1; ir_nt=1 + + # Strip everything before and after the underscore so that what remains + # is the problem size and threading parameter string, respectively. + psize=${th##*_}; thinfo=${th%%_*} + + # Identify each threading parameter and insert a space before it. + thsep=$(echo -e ${thinfo} | sed -e "s/\([jip][cr]\)/ \1/g" ) + + nt=1 + + for loopnum in ${thsep}; do + + # Given the current string, which identifies a loop and the + # number of ways of parallelism for that loop, strip out + # the ways and loop separately to identify each. + loop=$(echo -e ${loopnum} | sed -e "s/[0-9]//g" ) + num=$(echo -e ${loopnum} | sed -e "s/[a-z]//g" ) + + # Construct a string that we can evaluate to set the number + # of ways of parallelism for the current loop. + loop_nt_eq_num="${loop}_nt=${num}" + + # Update the total number of threads. + nt=$(expr ${nt} \* ${num}) + + # Evaluate the string to assign the ways to the variable. + eval ${loop_nt_eq_num} + + done + + echo "Switching to: jc${jc_nt} pc${pc_nt} ic${ic_nt} jr${jr_nt} ir${ir_nt} (nt = ${nt}) p_max${psize}" + + + for dt in ${test_dts}; do + + for im in ${test_impls}; do + + if [ "${dt}" = "s" -o "${dt}" = "d" ] && \ + [ "${im}" = "1m_blis" -o "${im}" = "4m1a_blis" ]; then + continue + fi + + for op in ${test_ops}; do + + # Eigen does not support multithreading for hemm, herk, trmm, + # or trsm. So if we're getting ready to execute an Eigen driver + # for one of these operations and nt > 1, we skip this test. + if [ "${im}" = "eigen" ] && \ + [ "${op}" != "gemm" ] && \ + [ "${nt}" != "1" ]; then + continue; + fi + + # Find the threading suffix by probing the executable. + binname=$(ls ${exec_root}_${dt}${op}_${psize}_${im}_*.x) + suf_ext=${binname##*_} + suf=${suf_ext%%.*} + + #echo "found file: ${binname} with suffix ${suf}" + + # Set the number of threads according to th. + if [ "${suf}" = "1s" ] || [ "${suf}" = "2s" ]; then + + # Set the threading parameters based on the implementation + # that we are preparing to run. + if [ "${im}" = "asm_blis" ]; then + unset OMP_NUM_THREADS + export BLIS_JC_NT=${jc_nt} + export BLIS_PC_NT=${pc_nt} + export BLIS_IC_NT=${ic_nt} + export BLIS_JR_NT=${jr_nt} + export BLIS_IR_NT=${ir_nt} + elif [ "${im}" = "openblas" ]; then + unset OMP_NUM_THREADS + export OPENBLAS_NUM_THREADS=${nt} + elif [ "${im}" = "eigen" ]; then + export OMP_NUM_THREADS=${nt} + elif [ "${im}" = "vendor" ]; then + unset OMP_NUM_THREADS + export MKL_NUM_THREADS=${nt} + fi + export nt_use=${nt} + + # Multithreaded OpenBLAS seems to have a problem running + # properly if GOMP_CPU_AFFINITY is set. So we temporarily + # unset it here if we are about to execute OpenBLAS, but + # otherwise restore it. + if [ ${im} = "openblas" ]; then + unset GOMP_CPU_AFFINITY + else + export GOMP_CPU_AFFINITY="${GOMP_CPU_AFFINITYsave}" + fi + else + + export BLIS_JC_NT=1 + export BLIS_PC_NT=1 + export BLIS_IC_NT=1 + export BLIS_JR_NT=1 + export BLIS_IR_NT=1 + export OMP_NUM_THREADS=1 + export OPENBLAS_NUM_THREADS=1 + export MKL_NUM_THREADS=1 + export nt_use=1 + fi + + # Construct the name of the test executable. + exec_name="${exec_root}_${dt}${op}_${psize}_${im}_${suf}.x" + + # Construct the name of the output file. + out_file="${out_root}_${suf}_${dt}${op}_${im}.m" + + #echo "Running (nt = ${nt_use}) ./${exec_name} > ${out_file}" + echo "Running ./${exec_name} > ${out_file}" + + # Run executable. + ./${exec_name} > ${out_file} + + sleep ${delay} + + done + done + done +done + diff --git a/test/1m4m/test_gemm.c b/test/1m4m/test_gemm.c new file mode 100644 index 000000000..741503f5c --- /dev/null +++ b/test/1m4m/test_gemm.c @@ -0,0 +1,425 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2014, The University of Texas at Austin + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of The University of Texas nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include +#ifdef EIGEN + #define BLIS_DISABLE_BLAS_DEFS + #include "blis.h" + #include + #include + using namespace Eigen; +#else + #include "blis.h" +#endif + +#define COL_STORAGE +//#define ROW_STORAGE + +//#define PRINT + +int main( int argc, char** argv ) +{ + obj_t a, b, c; + obj_t c_save; + obj_t alpha, beta; + dim_t m, n, k; + dim_t p; + dim_t p_begin, p_max, p_inc; + int m_input, n_input, k_input; + ind_t ind; + num_t dt; + char dt_ch; + int r, n_repeats; + trans_t transa; + trans_t transb; + f77_char f77_transa; + f77_char f77_transb; + + double dtime; + double dtime_save; + double gflops; + + //bli_init(); + + bli_error_checking_level_set( BLIS_NO_ERROR_CHECKING ); + + n_repeats = 3; + + dt = DT; + + ind = IND; + +#if 1 + p_begin = P_BEGIN; + p_max = P_MAX; + p_inc = P_INC; + + m_input = -1; + n_input = -1; + k_input = -1; +#else + p_begin = 40; + p_max = 2000; + p_inc = 40; + + m_input = -1; + n_input = -1; + k_input = -1; +#endif + + + // Supress compiler warnings about unused variable 'ind'. + ( void )ind; + +#if 0 + + cntx_t* cntx; + + ind_t ind_mod = ind; + + // A hack to use 3m1 as 1mpb (with 1m as 1mbp). + if ( ind == BLIS_3M1 ) ind_mod = BLIS_1M; + + // Initialize a context for the current induced method and datatype. + cntx = bli_gks_query_ind_cntx( ind_mod, dt ); + + // Set k to the kc blocksize for the current datatype. + k_input = bli_cntx_get_blksz_def_dt( dt, BLIS_KC, cntx ); + +#elif 0 + + #ifdef BLIS + if ( ind == BLIS_4M1A ) k_input = 128; + else if ( ind == BLIS_1M ) k_input = 128; + else k_input = 256; + #else + k_input = 192; + #endif + +#endif + + // Choose the char corresponding to the requested datatype. + if ( bli_is_float( dt ) ) dt_ch = 's'; + else if ( bli_is_double( dt ) ) dt_ch = 'd'; + else if ( bli_is_scomplex( dt ) ) dt_ch = 'c'; + else dt_ch = 'z'; + + transa = BLIS_NO_TRANSPOSE; + transb = BLIS_NO_TRANSPOSE; + + bli_param_map_blis_to_netlib_trans( transa, &f77_transa ); + bli_param_map_blis_to_netlib_trans( transb, &f77_transb ); + + // Begin with initializing the last entry to zero so that + // matlab allocates space for the entire array once up-front. + for ( p = p_begin; p + p_inc <= p_max; p += p_inc ) ; + + printf( "data_%s_%cgemm_%s", THR_STR, dt_ch, STR ); + printf( "( %2lu, 1:4 ) = [ %4lu %4lu %4lu %7.2f ];\n", + ( unsigned long )(p - p_begin + 1)/p_inc + 1, + ( unsigned long )0, + ( unsigned long )0, + ( unsigned long )0, 0.0 ); + + + //for ( p = p_begin; p <= p_max; p += p_inc ) + for ( p = p_max; p_begin <= p; p -= p_inc ) + { + + if ( m_input < 0 ) m = p / ( dim_t )abs(m_input); + else m = ( dim_t ) m_input; + if ( n_input < 0 ) n = p / ( dim_t )abs(n_input); + else n = ( dim_t ) n_input; + if ( k_input < 0 ) k = p / ( dim_t )abs(k_input); + else k = ( dim_t ) k_input; + + bli_obj_create( dt, 1, 1, 0, 0, &alpha ); + bli_obj_create( dt, 1, 1, 0, 0, &beta ); + + #ifdef COL_STORAGE + bli_obj_create( dt, m, k, 0, 0, &a ); + bli_obj_create( dt, k, n, 0, 0, &b ); + bli_obj_create( dt, m, n, 0, 0, &c ); + bli_obj_create( dt, m, n, 0, 0, &c_save ); + #else + bli_obj_create( dt, m, k, k, 1, &a ); + bli_obj_create( dt, k, n, n, 1, &b ); + bli_obj_create( dt, m, n, n, 1, &c ); + bli_obj_create( dt, m, n, n, 1, &c_save ); + #endif + + bli_randm( &a ); + bli_randm( &b ); + bli_randm( &c ); + + bli_obj_set_conjtrans( transa, &a ); + bli_obj_set_conjtrans( transb, &b ); + + bli_setsc( (1.0/1.0), 0.0, &alpha ); + bli_setsc( (1.0/1.0), 0.0, &beta ); + + bli_copym( &c, &c_save ); + +#ifdef BLIS + bli_ind_disable_all_dt( dt ); + bli_ind_enable_dt( ind, dt ); +#endif + +#ifdef EIGEN + double alpha_r, alpha_i; + + bli_getsc( &alpha, &alpha_r, &alpha_i ); + + void* ap = bli_obj_buffer_at_off( &a ); + void* bp = bli_obj_buffer_at_off( &b ); + void* cp = bli_obj_buffer_at_off( &c ); + + #ifdef COL_STORAGE + const int os_a = bli_obj_col_stride( &a ); + const int os_b = bli_obj_col_stride( &b ); + const int os_c = bli_obj_col_stride( &c ); + #else + const int os_a = bli_obj_row_stride( &a ); + const int os_b = bli_obj_row_stride( &b ); + const int os_c = bli_obj_row_stride( &c ); + #endif + + Stride stride_a( os_a, 1 ); + Stride stride_b( os_b, 1 ); + Stride stride_c( os_c, 1 ); + + #ifdef COL_STORAGE + #if defined(IS_FLOAT) + typedef Matrix MatrixXf_; + #elif defined (IS_DOUBLE) + typedef Matrix MatrixXd_; + #elif defined (IS_SCOMPLEX) + typedef Matrix, Dynamic, Dynamic, ColMajor> MatrixXcf_; + #elif defined (IS_DCOMPLEX) + typedef Matrix, Dynamic, Dynamic, ColMajor> MatrixXcd_; + #endif + #else + #if defined(IS_FLOAT) + typedef Matrix MatrixXf_; + #elif defined (IS_DOUBLE) + typedef Matrix MatrixXd_; + #elif defined (IS_SCOMPLEX) + typedef Matrix, Dynamic, Dynamic, RowMajor> MatrixXcf_; + #elif defined (IS_DCOMPLEX) + typedef Matrix, Dynamic, Dynamic, RowMajor> MatrixXcd_; + #endif + #endif + #if defined(IS_FLOAT) + Map > A( ( float* )ap, m, k, stride_a ); + Map > B( ( float* )bp, k, n, stride_b ); + Map > C( ( float* )cp, m, n, stride_c ); + #elif defined (IS_DOUBLE) + Map > A( ( double* )ap, m, k, stride_a ); + Map > B( ( double* )bp, k, n, stride_b ); + Map > C( ( double* )cp, m, n, stride_c ); + #elif defined (IS_SCOMPLEX) + Map > A( ( std::complex* )ap, m, k, stride_a ); + Map > B( ( std::complex* )bp, k, n, stride_b ); + Map > C( ( std::complex* )cp, m, n, stride_c ); + #elif defined (IS_DCOMPLEX) + Map > A( ( std::complex* )ap, m, k, stride_a ); + Map > B( ( std::complex* )bp, k, n, stride_b ); + Map > C( ( std::complex* )cp, m, n, stride_c ); + #endif +#endif + + dtime_save = DBL_MAX; + + for ( r = 0; r < n_repeats; ++r ) + { + bli_copym( &c_save, &c ); + + dtime = bli_clock(); + +#ifdef PRINT + bli_printm( "a", &a, "%4.1f", "" ); + bli_printm( "b", &b, "%4.1f", "" ); + bli_printm( "c", &c, "%4.1f", "" ); +#endif + +#if defined(BLIS) + + bli_gemm( &alpha, + &a, + &b, + &beta, + &c ); + +#elif defined(EIGEN) + + C.noalias() += alpha_r * A * B; + +#else // if defined(BLAS) + + if ( bli_is_float( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + float* alphap = ( float* )bli_obj_buffer( &alpha ); + float* ap = ( float* )bli_obj_buffer( &a ); + float* bp = ( float* )bli_obj_buffer( &b ); + float* betap = ( float* )bli_obj_buffer( &beta ); + float* cp = ( float* )bli_obj_buffer( &c ); + + sgemm_( &f77_transa, + &f77_transb, + &mm, + &nn, + &kk, + alphap, + ap, &lda, + bp, &ldb, + betap, + cp, &ldc ); + } + else if ( bli_is_double( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + double* alphap = ( double* )bli_obj_buffer( &alpha ); + double* ap = ( double* )bli_obj_buffer( &a ); + double* bp = ( double* )bli_obj_buffer( &b ); + double* betap = ( double* )bli_obj_buffer( &beta ); + double* cp = ( double* )bli_obj_buffer( &c ); + + dgemm_( &f77_transa, + &f77_transb, + &mm, + &nn, + &kk, + alphap, + ap, &lda, + bp, &ldb, + betap, + cp, &ldc ); + } + else if ( bli_is_scomplex( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + scomplex* alphap = ( scomplex* )bli_obj_buffer( &alpha ); + scomplex* ap = ( scomplex* )bli_obj_buffer( &a ); + scomplex* bp = ( scomplex* )bli_obj_buffer( &b ); + scomplex* betap = ( scomplex* )bli_obj_buffer( &beta ); + scomplex* cp = ( scomplex* )bli_obj_buffer( &c ); + + cgemm_( &f77_transa, + &f77_transb, + &mm, + &nn, + &kk, + alphap, + ap, &lda, + bp, &ldb, + betap, + cp, &ldc ); + } + else if ( bli_is_dcomplex( dt ) ) + { + f77_int mm = bli_obj_length( &c ); + f77_int kk = bli_obj_width_after_trans( &a ); + f77_int nn = bli_obj_width( &c ); + f77_int lda = bli_obj_col_stride( &a ); + f77_int ldb = bli_obj_col_stride( &b ); + f77_int ldc = bli_obj_col_stride( &c ); + dcomplex* alphap = ( dcomplex* )bli_obj_buffer( &alpha ); + dcomplex* ap = ( dcomplex* )bli_obj_buffer( &a ); + dcomplex* bp = ( dcomplex* )bli_obj_buffer( &b ); + dcomplex* betap = ( dcomplex* )bli_obj_buffer( &beta ); + dcomplex* cp = ( dcomplex* )bli_obj_buffer( &c ); + + zgemm_( &f77_transa, + &f77_transb, + &mm, + &nn, + &kk, + alphap, + ap, &lda, + bp, &ldb, + betap, + cp, &ldc ); + } +#endif + +#ifdef PRINT + bli_printm( "c after", &c, "%4.1f", "" ); + exit(1); +#endif + + dtime_save = bli_clock_min_diff( dtime_save, dtime ); + } + + gflops = ( 2.0 * m * k * n ) / ( dtime_save * 1.0e9 ); + + if ( bli_is_complex( dt ) ) gflops *= 4.0; + + printf( "data_%s_%cgemm_%s", THR_STR, dt_ch, STR ); + printf( "( %2lu, 1:4 ) = [ %4lu %4lu %4lu %7.2f ];\n", + ( unsigned long )(p - p_begin + 1)/p_inc + 1, + ( unsigned long )m, + ( unsigned long )k, + ( unsigned long )n, gflops ); + //fflush( stdout ); + + bli_obj_free( &alpha ); + bli_obj_free( &beta ); + + bli_obj_free( &a ); + bli_obj_free( &b ); + bli_obj_free( &c ); + bli_obj_free( &c_save ); + } + + //bli_finalize(); + + return 0; +} + From 99c7d15f1e8e4b95add650fa75002822ef9e2ed8 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 23 Jul 2019 16:50:35 -0500 Subject: [PATCH 083/109] Added "Education and Learning" section to README. Details: - Added a short section after the Intro of the README.md file titled "Education and Learning" that directs interested readers to the "LAFF-On Programming for High-Performance" massive open online course (MOOC) hosted via edX. --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 317c80d00..8513c2080 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,17 @@ and [collaborators](http://shpc.ices.utexas.edu/collaborators.html), [publications](http://shpc.ices.utexas.edu/publications.html), and [other educational projects](http://www.ulaff.net/) (such as MOOCs). +Education and Learning +---------------------- + +Want to understand what's under the hood? +Many of the same concepts and principles employed when developing BLIS are +introduced and taught in a basic pedagogical setting as part of +[LAFF-On Programming for High Performance (LAFF-On-PfHP)](http://www.ulaff.net/), +one of several massive open online courses (MOOCs) in the +[Linear Algebra: Foundations to Frontiers](http://www.ulaff.net/) series, +all of which are available for free via the [edX platform](http://www.edx.org/). + What's New ---------- From 9034c885fc450b46492a1f3bfda353cdab42543f Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Tue, 23 Jul 2019 16:54:28 -0500 Subject: [PATCH 084/109] Added "Education and Learning" ToC entry to README. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8513c2080..60ac20b2c 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ Contents -------- * **[Introduction](#introduction)** +* **[Education and Learning](#education-and-learning)** * **[What's New](#whats-new)** * **[What People Are Saying About BLIS](#what-people-are-saying-about-blis)** * **[Key Features](#key-features)** From f85d3363ec48cee201099227ca23d9f376e5c81c Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Fri, 23 Feb 2018 17:42:48 -0600 Subject: [PATCH 085/109] CHANGELOG update (0.3.0) Change-Id: Id038b00a62de51c9818ad249651ec5dc662f4415 --- CHANGELOG | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 6f1a1e638..80150e185 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -7446,7 +7446,7 @@ Date: Fri Feb 23 17:42:48 2018 -0600 Version file update (0.3.0) -commit 3defc7265c12cf85e9de2d7a1f243c5e090a6f9d +commit 3defc7265c12cf85e9de2d7a1f243c5e090a6f9d (origin/master, origin/HEAD) Author: Field G. Van Zee Date: Fri Feb 23 17:38:19 2018 -0600 @@ -7482,7 +7482,7 @@ Date: Fri Feb 23 16:33:32 2018 -0600 contained. To remedy this situation, we now selectively use movss to load any element that could be the last element in the matrix. -commit 5112e1859e7f8888f5555eb7bc02bd9fab9b4442 (origin/rt) +commit 5112e1859e7f8888f5555eb7bc02bd9fab9b4442 (origin/rt, rt) Author: Field G. Van Zee Date: Fri Feb 23 14:31:26 2018 -0600 @@ -7714,7 +7714,7 @@ Date: Thu Jan 4 20:51:35 2018 -0600 time hardware detection (when clang is selected). - Added some missing (but mostly-optional) quotes to configure script. -commit 5a7005dd44ed3174abbe360981e367fd41c99b4b +commit 5a7005dd44ed3174abbe360981e367fd41c99b4b (origin/amd, amd) Merge: 7be88705 3bc99a96 Author: Nisanth M P Date: Wed Jan 3 12:05:12 2018 +0530 @@ -7763,7 +7763,7 @@ Date: Sat Dec 23 15:32:03 2017 -0600 is used by the auto-detection script to printf() the name of the sub-configuration corresponding to the detected hardware. -commit 9804adfd405056ec332bb8e13d68c7b52bd3a6c1 (origin/selfinit) +commit 9804adfd405056ec332bb8e13d68c7b52bd3a6c1 (origin/selfinit, selfinit) Author: Field G. Van Zee Date: Thu Dec 21 19:22:57 2017 -0600 From d9c0b8b4aab22863b7a93358690a4702a23c2219 Mon Sep 17 00:00:00 2001 From: Nisanth M P Date: Mon, 19 Mar 2018 11:34:32 +0530 Subject: [PATCH 086/109] Re-enabling Zen optimized cache block sizes for config target zen Change-Id: I8191421b876755b31590323c66156d4a814575f1 --- config/zen/bli_cntx_init_zen.c | 7 +++---- config/zen/bli_family_zen.h | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/config/zen/bli_cntx_init_zen.c b/config/zen/bli_cntx_init_zen.c index 8a46bede2..ca590e16a 100644 --- a/config/zen/bli_cntx_init_zen.c +++ b/config/zen/bli_cntx_init_zen.c @@ -133,7 +133,6 @@ void bli_cntx_init_zen( cntx_t* cntx ) // Zen optmized level 3 cache block sizes #ifdef BLIS_ENABLE_ZEN_BLOCK_SIZES - #if BLIS_ENABLE_SINGLE_INSTANCE_BLOCK_SIZES bli_blksz_init_easy( &blkszs[ BLIS_MC ], 144, 510, 144, 72 ); @@ -153,9 +152,9 @@ void bli_cntx_init_zen( cntx_t* cntx ) bli_blksz_init_easy( &blkszs[ BLIS_NC ], 4080, 4080, 4080, 4080 ); #endif - bli_blksz_init_easy( &blkszs[ BLIS_NC ], 8160, 4080, 4080, 3056 ); - bli_blksz_init_easy( &blkszs[ BLIS_AF ], 8, 8, -1, -1 ); - bli_blksz_init_easy( &blkszs[ BLIS_DF ], 8, 8, -1, -1 ); + bli_blksz_init_easy( &blkszs[ BLIS_NC ], 4080, 4080, 4080, 4080 ); + bli_blksz_init_easy( &blkszs[ BLIS_AF ], 8, 8, 8, 8 ); + bli_blksz_init_easy( &blkszs[ BLIS_DF ], 8, 8, 8, 8 ); // Update the context with the current architecture's register and cache // blocksizes (and multiples) for native execution. diff --git a/config/zen/bli_family_zen.h b/config/zen/bli_family_zen.h index 6d19f7790..882c1ab97 100644 --- a/config/zen/bli_family_zen.h +++ b/config/zen/bli_family_zen.h @@ -39,8 +39,8 @@ // By default, it is effective to parallelize the outer loops. // Setting these macros to 1 will force JR and IR inner loops // to be not paralleized. -#define BLIS_THREAD_MAX_IR 1 -#define BLIS_THREAD_MAX_JR 1 +#define BLIS_DEFAULT_MR_THREAD_MAX 1 +#define BLIS_DEFAULT_NR_THREAD_MAX 1 #define BLIS_ENABLE_ZEN_BLOCK_SIZES #define BLIS_ENABLE_SMALL_MATRIX From ca6f5b762de994747ab7f76bdd4c85120e7fd6bf Mon Sep 17 00:00:00 2001 From: Nisanth M P Date: Mon, 19 Mar 2018 12:49:26 +0530 Subject: [PATCH 087/109] Re-enabling the small matrix gemm optimization for target zen Change-Id: I13872784586984634d728cd99a00f71c3f904395 --- config/zen/bli_family_zen.h | 1 - 1 file changed, 1 deletion(-) diff --git a/config/zen/bli_family_zen.h b/config/zen/bli_family_zen.h index 882c1ab97..526e3a8b0 100644 --- a/config/zen/bli_family_zen.h +++ b/config/zen/bli_family_zen.h @@ -46,7 +46,6 @@ #define BLIS_ENABLE_SMALL_MATRIX #define BLIS_ENABLE_SMALL_MATRIX_TRSM - // This will select the threshold below which small matrix code will be called. #define BLIS_SMALL_MATRIX_THRES 700 #define BLIS_SMALL_M_RECT_MATRIX_THRES 160 From d56ca14589413fd4b14987262ab9de4533dbbbe8 Mon Sep 17 00:00:00 2001 From: sraut Date: Wed, 6 Jun 2018 11:24:33 +0530 Subject: [PATCH 088/109] small matrix trsm intrinsics optimization code for AX=B and XA'=B Change-Id: I90123c4d9adbd314c867995cd19dc975150b448c --- frame/3/trsm/bli_trsm_front.c | 8 +- kernels/zen/3/bli_trsm_small.c | 5423 +++++++++++++++++++++++++++++++- 2 files changed, 5418 insertions(+), 13 deletions(-) diff --git a/frame/3/trsm/bli_trsm_front.c b/frame/3/trsm/bli_trsm_front.c index a69f4b76c..0b6db8a5a 100644 --- a/frame/3/trsm/bli_trsm_front.c +++ b/frame/3/trsm/bli_trsm_front.c @@ -34,7 +34,7 @@ */ #include "blis.h" - +//#define PRINT_SMALL_TRSM_INFO void bli_trsm_front ( side_t side, @@ -47,11 +47,15 @@ void bli_trsm_front ) { bli_init_once(); - + int i, j; obj_t a_local; obj_t b_local; obj_t c_local; +int m = bli_obj_length(*b); +int n = bli_obj_width(*b); +float *L = a->buffer; + float *B = b->buffer; #ifdef PRINT_SMALL_TRSM_INFO printf("Side:: %c\n", side ? 'R' : 'L'); diff --git a/kernels/zen/3/bli_trsm_small.c b/kernels/zen/3/bli_trsm_small.c index af84d0588..979c26dea 100644 --- a/kernels/zen/3/bli_trsm_small.c +++ b/kernels/zen/3/bli_trsm_small.c @@ -4,7 +4,11 @@ BLIS An object-based framework for developing high-performance BLAS-like libraries. +<<<<<<< HEAD Copyright (C) 2018-2019, Advanced Micro Devices, Inc. +======= +Copyright (C) 2018, Advanced Micro Devices, Inc. +>>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -26,15 +30,24 @@ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +<<<<<<< HEAD THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +======= +THEORY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +>>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +<<<<<<< HEAD +======= +//#define BLIS_ENABLE_SMALL_MATRIX_TRSM +>>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B #include "blis.h" #ifdef BLIS_ENABLE_SMALL_MATRIX_TRSM #include "immintrin.h" +<<<<<<< HEAD #define GEMM_BLK_V1 8 //Block size to perform gemm and apply trsm #define GEMM_ACCUM_A 1 //Peform B1=B1-(B0*A0) operation instead of B1'=(B0*A0) and then B1=B1-B1' #define OPT_CACHE_BLOCKING_L1 1 //Perform trsm block-wise in blocks of GEMM_BLK_V1 instead of all columns of B together. @@ -341,6 +354,91 @@ static void trsm_AutXB_block_allSmallSizedMatrices_alpha_unitDiag(float *ptr_l, int cs_b, float alpha); +======= + +static void (*fp_blis_strsm_microkernel)( float *ptr_l, + float *ptr_b, + int numRows_lb, + int numCols_b, + int rs_l, + int rs_b, + int cs_l, + int cs_b + ); +static void blis_strsm_microkernel( float *ptr_l, + float *ptr_b, + int numRows_lb, + int numCols_b, + int rs_l, + int rs_b, + int cs_l, + int cs_b + ); +static void blis_strsm_microkernel_alpha( float *ptr_l, + float *ptr_b, + int numRows_lb, + int numCols_b, + int rs_l, + int rs_b, + int cs_l, + int cs_b, + float alphaVal + ); +static void blis_strsm_microkernel_unitDiag( float *ptr_l, + float *ptr_b, + int numRows_lb, + int numCols_b, + int rs_l, + int rs_b, + int cs_l, + int cs_b + ); +static void blis_strsm_microkernel_alpha_unitDiag( float *ptr_l, + float *ptr_b, + int numRows_lb, + int numCols_b, + int rs_l, + int rs_b, + int cs_l, + int cs_b, + float alphaVal + ); +static void trsm_XAtB_block_allSmallSizedMatrices(float *ptr_l, + float *ptr_b, + int numRows_lb, + int numCols_b, + int rs_l, + int rs_b, + int cs_l, + int cs_b); +static void trsm_XAtB_block_allSmallSizedMatrices_alpha(float *ptr_l, + float *ptr_b, + int numRows_lb, + int numCols_b, + int rs_l, + int rs_b, + int cs_l, + int cs_b, + float alphaVal); +static void trsm_XAtB_block_allSmallSizedMatrices_unitDiag(float *ptr_l, + float *ptr_b, + int numRows_lb, + int numCols_b, + int rs_l, + int rs_b, + int cs_l, + int cs_b); +static void trsm_XAtB_block_allSmallSizedMatrices_alpha_unitDiag(float *ptr_l, + float *ptr_b, + int numRows_lb, + int numCols_b, + int rs_l, + int rs_b, + int cs_l, + int cs_b, + float alphaVal); + +>>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B //AX = B; A is lower triangular; No transpose; single precision static err_t bli_strsm_small_AlXB ( @@ -351,6 +449,21 @@ static err_t bli_strsm_small_AlXB cntx_t* cntx, cntl_t* cntl ); +<<<<<<< HEAD +======= + +//AX = B; A is lower triangular; No transpose; double precision +static err_t bli_dtrsm_small_AlXB + ( + side_t side, + obj_t* alpha, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ); + +>>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B //A.'X = B; A is upper triangular; A has to be transposed; single precision static err_t bli_strsm_small_AutXB ( @@ -362,17 +475,8 @@ static err_t bli_strsm_small_AutXB cntl_t* cntl ); -//XA.' = B; A is lower triangular; A has to be transposed; single precision -static err_t bli_strsm_small_XAltB - ( - side_t side, - obj_t* alpha, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ); - +<<<<<<< HEAD +======= //A.'X = B; A is upper triangular; A has to be transposed; double precision static err_t bli_dtrsm_small_AutXB ( @@ -384,6 +488,38 @@ static err_t bli_dtrsm_small_AutXB cntl_t* cntl ); +>>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B +//XA.' = B; A is lower triangular; A has to be transposed; single precision +static err_t bli_strsm_small_XAltB + ( + side_t side, + obj_t* alpha, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ); + +<<<<<<< HEAD +//A.'X = B; A is upper triangular; A has to be transposed; double precision +static err_t bli_dtrsm_small_AutXB +======= +//XA.' = B; A is lower triangular; A has to be transposed; double precision +static err_t bli_dtrsm_small_XAltB +>>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B + ( + side_t side, + obj_t* alpha, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ); +<<<<<<< HEAD + +======= + void trsm_block_c(float *ptr_l, float *ptr_b, int blk_height, int blk_width, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b); +>>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B /* * The bli_trsm_small implements unpacked version of TRSM * Currently only column-major is supported, A & B are column-major @@ -407,6 +543,7 @@ err_t bli_trsm_small return BLIS_NOT_YET_IMPLEMENTED; #endif +<<<<<<< HEAD dim_t m = bli_obj_length(b); dim_t n = bli_obj_width(b); @@ -414,6 +551,8 @@ err_t bli_trsm_small return BLIS_SUCCESS; +======= +>>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B // If alpha is zero, B matrix will become zero after scaling & hence solution is also zero matrix if (bli_obj_equals(alpha, &BLIS_ZERO)) { @@ -422,8 +561,13 @@ err_t bli_trsm_small // We have to call matrix scaling if alpha != 1.0 // if row major format return. Check this again. +<<<<<<< HEAD if ((bli_obj_row_stride(a) != 1) || (bli_obj_row_stride(b) != 1)) +======= + if ((bli_obj_row_stride(*a) != 1) || + (bli_obj_row_stride(*b) != 1)) +>>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B { return BLIS_INVALID_ROW_STRIDE; } @@ -433,6 +577,7 @@ err_t bli_trsm_small // only float and double datatypes are supported as of now. if (dt != BLIS_DOUBLE && dt != BLIS_FLOAT) { +<<<<<<< HEAD return BLIS_EXPECTED_REAL_DATATYPE; } @@ -440,12 +585,22 @@ err_t bli_trsm_small if (!bli_obj_is_upper_or_lower (a)) { return BLIS_EXPECTED_TRIANGULAR_OBJECT; +======= + return BLIS_EXPECTED_REAL_DATATYPE; + } + + // A is expected to be triangular in trsm + if (!bli_obj_is_upper_or_lower (*a)) + { + return BLIS_EXPECTED_TRIANGULAR_OBJECT; +>>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B } // can use other control structs - even can use array of function pointers, // indexed by a number with bits formed by f('side', 'uplo', 'transa', dt). // In the below implementation, based on the number of finally implemented // cases, can move the checks with more cases higher up. +<<<<<<< HEAD if(side == BLIS_LEFT) { @@ -509,10 +664,45 @@ err_t bli_trsm_small } +======= + if (side == BLIS_LEFT) + { + if (bli_obj_has_trans(*a)) + { + if (dt == BLIS_DOUBLE) + { + if (bli_obj_is_upper(*a)) + { + //A.'X = B; A is upper triangular; A has to be transposed; double precision +#if 0 // planning to implement this in this iteration + return bli_dtrsm_small_AutXB(side, alpha, a, b, cntx, cntl); +#else + return BLIS_NOT_YET_IMPLEMENTED; +#endif + } + else + { + return BLIS_NOT_YET_IMPLEMENTED; + } + } + else if (dt == BLIS_FLOAT) + { + if (bli_obj_is_upper(*a)) + { + //A.'X = B; A is upper triangular; A has to be transposed; single precision + //return bli_strsm_small_AutXB(side, alpha, a, b, cntx, cntl); + return BLIS_NOT_YET_IMPLEMENTED; + } + else + { + return BLIS_NOT_YET_IMPLEMENTED; + } +>>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B } } else { +<<<<<<< HEAD if(bli_obj_has_trans(a)) { if(dt == BLIS_DOUBLE) @@ -25099,3 +25289,5214 @@ static void trsm_AutXB_block_allSmallSizedMatrices_alpha_unitDiag(float *ptr_l, ///////////////////loop ends ///////////////////// } #endif +======= + if (dt == BLIS_DOUBLE) + { + if (bli_obj_is_upper(*a)) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + else + { + //AX = B; A is lower triangular; No transpose; double precision + //return bli_dtrsm_small_AlXB(side, alpha, a, b, cntx, cntl); + return BLIS_NOT_YET_IMPLEMENTED; + } + } + else if (dt == BLIS_FLOAT) + { + if (bli_obj_is_upper(*a)) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + else + { + //AX = B; A is lower triangular; No transpose; single precision + return bli_strsm_small_AlXB(side, alpha, a, b, cntx, cntl); + } + } + } + } + else + { + if (bli_obj_has_trans(*a)) + { + if (dt == BLIS_DOUBLE) + { + if (bli_obj_is_upper(*a)) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + else + { + //XA.' = B; A is lower triangular; A has to be transposed; double precision +#if 0 // planning to implement this in this iteration + return bli_dtrsm_small_XAltB(side, alpha, a, b, cntx, cntl); +#else + return BLIS_NOT_YET_IMPLEMENTED; +#endif + } + } + else if (dt == BLIS_FLOAT) + { + if (bli_obj_is_upper(*a)) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + else + { + //XA.' = B; A is lower triangular; A has to be transposed; single precision + return bli_strsm_small_XAltB(side, alpha, a, b, cntx, cntl); + } + } + } + else + { + return BLIS_NOT_YET_IMPLEMENTED; + } + } + + return BLIS_NOT_YET_IMPLEMENTED; +}; + + + + +/* + * AX = alpha*B, Double precision, A: lower triangular + */ +static err_t bli_dtrsm_small_AlXB ( + side_t side, + obj_t* alpha, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ) +{ + + int M = bli_obj_length(*b); // number of rows of matrix B + int N = bli_obj_width(*b); // number of columns of matrix B + + int lda = bli_obj_col_stride(*a); // column stride of A + int ldb = bli_obj_col_stride(*b); // column stride of B + + int i; + int j; + int k; + + double *A = a->buffer; + double *B = b->buffer; + + // Need to incorporate alpha + + #if 0 + + for (k = 0; k < M; k++) + { + double lkk_inv = 1.0/A[k+k*lda]; + + for (j = 0; j < N; j++) + { + B[k + j*ldb] *= lkk_inv; + } + for (i = k+1; i < M; i++) + { + for (j = 0; j < N; j++) + { + B[i + j*ldb] -= A[i + k*lda] * B[k + j*ldb]; + } + } + }// k -loop + #else + for (k = 0; k < M; k++) + { + double lkk_inv = 1.0/A[k+k*lda]; + + for (j = 0; j < N; j++) + { + B[k + j*ldb] *= lkk_inv; + + // for (j = 0; j < N; j++) + for (i = k+1; i < M; i++) + { + B[i + j*ldb] -= A[i + k*lda] * B[k + j*ldb]; + } + } + }// k -loop + + #endif + + return BLIS_SUCCESS; +}// end of function + + + +static void trsm_small_AlXB ( + float *A, + float *B, + int M, + int N, + int lda, + int ldb + ) +{ + int i; + int j; + int k; + + // Need to incorporate alpha + + for (k = 0; k < M; k++) + { + float lkk_inv = 1.0/A[k+k*lda]; + + for (j = 0; j < N; j++) + { + B[k + j*ldb] *= lkk_inv; + + for (i = k+1; i < M; i++) + { + B[i + j*ldb] -= A[i + k*lda] * B[k + j*ldb]; + } + } + }// k -loop + +}// end of function + + +// Test code: +void gemm_small( float *ptr_l, + float *ptr_b, + int blk_m, + int blk_n, + float *ptr_gemmOut, + int cs_l, + int cs_b, + int rs_l, + int rs_b, + float alpha, + float beta) +{ + int i, j, k; + + for (i = 0; i < blk_m; i++) + { + for (j = 0; j < blk_n; j++) + { + float t = 0.0; + for (k = 0; k < blk_m; k++) + { + t += (ptr_l[i*rs_l + k* cs_l] * ptr_b[k*rs_b + j*cs_b]); + } + ptr_gemmOut[i*rs_b + j*cs_b] = beta * ptr_gemmOut[i*rs_b + j*cs_b] + alpha * t; + } + } +} + + + + +/* + * AX = Alpha*B, Single precision, A: lower triangular + */ +static err_t bli_strsm_small_AlXB ( + side_t side, + obj_t* AlphaObj, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ) +{ + obj_t alpha, beta; // gemm parameters + obj_t Ga, Gb, Gc; // for GEMM + int m = bli_obj_length(*b); // number of rows of matrix B + int n = bli_obj_width(*b); // number of columns of matrix B + + int lda = bli_obj_col_stride(*a); // column stride of A + int ldb = bli_obj_col_stride(*b); // column stride of B + + int rsa = bli_obj_row_stride(*a); // row stride of A + int rsb = bli_obj_row_stride(*b); // row stride of B + + int i = 0; + int j; + int blk_size = 8; + int isUnitDiag = bli_obj_has_unit_diag(*a); + + float alphaVal; + float *L = a->buffer; + float *B = b->buffer; + + if (m != 16 || (n%8) != 0) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + if ( (m*(m + n)) > BLIS_SMALL_MATRIX_THRES_TRSM ) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + + alphaVal = *((float *)bli_obj_buffer_for_const(BLIS_FLOAT, *AlphaObj)); + + /* Small _GEMM preparation code */ + bli_obj_create( BLIS_FLOAT, 1, 1, 0, 0, &alpha ); + bli_obj_create( BLIS_FLOAT, 1, 1, 0, 0, &beta ); + + /* B = B - A*B */ + bli_setsc( -(1.0), 0.0, &alpha ); + bli_setsc( (1.0), 0.0, &beta ); + + + bli_obj_create_with_attached_buffer( BLIS_FLOAT, blk_size, blk_size, a->buffer, rsa, lda, &Ga); + bli_obj_create_with_attached_buffer( BLIS_FLOAT, blk_size, n, b->buffer, rsb, ldb, &Gb); + bli_obj_create_with_attached_buffer( BLIS_FLOAT, blk_size, n, b->buffer, rsb, ldb, &Gc); + + bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, Ga ); + bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, Gb ); + bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, Gc ); + + //first block of trsm + Gb.buffer = (void*)(B + i); + + //trsm of first 8xn block + if (alphaVal != 1) + { + if (isUnitDiag == 0) + { + blis_strsm_microkernel_alpha((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); + fp_blis_strsm_microkernel = blis_strsm_microkernel; + } + else + { + blis_strsm_microkernel_alpha_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); + fp_blis_strsm_microkernel = blis_strsm_microkernel_unitDiag; + } + bli_setsc( alphaVal, 0.0, &beta ); + } + else + { + if (isUnitDiag == 0) + { + blis_strsm_microkernel((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); + fp_blis_strsm_microkernel = blis_strsm_microkernel; + } + else + { + blis_strsm_microkernel_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); + fp_blis_strsm_microkernel = blis_strsm_microkernel_unitDiag; + } + } + + //gemm update + for (j = i + blk_size; j < m; j += blk_size) // for rows upto multiple of BLOCK_HEIGHT + { + Ga.buffer = (void*)(L + j + i*lda); + Gc.buffer = (void*)(B + j); + + bli_gemm_small(&alpha, &Ga, &Gb, &beta, &Gc, cntx, cntl ); // Gc = beta*Gc + alpha*Ga *Gb + } + + //trsm of remaining blocks + for (i = blk_size; i < m; i += blk_size) + { + Gb.buffer = (void*)(B + i); + + fp_blis_strsm_microkernel((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); + + for (j = i + blk_size; j < m; j += blk_size) // for rows upto multiple of BLOCK_HEIGHT + { + Ga.buffer = (void*)(L + j + i*lda); + Gc.buffer = (void*)(B + j); + + bli_gemm_small(&alpha, &Ga, &Gb, &beta, &Gc, cntx, cntl ); // Gc = beta*Gc + alpha*Ga *Gb + } + + } // End of for loop - i + + return BLIS_SUCCESS; +} + +void trsm_block_c(float *ptr_l, float *ptr_b, int blk_height, int blk_width, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) +{ + int i, j, k, l; + float inv_l; + + inv_l = 1.0 / *ptr_l; + + for (j = 0; j < numCols_b; j += blk_width) + { + for (l = j; l < (j+blk_width); l++) + { + ptr_b[l*cs_b] = ptr_b[l*cs_b] * inv_l; + } + + for (i = 1; i < blk_height; i++) + { + for (l = j; l < (j+blk_width); l++) + { + for (k = 0; k < i; k++) + { + ptr_b[i*rs_b + l*cs_b] -= (ptr_b[k*rs_b + l*cs_b] * ptr_l[i*rs_l + k*cs_l]); + } + ptr_b[i*rs_b + l*cs_b] = ptr_b[i*rs_b + l*cs_b] / ptr_l[i*rs_l + i*cs_l]; + } + } + } +} + +/* + * XA' = Alpha*B, Single precision, A: lower triangular + */ +static err_t bli_strsm_small_XAltB( + side_t side, + obj_t* AlphaObj, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ) +{ + int m = bli_obj_length(*a); // number of rows of matrix B + int n = bli_obj_length(*b); // number of columns of matrix B + + int lda = bli_obj_col_stride(*a); // column stride of A + int ldb = bli_obj_col_stride(*b); // column stride of B + + int rsa = bli_obj_row_stride(*a); // row stride of A + int rsb = bli_obj_row_stride(*b); // row stride of B + + int i = 0; + int isUnitDiag = bli_obj_has_unit_diag(*a); + + float alphaVal; + float *L = a->buffer; + float *B = b->buffer; + + if ((m%8) != 0 || (n%8) != 0) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + if ( (m*(m + n)) > BLIS_SMALL_MATRIX_THRES_TRSM ) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + + alphaVal = *((float *)bli_obj_buffer_for_const(BLIS_FLOAT, *AlphaObj)); + + if (alphaVal != 1) + { + if (isUnitDiag == 0) + { + trsm_XAtB_block_allSmallSizedMatrices_alpha((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); + } + else + { + trsm_XAtB_block_allSmallSizedMatrices_alpha_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); + } + } + else + { + if (isUnitDiag == 0) + { + trsm_XAtB_block_allSmallSizedMatrices((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); + } + else + { + trsm_XAtB_block_allSmallSizedMatrices_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); + } + } + return BLIS_SUCCESS; +} + +static void blis_strsm_microkernel_alpha(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alphaVal) +{ + float ones = 1.0; + int j; + int cs_b_offset[6]; + //int row2, row4, row6; + float *ptr_b_dup; + + //70 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[8]; + __m256 mat_a_cols[8]; + __m256 mat_a_cols_rearr[36]; + __m256 mat_a_diag_inv[8]; + __m256 reciprocal_diags; + __m256 alphaReg; + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + + //reciprocal_diags = _mm256_loadu_ps((float const *)ones); + reciprocal_diags = _mm256_broadcast_ss((float const *)&ones); + alphaReg = _mm256_broadcast_ss((float const *)&alphaVal); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //read first set of 16x8 block of B into registers, where 16 is the blk_height and 8 is the blk_width for B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); + //_mm_prefetch((char*)(ptr_l + 0), _MM_HINT_T0); + //row2 = (cs_l << 1); + //row4 = (cs_l << 2); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); + //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); + //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); + //_mm_prefetch((char*)(ptr_l + row2 + cs_l), _MM_HINT_T0); + //row6 = row2 + row4; + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); + //_mm_prefetch((char*)(ptr_l + row4), _MM_HINT_T0); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); + //_mm_prefetch((char*)(ptr_l + row4 + cs_l), _MM_HINT_T0); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); + //_mm_prefetch((char*)(ptr_l + row6), _MM_HINT_T0); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); + //_mm_prefetch((char*)(ptr_l + row6 + cs_l), _MM_HINT_T0); + + //reciprocal_diags = _mm256_loadu_ps((float const *)ones); + + //read first set of 16x16 block of L, where 16 is the blk_height and 16 is the blk_width for L + /*mat_a_cols[0] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[1] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[2] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[3] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[4] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[5] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[6] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[7] = _mm256_loadu_ps((float const *)ptr_l);*/ + + //Shuffle to rearrange/transpose 16x16 block of L into contiguous row-wise registers + //tmpRegs[0] = _mm256_castps256_ps128(mat_a_cols[0]); //zero latency, no instruction added actually. + //mat_a_cols_rearr[0] = _mm256_broadcastss_ps(tmpRegs[0]); + //1st col + mat_a_cols_rearr[0] = _mm256_broadcast_ss((float const *)(ptr_l+0)); + mat_a_cols_rearr[1] = _mm256_broadcast_ss((float const *)(ptr_l+1)); + mat_a_cols_rearr[3] = _mm256_broadcast_ss((float const *)(ptr_l+2)); + mat_a_cols_rearr[6] = _mm256_broadcast_ss((float const *)(ptr_l+3)); + mat_a_cols_rearr[10] = _mm256_broadcast_ss((float const *)(ptr_l+4)); + mat_a_cols_rearr[15] = _mm256_broadcast_ss((float const *)(ptr_l+5)); + mat_a_cols_rearr[21] = _mm256_broadcast_ss((float const *)(ptr_l+6)); + mat_a_cols_rearr[28] = _mm256_broadcast_ss((float const *)(ptr_l+7)); + //2nd col + ptr_l += cs_l; + mat_a_cols_rearr[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_cols_rearr[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_cols_rearr[7] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[11] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[16] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[22] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[29] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //3rd col + ptr_l += cs_l; + mat_a_cols_rearr[5] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_cols_rearr[8] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[12] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[17] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[23] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[30] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //4rth col + ptr_l += cs_l; + mat_a_cols_rearr[9] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[13] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[18] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[24] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[31] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //5th col + ptr_l += cs_l; + mat_a_cols_rearr[14] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[19] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[25] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[32] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //6th col + ptr_l += cs_l; + mat_a_cols_rearr[20] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[26] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[33] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //7th col + ptr_l += cs_l; + mat_a_cols_rearr[27] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[34] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //7th col + ptr_l += cs_l; + mat_a_cols_rearr[35] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + numCols_b -= 8; // blk_width = 8 + + //compute reciprocals of L(i,i) and broadcast in registers + mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); + mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); + mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[20]); + mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_cols_rearr[27], mat_a_cols_rearr[35]); + + //mat_a_diag_inv[1] = _mm256_permute_ps(mat_a_diag_inv[1], 0x55); + //mat_a_diag_inv[3] = _mm256_permute_ps(mat_a_diag_inv[3], 0x55); + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC); + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x20); + + //reciprocal of diagnol elements + reciprocal_diags = _mm256_div_ps(reciprocal_diags, mat_a_diag_inv[0]); + + //Start loop for cols of B to be processed in size of blk_width + for (j = 0; j < numCols_b; j += 8) + { + ptr_b_dup = ptr_b; + + /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ + + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); + + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); + mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); +#else + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); + mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); + mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); + mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); + mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); + mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); + mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); + mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + //Read next set of B columns + ptr_b += (cs_b + cs_b_offset[5]); + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); + + //end loop of cols + } + + //Last block trsm processing + ptr_b_dup = ptr_b; + + /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ + + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); + + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); + mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); +#else + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); + mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); + mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); + mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); + mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); + mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); + mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); + mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); + + //end loop of cols +} + +static void blis_strsm_microkernel_alpha_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alphaVal) +{ + //float ones = 1.0; + int j; + int cs_b_offset[6]; + //int row2, row4, row6; + float *ptr_b_dup; + + //70 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[8]; + __m256 mat_a_cols[8]; + __m256 mat_a_cols_rearr[36]; + //__m256 mat_a_diag_inv[8]; + //__m256 reciprocal_diags; + __m256 alphaReg; + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + + //reciprocal_diags = _mm256_loadu_ps((float const *)ones); + //reciprocal_diags = _mm256_broadcast_ss((float const *)&ones); + alphaReg = _mm256_broadcast_ss((float const *)&alphaVal); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //read first set of 16x8 block of B into registers, where 16 is the blk_height and 8 is the blk_width for B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); + //_mm_prefetch((char*)(ptr_l + 0), _MM_HINT_T0); + //row2 = (cs_l << 1); + //row4 = (cs_l << 2); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); + //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); + //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); + //_mm_prefetch((char*)(ptr_l + row2 + cs_l), _MM_HINT_T0); + //row6 = row2 + row4; + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); + //_mm_prefetch((char*)(ptr_l + row4), _MM_HINT_T0); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); + //_mm_prefetch((char*)(ptr_l + row4 + cs_l), _MM_HINT_T0); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); + //_mm_prefetch((char*)(ptr_l + row6), _MM_HINT_T0); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); + //_mm_prefetch((char*)(ptr_l + row6 + cs_l), _MM_HINT_T0); + + //reciprocal_diags = _mm256_loadu_ps((float const *)ones); + + //read first set of 16x16 block of L, where 16 is the blk_height and 16 is the blk_width for L + /*mat_a_cols[0] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[1] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[2] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[3] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[4] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[5] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[6] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[7] = _mm256_loadu_ps((float const *)ptr_l);*/ + + //Shuffle to rearrange/transpose 16x16 block of L into contiguous row-wise registers + //tmpRegs[0] = _mm256_castps256_ps128(mat_a_cols[0]); //zero latency, no instruction added actually. + //mat_a_cols_rearr[0] = _mm256_broadcastss_ps(tmpRegs[0]); + //1st col + mat_a_cols_rearr[0] = _mm256_broadcast_ss((float const *)(ptr_l+0)); + mat_a_cols_rearr[1] = _mm256_broadcast_ss((float const *)(ptr_l+1)); + mat_a_cols_rearr[3] = _mm256_broadcast_ss((float const *)(ptr_l+2)); + mat_a_cols_rearr[6] = _mm256_broadcast_ss((float const *)(ptr_l+3)); + mat_a_cols_rearr[10] = _mm256_broadcast_ss((float const *)(ptr_l+4)); + mat_a_cols_rearr[15] = _mm256_broadcast_ss((float const *)(ptr_l+5)); + mat_a_cols_rearr[21] = _mm256_broadcast_ss((float const *)(ptr_l+6)); + mat_a_cols_rearr[28] = _mm256_broadcast_ss((float const *)(ptr_l+7)); + //2nd col + ptr_l += cs_l; + mat_a_cols_rearr[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_cols_rearr[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_cols_rearr[7] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[11] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[16] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[22] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[29] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //3rd col + ptr_l += cs_l; + mat_a_cols_rearr[5] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_cols_rearr[8] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[12] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[17] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[23] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[30] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //4rth col + ptr_l += cs_l; + mat_a_cols_rearr[9] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[13] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[18] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[24] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[31] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //5th col + ptr_l += cs_l; + mat_a_cols_rearr[14] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[19] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[25] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[32] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //6th col + ptr_l += cs_l; + mat_a_cols_rearr[20] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[26] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[33] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //7th col + ptr_l += cs_l; + mat_a_cols_rearr[27] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[34] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //8th col + //ptr_l += cs_l; + //mat_a_cols_rearr[35] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + numCols_b -= 8; // blk_width = 8 + + //compute reciprocals of L(i,i) and broadcast in registers + //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[20]); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_cols_rearr[27], mat_a_cols_rearr[35]); + + //mat_a_diag_inv[1] = _mm256_permute_ps(mat_a_diag_inv[1], 0x55); + //mat_a_diag_inv[3] = _mm256_permute_ps(mat_a_diag_inv[3], 0x55); + //mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC); + //mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC); + //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x20); + + //reciprocal of diagnol elements + //reciprocal_diags = _mm256_div_ps(reciprocal_diags, mat_a_diag_inv[0]); + + //Start loop for cols of B to be processed in size of blk_width + for (j = 0; j < numCols_b; j += 8) + { + ptr_b_dup = ptr_b; + + /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ + + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //extract diag a00 from a + //mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); + //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + //mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); + + //extract diag a11 from a + //mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); + //mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + //mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + //mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); + //mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + //mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + //mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); + //mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + //mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + //mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); + //mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + //mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + //mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); + //mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + //mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + //mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); + //mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + //mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + //mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); + //mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + //mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); + mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); +#else + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); + mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); + mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); + mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); + mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); + mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); + mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); + mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + //Read next set of B columns + ptr_b += (cs_b + cs_b_offset[5]); + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); + + //end loop of cols + } + + //Last block trsm processing + ptr_b_dup = ptr_b; + + /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ + + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //extract diag a00 from a + //mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); + //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + //mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); + + //extract diag a11 from a + //mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); + //mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + //mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + //mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); + //mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + //mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + //mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); + //mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + //mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + //mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); + //mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + //mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + //mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); + //mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + //mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + //mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); + //mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + //mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + //mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); + //mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + //mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); + mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); +#else + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); + mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); + mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); + mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); + mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); + mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); + mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); + mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); + + //end loop of cols +} + +static void blis_strsm_microkernel_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) +{ + //float ones = 1.0; + int j; + int cs_b_offset[6]; + //int row2, row4, row6; + float *ptr_b_dup; + + //70 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[8]; + __m256 mat_a_cols[8]; + __m256 mat_a_cols_rearr[36]; + //__m256 mat_a_diag_inv[8]; + //__m256 reciprocal_diags; + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + + //reciprocal_diags = _mm256_loadu_ps((float const *)ones); + //reciprocal_diags = _mm256_broadcast_ss((float const *)&ones); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //read first set of 16x8 block of B into registers, where 16 is the blk_height and 8 is the blk_width for B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); + //_mm_prefetch((char*)(ptr_l + 0), _MM_HINT_T0); + //row2 = (cs_l << 1); + //row4 = (cs_l << 2); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); + //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); + //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); + //_mm_prefetch((char*)(ptr_l + row2 + cs_l), _MM_HINT_T0); + //row6 = row2 + row4; + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); + //_mm_prefetch((char*)(ptr_l + row4), _MM_HINT_T0); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); + //_mm_prefetch((char*)(ptr_l + row4 + cs_l), _MM_HINT_T0); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); + //_mm_prefetch((char*)(ptr_l + row6), _MM_HINT_T0); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); + //_mm_prefetch((char*)(ptr_l + row6 + cs_l), _MM_HINT_T0); + + //reciprocal_diags = _mm256_loadu_ps((float const *)ones); + + //read first set of 16x16 block of L, where 16 is the blk_height and 16 is the blk_width for L + /*mat_a_cols[0] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[1] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[2] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[3] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[4] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[5] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[6] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[7] = _mm256_loadu_ps((float const *)ptr_l);*/ + + //Shuffle to rearrange/transpose 16x16 block of L into contiguous row-wise registers + //tmpRegs[0] = _mm256_castps256_ps128(mat_a_cols[0]); //zero latency, no instruction added actually. + //mat_a_cols_rearr[0] = _mm256_broadcastss_ps(tmpRegs[0]); + //1st col + mat_a_cols_rearr[0] = _mm256_broadcast_ss((float const *)(ptr_l+0)); + mat_a_cols_rearr[1] = _mm256_broadcast_ss((float const *)(ptr_l+1)); + mat_a_cols_rearr[3] = _mm256_broadcast_ss((float const *)(ptr_l+2)); + mat_a_cols_rearr[6] = _mm256_broadcast_ss((float const *)(ptr_l+3)); + mat_a_cols_rearr[10] = _mm256_broadcast_ss((float const *)(ptr_l+4)); + mat_a_cols_rearr[15] = _mm256_broadcast_ss((float const *)(ptr_l+5)); + mat_a_cols_rearr[21] = _mm256_broadcast_ss((float const *)(ptr_l+6)); + mat_a_cols_rearr[28] = _mm256_broadcast_ss((float const *)(ptr_l+7)); + //2nd col + ptr_l += cs_l; + mat_a_cols_rearr[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_cols_rearr[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_cols_rearr[7] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[11] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[16] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[22] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[29] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //3rd col + ptr_l += cs_l; + mat_a_cols_rearr[5] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_cols_rearr[8] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[12] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[17] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[23] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[30] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //4rth col + ptr_l += cs_l; + mat_a_cols_rearr[9] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[13] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[18] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[24] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[31] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //5th col + ptr_l += cs_l; + mat_a_cols_rearr[14] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[19] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[25] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[32] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //6th col + ptr_l += cs_l; + mat_a_cols_rearr[20] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[26] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[33] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //7th col + ptr_l += cs_l; + mat_a_cols_rearr[27] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[34] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //8th col + //ptr_l += cs_l; + //mat_a_cols_rearr[35] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + numCols_b -= 8; // blk_width = 8 + + //compute reciprocals of L(i,i) and broadcast in registers + //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[20]); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_cols_rearr[27], mat_a_cols_rearr[35]); + + //mat_a_diag_inv[1] = _mm256_permute_ps(mat_a_diag_inv[1], 0x55); + //mat_a_diag_inv[3] = _mm256_permute_ps(mat_a_diag_inv[3], 0x55); + //mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC); + //mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC); + //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x20); + + //reciprocal of diagnol elements + //reciprocal_diags = _mm256_div_ps(reciprocal_diags, mat_a_diag_inv[0]); + + //Start loop for cols of B to be processed in size of blk_width + for (j = 0; j < numCols_b; j += 8) + { + ptr_b_dup = ptr_b; + + /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ + + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //extract diag a00 from a + //mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); + //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + //mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + //extract diag a11 from a + //mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); + //mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + //mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + //mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); + //mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + //mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + //mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); + //mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + //mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + //mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); + //mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + //mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + //mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); + //mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + //mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + //mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); + //mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + //mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + //mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); + //mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + //mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); + mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); +#else + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); + mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); + mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); + mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); + mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); + mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); + mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); + mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + //Read next set of B columns + ptr_b += (cs_b + cs_b_offset[5]); + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); + //end loop of cols + } + + //Last block trsm processing + ptr_b_dup = ptr_b; + + /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ + + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //extract diag a00 from a + //mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); + //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + //mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + //extract diag a11 from a + //mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); + //mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + //mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + //mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); + //mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + //mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + //mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); + //mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + //mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + //mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); + //mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + //mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + //mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); + //mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + //mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + //mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); + //mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + //mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + //mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); + //mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + //mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); + mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); +#else + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); + mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); + mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); + mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); + mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); + mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); + mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); + mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); + //end loop of cols +} + +static void blis_strsm_microkernel(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) +{ + float ones = 1.0; + int j; + int cs_b_offset[6]; + //int row2, row4, row6; + float *ptr_b_dup; + + //70 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[8]; + __m256 mat_a_cols[8]; + __m256 mat_a_cols_rearr[36]; + __m256 mat_a_diag_inv[8]; + __m256 reciprocal_diags; + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + + //reciprocal_diags = _mm256_loadu_ps((float const *)ones); + reciprocal_diags = _mm256_broadcast_ss((float const *)&ones); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //read first set of 16x8 block of B into registers, where 16 is the blk_height and 8 is the blk_width for B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); + //_mm_prefetch((char*)(ptr_l + 0), _MM_HINT_T0); + //row2 = (cs_l << 1); + //row4 = (cs_l << 2); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); + //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); + //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); + //_mm_prefetch((char*)(ptr_l + row2 + cs_l), _MM_HINT_T0); + //row6 = row2 + row4; + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); + //_mm_prefetch((char*)(ptr_l + row4), _MM_HINT_T0); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); + //_mm_prefetch((char*)(ptr_l + row4 + cs_l), _MM_HINT_T0); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); + //_mm_prefetch((char*)(ptr_l + row6), _MM_HINT_T0); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); + //_mm_prefetch((char*)(ptr_l + row6 + cs_l), _MM_HINT_T0); + + //reciprocal_diags = _mm256_loadu_ps((float const *)ones); + + //read first set of 16x16 block of L, where 16 is the blk_height and 16 is the blk_width for L + /*mat_a_cols[0] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[1] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[2] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[3] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[4] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[5] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[6] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[7] = _mm256_loadu_ps((float const *)ptr_l);*/ + + //Shuffle to rearrange/transpose 16x16 block of L into contiguous row-wise registers + //tmpRegs[0] = _mm256_castps256_ps128(mat_a_cols[0]); //zero latency, no instruction added actually. + //mat_a_cols_rearr[0] = _mm256_broadcastss_ps(tmpRegs[0]); + //1st col + mat_a_cols_rearr[0] = _mm256_broadcast_ss((float const *)(ptr_l+0)); + mat_a_cols_rearr[1] = _mm256_broadcast_ss((float const *)(ptr_l+1)); + mat_a_cols_rearr[3] = _mm256_broadcast_ss((float const *)(ptr_l+2)); + mat_a_cols_rearr[6] = _mm256_broadcast_ss((float const *)(ptr_l+3)); + mat_a_cols_rearr[10] = _mm256_broadcast_ss((float const *)(ptr_l+4)); + mat_a_cols_rearr[15] = _mm256_broadcast_ss((float const *)(ptr_l+5)); + mat_a_cols_rearr[21] = _mm256_broadcast_ss((float const *)(ptr_l+6)); + mat_a_cols_rearr[28] = _mm256_broadcast_ss((float const *)(ptr_l+7)); + //2nd col + ptr_l += cs_l; + mat_a_cols_rearr[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_cols_rearr[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_cols_rearr[7] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[11] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[16] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[22] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[29] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //3rd col + ptr_l += cs_l; + mat_a_cols_rearr[5] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_cols_rearr[8] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[12] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[17] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[23] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[30] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //4rth col + ptr_l += cs_l; + mat_a_cols_rearr[9] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[13] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[18] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[24] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[31] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //5th col + ptr_l += cs_l; + mat_a_cols_rearr[14] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[19] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[25] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[32] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //6th col + ptr_l += cs_l; + mat_a_cols_rearr[20] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[26] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[33] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //7th col + ptr_l += cs_l; + mat_a_cols_rearr[27] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[34] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //7th col + ptr_l += cs_l; + mat_a_cols_rearr[35] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + numCols_b -= 8; // blk_width = 8 + + //compute reciprocals of L(i,i) and broadcast in registers + mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); + mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); + mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[20]); + mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_cols_rearr[27], mat_a_cols_rearr[35]); + + //mat_a_diag_inv[1] = _mm256_permute_ps(mat_a_diag_inv[1], 0x55); + //mat_a_diag_inv[3] = _mm256_permute_ps(mat_a_diag_inv[3], 0x55); + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC); + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x20); + + //reciprocal of diagnol elements + reciprocal_diags = _mm256_div_ps(reciprocal_diags, mat_a_diag_inv[0]); + + //Start loop for cols of B to be processed in size of blk_width + for (j = 0; j < numCols_b; j += 8) + { + ptr_b_dup = ptr_b; + + /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ + + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); + mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); +#else + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); + mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); + mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); + mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); + mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); + mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); + mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); + mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + //Read next set of B columns + ptr_b += (cs_b + cs_b_offset[5]); + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); + //end loop of cols + } + + //Last block trsm processing + ptr_b_dup = ptr_b; + + /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ + + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); + mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); +#else + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); + mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); + mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); + mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); + mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); + mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); + mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); + mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); + //end loop of cols +} + +///////////////////////////////////// XA'=B functions //////////////////////////////// + +static void trsm_XAtB_block_allSmallSizedMatrices(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) +{ + float ones = 1.0; + int i, i1, i2, i3, i4, j, k, l; + int cs_b_offset[7]; + int cs_l_offset[7]; + float *ptr_b_dup; + + //57 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[16][8]; + __m256 mat_a_cols_rearr[8]; + __m256 mat_a_blk_elems[64]; + __m256 mat_a_diag_inv[8]; + __m256 reciprocal_diags[2]; + + reciprocal_diags[0] = _mm256_broadcast_ss((float const *)(&ones)); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //L matrix offsets + cs_l_offset[0] = (cs_l << 1); + cs_l_offset[1] = cs_l + cs_l_offset[0]; + cs_l_offset[2] = (cs_l << 2); + cs_l_offset[3] = cs_l + cs_l_offset[2]; + cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; + cs_l_offset[5] = cs_l + cs_l_offset[4]; + cs_l_offset[6] = (cs_l_offset[5] + cs_l); + + //read diag elems of L 16x16 block + mat_a_cols_rearr[0] = _mm256_loadu_ps((float const *)ptr_l); + mat_a_cols_rearr[1] = _mm256_loadu_ps((float const *)ptr_l + cs_l); + mat_a_cols_rearr[2] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[0]); + mat_a_cols_rearr[3] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[1]); + mat_a_cols_rearr[4] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[2]); + mat_a_cols_rearr[5] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[3]); + mat_a_cols_rearr[6] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[4]); + mat_a_cols_rearr[7] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[5]); + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + cs_b_offset[6] = (cs_b_offset[5] + cs_b); + + reciprocal_diags[1] = reciprocal_diags[0]; + + //pack first 8 diags together + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[1], 0xAA);//diag 0,1 + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_cols_rearr[2], mat_a_cols_rearr[3], 0xAA);//diag 2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_cols_rearr[4], mat_a_cols_rearr[5], 0xAA);//diag 4,5 + mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_cols_rearr[6], mat_a_cols_rearr[7], 0xAA);//diag 6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 + + //reciprocal of diagnal elements 0,1,2,3,4,5,6,7 + reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); + + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_diag_inv[0], mat_a_diag_inv[0]); + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); + + + /***************** first set of 8 rows of B processing starts *****************/ + ptr_b_dup = ptr_b; + i = 0; + for (j = 0; j < numCols_b; j += 8) + { + /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A + //read 8x8 block of B into registers + mat_b_rearr[0][0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_col[0] = _mm256_mul_ps(mat_b_rearr[0][0], mat_a_diag_inv[0]); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[1][0]);//d = c - (a*b) + mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[2][0]);//d = c - (a*b) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_col[1] = _mm256_mul_ps(mat_b_rearr[1][0], mat_a_diag_inv[1]); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[2][0]);//d = c - (a*b) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_col[2] = _mm256_mul_ps(mat_b_rearr[2][0], mat_a_diag_inv[2]); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[2], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[2], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[2], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_col[3] = _mm256_mul_ps(mat_b_rearr[3][0], mat_a_diag_inv[3]); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[3], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[3], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[3], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[3], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_col[4] = _mm256_mul_ps(mat_b_rearr[4][0], mat_a_diag_inv[4]); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[4], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[4], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[4], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_col[5] = _mm256_mul_ps(mat_b_rearr[5][0], mat_a_diag_inv[5]); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[5], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[5], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_col[6] = _mm256_mul_ps(mat_b_rearr[6][0], mat_a_diag_inv[6]); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[6], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_col[7] = _mm256_mul_ps(mat_b_rearr[7][0], mat_a_diag_inv[7]); + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); + + //i += cs_b_offset[6]; + //ptr_b_dup += cs_b_offset[6]; + i += 8; + ptr_b_dup += 8; + } + + //c = 0; + /***************** first set of 8 cols of B processing done *****************/ + ptr_b_dup = ptr_b; + i3 = 0; + i1 = 0; + //Start loop for cols of B to be processed in size of blk_width + for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row + { + ptr_l += 8; + //ptr_b += j; + //ptr_b_dup += 8; + ptr_b_dup += cs_b_offset[6]; + i1 += cs_b_offset[6]; + + //Read next 8x8 block of A to get diag elements + i3 += cs_l_offset[6]; + mat_a_cols_rearr[8] = _mm256_loadu_ps((float const *)ptr_l + i3); + mat_a_cols_rearr[9] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l); + mat_a_cols_rearr[10] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[0]); + mat_a_cols_rearr[11] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[1]); + mat_a_cols_rearr[12] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[2]); + mat_a_cols_rearr[13] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[3]); + mat_a_cols_rearr[14] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[4]); + mat_a_cols_rearr[15] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[5]); + + //pack 8 diags of A together + reciprocal_diags[0] = reciprocal_diags[1]; + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_cols_rearr[8], mat_a_cols_rearr[9], 0xAA);//diag 0,1 + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_cols_rearr[10], mat_a_cols_rearr[11], 0xAA);//diag 2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_cols_rearr[12], mat_a_cols_rearr[13], 0xAA);//diag 4,5 + mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[15], 0xAA);//diag 6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 + + //reciprocal of diagnal elements of A :- 0,1,2,3,4,5,6,7 + reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); + + i = 0; + i2 = 0; + for (k = 0; k < numCols_b; k += 8) + { + i = i1 + k; + //Read 8 cols of B columns of Block-to-be-solved + mat_b_rearr[i2][0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[i2][1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[i2][2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[i2][3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[i2][4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[i2][5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[i2][6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[i2][7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + i2++; + } + + i = 0; + i2 = 0; + for (l = 0; l < j; l += 8) // move across m + { + //Broadcast A8,0 to A15,0 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 1)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 2)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 3)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 4)); + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 5)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 6)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 7)); + + //Broadcast A8,2 to A15,2 to registers + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 1)); + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 2)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 3)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 4)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 5)); + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 6)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 7)); + + //Broadcast A8,3 to A15,3 to registers + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i)); + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 1)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 2)); + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 3)); + mat_a_blk_elems[28] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 4)); + mat_a_blk_elems[29] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 5)); + mat_a_blk_elems[30] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 6)); + mat_a_blk_elems[31] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 7)); + + // _mm256_permute2f128_ps() + + //Broadcast A8,4 to A15,4 to registers + mat_a_blk_elems[32] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i)); + mat_a_blk_elems[33] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 1)); + mat_a_blk_elems[34] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 2)); + mat_a_blk_elems[35] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 3)); + mat_a_blk_elems[36] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 4)); + mat_a_blk_elems[37] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 5)); + mat_a_blk_elems[38] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 6)); + mat_a_blk_elems[39] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 7)); + + //Broadcast A8,5 to A15,5 to registers + mat_a_blk_elems[40] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i)); + mat_a_blk_elems[41] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 1)); + mat_a_blk_elems[42] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 2)); + mat_a_blk_elems[43] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 3)); + mat_a_blk_elems[44] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 4)); + mat_a_blk_elems[45] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 5)); + mat_a_blk_elems[46] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 6)); + mat_a_blk_elems[47] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 7)); + + //Broadcast A8,6 to A15,6 to registers + mat_a_blk_elems[48] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i)); + mat_a_blk_elems[49] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 1)); + mat_a_blk_elems[50] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 2)); + mat_a_blk_elems[51] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 3)); + mat_a_blk_elems[52] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 4)); + mat_a_blk_elems[53] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 5)); + mat_a_blk_elems[54] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 6)); + mat_a_blk_elems[55] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 7)); + + //Broadcast A8,7 to A15,7 to registers + mat_a_blk_elems[56] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i)); + mat_a_blk_elems[57] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 1)); + mat_a_blk_elems[58] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 2)); + mat_a_blk_elems[59] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 3)); + mat_a_blk_elems[60] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 4)); + mat_a_blk_elems[61] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 5)); + mat_a_blk_elems[62] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 6)); + mat_a_blk_elems[63] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 7)); + + i += cs_l_offset[6]; + + + for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) + { + /////////////////// Partial Lower 8x8 block trsm of B + + i4 = i2 + k; + //Read current 8 cols of B columns from specified 8x8 current-block of B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); + + i4 = k >> 3; + + //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[1], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[1], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[1], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[2], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[2], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[2], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[2], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[2], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[2], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[3], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[3], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[3], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[3], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[28], mat_b_col[3], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[29], mat_b_col[3], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[30], mat_b_col[3], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[31], mat_b_col[3], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[32], mat_b_col[4], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[33], mat_b_col[4], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[34], mat_b_col[4], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[35], mat_b_col[4], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[36], mat_b_col[4], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[37], mat_b_col[4], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[38], mat_b_col[4], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[39], mat_b_col[4], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[40], mat_b_col[5], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[41], mat_b_col[5], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[42], mat_b_col[5], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[43], mat_b_col[5], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[44], mat_b_col[5], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[45], mat_b_col[5], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[46], mat_b_col[5], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[47], mat_b_col[5], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[48], mat_b_col[6], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[49], mat_b_col[6], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[50], mat_b_col[6], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[51], mat_b_col[6], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[52], mat_b_col[6], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[53], mat_b_col[6], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[54], mat_b_col[6], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[55], mat_b_col[6], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[56], mat_b_col[7], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[57], mat_b_col[7], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[58], mat_b_col[7], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[59], mat_b_col[7], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[60], mat_b_col[7], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[61], mat_b_col[7], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[62], mat_b_col[7], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[63], mat_b_col[7], mat_b_rearr[i4][7]);//d = c - (a*b) + + //end loop of cols + } + i2 += cs_b_offset[6]; + } + + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //mat_a_diag_inv2[0] = _mm256_unpacklo_ps(mat_a_diag_inv2[0], mat_a_diag_inv2[0]); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); + + k = 0; + for (i = 0; i < numCols_b; i+=8) + { + /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[k][0] = _mm256_mul_ps(mat_b_rearr[k][0], mat_a_diag_inv[0]); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[k][1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[k][0], mat_b_rearr[k][1]);//d = c - (a*b) + mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[k][0], mat_b_rearr[k][2]);//d = c - (a*b) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[k][0], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[k][0], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[k][0], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[k][0], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[k][0], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[k][1] = _mm256_mul_ps(mat_b_rearr[k][1], mat_a_diag_inv[1]); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_rearr[k][1], mat_b_rearr[k][2]);//d = c - (a*b) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_rearr[k][1], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_rearr[k][1], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_rearr[k][1], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_rearr[k][1], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_rearr[k][1], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[k][2] = _mm256_mul_ps(mat_b_rearr[k][2], mat_a_diag_inv[2]); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_rearr[k][2], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_rearr[k][2], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_rearr[k][2], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_rearr[k][2], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_rearr[k][2], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[k][3] = _mm256_mul_ps(mat_b_rearr[k][3], mat_a_diag_inv[3]); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_rearr[k][3], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_rearr[k][3], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_rearr[k][3], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_rearr[k][3], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_rearr[k][4] = _mm256_mul_ps(mat_b_rearr[k][4], mat_a_diag_inv[4]); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_rearr[k][4], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_rearr[k][4], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_rearr[k][4], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_rearr[k][5] = _mm256_mul_ps(mat_b_rearr[k][5], mat_a_diag_inv[5]); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_rearr[k][5], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_rearr[k][5], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_rearr[k][6] = _mm256_mul_ps(mat_b_rearr[k][6], mat_a_diag_inv[6]); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_rearr[k][6], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_rearr[k][7] = _mm256_mul_ps(mat_b_rearr[k][7], mat_a_diag_inv[7]); + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + + _mm256_storeu_ps((float *)ptr_b_dup + i, mat_b_rearr[k][0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b) + i), mat_b_rearr[k][1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i), mat_b_rearr[k][2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i), mat_b_rearr[k][3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i), mat_b_rearr[k][4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i), mat_b_rearr[k][5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i), mat_b_rearr[k][6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i), mat_b_rearr[k][7]); + //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); + k++; + } + + + } + ///////////////////loop ends ///////////////////// +} + +static void trsm_XAtB_block_allSmallSizedMatrices_alpha(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alpha) +{ + float ones = 1.0; + int i, i1, i2, i3, i4, j, k, l; + int cs_b_offset[7]; + int cs_l_offset[7]; + float *ptr_b_dup; + + //57 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[16][8]; + __m256 mat_a_cols_rearr[8]; + __m256 mat_a_blk_elems[64]; + __m256 mat_a_diag_inv[8]; + __m256 reciprocal_diags[2]; + __m256 alphaReg; + + reciprocal_diags[0] = _mm256_broadcast_ss((float const *)(&ones)); + alphaReg = _mm256_broadcast_ss((float const *)&alpha); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //L matrix offsets + cs_l_offset[0] = (cs_l << 1); + cs_l_offset[1] = cs_l + cs_l_offset[0]; + cs_l_offset[2] = (cs_l << 2); + cs_l_offset[3] = cs_l + cs_l_offset[2]; + cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; + cs_l_offset[5] = cs_l + cs_l_offset[4]; + cs_l_offset[6] = (cs_l_offset[5] + cs_l); + + //read diag elems of L 16x16 block + mat_a_cols_rearr[0] = _mm256_loadu_ps((float const *)ptr_l); + mat_a_cols_rearr[1] = _mm256_loadu_ps((float const *)ptr_l + cs_l); + mat_a_cols_rearr[2] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[0]); + mat_a_cols_rearr[3] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[1]); + mat_a_cols_rearr[4] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[2]); + mat_a_cols_rearr[5] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[3]); + mat_a_cols_rearr[6] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[4]); + mat_a_cols_rearr[7] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[5]); + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + cs_b_offset[6] = (cs_b_offset[5] + cs_b); + + reciprocal_diags[1] = reciprocal_diags[0]; + + //pack first 8 diags together + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[1], 0xAA);//diag 0,1 + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_cols_rearr[2], mat_a_cols_rearr[3], 0xAA);//diag 2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_cols_rearr[4], mat_a_cols_rearr[5], 0xAA);//diag 4,5 + mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_cols_rearr[6], mat_a_cols_rearr[7], 0xAA);//diag 6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 + + //reciprocal of diagnal elements 0,1,2,3,4,5,6,7 + reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); + + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_diag_inv[0], mat_a_diag_inv[0]); + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); + + + /***************** first set of 8 rows of B processing starts *****************/ + ptr_b_dup = ptr_b; + i = 0; + for (j = 0; j < numCols_b; j += 8) + { + /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A + //read 8x8 block of B into registers + mat_b_rearr[0][0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + mat_b_rearr[0][0] = _mm256_mul_ps(mat_b_rearr[0][0], alphaReg); + mat_b_rearr[1][0] = _mm256_mul_ps(mat_b_rearr[1][0], alphaReg); + mat_b_rearr[2][0] = _mm256_mul_ps(mat_b_rearr[2][0], alphaReg); + mat_b_rearr[3][0] = _mm256_mul_ps(mat_b_rearr[3][0], alphaReg); + mat_b_rearr[4][0] = _mm256_mul_ps(mat_b_rearr[4][0], alphaReg); + mat_b_rearr[5][0] = _mm256_mul_ps(mat_b_rearr[5][0], alphaReg); + mat_b_rearr[6][0] = _mm256_mul_ps(mat_b_rearr[6][0], alphaReg); + mat_b_rearr[7][0] = _mm256_mul_ps(mat_b_rearr[7][0], alphaReg); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_col[0] = _mm256_mul_ps(mat_b_rearr[0][0], mat_a_diag_inv[0]); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[1][0]);//d = c - (a*b) + mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[2][0]);//d = c - (a*b) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_col[1] = _mm256_mul_ps(mat_b_rearr[1][0], mat_a_diag_inv[1]); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[2][0]);//d = c - (a*b) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_col[2] = _mm256_mul_ps(mat_b_rearr[2][0], mat_a_diag_inv[2]); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[2], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[2], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[2], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_col[3] = _mm256_mul_ps(mat_b_rearr[3][0], mat_a_diag_inv[3]); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[3], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[3], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[3], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[3], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_col[4] = _mm256_mul_ps(mat_b_rearr[4][0], mat_a_diag_inv[4]); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[4], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[4], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[4], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_col[5] = _mm256_mul_ps(mat_b_rearr[5][0], mat_a_diag_inv[5]); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[5], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[5], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_col[6] = _mm256_mul_ps(mat_b_rearr[6][0], mat_a_diag_inv[6]); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[6], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_col[7] = _mm256_mul_ps(mat_b_rearr[7][0], mat_a_diag_inv[7]); + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); + + //i += cs_b_offset[6]; + //ptr_b_dup += cs_b_offset[6]; + i += 8; + ptr_b_dup += 8; + } + + //c = 0; + /***************** first set of 8 cols of B processing done *****************/ + ptr_b_dup = ptr_b; + i3 = 0; + i1 = 0; + //Start loop for cols of B to be processed in size of blk_width + for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row + { + ptr_l += 8; + //ptr_b += j; + //ptr_b_dup += 8; + ptr_b_dup += cs_b_offset[6]; + i1 += cs_b_offset[6]; + + //Read next 8x8 block of A to get diag elements + i3 += cs_l_offset[6]; + mat_a_cols_rearr[8] = _mm256_loadu_ps((float const *)ptr_l + i3); + mat_a_cols_rearr[9] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l); + mat_a_cols_rearr[10] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[0]); + mat_a_cols_rearr[11] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[1]); + mat_a_cols_rearr[12] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[2]); + mat_a_cols_rearr[13] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[3]); + mat_a_cols_rearr[14] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[4]); + mat_a_cols_rearr[15] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[5]); + + //pack 8 diags of A together + reciprocal_diags[0] = reciprocal_diags[1]; + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_cols_rearr[8], mat_a_cols_rearr[9], 0xAA);//diag 0,1 + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_cols_rearr[10], mat_a_cols_rearr[11], 0xAA);//diag 2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_cols_rearr[12], mat_a_cols_rearr[13], 0xAA);//diag 4,5 + mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[15], 0xAA);//diag 6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 + + //reciprocal of diagnal elements of A :- 0,1,2,3,4,5,6,7 + reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); + + i = 0; + i2 = 0; + for (k = 0; k < numCols_b; k += 8) + { + i = i1 + k; + //Read 8 cols of B columns of Block-to-be-solved + mat_b_rearr[i2][0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[i2][1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[i2][2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[i2][3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[i2][4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[i2][5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[i2][6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[i2][7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + mat_b_rearr[i2][0] = _mm256_mul_ps(mat_b_rearr[i2][0], alphaReg); + mat_b_rearr[i2][1] = _mm256_mul_ps(mat_b_rearr[i2][1], alphaReg); + mat_b_rearr[i2][2] = _mm256_mul_ps(mat_b_rearr[i2][2], alphaReg); + mat_b_rearr[i2][3] = _mm256_mul_ps(mat_b_rearr[i2][3], alphaReg); + mat_b_rearr[i2][4] = _mm256_mul_ps(mat_b_rearr[i2][4], alphaReg); + mat_b_rearr[i2][5] = _mm256_mul_ps(mat_b_rearr[i2][5], alphaReg); + mat_b_rearr[i2][6] = _mm256_mul_ps(mat_b_rearr[i2][6], alphaReg); + mat_b_rearr[i2][7] = _mm256_mul_ps(mat_b_rearr[i2][7], alphaReg); + + i2++; + } + + i = 0; + i2 = 0; + for (l = 0; l < j; l += 8) // move across m + { + //Broadcast A8,0 to A15,0 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 1)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 2)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 3)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 4)); + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 5)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 6)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 7)); + + //Broadcast A8,2 to A15,2 to registers + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 1)); + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 2)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 3)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 4)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 5)); + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 6)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 7)); + + //Broadcast A8,3 to A15,3 to registers + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i)); + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 1)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 2)); + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 3)); + mat_a_blk_elems[28] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 4)); + mat_a_blk_elems[29] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 5)); + mat_a_blk_elems[30] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 6)); + mat_a_blk_elems[31] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 7)); + + // _mm256_permute2f128_ps() + + //Broadcast A8,4 to A15,4 to registers + mat_a_blk_elems[32] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i)); + mat_a_blk_elems[33] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 1)); + mat_a_blk_elems[34] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 2)); + mat_a_blk_elems[35] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 3)); + mat_a_blk_elems[36] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 4)); + mat_a_blk_elems[37] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 5)); + mat_a_blk_elems[38] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 6)); + mat_a_blk_elems[39] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 7)); + + //Broadcast A8,5 to A15,5 to registers + mat_a_blk_elems[40] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i)); + mat_a_blk_elems[41] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 1)); + mat_a_blk_elems[42] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 2)); + mat_a_blk_elems[43] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 3)); + mat_a_blk_elems[44] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 4)); + mat_a_blk_elems[45] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 5)); + mat_a_blk_elems[46] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 6)); + mat_a_blk_elems[47] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 7)); + + //Broadcast A8,6 to A15,6 to registers + mat_a_blk_elems[48] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i)); + mat_a_blk_elems[49] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 1)); + mat_a_blk_elems[50] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 2)); + mat_a_blk_elems[51] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 3)); + mat_a_blk_elems[52] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 4)); + mat_a_blk_elems[53] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 5)); + mat_a_blk_elems[54] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 6)); + mat_a_blk_elems[55] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 7)); + + //Broadcast A8,7 to A15,7 to registers + mat_a_blk_elems[56] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i)); + mat_a_blk_elems[57] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 1)); + mat_a_blk_elems[58] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 2)); + mat_a_blk_elems[59] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 3)); + mat_a_blk_elems[60] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 4)); + mat_a_blk_elems[61] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 5)); + mat_a_blk_elems[62] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 6)); + mat_a_blk_elems[63] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 7)); + + i += cs_l_offset[6]; + + + for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) + { + /////////////////// Partial Lower 8x8 block trsm of B + + i4 = i2 + k; + //Read current 8 cols of B columns from specified 8x8 current-block of B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); + + i4 = k >> 3; + + //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[1], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[1], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[1], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[2], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[2], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[2], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[2], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[2], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[2], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[3], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[3], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[3], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[3], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[28], mat_b_col[3], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[29], mat_b_col[3], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[30], mat_b_col[3], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[31], mat_b_col[3], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[32], mat_b_col[4], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[33], mat_b_col[4], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[34], mat_b_col[4], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[35], mat_b_col[4], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[36], mat_b_col[4], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[37], mat_b_col[4], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[38], mat_b_col[4], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[39], mat_b_col[4], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[40], mat_b_col[5], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[41], mat_b_col[5], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[42], mat_b_col[5], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[43], mat_b_col[5], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[44], mat_b_col[5], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[45], mat_b_col[5], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[46], mat_b_col[5], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[47], mat_b_col[5], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[48], mat_b_col[6], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[49], mat_b_col[6], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[50], mat_b_col[6], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[51], mat_b_col[6], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[52], mat_b_col[6], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[53], mat_b_col[6], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[54], mat_b_col[6], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[55], mat_b_col[6], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[56], mat_b_col[7], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[57], mat_b_col[7], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[58], mat_b_col[7], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[59], mat_b_col[7], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[60], mat_b_col[7], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[61], mat_b_col[7], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[62], mat_b_col[7], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[63], mat_b_col[7], mat_b_rearr[i4][7]);//d = c - (a*b) + + //end loop of cols + } + i2 += cs_b_offset[6]; + } + + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //mat_a_diag_inv2[0] = _mm256_unpacklo_ps(mat_a_diag_inv2[0], mat_a_diag_inv2[0]); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); + + k = 0; + for (i = 0; i < numCols_b; i+=8) + { + /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[k][0] = _mm256_mul_ps(mat_b_rearr[k][0], mat_a_diag_inv[0]); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[k][1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[k][0], mat_b_rearr[k][1]);//d = c - (a*b) + mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[k][0], mat_b_rearr[k][2]);//d = c - (a*b) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[k][0], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[k][0], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[k][0], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[k][0], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[k][0], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[k][1] = _mm256_mul_ps(mat_b_rearr[k][1], mat_a_diag_inv[1]); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_rearr[k][1], mat_b_rearr[k][2]);//d = c - (a*b) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_rearr[k][1], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_rearr[k][1], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_rearr[k][1], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_rearr[k][1], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_rearr[k][1], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[k][2] = _mm256_mul_ps(mat_b_rearr[k][2], mat_a_diag_inv[2]); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_rearr[k][2], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_rearr[k][2], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_rearr[k][2], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_rearr[k][2], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_rearr[k][2], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[k][3] = _mm256_mul_ps(mat_b_rearr[k][3], mat_a_diag_inv[3]); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_rearr[k][3], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_rearr[k][3], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_rearr[k][3], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_rearr[k][3], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_rearr[k][4] = _mm256_mul_ps(mat_b_rearr[k][4], mat_a_diag_inv[4]); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_rearr[k][4], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_rearr[k][4], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_rearr[k][4], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_rearr[k][5] = _mm256_mul_ps(mat_b_rearr[k][5], mat_a_diag_inv[5]); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_rearr[k][5], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_rearr[k][5], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_rearr[k][6] = _mm256_mul_ps(mat_b_rearr[k][6], mat_a_diag_inv[6]); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_rearr[k][6], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_rearr[k][7] = _mm256_mul_ps(mat_b_rearr[k][7], mat_a_diag_inv[7]); + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + + _mm256_storeu_ps((float *)ptr_b_dup + i, mat_b_rearr[k][0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b) + i), mat_b_rearr[k][1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i), mat_b_rearr[k][2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i), mat_b_rearr[k][3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i), mat_b_rearr[k][4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i), mat_b_rearr[k][5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i), mat_b_rearr[k][6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i), mat_b_rearr[k][7]); + //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); + k++; + } + + + } + ///////////////////loop ends ///////////////////// +} + +static void trsm_XAtB_block_allSmallSizedMatrices_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) +{ + //float ones = 1.0; + int i, i1, i2, i3, i4, j, k, l; + int cs_b_offset[7]; + int cs_l_offset[7]; + float *ptr_b_dup; + + //57 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[16][8]; + //__m256 mat_a_cols_rearr[8]; + __m256 mat_a_blk_elems[64]; + //__m256 mat_a_diag_inv[8]; + //__m256 reciprocal_diags[2]; + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //L matrix offsets + cs_l_offset[0] = (cs_l << 1); + cs_l_offset[1] = cs_l + cs_l_offset[0]; + cs_l_offset[2] = (cs_l << 2); + cs_l_offset[3] = cs_l + cs_l_offset[2]; + cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; + cs_l_offset[5] = cs_l + cs_l_offset[4]; + cs_l_offset[6] = (cs_l_offset[5] + cs_l); + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + cs_b_offset[6] = (cs_b_offset[5] + cs_b); + + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); + + + /***************** first set of 8 rows of B processing starts *****************/ + ptr_b_dup = ptr_b; + i = 0; + for (j = 0; j < numCols_b; j += 8) + { + /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A + //read 8x8 block of B into registers + mat_b_rearr[0][0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + //(Row0) + mat_b_col[0] = mat_b_rearr[0][0]; + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[1][0]);//d = c - (a*b) + mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[2][0]);//d = c - (a*b) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[2][0]);//d = c - (a*b) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[2], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[2], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[2], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[3], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[3], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[3], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[3], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[4], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[4], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[4], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[5], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[5], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[6], mat_b_rearr[7][0]);//d = c - (a*b) + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); + + //i += cs_b_offset[6]; + //ptr_b_dup += cs_b_offset[6]; + i += 8; + ptr_b_dup += 8; + } + + //c = 0; + /***************** first set of 8 cols of B processing done *****************/ + ptr_b_dup = ptr_b; + i3 = 0; + i1 = 0; + //Start loop for cols of B to be processed in size of blk_width + for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row + { + ptr_l += 8; + //ptr_b += j; + //ptr_b_dup += 8; + ptr_b_dup += cs_b_offset[6]; + i1 += cs_b_offset[6]; + i3 += cs_l_offset[6]; + + i = 0; + i2 = 0; + for (k = 0; k < numCols_b; k += 8) + { + i = i1 + k; + //Read 8 cols of B columns of Block-to-be-solved + mat_b_rearr[i2][0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[i2][1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[i2][2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[i2][3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[i2][4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[i2][5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[i2][6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[i2][7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + i2++; + } + + i = 0; + i2 = 0; + for (l = 0; l < j; l += 8) // move across m + { + //Broadcast A8,0 to A15,0 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 1)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 2)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 3)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 4)); + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 5)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 6)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 7)); + + //Broadcast A8,2 to A15,2 to registers + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 1)); + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 2)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 3)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 4)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 5)); + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 6)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 7)); + + //Broadcast A8,3 to A15,3 to registers + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i)); + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 1)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 2)); + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 3)); + mat_a_blk_elems[28] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 4)); + mat_a_blk_elems[29] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 5)); + mat_a_blk_elems[30] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 6)); + mat_a_blk_elems[31] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 7)); + + // _mm256_permute2f128_ps() + + //Broadcast A8,4 to A15,4 to registers + mat_a_blk_elems[32] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i)); + mat_a_blk_elems[33] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 1)); + mat_a_blk_elems[34] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 2)); + mat_a_blk_elems[35] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 3)); + mat_a_blk_elems[36] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 4)); + mat_a_blk_elems[37] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 5)); + mat_a_blk_elems[38] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 6)); + mat_a_blk_elems[39] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 7)); + + //Broadcast A8,5 to A15,5 to registers + mat_a_blk_elems[40] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i)); + mat_a_blk_elems[41] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 1)); + mat_a_blk_elems[42] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 2)); + mat_a_blk_elems[43] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 3)); + mat_a_blk_elems[44] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 4)); + mat_a_blk_elems[45] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 5)); + mat_a_blk_elems[46] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 6)); + mat_a_blk_elems[47] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 7)); + + //Broadcast A8,6 to A15,6 to registers + mat_a_blk_elems[48] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i)); + mat_a_blk_elems[49] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 1)); + mat_a_blk_elems[50] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 2)); + mat_a_blk_elems[51] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 3)); + mat_a_blk_elems[52] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 4)); + mat_a_blk_elems[53] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 5)); + mat_a_blk_elems[54] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 6)); + mat_a_blk_elems[55] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 7)); + + //Broadcast A8,7 to A15,7 to registers + mat_a_blk_elems[56] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i)); + mat_a_blk_elems[57] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 1)); + mat_a_blk_elems[58] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 2)); + mat_a_blk_elems[59] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 3)); + mat_a_blk_elems[60] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 4)); + mat_a_blk_elems[61] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 5)); + mat_a_blk_elems[62] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 6)); + mat_a_blk_elems[63] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 7)); + + i += cs_l_offset[6]; + + for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) + { + /////////////////// Partial Lower 8x8 block trsm of B + + i4 = i2 + k; + //Read current 8 cols of B columns from specified 8x8 current-block of B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); + + i4 = k >> 3; + + //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[1], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[1], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[1], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[2], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[2], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[2], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[2], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[2], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[2], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[3], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[3], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[3], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[3], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[28], mat_b_col[3], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[29], mat_b_col[3], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[30], mat_b_col[3], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[31], mat_b_col[3], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[32], mat_b_col[4], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[33], mat_b_col[4], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[34], mat_b_col[4], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[35], mat_b_col[4], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[36], mat_b_col[4], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[37], mat_b_col[4], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[38], mat_b_col[4], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[39], mat_b_col[4], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[40], mat_b_col[5], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[41], mat_b_col[5], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[42], mat_b_col[5], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[43], mat_b_col[5], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[44], mat_b_col[5], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[45], mat_b_col[5], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[46], mat_b_col[5], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[47], mat_b_col[5], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[48], mat_b_col[6], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[49], mat_b_col[6], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[50], mat_b_col[6], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[51], mat_b_col[6], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[52], mat_b_col[6], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[53], mat_b_col[6], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[54], mat_b_col[6], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[55], mat_b_col[6], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[56], mat_b_col[7], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[57], mat_b_col[7], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[58], mat_b_col[7], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[59], mat_b_col[7], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[60], mat_b_col[7], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[61], mat_b_col[7], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[62], mat_b_col[7], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[63], mat_b_col[7], mat_b_rearr[i4][7]);//d = c - (a*b) + + //end loop of cols + } + i2 += cs_b_offset[6]; + } + + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + + k = 0; + for (i = 0; i < numCols_b; i+=8) + { + /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A + + //(Row0): already done + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[k][1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[k][0], mat_b_rearr[k][1]);//d = c - (a*b) + mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[k][0], mat_b_rearr[k][2]);//d = c - (a*b) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[k][0], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[k][0], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[k][0], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[k][0], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[k][0], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_rearr[k][1], mat_b_rearr[k][2]);//d = c - (a*b) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_rearr[k][1], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_rearr[k][1], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_rearr[k][1], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_rearr[k][1], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_rearr[k][1], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_rearr[k][2], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_rearr[k][2], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_rearr[k][2], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_rearr[k][2], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_rearr[k][2], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_rearr[k][3], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_rearr[k][3], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_rearr[k][3], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_rearr[k][3], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_rearr[k][4], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_rearr[k][4], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_rearr[k][4], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_rearr[k][5], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_rearr[k][5], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_rearr[k][6], mat_b_rearr[k][7]);//d = c - (a*b) + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + + _mm256_storeu_ps((float *)ptr_b_dup + i, mat_b_rearr[k][0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b) + i), mat_b_rearr[k][1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i), mat_b_rearr[k][2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i), mat_b_rearr[k][3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i), mat_b_rearr[k][4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i), mat_b_rearr[k][5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i), mat_b_rearr[k][6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i), mat_b_rearr[k][7]); + //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); + k++; + } + + + } + ///////////////////loop ends ///////////////////// +} + +static void trsm_XAtB_block_allSmallSizedMatrices_alpha_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alpha) +{ + //float ones = 1.0; + int i, i1, i2, i3, i4, j, k, l; + int cs_b_offset[7]; + int cs_l_offset[7]; + float *ptr_b_dup; + + //57 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[16][8]; + //__m256 mat_a_cols_rearr[8]; + __m256 mat_a_blk_elems[64]; + //__m256 mat_a_diag_inv[8]; + //__m256 reciprocal_diags[2]; + __m256 alphaReg; + alphaReg = _mm256_broadcast_ss((float const *)&alpha); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //L matrix offsets + cs_l_offset[0] = (cs_l << 1); + cs_l_offset[1] = cs_l + cs_l_offset[0]; + cs_l_offset[2] = (cs_l << 2); + cs_l_offset[3] = cs_l + cs_l_offset[2]; + cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; + cs_l_offset[5] = cs_l + cs_l_offset[4]; + cs_l_offset[6] = (cs_l_offset[5] + cs_l); + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + cs_b_offset[6] = (cs_b_offset[5] + cs_b); + + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); + + + /***************** first set of 8 rows of B processing starts *****************/ + ptr_b_dup = ptr_b; + i = 0; + for (j = 0; j < numCols_b; j += 8) + { + /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A + //read 8x8 block of B into registers + mat_b_rearr[0][0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + mat_b_rearr[0][0] = _mm256_mul_ps(mat_b_rearr[0][0], alphaReg); + mat_b_rearr[1][0] = _mm256_mul_ps(mat_b_rearr[1][0], alphaReg); + mat_b_rearr[2][0] = _mm256_mul_ps(mat_b_rearr[2][0], alphaReg); + mat_b_rearr[3][0] = _mm256_mul_ps(mat_b_rearr[3][0], alphaReg); + mat_b_rearr[4][0] = _mm256_mul_ps(mat_b_rearr[4][0], alphaReg); + mat_b_rearr[5][0] = _mm256_mul_ps(mat_b_rearr[5][0], alphaReg); + mat_b_rearr[6][0] = _mm256_mul_ps(mat_b_rearr[6][0], alphaReg); + mat_b_rearr[7][0] = _mm256_mul_ps(mat_b_rearr[7][0], alphaReg); + + //(Row0) + mat_b_col[0] = mat_b_rearr[0][0]; + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[1][0]);//d = c - (a*b) + mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[2][0]);//d = c - (a*b) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[2][0]);//d = c - (a*b) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[2], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[2], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[2], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[3], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[3], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[3], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[3], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[4], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[4], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[4], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[5], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[5], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[6], mat_b_rearr[7][0]);//d = c - (a*b) + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); + + //i += cs_b_offset[6]; + //ptr_b_dup += cs_b_offset[6]; + i += 8; + ptr_b_dup += 8; + } + + //c = 0; + /***************** first set of 8 cols of B processing done *****************/ + ptr_b_dup = ptr_b; + i3 = 0; + i1 = 0; + //Start loop for cols of B to be processed in size of blk_width + for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row + { + ptr_l += 8; + //ptr_b += j; + //ptr_b_dup += 8; + ptr_b_dup += cs_b_offset[6]; + i1 += cs_b_offset[6]; + i3 += cs_l_offset[6]; + + i = 0; + i2 = 0; + for (k = 0; k < numCols_b; k += 8) + { + i = i1 + k; + //Read 8 cols of B columns of Block-to-be-solved + mat_b_rearr[i2][0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[i2][1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[i2][2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[i2][3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[i2][4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[i2][5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[i2][6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[i2][7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + mat_b_rearr[i2][0] = _mm256_mul_ps(mat_b_rearr[i2][0], alphaReg); + mat_b_rearr[i2][1] = _mm256_mul_ps(mat_b_rearr[i2][1], alphaReg); + mat_b_rearr[i2][2] = _mm256_mul_ps(mat_b_rearr[i2][2], alphaReg); + mat_b_rearr[i2][3] = _mm256_mul_ps(mat_b_rearr[i2][3], alphaReg); + mat_b_rearr[i2][4] = _mm256_mul_ps(mat_b_rearr[i2][4], alphaReg); + mat_b_rearr[i2][5] = _mm256_mul_ps(mat_b_rearr[i2][5], alphaReg); + mat_b_rearr[i2][6] = _mm256_mul_ps(mat_b_rearr[i2][6], alphaReg); + mat_b_rearr[i2][7] = _mm256_mul_ps(mat_b_rearr[i2][7], alphaReg); + + i2++; + } + + i = 0; + i2 = 0; + for (l = 0; l < j; l += 8) // move across m + { + //Broadcast A8,0 to A15,0 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 1)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 2)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 3)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 4)); + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 5)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 6)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 7)); + + //Broadcast A8,2 to A15,2 to registers + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 1)); + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 2)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 3)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 4)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 5)); + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 6)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 7)); + + //Broadcast A8,3 to A15,3 to registers + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i)); + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 1)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 2)); + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 3)); + mat_a_blk_elems[28] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 4)); + mat_a_blk_elems[29] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 5)); + mat_a_blk_elems[30] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 6)); + mat_a_blk_elems[31] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 7)); + + // _mm256_permute2f128_ps() + + //Broadcast A8,4 to A15,4 to registers + mat_a_blk_elems[32] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i)); + mat_a_blk_elems[33] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 1)); + mat_a_blk_elems[34] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 2)); + mat_a_blk_elems[35] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 3)); + mat_a_blk_elems[36] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 4)); + mat_a_blk_elems[37] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 5)); + mat_a_blk_elems[38] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 6)); + mat_a_blk_elems[39] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 7)); + + //Broadcast A8,5 to A15,5 to registers + mat_a_blk_elems[40] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i)); + mat_a_blk_elems[41] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 1)); + mat_a_blk_elems[42] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 2)); + mat_a_blk_elems[43] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 3)); + mat_a_blk_elems[44] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 4)); + mat_a_blk_elems[45] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 5)); + mat_a_blk_elems[46] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 6)); + mat_a_blk_elems[47] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 7)); + + //Broadcast A8,6 to A15,6 to registers + mat_a_blk_elems[48] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i)); + mat_a_blk_elems[49] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 1)); + mat_a_blk_elems[50] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 2)); + mat_a_blk_elems[51] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 3)); + mat_a_blk_elems[52] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 4)); + mat_a_blk_elems[53] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 5)); + mat_a_blk_elems[54] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 6)); + mat_a_blk_elems[55] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 7)); + + //Broadcast A8,7 to A15,7 to registers + mat_a_blk_elems[56] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i)); + mat_a_blk_elems[57] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 1)); + mat_a_blk_elems[58] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 2)); + mat_a_blk_elems[59] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 3)); + mat_a_blk_elems[60] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 4)); + mat_a_blk_elems[61] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 5)); + mat_a_blk_elems[62] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 6)); + mat_a_blk_elems[63] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 7)); + + i += cs_l_offset[6]; + + for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) + { + /////////////////// Partial Lower 8x8 block trsm of B + + i4 = i2 + k; + //Read current 8 cols of B columns from specified 8x8 current-block of B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); + + i4 = k >> 3; + + //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[1], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[1], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[1], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[2], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[2], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[2], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[2], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[2], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[2], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[3], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[3], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[3], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[3], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[28], mat_b_col[3], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[29], mat_b_col[3], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[30], mat_b_col[3], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[31], mat_b_col[3], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[32], mat_b_col[4], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[33], mat_b_col[4], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[34], mat_b_col[4], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[35], mat_b_col[4], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[36], mat_b_col[4], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[37], mat_b_col[4], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[38], mat_b_col[4], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[39], mat_b_col[4], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[40], mat_b_col[5], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[41], mat_b_col[5], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[42], mat_b_col[5], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[43], mat_b_col[5], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[44], mat_b_col[5], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[45], mat_b_col[5], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[46], mat_b_col[5], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[47], mat_b_col[5], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[48], mat_b_col[6], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[49], mat_b_col[6], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[50], mat_b_col[6], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[51], mat_b_col[6], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[52], mat_b_col[6], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[53], mat_b_col[6], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[54], mat_b_col[6], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[55], mat_b_col[6], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[56], mat_b_col[7], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[57], mat_b_col[7], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[58], mat_b_col[7], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[59], mat_b_col[7], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[60], mat_b_col[7], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[61], mat_b_col[7], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[62], mat_b_col[7], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[63], mat_b_col[7], mat_b_rearr[i4][7]);//d = c - (a*b) + + //end loop of cols + } + i2 += cs_b_offset[6]; + } + + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + + k = 0; + for (i = 0; i < numCols_b; i+=8) + { + /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A + + //(Row0): already done + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[k][1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[k][0], mat_b_rearr[k][1]);//d = c - (a*b) + mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[k][0], mat_b_rearr[k][2]);//d = c - (a*b) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[k][0], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[k][0], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[k][0], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[k][0], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[k][0], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_rearr[k][1], mat_b_rearr[k][2]);//d = c - (a*b) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_rearr[k][1], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_rearr[k][1], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_rearr[k][1], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_rearr[k][1], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_rearr[k][1], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_rearr[k][2], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_rearr[k][2], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_rearr[k][2], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_rearr[k][2], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_rearr[k][2], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_rearr[k][3], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_rearr[k][3], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_rearr[k][3], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_rearr[k][3], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_rearr[k][4], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_rearr[k][4], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_rearr[k][4], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_rearr[k][5], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_rearr[k][5], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_rearr[k][6], mat_b_rearr[k][7]);//d = c - (a*b) + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + + _mm256_storeu_ps((float *)ptr_b_dup + i, mat_b_rearr[k][0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b) + i), mat_b_rearr[k][1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i), mat_b_rearr[k][2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i), mat_b_rearr[k][3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i), mat_b_rearr[k][4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i), mat_b_rearr[k][5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i), mat_b_rearr[k][6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i), mat_b_rearr[k][7]); + //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); + k++; + } + + + } + ///////////////////loop ends ///////////////////// +} + + +#endif + +>>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B From bc9dbce51294a7bdf9c3eded36774f6fbf78224f Mon Sep 17 00:00:00 2001 From: sraut Date: Wed, 6 Jun 2018 11:48:56 +0530 Subject: [PATCH 089/109] AMD Copyright information changed to 2018 Change-Id: Idfd11afd5d252f8063d0158680d24bf7e2854469 --- build/templates/license.c | 1 + build/templates/license.h | 1 + build/templates/license.sh | 1 + kernels/haswell/3/old/bli_gemm_haswell_asm_d6x8.c | 1 + kernels/zen/1f/bli_axpyf_zen_int_8.c | 2 +- kernels/zen/1f/bli_dotxf_zen_int_8.c | 2 +- 6 files changed, 6 insertions(+), 2 deletions(-) diff --git a/build/templates/license.c b/build/templates/license.c index bc0abc656..6505a70ff 100644 --- a/build/templates/license.c +++ b/build/templates/license.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2019, The University of Texas at Austin + Copyright (C) 2018, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/build/templates/license.h b/build/templates/license.h index bc0abc656..6505a70ff 100644 --- a/build/templates/license.h +++ b/build/templates/license.h @@ -5,6 +5,7 @@ libraries. Copyright (C) 2019, The University of Texas at Austin + Copyright (C) 2018, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/build/templates/license.sh b/build/templates/license.sh index ad5965c79..b9c51e289 100644 --- a/build/templates/license.sh +++ b/build/templates/license.sh @@ -5,6 +5,7 @@ # libraries. # # Copyright (C) 2019, The University of Texas at Austin +# Copyright (C) 2018, Advanced Micro Devices, Inc. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are diff --git a/kernels/haswell/3/old/bli_gemm_haswell_asm_d6x8.c b/kernels/haswell/3/old/bli_gemm_haswell_asm_d6x8.c index adb194f1f..e5e5a74fd 100644 --- a/kernels/haswell/3/old/bli_gemm_haswell_asm_d6x8.c +++ b/kernels/haswell/3/old/bli_gemm_haswell_asm_d6x8.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2018, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/kernels/zen/1f/bli_axpyf_zen_int_8.c b/kernels/zen/1f/bli_axpyf_zen_int_8.c index 3d424e896..b958600ce 100644 --- a/kernels/zen/1f/bli_axpyf_zen_int_8.c +++ b/kernels/zen/1f/bli_axpyf_zen_int_8.c @@ -4,8 +4,8 @@ An object-based framework for developing high-performance BLAS-like libraries. - Copyright (C) 2017 - 2019, Advanced Micro Devices, Inc. Copyright (C) 2018, The University of Texas at Austin + Copyright (C) 2016 - 2018, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/kernels/zen/1f/bli_dotxf_zen_int_8.c b/kernels/zen/1f/bli_dotxf_zen_int_8.c index ef75eeda1..e40c785d8 100644 --- a/kernels/zen/1f/bli_dotxf_zen_int_8.c +++ b/kernels/zen/1f/bli_dotxf_zen_int_8.c @@ -4,8 +4,8 @@ An object-based framework for developing high-performance BLAS-like libraries. - Copyright (C) 2017 - 2019, Advanced Micro Devices, Inc. Copyright (C) 2018, The University of Texas at Austin + Copyright (C) 2016 - 2018, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are From 73ddc58df0c185b3c542b88d7249f4e5e6e0d004 Mon Sep 17 00:00:00 2001 From: sraut Date: Mon, 1 Oct 2018 16:30:30 +0530 Subject: [PATCH 090/109] Small TRSM optimization changes :- 1) single precision small trsm kernels for XAt=B case are further optimized for performance. 2) double precision small trsm kernels for AX=B and XAtB cases are implemented. 3) single precision small trsm kernels for AutX=B are implemented in intrinsics to improve the current performance. Change-Id: Ic9d67ae6d8522615257dde018903f049dcffa2cf --- kernels/zen/3/bli_trsm_small.c | 5401 -------------------------------- 1 file changed, 5401 deletions(-) diff --git a/kernels/zen/3/bli_trsm_small.c b/kernels/zen/3/bli_trsm_small.c index 979c26dea..af84d0588 100644 --- a/kernels/zen/3/bli_trsm_small.c +++ b/kernels/zen/3/bli_trsm_small.c @@ -4,11 +4,7 @@ BLIS An object-based framework for developing high-performance BLAS-like libraries. -<<<<<<< HEAD Copyright (C) 2018-2019, Advanced Micro Devices, Inc. -======= -Copyright (C) 2018, Advanced Micro Devices, Inc. ->>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -30,24 +26,15 @@ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -<<<<<<< HEAD THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -======= -THEORY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ->>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -<<<<<<< HEAD -======= -//#define BLIS_ENABLE_SMALL_MATRIX_TRSM ->>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B #include "blis.h" #ifdef BLIS_ENABLE_SMALL_MATRIX_TRSM #include "immintrin.h" -<<<<<<< HEAD #define GEMM_BLK_V1 8 //Block size to perform gemm and apply trsm #define GEMM_ACCUM_A 1 //Peform B1=B1-(B0*A0) operation instead of B1'=(B0*A0) and then B1=B1-B1' #define OPT_CACHE_BLOCKING_L1 1 //Perform trsm block-wise in blocks of GEMM_BLK_V1 instead of all columns of B together. @@ -354,91 +341,6 @@ static void trsm_AutXB_block_allSmallSizedMatrices_alpha_unitDiag(float *ptr_l, int cs_b, float alpha); -======= - -static void (*fp_blis_strsm_microkernel)( float *ptr_l, - float *ptr_b, - int numRows_lb, - int numCols_b, - int rs_l, - int rs_b, - int cs_l, - int cs_b - ); -static void blis_strsm_microkernel( float *ptr_l, - float *ptr_b, - int numRows_lb, - int numCols_b, - int rs_l, - int rs_b, - int cs_l, - int cs_b - ); -static void blis_strsm_microkernel_alpha( float *ptr_l, - float *ptr_b, - int numRows_lb, - int numCols_b, - int rs_l, - int rs_b, - int cs_l, - int cs_b, - float alphaVal - ); -static void blis_strsm_microkernel_unitDiag( float *ptr_l, - float *ptr_b, - int numRows_lb, - int numCols_b, - int rs_l, - int rs_b, - int cs_l, - int cs_b - ); -static void blis_strsm_microkernel_alpha_unitDiag( float *ptr_l, - float *ptr_b, - int numRows_lb, - int numCols_b, - int rs_l, - int rs_b, - int cs_l, - int cs_b, - float alphaVal - ); -static void trsm_XAtB_block_allSmallSizedMatrices(float *ptr_l, - float *ptr_b, - int numRows_lb, - int numCols_b, - int rs_l, - int rs_b, - int cs_l, - int cs_b); -static void trsm_XAtB_block_allSmallSizedMatrices_alpha(float *ptr_l, - float *ptr_b, - int numRows_lb, - int numCols_b, - int rs_l, - int rs_b, - int cs_l, - int cs_b, - float alphaVal); -static void trsm_XAtB_block_allSmallSizedMatrices_unitDiag(float *ptr_l, - float *ptr_b, - int numRows_lb, - int numCols_b, - int rs_l, - int rs_b, - int cs_l, - int cs_b); -static void trsm_XAtB_block_allSmallSizedMatrices_alpha_unitDiag(float *ptr_l, - float *ptr_b, - int numRows_lb, - int numCols_b, - int rs_l, - int rs_b, - int cs_l, - int cs_b, - float alphaVal); - ->>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B //AX = B; A is lower triangular; No transpose; single precision static err_t bli_strsm_small_AlXB ( @@ -449,21 +351,6 @@ static err_t bli_strsm_small_AlXB cntx_t* cntx, cntl_t* cntl ); -<<<<<<< HEAD -======= - -//AX = B; A is lower triangular; No transpose; double precision -static err_t bli_dtrsm_small_AlXB - ( - side_t side, - obj_t* alpha, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ); - ->>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B //A.'X = B; A is upper triangular; A has to be transposed; single precision static err_t bli_strsm_small_AutXB ( @@ -475,20 +362,6 @@ static err_t bli_strsm_small_AutXB cntl_t* cntl ); -<<<<<<< HEAD -======= -//A.'X = B; A is upper triangular; A has to be transposed; double precision -static err_t bli_dtrsm_small_AutXB - ( - side_t side, - obj_t* alpha, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ); - ->>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B //XA.' = B; A is lower triangular; A has to be transposed; single precision static err_t bli_strsm_small_XAltB ( @@ -500,13 +373,8 @@ static err_t bli_strsm_small_XAltB cntl_t* cntl ); -<<<<<<< HEAD //A.'X = B; A is upper triangular; A has to be transposed; double precision static err_t bli_dtrsm_small_AutXB -======= -//XA.' = B; A is lower triangular; A has to be transposed; double precision -static err_t bli_dtrsm_small_XAltB ->>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B ( side_t side, obj_t* alpha, @@ -515,11 +383,7 @@ static err_t bli_dtrsm_small_XAltB cntx_t* cntx, cntl_t* cntl ); -<<<<<<< HEAD -======= - void trsm_block_c(float *ptr_l, float *ptr_b, int blk_height, int blk_width, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b); ->>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B /* * The bli_trsm_small implements unpacked version of TRSM * Currently only column-major is supported, A & B are column-major @@ -543,7 +407,6 @@ err_t bli_trsm_small return BLIS_NOT_YET_IMPLEMENTED; #endif -<<<<<<< HEAD dim_t m = bli_obj_length(b); dim_t n = bli_obj_width(b); @@ -551,8 +414,6 @@ err_t bli_trsm_small return BLIS_SUCCESS; -======= ->>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B // If alpha is zero, B matrix will become zero after scaling & hence solution is also zero matrix if (bli_obj_equals(alpha, &BLIS_ZERO)) { @@ -561,13 +422,8 @@ err_t bli_trsm_small // We have to call matrix scaling if alpha != 1.0 // if row major format return. Check this again. -<<<<<<< HEAD if ((bli_obj_row_stride(a) != 1) || (bli_obj_row_stride(b) != 1)) -======= - if ((bli_obj_row_stride(*a) != 1) || - (bli_obj_row_stride(*b) != 1)) ->>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B { return BLIS_INVALID_ROW_STRIDE; } @@ -577,7 +433,6 @@ err_t bli_trsm_small // only float and double datatypes are supported as of now. if (dt != BLIS_DOUBLE && dt != BLIS_FLOAT) { -<<<<<<< HEAD return BLIS_EXPECTED_REAL_DATATYPE; } @@ -585,22 +440,12 @@ err_t bli_trsm_small if (!bli_obj_is_upper_or_lower (a)) { return BLIS_EXPECTED_TRIANGULAR_OBJECT; -======= - return BLIS_EXPECTED_REAL_DATATYPE; - } - - // A is expected to be triangular in trsm - if (!bli_obj_is_upper_or_lower (*a)) - { - return BLIS_EXPECTED_TRIANGULAR_OBJECT; ->>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B } // can use other control structs - even can use array of function pointers, // indexed by a number with bits formed by f('side', 'uplo', 'transa', dt). // In the below implementation, based on the number of finally implemented // cases, can move the checks with more cases higher up. -<<<<<<< HEAD if(side == BLIS_LEFT) { @@ -664,45 +509,10 @@ err_t bli_trsm_small } -======= - if (side == BLIS_LEFT) - { - if (bli_obj_has_trans(*a)) - { - if (dt == BLIS_DOUBLE) - { - if (bli_obj_is_upper(*a)) - { - //A.'X = B; A is upper triangular; A has to be transposed; double precision -#if 0 // planning to implement this in this iteration - return bli_dtrsm_small_AutXB(side, alpha, a, b, cntx, cntl); -#else - return BLIS_NOT_YET_IMPLEMENTED; -#endif - } - else - { - return BLIS_NOT_YET_IMPLEMENTED; - } - } - else if (dt == BLIS_FLOAT) - { - if (bli_obj_is_upper(*a)) - { - //A.'X = B; A is upper triangular; A has to be transposed; single precision - //return bli_strsm_small_AutXB(side, alpha, a, b, cntx, cntl); - return BLIS_NOT_YET_IMPLEMENTED; - } - else - { - return BLIS_NOT_YET_IMPLEMENTED; - } ->>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B } } else { -<<<<<<< HEAD if(bli_obj_has_trans(a)) { if(dt == BLIS_DOUBLE) @@ -25289,5214 +25099,3 @@ static void trsm_AutXB_block_allSmallSizedMatrices_alpha_unitDiag(float *ptr_l, ///////////////////loop ends ///////////////////// } #endif -======= - if (dt == BLIS_DOUBLE) - { - if (bli_obj_is_upper(*a)) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - else - { - //AX = B; A is lower triangular; No transpose; double precision - //return bli_dtrsm_small_AlXB(side, alpha, a, b, cntx, cntl); - return BLIS_NOT_YET_IMPLEMENTED; - } - } - else if (dt == BLIS_FLOAT) - { - if (bli_obj_is_upper(*a)) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - else - { - //AX = B; A is lower triangular; No transpose; single precision - return bli_strsm_small_AlXB(side, alpha, a, b, cntx, cntl); - } - } - } - } - else - { - if (bli_obj_has_trans(*a)) - { - if (dt == BLIS_DOUBLE) - { - if (bli_obj_is_upper(*a)) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - else - { - //XA.' = B; A is lower triangular; A has to be transposed; double precision -#if 0 // planning to implement this in this iteration - return bli_dtrsm_small_XAltB(side, alpha, a, b, cntx, cntl); -#else - return BLIS_NOT_YET_IMPLEMENTED; -#endif - } - } - else if (dt == BLIS_FLOAT) - { - if (bli_obj_is_upper(*a)) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - else - { - //XA.' = B; A is lower triangular; A has to be transposed; single precision - return bli_strsm_small_XAltB(side, alpha, a, b, cntx, cntl); - } - } - } - else - { - return BLIS_NOT_YET_IMPLEMENTED; - } - } - - return BLIS_NOT_YET_IMPLEMENTED; -}; - - - - -/* - * AX = alpha*B, Double precision, A: lower triangular - */ -static err_t bli_dtrsm_small_AlXB ( - side_t side, - obj_t* alpha, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ) -{ - - int M = bli_obj_length(*b); // number of rows of matrix B - int N = bli_obj_width(*b); // number of columns of matrix B - - int lda = bli_obj_col_stride(*a); // column stride of A - int ldb = bli_obj_col_stride(*b); // column stride of B - - int i; - int j; - int k; - - double *A = a->buffer; - double *B = b->buffer; - - // Need to incorporate alpha - - #if 0 - - for (k = 0; k < M; k++) - { - double lkk_inv = 1.0/A[k+k*lda]; - - for (j = 0; j < N; j++) - { - B[k + j*ldb] *= lkk_inv; - } - for (i = k+1; i < M; i++) - { - for (j = 0; j < N; j++) - { - B[i + j*ldb] -= A[i + k*lda] * B[k + j*ldb]; - } - } - }// k -loop - #else - for (k = 0; k < M; k++) - { - double lkk_inv = 1.0/A[k+k*lda]; - - for (j = 0; j < N; j++) - { - B[k + j*ldb] *= lkk_inv; - - // for (j = 0; j < N; j++) - for (i = k+1; i < M; i++) - { - B[i + j*ldb] -= A[i + k*lda] * B[k + j*ldb]; - } - } - }// k -loop - - #endif - - return BLIS_SUCCESS; -}// end of function - - - -static void trsm_small_AlXB ( - float *A, - float *B, - int M, - int N, - int lda, - int ldb - ) -{ - int i; - int j; - int k; - - // Need to incorporate alpha - - for (k = 0; k < M; k++) - { - float lkk_inv = 1.0/A[k+k*lda]; - - for (j = 0; j < N; j++) - { - B[k + j*ldb] *= lkk_inv; - - for (i = k+1; i < M; i++) - { - B[i + j*ldb] -= A[i + k*lda] * B[k + j*ldb]; - } - } - }// k -loop - -}// end of function - - -// Test code: -void gemm_small( float *ptr_l, - float *ptr_b, - int blk_m, - int blk_n, - float *ptr_gemmOut, - int cs_l, - int cs_b, - int rs_l, - int rs_b, - float alpha, - float beta) -{ - int i, j, k; - - for (i = 0; i < blk_m; i++) - { - for (j = 0; j < blk_n; j++) - { - float t = 0.0; - for (k = 0; k < blk_m; k++) - { - t += (ptr_l[i*rs_l + k* cs_l] * ptr_b[k*rs_b + j*cs_b]); - } - ptr_gemmOut[i*rs_b + j*cs_b] = beta * ptr_gemmOut[i*rs_b + j*cs_b] + alpha * t; - } - } -} - - - - -/* - * AX = Alpha*B, Single precision, A: lower triangular - */ -static err_t bli_strsm_small_AlXB ( - side_t side, - obj_t* AlphaObj, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ) -{ - obj_t alpha, beta; // gemm parameters - obj_t Ga, Gb, Gc; // for GEMM - int m = bli_obj_length(*b); // number of rows of matrix B - int n = bli_obj_width(*b); // number of columns of matrix B - - int lda = bli_obj_col_stride(*a); // column stride of A - int ldb = bli_obj_col_stride(*b); // column stride of B - - int rsa = bli_obj_row_stride(*a); // row stride of A - int rsb = bli_obj_row_stride(*b); // row stride of B - - int i = 0; - int j; - int blk_size = 8; - int isUnitDiag = bli_obj_has_unit_diag(*a); - - float alphaVal; - float *L = a->buffer; - float *B = b->buffer; - - if (m != 16 || (n%8) != 0) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - if ( (m*(m + n)) > BLIS_SMALL_MATRIX_THRES_TRSM ) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - - alphaVal = *((float *)bli_obj_buffer_for_const(BLIS_FLOAT, *AlphaObj)); - - /* Small _GEMM preparation code */ - bli_obj_create( BLIS_FLOAT, 1, 1, 0, 0, &alpha ); - bli_obj_create( BLIS_FLOAT, 1, 1, 0, 0, &beta ); - - /* B = B - A*B */ - bli_setsc( -(1.0), 0.0, &alpha ); - bli_setsc( (1.0), 0.0, &beta ); - - - bli_obj_create_with_attached_buffer( BLIS_FLOAT, blk_size, blk_size, a->buffer, rsa, lda, &Ga); - bli_obj_create_with_attached_buffer( BLIS_FLOAT, blk_size, n, b->buffer, rsb, ldb, &Gb); - bli_obj_create_with_attached_buffer( BLIS_FLOAT, blk_size, n, b->buffer, rsb, ldb, &Gc); - - bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, Ga ); - bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, Gb ); - bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, Gc ); - - //first block of trsm - Gb.buffer = (void*)(B + i); - - //trsm of first 8xn block - if (alphaVal != 1) - { - if (isUnitDiag == 0) - { - blis_strsm_microkernel_alpha((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); - fp_blis_strsm_microkernel = blis_strsm_microkernel; - } - else - { - blis_strsm_microkernel_alpha_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); - fp_blis_strsm_microkernel = blis_strsm_microkernel_unitDiag; - } - bli_setsc( alphaVal, 0.0, &beta ); - } - else - { - if (isUnitDiag == 0) - { - blis_strsm_microkernel((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); - fp_blis_strsm_microkernel = blis_strsm_microkernel; - } - else - { - blis_strsm_microkernel_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); - fp_blis_strsm_microkernel = blis_strsm_microkernel_unitDiag; - } - } - - //gemm update - for (j = i + blk_size; j < m; j += blk_size) // for rows upto multiple of BLOCK_HEIGHT - { - Ga.buffer = (void*)(L + j + i*lda); - Gc.buffer = (void*)(B + j); - - bli_gemm_small(&alpha, &Ga, &Gb, &beta, &Gc, cntx, cntl ); // Gc = beta*Gc + alpha*Ga *Gb - } - - //trsm of remaining blocks - for (i = blk_size; i < m; i += blk_size) - { - Gb.buffer = (void*)(B + i); - - fp_blis_strsm_microkernel((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); - - for (j = i + blk_size; j < m; j += blk_size) // for rows upto multiple of BLOCK_HEIGHT - { - Ga.buffer = (void*)(L + j + i*lda); - Gc.buffer = (void*)(B + j); - - bli_gemm_small(&alpha, &Ga, &Gb, &beta, &Gc, cntx, cntl ); // Gc = beta*Gc + alpha*Ga *Gb - } - - } // End of for loop - i - - return BLIS_SUCCESS; -} - -void trsm_block_c(float *ptr_l, float *ptr_b, int blk_height, int blk_width, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) -{ - int i, j, k, l; - float inv_l; - - inv_l = 1.0 / *ptr_l; - - for (j = 0; j < numCols_b; j += blk_width) - { - for (l = j; l < (j+blk_width); l++) - { - ptr_b[l*cs_b] = ptr_b[l*cs_b] * inv_l; - } - - for (i = 1; i < blk_height; i++) - { - for (l = j; l < (j+blk_width); l++) - { - for (k = 0; k < i; k++) - { - ptr_b[i*rs_b + l*cs_b] -= (ptr_b[k*rs_b + l*cs_b] * ptr_l[i*rs_l + k*cs_l]); - } - ptr_b[i*rs_b + l*cs_b] = ptr_b[i*rs_b + l*cs_b] / ptr_l[i*rs_l + i*cs_l]; - } - } - } -} - -/* - * XA' = Alpha*B, Single precision, A: lower triangular - */ -static err_t bli_strsm_small_XAltB( - side_t side, - obj_t* AlphaObj, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ) -{ - int m = bli_obj_length(*a); // number of rows of matrix B - int n = bli_obj_length(*b); // number of columns of matrix B - - int lda = bli_obj_col_stride(*a); // column stride of A - int ldb = bli_obj_col_stride(*b); // column stride of B - - int rsa = bli_obj_row_stride(*a); // row stride of A - int rsb = bli_obj_row_stride(*b); // row stride of B - - int i = 0; - int isUnitDiag = bli_obj_has_unit_diag(*a); - - float alphaVal; - float *L = a->buffer; - float *B = b->buffer; - - if ((m%8) != 0 || (n%8) != 0) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - if ( (m*(m + n)) > BLIS_SMALL_MATRIX_THRES_TRSM ) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - - alphaVal = *((float *)bli_obj_buffer_for_const(BLIS_FLOAT, *AlphaObj)); - - if (alphaVal != 1) - { - if (isUnitDiag == 0) - { - trsm_XAtB_block_allSmallSizedMatrices_alpha((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); - } - else - { - trsm_XAtB_block_allSmallSizedMatrices_alpha_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); - } - } - else - { - if (isUnitDiag == 0) - { - trsm_XAtB_block_allSmallSizedMatrices((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); - } - else - { - trsm_XAtB_block_allSmallSizedMatrices_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); - } - } - return BLIS_SUCCESS; -} - -static void blis_strsm_microkernel_alpha(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alphaVal) -{ - float ones = 1.0; - int j; - int cs_b_offset[6]; - //int row2, row4, row6; - float *ptr_b_dup; - - //70 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[8]; - __m256 mat_a_cols[8]; - __m256 mat_a_cols_rearr[36]; - __m256 mat_a_diag_inv[8]; - __m256 reciprocal_diags; - __m256 alphaReg; - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - - //reciprocal_diags = _mm256_loadu_ps((float const *)ones); - reciprocal_diags = _mm256_broadcast_ss((float const *)&ones); - alphaReg = _mm256_broadcast_ss((float const *)&alphaVal); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //read first set of 16x8 block of B into registers, where 16 is the blk_height and 8 is the blk_width for B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); - //_mm_prefetch((char*)(ptr_l + 0), _MM_HINT_T0); - //row2 = (cs_l << 1); - //row4 = (cs_l << 2); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); - //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); - //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); - //_mm_prefetch((char*)(ptr_l + row2 + cs_l), _MM_HINT_T0); - //row6 = row2 + row4; - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); - //_mm_prefetch((char*)(ptr_l + row4), _MM_HINT_T0); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); - //_mm_prefetch((char*)(ptr_l + row4 + cs_l), _MM_HINT_T0); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); - //_mm_prefetch((char*)(ptr_l + row6), _MM_HINT_T0); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); - //_mm_prefetch((char*)(ptr_l + row6 + cs_l), _MM_HINT_T0); - - //reciprocal_diags = _mm256_loadu_ps((float const *)ones); - - //read first set of 16x16 block of L, where 16 is the blk_height and 16 is the blk_width for L - /*mat_a_cols[0] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[1] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[2] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[3] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[4] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[5] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[6] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[7] = _mm256_loadu_ps((float const *)ptr_l);*/ - - //Shuffle to rearrange/transpose 16x16 block of L into contiguous row-wise registers - //tmpRegs[0] = _mm256_castps256_ps128(mat_a_cols[0]); //zero latency, no instruction added actually. - //mat_a_cols_rearr[0] = _mm256_broadcastss_ps(tmpRegs[0]); - //1st col - mat_a_cols_rearr[0] = _mm256_broadcast_ss((float const *)(ptr_l+0)); - mat_a_cols_rearr[1] = _mm256_broadcast_ss((float const *)(ptr_l+1)); - mat_a_cols_rearr[3] = _mm256_broadcast_ss((float const *)(ptr_l+2)); - mat_a_cols_rearr[6] = _mm256_broadcast_ss((float const *)(ptr_l+3)); - mat_a_cols_rearr[10] = _mm256_broadcast_ss((float const *)(ptr_l+4)); - mat_a_cols_rearr[15] = _mm256_broadcast_ss((float const *)(ptr_l+5)); - mat_a_cols_rearr[21] = _mm256_broadcast_ss((float const *)(ptr_l+6)); - mat_a_cols_rearr[28] = _mm256_broadcast_ss((float const *)(ptr_l+7)); - //2nd col - ptr_l += cs_l; - mat_a_cols_rearr[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_cols_rearr[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_cols_rearr[7] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[11] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[16] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[22] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[29] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //3rd col - ptr_l += cs_l; - mat_a_cols_rearr[5] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_cols_rearr[8] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[12] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[17] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[23] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[30] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //4rth col - ptr_l += cs_l; - mat_a_cols_rearr[9] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[13] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[18] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[24] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[31] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //5th col - ptr_l += cs_l; - mat_a_cols_rearr[14] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[19] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[25] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[32] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //6th col - ptr_l += cs_l; - mat_a_cols_rearr[20] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[26] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[33] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //7th col - ptr_l += cs_l; - mat_a_cols_rearr[27] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[34] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //7th col - ptr_l += cs_l; - mat_a_cols_rearr[35] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - numCols_b -= 8; // blk_width = 8 - - //compute reciprocals of L(i,i) and broadcast in registers - mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); - mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); - mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[20]); - mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_cols_rearr[27], mat_a_cols_rearr[35]); - - //mat_a_diag_inv[1] = _mm256_permute_ps(mat_a_diag_inv[1], 0x55); - //mat_a_diag_inv[3] = _mm256_permute_ps(mat_a_diag_inv[3], 0x55); - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC); - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x20); - - //reciprocal of diagnol elements - reciprocal_diags = _mm256_div_ps(reciprocal_diags, mat_a_diag_inv[0]); - - //Start loop for cols of B to be processed in size of blk_width - for (j = 0; j < numCols_b; j += 8) - { - ptr_b_dup = ptr_b; - - /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ - - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); - - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); - mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); -#else - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); - mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); - mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); - mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); - mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); - mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); - mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); - mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - //Read next set of B columns - ptr_b += (cs_b + cs_b_offset[5]); - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); - - //end loop of cols - } - - //Last block trsm processing - ptr_b_dup = ptr_b; - - /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ - - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); - - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); - mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); -#else - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); - mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); - mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); - mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); - mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); - mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); - mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); - mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); - - //end loop of cols -} - -static void blis_strsm_microkernel_alpha_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alphaVal) -{ - //float ones = 1.0; - int j; - int cs_b_offset[6]; - //int row2, row4, row6; - float *ptr_b_dup; - - //70 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[8]; - __m256 mat_a_cols[8]; - __m256 mat_a_cols_rearr[36]; - //__m256 mat_a_diag_inv[8]; - //__m256 reciprocal_diags; - __m256 alphaReg; - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - - //reciprocal_diags = _mm256_loadu_ps((float const *)ones); - //reciprocal_diags = _mm256_broadcast_ss((float const *)&ones); - alphaReg = _mm256_broadcast_ss((float const *)&alphaVal); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //read first set of 16x8 block of B into registers, where 16 is the blk_height and 8 is the blk_width for B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); - //_mm_prefetch((char*)(ptr_l + 0), _MM_HINT_T0); - //row2 = (cs_l << 1); - //row4 = (cs_l << 2); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); - //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); - //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); - //_mm_prefetch((char*)(ptr_l + row2 + cs_l), _MM_HINT_T0); - //row6 = row2 + row4; - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); - //_mm_prefetch((char*)(ptr_l + row4), _MM_HINT_T0); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); - //_mm_prefetch((char*)(ptr_l + row4 + cs_l), _MM_HINT_T0); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); - //_mm_prefetch((char*)(ptr_l + row6), _MM_HINT_T0); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); - //_mm_prefetch((char*)(ptr_l + row6 + cs_l), _MM_HINT_T0); - - //reciprocal_diags = _mm256_loadu_ps((float const *)ones); - - //read first set of 16x16 block of L, where 16 is the blk_height and 16 is the blk_width for L - /*mat_a_cols[0] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[1] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[2] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[3] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[4] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[5] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[6] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[7] = _mm256_loadu_ps((float const *)ptr_l);*/ - - //Shuffle to rearrange/transpose 16x16 block of L into contiguous row-wise registers - //tmpRegs[0] = _mm256_castps256_ps128(mat_a_cols[0]); //zero latency, no instruction added actually. - //mat_a_cols_rearr[0] = _mm256_broadcastss_ps(tmpRegs[0]); - //1st col - mat_a_cols_rearr[0] = _mm256_broadcast_ss((float const *)(ptr_l+0)); - mat_a_cols_rearr[1] = _mm256_broadcast_ss((float const *)(ptr_l+1)); - mat_a_cols_rearr[3] = _mm256_broadcast_ss((float const *)(ptr_l+2)); - mat_a_cols_rearr[6] = _mm256_broadcast_ss((float const *)(ptr_l+3)); - mat_a_cols_rearr[10] = _mm256_broadcast_ss((float const *)(ptr_l+4)); - mat_a_cols_rearr[15] = _mm256_broadcast_ss((float const *)(ptr_l+5)); - mat_a_cols_rearr[21] = _mm256_broadcast_ss((float const *)(ptr_l+6)); - mat_a_cols_rearr[28] = _mm256_broadcast_ss((float const *)(ptr_l+7)); - //2nd col - ptr_l += cs_l; - mat_a_cols_rearr[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_cols_rearr[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_cols_rearr[7] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[11] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[16] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[22] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[29] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //3rd col - ptr_l += cs_l; - mat_a_cols_rearr[5] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_cols_rearr[8] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[12] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[17] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[23] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[30] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //4rth col - ptr_l += cs_l; - mat_a_cols_rearr[9] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[13] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[18] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[24] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[31] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //5th col - ptr_l += cs_l; - mat_a_cols_rearr[14] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[19] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[25] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[32] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //6th col - ptr_l += cs_l; - mat_a_cols_rearr[20] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[26] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[33] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //7th col - ptr_l += cs_l; - mat_a_cols_rearr[27] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[34] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //8th col - //ptr_l += cs_l; - //mat_a_cols_rearr[35] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - numCols_b -= 8; // blk_width = 8 - - //compute reciprocals of L(i,i) and broadcast in registers - //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[20]); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_cols_rearr[27], mat_a_cols_rearr[35]); - - //mat_a_diag_inv[1] = _mm256_permute_ps(mat_a_diag_inv[1], 0x55); - //mat_a_diag_inv[3] = _mm256_permute_ps(mat_a_diag_inv[3], 0x55); - //mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC); - //mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC); - //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x20); - - //reciprocal of diagnol elements - //reciprocal_diags = _mm256_div_ps(reciprocal_diags, mat_a_diag_inv[0]); - - //Start loop for cols of B to be processed in size of blk_width - for (j = 0; j < numCols_b; j += 8) - { - ptr_b_dup = ptr_b; - - /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ - - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //extract diag a00 from a - //mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); - //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - //mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); - - //extract diag a11 from a - //mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); - //mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - //mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - //mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); - //mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - //mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - //mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); - //mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - //mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - //mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); - //mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - //mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - //mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); - //mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - //mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - //mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); - //mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - //mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - //mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); - //mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - //mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); - mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); -#else - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); - mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); - mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); - mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); - mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); - mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); - mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); - mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - //Read next set of B columns - ptr_b += (cs_b + cs_b_offset[5]); - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); - - //end loop of cols - } - - //Last block trsm processing - ptr_b_dup = ptr_b; - - /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ - - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //extract diag a00 from a - //mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); - //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - //mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); - - //extract diag a11 from a - //mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); - //mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - //mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - //mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); - //mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - //mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - //mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); - //mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - //mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - //mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); - //mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - //mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - //mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); - //mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - //mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - //mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); - //mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - //mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - //mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); - //mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - //mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); - mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); -#else - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); - mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); - mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); - mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); - mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); - mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); - mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); - mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); - - //end loop of cols -} - -static void blis_strsm_microkernel_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) -{ - //float ones = 1.0; - int j; - int cs_b_offset[6]; - //int row2, row4, row6; - float *ptr_b_dup; - - //70 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[8]; - __m256 mat_a_cols[8]; - __m256 mat_a_cols_rearr[36]; - //__m256 mat_a_diag_inv[8]; - //__m256 reciprocal_diags; - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - - //reciprocal_diags = _mm256_loadu_ps((float const *)ones); - //reciprocal_diags = _mm256_broadcast_ss((float const *)&ones); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //read first set of 16x8 block of B into registers, where 16 is the blk_height and 8 is the blk_width for B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); - //_mm_prefetch((char*)(ptr_l + 0), _MM_HINT_T0); - //row2 = (cs_l << 1); - //row4 = (cs_l << 2); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); - //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); - //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); - //_mm_prefetch((char*)(ptr_l + row2 + cs_l), _MM_HINT_T0); - //row6 = row2 + row4; - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); - //_mm_prefetch((char*)(ptr_l + row4), _MM_HINT_T0); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); - //_mm_prefetch((char*)(ptr_l + row4 + cs_l), _MM_HINT_T0); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); - //_mm_prefetch((char*)(ptr_l + row6), _MM_HINT_T0); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); - //_mm_prefetch((char*)(ptr_l + row6 + cs_l), _MM_HINT_T0); - - //reciprocal_diags = _mm256_loadu_ps((float const *)ones); - - //read first set of 16x16 block of L, where 16 is the blk_height and 16 is the blk_width for L - /*mat_a_cols[0] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[1] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[2] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[3] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[4] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[5] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[6] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[7] = _mm256_loadu_ps((float const *)ptr_l);*/ - - //Shuffle to rearrange/transpose 16x16 block of L into contiguous row-wise registers - //tmpRegs[0] = _mm256_castps256_ps128(mat_a_cols[0]); //zero latency, no instruction added actually. - //mat_a_cols_rearr[0] = _mm256_broadcastss_ps(tmpRegs[0]); - //1st col - mat_a_cols_rearr[0] = _mm256_broadcast_ss((float const *)(ptr_l+0)); - mat_a_cols_rearr[1] = _mm256_broadcast_ss((float const *)(ptr_l+1)); - mat_a_cols_rearr[3] = _mm256_broadcast_ss((float const *)(ptr_l+2)); - mat_a_cols_rearr[6] = _mm256_broadcast_ss((float const *)(ptr_l+3)); - mat_a_cols_rearr[10] = _mm256_broadcast_ss((float const *)(ptr_l+4)); - mat_a_cols_rearr[15] = _mm256_broadcast_ss((float const *)(ptr_l+5)); - mat_a_cols_rearr[21] = _mm256_broadcast_ss((float const *)(ptr_l+6)); - mat_a_cols_rearr[28] = _mm256_broadcast_ss((float const *)(ptr_l+7)); - //2nd col - ptr_l += cs_l; - mat_a_cols_rearr[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_cols_rearr[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_cols_rearr[7] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[11] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[16] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[22] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[29] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //3rd col - ptr_l += cs_l; - mat_a_cols_rearr[5] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_cols_rearr[8] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[12] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[17] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[23] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[30] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //4rth col - ptr_l += cs_l; - mat_a_cols_rearr[9] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[13] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[18] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[24] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[31] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //5th col - ptr_l += cs_l; - mat_a_cols_rearr[14] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[19] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[25] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[32] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //6th col - ptr_l += cs_l; - mat_a_cols_rearr[20] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[26] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[33] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //7th col - ptr_l += cs_l; - mat_a_cols_rearr[27] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[34] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //8th col - //ptr_l += cs_l; - //mat_a_cols_rearr[35] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - numCols_b -= 8; // blk_width = 8 - - //compute reciprocals of L(i,i) and broadcast in registers - //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[20]); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_cols_rearr[27], mat_a_cols_rearr[35]); - - //mat_a_diag_inv[1] = _mm256_permute_ps(mat_a_diag_inv[1], 0x55); - //mat_a_diag_inv[3] = _mm256_permute_ps(mat_a_diag_inv[3], 0x55); - //mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC); - //mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC); - //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x20); - - //reciprocal of diagnol elements - //reciprocal_diags = _mm256_div_ps(reciprocal_diags, mat_a_diag_inv[0]); - - //Start loop for cols of B to be processed in size of blk_width - for (j = 0; j < numCols_b; j += 8) - { - ptr_b_dup = ptr_b; - - /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ - - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //extract diag a00 from a - //mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); - //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - //mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - //extract diag a11 from a - //mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); - //mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - //mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - //mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); - //mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - //mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - //mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); - //mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - //mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - //mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); - //mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - //mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - //mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); - //mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - //mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - //mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); - //mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - //mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - //mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); - //mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - //mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); - mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); -#else - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); - mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); - mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); - mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); - mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); - mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); - mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); - mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - //Read next set of B columns - ptr_b += (cs_b + cs_b_offset[5]); - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); - //end loop of cols - } - - //Last block trsm processing - ptr_b_dup = ptr_b; - - /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ - - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //extract diag a00 from a - //mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); - //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - //mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - //extract diag a11 from a - //mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); - //mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - //mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - //mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); - //mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - //mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - //mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); - //mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - //mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - //mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); - //mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - //mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - //mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); - //mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - //mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - //mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); - //mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - //mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - //mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); - //mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - //mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); - mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); -#else - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); - mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); - mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); - mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); - mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); - mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); - mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); - mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); - //end loop of cols -} - -static void blis_strsm_microkernel(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) -{ - float ones = 1.0; - int j; - int cs_b_offset[6]; - //int row2, row4, row6; - float *ptr_b_dup; - - //70 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[8]; - __m256 mat_a_cols[8]; - __m256 mat_a_cols_rearr[36]; - __m256 mat_a_diag_inv[8]; - __m256 reciprocal_diags; - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - - //reciprocal_diags = _mm256_loadu_ps((float const *)ones); - reciprocal_diags = _mm256_broadcast_ss((float const *)&ones); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //read first set of 16x8 block of B into registers, where 16 is the blk_height and 8 is the blk_width for B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); - //_mm_prefetch((char*)(ptr_l + 0), _MM_HINT_T0); - //row2 = (cs_l << 1); - //row4 = (cs_l << 2); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); - //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); - //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); - //_mm_prefetch((char*)(ptr_l + row2 + cs_l), _MM_HINT_T0); - //row6 = row2 + row4; - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); - //_mm_prefetch((char*)(ptr_l + row4), _MM_HINT_T0); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); - //_mm_prefetch((char*)(ptr_l + row4 + cs_l), _MM_HINT_T0); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); - //_mm_prefetch((char*)(ptr_l + row6), _MM_HINT_T0); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); - //_mm_prefetch((char*)(ptr_l + row6 + cs_l), _MM_HINT_T0); - - //reciprocal_diags = _mm256_loadu_ps((float const *)ones); - - //read first set of 16x16 block of L, where 16 is the blk_height and 16 is the blk_width for L - /*mat_a_cols[0] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[1] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[2] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[3] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[4] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[5] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[6] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[7] = _mm256_loadu_ps((float const *)ptr_l);*/ - - //Shuffle to rearrange/transpose 16x16 block of L into contiguous row-wise registers - //tmpRegs[0] = _mm256_castps256_ps128(mat_a_cols[0]); //zero latency, no instruction added actually. - //mat_a_cols_rearr[0] = _mm256_broadcastss_ps(tmpRegs[0]); - //1st col - mat_a_cols_rearr[0] = _mm256_broadcast_ss((float const *)(ptr_l+0)); - mat_a_cols_rearr[1] = _mm256_broadcast_ss((float const *)(ptr_l+1)); - mat_a_cols_rearr[3] = _mm256_broadcast_ss((float const *)(ptr_l+2)); - mat_a_cols_rearr[6] = _mm256_broadcast_ss((float const *)(ptr_l+3)); - mat_a_cols_rearr[10] = _mm256_broadcast_ss((float const *)(ptr_l+4)); - mat_a_cols_rearr[15] = _mm256_broadcast_ss((float const *)(ptr_l+5)); - mat_a_cols_rearr[21] = _mm256_broadcast_ss((float const *)(ptr_l+6)); - mat_a_cols_rearr[28] = _mm256_broadcast_ss((float const *)(ptr_l+7)); - //2nd col - ptr_l += cs_l; - mat_a_cols_rearr[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_cols_rearr[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_cols_rearr[7] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[11] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[16] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[22] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[29] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //3rd col - ptr_l += cs_l; - mat_a_cols_rearr[5] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_cols_rearr[8] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[12] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[17] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[23] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[30] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //4rth col - ptr_l += cs_l; - mat_a_cols_rearr[9] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[13] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[18] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[24] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[31] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //5th col - ptr_l += cs_l; - mat_a_cols_rearr[14] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[19] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[25] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[32] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //6th col - ptr_l += cs_l; - mat_a_cols_rearr[20] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[26] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[33] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //7th col - ptr_l += cs_l; - mat_a_cols_rearr[27] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[34] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //7th col - ptr_l += cs_l; - mat_a_cols_rearr[35] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - numCols_b -= 8; // blk_width = 8 - - //compute reciprocals of L(i,i) and broadcast in registers - mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); - mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); - mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[20]); - mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_cols_rearr[27], mat_a_cols_rearr[35]); - - //mat_a_diag_inv[1] = _mm256_permute_ps(mat_a_diag_inv[1], 0x55); - //mat_a_diag_inv[3] = _mm256_permute_ps(mat_a_diag_inv[3], 0x55); - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC); - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x20); - - //reciprocal of diagnol elements - reciprocal_diags = _mm256_div_ps(reciprocal_diags, mat_a_diag_inv[0]); - - //Start loop for cols of B to be processed in size of blk_width - for (j = 0; j < numCols_b; j += 8) - { - ptr_b_dup = ptr_b; - - /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ - - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); - mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); -#else - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); - mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); - mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); - mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); - mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); - mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); - mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); - mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - //Read next set of B columns - ptr_b += (cs_b + cs_b_offset[5]); - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); - //end loop of cols - } - - //Last block trsm processing - ptr_b_dup = ptr_b; - - /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ - - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); - mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); -#else - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); - mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); - mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); - mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); - mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); - mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); - mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); - mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); - //end loop of cols -} - -///////////////////////////////////// XA'=B functions //////////////////////////////// - -static void trsm_XAtB_block_allSmallSizedMatrices(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) -{ - float ones = 1.0; - int i, i1, i2, i3, i4, j, k, l; - int cs_b_offset[7]; - int cs_l_offset[7]; - float *ptr_b_dup; - - //57 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[16][8]; - __m256 mat_a_cols_rearr[8]; - __m256 mat_a_blk_elems[64]; - __m256 mat_a_diag_inv[8]; - __m256 reciprocal_diags[2]; - - reciprocal_diags[0] = _mm256_broadcast_ss((float const *)(&ones)); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //L matrix offsets - cs_l_offset[0] = (cs_l << 1); - cs_l_offset[1] = cs_l + cs_l_offset[0]; - cs_l_offset[2] = (cs_l << 2); - cs_l_offset[3] = cs_l + cs_l_offset[2]; - cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; - cs_l_offset[5] = cs_l + cs_l_offset[4]; - cs_l_offset[6] = (cs_l_offset[5] + cs_l); - - //read diag elems of L 16x16 block - mat_a_cols_rearr[0] = _mm256_loadu_ps((float const *)ptr_l); - mat_a_cols_rearr[1] = _mm256_loadu_ps((float const *)ptr_l + cs_l); - mat_a_cols_rearr[2] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[0]); - mat_a_cols_rearr[3] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[1]); - mat_a_cols_rearr[4] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[2]); - mat_a_cols_rearr[5] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[3]); - mat_a_cols_rearr[6] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[4]); - mat_a_cols_rearr[7] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[5]); - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - cs_b_offset[6] = (cs_b_offset[5] + cs_b); - - reciprocal_diags[1] = reciprocal_diags[0]; - - //pack first 8 diags together - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[1], 0xAA);//diag 0,1 - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_cols_rearr[2], mat_a_cols_rearr[3], 0xAA);//diag 2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_cols_rearr[4], mat_a_cols_rearr[5], 0xAA);//diag 4,5 - mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_cols_rearr[6], mat_a_cols_rearr[7], 0xAA);//diag 6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 - - //reciprocal of diagnal elements 0,1,2,3,4,5,6,7 - reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); - - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_diag_inv[0], mat_a_diag_inv[0]); - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); - - - /***************** first set of 8 rows of B processing starts *****************/ - ptr_b_dup = ptr_b; - i = 0; - for (j = 0; j < numCols_b; j += 8) - { - /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A - //read 8x8 block of B into registers - mat_b_rearr[0][0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_col[0] = _mm256_mul_ps(mat_b_rearr[0][0], mat_a_diag_inv[0]); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[1][0]);//d = c - (a*b) - mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[2][0]);//d = c - (a*b) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_col[1] = _mm256_mul_ps(mat_b_rearr[1][0], mat_a_diag_inv[1]); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[2][0]);//d = c - (a*b) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_col[2] = _mm256_mul_ps(mat_b_rearr[2][0], mat_a_diag_inv[2]); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[2], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[2], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[2], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_col[3] = _mm256_mul_ps(mat_b_rearr[3][0], mat_a_diag_inv[3]); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[3], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[3], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[3], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[3], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_col[4] = _mm256_mul_ps(mat_b_rearr[4][0], mat_a_diag_inv[4]); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[4], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[4], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[4], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_col[5] = _mm256_mul_ps(mat_b_rearr[5][0], mat_a_diag_inv[5]); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[5], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[5], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_col[6] = _mm256_mul_ps(mat_b_rearr[6][0], mat_a_diag_inv[6]); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[6], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_col[7] = _mm256_mul_ps(mat_b_rearr[7][0], mat_a_diag_inv[7]); - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); - - //i += cs_b_offset[6]; - //ptr_b_dup += cs_b_offset[6]; - i += 8; - ptr_b_dup += 8; - } - - //c = 0; - /***************** first set of 8 cols of B processing done *****************/ - ptr_b_dup = ptr_b; - i3 = 0; - i1 = 0; - //Start loop for cols of B to be processed in size of blk_width - for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row - { - ptr_l += 8; - //ptr_b += j; - //ptr_b_dup += 8; - ptr_b_dup += cs_b_offset[6]; - i1 += cs_b_offset[6]; - - //Read next 8x8 block of A to get diag elements - i3 += cs_l_offset[6]; - mat_a_cols_rearr[8] = _mm256_loadu_ps((float const *)ptr_l + i3); - mat_a_cols_rearr[9] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l); - mat_a_cols_rearr[10] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[0]); - mat_a_cols_rearr[11] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[1]); - mat_a_cols_rearr[12] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[2]); - mat_a_cols_rearr[13] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[3]); - mat_a_cols_rearr[14] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[4]); - mat_a_cols_rearr[15] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[5]); - - //pack 8 diags of A together - reciprocal_diags[0] = reciprocal_diags[1]; - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_cols_rearr[8], mat_a_cols_rearr[9], 0xAA);//diag 0,1 - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_cols_rearr[10], mat_a_cols_rearr[11], 0xAA);//diag 2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_cols_rearr[12], mat_a_cols_rearr[13], 0xAA);//diag 4,5 - mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[15], 0xAA);//diag 6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 - - //reciprocal of diagnal elements of A :- 0,1,2,3,4,5,6,7 - reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); - - i = 0; - i2 = 0; - for (k = 0; k < numCols_b; k += 8) - { - i = i1 + k; - //Read 8 cols of B columns of Block-to-be-solved - mat_b_rearr[i2][0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[i2][1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[i2][2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[i2][3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[i2][4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[i2][5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[i2][6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[i2][7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - i2++; - } - - i = 0; - i2 = 0; - for (l = 0; l < j; l += 8) // move across m - { - //Broadcast A8,0 to A15,0 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 1)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 2)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 3)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 4)); - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 5)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 6)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 7)); - - //Broadcast A8,2 to A15,2 to registers - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 1)); - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 2)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 3)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 4)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 5)); - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 6)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 7)); - - //Broadcast A8,3 to A15,3 to registers - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i)); - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 1)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 2)); - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 3)); - mat_a_blk_elems[28] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 4)); - mat_a_blk_elems[29] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 5)); - mat_a_blk_elems[30] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 6)); - mat_a_blk_elems[31] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 7)); - - // _mm256_permute2f128_ps() - - //Broadcast A8,4 to A15,4 to registers - mat_a_blk_elems[32] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i)); - mat_a_blk_elems[33] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 1)); - mat_a_blk_elems[34] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 2)); - mat_a_blk_elems[35] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 3)); - mat_a_blk_elems[36] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 4)); - mat_a_blk_elems[37] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 5)); - mat_a_blk_elems[38] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 6)); - mat_a_blk_elems[39] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 7)); - - //Broadcast A8,5 to A15,5 to registers - mat_a_blk_elems[40] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i)); - mat_a_blk_elems[41] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 1)); - mat_a_blk_elems[42] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 2)); - mat_a_blk_elems[43] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 3)); - mat_a_blk_elems[44] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 4)); - mat_a_blk_elems[45] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 5)); - mat_a_blk_elems[46] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 6)); - mat_a_blk_elems[47] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 7)); - - //Broadcast A8,6 to A15,6 to registers - mat_a_blk_elems[48] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i)); - mat_a_blk_elems[49] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 1)); - mat_a_blk_elems[50] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 2)); - mat_a_blk_elems[51] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 3)); - mat_a_blk_elems[52] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 4)); - mat_a_blk_elems[53] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 5)); - mat_a_blk_elems[54] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 6)); - mat_a_blk_elems[55] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 7)); - - //Broadcast A8,7 to A15,7 to registers - mat_a_blk_elems[56] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i)); - mat_a_blk_elems[57] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 1)); - mat_a_blk_elems[58] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 2)); - mat_a_blk_elems[59] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 3)); - mat_a_blk_elems[60] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 4)); - mat_a_blk_elems[61] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 5)); - mat_a_blk_elems[62] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 6)); - mat_a_blk_elems[63] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 7)); - - i += cs_l_offset[6]; - - - for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) - { - /////////////////// Partial Lower 8x8 block trsm of B - - i4 = i2 + k; - //Read current 8 cols of B columns from specified 8x8 current-block of B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); - - i4 = k >> 3; - - //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[1], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[1], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[1], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[2], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[2], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[2], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[2], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[2], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[2], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[3], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[3], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[3], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[3], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[28], mat_b_col[3], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[29], mat_b_col[3], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[30], mat_b_col[3], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[31], mat_b_col[3], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[32], mat_b_col[4], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[33], mat_b_col[4], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[34], mat_b_col[4], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[35], mat_b_col[4], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[36], mat_b_col[4], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[37], mat_b_col[4], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[38], mat_b_col[4], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[39], mat_b_col[4], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[40], mat_b_col[5], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[41], mat_b_col[5], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[42], mat_b_col[5], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[43], mat_b_col[5], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[44], mat_b_col[5], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[45], mat_b_col[5], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[46], mat_b_col[5], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[47], mat_b_col[5], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[48], mat_b_col[6], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[49], mat_b_col[6], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[50], mat_b_col[6], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[51], mat_b_col[6], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[52], mat_b_col[6], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[53], mat_b_col[6], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[54], mat_b_col[6], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[55], mat_b_col[6], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[56], mat_b_col[7], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[57], mat_b_col[7], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[58], mat_b_col[7], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[59], mat_b_col[7], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[60], mat_b_col[7], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[61], mat_b_col[7], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[62], mat_b_col[7], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[63], mat_b_col[7], mat_b_rearr[i4][7]);//d = c - (a*b) - - //end loop of cols - } - i2 += cs_b_offset[6]; - } - - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //mat_a_diag_inv2[0] = _mm256_unpacklo_ps(mat_a_diag_inv2[0], mat_a_diag_inv2[0]); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); - - k = 0; - for (i = 0; i < numCols_b; i+=8) - { - /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[k][0] = _mm256_mul_ps(mat_b_rearr[k][0], mat_a_diag_inv[0]); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[k][1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[k][0], mat_b_rearr[k][1]);//d = c - (a*b) - mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[k][0], mat_b_rearr[k][2]);//d = c - (a*b) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[k][0], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[k][0], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[k][0], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[k][0], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[k][0], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[k][1] = _mm256_mul_ps(mat_b_rearr[k][1], mat_a_diag_inv[1]); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_rearr[k][1], mat_b_rearr[k][2]);//d = c - (a*b) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_rearr[k][1], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_rearr[k][1], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_rearr[k][1], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_rearr[k][1], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_rearr[k][1], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[k][2] = _mm256_mul_ps(mat_b_rearr[k][2], mat_a_diag_inv[2]); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_rearr[k][2], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_rearr[k][2], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_rearr[k][2], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_rearr[k][2], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_rearr[k][2], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[k][3] = _mm256_mul_ps(mat_b_rearr[k][3], mat_a_diag_inv[3]); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_rearr[k][3], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_rearr[k][3], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_rearr[k][3], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_rearr[k][3], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_rearr[k][4] = _mm256_mul_ps(mat_b_rearr[k][4], mat_a_diag_inv[4]); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_rearr[k][4], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_rearr[k][4], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_rearr[k][4], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_rearr[k][5] = _mm256_mul_ps(mat_b_rearr[k][5], mat_a_diag_inv[5]); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_rearr[k][5], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_rearr[k][5], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_rearr[k][6] = _mm256_mul_ps(mat_b_rearr[k][6], mat_a_diag_inv[6]); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_rearr[k][6], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_rearr[k][7] = _mm256_mul_ps(mat_b_rearr[k][7], mat_a_diag_inv[7]); - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - - _mm256_storeu_ps((float *)ptr_b_dup + i, mat_b_rearr[k][0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b) + i), mat_b_rearr[k][1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i), mat_b_rearr[k][2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i), mat_b_rearr[k][3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i), mat_b_rearr[k][4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i), mat_b_rearr[k][5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i), mat_b_rearr[k][6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i), mat_b_rearr[k][7]); - //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); - k++; - } - - - } - ///////////////////loop ends ///////////////////// -} - -static void trsm_XAtB_block_allSmallSizedMatrices_alpha(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alpha) -{ - float ones = 1.0; - int i, i1, i2, i3, i4, j, k, l; - int cs_b_offset[7]; - int cs_l_offset[7]; - float *ptr_b_dup; - - //57 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[16][8]; - __m256 mat_a_cols_rearr[8]; - __m256 mat_a_blk_elems[64]; - __m256 mat_a_diag_inv[8]; - __m256 reciprocal_diags[2]; - __m256 alphaReg; - - reciprocal_diags[0] = _mm256_broadcast_ss((float const *)(&ones)); - alphaReg = _mm256_broadcast_ss((float const *)&alpha); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //L matrix offsets - cs_l_offset[0] = (cs_l << 1); - cs_l_offset[1] = cs_l + cs_l_offset[0]; - cs_l_offset[2] = (cs_l << 2); - cs_l_offset[3] = cs_l + cs_l_offset[2]; - cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; - cs_l_offset[5] = cs_l + cs_l_offset[4]; - cs_l_offset[6] = (cs_l_offset[5] + cs_l); - - //read diag elems of L 16x16 block - mat_a_cols_rearr[0] = _mm256_loadu_ps((float const *)ptr_l); - mat_a_cols_rearr[1] = _mm256_loadu_ps((float const *)ptr_l + cs_l); - mat_a_cols_rearr[2] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[0]); - mat_a_cols_rearr[3] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[1]); - mat_a_cols_rearr[4] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[2]); - mat_a_cols_rearr[5] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[3]); - mat_a_cols_rearr[6] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[4]); - mat_a_cols_rearr[7] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[5]); - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - cs_b_offset[6] = (cs_b_offset[5] + cs_b); - - reciprocal_diags[1] = reciprocal_diags[0]; - - //pack first 8 diags together - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[1], 0xAA);//diag 0,1 - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_cols_rearr[2], mat_a_cols_rearr[3], 0xAA);//diag 2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_cols_rearr[4], mat_a_cols_rearr[5], 0xAA);//diag 4,5 - mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_cols_rearr[6], mat_a_cols_rearr[7], 0xAA);//diag 6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 - - //reciprocal of diagnal elements 0,1,2,3,4,5,6,7 - reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); - - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_diag_inv[0], mat_a_diag_inv[0]); - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); - - - /***************** first set of 8 rows of B processing starts *****************/ - ptr_b_dup = ptr_b; - i = 0; - for (j = 0; j < numCols_b; j += 8) - { - /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A - //read 8x8 block of B into registers - mat_b_rearr[0][0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - mat_b_rearr[0][0] = _mm256_mul_ps(mat_b_rearr[0][0], alphaReg); - mat_b_rearr[1][0] = _mm256_mul_ps(mat_b_rearr[1][0], alphaReg); - mat_b_rearr[2][0] = _mm256_mul_ps(mat_b_rearr[2][0], alphaReg); - mat_b_rearr[3][0] = _mm256_mul_ps(mat_b_rearr[3][0], alphaReg); - mat_b_rearr[4][0] = _mm256_mul_ps(mat_b_rearr[4][0], alphaReg); - mat_b_rearr[5][0] = _mm256_mul_ps(mat_b_rearr[5][0], alphaReg); - mat_b_rearr[6][0] = _mm256_mul_ps(mat_b_rearr[6][0], alphaReg); - mat_b_rearr[7][0] = _mm256_mul_ps(mat_b_rearr[7][0], alphaReg); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_col[0] = _mm256_mul_ps(mat_b_rearr[0][0], mat_a_diag_inv[0]); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[1][0]);//d = c - (a*b) - mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[2][0]);//d = c - (a*b) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_col[1] = _mm256_mul_ps(mat_b_rearr[1][0], mat_a_diag_inv[1]); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[2][0]);//d = c - (a*b) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_col[2] = _mm256_mul_ps(mat_b_rearr[2][0], mat_a_diag_inv[2]); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[2], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[2], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[2], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_col[3] = _mm256_mul_ps(mat_b_rearr[3][0], mat_a_diag_inv[3]); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[3], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[3], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[3], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[3], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_col[4] = _mm256_mul_ps(mat_b_rearr[4][0], mat_a_diag_inv[4]); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[4], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[4], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[4], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_col[5] = _mm256_mul_ps(mat_b_rearr[5][0], mat_a_diag_inv[5]); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[5], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[5], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_col[6] = _mm256_mul_ps(mat_b_rearr[6][0], mat_a_diag_inv[6]); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[6], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_col[7] = _mm256_mul_ps(mat_b_rearr[7][0], mat_a_diag_inv[7]); - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); - - //i += cs_b_offset[6]; - //ptr_b_dup += cs_b_offset[6]; - i += 8; - ptr_b_dup += 8; - } - - //c = 0; - /***************** first set of 8 cols of B processing done *****************/ - ptr_b_dup = ptr_b; - i3 = 0; - i1 = 0; - //Start loop for cols of B to be processed in size of blk_width - for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row - { - ptr_l += 8; - //ptr_b += j; - //ptr_b_dup += 8; - ptr_b_dup += cs_b_offset[6]; - i1 += cs_b_offset[6]; - - //Read next 8x8 block of A to get diag elements - i3 += cs_l_offset[6]; - mat_a_cols_rearr[8] = _mm256_loadu_ps((float const *)ptr_l + i3); - mat_a_cols_rearr[9] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l); - mat_a_cols_rearr[10] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[0]); - mat_a_cols_rearr[11] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[1]); - mat_a_cols_rearr[12] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[2]); - mat_a_cols_rearr[13] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[3]); - mat_a_cols_rearr[14] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[4]); - mat_a_cols_rearr[15] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[5]); - - //pack 8 diags of A together - reciprocal_diags[0] = reciprocal_diags[1]; - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_cols_rearr[8], mat_a_cols_rearr[9], 0xAA);//diag 0,1 - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_cols_rearr[10], mat_a_cols_rearr[11], 0xAA);//diag 2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_cols_rearr[12], mat_a_cols_rearr[13], 0xAA);//diag 4,5 - mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[15], 0xAA);//diag 6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 - - //reciprocal of diagnal elements of A :- 0,1,2,3,4,5,6,7 - reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); - - i = 0; - i2 = 0; - for (k = 0; k < numCols_b; k += 8) - { - i = i1 + k; - //Read 8 cols of B columns of Block-to-be-solved - mat_b_rearr[i2][0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[i2][1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[i2][2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[i2][3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[i2][4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[i2][5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[i2][6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[i2][7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - mat_b_rearr[i2][0] = _mm256_mul_ps(mat_b_rearr[i2][0], alphaReg); - mat_b_rearr[i2][1] = _mm256_mul_ps(mat_b_rearr[i2][1], alphaReg); - mat_b_rearr[i2][2] = _mm256_mul_ps(mat_b_rearr[i2][2], alphaReg); - mat_b_rearr[i2][3] = _mm256_mul_ps(mat_b_rearr[i2][3], alphaReg); - mat_b_rearr[i2][4] = _mm256_mul_ps(mat_b_rearr[i2][4], alphaReg); - mat_b_rearr[i2][5] = _mm256_mul_ps(mat_b_rearr[i2][5], alphaReg); - mat_b_rearr[i2][6] = _mm256_mul_ps(mat_b_rearr[i2][6], alphaReg); - mat_b_rearr[i2][7] = _mm256_mul_ps(mat_b_rearr[i2][7], alphaReg); - - i2++; - } - - i = 0; - i2 = 0; - for (l = 0; l < j; l += 8) // move across m - { - //Broadcast A8,0 to A15,0 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 1)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 2)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 3)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 4)); - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 5)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 6)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 7)); - - //Broadcast A8,2 to A15,2 to registers - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 1)); - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 2)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 3)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 4)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 5)); - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 6)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 7)); - - //Broadcast A8,3 to A15,3 to registers - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i)); - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 1)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 2)); - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 3)); - mat_a_blk_elems[28] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 4)); - mat_a_blk_elems[29] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 5)); - mat_a_blk_elems[30] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 6)); - mat_a_blk_elems[31] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 7)); - - // _mm256_permute2f128_ps() - - //Broadcast A8,4 to A15,4 to registers - mat_a_blk_elems[32] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i)); - mat_a_blk_elems[33] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 1)); - mat_a_blk_elems[34] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 2)); - mat_a_blk_elems[35] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 3)); - mat_a_blk_elems[36] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 4)); - mat_a_blk_elems[37] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 5)); - mat_a_blk_elems[38] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 6)); - mat_a_blk_elems[39] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 7)); - - //Broadcast A8,5 to A15,5 to registers - mat_a_blk_elems[40] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i)); - mat_a_blk_elems[41] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 1)); - mat_a_blk_elems[42] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 2)); - mat_a_blk_elems[43] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 3)); - mat_a_blk_elems[44] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 4)); - mat_a_blk_elems[45] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 5)); - mat_a_blk_elems[46] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 6)); - mat_a_blk_elems[47] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 7)); - - //Broadcast A8,6 to A15,6 to registers - mat_a_blk_elems[48] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i)); - mat_a_blk_elems[49] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 1)); - mat_a_blk_elems[50] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 2)); - mat_a_blk_elems[51] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 3)); - mat_a_blk_elems[52] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 4)); - mat_a_blk_elems[53] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 5)); - mat_a_blk_elems[54] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 6)); - mat_a_blk_elems[55] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 7)); - - //Broadcast A8,7 to A15,7 to registers - mat_a_blk_elems[56] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i)); - mat_a_blk_elems[57] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 1)); - mat_a_blk_elems[58] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 2)); - mat_a_blk_elems[59] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 3)); - mat_a_blk_elems[60] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 4)); - mat_a_blk_elems[61] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 5)); - mat_a_blk_elems[62] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 6)); - mat_a_blk_elems[63] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 7)); - - i += cs_l_offset[6]; - - - for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) - { - /////////////////// Partial Lower 8x8 block trsm of B - - i4 = i2 + k; - //Read current 8 cols of B columns from specified 8x8 current-block of B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); - - i4 = k >> 3; - - //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[1], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[1], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[1], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[2], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[2], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[2], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[2], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[2], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[2], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[3], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[3], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[3], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[3], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[28], mat_b_col[3], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[29], mat_b_col[3], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[30], mat_b_col[3], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[31], mat_b_col[3], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[32], mat_b_col[4], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[33], mat_b_col[4], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[34], mat_b_col[4], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[35], mat_b_col[4], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[36], mat_b_col[4], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[37], mat_b_col[4], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[38], mat_b_col[4], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[39], mat_b_col[4], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[40], mat_b_col[5], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[41], mat_b_col[5], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[42], mat_b_col[5], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[43], mat_b_col[5], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[44], mat_b_col[5], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[45], mat_b_col[5], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[46], mat_b_col[5], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[47], mat_b_col[5], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[48], mat_b_col[6], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[49], mat_b_col[6], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[50], mat_b_col[6], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[51], mat_b_col[6], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[52], mat_b_col[6], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[53], mat_b_col[6], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[54], mat_b_col[6], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[55], mat_b_col[6], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[56], mat_b_col[7], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[57], mat_b_col[7], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[58], mat_b_col[7], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[59], mat_b_col[7], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[60], mat_b_col[7], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[61], mat_b_col[7], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[62], mat_b_col[7], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[63], mat_b_col[7], mat_b_rearr[i4][7]);//d = c - (a*b) - - //end loop of cols - } - i2 += cs_b_offset[6]; - } - - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //mat_a_diag_inv2[0] = _mm256_unpacklo_ps(mat_a_diag_inv2[0], mat_a_diag_inv2[0]); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); - - k = 0; - for (i = 0; i < numCols_b; i+=8) - { - /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[k][0] = _mm256_mul_ps(mat_b_rearr[k][0], mat_a_diag_inv[0]); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[k][1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[k][0], mat_b_rearr[k][1]);//d = c - (a*b) - mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[k][0], mat_b_rearr[k][2]);//d = c - (a*b) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[k][0], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[k][0], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[k][0], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[k][0], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[k][0], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[k][1] = _mm256_mul_ps(mat_b_rearr[k][1], mat_a_diag_inv[1]); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_rearr[k][1], mat_b_rearr[k][2]);//d = c - (a*b) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_rearr[k][1], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_rearr[k][1], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_rearr[k][1], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_rearr[k][1], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_rearr[k][1], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[k][2] = _mm256_mul_ps(mat_b_rearr[k][2], mat_a_diag_inv[2]); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_rearr[k][2], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_rearr[k][2], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_rearr[k][2], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_rearr[k][2], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_rearr[k][2], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[k][3] = _mm256_mul_ps(mat_b_rearr[k][3], mat_a_diag_inv[3]); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_rearr[k][3], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_rearr[k][3], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_rearr[k][3], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_rearr[k][3], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_rearr[k][4] = _mm256_mul_ps(mat_b_rearr[k][4], mat_a_diag_inv[4]); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_rearr[k][4], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_rearr[k][4], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_rearr[k][4], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_rearr[k][5] = _mm256_mul_ps(mat_b_rearr[k][5], mat_a_diag_inv[5]); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_rearr[k][5], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_rearr[k][5], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_rearr[k][6] = _mm256_mul_ps(mat_b_rearr[k][6], mat_a_diag_inv[6]); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_rearr[k][6], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_rearr[k][7] = _mm256_mul_ps(mat_b_rearr[k][7], mat_a_diag_inv[7]); - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - - _mm256_storeu_ps((float *)ptr_b_dup + i, mat_b_rearr[k][0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b) + i), mat_b_rearr[k][1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i), mat_b_rearr[k][2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i), mat_b_rearr[k][3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i), mat_b_rearr[k][4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i), mat_b_rearr[k][5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i), mat_b_rearr[k][6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i), mat_b_rearr[k][7]); - //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); - k++; - } - - - } - ///////////////////loop ends ///////////////////// -} - -static void trsm_XAtB_block_allSmallSizedMatrices_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) -{ - //float ones = 1.0; - int i, i1, i2, i3, i4, j, k, l; - int cs_b_offset[7]; - int cs_l_offset[7]; - float *ptr_b_dup; - - //57 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[16][8]; - //__m256 mat_a_cols_rearr[8]; - __m256 mat_a_blk_elems[64]; - //__m256 mat_a_diag_inv[8]; - //__m256 reciprocal_diags[2]; - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //L matrix offsets - cs_l_offset[0] = (cs_l << 1); - cs_l_offset[1] = cs_l + cs_l_offset[0]; - cs_l_offset[2] = (cs_l << 2); - cs_l_offset[3] = cs_l + cs_l_offset[2]; - cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; - cs_l_offset[5] = cs_l + cs_l_offset[4]; - cs_l_offset[6] = (cs_l_offset[5] + cs_l); - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - cs_b_offset[6] = (cs_b_offset[5] + cs_b); - - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); - - - /***************** first set of 8 rows of B processing starts *****************/ - ptr_b_dup = ptr_b; - i = 0; - for (j = 0; j < numCols_b; j += 8) - { - /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A - //read 8x8 block of B into registers - mat_b_rearr[0][0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - //(Row0) - mat_b_col[0] = mat_b_rearr[0][0]; - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[1][0]);//d = c - (a*b) - mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[2][0]);//d = c - (a*b) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[2][0]);//d = c - (a*b) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[2], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[2], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[2], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[3], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[3], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[3], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[3], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[4], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[4], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[4], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[5], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[5], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[6], mat_b_rearr[7][0]);//d = c - (a*b) - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); - - //i += cs_b_offset[6]; - //ptr_b_dup += cs_b_offset[6]; - i += 8; - ptr_b_dup += 8; - } - - //c = 0; - /***************** first set of 8 cols of B processing done *****************/ - ptr_b_dup = ptr_b; - i3 = 0; - i1 = 0; - //Start loop for cols of B to be processed in size of blk_width - for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row - { - ptr_l += 8; - //ptr_b += j; - //ptr_b_dup += 8; - ptr_b_dup += cs_b_offset[6]; - i1 += cs_b_offset[6]; - i3 += cs_l_offset[6]; - - i = 0; - i2 = 0; - for (k = 0; k < numCols_b; k += 8) - { - i = i1 + k; - //Read 8 cols of B columns of Block-to-be-solved - mat_b_rearr[i2][0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[i2][1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[i2][2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[i2][3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[i2][4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[i2][5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[i2][6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[i2][7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - i2++; - } - - i = 0; - i2 = 0; - for (l = 0; l < j; l += 8) // move across m - { - //Broadcast A8,0 to A15,0 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 1)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 2)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 3)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 4)); - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 5)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 6)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 7)); - - //Broadcast A8,2 to A15,2 to registers - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 1)); - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 2)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 3)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 4)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 5)); - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 6)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 7)); - - //Broadcast A8,3 to A15,3 to registers - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i)); - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 1)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 2)); - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 3)); - mat_a_blk_elems[28] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 4)); - mat_a_blk_elems[29] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 5)); - mat_a_blk_elems[30] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 6)); - mat_a_blk_elems[31] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 7)); - - // _mm256_permute2f128_ps() - - //Broadcast A8,4 to A15,4 to registers - mat_a_blk_elems[32] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i)); - mat_a_blk_elems[33] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 1)); - mat_a_blk_elems[34] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 2)); - mat_a_blk_elems[35] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 3)); - mat_a_blk_elems[36] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 4)); - mat_a_blk_elems[37] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 5)); - mat_a_blk_elems[38] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 6)); - mat_a_blk_elems[39] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 7)); - - //Broadcast A8,5 to A15,5 to registers - mat_a_blk_elems[40] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i)); - mat_a_blk_elems[41] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 1)); - mat_a_blk_elems[42] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 2)); - mat_a_blk_elems[43] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 3)); - mat_a_blk_elems[44] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 4)); - mat_a_blk_elems[45] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 5)); - mat_a_blk_elems[46] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 6)); - mat_a_blk_elems[47] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 7)); - - //Broadcast A8,6 to A15,6 to registers - mat_a_blk_elems[48] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i)); - mat_a_blk_elems[49] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 1)); - mat_a_blk_elems[50] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 2)); - mat_a_blk_elems[51] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 3)); - mat_a_blk_elems[52] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 4)); - mat_a_blk_elems[53] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 5)); - mat_a_blk_elems[54] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 6)); - mat_a_blk_elems[55] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 7)); - - //Broadcast A8,7 to A15,7 to registers - mat_a_blk_elems[56] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i)); - mat_a_blk_elems[57] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 1)); - mat_a_blk_elems[58] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 2)); - mat_a_blk_elems[59] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 3)); - mat_a_blk_elems[60] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 4)); - mat_a_blk_elems[61] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 5)); - mat_a_blk_elems[62] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 6)); - mat_a_blk_elems[63] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 7)); - - i += cs_l_offset[6]; - - for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) - { - /////////////////// Partial Lower 8x8 block trsm of B - - i4 = i2 + k; - //Read current 8 cols of B columns from specified 8x8 current-block of B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); - - i4 = k >> 3; - - //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[1], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[1], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[1], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[2], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[2], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[2], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[2], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[2], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[2], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[3], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[3], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[3], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[3], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[28], mat_b_col[3], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[29], mat_b_col[3], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[30], mat_b_col[3], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[31], mat_b_col[3], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[32], mat_b_col[4], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[33], mat_b_col[4], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[34], mat_b_col[4], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[35], mat_b_col[4], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[36], mat_b_col[4], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[37], mat_b_col[4], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[38], mat_b_col[4], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[39], mat_b_col[4], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[40], mat_b_col[5], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[41], mat_b_col[5], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[42], mat_b_col[5], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[43], mat_b_col[5], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[44], mat_b_col[5], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[45], mat_b_col[5], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[46], mat_b_col[5], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[47], mat_b_col[5], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[48], mat_b_col[6], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[49], mat_b_col[6], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[50], mat_b_col[6], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[51], mat_b_col[6], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[52], mat_b_col[6], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[53], mat_b_col[6], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[54], mat_b_col[6], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[55], mat_b_col[6], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[56], mat_b_col[7], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[57], mat_b_col[7], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[58], mat_b_col[7], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[59], mat_b_col[7], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[60], mat_b_col[7], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[61], mat_b_col[7], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[62], mat_b_col[7], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[63], mat_b_col[7], mat_b_rearr[i4][7]);//d = c - (a*b) - - //end loop of cols - } - i2 += cs_b_offset[6]; - } - - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - - k = 0; - for (i = 0; i < numCols_b; i+=8) - { - /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A - - //(Row0): already done - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[k][1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[k][0], mat_b_rearr[k][1]);//d = c - (a*b) - mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[k][0], mat_b_rearr[k][2]);//d = c - (a*b) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[k][0], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[k][0], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[k][0], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[k][0], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[k][0], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_rearr[k][1], mat_b_rearr[k][2]);//d = c - (a*b) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_rearr[k][1], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_rearr[k][1], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_rearr[k][1], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_rearr[k][1], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_rearr[k][1], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_rearr[k][2], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_rearr[k][2], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_rearr[k][2], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_rearr[k][2], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_rearr[k][2], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_rearr[k][3], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_rearr[k][3], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_rearr[k][3], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_rearr[k][3], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_rearr[k][4], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_rearr[k][4], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_rearr[k][4], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_rearr[k][5], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_rearr[k][5], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_rearr[k][6], mat_b_rearr[k][7]);//d = c - (a*b) - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - - _mm256_storeu_ps((float *)ptr_b_dup + i, mat_b_rearr[k][0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b) + i), mat_b_rearr[k][1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i), mat_b_rearr[k][2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i), mat_b_rearr[k][3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i), mat_b_rearr[k][4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i), mat_b_rearr[k][5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i), mat_b_rearr[k][6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i), mat_b_rearr[k][7]); - //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); - k++; - } - - - } - ///////////////////loop ends ///////////////////// -} - -static void trsm_XAtB_block_allSmallSizedMatrices_alpha_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alpha) -{ - //float ones = 1.0; - int i, i1, i2, i3, i4, j, k, l; - int cs_b_offset[7]; - int cs_l_offset[7]; - float *ptr_b_dup; - - //57 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[16][8]; - //__m256 mat_a_cols_rearr[8]; - __m256 mat_a_blk_elems[64]; - //__m256 mat_a_diag_inv[8]; - //__m256 reciprocal_diags[2]; - __m256 alphaReg; - alphaReg = _mm256_broadcast_ss((float const *)&alpha); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //L matrix offsets - cs_l_offset[0] = (cs_l << 1); - cs_l_offset[1] = cs_l + cs_l_offset[0]; - cs_l_offset[2] = (cs_l << 2); - cs_l_offset[3] = cs_l + cs_l_offset[2]; - cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; - cs_l_offset[5] = cs_l + cs_l_offset[4]; - cs_l_offset[6] = (cs_l_offset[5] + cs_l); - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - cs_b_offset[6] = (cs_b_offset[5] + cs_b); - - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); - - - /***************** first set of 8 rows of B processing starts *****************/ - ptr_b_dup = ptr_b; - i = 0; - for (j = 0; j < numCols_b; j += 8) - { - /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A - //read 8x8 block of B into registers - mat_b_rearr[0][0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - mat_b_rearr[0][0] = _mm256_mul_ps(mat_b_rearr[0][0], alphaReg); - mat_b_rearr[1][0] = _mm256_mul_ps(mat_b_rearr[1][0], alphaReg); - mat_b_rearr[2][0] = _mm256_mul_ps(mat_b_rearr[2][0], alphaReg); - mat_b_rearr[3][0] = _mm256_mul_ps(mat_b_rearr[3][0], alphaReg); - mat_b_rearr[4][0] = _mm256_mul_ps(mat_b_rearr[4][0], alphaReg); - mat_b_rearr[5][0] = _mm256_mul_ps(mat_b_rearr[5][0], alphaReg); - mat_b_rearr[6][0] = _mm256_mul_ps(mat_b_rearr[6][0], alphaReg); - mat_b_rearr[7][0] = _mm256_mul_ps(mat_b_rearr[7][0], alphaReg); - - //(Row0) - mat_b_col[0] = mat_b_rearr[0][0]; - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[1][0]);//d = c - (a*b) - mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[2][0]);//d = c - (a*b) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[2][0]);//d = c - (a*b) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[2], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[2], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[2], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[3], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[3], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[3], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[3], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[4], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[4], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[4], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[5], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[5], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[6], mat_b_rearr[7][0]);//d = c - (a*b) - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); - - //i += cs_b_offset[6]; - //ptr_b_dup += cs_b_offset[6]; - i += 8; - ptr_b_dup += 8; - } - - //c = 0; - /***************** first set of 8 cols of B processing done *****************/ - ptr_b_dup = ptr_b; - i3 = 0; - i1 = 0; - //Start loop for cols of B to be processed in size of blk_width - for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row - { - ptr_l += 8; - //ptr_b += j; - //ptr_b_dup += 8; - ptr_b_dup += cs_b_offset[6]; - i1 += cs_b_offset[6]; - i3 += cs_l_offset[6]; - - i = 0; - i2 = 0; - for (k = 0; k < numCols_b; k += 8) - { - i = i1 + k; - //Read 8 cols of B columns of Block-to-be-solved - mat_b_rearr[i2][0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[i2][1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[i2][2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[i2][3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[i2][4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[i2][5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[i2][6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[i2][7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - mat_b_rearr[i2][0] = _mm256_mul_ps(mat_b_rearr[i2][0], alphaReg); - mat_b_rearr[i2][1] = _mm256_mul_ps(mat_b_rearr[i2][1], alphaReg); - mat_b_rearr[i2][2] = _mm256_mul_ps(mat_b_rearr[i2][2], alphaReg); - mat_b_rearr[i2][3] = _mm256_mul_ps(mat_b_rearr[i2][3], alphaReg); - mat_b_rearr[i2][4] = _mm256_mul_ps(mat_b_rearr[i2][4], alphaReg); - mat_b_rearr[i2][5] = _mm256_mul_ps(mat_b_rearr[i2][5], alphaReg); - mat_b_rearr[i2][6] = _mm256_mul_ps(mat_b_rearr[i2][6], alphaReg); - mat_b_rearr[i2][7] = _mm256_mul_ps(mat_b_rearr[i2][7], alphaReg); - - i2++; - } - - i = 0; - i2 = 0; - for (l = 0; l < j; l += 8) // move across m - { - //Broadcast A8,0 to A15,0 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 1)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 2)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 3)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 4)); - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 5)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 6)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 7)); - - //Broadcast A8,2 to A15,2 to registers - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 1)); - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 2)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 3)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 4)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 5)); - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 6)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 7)); - - //Broadcast A8,3 to A15,3 to registers - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i)); - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 1)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 2)); - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 3)); - mat_a_blk_elems[28] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 4)); - mat_a_blk_elems[29] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 5)); - mat_a_blk_elems[30] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 6)); - mat_a_blk_elems[31] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 7)); - - // _mm256_permute2f128_ps() - - //Broadcast A8,4 to A15,4 to registers - mat_a_blk_elems[32] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i)); - mat_a_blk_elems[33] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 1)); - mat_a_blk_elems[34] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 2)); - mat_a_blk_elems[35] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 3)); - mat_a_blk_elems[36] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 4)); - mat_a_blk_elems[37] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 5)); - mat_a_blk_elems[38] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 6)); - mat_a_blk_elems[39] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 7)); - - //Broadcast A8,5 to A15,5 to registers - mat_a_blk_elems[40] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i)); - mat_a_blk_elems[41] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 1)); - mat_a_blk_elems[42] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 2)); - mat_a_blk_elems[43] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 3)); - mat_a_blk_elems[44] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 4)); - mat_a_blk_elems[45] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 5)); - mat_a_blk_elems[46] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 6)); - mat_a_blk_elems[47] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 7)); - - //Broadcast A8,6 to A15,6 to registers - mat_a_blk_elems[48] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i)); - mat_a_blk_elems[49] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 1)); - mat_a_blk_elems[50] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 2)); - mat_a_blk_elems[51] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 3)); - mat_a_blk_elems[52] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 4)); - mat_a_blk_elems[53] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 5)); - mat_a_blk_elems[54] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 6)); - mat_a_blk_elems[55] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 7)); - - //Broadcast A8,7 to A15,7 to registers - mat_a_blk_elems[56] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i)); - mat_a_blk_elems[57] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 1)); - mat_a_blk_elems[58] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 2)); - mat_a_blk_elems[59] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 3)); - mat_a_blk_elems[60] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 4)); - mat_a_blk_elems[61] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 5)); - mat_a_blk_elems[62] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 6)); - mat_a_blk_elems[63] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 7)); - - i += cs_l_offset[6]; - - for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) - { - /////////////////// Partial Lower 8x8 block trsm of B - - i4 = i2 + k; - //Read current 8 cols of B columns from specified 8x8 current-block of B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); - - i4 = k >> 3; - - //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[1], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[1], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[1], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[2], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[2], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[2], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[2], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[2], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[2], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[3], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[3], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[3], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[3], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[28], mat_b_col[3], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[29], mat_b_col[3], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[30], mat_b_col[3], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[31], mat_b_col[3], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[32], mat_b_col[4], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[33], mat_b_col[4], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[34], mat_b_col[4], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[35], mat_b_col[4], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[36], mat_b_col[4], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[37], mat_b_col[4], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[38], mat_b_col[4], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[39], mat_b_col[4], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[40], mat_b_col[5], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[41], mat_b_col[5], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[42], mat_b_col[5], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[43], mat_b_col[5], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[44], mat_b_col[5], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[45], mat_b_col[5], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[46], mat_b_col[5], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[47], mat_b_col[5], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[48], mat_b_col[6], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[49], mat_b_col[6], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[50], mat_b_col[6], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[51], mat_b_col[6], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[52], mat_b_col[6], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[53], mat_b_col[6], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[54], mat_b_col[6], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[55], mat_b_col[6], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[56], mat_b_col[7], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[57], mat_b_col[7], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[58], mat_b_col[7], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[59], mat_b_col[7], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[60], mat_b_col[7], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[61], mat_b_col[7], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[62], mat_b_col[7], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[63], mat_b_col[7], mat_b_rearr[i4][7]);//d = c - (a*b) - - //end loop of cols - } - i2 += cs_b_offset[6]; - } - - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - - k = 0; - for (i = 0; i < numCols_b; i+=8) - { - /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A - - //(Row0): already done - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[k][1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[k][0], mat_b_rearr[k][1]);//d = c - (a*b) - mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[k][0], mat_b_rearr[k][2]);//d = c - (a*b) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[k][0], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[k][0], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[k][0], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[k][0], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[k][0], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_rearr[k][1], mat_b_rearr[k][2]);//d = c - (a*b) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_rearr[k][1], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_rearr[k][1], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_rearr[k][1], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_rearr[k][1], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_rearr[k][1], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_rearr[k][2], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_rearr[k][2], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_rearr[k][2], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_rearr[k][2], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_rearr[k][2], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_rearr[k][3], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_rearr[k][3], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_rearr[k][3], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_rearr[k][3], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_rearr[k][4], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_rearr[k][4], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_rearr[k][4], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_rearr[k][5], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_rearr[k][5], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_rearr[k][6], mat_b_rearr[k][7]);//d = c - (a*b) - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - - _mm256_storeu_ps((float *)ptr_b_dup + i, mat_b_rearr[k][0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b) + i), mat_b_rearr[k][1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i), mat_b_rearr[k][2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i), mat_b_rearr[k][3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i), mat_b_rearr[k][4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i), mat_b_rearr[k][5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i), mat_b_rearr[k][6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i), mat_b_rearr[k][7]); - //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); - k++; - } - - - } - ///////////////////loop ends ///////////////////// -} - - -#endif - ->>>>>>> small matrix trsm intrinsics optimization code for AX=B and XA'=B From d805fdf169f4b0fc3f39adc699ea21354e312a08 Mon Sep 17 00:00:00 2001 From: Kiran V Date: Thu, 4 Oct 2018 16:32:21 +0530 Subject: [PATCH 091/109] This is a fix to floating-point exception error for BLIS SGEMM with larger matrix sizes. BUG No: CPUPL-197 fixed by Thangaraj Santanu The bli_clock_min_diff() function in BLIS assumed that if the time taken is greater than 1 hour then the reading must be wrong. However this is not the case in general, while the other checks such as time taken closer to zero or nsec is ofcourse valid. gerrit review: http://git.amd.com:8080/#/c/118694/1/frame/base/bli_clock.c Change-Id: I9dc313d7c5fdc20684f67a516bf3237de3e0694a --- frame/base/bli_clock.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frame/base/bli_clock.c b/frame/base/bli_clock.c index a4df37e16..35f3361ef 100644 --- a/frame/base/bli_clock.c +++ b/frame/base/bli_clock.c @@ -59,6 +59,12 @@ double bli_clock_min_diff( double time_min, double time_start ) // - under a nanosecond // is actually garbled due to the clocks being taken too closely together. if ( time_min <= 0.0 ) time_min = time_min_prev; +<<<<<<< HEAD +======= + // To genuinely measure time for an application taking more than an hour, the below + // line is commented. If wrongly measuring higher time we could always use previous_min. + /* else if ( time_min > 3600.0 ) time_min = time_min_prev; */ +>>>>>>> This is a fix to floating-point exception error for BLIS SGEMM with larger matrix sizes. else if ( time_min < 1.0e-9 ) time_min = time_min_prev; return time_min; From 1720efe6309ee92203ab69d378f4e0566d393e70 Mon Sep 17 00:00:00 2001 From: pradeeptrgit Date: Tue, 23 Oct 2018 09:36:23 +0530 Subject: [PATCH 092/109] Update version number to 1.2 Change-Id: Ibb31f6683cdecca6b218bc2f0c14701d7e92ebf3 --- so_version | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/so_version b/so_version index f851fd84b..15d6c7665 100644 --- a/so_version +++ b/so_version @@ -1,2 +1,2 @@ -2 -0.0 +1 +2.0 From 2752b51c37022b7d2ed13450bd6adee052947a50 Mon Sep 17 00:00:00 2001 From: sraut Date: Tue, 18 Dec 2018 14:39:16 +0530 Subject: [PATCH 093/109] Fix on EPYC machine for multi instance performance issue, Issue: For the default values of mc, kc and nc with multi instance mode the performance across the cores dip drastically. Fix: After experimentation found different set of values (mc, kc and nc) which fits in the cache size, and performance across the remains same across all the cores. Change-Id: I98265e3b7e61cd7602a0cc5596240e86c08c03fe --- config/zen/bli_cntx_init_zen.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/config/zen/bli_cntx_init_zen.c b/config/zen/bli_cntx_init_zen.c index ca590e16a..b7ce799af 100644 --- a/config/zen/bli_cntx_init_zen.c +++ b/config/zen/bli_cntx_init_zen.c @@ -117,6 +117,7 @@ void bli_cntx_init_zen( cntx_t* cntx ) bli_blksz_init_easy( &blkszs[ BLIS_NR ], 16, 8, 8, 4 ); /* +<<<<<<< HEAD Multi Instance performance improvement of DGEMM when binded to a CCX In Multi instance each thread runs a sequential DGEMM. @@ -127,11 +128,27 @@ void bli_cntx_init_zen( cntx_t* cntx ) has better performance on EPYC server, over the default block sizes. b) If BLIS is run in Single Instance mode +======= + Multi Instance performance degradation on different cores + a) CPU freq 2.6 Ghz + DDR4 2400 + Multi instance mode + mc = 240, kc = 512, and nc = 2040 + + b) CPU freq 2.4Ghz + DDR4 2400 + Multi Instance mode + either + mc = 240, kc = 512 and nc = 2040 + (or) + mc = 390, kc = 512 and nc = 4080 + + c) Higher frequency(3.1Ghz), single instance mode choose default value +>>>>>>> Fix on EPYC machine for multi instance performance issue, mc = 510, kc = 1024 and nc = 4080 */ - // Zen optmized level 3 cache block sizes #ifdef BLIS_ENABLE_ZEN_BLOCK_SIZES #if BLIS_ENABLE_SINGLE_INSTANCE_BLOCK_SIZES @@ -152,9 +169,9 @@ void bli_cntx_init_zen( cntx_t* cntx ) bli_blksz_init_easy( &blkszs[ BLIS_NC ], 4080, 4080, 4080, 4080 ); #endif - bli_blksz_init_easy( &blkszs[ BLIS_NC ], 4080, 4080, 4080, 4080 ); - bli_blksz_init_easy( &blkszs[ BLIS_AF ], 8, 8, 8, 8 ); - bli_blksz_init_easy( &blkszs[ BLIS_DF ], 8, 8, 8, 8 ); + bli_blksz_init_easy( &blkszs[ BLIS_NC ], 4080, 2040, 4080, 4080 ); + bli_blksz_init_easy( &blkszs[ BLIS_AF ], 8, 8, -1, -1 ); + bli_blksz_init_easy( &blkszs[ BLIS_DF ], 8, 8, -1, -1 ); // Update the context with the current architecture's register and cache // blocksizes (and multiples) for native execution. From d6bb56d088c0e881ea733120c349d06fe124cd0d Mon Sep 17 00:00:00 2001 From: sraut Date: Wed, 19 Dec 2018 21:21:10 +0530 Subject: [PATCH 094/109] Fixed BLAS test failures of small matrix SYRK for single and double precision. Details: - SYRK for small matrix was implemented by reusing small GEMM routine. This was resulting in output written to the full C matrix, and C being symmetric the lower and upper triangles of C matrix contained same results. BLAS SYRK API spec demands either lower or upper triangle of C matrix to be written with results. So, this was resulting in BLAS test failures, even though testsuite of BLIS was passing small SYRK operation. - To fix BLAS test failures of small matrix SYRK, separate kernel routines are implemented for small SYRK for both single and double precision. The newly added small SYRK routines are in file kernels/zen/3/bli_syrk_small.c. Now the intermediate results of matrix C are written to a scratch buffer. Final results are written from scratch buffer to matrix C using SIMD copy to either lower or upper traingle part of matrix C. - Source and header files frame/3/syrk/bli_syrk_front.c and frame/3/syrk/bli_syrk_front.h are changed to invoke new small SYRK routines. Change-Id: I9cfb1116c93d150aefac673fca033952ecac97cb --- config/zen/bli_cntx_init_zen.c | 1 - frame/3/syrk/bli_syrk_front.h | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/config/zen/bli_cntx_init_zen.c b/config/zen/bli_cntx_init_zen.c index b7ce799af..59385af14 100644 --- a/config/zen/bli_cntx_init_zen.c +++ b/config/zen/bli_cntx_init_zen.c @@ -157,7 +157,6 @@ void bli_cntx_init_zen( cntx_t* cntx ) bli_blksz_init_easy( &blkszs[ BLIS_NC ], 4080, 4080, 4080, 4080 ); #else - bli_blksz_init_easy( &blkszs[ BLIS_MC ], 144, 240, 144, 72 ); bli_blksz_init_easy( &blkszs[ BLIS_KC ], 256, 512, 256, 256 ); bli_blksz_init_easy( &blkszs[ BLIS_NC ], 4080, 2040, 4080, 4080 ); diff --git a/frame/3/syrk/bli_syrk_front.h b/frame/3/syrk/bli_syrk_front.h index 98b1e1251..0b65303cc 100644 --- a/frame/3/syrk/bli_syrk_front.h +++ b/frame/3/syrk/bli_syrk_front.h @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2018, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -42,7 +43,6 @@ void bli_syrk_front rntm_t* rntm, cntl_t* cntl ); - err_t bli_syrk_small ( obj_t* alpha, @@ -52,4 +52,4 @@ err_t bli_syrk_small obj_t* c, cntx_t* cntx, cntl_t* cntl - ); \ No newline at end of file + ); From 016acd387cac69fbe7dfdebe59e3c842130bb93c Mon Sep 17 00:00:00 2001 From: Kiran Varaganti Date: Tue, 5 Mar 2019 15:01:57 +0530 Subject: [PATCH 095/109] Merged BLIS Release 1.3 Modified config/zen/make_defs.mk, now CKVECFLAGS := -mavx2 -mfpmath=sse -mfma -march=znver1 Change-Id: Ia0942d285a21447cd0c470de1bc021fe63e80d81 --- config/zen/bli_cntx_init_zen.c | 13 ------------- frame/3/syrk/bli_syrk_front.h | 1 + frame/3/trsm/bli_trsm_front.c | 1 + kernels/zen/1/bli_amaxv_zen_int.c | 2 +- kernels/zen/1/bli_dotv_zen_int.c | 4 ++++ kernels/zen/1/bli_dotv_zen_int10.c | 4 ++++ kernels/zen/1/bli_dotxv_zen_int.c | 4 ++++ 7 files changed, 15 insertions(+), 14 deletions(-) diff --git a/config/zen/bli_cntx_init_zen.c b/config/zen/bli_cntx_init_zen.c index 59385af14..bcf793cb8 100644 --- a/config/zen/bli_cntx_init_zen.c +++ b/config/zen/bli_cntx_init_zen.c @@ -117,18 +117,6 @@ void bli_cntx_init_zen( cntx_t* cntx ) bli_blksz_init_easy( &blkszs[ BLIS_NR ], 16, 8, 8, 4 ); /* -<<<<<<< HEAD - Multi Instance performance improvement of DGEMM when binded to a CCX - In Multi instance each thread runs a sequential DGEMM. - - a) If BLIS is run in a multi instance mode with - CPU freq 2.6/2.2 Ghz - DDR4 clock frequency 2400Mhz - mc = 240, kc = 512, and nc = 2040 - has better performance on EPYC server, over the default block sizes. - - b) If BLIS is run in Single Instance mode -======= Multi Instance performance degradation on different cores a) CPU freq 2.6 Ghz DDR4 2400 @@ -144,7 +132,6 @@ void bli_cntx_init_zen( cntx_t* cntx ) mc = 390, kc = 512 and nc = 4080 c) Higher frequency(3.1Ghz), single instance mode choose default value ->>>>>>> Fix on EPYC machine for multi instance performance issue, mc = 510, kc = 1024 and nc = 4080 */ diff --git a/frame/3/syrk/bli_syrk_front.h b/frame/3/syrk/bli_syrk_front.h index 0b65303cc..de6b0ed0a 100644 --- a/frame/3/syrk/bli_syrk_front.h +++ b/frame/3/syrk/bli_syrk_front.h @@ -43,6 +43,7 @@ void bli_syrk_front rntm_t* rntm, cntl_t* cntl ); + err_t bli_syrk_small ( obj_t* alpha, diff --git a/frame/3/trsm/bli_trsm_front.c b/frame/3/trsm/bli_trsm_front.c index 0b6db8a5a..38af5388b 100644 --- a/frame/3/trsm/bli_trsm_front.c +++ b/frame/3/trsm/bli_trsm_front.c @@ -35,6 +35,7 @@ #include "blis.h" //#define PRINT_SMALL_TRSM_INFO + void bli_trsm_front ( side_t side, diff --git a/kernels/zen/1/bli_amaxv_zen_int.c b/kernels/zen/1/bli_amaxv_zen_int.c index 496649b50..ccf6919cc 100644 --- a/kernels/zen/1/bli_amaxv_zen_int.c +++ b/kernels/zen/1/bli_amaxv_zen_int.c @@ -4,7 +4,7 @@ An object-based framework for developing high-performance BLAS-like libraries. - Copyright (C) 2016 - 2018 - 2019, Advanced Micro Devices, Inc. + Copyright (C) 2016 - 2018, Advanced Micro Devices, Inc Copyright (C) 2018, The University of Texas at Austin Redistribution and use in source and binary forms, with or without diff --git a/kernels/zen/1/bli_dotv_zen_int.c b/kernels/zen/1/bli_dotv_zen_int.c index 01022d353..da3f4f771 100644 --- a/kernels/zen/1/bli_dotv_zen_int.c +++ b/kernels/zen/1/bli_dotv_zen_int.c @@ -4,7 +4,11 @@ An object-based framework for developing high-performance BLAS-like libraries. +<<<<<<< HEAD Copyright (C) 2016 - 2019, Advanced Micro Devices, Inc. +======= + Copyright (C) 2016 - 2018, Advanced Micro Devices, Inc. +>>>>>>> Merged BLIS Release 1.3 Copyright (C) 2018, The University of Texas at Austin Redistribution and use in source and binary forms, with or without diff --git a/kernels/zen/1/bli_dotv_zen_int10.c b/kernels/zen/1/bli_dotv_zen_int10.c index 959dc86b5..1888dface 100644 --- a/kernels/zen/1/bli_dotv_zen_int10.c +++ b/kernels/zen/1/bli_dotv_zen_int10.c @@ -4,7 +4,11 @@ An object-based framework for developing high-performance BLAS-like libraries. +<<<<<<< HEAD Copyright (C) 2016 - 2019, Advanced Micro Devices, Inc. +======= + Copyright (C) 2016 - 2018, Advanced Micro Devices, Inc. +>>>>>>> Merged BLIS Release 1.3 Copyright (C) 2018, The University of Texas at Austin Redistribution and use in source and binary forms, with or without diff --git a/kernels/zen/1/bli_dotxv_zen_int.c b/kernels/zen/1/bli_dotxv_zen_int.c index 99ea51710..695ff6dc9 100644 --- a/kernels/zen/1/bli_dotxv_zen_int.c +++ b/kernels/zen/1/bli_dotxv_zen_int.c @@ -4,7 +4,11 @@ An object-based framework for developing high-performance BLAS-like libraries. +<<<<<<< HEAD Copyright (C) 2016 - 2019, Advanced Micro Devices, Inc. +======= + Copyright (C) 2016 - 2018, Advanced Micro Devices, Inc. +>>>>>>> Merged BLIS Release 1.3 Copyright (C) 2018, The University of Texas at Austin Redistribution and use in source and binary forms, with or without From 34c2c22ae89c46e700c931fb25a8e37a2769fc57 Mon Sep 17 00:00:00 2001 From: Kiran Varaganti Date: Wed, 6 Mar 2019 16:23:31 +0530 Subject: [PATCH 096/109] Disabled BLIS_ENABLE_ZEN_BLOCK_SIZES in bli_family_zen.h for ROME tuning Change-Id: Iec47fcf51f4d4396afef1ce3958e58cf02c59a57 --- config/zen/bli_family_zen.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/zen/bli_family_zen.h b/config/zen/bli_family_zen.h index 526e3a8b0..31e1d2dd7 100644 --- a/config/zen/bli_family_zen.h +++ b/config/zen/bli_family_zen.h @@ -42,7 +42,7 @@ #define BLIS_DEFAULT_MR_THREAD_MAX 1 #define BLIS_DEFAULT_NR_THREAD_MAX 1 -#define BLIS_ENABLE_ZEN_BLOCK_SIZES +//#define BLIS_ENABLE_ZEN_BLOCK_SIZES #define BLIS_ENABLE_SMALL_MATRIX #define BLIS_ENABLE_SMALL_MATRIX_TRSM From d605a19e42e2d134a0118b256eedbb36bb33bcc1 Mon Sep 17 00:00:00 2001 From: Kiran Varaganti Date: Mon, 20 May 2019 10:48:06 +0530 Subject: [PATCH 097/109] config_registry: New AMD zen2 architecture configuration added. frame/base/bli_arch.c: #ifdef BLIS_FAMILY_ZEN2 id = BLIS_ARCH_ZEN2; #endif added. zen2 is added in config_name[BLIS_NUM_ARCHS] frame/base/bli_cpuid.c : #ifdef BLIS_CONFIG_ZEN2 if ( bli_cpuid_is_zen2( family, model, features ) ) return BLIS_ARCH_ZEN2; #endif, defined new function bool bli_cpuid_is_zen2(...). frame/base/bli_cpuid.h : declared bli_cpuid_is_zen2(..). frame/base/bli_gks.c : #ifdef BLIS_CONFIG_ZEN2 bli_gks_register_cntx(BLIS_ARCH_ZEN2, bli_cntx_init_zen2, bli_cntx_init_zen2_ref, bli_cntx_init_zen2_ind); #endif frame/include/bli_arch_config.h : #ifdef BLIS_CONFIG_ZEN2 CNTX_INIT_PROTS(zen2) #endif #ifdef BLIS_FAMILY_ZEN2 #include "bli_family_zen2.h" #endif frame/include/bli_type_defs.h : added BLIS_ARCH_ZEN2 in arch_t enum. BLIS_NUM_ARCHS 20 Change-Id: I2a2d9b7266673e78a4f8543b1bfb5425b0aa7866 --- config/zen2/make_defs.mk | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/config/zen2/make_defs.mk b/config/zen2/make_defs.mk index ac1a0545b..404df2a19 100644 --- a/config/zen2/make_defs.mk +++ b/config/zen2/make_defs.mk @@ -62,6 +62,11 @@ endif # gcc 4.9 (clang 3.5) or later: # possibly add zen-specific instructions: -mclzero -madx -mrdseed -mmwaitx -msha -mxsavec -mxsaves -mclflushopt -mpopcnt #CKVECFLAGS := -mavx2 -mfpmath=sse -mfma -march=bdver4 -mno-fma4 -mno-tbm -mno-xop -mno-lwp +else +ifeq ($(CC_VENDOR),clang) +CKVECFLAGS := -mavx2 -mfpmath=sse -mfma -march=znver1 -mno-fma4 -mno-tbm -mno-xop -mno-lwp +else +$(error gcc or clang are required for this configuration.) endif # Store all of the variables here to new variables containing the # configuration name. From b5eb3487347be67b21a4ed44865ba592bf20c30c Mon Sep 17 00:00:00 2001 From: Kiran Varaganti Date: Tue, 21 May 2019 15:11:47 +0530 Subject: [PATCH 098/109] config/zen/bli_cntx_init_zen.c: removed BLIS_ENBLE_ZEN_BLOCK_SIZES macro. We have different configurations for both zen and zen2 config/zen/bli_family_zen.h: deleted macro BLIS_ENBLE_ZEN_BLOCK_SIZES config/zen/make_defs.mk: removed compiler flag -mno-avx256-split-unaligned-store frame/base/bli_cpuid.c: ROME family is 17H but model # is from 0x30H. test/test_gemm.c - commented out #define FILE_IN_OUT (some compilation error when BLIS is configured as amd64) Now we can use single configuration has ./configure amd64 - this will work both for ROME & Naples Change-Id: I91b4fc35380f8a35b4f4c345da040c6b5910b4a2 --- config/zen/bli_family_zen.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/zen/bli_family_zen.h b/config/zen/bli_family_zen.h index 31e1d2dd7..01544e8b5 100644 --- a/config/zen/bli_family_zen.h +++ b/config/zen/bli_family_zen.h @@ -42,7 +42,7 @@ #define BLIS_DEFAULT_MR_THREAD_MAX 1 #define BLIS_DEFAULT_NR_THREAD_MAX 1 -//#define BLIS_ENABLE_ZEN_BLOCK_SIZES + #define BLIS_ENABLE_SMALL_MATRIX #define BLIS_ENABLE_SMALL_MATRIX_TRSM From 874aee6d8417aa62b20c048d4b33ed7096ebe3cc Mon Sep 17 00:00:00 2001 From: kdevraje Date: Thu, 23 May 2019 11:08:41 +0530 Subject: [PATCH 099/109] Adding threshold condition to dgemm small matrix kernels, defining the constants in zen2 configuration Change-Id: I53a58b5d734925a6fcb8d8bea5a02ddb8971fcd5 --- frame/3/gemm/bli_gemm_front.c | 2 -- kernels/zen/3/bli_gemm_small.c | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/frame/3/gemm/bli_gemm_front.c b/frame/3/gemm/bli_gemm_front.c index f70dd036e..20928e198 100644 --- a/frame/3/gemm/bli_gemm_front.c +++ b/frame/3/gemm/bli_gemm_front.c @@ -54,7 +54,6 @@ void bli_gemm_front obj_t c_local; -#if 0 #ifdef BLIS_ENABLE_SMALL_MATRIX // Only handle small problems separately for homogeneous datatypes. if ( bli_obj_dt( a ) == bli_obj_dt( b ) && @@ -63,7 +62,6 @@ void bli_gemm_front gint_t status = bli_gemm_small( alpha, a, b, beta, c, cntx, cntl ); if ( status == BLIS_SUCCESS ) return; } -#endif #endif // Check parameters. diff --git a/kernels/zen/3/bli_gemm_small.c b/kernels/zen/3/bli_gemm_small.c index 1db3b59ea..ffeec965e 100644 --- a/kernels/zen/3/bli_gemm_small.c +++ b/kernels/zen/3/bli_gemm_small.c @@ -1583,7 +1583,7 @@ static err_t bli_dgemm_small // If alpha is zero, scale by beta and return. // printf("alpha_cast = %f beta_cast = %f [ Trans = %d %d], [stride = %d %d %d] [m,n,k = %d %d %d]\n",*alpha_cast,*beta_cast, bli_obj_has_trans( a ), bli_obj_has_trans( b ), lda, ldb,ldc, M,N,K); #ifdef BLIS_ENABLE_SMALL_MATRIX_ROME - if( (L != 0) && (K != 0) && (N < BLIS_SMALL_MATRIX_THRES_ROME) && (K < BLIS_SMALL_MATRIX_THRES_ROME)) + if( N < BLIS_SMALL_MATRIX_THRES_ROME && K < BLIS_SMALL_MATRIX_THRES_ROME) #else if ((((L) < (D_BLIS_SMALL_MATRIX_THRES * D_BLIS_SMALL_MATRIX_THRES)) || ((M < D_BLIS_SMALL_M_RECT_MATRIX_THRES) && (K < D_BLIS_SMALL_K_RECT_MATRIX_THRES))) && ((L!=0) && (K!=0))) From 2e9b5c36d29f97f2e3559d7206065d38eabea306 Mon Sep 17 00:00:00 2001 From: kdevraje Date: Thu, 23 May 2019 15:29:59 +0530 Subject: [PATCH 100/109] make checkblis fails for matrix dimension check at the begining hence reverting it Change-Id: Ibd2ee8c2d4914598b72003fbfc5845be9c9c1e87 --- frame/3/gemm/bli_gemm_front.c | 7 +++++++ kernels/zen/3/bli_gemm_small.c | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/frame/3/gemm/bli_gemm_front.c b/frame/3/gemm/bli_gemm_front.c index 20928e198..610c86f24 100644 --- a/frame/3/gemm/bli_gemm_front.c +++ b/frame/3/gemm/bli_gemm_front.c @@ -52,6 +52,13 @@ void bli_gemm_front obj_t a_local; obj_t b_local; obj_t c_local; +#if 0 + gint_t M = bli_obj_length( c ); + gint_t N = bli_obj_width( c ); + gint_t K = bli_obj_width( a ); + + if( !(M && N && K)) return; +#endif #ifdef BLIS_ENABLE_SMALL_MATRIX diff --git a/kernels/zen/3/bli_gemm_small.c b/kernels/zen/3/bli_gemm_small.c index ffeec965e..1db3b59ea 100644 --- a/kernels/zen/3/bli_gemm_small.c +++ b/kernels/zen/3/bli_gemm_small.c @@ -1583,7 +1583,7 @@ static err_t bli_dgemm_small // If alpha is zero, scale by beta and return. // printf("alpha_cast = %f beta_cast = %f [ Trans = %d %d], [stride = %d %d %d] [m,n,k = %d %d %d]\n",*alpha_cast,*beta_cast, bli_obj_has_trans( a ), bli_obj_has_trans( b ), lda, ldb,ldc, M,N,K); #ifdef BLIS_ENABLE_SMALL_MATRIX_ROME - if( N < BLIS_SMALL_MATRIX_THRES_ROME && K < BLIS_SMALL_MATRIX_THRES_ROME) + if( (L != 0) && (K != 0) && (N < BLIS_SMALL_MATRIX_THRES_ROME) && (K < BLIS_SMALL_MATRIX_THRES_ROME)) #else if ((((L) < (D_BLIS_SMALL_MATRIX_THRES * D_BLIS_SMALL_MATRIX_THRES)) || ((M < D_BLIS_SMALL_M_RECT_MATRIX_THRES) && (K < D_BLIS_SMALL_K_RECT_MATRIX_THRES))) && ((L!=0) && (K!=0))) From 3f88a44779512aa1fd6d9127b78d79f6383e0e72 Mon Sep 17 00:00:00 2001 From: Meghana Date: Thu, 23 May 2019 16:15:27 +0530 Subject: [PATCH 101/109] Implemented TRSM for small matrices for cases where A is on the right Added separate kernels for zen and zen2 Change-Id: I6318ddc250cf82516c1aa4732718a35eae0c9134 --- kernels/zen2/3/bli_trsm_small.c | 25023 ++++++++++++++++++++++++++++++ 1 file changed, 25023 insertions(+) create mode 100644 kernels/zen2/3/bli_trsm_small.c diff --git a/kernels/zen2/3/bli_trsm_small.c b/kernels/zen2/3/bli_trsm_small.c new file mode 100644 index 000000000..346df3eca --- /dev/null +++ b/kernels/zen2/3/bli_trsm_small.c @@ -0,0 +1,25023 @@ +/* + +BLIS +An object-based framework for developing high-performance BLAS-like +libraries. + +Copyright (C) 2018, Advanced Micro Devices, Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: +- Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +- Neither the name of The University of Texas at Austin nor the names +of its contributors may be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "blis.h" +#ifdef BLIS_ENABLE_SMALL_MATRIX_TRSM +#include "immintrin.h" +#define GEMM_BLK_V1 8 //Block size to perform gemm and apply trsm +#define GEMM_ACCUM_A 1 //Peform B1=B1-(B0*A0) operation instead of B1'=(B0*A0) and then B1=B1-B1' +#define OPT_CACHE_BLOCKING_L1 1 //Perform trsm block-wise in blocks of GEMM_BLK_V1 instead of all columns of B together. +#define REARRANGE_SHFL 0 //Rearrange operations using blend or shuffle +#define BLI_AlXB_M_SP 16 +//#define BLI_AlXB_M_DP 16 +#define BLI_XAltB_N_SP 128 +#define BLI_AutXB_M_SP 64 +#define BLI_AutXB_N_SP 128 +#define max(a,b) a>b?a:b +#define min(a,b) a 0; k--) + { + double lkk_inv = 1.0/A[k+k*lda]; + for(i = M-1; i+1 > 0; i--) + { + B[i+k*ldb] *= lkk_inv; + for(j = k-1; j+1 > 0; j--) + { + B[i+j*ldb] -= B[i+k*ldb] * A[k+j*lda]; + } + } + } +return BLIS_SUCCESS; +} + +/* TRSM scalar code for the case XA = alpha * B + * A is lower-triangular, unit-diagonal, no transpose + *Dimensions: X:mxn A:nxn B:mxn + */ +static err_t dtrsm_small_XAlB_unitDiag( + double *A, + double *B, + double alpha, + dim_t M, + dim_t N, + dim_t lda, + dim_t ldb +) +{ + + dim_t i, j, k; + + for(i = 0 ; i < M; i++) + for(j = 0; j < N; j++) + B[i+j*ldb] *= alpha; + + for(k = N-1; k+1 > 0; k--) + { + for(i = M-1; i+1 > 0; i--) + { + for(j = k-1; j+1 > 0; j--) + { + B[i+j*ldb] -= B[i+k*ldb] * A[k+j*lda]; + } + } + } +return BLIS_SUCCESS; +} + +/* TRSM scalar code for the case XA = alpha * B + *A is upper-triangular, non-unit-diagonal, A is transposed + * Dimensions: X:mxn A:nxn B:mxn + */ +static err_t dtrsm_small_XAutB ( + double *A, + double *B, + double alpha, + dim_t M, + dim_t N, + dim_t lda, + dim_t ldb +) +{ + + dim_t i, j, k; + + for(i = 0; i < M; i++) + for(j = 0; j < N; j++) + B[i+j*ldb] *=alpha; + + for(k = N-1; k+1 > 0; k--) + { + double lkk_inv = 1.0/A[k+k*lda]; + for(i = M-1; i+1 > 0; i--) + { + B[i+k*ldb] *= lkk_inv; + for(j = k-1; j+1 > 0; j--) + { + B[i+j*ldb] -= B[i+k*ldb] * A[j+k*lda]; + } + } + } +return BLIS_SUCCESS; +} + +/* TRSM scalar code for the case XA = alpha * B + * A is upper-triangular, unit-diagonal, A has to be transposed + * Dimensions: X:mxn A:nxn B:mxn + */ +static err_t dtrsm_small_XAutB_unitDiag( + double *A, + double *B, + double alpha, + dim_t M, + dim_t N, + dim_t lda, + dim_t ldb +) +{ + + dim_t i, j, k; + + for(i = 0; i< M; i++) + for(j = 0; j< N; j++) + B[i+j*ldb] *= alpha; + + for(i = M-1; i+1 > 0; i--) + { + for(j = N-1; j+1 > 0; j--) + { + for(k = j-1; k+1 > 0; k--) + { + B[i+k*ldb] -= B[i+j*ldb] * A[k+j*lda]; + + } + } + } +return BLIS_SUCCESS; +} + +/* TRSM scalar code for the case XA = alpha * B + * A is lower-triangular, non-unit-diagonal, A has to be transposed + * Dimensions: X:mxn A:nxn B:mxn + */ +static err_t dtrsm_small_XAltB ( + double *A, + double *B, + dim_t M, + dim_t N, + dim_t lda, + dim_t ldb +) +{ + + dim_t i, j, k; + + for(k = 0; k < N; k++) + { + double lkk_inv = 1.0/A[k+k*lda]; + for(i = 0; i < M; i++) + { + B[i+k*ldb] *= lkk_inv; + for(j = k+1; j < N; j++) + { + B[i+j*ldb] -= B[i+k*ldb] * A[j+k*lda]; + } + } + } +return BLIS_SUCCESS; +} + +/* TRSM scalar code for XA = alpha * B + * A is lower-triangular, unit-diagonal, A has to be transposed + * Dimensions: X:mxn A:nxn B:mxn + */ +static err_t dtrsm_small_XAltB_unitDiag( + double *A, + double *B, + dim_t M, + dim_t N, + dim_t lda, + dim_t ldb +) +{ + + dim_t i, j, k; + + for(k = 0; k < N; k++) + { + for(i = 0; i < M; i++) + { + for(j = k+1; j < N; j++) + { + B[i+j*ldb] -= B[i+k*ldb] * A[j+k*lda]; + } + } + } +return BLIS_SUCCESS; +} + +/* TRSM scalar code for the case XA = alpha * B + * A is upper-triangular, unit-diagonal, no transpose + * Dimensions: X:mxn A:nxn B:mxn + */ +static err_t dtrsm_small_XAuB_unitDiag ( + double *A, + double *B, + dim_t M, + dim_t N, + dim_t lda, + dim_t ldb +) +{ + + dim_t i, j, k; + + for(k = 0; k < N; k++) + { + for(i = 0; i < M; i++) + { + for(j = k+1; j < N; j++) + { + B[i+j*ldb] -= B[i+k*ldb] * A[k+j*lda]; + } + } + } +return BLIS_SUCCESS; +} + +/* TRSM for the case AX = alpha * B, Double precision + * A is lower-triangular, no-transpose, non-unit diagonal + * dimensions A: mxm X: mxn B: mxn + + b01---> + * ***************** + ** * * * * * + * * * * * * * + * * *b01* * * * + * * * * * * * +a10 ****** b11 ***************** + | * * * | * * * * * + | * * * | * * * * * + | *a10*a11* | *b11* * * * + v * * * v * * * * * + *********** ***************** + * * * * * * * * * + * * * * * * * * * + * * * * * * * * * + * * * * * * * * * + **************** ***************** + a11---> +*/ + +static err_t bli_dtrsm_small_AlXB( + side_t side, + obj_t* AlphaObj, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ) +{ + + dim_t D_MR = 4; //size of block along 'M' dimpension + dim_t D_NR = 8; //size of block along 'N' dimension + + dim_t m = bli_obj_length(b); // number of rows of matrix B + dim_t n = bli_obj_width(b); // number of columns of matrix B + + if(max(m,n) > 90) + return BLIS_NOT_YET_IMPLEMENTED; + + dim_t m_remainder = m % D_MR; //number of remainder rows + dim_t n_remainder = n % D_NR; //number of remainder columns + + dim_t cs_a = bli_obj_col_stride(a); // column stride of A + dim_t cs_b = bli_obj_col_stride(b); // column stride of B + + dim_t i, j, k; //loop variables + dim_t k_iter; //number of times GEMM to be performed + + double AlphaVal = *(double *)AlphaObj->buffer; //value of alpha + double *L = a->buffer; //pointer to matrix A + double *B = b->buffer; //pointer to matrix B + + double *a10, *a11, *b01, *b11; //pointers that point to blocks for GEMM and TRSM + double *ptr_b01_dup; + + double ones = 1.0; + + //scratch registers + __m256d ymm0, ymm1, ymm2, ymm3; + __m256d ymm4, ymm5, ymm6, ymm7; + __m256d ymm8, ymm9, ymm10, ymm11; + __m256d ymm12, ymm13, ymm14, ymm15; + __m256d ymm16; + + + + for(j = 0; j+D_NR-1 < n; j += D_NR) //loop along 'N' dimension + { + for(i = 0;i+D_MR-1 < m; i += D_MR) //loop along 'M' dimension + { + a10 = L +i; //pointer to block of A to be used for GEMM + a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM + b01 = B + j*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM + + k_iter = i / D_MR; //number of times GEMM to be performed(in blocks of 4x4) + + ymm8 = _mm256_setzero_pd(); + ymm9 = _mm256_setzero_pd(); + ymm10 = _mm256_setzero_pd(); + ymm11 = _mm256_setzero_pd(); + ymm12 = _mm256_setzero_pd(); + ymm13 = _mm256_setzero_pd(); + ymm14 = _mm256_setzero_pd(); + ymm15 = _mm256_setzero_pd(); + + ///GEMM code begins/// + + for(k = 0; k< k_iter; k++) //loop for number of GEMM operations + { + ptr_b01_dup = b01; + + ymm16 = _mm256_loadu_pd((double const *)(a10));//A10[0][0] A10[1][0] A10[2][0] A10[3][0] + + ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] + ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] + ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] + ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] + + ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[0][4] + ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[0][5] + ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[0][6] + ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[0][7] + + b01 += 1; //mobe to next row of B + + ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) + ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) + ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) + ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) + + ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[0][4]*A10[0][0] B01[0][4]*A10[1][0] B01[0][4]*A10[2][0] B01[0][4]*A10[3][0]) + ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[0][5]*A10[0][0] B01[0][5]*A10[1][0] B01[0][5]*A10[2][0] B01[0][5]*A10[3][0]) + ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[0][6]*A10[0][0] B01[0][6]*A10[1][0] B01[0][6]*A10[2][0] B01[0][6]*A10[3][0]) + ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[0][7]*A10[0][0] B01[0][7]*A10[1][0] B01[0][7]*A10[2][0] B01[0][7]*A10[3][0]) + + ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a));//A10[0][1] A10[1][1] A10[2][1] A10[3][1] + + ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] + ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] + ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] + ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] + + ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[1][4] + ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[1][5] + ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[1][6] + ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[1][7] + + b01 += 1; //mobe to next row of B + + ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) + ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) + ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) + ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) + + ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[1][4]*A10[0][1] B01[1][4]*A10[1][1] B01[1][4]*A10[2][1] B01[1][4]*A10[3][1]) + ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[1][5]*A10[0][1] B01[1][5]*A10[1][1] B01[1][5]*A10[2][1] B01[1][5]*A10[3][1]) + ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[1][6]*A10[0][1] B01[1][6]*A10[1][1] B01[1][6]*A10[2][1] B01[1][6]*A10[3][1]) + ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[1][7]*A10[0][1] B01[1][7]*A10[1][1] B01[1][7]*A10[2][1] B01[1][7]*A10[3][1]) + + ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2));//A10[0][2] A10[1][2] A10[2][2] A10[3][2] + + ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] + ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] + ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] + ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] + + ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[2][4] + ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[2][5] + ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[2][6] + ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[2][7] + + b01 += 1; //mobe to next row of B + + ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) + ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) + ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) + ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) + + ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[2][4]*A10[0][2] B01[2][4]*A10[1][2] B01[2][4]*A10[2][2] B01[2][4]*A10[3][2]) + ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[2][5]*A10[0][2] B01[2][5]*A10[1][2] B01[2][5]*A10[2][2] B01[2][5]*A10[3][2]) + ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[2][6]*A10[0][2] B01[2][6]*A10[1][2] B01[2][6]*A10[2][2] B01[2][6]*A10[3][2]) + ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[2][7]*A10[0][2] B01[2][7]*A10[1][2] B01[2][7]*A10[2][2] B01[2][7]*A10[3][2]) + + ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3));//A10[0][3] A10[1][3] A10[2][3] A10[3][3] + + ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] + ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] + ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] + ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] + + ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[3][4] + ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[3][5] + ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[3][6] + ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[3][7] + + b01 += 1; //mobe to next row of B + + ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[3][0]*A10[0][3] B01[3][0]*A10[3][0] B01[3][0]*A10[2][3] B01[3][0]*A10[3][0]) + ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[3][1]*A10[0][3] B01[3][1]*A10[3][0] B01[3][1]*A10[2][3] B01[3][1]*A10[3][0]) + ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[3][2]*A10[0][3] B01[3][2]*A10[3][0] B01[3][2]*A10[2][3] B01[3][2]*A10[3][0]) + ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[3][3]*A10[0][3] B01[3][3]*A10[3][0] B01[3][3]*A10[2][3] B01[3][3]*A10[3][0]) + + ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[3][4]*A10[0][3] B01[3][4]*A10[3][0] B01[3][4]*A10[2][3] B01[3][4]*A10[3][3]) + ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[3][5]*A10[0][3] B01[3][5]*A10[3][0] B01[3][5]*A10[2][3] B01[3][5]*A10[3][3]) + ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[3][6]*A10[0][3] B01[3][6]*A10[3][0] B01[3][6]*A10[2][3] B01[3][6]*A10[3][3]) + ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[3][7]*A10[0][3] B01[3][7]*A10[3][0] B01[3][7]*A10[2][3] B01[3][7]*A10[3][3]) + + a10 += D_MR * cs_a; //pointer math to calculate next block of A for GEMM + b01 = ptr_b01_dup + D_MR; //pointer math to calculate next block of B for GEMM + } + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to hold alpha + + ymm0 = _mm256_loadu_pd((double const *)(b11 + cs_b *0)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b *1)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b *2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b *3)); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm4 = _mm256_loadu_pd((double const *)(b11 + cs_b *4)); //B11[0][4] B11[1][4] B11[2][4] B11[3][4] + ymm5 = _mm256_loadu_pd((double const *)(b11 + cs_b *5)); //B11[0][5] B11[1][5] B11[2][5] B11[3][5] + ymm6 = _mm256_loadu_pd((double const *)(b11 + cs_b *6)); //B11[0][6] B11[1][6] B11[2][6] B11[3][6] + ymm7 = _mm256_loadu_pd((double const *)(b11 + cs_b *7)); //B11[0][7] B11[1][7] B11[2][7] B11[3][7] + + ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm8); //B11[0-3][0] * alpha -= B01[0-3][0] + ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm9); //B11[0-3][1] * alpha -= B01[0-3][1] + ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm10); //B11[0-3][2] * alpha -= B01[0-3][2] + ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm11); //B11[0-3][3] * alpha -= B01[0-3][3] + ymm4 = _mm256_fmsub_pd(ymm4, ymm16, ymm12); //B11[0-3][4] * alpha -= B01[0-3][4] + ymm5 = _mm256_fmsub_pd(ymm5, ymm16, ymm13); //B11[0-3][5] * alpha -= B01[0-3][5] + ymm6 = _mm256_fmsub_pd(ymm6, ymm16, ymm14); //B11[0-3][6] * alpha -= B01[0-3][6] + ymm7 = _mm256_fmsub_pd(ymm7, ymm16, ymm15); //B11[0-3][7] * alpha -= B01[0-3][7] + + ///implement TRSM/// + + ///transpose of B11// + ///unpacklow/// + ymm9 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] + ymm11 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] + + ymm13 = _mm256_unpacklo_pd(ymm4, ymm5); //B11[0][4] B11[0][5] B11[2][4] B11[2][5] + ymm15 = _mm256_unpacklo_pd(ymm6, ymm7); //B11[0][6] B11[0][7] B11[2][6] B11[2][7] + + //rearrange low elements + ymm8 = _mm256_permute2f128_pd(ymm9,ymm11,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] + ymm10 = _mm256_permute2f128_pd(ymm9,ymm11,0x31); //B11[2][0] B11[2][1] B11[2][2] B11[2][3] + + ymm12 = _mm256_permute2f128_pd(ymm13,ymm15,0x20); //B11[4][0] B11[4][1] B11[4][2] B11[4][3] + ymm14 = _mm256_permute2f128_pd(ymm13,ymm15,0x31); //B11[6][0] B11[6][1] B11[6][2] B11[6][3] + + ////unpackhigh//// + ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] + ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] + + ymm4 = _mm256_unpackhi_pd(ymm4, ymm5); //B11[1][4] B11[1][5] B11[3][4] B11[3][5] + ymm5 = _mm256_unpackhi_pd(ymm6, ymm7); //B11[1][6] B11[1][7] B11[3][6] B11[3][7] + + //rearrange high elements + ymm9 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] + ymm11 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] + + ymm13 = _mm256_permute2f128_pd(ymm4,ymm5,0x20); //B11[5][0] B11[5][1] B11[5][2] B11[5][3] + ymm15 = _mm256_permute2f128_pd(ymm4,ymm5,0x31); //B11[7][0] B11[7][1] B11[7][2] B11[7][3] + + ymm0 = _mm256_broadcast_sd((double const *)&ones); + + //broadcast diagonal elements of A11 + ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_b +1)); //A11[1][1] + ymm3 = _mm256_broadcast_sd((double const *)(a11+cs_b*2 + 2)); //A11[2][2] + ymm4 = _mm256_broadcast_sd((double const *)(a11+cs_b*3 + 3)); //A11[3][3] + + ymm5 = _mm256_unpacklo_pd(ymm1, ymm2); //A11[0][0] A11[0][0] A11[1][1] A11[1][1] + ymm6 = _mm256_unpacklo_pd(ymm3, ymm4); //A11[2][2] A11[2][2] A11[3][3] A11[3][3] + + ymm5 = _mm256_blend_pd(ymm5, ymm6, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm0 = _mm256_div_pd(ymm0, ymm5); //1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2] + + //extract a00 + ymm1 = _mm256_permute_pd(ymm0, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] + ymm1 = _mm256_permute2f128_pd(ymm1, ymm1, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0] + + //(Row 0): perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + ymm8 = _mm256_mul_pd(ymm8, ymm1); //B11[0-3][0] /= A11[0][0] + ymm12 = _mm256_mul_pd(ymm12, ymm1); //B11[0-3][4] /= A11[0][0] + + //extract a11 + ymm1 = _mm256_permute_pd(ymm0, 0x03); //1/A11[1][1] 1/A11[1][1] 1/A11[3][3] 1/A11[3][3] + ymm1 = _mm256_permute2f128_pd(ymm1, ymm1, 0x00); //1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1] + + ymm2 = _mm256_broadcast_sd((double const *)(a11 +1)); //A11[1][0] + ymm3 = _mm256_broadcast_sd((double const *)(a11 +2)); //A11[2][0] + ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][0] + + a11 += cs_a; + + //(Row1): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm2, ymm8, ymm9); //B11[1][0-3] -= A11[1][0] * B11[0-3][0] + ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[2][0-3] -= A11[2][0] * B11[0-3][0] + ymm11 = _mm256_fnmadd_pd(ymm4, ymm8, ymm11); //B11[3][0-3] -= A11[3][0] * B11[0-3][0] + + ymm13 = _mm256_fnmadd_pd(ymm2, ymm12, ymm13); //B11[5][0-3] -= A11[1][0] * B11[0-3][4] + ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[6][0-3] -= A11[2][0] * B11[0-3][4] + ymm15 = _mm256_fnmadd_pd(ymm4, ymm12, ymm15); //B11[7][0-3] -= A11[3][0] * B11[0-3][4] + + ymm9 = _mm256_mul_pd(ymm9, ymm1); //B11[0-3][1] /= A11[1][1] + ymm13 = _mm256_mul_pd(ymm13, ymm1); //B11[0-3][5] /= A11[1][1] + + ymm3 = _mm256_broadcast_sd((double const *)(a11 +2)); //A11[2][1] + ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][1] + + a11 += cs_a; + + //extract a22 + ymm1 = _mm256_permute_pd(ymm0, 0x00); //1/A11[0][0] 1/A110[][0] 1/A11[2][2] 1/A11[2][2] + ymm1 = _mm256_permute2f128_pd(ymm1, ymm1, 0x11); //1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2] + + //(ROw2): FMA operations + ymm10 = _mm256_fnmadd_pd(ymm3, ymm9, ymm10); //B11[2][0-3] -= A11[2][1] * B11[0-3][1] + ymm11 = _mm256_fnmadd_pd(ymm4, ymm9, ymm11); //B11[3][0-3] -= A11[3][1] * B11[0-3][1] + + ymm14 = _mm256_fnmadd_pd(ymm3, ymm13, ymm14); //B11[6][0-3] -= A11[2][1] * B11[0-3][5] + ymm15 = _mm256_fnmadd_pd(ymm4, ymm13, ymm15); //B11[7][0-3] -= A11[3][1] * B11[0-3][5] + + //perform mul operation + ymm10 = _mm256_mul_pd(ymm10, ymm1); //B11[0-3][2] /= A11[2][2] + ymm14 = _mm256_mul_pd(ymm14, ymm1); //B11[0-3][6] /= A11[2][2] + + ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][2] + + a11 += cs_a; + + //extract a33 + ymm1 = _mm256_permute_pd(ymm0, 0x0C); //1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] + ymm1 = _mm256_permute2f128_pd(ymm1, ymm1, 0x11);//1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3] + + //(ROw2): FMA operations + ymm11 = _mm256_fnmadd_pd(ymm4, ymm10, ymm11); //B11[3][0-3] -= A11[3][2] * B11[0-3][2] + + ymm15 = _mm256_fnmadd_pd(ymm4, ymm14, ymm15); //B11[7][0-3] -= A11[3][2] * B11[0-3][6] + + //perform mul operation + ymm11 = _mm256_mul_pd(ymm11, ymm1); //B11[0-3][3] /= A11[3][3] + ymm15 = _mm256_mul_pd(ymm15, ymm1); //B11[0-3][7] /= A11[3][3] + + //unpacklow// + ymm1 = _mm256_unpacklo_pd(ymm8, ymm9); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] + ymm3 = _mm256_unpacklo_pd(ymm10, ymm11); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] + + ymm5 = _mm256_unpacklo_pd(ymm12, ymm13); //B11[4][0] B11[5][0] B11[4][2] B11[5][2] + ymm7 = _mm256_unpacklo_pd(ymm14, ymm15); //B11[6][0] B11[7][0] B11[6][2] B11[7][2] + + //rearrange low elements + ymm0 = _mm256_permute2f128_pd(ymm1, ymm3, 0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm2 = _mm256_permute2f128_pd(ymm1, ymm3, 0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + + ymm4 = _mm256_permute2f128_pd(ymm5, ymm7, 0x20); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] + ymm6 = _mm256_permute2f128_pd(ymm5, ymm7, 0x31); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] + + ///unpack high/// + ymm8 = _mm256_unpackhi_pd(ymm8, ymm9); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] + ymm9 = _mm256_unpackhi_pd(ymm10, ymm11); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] + + ymm12 = _mm256_unpackhi_pd(ymm12, ymm13); //B11[4][1] B11[5][1] B11[4][3] B11[5][3] + ymm13 = _mm256_unpackhi_pd(ymm14, ymm15); //B11[6][1] B11[7][1] B11[6][3] B11[7][3] + + //rearrange high elements + ymm1 = _mm256_permute2f128_pd(ymm8, ymm9, 0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm3 = _mm256_permute2f128_pd(ymm8, ymm9, 0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + ymm5 = _mm256_permute2f128_pd(ymm12, ymm13, 0x20); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] + ymm7 = _mm256_permute2f128_pd(ymm12, ymm13, 0x31); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] + + _mm256_storeu_pd((double *)(b11 + cs_b * 0), ymm0); //store B11[0][0-3] + _mm256_storeu_pd((double *)(b11 + cs_b * 1), ymm1); //store B11[1][0-3] + _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store B11[2][0-3] + _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store B11[3][0-3] + _mm256_storeu_pd((double *)(b11 + cs_b * 4), ymm4); //store B11[4][0-3] + _mm256_storeu_pd((double *)(b11 + cs_b * 5), ymm5); //store B11[5][0-3] + _mm256_storeu_pd((double *)(b11 + cs_b * 6), ymm6); //store B11[6][0-3] + _mm256_storeu_pd((double *)(b11 + cs_b * 7), ymm7); //store B11[7][0-3] + } + + if(m_remainder) //implementation for reamainder rows(when 'M' is not a multiple of D_MR) + { + a10 = L +i; //pointer to block of A to be used for GEMM + a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM + b01 = B + j*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM + + k_iter = i / D_MR; //number of times GEMM operation to be done(in blocks of 4x4) + + ymm8 = _mm256_setzero_pd(); + ymm9 = _mm256_setzero_pd(); + ymm10 = _mm256_setzero_pd(); + ymm11 = _mm256_setzero_pd(); + ymm12 = _mm256_setzero_pd(); + ymm13 = _mm256_setzero_pd(); + ymm14 = _mm256_setzero_pd(); + ymm15 = _mm256_setzero_pd(); + + ///GEMM code Begins/// + for(k = 0; k< k_iter; k++) //loop for number of GEMM operations + { + ptr_b01_dup = b01; + + ymm16 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] + + ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] + ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] + ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] + ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] + + ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[0][4] + ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[0][5] + ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[0][6] + ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[0][7] + + b01 += 1; //move to next row of B + + ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0] ) + ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) + ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) + ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) + + ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[0][4]*A10[0][0] B01[0][4]*A10[1][0] B01[0][4]*A10[2][0] B01[0][4]*A10[3][0]) + ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[0][5]*A10[0][0] B01[0][5]*A10[1][0] B01[0][5]*A10[2][0] B01[0][5]*A10[3][0]) + ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[0][6]*A10[0][0] B01[0][6]*A10[1][0] B01[0][6]*A10[2][0] B01[0][6]*A10[3][0]) + ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm16 += (B01[0][7]*A10[0][0] B01[0][7]*A10[1][0] B01[0][7]*A10[2][0] B01[0][7]*A10[3][0]) + + ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 1)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] + + ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] + ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] + ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] + ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] + + ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[1][4] + ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[1][5] + ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[1][6] + ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[1][7] + + b01 += 1; //move to next row of B01 + + ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) + ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) + ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) + ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) + + ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[1][4]*A10[0][1] B01[1][4]*A10[1][1] B01[1][4]*A10[2][1] B01[1][4]*A10[3][1]) + ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[1][5]*A10[0][1] B01[1][5]*A10[1][1] B01[1][5]*A10[2][1] B01[1][5]*A10[3][1]) + ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[1][6]*A10[0][1] B01[1][6]*A10[1][1] B01[1][6]*A10[2][1] B01[1][6]*A10[3][1]) + ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[1][7]*A10[0][1] B01[1][7]*A10[1][1] B01[1][7]*A10[2][1] B01[1][7]*A10[3][1]) + + ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2)); //A10[0][2] //A10[1][2] A10[2][2] A10[3][2] + + ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] + ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] + ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] + ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] + + ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[2][4] + ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[2][5] + ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[2][6] + ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[2][7] + + b01 += 1; //move to next row of B + + ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) + ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) + ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) + ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) + + ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[2][4]*A10[0][2] B01[2][4]*A10[1][2] B01[2][4]*A10[2][2] B01[2][0]*A10[3][2]) + ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[2][5]*A10[0][2] B01[2][5]*A10[1][2] B01[2][5]*A10[2][2] B01[2][1]*A10[3][2]) + ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[2][6]*A10[0][2] B01[2][6]*A10[1][2] B01[2][6]*A10[2][2] B01[2][2]*A10[3][2]) + ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[2][7]*A10[0][2] B01[2][7]*A10[1][2] B01[2][7]*A10[2][2] B01[2][3]*A10[3][2]) + + ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] + + ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] + ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] + ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] + ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] + + ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[3][4] + ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[3][5] + ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[3][6] + ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[3][7] + + b01 += 1; //move to next row of B + + ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) + ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm8 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) + ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm8 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) + ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm8 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) + + ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm8 += (B01[3][0]*A10[0][3] B01[3][4]*A10[1][3] B01[3][4]*A10[2][3] B01[3][4]*A10[3][3]) + ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm8 += (B01[3][1]*A10[0][3] B01[3][5]*A10[1][3] B01[3][5]*A10[2][3] B01[3][5]*A10[3][3]) + ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm8 += (B01[3][2]*A10[0][3] B01[3][6]*A10[1][3] B01[3][6]*A10[2][3] B01[3][6]*A10[3][3]) + ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm8 += (B01[3][3]*A10[0][3] B01[3][7]*A10[1][3] B01[3][7]*A10[2][3] B01[3][7]*A10[3][3]) + + a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM + b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM + } + + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha value + + ymm0 = _mm256_loadu_pd((double const *)(b11 + cs_b *0)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b *1)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b *2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b *3)); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm4 = _mm256_loadu_pd((double const *)(b11 + cs_b *4)); //B11[0][4] B11[1][4] B11[2][4] B11[3][4] + ymm5 = _mm256_loadu_pd((double const *)(b11 + cs_b *5)); //B11[0][5] B11[1][5] B11[2][5] B11[3][5] + ymm6 = _mm256_loadu_pd((double const *)(b11 + cs_b *6)); //B11[0][6] B11[1][6] B11[2][6] B11[3][6] + ymm7 = _mm256_loadu_pd((double const *)(b11 + cs_b *7)); //B11[0][7] B11[1][7] B11[2][7] B11[3][7] + + ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm8); //B11[0-3][0] *alpha -= B01[0-3][0] + ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm9); //B11[0-3][1] *alpha -= B01[0-3][1] + ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm10); //B11[0-3][2] *alpha -= B01[0-3][2] + ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm11); //B11[0-3][3] *alpha -= B01[0-3][3] + ymm4 = _mm256_fmsub_pd(ymm4, ymm16, ymm12); //B11[0-3][4] *alpha -= B01[0-3][4] + ymm5 = _mm256_fmsub_pd(ymm5, ymm16, ymm13); //B11[0-3][5] *alpha -= B01[0-3][5] + ymm6 = _mm256_fmsub_pd(ymm6, ymm16, ymm14); //B11[0-3][6] *alpha -= B01[0-3][6] + ymm7 = _mm256_fmsub_pd(ymm7, ymm16, ymm15); //B11[0-3][7] *alpha -= B01[0-3][7] + + ///implement TRSM/// + + ///unpacklow/// + ymm9 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] + ymm11 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] + + ymm13 = _mm256_unpacklo_pd(ymm4, ymm5); //B11[0][4] B11[0][5] B11[1][4] B11[1][5] + ymm15 = _mm256_unpacklo_pd(ymm6, ymm7); //B11[0][6] B11[0][7] B11[1][6] B11[1][7] + + //rearrange low elements + ymm8 = _mm256_permute2f128_pd(ymm9,ymm11,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] + ymm10 = _mm256_permute2f128_pd(ymm9,ymm11,0x31); //B11[2][0] B11[2][1] B11[2][2] B11[2][3] + + ymm12 = _mm256_permute2f128_pd(ymm13,ymm15,0x20); //B11[4][0] B11[4][1] B11[4][2] B11[4][3] + ymm14 = _mm256_permute2f128_pd(ymm13,ymm15,0x31); //B11[6][0] B11[6][1] B11[6][2] B11[6][3] + + ////unpackhigh//// + ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] + ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] + + ymm4 = _mm256_unpackhi_pd(ymm4, ymm5); //B11[5][0] B11[5][1] B11[7][0] B11[7][1] + ymm5 = _mm256_unpackhi_pd(ymm6, ymm7); //B11[5][2] B11[5][3] B11[7][2] B11[7][3] + + //rearrange high elements + ymm9 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] + ymm11 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] + + ymm13 = _mm256_permute2f128_pd(ymm4,ymm5,0x20); //B11[5][0] B11[5][1] B11[5][2] B11[5][3] + ymm15 = _mm256_permute2f128_pd(ymm4,ymm5,0x31); //B11[7][0] B11[7][1] B11[7][2] B11[7][3] + + + ymm0 = _mm256_broadcast_sd((double const *)&ones); + + //broadcast diagonal elements of A11 + ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_b +1)); //A11[1][1] + ymm3 = _mm256_broadcast_sd((double const *)(a11+cs_b*2 + 2)); //A11[2][2] + ymm4 = _mm256_broadcast_sd((double const *)(a11+cs_b*3 + 3)); //A11[3][3] + + ymm5 = _mm256_unpacklo_pd(ymm1, ymm2); //A11[0][0] A11[0][0] A11[1][1] A11[1][1] + ymm6 = _mm256_unpacklo_pd(ymm3, ymm4); //A11[2][2] A11[2][2] A11[3][3] A11[3][3] + + ymm5 = _mm256_blend_pd(ymm5, ymm6, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm0 = _mm256_div_pd(ymm0, ymm5); //1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] + + //extract a00 + ymm1 = _mm256_permute_pd(ymm0, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] + ymm1 = _mm256_permute2f128_pd(ymm1, ymm1, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0] + + //(Row 0): perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + ymm8 = _mm256_mul_pd(ymm8, ymm1); //B11[0-3][0] /= A11[0][0] + ymm12 = _mm256_mul_pd(ymm12, ymm1); //B11[0-3][4] /= A11[0][0] + + //extract a11 + ymm1 = _mm256_permute_pd(ymm0, 0x03); //1/A11[1][1] 1/A11[1][1] 1/A11[3][3] 1/A11[3][3] + ymm1 = _mm256_permute2f128_pd(ymm1, ymm1, 0x00); //1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1] + + ymm2 = _mm256_broadcast_sd((double const *)(a11 +1)); //A11[1][0] + ymm3 = _mm256_broadcast_sd((double const *)(a11 +2)); //A11[2][0] + ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][0] + + a11 += cs_a; + + //(Row1): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm2, ymm8, ymm9); //B11[1][0-3] -= B11[0-3][0]*A11[1][0] + ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[2][0-3] -= B11[0-3][0]*A11[2][0] + ymm11 = _mm256_fnmadd_pd(ymm4, ymm8, ymm11); //B11[3][0-3] -= B11[0-3][0]*A11[3][0] + + ymm13 = _mm256_fnmadd_pd(ymm2, ymm12, ymm13); //B11[5][0-3] -= B11[0-3][4]*A11[1][4] + ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[6][0-3] -= B11[0-3][4]*A11[2][4] + ymm15 = _mm256_fnmadd_pd(ymm4, ymm12, ymm15); //B11[7][0-3] -= B11[0-3][4]*A11[3][4] + + ymm9 = _mm256_mul_pd(ymm9, ymm1); //B11[0-3][1] /= A11[1][1] + ymm13 = _mm256_mul_pd(ymm13, ymm1); //B11[0-3][5] /= A11[1][1] + + ymm3 = _mm256_broadcast_sd((double const *)(a11 +2)); //A11[2][1] + ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][1] + + a11 += cs_a; + + //extract a22 + ymm1 = _mm256_permute_pd(ymm0, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] + ymm1 = _mm256_permute2f128_pd(ymm1, ymm1, 0x11); //1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2] + + //(ROw2): FMA operations + ymm10 = _mm256_fnmadd_pd(ymm3, ymm9, ymm10); //B11[2][0-3] -= A11[2][1] * B11[0-3][1] + ymm11 = _mm256_fnmadd_pd(ymm4, ymm9, ymm11); //B11[3][0-3] -= A11[3][1] * B11[0-3][1] + + ymm14 = _mm256_fnmadd_pd(ymm3, ymm13, ymm14); //B11[6][0-3] -= A11[2][1] * B11[0-3][5] + ymm15 = _mm256_fnmadd_pd(ymm4, ymm13, ymm15); //B11[7][0-3] -= A11[3][1] * B11[0-3][5] + + //perform mul operation + ymm10 = _mm256_mul_pd(ymm10, ymm1); //B11[0-3][2] /=A11[2][2] + ymm14 = _mm256_mul_pd(ymm14, ymm1); //B11[0-3][6] /= A11[2][2] + + ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][2] + + a11 += cs_a; + + //extract a33 + ymm1 = _mm256_permute_pd(ymm0, 0x0C); //1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] + ymm1 = _mm256_permute2f128_pd(ymm1, ymm1, 0x11); //1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3] + + //(ROw2): FMA operations + ymm11 = _mm256_fnmadd_pd(ymm4, ymm10, ymm11); //B11[0-3][3] -= A11[3][2]*B11[0-3][2] + + ymm15 = _mm256_fnmadd_pd(ymm4, ymm14, ymm15); //B11[0-3][7] -= A11[3][2]*B11[0-3][6] + + //perform mul operation + ymm11 = _mm256_mul_pd(ymm11, ymm1); //B11[0-3][3] /= A11[3][3] + ymm15 = _mm256_mul_pd(ymm15, ymm1); //B11[0-3][7] /= A11[3][3] + + //unpacklow// + ymm1 = _mm256_unpacklo_pd(ymm8, ymm9); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] + ymm3 = _mm256_unpacklo_pd(ymm10, ymm11); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] + + ymm5 = _mm256_unpacklo_pd(ymm12, ymm13); //B11[4][0] B11[5][0] B11[4][2] B11[5][2] + ymm7 = _mm256_unpacklo_pd(ymm14, ymm15); //B11[6][0] B11[7][0] B11[6][2] B11[7][2] + + //rearrange low elements + ymm0 = _mm256_permute2f128_pd(ymm1, ymm3, 0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm2 = _mm256_permute2f128_pd(ymm1, ymm3, 0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + + ymm4 = _mm256_permute2f128_pd(ymm5, ymm7, 0x20); //B11[0][4] B11[1][4] B11[2][4] B11[3][4] + ymm6 = _mm256_permute2f128_pd(ymm5, ymm7, 0x31); //B11[0][6] B11[1][6] B11[2][6] B11[3][6] + + ///unpack high/// + ymm8 = _mm256_unpackhi_pd(ymm8, ymm9); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] + ymm9 = _mm256_unpackhi_pd(ymm10, ymm11); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] + + ymm12 = _mm256_unpackhi_pd(ymm12, ymm13); //B11[0][5] B11[1][5] B11[0][7] B11[1][7] + ymm13 = _mm256_unpackhi_pd(ymm14, ymm15); //B11[2][5] B11[3][5] B11[2][7] B11[3][7] + + //rearrange high elements + ymm1 = _mm256_permute2f128_pd(ymm8, ymm9, 0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm3 = _mm256_permute2f128_pd(ymm8, ymm9, 0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + ymm5 = _mm256_permute2f128_pd(ymm12, ymm13, 0x20); //B11[0][5] B11[1][5] B11[2][5] B11[3][5] + ymm7 = _mm256_permute2f128_pd(ymm12, ymm13, 0x31); //B11[0][7] B11[1][7] B11[2][7] B11[3][7] + + ymm8 = _mm256_loadu_pd((double const *)(b11 + cs_b * 0)); //load B11[0-3][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b * 1)); //load B11[0-3][1] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //load B11[0-3][2] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //load B11[0-3][3] + ymm12 = _mm256_loadu_pd((double const *)(b11 + cs_b * 4)); //load B11[0-3][4] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b * 5)); //load B11[0-3][5] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b * 6)); //load B11[0-3][6] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b * 7)); //load B11[0-3][7] + //determine correct values to store + if(m_remainder == 3) + { + ymm0 = _mm256_blend_pd(ymm0, ymm8, 0x08); + ymm1 = _mm256_blend_pd(ymm1, ymm9, 0x08); + ymm2 = _mm256_blend_pd(ymm2, ymm10, 0x08); + ymm3 = _mm256_blend_pd(ymm3, ymm11, 0x08); + ymm4 = _mm256_blend_pd(ymm4, ymm12, 0x08); + ymm5 = _mm256_blend_pd(ymm5, ymm13, 0x08); + ymm6 = _mm256_blend_pd(ymm6, ymm14, 0x08); + ymm7 = _mm256_blend_pd(ymm7, ymm15, 0x08); + } + if(m_remainder == 2) + { + ymm0 = _mm256_permute2f128_pd(ymm0, ymm8, 0x30); + ymm1 = _mm256_permute2f128_pd(ymm1, ymm9, 0x30); + ymm2 = _mm256_permute2f128_pd(ymm2, ymm10, 0x30); + ymm3 = _mm256_permute2f128_pd(ymm3, ymm11, 0x30); + ymm4 = _mm256_permute2f128_pd(ymm4, ymm12, 0x30); + ymm5 = _mm256_permute2f128_pd(ymm5, ymm13, 0x30); + ymm6 = _mm256_permute2f128_pd(ymm6, ymm14, 0x30); + ymm7 = _mm256_permute2f128_pd(ymm7, ymm15, 0x30); + } + if(m_remainder == 1) + { + ymm0 = _mm256_blend_pd(ymm0, ymm8, 0x0E); + ymm1 = _mm256_blend_pd(ymm1, ymm9, 0x0E); + ymm2 = _mm256_blend_pd(ymm2, ymm10, 0x0E); + ymm3 = _mm256_blend_pd(ymm3, ymm11, 0x0E); + ymm4 = _mm256_blend_pd(ymm4, ymm12, 0x0E); + ymm5 = _mm256_blend_pd(ymm5, ymm13, 0x0E); + ymm6 = _mm256_blend_pd(ymm6, ymm14, 0x0E); + ymm7 = _mm256_blend_pd(ymm7, ymm15, 0x0E); + } + + _mm256_storeu_pd((double *)(b11 + cs_b * 0), ymm0); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + cs_b * 1), ymm1); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[0-3][3]) + _mm256_storeu_pd((double *)(b11 + cs_b * 4), ymm4); //store(B11[0-3][4]) + _mm256_storeu_pd((double *)(b11 + cs_b * 5), ymm5); //store(B11[0-3][5]) + _mm256_storeu_pd((double *)(b11 + cs_b * 6), ymm6); //store(B11[0-3][6]) + _mm256_storeu_pd((double *)(b11 + cs_b * 7), ymm7); //store(B11[0-3][7]) + + } + } + + if((n & 4)) //implementation for remainder columns(when 'N' is a multiple of 4) + { + for(i = 0;i+D_MR-1 < m; i += D_MR) //loop along 'M' direction + { + a10 = L +i; //pointer to block of A to be used for GEMM + a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM + b01 = B + j*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM + + k_iter = i / D_MR; //number of times GEMM to be performed(in block of 4) + ///GEMM for previously calculated values /// + + //load 4x4 block from b11 + ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b*2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b*3)); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_b01_dup = b01; + ymm8 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] + ymm9 = _mm256_loadu_pd((double const *)(a10 + cs_a)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] + ymm10 = _mm256_loadu_pd((double const *)(a10 + cs_a*2)); //A10[0][2] A10[1][2] A10[2][2] A10[3][2] + ymm11 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] + + b01 += 1; //move to next row of B + + ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B01[2][1]*A10[1][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B01[2][2]*A10[2][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B01[2][3]*A10[3][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) + + + a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM + b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM + + } + + ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm4); //B11[0-3][0] *alpha -= ymm4 + ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm5); //B01[0-3][1] *alpha -= ymm5 + ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm6); //B01[0-3][2] *alpha -= ymm6 + ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm7); //B01[0-3][3] *alpha -= ymm7 + + ///implement TRSM/// + //1st col + ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][0] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][0] + ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][0] + + //2nd col + a11 += cs_a; + ymm8 = _mm256_broadcast_sd((double const *)(a11 + 1)); //A11[1][1] + ymm9 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][1] + + //3rd col + a11 += cs_a; + ymm11 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][2] + ymm12 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][2] + + //4th col + a11 += cs_a; + ymm13 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][3] + //compute reciprocals of L(i,i) and broadcast in registers + ymm4 = _mm256_unpacklo_pd(ymm4, ymm8); //A11[0][0] A11[0][0] A11[2][2] A11[2][2] + ymm8 = _mm256_unpacklo_pd(ymm11, ymm13); //A11[1][1] A11[1][1] A11[3][3] A11[3][3] + + ymm14 = _mm256_broadcast_sd((double const *)&ones); + + ymm4 = _mm256_blend_pd(ymm4, ymm8, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm14 = _mm256_div_pd(ymm14, ymm4); //1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] + + ////unpacklow//// + ymm8 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] + ymm13 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] + + //rearrange low elements + ymm4 = _mm256_permute2f128_pd(ymm8,ymm13,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] + ymm11 = _mm256_permute2f128_pd(ymm8,ymm13,0x31);//B11[2][0] B11[2][1] B11[2][2] B11[2][3] +/* + mat_b_rearr[0] = _mm256_mul_pd(mat_b_rearr[0], alphaReg); + mat_b_rearr[2] = _mm256_mul_pd(mat_b_rearr[2], alphaReg); +*/ + ////unpackhigh//// + ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] + ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] + + //rearrange high elements + ymm8 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] + ymm13 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] +/* + mat_b_rearr[1] = _mm256_mul_pd(mat_b_rearr[1], alphaReg); + mat_b_rearr[3] = _mm256_mul_pd(mat_b_rearr[3], alphaReg); +*/ + //extract a00 + ymm15 = _mm256_permute_pd(ymm14, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0] + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + ymm4 = _mm256_mul_pd(ymm4, ymm15); //B11[0][0-3] /= A11[0][0] + + //extract diag a11 from a + ymm15 = _mm256_permute_pd(ymm14, 0x03); //1/A11[1][1] 1/A11[1][1] 1/A11[3][3] 1/A11[3][3] + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1] + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (3, 0) + ymm8 = _mm256_fnmadd_pd(ymm5, ymm4, ymm8);//d = c - (a*b) //B11[1][0-3] -= A11[1][0]*B11[0][0-3] + ymm11 = _mm256_fnmadd_pd(ymm6, ymm4, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][0]*B11[0][0-3] + ymm13 = _mm256_fnmadd_pd(ymm7, ymm4, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][0]*B11[0][0-3] + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + ymm8 = _mm256_mul_pd(ymm8, ymm15); //B11[1][0-3] /= A11[1][1] + + + //extract diag a22 from a + ymm15 = _mm256_permute_pd(ymm14, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2] + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + ymm11 = _mm256_fnmadd_pd(ymm9, ymm8, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][1]*B11[1][0-3] + ymm13 = _mm256_fnmadd_pd(ymm10, ymm8, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][1]*B11[1][0-3] + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + ymm11 = _mm256_mul_pd(ymm11, ymm15); //B11[2][0-3] /= A11[2][2] + + //extract diag a33 from a + ymm15 = _mm256_permute_pd(ymm14, 0x0C); //1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3] + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + ymm13 = _mm256_fnmadd_pd(ymm12, ymm11, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][2]*B11[2][0-3] + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + ymm13 = _mm256_mul_pd(ymm13, ymm15); //B11[3][0-3] /= A11[3][3] + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + ymm1 = _mm256_unpacklo_pd(ymm4, ymm8); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] + ymm3 = _mm256_unpacklo_pd(ymm11, ymm13); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] + + //rearrange low elements + ymm0 = _mm256_permute2f128_pd(ymm1,ymm3,0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm2 = _mm256_permute2f128_pd(ymm1,ymm3,0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + + ////unpackhigh//// + ymm14 = _mm256_unpackhi_pd(ymm4, ymm8); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] + + ymm15 = _mm256_unpackhi_pd(ymm11, ymm13); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] + + //rearrange high elements + ymm1 = _mm256_permute2f128_pd(ymm14,ymm15,0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm3 = _mm256_permute2f128_pd(ymm14,ymm15,0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b*2), ymm2); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b*3), ymm3); //store(B11[0-3][3]) + + } + if(m_remainder) //implementation for remainder rows(when 'M' is not a multiple of D_MR) + { + a10 = L +i; //pointer to block of A to be used for GEMM + a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM + b01 = B + j*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha + + k_iter = i / D_MR; //number of GEMM operations to be performed(in blocks of 4x4) + + ///GEMM for previously calculated values /// + + //load 4x4 block from b11 + ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + for(k = 0; k < k_iter; k++) //looop for number of GEMM operations + { + ptr_b01_dup = b01; + + ymm8 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] + ymm9 = _mm256_loadu_pd((double const *)(a10 + cs_a)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] + ymm10 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2)); //A10[0][2] A10[1][2] A10[2][2] A10[3][2] + ymm11 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) + + a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM + b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM + + } + + ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm4); //B11[0-3][0] *alpha -= ymm4 + ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm5); //B11[0-3][1] *alpha -= ymm5 + ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm6); //B11[0-3][2] *alpha -= ymm6 + ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm7); //B11[0-3][3] *alpha -= ymm7 + + ///implement TRSM/// + //1st col + ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][0] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][0] + ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][0] + + //2nd col + a11 += cs_a; + ymm8 = _mm256_broadcast_sd((double const *)(a11 + 1)); //A11[1][1] + ymm9 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][1] + + //3rd col + a11 += cs_a; + ymm11 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][2] + ymm12 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][2] + + //4th col + a11 += cs_a; + ymm13 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][3] + //compute reciprocals of L(i,i) and broadcast in registers + ymm4 = _mm256_unpacklo_pd(ymm4, ymm8); //A11[0][0] A11[0][0] A11[1][1] A11[1][1] + ymm8 = _mm256_unpacklo_pd(ymm11, ymm13); //A11[2][2] A11[2][2] A11[3][3] A11[3][3] + + ymm14 = _mm256_broadcast_sd((double const *)&ones); + + ymm4 = _mm256_blend_pd(ymm4, ymm8, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm14 = _mm256_div_pd(ymm14, ymm4); //1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] + + ////unpacklow//// + ymm8 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] + ymm13 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] + + //rearrange low elements + ymm4 = _mm256_permute2f128_pd(ymm8,ymm13,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] + ymm11 = _mm256_permute2f128_pd(ymm8,ymm13,0x31);//B11[2][0] B11[2][1] B11[2][2] B11[2][3] +/* + mat_b_rearr[0] = _mm256_mul_pd(mat_b_rearr[0], alphaReg); + mat_b_rearr[2] = _mm256_mul_pd(mat_b_rearr[2], alphaReg); +*/ + ////unpackhigh//// + ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] + ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] + + //rearrange high elements + ymm8 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] + ymm13 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] +/* + mat_b_rearr[1] = _mm256_mul_pd(mat_b_rearr[1], alphaReg); + mat_b_rearr[3] = _mm256_mul_pd(mat_b_rearr[3], alphaReg); +*/ + //extract a00 + ymm15 = _mm256_permute_pd(ymm14, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00);//1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0] + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + ymm4 = _mm256_mul_pd(ymm4, ymm15); //B11[0][0-3] /= A11[0][0] + + //extract diag a11 from a + ymm15 = _mm256_permute_pd(ymm14, 0x03); //1/A11[1][1] 1/A11[1][1] 1/A11[3][3] 1/A11[3][3] + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //1/A11[][] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1] + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (3, 0) + ymm8 = _mm256_fnmadd_pd(ymm5, ymm4, ymm8);//d = c - (a*b) //B11[1][0-3] -= A11[1][0]* B11[0][0-3] + ymm11 = _mm256_fnmadd_pd(ymm6, ymm4, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][0]* B11[0][0-3] + ymm13 = _mm256_fnmadd_pd(ymm7, ymm4, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][0]* B11[0][0-3] + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + ymm8 = _mm256_mul_pd(ymm8, ymm15); //B11[1][0-3] /= A11[1][1] + + + //extract diag a22 from a + ymm15 = _mm256_permute_pd(ymm14, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2] + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + ymm11 = _mm256_fnmadd_pd(ymm9, ymm8, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][1]* B11[1][0-3] + ymm13 = _mm256_fnmadd_pd(ymm10, ymm8, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][1]* B11[1][0-3] + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + ymm11 = _mm256_mul_pd(ymm11, ymm15); //B11[2][0-3] /= A11[2][2] + + //extract diag a33 from a + ymm15 = _mm256_permute_pd(ymm14, 0x0C); //1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3] + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + ymm13 = _mm256_fnmadd_pd(ymm12, ymm11, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][2]* B11[2][0-3] + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + ymm13 = _mm256_mul_pd(ymm13, ymm15); //B11[3][0-3] /= A11[3][3] + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + ymm1 = _mm256_unpacklo_pd(ymm4, ymm8); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] + ymm3 = _mm256_unpacklo_pd(ymm11, ymm13); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] + + //rearrange low elements + ymm0 = _mm256_permute2f128_pd(ymm1,ymm3,0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm2 = _mm256_permute2f128_pd(ymm1,ymm3,0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + + ////unpackhigh//// + ymm14 = _mm256_unpackhi_pd(ymm4, ymm8); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] + + ymm15 = _mm256_unpackhi_pd(ymm11, ymm13); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] + + //rearrange high elements + ymm1 = _mm256_permute2f128_pd(ymm14,ymm15,0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm3 = _mm256_permute2f128_pd(ymm14,ymm15,0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + //load 4x4 block from b11 + ymm4 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm5 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm6 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm7 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][3] B11[1][3] B11[2][2] B11[3][3] + + //determine correct values to store + + if(m_remainder == 3) + { + ymm0 = _mm256_blend_pd(ymm0, ymm4, 0x08); + ymm1 = _mm256_blend_pd(ymm1, ymm5, 0x08); + ymm2 = _mm256_blend_pd(ymm2, ymm6, 0x08); + ymm3 = _mm256_blend_pd(ymm3, ymm7, 0x08); + } + if(m_remainder == 2) + { + ymm0 = _mm256_permute2f128_pd(ymm0, ymm4,0x30); + ymm1 = _mm256_permute2f128_pd(ymm1, ymm5,0x30); + ymm2 = _mm256_permute2f128_pd(ymm2, ymm6,0x30); + ymm3 = _mm256_permute2f128_pd(ymm3, ymm7,0x30); + } + if(m_remainder == 1) + { + ymm0 = _mm256_blend_pd(ymm0, ymm4, 0x0E); + ymm1 = _mm256_blend_pd(ymm1, ymm5, 0x0E); + ymm2 = _mm256_blend_pd(ymm2, ymm6, 0x0E); + ymm3 = _mm256_blend_pd(ymm3, ymm7, 0x0E); + } + + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[0-3][3]) + + } + + n_remainder -= 4; + j += 4; + + } + + if(n_remainder) //implementation fo remaining columns(when 'N' is not a multiple of D_NR) + { + for(i = 0;i+D_MR-1 < m; i += D_MR) //loop along 'M' direction + { + a10 = L +i; //pointer to block of A to be used for GEMM + a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM + b01 = B + j*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM + + k_iter = i / D_MR; //number of GEMM operations to be performed(in blocks of 4x4) + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha Value + + ///GEMM for previously calculated values /// + + //load 4x4 block from b11 + if(n_remainder == 3) + { + ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm3 = _mm256_broadcast_sd((double const *)&ones); + } + if(n_remainder == 2) + { + ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_broadcast_sd((double const *)&ones); + ymm3 = _mm256_broadcast_sd((double const *)&ones); + } + if(n_remainder == 1) + { + ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_broadcast_sd((double const *)&ones); + ymm2 = _mm256_broadcast_sd((double const *)&ones); + ymm3 = _mm256_broadcast_sd((double const*)&ones); + } + + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + for(k = 0; k < k_iter; k++) + { + ptr_b01_dup = b01; + ymm8 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] + ymm9 = _mm256_loadu_pd((double const *)(a10 + cs_a)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] + ymm10 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2)); //A10[0][2] A10[1][2] A10[2][2] A10[3][2] + ymm11 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) + + a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM + b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM + } + + ///GEMM code ends/// + + ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm4); //B11[0-3][0] *alpha -= ymm4 + ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm5); //B11[0-3][1] *alpha -= ymm5 + ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm6); //B11[0-3][2] *alpha -= ymm6 + ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm7); //B11[0-3][3] *alpha -= ymm7 + + ///implement TRSM/// + //1st col + ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][0] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][0] + ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][0] + + //2nd col + a11 += cs_a; + ymm8 = _mm256_broadcast_sd((double const *)(a11 + 1)); //A11[1][1] + ymm9 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][1] + + //3rd col + a11 += cs_a; + ymm11 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][2] + ymm12 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][2] + + //4th col + a11 += cs_a; + ymm13 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][3] + //compute reciprocals of L(i,i) and broadcast in registers + ymm4 = _mm256_unpacklo_pd(ymm4, ymm8); //A11[0][0] A11[0][0] A11[1][1] A11[1][1] + ymm8 = _mm256_unpacklo_pd(ymm11, ymm13); //A11[2][2] A11[2][2] A11[3][3] A11[3][3] + + ymm14 = _mm256_broadcast_sd((double const *)&ones); + + ymm4 = _mm256_blend_pd(ymm4, ymm8, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm14 = _mm256_div_pd(ymm14, ymm4); //1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] + + ////unpacklow//// + ymm8 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] + ymm13 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] + + //rearrange low elements + ymm4 = _mm256_permute2f128_pd(ymm8,ymm13,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] + ymm11 = _mm256_permute2f128_pd(ymm8,ymm13,0x31);//B11[2][0] B11[2][1] B11[2][2] B11[2][3] +/* + mat_b_rearr[0] = _mm256_mul_pd(mat_b_rearr[0], alphaReg); + mat_b_rearr[2] = _mm256_mul_pd(mat_b_rearr[2], alphaReg); +*/ + ////unpackhigh//// + ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] + ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] + + //rearrange high elements + ymm8 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] + ymm13 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] +/* + mat_b_rearr[1] = _mm256_mul_pd(mat_b_rearr[1], alphaReg); + mat_b_rearr[3] = _mm256_mul_pd(mat_b_rearr[3], alphaReg); +*/ + //extract a00 + ymm15 = _mm256_permute_pd(ymm14, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0] + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + ymm4 = _mm256_mul_pd(ymm4, ymm15); //B11[0][0-3] /= A11[0][0] + + //extract diag a11 from a + ymm15 = _mm256_permute_pd(ymm14, 0x03); //1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2] + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1] + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (3, 0) + ymm8 = _mm256_fnmadd_pd(ymm5, ymm4, ymm8);//d = c - (a*b) //B11[1][0-3] -= A11[1][0] * B11[0][0-3] + ymm11 = _mm256_fnmadd_pd(ymm6, ymm4, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][0] * B11[0][0-3] + ymm13 = _mm256_fnmadd_pd(ymm7, ymm4, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][0] * B11[0][0-3] + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + ymm8 = _mm256_mul_pd(ymm8, ymm15); //B11[1][0-3] /= A11[1][1] + + + //extract diag a22 from a + ymm15 = _mm256_permute_pd(ymm14, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2] + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + ymm11 = _mm256_fnmadd_pd(ymm9, ymm8, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][1] * B11[1][0-3] + ymm13 = _mm256_fnmadd_pd(ymm10, ymm8, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][1] * B11[1][0-3] + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + ymm11 = _mm256_mul_pd(ymm11, ymm15); //B11[2][0-3] /= A11[2][2] + + //extract diag a33 from a + ymm15 = _mm256_permute_pd(ymm14, 0x0C); //1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3] + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + ymm13 = _mm256_fnmadd_pd(ymm12, ymm11, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][2] * B11[2][0-3] + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + ymm13 = _mm256_mul_pd(ymm13, ymm15); //B11[3][0-3] /= A11[3][3] + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + ymm1 = _mm256_unpacklo_pd(ymm4, ymm8); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] + ymm3 = _mm256_unpacklo_pd(ymm11, ymm13); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] + + //rearrange low elements + ymm0 = _mm256_permute2f128_pd(ymm1,ymm3,0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm2 = _mm256_permute2f128_pd(ymm1,ymm3,0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + + ////unpackhigh//// + ymm14 = _mm256_unpackhi_pd(ymm4, ymm8); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] + + ymm15 = _mm256_unpackhi_pd(ymm11, ymm13); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] + + //rearrange high elements + ymm1 = _mm256_permute2f128_pd(ymm14,ymm15,0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm3 = _mm256_permute2f128_pd(ymm14,ymm15,0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store(B11[0-3][2]) + + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) + + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) + } + + } + if(m_remainder) //implementation for remainder rows(when 'M' is not a multiple of D_MR) + { + a10 = L +i; //pointer to block of A to be used for GEMM + a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM + b01 = B + j*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM + + + k_iter = i / D_MR; //number of times GEMM operations to be performed + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to hold alpha value + + ///GEMM for previously calculated values /// + + + //load 4x4 block from b11 + if(n_remainder == 3) + { + ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm3 = _mm256_broadcast_sd((double const *)&ones); + } + if(n_remainder == 2) + { + ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_broadcast_sd((double const *)&ones); + ymm3 = _mm256_broadcast_sd((double const *)&ones); + } + if(n_remainder == 1) + { + ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_broadcast_sd((double const *)&ones); + ymm2 = _mm256_broadcast_sd((double const *)&ones); + ymm3 = _mm256_broadcast_sd((double const *)&ones); + } + + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_b01_dup = b01; + ymm8 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] + ymm9 = _mm256_loadu_pd((double const *)(a10 + cs_a)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] + ymm10 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2)); //A10[0][2] A10[1][2] A10[2][2] A10[3][2] + ymm11 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B10[0][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B10[0][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B10[0][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B10[0][3] + + b01 += 1; //move to next row of B + + ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B10[1][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B10[1][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B10[1][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B10[1][3] + + b01 += 1; //move to next row of B + + ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B10[2][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B10[2][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B10[2][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B10[2][3] + + b01 += 1; //move to next row of B + + + ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B10[3][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B10[3][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B10[3][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B10[3][3] + + b01 += 1; //move to next row of B + + ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) + + a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM + b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM + + } + + ymm8 = _mm256_fmsub_pd(ymm0, ymm16, ymm4); //B11[0-3][0] * alpha -= ymm4 + ymm9 = _mm256_fmsub_pd(ymm1, ymm16, ymm5); //B11[0-3][1] * alpha -= ymm5 + ymm10 = _mm256_fmsub_pd(ymm2, ymm16, ymm6); //B11[0-3][2] * alpha -= ymm6 + ymm11 = _mm256_fmsub_pd(ymm3, ymm16, ymm7); //B11[0-3][3] * alpha -= ymm7 + + ///implement TRSM/// + //determine correct values to store + if(m_remainder == 3) + { + ymm0 = _mm256_blend_pd(ymm8, ymm0, 0x08); + ymm1 = _mm256_blend_pd(ymm9, ymm1, 0x08); + ymm2 = _mm256_blend_pd(ymm10, ymm2, 0x08); + ymm3 = _mm256_blend_pd(ymm11, ymm3, 0x08); + + } + if(m_remainder == 2) + { + ymm0 = _mm256_permute2f128_pd(ymm8, ymm0, 0x30); + ymm1 = _mm256_permute2f128_pd(ymm9, ymm1, 0x30); + ymm2 = _mm256_permute2f128_pd(ymm10, ymm2, 0x30); + ymm3 = _mm256_permute2f128_pd(ymm11, ymm3, 0x30); + + } + if(m_remainder == 1) + { + ymm0 = _mm256_blend_pd(ymm8, ymm0, 0x0E); + ymm1 = _mm256_blend_pd(ymm9, ymm1, 0x0E); + ymm2 = _mm256_blend_pd(ymm10, ymm2, 0x0E); + ymm3 = _mm256_blend_pd(ymm11, ymm3, 0x0E); + } + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store(B11[0-3][2]) + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) + } + + ///scalar code for trsm without alpha/// + dtrsm_small_AlXB(a11, b11, m_remainder, n_remainder, cs_a, cs_b); + } + } + return BLIS_SUCCESS; +} + +/* TRSM for the case AX = alpha * B, Double precision + * A is lower-triangular, no-transpose, unit diagonal + * dimensions A: mxm X: mxn B: mxn + + b01---> + * ***************** + ** * * * * * + * * * * * * * + * * *b01* * * * + * * * * * * * +a10 ****** b11 ***************** + | * * * | * * * * * + | * * * | * * * * * + | *a10*a11* | *b11* * * * + v * * * v * * * * * + *********** ***************** + * * * * * * * * * + * * * * * * * * * + * * * * * * * * * + * * * * * * * * * + **************** ***************** + a11---> +*/ + +static err_t bli_dtrsm_small_AlXB_unitDiag( + side_t side, + obj_t* AlphaObj, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ) +{ + + dim_t D_MR = 4; //size of block along 'M' dimpension + dim_t D_NR = 8; //size of block along 'N' dimension + + dim_t m = bli_obj_length(b); // number of rows of matrix B + dim_t n = bli_obj_width(b); // number of columns of matrix B + + if(max(m,n) > 90) + return BLIS_NOT_YET_IMPLEMENTED; + + dim_t m_remainder = m % D_MR; //number of remainder rows + dim_t n_remainder = n % D_NR; //number of remainder columns + + dim_t cs_a = bli_obj_col_stride(a); // column stride of A + dim_t cs_b = bli_obj_col_stride(b); // column stride of B + + dim_t i, j, k; //loop variables + dim_t k_iter; //number of times GEMM to be performed + + double AlphaVal = *(double *)AlphaObj->buffer; //value of alpha + double *L = a->buffer; //pointer to matrix A + double *B = b->buffer; //pointer to matrix B + + double *a10, *a11, *b01, *b11; //pointers that point to blocks for GEMM and TRSM + double *ptr_b01_dup; + + double ones = 1.0; + + //scratch registers + __m256d ymm0, ymm1, ymm2, ymm3; + __m256d ymm4, ymm5, ymm6, ymm7; + __m256d ymm8, ymm9, ymm10, ymm11; + __m256d ymm12, ymm13, ymm14, ymm15; + __m256d ymm16; + + + + for(j = 0; j+D_NR-1 < n; j += D_NR) //loop along 'N' dimension + { + for(i = 0;i+D_MR-1 < m; i += D_MR) //loop along 'M' dimension + { + a10 = L +i; //pointer to block of A to be used for GEMM + a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM + b01 = B + j*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM + + k_iter = i / D_MR; //number of times GEMM to be performed(in blocks of 4x4) + + ymm8 = _mm256_setzero_pd(); + ymm9 = _mm256_setzero_pd(); + ymm10 = _mm256_setzero_pd(); + ymm11 = _mm256_setzero_pd(); + ymm12 = _mm256_setzero_pd(); + ymm13 = _mm256_setzero_pd(); + ymm14 = _mm256_setzero_pd(); + ymm15 = _mm256_setzero_pd(); + + ///GEMM code begins/// + + for(k = 0; k< k_iter; k++) //loop for number of GEMM operations + { + ptr_b01_dup = b01; + + ymm16 = _mm256_loadu_pd((double const *)(a10));//A10[0][0] A10[1][0] A10[2][0] A10[3][0] + + ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] + ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] + ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] + ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] + + ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[0][4] + ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[0][5] + ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[0][6] + ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[0][7] + + b01 += 1; //mobe to next row of B + + ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) + ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) + ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) + ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) + + ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[0][4]*A10[0][0] B01[0][4]*A10[1][0] B01[0][4]*A10[2][0] B01[0][4]*A10[3][0]) + ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[0][5]*A10[0][0] B01[0][5]*A10[1][0] B01[0][5]*A10[2][0] B01[0][5]*A10[3][0]) + ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[0][6]*A10[0][0] B01[0][6]*A10[1][0] B01[0][6]*A10[2][0] B01[0][6]*A10[3][0]) + ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[0][7]*A10[0][0] B01[0][7]*A10[1][0] B01[0][7]*A10[2][0] B01[0][7]*A10[3][0]) + + ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a));//A10[0][1] A10[1][1] A10[2][1] A10[3][1] + + ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] + ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] + ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] + ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] + + ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[1][4] + ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[1][5] + ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[1][6] + ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[1][7] + + b01 += 1; //mobe to next row of B + + ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) + ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) + ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) + ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) + + ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[1][4]*A10[0][1] B01[1][4]*A10[1][1] B01[1][4]*A10[2][1] B01[1][4]*A10[3][1]) + ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[1][5]*A10[0][1] B01[1][5]*A10[1][1] B01[1][5]*A10[2][1] B01[1][5]*A10[3][1]) + ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[1][6]*A10[0][1] B01[1][6]*A10[1][1] B01[1][6]*A10[2][1] B01[1][6]*A10[3][1]) + ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[1][7]*A10[0][1] B01[1][7]*A10[1][1] B01[1][7]*A10[2][1] B01[1][7]*A10[3][1]) + + ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2));//A10[0][2] A10[1][2] A10[2][2] A10[3][2] + + ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] + ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] + ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] + ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] + + ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[2][4] + ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[2][5] + ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[2][6] + ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[2][7] + + b01 += 1; //mobe to next row of B + + ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) + ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) + ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) + ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) + + ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[2][4]*A10[0][2] B01[2][4]*A10[1][2] B01[2][4]*A10[2][2] B01[2][4]*A10[3][2]) + ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[2][5]*A10[0][2] B01[2][5]*A10[1][2] B01[2][5]*A10[2][2] B01[2][5]*A10[3][2]) + ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[2][6]*A10[0][2] B01[2][6]*A10[1][2] B01[2][6]*A10[2][2] B01[2][6]*A10[3][2]) + ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[2][7]*A10[0][2] B01[2][7]*A10[1][2] B01[2][7]*A10[2][2] B01[2][7]*A10[3][2]) + + ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3));//A10[0][3] A10[1][3] A10[2][3] A10[3][3] + + ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] + ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] + ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] + ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] + + ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[3][4] + ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[3][5] + ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[3][6] + ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[3][7] + + b01 += 1; //mobe to next row of B + + ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[3][0]*A10[0][3] B01[3][0]*A10[3][0] B01[3][0]*A10[2][3] B01[3][0]*A10[3][0]) + ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[3][1]*A10[0][3] B01[3][1]*A10[3][0] B01[3][1]*A10[2][3] B01[3][1]*A10[3][0]) + ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[3][2]*A10[0][3] B01[3][2]*A10[3][0] B01[3][2]*A10[2][3] B01[3][2]*A10[3][0]) + ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[3][3]*A10[0][3] B01[3][3]*A10[3][0] B01[3][3]*A10[2][3] B01[3][3]*A10[3][0]) + + ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[3][4]*A10[0][3] B01[3][4]*A10[3][0] B01[3][4]*A10[2][3] B01[3][4]*A10[3][3]) + ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[3][5]*A10[0][3] B01[3][5]*A10[3][0] B01[3][5]*A10[2][3] B01[3][5]*A10[3][3]) + ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[3][6]*A10[0][3] B01[3][6]*A10[3][0] B01[3][6]*A10[2][3] B01[3][6]*A10[3][3]) + ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[3][7]*A10[0][3] B01[3][7]*A10[3][0] B01[3][7]*A10[2][3] B01[3][7]*A10[3][3]) + + a10 += D_MR * cs_a; //pointer math to calculate next block of A for GEMM + b01 = ptr_b01_dup + D_MR; //pointer math to calculate next block of B for GEMM + } + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to hold alpha + + ymm0 = _mm256_loadu_pd((double const *)(b11 + cs_b *0)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b *1)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b *2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b *3)); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm4 = _mm256_loadu_pd((double const *)(b11 + cs_b *4)); //B11[0][4] B11[1][4] B11[2][4] B11[3][4] + ymm5 = _mm256_loadu_pd((double const *)(b11 + cs_b *5)); //B11[0][5] B11[1][5] B11[2][5] B11[3][5] + ymm6 = _mm256_loadu_pd((double const *)(b11 + cs_b *6)); //B11[0][6] B11[1][6] B11[2][6] B11[3][6] + ymm7 = _mm256_loadu_pd((double const *)(b11 + cs_b *7)); //B11[0][7] B11[1][7] B11[2][7] B11[3][7] + + ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm8); //B11[0-3][0] * alpha -= B01[0-3][0] + ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm9); //B11[0-3][1] * alpha -= B01[0-3][1] + ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm10); //B11[0-3][2] * alpha -= B01[0-3][2] + ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm11); //B11[0-3][3] * alpha -= B01[0-3][3] + ymm4 = _mm256_fmsub_pd(ymm4, ymm16, ymm12); //B11[0-3][4] * alpha -= B01[0-3][4] + ymm5 = _mm256_fmsub_pd(ymm5, ymm16, ymm13); //B11[0-3][5] * alpha -= B01[0-3][5] + ymm6 = _mm256_fmsub_pd(ymm6, ymm16, ymm14); //B11[0-3][6] * alpha -= B01[0-3][6] + ymm7 = _mm256_fmsub_pd(ymm7, ymm16, ymm15); //B11[0-3][7] * alpha -= B01[0-3][7] + + ///implement TRSM/// + + ///transpose of B11// + ///unpacklow/// + ymm9 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] + ymm11 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] + + ymm13 = _mm256_unpacklo_pd(ymm4, ymm5); //B11[0][4] B11[0][5] B11[2][4] B11[2][5] + ymm15 = _mm256_unpacklo_pd(ymm6, ymm7); //B11[0][6] B11[0][7] B11[2][6] B11[2][7] + + //rearrange low elements + ymm8 = _mm256_permute2f128_pd(ymm9,ymm11,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] + ymm10 = _mm256_permute2f128_pd(ymm9,ymm11,0x31); //B11[2][0] B11[2][1] B11[2][2] B11[2][3] + + ymm12 = _mm256_permute2f128_pd(ymm13,ymm15,0x20); //B11[4][0] B11[4][1] B11[4][2] B11[4][3] + ymm14 = _mm256_permute2f128_pd(ymm13,ymm15,0x31); //B11[6][0] B11[6][1] B11[6][2] B11[6][3] + + ////unpackhigh//// + ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] + ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] + + ymm4 = _mm256_unpackhi_pd(ymm4, ymm5); //B11[1][4] B11[1][5] B11[3][4] B11[3][5] + ymm5 = _mm256_unpackhi_pd(ymm6, ymm7); //B11[1][6] B11[1][7] B11[3][6] B11[3][7] + + //rearrange high elements + ymm9 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] + ymm11 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] + + ymm13 = _mm256_permute2f128_pd(ymm4,ymm5,0x20); //B11[5][0] B11[5][1] B11[5][2] B11[5][3] + ymm15 = _mm256_permute2f128_pd(ymm4,ymm5,0x31); //B11[7][0] B11[7][1] B11[7][2] B11[7][3] + + //broadcast diagonal elements of A11 + ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_b +1)); //A11[1][1] + ymm3 = _mm256_broadcast_sd((double const *)(a11+cs_b*2 + 2)); //A11[2][2] + ymm4 = _mm256_broadcast_sd((double const *)(a11+cs_b*3 + 3)); //A11[3][3] + + ymm2 = _mm256_broadcast_sd((double const *)(a11 +1)); //A11[1][0] + ymm3 = _mm256_broadcast_sd((double const *)(a11 +2)); //A11[2][0] + ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][0] + + a11 += cs_a; + + //(Row1): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm2, ymm8, ymm9); //B11[1][0-3] -= A11[1][0] * B11[0-3][0] + ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[2][0-3] -= A11[2][0] * B11[0-3][0] + ymm11 = _mm256_fnmadd_pd(ymm4, ymm8, ymm11); //B11[3][0-3] -= A11[3][0] * B11[0-3][0] + + ymm13 = _mm256_fnmadd_pd(ymm2, ymm12, ymm13); //B11[5][0-3] -= A11[1][0] * B11[0-3][4] + ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[6][0-3] -= A11[2][0] * B11[0-3][4] + ymm15 = _mm256_fnmadd_pd(ymm4, ymm12, ymm15); //B11[7][0-3] -= A11[3][0] * B11[0-3][4] + + ymm3 = _mm256_broadcast_sd((double const *)(a11 +2)); //A11[2][1] + ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][1] + + a11 += cs_a; + + //(ROw2): FMA operations + ymm10 = _mm256_fnmadd_pd(ymm3, ymm9, ymm10); //B11[2][0-3] -= A11[2][1] * B11[0-3][1] + ymm11 = _mm256_fnmadd_pd(ymm4, ymm9, ymm11); //B11[3][0-3] -= A11[3][1] * B11[0-3][1] + + ymm14 = _mm256_fnmadd_pd(ymm3, ymm13, ymm14); //B11[6][0-3] -= A11[2][1] * B11[0-3][5] + ymm15 = _mm256_fnmadd_pd(ymm4, ymm13, ymm15); //B11[7][0-3] -= A11[3][1] * B11[0-3][5] + + ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][2] + + a11 += cs_a; + + //(ROw2): FMA operations + ymm11 = _mm256_fnmadd_pd(ymm4, ymm10, ymm11); //B11[3][0-3] -= A11[3][2] * B11[0-3][2] + + ymm15 = _mm256_fnmadd_pd(ymm4, ymm14, ymm15); //B11[7][0-3] -= A11[3][2] * B11[0-3][6] + + //unpacklow// + ymm1 = _mm256_unpacklo_pd(ymm8, ymm9); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] + ymm3 = _mm256_unpacklo_pd(ymm10, ymm11); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] + + ymm5 = _mm256_unpacklo_pd(ymm12, ymm13); //B11[4][0] B11[5][0] B11[4][2] B11[5][2] + ymm7 = _mm256_unpacklo_pd(ymm14, ymm15); //B11[6][0] B11[7][0] B11[6][2] B11[7][2] + + //rearrange low elements + ymm0 = _mm256_permute2f128_pd(ymm1, ymm3, 0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm2 = _mm256_permute2f128_pd(ymm1, ymm3, 0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + + ymm4 = _mm256_permute2f128_pd(ymm5, ymm7, 0x20); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] + ymm6 = _mm256_permute2f128_pd(ymm5, ymm7, 0x31); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] + + ///unpack high/// + ymm8 = _mm256_unpackhi_pd(ymm8, ymm9); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] + ymm9 = _mm256_unpackhi_pd(ymm10, ymm11); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] + + ymm12 = _mm256_unpackhi_pd(ymm12, ymm13); //B11[4][1] B11[5][1] B11[4][3] B11[5][3] + ymm13 = _mm256_unpackhi_pd(ymm14, ymm15); //B11[6][1] B11[7][1] B11[6][3] B11[7][3] + + //rearrange high elements + ymm1 = _mm256_permute2f128_pd(ymm8, ymm9, 0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm3 = _mm256_permute2f128_pd(ymm8, ymm9, 0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + ymm5 = _mm256_permute2f128_pd(ymm12, ymm13, 0x20); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] + ymm7 = _mm256_permute2f128_pd(ymm12, ymm13, 0x31); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] + + _mm256_storeu_pd((double *)(b11 + cs_b * 0), ymm0); //store B11[0][0-3] + _mm256_storeu_pd((double *)(b11 + cs_b * 1), ymm1); //store B11[1][0-3] + _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store B11[2][0-3] + _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store B11[3][0-3] + _mm256_storeu_pd((double *)(b11 + cs_b * 4), ymm4); //store B11[4][0-3] + _mm256_storeu_pd((double *)(b11 + cs_b * 5), ymm5); //store B11[5][0-3] + _mm256_storeu_pd((double *)(b11 + cs_b * 6), ymm6); //store B11[6][0-3] + _mm256_storeu_pd((double *)(b11 + cs_b * 7), ymm7); //store B11[7][0-3] + } + + if(m_remainder) //implementation for reamainder rows(when 'M' is not a multiple of D_MR) + { + a10 = L +i; //pointer to block of A to be used for GEMM + a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM + b01 = B + j*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM + + k_iter = i / D_MR; //number of times GEMM operation to be done(in blocks of 4x4) + + ymm8 = _mm256_setzero_pd(); + ymm9 = _mm256_setzero_pd(); + ymm10 = _mm256_setzero_pd(); + ymm11 = _mm256_setzero_pd(); + ymm12 = _mm256_setzero_pd(); + ymm13 = _mm256_setzero_pd(); + ymm14 = _mm256_setzero_pd(); + ymm15 = _mm256_setzero_pd(); + + ///GEMM code Begins/// + for(k = 0; k< k_iter; k++) //loop for number of GEMM operations + { + ptr_b01_dup = b01; + + ymm16 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] + + ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] + ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] + ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] + ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] + + ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[0][4] + ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[0][5] + ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[0][6] + ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[0][7] + + b01 += 1; //move to next row of B + + ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0] ) + ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) + ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) + ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) + + ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[0][4]*A10[0][0] B01[0][4]*A10[1][0] B01[0][4]*A10[2][0] B01[0][4]*A10[3][0]) + ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[0][5]*A10[0][0] B01[0][5]*A10[1][0] B01[0][5]*A10[2][0] B01[0][5]*A10[3][0]) + ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[0][6]*A10[0][0] B01[0][6]*A10[1][0] B01[0][6]*A10[2][0] B01[0][6]*A10[3][0]) + ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm16 += (B01[0][7]*A10[0][0] B01[0][7]*A10[1][0] B01[0][7]*A10[2][0] B01[0][7]*A10[3][0]) + + ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 1)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] + + ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] + ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] + ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] + ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] + + ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[1][4] + ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[1][5] + ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[1][6] + ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[1][7] + + b01 += 1; //move to next row of B01 + + ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) + ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) + ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) + ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) + + ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[1][4]*A10[0][1] B01[1][4]*A10[1][1] B01[1][4]*A10[2][1] B01[1][4]*A10[3][1]) + ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[1][5]*A10[0][1] B01[1][5]*A10[1][1] B01[1][5]*A10[2][1] B01[1][5]*A10[3][1]) + ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[1][6]*A10[0][1] B01[1][6]*A10[1][1] B01[1][6]*A10[2][1] B01[1][6]*A10[3][1]) + ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[1][7]*A10[0][1] B01[1][7]*A10[1][1] B01[1][7]*A10[2][1] B01[1][7]*A10[3][1]) + + ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2)); //A10[0][2] //A10[1][2] A10[2][2] A10[3][2] + + ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] + ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] + ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] + ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] + + ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[2][4] + ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[2][5] + ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[2][6] + ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[2][7] + + b01 += 1; //move to next row of B + + ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) + ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) + ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) + ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) + + ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[2][4]*A10[0][2] B01[2][4]*A10[1][2] B01[2][4]*A10[2][2] B01[2][0]*A10[3][2]) + ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[2][5]*A10[0][2] B01[2][5]*A10[1][2] B01[2][5]*A10[2][2] B01[2][1]*A10[3][2]) + ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[2][6]*A10[0][2] B01[2][6]*A10[1][2] B01[2][6]*A10[2][2] B01[2][2]*A10[3][2]) + ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[2][7]*A10[0][2] B01[2][7]*A10[1][2] B01[2][7]*A10[2][2] B01[2][3]*A10[3][2]) + + ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] + + ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] + ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] + ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] + ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] + + ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[3][4] + ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[3][5] + ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[3][6] + ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[3][7] + + b01 += 1; //move to next row of B + + ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) + ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm8 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) + ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm8 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) + ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm8 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) + + ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm8 += (B01[3][0]*A10[0][3] B01[3][4]*A10[1][3] B01[3][4]*A10[2][3] B01[3][4]*A10[3][3]) + ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm8 += (B01[3][1]*A10[0][3] B01[3][5]*A10[1][3] B01[3][5]*A10[2][3] B01[3][5]*A10[3][3]) + ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm8 += (B01[3][2]*A10[0][3] B01[3][6]*A10[1][3] B01[3][6]*A10[2][3] B01[3][6]*A10[3][3]) + ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm8 += (B01[3][3]*A10[0][3] B01[3][7]*A10[1][3] B01[3][7]*A10[2][3] B01[3][7]*A10[3][3]) + + a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM + b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM + } + + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha value + + ymm0 = _mm256_loadu_pd((double const *)(b11 + cs_b *0)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b *1)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b *2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b *3)); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm4 = _mm256_loadu_pd((double const *)(b11 + cs_b *4)); //B11[0][4] B11[1][4] B11[2][4] B11[3][4] + ymm5 = _mm256_loadu_pd((double const *)(b11 + cs_b *5)); //B11[0][5] B11[1][5] B11[2][5] B11[3][5] + ymm6 = _mm256_loadu_pd((double const *)(b11 + cs_b *6)); //B11[0][6] B11[1][6] B11[2][6] B11[3][6] + ymm7 = _mm256_loadu_pd((double const *)(b11 + cs_b *7)); //B11[0][7] B11[1][7] B11[2][7] B11[3][7] + + ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm8); //B11[0-3][0] *alpha -= B01[0-3][0] + ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm9); //B11[0-3][1] *alpha -= B01[0-3][1] + ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm10); //B11[0-3][2] *alpha -= B01[0-3][2] + ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm11); //B11[0-3][3] *alpha -= B01[0-3][3] + ymm4 = _mm256_fmsub_pd(ymm4, ymm16, ymm12); //B11[0-3][4] *alpha -= B01[0-3][4] + ymm5 = _mm256_fmsub_pd(ymm5, ymm16, ymm13); //B11[0-3][5] *alpha -= B01[0-3][5] + ymm6 = _mm256_fmsub_pd(ymm6, ymm16, ymm14); //B11[0-3][6] *alpha -= B01[0-3][6] + ymm7 = _mm256_fmsub_pd(ymm7, ymm16, ymm15); //B11[0-3][7] *alpha -= B01[0-3][7] + + ///implement TRSM/// + + ///unpacklow/// + ymm9 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] + ymm11 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] + + ymm13 = _mm256_unpacklo_pd(ymm4, ymm5); //B11[0][4] B11[0][5] B11[1][4] B11[1][5] + ymm15 = _mm256_unpacklo_pd(ymm6, ymm7); //B11[0][6] B11[0][7] B11[1][6] B11[1][7] + + //rearrange low elements + ymm8 = _mm256_permute2f128_pd(ymm9,ymm11,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] + ymm10 = _mm256_permute2f128_pd(ymm9,ymm11,0x31); //B11[2][0] B11[2][1] B11[2][2] B11[2][3] + + ymm12 = _mm256_permute2f128_pd(ymm13,ymm15,0x20); //B11[4][0] B11[4][1] B11[4][2] B11[4][3] + ymm14 = _mm256_permute2f128_pd(ymm13,ymm15,0x31); //B11[6][0] B11[6][1] B11[6][2] B11[6][3] + + ////unpackhigh//// + ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] + ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] + + ymm4 = _mm256_unpackhi_pd(ymm4, ymm5); //B11[5][0] B11[5][1] B11[7][0] B11[7][1] + ymm5 = _mm256_unpackhi_pd(ymm6, ymm7); //B11[5][2] B11[5][3] B11[7][2] B11[7][3] + + //rearrange high elements + ymm9 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] + ymm11 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] + + ymm13 = _mm256_permute2f128_pd(ymm4,ymm5,0x20); //B11[5][0] B11[5][1] B11[5][2] B11[5][3] + ymm15 = _mm256_permute2f128_pd(ymm4,ymm5,0x31); //B11[7][0] B11[7][1] B11[7][2] B11[7][3] + + //broadcast diagonal elements of A11 + ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_b +1)); //A11[1][1] + ymm3 = _mm256_broadcast_sd((double const *)(a11+cs_b*2 + 2)); //A11[2][2] + ymm4 = _mm256_broadcast_sd((double const *)(a11+cs_b*3 + 3)); //A11[3][3] + + ymm2 = _mm256_broadcast_sd((double const *)(a11 +1)); //A11[1][0] + ymm3 = _mm256_broadcast_sd((double const *)(a11 +2)); //A11[2][0] + ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][0] + + a11 += cs_a; + + //(Row1): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm2, ymm8, ymm9); //B11[1][0-3] -= B11[0-3][0]*A11[1][0] + ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[2][0-3] -= B11[0-3][0]*A11[2][0] + ymm11 = _mm256_fnmadd_pd(ymm4, ymm8, ymm11); //B11[3][0-3] -= B11[0-3][0]*A11[3][0] + + ymm13 = _mm256_fnmadd_pd(ymm2, ymm12, ymm13); //B11[5][0-3] -= B11[0-3][4]*A11[1][4] + ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[6][0-3] -= B11[0-3][4]*A11[2][4] + ymm15 = _mm256_fnmadd_pd(ymm4, ymm12, ymm15); //B11[7][0-3] -= B11[0-3][4]*A11[3][4] + + ymm3 = _mm256_broadcast_sd((double const *)(a11 +2)); //A11[2][1] + ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][1] + + a11 += cs_a; + + //(ROw2): FMA operations + ymm10 = _mm256_fnmadd_pd(ymm3, ymm9, ymm10); //B11[2][0-3] -= A11[2][1] * B11[0-3][1] + ymm11 = _mm256_fnmadd_pd(ymm4, ymm9, ymm11); //B11[3][0-3] -= A11[3][1] * B11[0-3][1] + + ymm14 = _mm256_fnmadd_pd(ymm3, ymm13, ymm14); //B11[6][0-3] -= A11[2][1] * B11[0-3][5] + ymm15 = _mm256_fnmadd_pd(ymm4, ymm13, ymm15); //B11[7][0-3] -= A11[3][1] * B11[0-3][5] + + ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][2] + + a11 += cs_a; + + //(ROw2): FMA operations + ymm11 = _mm256_fnmadd_pd(ymm4, ymm10, ymm11); //B11[0-3][3] -= A11[3][2]*B11[0-3][2] + + ymm15 = _mm256_fnmadd_pd(ymm4, ymm14, ymm15); //B11[0-3][7] -= A11[3][2]*B11[0-3][6] + + //unpacklow// + ymm1 = _mm256_unpacklo_pd(ymm8, ymm9); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] + ymm3 = _mm256_unpacklo_pd(ymm10, ymm11); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] + + ymm5 = _mm256_unpacklo_pd(ymm12, ymm13); //B11[4][0] B11[5][0] B11[4][2] B11[5][2] + ymm7 = _mm256_unpacklo_pd(ymm14, ymm15); //B11[6][0] B11[7][0] B11[6][2] B11[7][2] + + //rearrange low elements + ymm0 = _mm256_permute2f128_pd(ymm1, ymm3, 0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm2 = _mm256_permute2f128_pd(ymm1, ymm3, 0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + + ymm4 = _mm256_permute2f128_pd(ymm5, ymm7, 0x20); //B11[0][4] B11[1][4] B11[2][4] B11[3][4] + ymm6 = _mm256_permute2f128_pd(ymm5, ymm7, 0x31); //B11[0][6] B11[1][6] B11[2][6] B11[3][6] + + ///unpack high/// + ymm8 = _mm256_unpackhi_pd(ymm8, ymm9); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] + ymm9 = _mm256_unpackhi_pd(ymm10, ymm11); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] + + ymm12 = _mm256_unpackhi_pd(ymm12, ymm13); //B11[0][5] B11[1][5] B11[0][7] B11[1][7] + ymm13 = _mm256_unpackhi_pd(ymm14, ymm15); //B11[2][5] B11[3][5] B11[2][7] B11[3][7] + + //rearrange high elements + ymm1 = _mm256_permute2f128_pd(ymm8, ymm9, 0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm3 = _mm256_permute2f128_pd(ymm8, ymm9, 0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + ymm5 = _mm256_permute2f128_pd(ymm12, ymm13, 0x20); //B11[0][5] B11[1][5] B11[2][5] B11[3][5] + ymm7 = _mm256_permute2f128_pd(ymm12, ymm13, 0x31); //B11[0][7] B11[1][7] B11[2][7] B11[3][7] + + ymm8 = _mm256_loadu_pd((double const *)(b11 + cs_b * 0)); //load B11[0-3][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b * 1)); //load B11[0-3][1] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //load B11[0-3][2] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //load B11[0-3][3] + ymm12 = _mm256_loadu_pd((double const *)(b11 + cs_b * 4)); //load B11[0-3][4] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b * 5)); //load B11[0-3][5] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b * 6)); //load B11[0-3][6] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b * 7)); //load B11[0-3][7] + //determine correct values to store + if(m_remainder == 3) + { + ymm0 = _mm256_blend_pd(ymm0, ymm8, 0x08); + ymm1 = _mm256_blend_pd(ymm1, ymm9, 0x08); + ymm2 = _mm256_blend_pd(ymm2, ymm10, 0x08); + ymm3 = _mm256_blend_pd(ymm3, ymm11, 0x08); + ymm4 = _mm256_blend_pd(ymm4, ymm12, 0x08); + ymm5 = _mm256_blend_pd(ymm5, ymm13, 0x08); + ymm6 = _mm256_blend_pd(ymm6, ymm14, 0x08); + ymm7 = _mm256_blend_pd(ymm7, ymm15, 0x08); + } + if(m_remainder == 2) + { + ymm0 = _mm256_permute2f128_pd(ymm0, ymm8, 0x30); + ymm1 = _mm256_permute2f128_pd(ymm1, ymm9, 0x30); + ymm2 = _mm256_permute2f128_pd(ymm2, ymm10, 0x30); + ymm3 = _mm256_permute2f128_pd(ymm3, ymm11, 0x30); + ymm4 = _mm256_permute2f128_pd(ymm4, ymm12, 0x30); + ymm5 = _mm256_permute2f128_pd(ymm5, ymm13, 0x30); + ymm6 = _mm256_permute2f128_pd(ymm6, ymm14, 0x30); + ymm7 = _mm256_permute2f128_pd(ymm7, ymm15, 0x30); + } + if(m_remainder == 1) + { + ymm0 = _mm256_blend_pd(ymm0, ymm8, 0x0E); + ymm1 = _mm256_blend_pd(ymm1, ymm9, 0x0E); + ymm2 = _mm256_blend_pd(ymm2, ymm10, 0x0E); + ymm3 = _mm256_blend_pd(ymm3, ymm11, 0x0E); + ymm4 = _mm256_blend_pd(ymm4, ymm12, 0x0E); + ymm5 = _mm256_blend_pd(ymm5, ymm13, 0x0E); + ymm6 = _mm256_blend_pd(ymm6, ymm14, 0x0E); + ymm7 = _mm256_blend_pd(ymm7, ymm15, 0x0E); + } + + _mm256_storeu_pd((double *)(b11 + cs_b * 0), ymm0); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + cs_b * 1), ymm1); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[0-3][3]) + _mm256_storeu_pd((double *)(b11 + cs_b * 4), ymm4); //store(B11[0-3][4]) + _mm256_storeu_pd((double *)(b11 + cs_b * 5), ymm5); //store(B11[0-3][5]) + _mm256_storeu_pd((double *)(b11 + cs_b * 6), ymm6); //store(B11[0-3][6]) + _mm256_storeu_pd((double *)(b11 + cs_b * 7), ymm7); //store(B11[0-3][7]) + + } + } + + if((n & 4)) //implementation for remainder columns(when 'N' is a multiple of 4) + { + for(i = 0;i+D_MR-1 < m; i += D_MR) //loop along 'M' direction + { + a10 = L +i; //pointer to block of A to be used for GEMM + a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM + b01 = B + j*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM + + k_iter = i / D_MR; //number of times GEMM to be performed(in block of 4) + ///GEMM for previously calculated values /// + + //load 4x4 block from b11 + ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b*2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b*3)); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_b01_dup = b01; + ymm8 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] + ymm9 = _mm256_loadu_pd((double const *)(a10 + cs_a)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] + ymm10 = _mm256_loadu_pd((double const *)(a10 + cs_a*2)); //A10[0][2] A10[1][2] A10[2][2] A10[3][2] + ymm11 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] + + b01 += 1; //move to next row of B + + ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B01[2][1]*A10[1][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B01[2][2]*A10[2][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B01[2][3]*A10[3][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) + + + a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM + b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM + + } + + ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm4); //B11[0-3][0] *alpha -= ymm4 + ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm5); //B01[0-3][1] *alpha -= ymm5 + ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm6); //B01[0-3][2] *alpha -= ymm6 + ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm7); //B01[0-3][3] *alpha -= ymm7 + + ///implement TRSM/// + //1st col + ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][0] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][0] + ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][0] + + //2nd col + a11 += cs_a; + ymm8 = _mm256_broadcast_sd((double const *)(a11 + 1)); //A11[1][1] + ymm9 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][1] + + //3rd col + a11 += cs_a; + ymm11 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][2] + ymm12 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][2] + + //4th col + a11 += cs_a; + ymm13 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][3] + + ////unpacklow//// + ymm8 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] + ymm13 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] + + //rearrange low elements + ymm4 = _mm256_permute2f128_pd(ymm8,ymm13,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] + ymm11 = _mm256_permute2f128_pd(ymm8,ymm13,0x31);//B11[2][0] B11[2][1] B11[2][2] B11[2][3] + + ////unpackhigh//// + ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] + ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] + + //rearrange high elements + ymm8 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] + ymm13 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (3, 0) + ymm8 = _mm256_fnmadd_pd(ymm5, ymm4, ymm8);//d = c - (a*b) //B11[1][0-3] -= A11[1][0]*B11[0][0-3] + ymm11 = _mm256_fnmadd_pd(ymm6, ymm4, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][0]*B11[0][0-3] + ymm13 = _mm256_fnmadd_pd(ymm7, ymm4, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][0]*B11[0][0-3] + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + ymm11 = _mm256_fnmadd_pd(ymm9, ymm8, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][1]*B11[1][0-3] + ymm13 = _mm256_fnmadd_pd(ymm10, ymm8, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][1]*B11[1][0-3] + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + ymm13 = _mm256_fnmadd_pd(ymm12, ymm11, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][2]*B11[2][0-3] + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + ymm1 = _mm256_unpacklo_pd(ymm4, ymm8); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] + ymm3 = _mm256_unpacklo_pd(ymm11, ymm13); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] + + //rearrange low elements + ymm0 = _mm256_permute2f128_pd(ymm1,ymm3,0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm2 = _mm256_permute2f128_pd(ymm1,ymm3,0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + + ////unpackhigh//// + ymm14 = _mm256_unpackhi_pd(ymm4, ymm8); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] + + ymm15 = _mm256_unpackhi_pd(ymm11, ymm13); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] + + //rearrange high elements + ymm1 = _mm256_permute2f128_pd(ymm14,ymm15,0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm3 = _mm256_permute2f128_pd(ymm14,ymm15,0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b*2), ymm2); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b*3), ymm3); //store(B11[0-3][3]) + + } + if(m_remainder) //implementation for remainder rows(when 'M' is not a multiple of D_MR) + { + a10 = L +i; //pointer to block of A to be used for GEMM + a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM + b01 = B + j*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha + + k_iter = i / D_MR; //number of GEMM operations to be performed(in blocks of 4x4) + + ///GEMM for previously calculated values /// + + //load 4x4 block from b11 + ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + for(k = 0; k < k_iter; k++) //looop for number of GEMM operations + { + ptr_b01_dup = b01; + + ymm8 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] + ymm9 = _mm256_loadu_pd((double const *)(a10 + cs_a)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] + ymm10 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2)); //A10[0][2] A10[1][2] A10[2][2] A10[3][2] + ymm11 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) + + a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM + b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM + + } + + ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm4); //B11[0-3][0] *alpha -= ymm4 + ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm5); //B11[0-3][1] *alpha -= ymm5 + ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm6); //B11[0-3][2] *alpha -= ymm6 + ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm7); //B11[0-3][3] *alpha -= ymm7 + + ///implement TRSM/// + //1st col + ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][0] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][0] + ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][0] + + //2nd col + a11 += cs_a; + ymm8 = _mm256_broadcast_sd((double const *)(a11 + 1)); //A11[1][1] + ymm9 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][1] + + //3rd col + a11 += cs_a; + ymm11 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][2] + ymm12 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][2] + + //4th col + a11 += cs_a; + ymm13 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][3] + + ////unpacklow//// + ymm8 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] + ymm13 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] + + //rearrange low elements + ymm4 = _mm256_permute2f128_pd(ymm8,ymm13,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] + ymm11 = _mm256_permute2f128_pd(ymm8,ymm13,0x31);//B11[2][0] B11[2][1] B11[2][2] B11[2][3] + + ////unpackhigh//// + ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] + ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] + + //rearrange high elements + ymm8 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] + ymm13 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (3, 0) + ymm8 = _mm256_fnmadd_pd(ymm5, ymm4, ymm8);//d = c - (a*b) //B11[1][0-3] -= A11[1][0]* B11[0][0-3] + ymm11 = _mm256_fnmadd_pd(ymm6, ymm4, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][0]* B11[0][0-3] + ymm13 = _mm256_fnmadd_pd(ymm7, ymm4, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][0]* B11[0][0-3] + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + ymm11 = _mm256_fnmadd_pd(ymm9, ymm8, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][1]* B11[1][0-3] + ymm13 = _mm256_fnmadd_pd(ymm10, ymm8, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][1]* B11[1][0-3] + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + ymm13 = _mm256_fnmadd_pd(ymm12, ymm11, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][2]* B11[2][0-3] + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + ymm1 = _mm256_unpacklo_pd(ymm4, ymm8); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] + ymm3 = _mm256_unpacklo_pd(ymm11, ymm13); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] + + //rearrange low elements + ymm0 = _mm256_permute2f128_pd(ymm1,ymm3,0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm2 = _mm256_permute2f128_pd(ymm1,ymm3,0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + + ////unpackhigh//// + ymm14 = _mm256_unpackhi_pd(ymm4, ymm8); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] + + ymm15 = _mm256_unpackhi_pd(ymm11, ymm13); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] + + //rearrange high elements + ymm1 = _mm256_permute2f128_pd(ymm14,ymm15,0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm3 = _mm256_permute2f128_pd(ymm14,ymm15,0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + //load 4x4 block from b11 + ymm4 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm5 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm6 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm7 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][3] B11[1][3] B11[2][2] B11[3][3] + + //determine correct values to store + + if(m_remainder == 3) + { + ymm0 = _mm256_blend_pd(ymm0, ymm4, 0x08); + ymm1 = _mm256_blend_pd(ymm1, ymm5, 0x08); + ymm2 = _mm256_blend_pd(ymm2, ymm6, 0x08); + ymm3 = _mm256_blend_pd(ymm3, ymm7, 0x08); + } + if(m_remainder == 2) + { + ymm0 = _mm256_permute2f128_pd(ymm0, ymm4,0x30); + ymm1 = _mm256_permute2f128_pd(ymm1, ymm5,0x30); + ymm2 = _mm256_permute2f128_pd(ymm2, ymm6,0x30); + ymm3 = _mm256_permute2f128_pd(ymm3, ymm7,0x30); + } + if(m_remainder == 1) + { + ymm0 = _mm256_blend_pd(ymm0, ymm4, 0x0E); + ymm1 = _mm256_blend_pd(ymm1, ymm5, 0x0E); + ymm2 = _mm256_blend_pd(ymm2, ymm6, 0x0E); + ymm3 = _mm256_blend_pd(ymm3, ymm7, 0x0E); + } + + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[0-3][3]) + + } + + n_remainder -= 4; + j += 4; + + } + + if(n_remainder) //implementation fo remaining columns(when 'N' is not a multiple of D_NR) + { + for(i = 0;i+D_MR-1 < m; i += D_MR) //loop along 'M' direction + { + a10 = L +i; //pointer to block of A to be used for GEMM + a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM + b01 = B + j*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM + + k_iter = i / D_MR; //number of GEMM operations to be performed(in blocks of 4x4) + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha Value + + ///GEMM for previously calculated values /// + + //load 4x4 block from b11 + if(n_remainder == 3) + { + ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm3 = _mm256_broadcast_sd((double const *)&ones); + } + if(n_remainder == 2) + { + ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_broadcast_sd((double const *)&ones); + ymm3 = _mm256_broadcast_sd((double const *)&ones); + } + if(n_remainder == 1) + { + ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_broadcast_sd((double const *)&ones); + ymm2 = _mm256_broadcast_sd((double const *)&ones); + ymm3 = _mm256_broadcast_sd((double const*)&ones); + } + + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + for(k = 0; k < k_iter; k++) + { + ptr_b01_dup = b01; + ymm8 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] + ymm9 = _mm256_loadu_pd((double const *)(a10 + cs_a)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] + ymm10 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2)); //A10[0][2] A10[1][2] A10[2][2] A10[3][2] + ymm11 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] + + b01 += 1; + + ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) + + a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM + b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM + } + + ///GEMM code ends/// + + ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm4); //B11[0-3][0] *alpha -= ymm4 + ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm5); //B11[0-3][1] *alpha -= ymm5 + ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm6); //B11[0-3][2] *alpha -= ymm6 + ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm7); //B11[0-3][3] *alpha -= ymm7 + + ///implement TRSM/// + //1st col + ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][0] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][0] + ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][0] + + //2nd col + a11 += cs_a; + ymm8 = _mm256_broadcast_sd((double const *)(a11 + 1)); //A11[1][1] + ymm9 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][1] + + //3rd col + a11 += cs_a; + ymm11 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][2] + ymm12 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][2] + + //4th col + a11 += cs_a; + ymm13 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][3] + + ////unpacklow//// + ymm8 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] + ymm13 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] + + //rearrange low elements + ymm4 = _mm256_permute2f128_pd(ymm8,ymm13,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] + ymm11 = _mm256_permute2f128_pd(ymm8,ymm13,0x31);//B11[2][0] B11[2][1] B11[2][2] B11[2][3] + + ////unpackhigh//// + ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] + ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] + + //rearrange high elements + ymm8 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] + ymm13 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (3, 0) + ymm8 = _mm256_fnmadd_pd(ymm5, ymm4, ymm8);//d = c - (a*b) //B11[1][0-3] -= A11[1][0] * B11[0][0-3] + ymm11 = _mm256_fnmadd_pd(ymm6, ymm4, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][0] * B11[0][0-3] + ymm13 = _mm256_fnmadd_pd(ymm7, ymm4, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][0] * B11[0][0-3] + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + ymm11 = _mm256_fnmadd_pd(ymm9, ymm8, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][1] * B11[1][0-3] + ymm13 = _mm256_fnmadd_pd(ymm10, ymm8, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][1] * B11[1][0-3] + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + ymm13 = _mm256_fnmadd_pd(ymm12, ymm11, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][2] * B11[2][0-3] + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + ymm1 = _mm256_unpacklo_pd(ymm4, ymm8); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] + ymm3 = _mm256_unpacklo_pd(ymm11, ymm13); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] + + //rearrange low elements + ymm0 = _mm256_permute2f128_pd(ymm1,ymm3,0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm2 = _mm256_permute2f128_pd(ymm1,ymm3,0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + + ////unpackhigh//// + ymm14 = _mm256_unpackhi_pd(ymm4, ymm8); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] + + ymm15 = _mm256_unpackhi_pd(ymm11, ymm13); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] + + //rearrange high elements + ymm1 = _mm256_permute2f128_pd(ymm14,ymm15,0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm3 = _mm256_permute2f128_pd(ymm14,ymm15,0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store(B11[0-3][2]) + + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) + + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) + } + + } + if(m_remainder) //implementation for remainder rows(when 'M' is not a multiple of D_MR) + { + a10 = L +i; //pointer to block of A to be used for GEMM + a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM + b01 = B + j*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM + + + k_iter = i / D_MR; //number of times GEMM operations to be performed + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to hold alpha value + + ///GEMM for previously calculated values /// + + + //load 4x4 block from b11 + if(n_remainder == 3) + { + ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm3 = _mm256_broadcast_sd((double const *)&ones); + } + if(n_remainder == 2) + { + ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_broadcast_sd((double const *)&ones); + ymm3 = _mm256_broadcast_sd((double const *)&ones); + } + if(n_remainder == 1) + { + ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_broadcast_sd((double const *)&ones); + ymm2 = _mm256_broadcast_sd((double const *)&ones); + ymm3 = _mm256_broadcast_sd((double const *)&ones); + } + + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_b01_dup = b01; + ymm8 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] + ymm9 = _mm256_loadu_pd((double const *)(a10 + cs_a)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] + ymm10 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2)); //A10[0][2] A10[1][2] A10[2][2] A10[3][2] + ymm11 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B10[0][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B10[0][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B10[0][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B10[0][3] + + b01 += 1; //move to next row of B + + ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B10[1][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B10[1][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B10[1][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B10[1][3] + + b01 += 1; //move to next row of B + + ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B10[2][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B10[2][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B10[2][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B10[2][3] + + b01 += 1; //move to next row of B + + + ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) + + ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B10[3][0] + ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B10[3][1] + ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B10[3][2] + ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B10[3][3] + + b01 += 1; //move to next row of B + + ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) + + a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM + b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM + + } + + ymm8 = _mm256_fmsub_pd(ymm0, ymm16, ymm4); //B11[0-3][0] * alpha -= ymm4 + ymm9 = _mm256_fmsub_pd(ymm1, ymm16, ymm5); //B11[0-3][1] * alpha -= ymm5 + ymm10 = _mm256_fmsub_pd(ymm2, ymm16, ymm6); //B11[0-3][2] * alpha -= ymm6 + ymm11 = _mm256_fmsub_pd(ymm3, ymm16, ymm7); //B11[0-3][3] * alpha -= ymm7 + + ///implement TRSM/// + //determine correct values to store + if(m_remainder == 3) + { + ymm0 = _mm256_blend_pd(ymm8, ymm0, 0x08); + ymm1 = _mm256_blend_pd(ymm9, ymm1, 0x08); + ymm2 = _mm256_blend_pd(ymm10, ymm2, 0x08); + ymm3 = _mm256_blend_pd(ymm11, ymm3, 0x08); + + } + if(m_remainder == 2) + { + ymm0 = _mm256_permute2f128_pd(ymm8, ymm0, 0x30); + ymm1 = _mm256_permute2f128_pd(ymm9, ymm1, 0x30); + ymm2 = _mm256_permute2f128_pd(ymm10, ymm2, 0x30); + ymm3 = _mm256_permute2f128_pd(ymm11, ymm3, 0x30); + + } + if(m_remainder == 1) + { + ymm0 = _mm256_blend_pd(ymm8, ymm0, 0x0E); + ymm1 = _mm256_blend_pd(ymm9, ymm1, 0x0E); + ymm2 = _mm256_blend_pd(ymm10, ymm2, 0x0E); + ymm3 = _mm256_blend_pd(ymm11, ymm3, 0x0E); + } + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store(B11[0-3][2]) + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) + } + + ///scalar code for trsm without alpha/// + dtrsm_small_AlXB_unitDiag(a11, b11, m_remainder, n_remainder, cs_a, cs_b); + } + } + return BLIS_SUCCESS; +} + + +/*implements TRSM for the case XA = alpha * B + *A is upper triangular, non-unit diagonal, no transpose + *dimensions: X:mxn A:nxn B: mxn + */ + +/* b11---> a01 ----> + ***************** *********** + *b01*b11* * * * * * * +b11 * * * * * **a01 * * a11 + | ***************** ********* | + | * * * * * *a11* * | + | * * * * * * * * | + v ***************** ****** v + * * * * * * * + * * * * * * * + ***************** * * + * + +*/ +static err_t bli_dtrsm_small_XAuB( + side_t side, + obj_t* AlphaObj, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ) +{ + dim_t D_MR = 8; //block dimension along the rows + dim_t D_NR = 4; //block dimension along the columns + + dim_t m = bli_obj_length(b); //number of rows + dim_t n = bli_obj_width(b); //number of columns + dim_t m_remainder = m % D_MR; //number of corner rows + dim_t n_remainder = n % D_NR; //number of corner columns + dim_t cs_a = bli_obj_col_stride(a); //column stride of matrix A + dim_t cs_b = bli_obj_col_stride(b); //column stride of matrix B + + if(max(m,n)>150 && (m/n) < 22) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + + dim_t i, j, k; //loop variablse + dim_t k_iter; //determines the number of GEMM operations to be done + dim_t cs_b_offset[2]; //pre-calculated strides + + double ones = 1.0; + + double AlphaVal = *(double *)AlphaObj->buffer; //value of Alpha + double *L = a->buffer; //pointer to matrix A + double *B = b->buffer; //pointer to matrix B + + double *a01, *a11, *b10, *b11; //pointers for GEMM and TRSM blocks + double *ptr_a01_dup; + + cs_b_offset[0] = cs_b << 1; //cs_b_offset[0] = cs_b * 2; + cs_b_offset[1] = cs_b_offset[0] + cs_b;//cs_b_offset[1] = cs_b * 3; + + //ymm scratch reginsters + __m256d ymm0, ymm1, ymm2, ymm3; + __m256d ymm4, ymm5, ymm6, ymm7; + __m256d ymm8, ymm9, ymm10, ymm11; + __m256d ymm12, ymm13, ymm14, ymm15; + __m256d ymm16; + + for(i = 0; (i+D_MR-1) < m; i += D_MR) //loop along 'M' direction + { + for(j = 0; (j+D_NR-1) < n; j += D_NR) //loop along 'N' direction + { + a01 = L + j*cs_a; //pointer to block of A to be used in GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i; //pointer to block of B to be used in GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = j / D_NR; //number of GEMM operations to be done(in blocks of 4x4) + + ymm0 = _mm256_setzero_pd(); + ymm1 = _mm256_setzero_pd(); + ymm2 = _mm256_setzero_pd(); + ymm3 = _mm256_setzero_pd(); + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation starts/// + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //broadcast 1st row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] + + a01 += 1; //move to next row + + //load 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] + + a01 += 1; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) + + //broadcast 3rd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] + + a01 += 1; //move to next row of A01 + + //load next 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) + ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) + + //broadcast 4th row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] + + a01 += 1; //move to next row of A01 + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM + } + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); + //load 8x4 block of B11 + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] + + + ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 + ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 + ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 + ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 + + ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 + ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 + ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 + ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + ymm7 = _mm256_broadcast_sd((double const *)(&ones)); + + //1st col + ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + //2nd col + a11 += cs_a; + ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm2 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][1] + + //3rd col + a11 += cs_a; + ymm3 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][2] + ymm4 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][2] + ymm5 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][2] + + //4th col + a11 += cs_a; + ymm6 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][3] + + //compute reciprocals of L(i,i) and broadcast in registers + ymm0 = _mm256_unpacklo_pd(ymm0, ymm2); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] + ymm2 = _mm256_unpacklo_pd(ymm5, ymm6); //A11[2][2] A11[3][3] A11[1][1] A11[3][3] + + ymm0 = _mm256_blend_pd(ymm0, ymm2, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm7 = _mm256_div_pd(ymm7, ymm0); //(1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3]) + + ymm2 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][3] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][3] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][3] + + //extract a00 + ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) + + ymm8 = _mm256_mul_pd(ymm8, ymm0); //B11[0-3][0] /= A11[0][0] + + ymm12 = _mm256_mul_pd(ymm12, ymm0); //B11[4-7][0] /= A11[0][0] + + //extract a11 + ymm0 = _mm256_permute_pd(ymm7, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00);//(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) + + //(Row1): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm1, ymm8, ymm9); //B11[0-3][1] -= B11[0-3][0] * A11[0][1] + ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[0-3][2] -= B11[0-3][0] * A11[0][2] + ymm11 = _mm256_fnmadd_pd(ymm2, ymm8, ymm11); //B11[0-3][3] -= B11[0-3][0] * A11[0][3] + + ymm13 = _mm256_fnmadd_pd(ymm1, ymm12, ymm13); //B11[4-7][1] -= B11[4-7][0] * A11[0][1] + ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[4-7][2] -= B11[4-7][0] * A11[0][2] + ymm15 = _mm256_fnmadd_pd(ymm2, ymm12, ymm15); //B11[4-7][3] -= B11[4-7][0] * A11[0][3] + + ymm9 = _mm256_mul_pd(ymm9, ymm0); //B11[0-3][1] /= A11[1][1] + + ymm13 = _mm256_mul_pd(ymm13, ymm0); //B11[4-7][1] /= A11[1][1] + + //extract a22 + ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) + + //(Row2)FMA operations + ymm10 = _mm256_fnmadd_pd(ymm4, ymm9, ymm10); //B11[0-3][2] -= B11[0-3][1] * A11[1][2] + ymm11 = _mm256_fnmadd_pd(ymm5, ymm9, ymm11); //B11[0-3][3] -= B11[0-3][1] * A11[1][3] + + ymm14 = _mm256_fnmadd_pd(ymm4, ymm13, ymm14); //B11[4-7][2] -= B11[4-7][1] * A11[1][2] + ymm15 = _mm256_fnmadd_pd(ymm5, ymm13, ymm15); //B11[4-7][3] -= B11[4-7][1] * A11[1][3] + + ymm10 = _mm256_mul_pd(ymm10, ymm0); //B11[0-3][2] /= A11[2][2] + + ymm14 = _mm256_mul_pd(ymm14, ymm0); //B11[4-7][2] /= A11[2][2] + + //extract a33 + ymm0 = _mm256_permute_pd(ymm7, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + + //(Row3)FMA operations + ymm11 = _mm256_fnmadd_pd(ymm6, ymm10, ymm11); //B11[0-3][3] -= B11[0-3][2] * A11[2][3] + + ymm15 = _mm256_fnmadd_pd(ymm6, ymm14, ymm15); //B11[4-7][3] -= B11[4-7][2] * A11[2][3] + + ymm11 = _mm256_mul_pd(ymm11, ymm0); //B11[0-3][3] /= A11[3][3] + + ymm15 = _mm256_mul_pd(ymm15, ymm0); //B11[4-7][3] /= A11[3][3] + + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b), ymm11); //store(B11[0-3][3]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b + D_NR), ymm15);//store(B11[4-7][3]) + } + if(n_remainder) //implementation for remainder columns(when n is not multiple of D_NR) + { + a01 = L + j*cs_a; //pointer to block of A to be used for GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i; //pointer to block of B to be used for GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = j / D_NR; //number of GEMM operations to be performed(in blocks of 4x4) + + ///load 4x4 block of b11 + + ymm0 = _mm256_setzero_pd(); + ymm1 = _mm256_setzero_pd(); + ymm2 = _mm256_setzero_pd(); + ymm3 = _mm256_setzero_pd(); + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation begins/// + + for(k = 0; k < k_iter; k++) ///loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //broadcast 1st row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] + + a01 += 1; //move to next row of A + + //load 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR));//B10[4][1] B10[5][1] B10[6][1] B10[7][1] + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] + + a01 += 1; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) + + //broadcast 3rd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] + + a01 += 1; //move to next row of A + + //load next 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) + ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) + + //broadcast 4th row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] + + a01 += 1; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM + } + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); + + //subtract the calculated GEMM block from current TRSM block + //load 8x4 block of B11 + if(n_remainder == 3) + { + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0-3][1] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][1] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0-3][2] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4-7][2] + ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + } + if(n_remainder == 2) + { + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0-3][1] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][1] + ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] + ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] + ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + } + if(n_remainder == 1) + { + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] + ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][1] + ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][1] + ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] + ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] + ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + } + + ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= B10[0-3][0] + ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha -= B10[4-7][0] + ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha -= B10[0-3][1] + ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= B10[4-7][1] + ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= B10[0-3][2] + ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= B10[4-7][2] + ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= B10[0-3][3] + ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= B10[4-7][3] + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + ymm7 = _mm256_broadcast_sd((double const *)(&ones)); + + //1st col + ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + //2nd col + a11 += cs_a; + ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm2 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][1] + + //3rd col + a11 += cs_a; + ymm3 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][2] + ymm4 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][2] + ymm5 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][2] + + //4th col + a11 += cs_a; + ymm6 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][3] + + //compute reciprocals of L(i,i) and broadcast in registers + ymm0 = _mm256_unpacklo_pd(ymm0, ymm2); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] + ymm2 = _mm256_unpacklo_pd(ymm5, ymm6); //A11[2][2] A11[3][3] A11[1][1] A11[3][3] + + ymm0 = _mm256_blend_pd(ymm0, ymm2, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm7 = _mm256_div_pd(ymm7, ymm0); //(1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3]) + + ymm2 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][3] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][3] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][3] + + //extract a00 + ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00);//(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) + + ymm8 = _mm256_mul_pd(ymm8, ymm0); //B11[0-3][0] /= A11[0][0] + + ymm12 = _mm256_mul_pd(ymm12, ymm0); //B11[4-7][0] /= A11[0][0] + + //extract a11 + ymm0 = _mm256_permute_pd(ymm7, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00);//(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) + + //(Row1): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm1, ymm8, ymm9); //B11[0-3][1] -= B11[0-3][0] * A11[0][1] + ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[0-3][2] -= B11[0-3][0] * A11[0][2] + ymm11 = _mm256_fnmadd_pd(ymm2, ymm8, ymm11); //B11[0-3][3] -= B11[0-3][0] * A11[0][3] + + ymm13 = _mm256_fnmadd_pd(ymm1, ymm12, ymm13); //B11[4-7][1] -= B11[4-7][0] * A11[0][1] + ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[4-7][2] -= B11[4-7][0] * A11[0][2] + ymm15 = _mm256_fnmadd_pd(ymm2, ymm12, ymm15); //B11[4-7][3] -= B11[4-7][0] * A11[0][3] + + ymm9 = _mm256_mul_pd(ymm9, ymm0); //B11[0-3][1] /= A11[1][1] + + ymm13 = _mm256_mul_pd(ymm13, ymm0); //B11[4-7][1] /= A11[1][1] + + //extract a22 + ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) + + //(Row2)FMA operations + ymm10 = _mm256_fnmadd_pd(ymm4, ymm9, ymm10); //B11[0-3][2] -= B11[0-3][1] * A11[1][2] + ymm11 = _mm256_fnmadd_pd(ymm5, ymm9, ymm11); //B11[0-3][3] -= B11[0-3][1] * A11[1][3] + + ymm14 = _mm256_fnmadd_pd(ymm4, ymm13, ymm14); //B11[4-7][2] -= B11[4-7][1] * A11[1][2] + ymm15 = _mm256_fnmadd_pd(ymm5, ymm13, ymm15); //B11[4-7][3] -= B11[4-7][1] * A11[1][3] + + ymm10 = _mm256_mul_pd(ymm10, ymm0); //B11[0-3][2] /= A11[2][2] + + ymm14 = _mm256_mul_pd(ymm14, ymm0); //B11[4-7][2] /= A11[2][2] + + //extract a33 + ymm0 = _mm256_permute_pd(ymm7, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11); //(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + + //(Row3)FMA operations + ymm11 = _mm256_fnmadd_pd(ymm6, ymm10, ymm11); //B11[0-3][3] -= B11[0-3][2] * A11[2][3] + + ymm15 = _mm256_fnmadd_pd(ymm6, ymm14, ymm15); //B11[4-7][3] -= B11[4-7][2] * A11[2][3] + + ymm11 = _mm256_mul_pd(ymm11, ymm0); //B11[0-3][3] /= A11[3][3] + + ymm15 = _mm256_mul_pd(ymm15, ymm0); //B11[4-7][3] /= A11[3][3] + + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14);//store(B11[4-7][2]) + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + } + } + } + if((m & 4)) ///implementation for remainder rows(when m_remainder is a multiple of 4) + { + for(j = 0; (j+D_NR-1) a01 ----> + ***************** *********** + *b01*b11* * * * * * * +b11 * * * * * **a01 * * a11 + | ***************** ********* | + | * * * * * *a11* * | + | * * * * * * * * | + v ***************** ****** v + * * * * * * * + * * * * * * * + ***************** * * + * + +*/ + +static err_t bli_dtrsm_small_XAuB_unitDiag( + side_t side, + obj_t* AlphaObj, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ) +{ + dim_t D_MR = 8; //block dimension along the rows + dim_t D_NR = 4; //block dimension along the columns + + dim_t m = bli_obj_length(b); //number of rows + dim_t n = bli_obj_width(b); //number of columns + dim_t m_remainder = m % D_MR; //number of corner rows + dim_t n_remainder = n % D_NR; //number of corner columns + dim_t cs_a = bli_obj_col_stride(a); //column stride of matrix A + dim_t cs_b = bli_obj_col_stride(b); //column stride of matrix B + + if((max(m,n)>180) && (m/n)<22) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + + dim_t i, j, k; //loop variablse + dim_t k_iter; //determines the number of GEMM operations to be done + dim_t cs_b_offset[2]; //pre-calculated strides + + double ones = 1.0; + + double AlphaVal = *(double *)AlphaObj->buffer; //value of Alpha + double *L = a->buffer; //pointer to matrix A + double *B = b->buffer; //pointer to matrix B + + double *a01, *a11, *b10, *b11; //pointers for GEMM and TRSM blocks + double *ptr_a01_dup; + + cs_b_offset[0] = cs_b << 1; //cs_b_offset[0] = cs_b * 2; + cs_b_offset[1] = cs_b_offset[0] + cs_b;//cs_b_offset[1] = cs_b * 3; + + //ymm scratch reginsters + __m256d ymm0, ymm1, ymm2, ymm3; + __m256d ymm4, ymm5, ymm6, ymm7; + __m256d ymm8, ymm9, ymm10, ymm11; + __m256d ymm12, ymm13, ymm14, ymm15; + __m256d ymm16; + + for(i = 0; (i+D_MR-1) < m; i += D_MR) //loop along 'M' direction + { + for(j = 0; (j+D_NR-1) < n; j += D_NR) //loop along 'N' direction + { + a01 = L + j*cs_a; //pointer to block of A to be used in GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i; //pointer to block of B to be used in GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = j / D_NR; //number of GEMM operations to be done(in blocks of 4x4) + + ymm0 = _mm256_setzero_pd(); + ymm1 = _mm256_setzero_pd(); + ymm2 = _mm256_setzero_pd(); + ymm3 = _mm256_setzero_pd(); + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation starts/// + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //broadcast 1st row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] + + a01 += 1; //move to next row + + //load 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] + + a01 += 1; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) + + //broadcast 3rd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] + + a01 += 1; //move to next row of A01 + + //load next 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) + ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) + + //broadcast 4th row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] + + a01 += 1; //move to next row of A01 + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM + } + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); + //load 8x4 block of B11 + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] + + + ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 + ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 + ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 + ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 + + ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 + ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 + ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 + ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + ymm7 = _mm256_broadcast_sd((double const *)(&ones)); + + //1st col + ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + //2nd col + a11 += cs_a; + ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm2 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][1] + + //3rd col + a11 += cs_a; + ymm3 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][2] + ymm4 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][2] + ymm5 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][2] + + //4th col + a11 += cs_a; + ymm6 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][3] + + ymm2 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][3] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][3] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][3] + + //(Row1): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm1, ymm8, ymm9); //B11[0-3][1] -= B11[0-3][0] * A11[0][1] + ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[0-3][2] -= B11[0-3][0] * A11[0][2] + ymm11 = _mm256_fnmadd_pd(ymm2, ymm8, ymm11); //B11[0-3][3] -= B11[0-3][0] * A11[0][3] + + ymm13 = _mm256_fnmadd_pd(ymm1, ymm12, ymm13); //B11[4-7][1] -= B11[4-7][0] * A11[0][1] + ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[4-7][2] -= B11[4-7][0] * A11[0][2] + ymm15 = _mm256_fnmadd_pd(ymm2, ymm12, ymm15); //B11[4-7][3] -= B11[4-7][0] * A11[0][3] + + + //(Row2)FMA operations + ymm10 = _mm256_fnmadd_pd(ymm4, ymm9, ymm10); //B11[0-3][2] -= B11[0-3][1] * A11[1][2] + ymm11 = _mm256_fnmadd_pd(ymm5, ymm9, ymm11); //B11[0-3][3] -= B11[0-3][1] * A11[1][3] + + ymm14 = _mm256_fnmadd_pd(ymm4, ymm13, ymm14); //B11[4-7][2] -= B11[4-7][1] * A11[1][2] + ymm15 = _mm256_fnmadd_pd(ymm5, ymm13, ymm15); //B11[4-7][3] -= B11[4-7][1] * A11[1][3] + + + //(Row3)FMA operations + ymm11 = _mm256_fnmadd_pd(ymm6, ymm10, ymm11); //B11[0-3][3] -= B11[0-3][2] * A11[2][3] + + ymm15 = _mm256_fnmadd_pd(ymm6, ymm14, ymm15); //B11[4-7][3] -= B11[4-7][2] * A11[2][3] + + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b), ymm11); //store(B11[0-3][3]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b + D_NR), ymm15);//store(B11[4-7][3]) + } + if(n_remainder) //implementation for remainder columns(when n is not multiple of D_NR) + { + a01 = L + j*cs_a; //pointer to block of A to be used for GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i; //pointer to block of B to be used for GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = j / D_NR; //number of GEMM operations to be performed(in blocks of 4x4) + + ///load 4x4 block of b11 + + ymm0 = _mm256_setzero_pd(); + ymm1 = _mm256_setzero_pd(); + ymm2 = _mm256_setzero_pd(); + ymm3 = _mm256_setzero_pd(); + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation begins/// + + for(k = 0; k < k_iter; k++) ///loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //broadcast 1st row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] + + a01 += 1; //move to next row of A + + //load 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR));//B10[4][1] B10[5][1] B10[6][1] B10[7][1] + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] + + a01 += 1; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) + + //broadcast 3rd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] + + a01 += 1; //move to next row of A + + //load next 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) + ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) + + //broadcast 4th row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] + + a01 += 1; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM + } + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); + + //subtract the calculated GEMM block from current TRSM block + //load 8x4 block of B11 + if(n_remainder == 3) + { + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0-3][1] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][1] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0-3][2] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4-7][2] + ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + } + if(n_remainder == 2) + { + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0-3][1] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][1] + ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] + ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] + ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + } + if(n_remainder == 1) + { + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] + ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][1] + ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][1] + ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] + ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] + ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + } + + ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= B10[0-3][0] + ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha -= B10[4-7][0] + ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha -= B10[0-3][1] + ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= B10[4-7][1] + ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= B10[0-3][2] + ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= B10[4-7][2] + ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= B10[0-3][3] + ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= B10[4-7][3] + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + ymm7 = _mm256_broadcast_sd((double const *)(&ones)); + + //1st col + ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + //2nd col + a11 += cs_a; + ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm2 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][1] + + //3rd col + a11 += cs_a; + ymm3 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][2] + ymm4 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][2] + ymm5 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][2] + + //4th col + a11 += cs_a; + ymm6 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][3] + + ymm2 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][3] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][3] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][3] + + + //(Row1): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm1, ymm8, ymm9); //B11[0-3][1] -= B11[0-3][0] * A11[0][1] + ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[0-3][2] -= B11[0-3][0] * A11[0][2] + ymm11 = _mm256_fnmadd_pd(ymm2, ymm8, ymm11); //B11[0-3][3] -= B11[0-3][0] * A11[0][3] + + ymm13 = _mm256_fnmadd_pd(ymm1, ymm12, ymm13); //B11[4-7][1] -= B11[4-7][0] * A11[0][1] + ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[4-7][2] -= B11[4-7][0] * A11[0][2] + ymm15 = _mm256_fnmadd_pd(ymm2, ymm12, ymm15); //B11[4-7][3] -= B11[4-7][0] * A11[0][3] + + //(Row2)FMA operations + ymm10 = _mm256_fnmadd_pd(ymm4, ymm9, ymm10); //B11[0-3][2] -= B11[0-3][1] * A11[1][2] + ymm11 = _mm256_fnmadd_pd(ymm5, ymm9, ymm11); //B11[0-3][3] -= B11[0-3][1] * A11[1][3] + + ymm14 = _mm256_fnmadd_pd(ymm4, ymm13, ymm14); //B11[4-7][2] -= B11[4-7][1] * A11[1][2] + ymm15 = _mm256_fnmadd_pd(ymm5, ymm13, ymm15); //B11[4-7][3] -= B11[4-7][1] * A11[1][3] + + //(Row3)FMA operations + ymm11 = _mm256_fnmadd_pd(ymm6, ymm10, ymm11); //B11[0-3][3] -= B11[0-3][2] * A11[2][3] + + ymm15 = _mm256_fnmadd_pd(ymm6, ymm14, ymm15); //B11[4-7][3] -= B11[4-7][2] * A11[2][3] + + ymm11 = _mm256_mul_pd(ymm11, ymm0); //B11[0-3][3] /= A11[3][3] + + ymm15 = _mm256_mul_pd(ymm15, ymm0); //B11[4-7][3] /= A11[3][3] + + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14);//store(B11[4-7][2]) + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + } + } + } + if((m & 4)) ///implementation for remainder rows(when m_remainder is a multiple of 4) + { + for(j = 0; (j+D_NR-1) a01 ----> + ***************** *********** + *b01*b11* * * * * * * +b11 * * * * * **a01 * * a11 + | ***************** ********* | + | * * * * * *a11* * | + | * * * * * * * * | + v ***************** ****** v + * * * * * * * + * * * * * * * + ***************** * * + * + +*/ +static err_t bli_dtrsm_small_XAltB( + side_t side, + obj_t* AlphaObj, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ) +{ + dim_t D_MR = 8; //block dimension along the rows + dim_t D_NR = 4; //block dimension along the columns + + dim_t m = bli_obj_length(b); //number of rows + dim_t n = bli_obj_width(b); //number of columns + dim_t m_remainder = m % D_MR; //number of corner rows + dim_t n_remainder = n % D_NR; //number of corner columns + dim_t cs_a = bli_obj_col_stride(a); //column stride of matrix A + dim_t cs_b = bli_obj_col_stride(b); //column stride of matrix B + + if(max(m,n) > 120) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + + dim_t i, j, k; //loop variablse + dim_t k_iter; //determines the number of GEMM operations to be done + dim_t cs_b_offset[2]; //pre-calculated strides + + double ones = 1.0; + + double AlphaVal = *(double *)AlphaObj->buffer; //value of Alpha + double *L = a->buffer; //pointer to matrix A + double *B = b->buffer; //pointer to matrix B + + double *a01, *a11, *b10, *b11; //pointers for GEMM and TRSM blocks + double *ptr_a01_dup; + + cs_b_offset[0] = cs_b << 1; //cs_b_offset[0] = cs_b * 2; + cs_b_offset[1] = cs_b_offset[0] + cs_b;//cs_b_offset[1] = cs_b * 3; + + //ymm scratch reginsters + __m256d ymm0, ymm1, ymm2, ymm3; + __m256d ymm4, ymm5, ymm6, ymm7; + __m256d ymm8, ymm9, ymm10, ymm11; + __m256d ymm12, ymm13, ymm14, ymm15; + __m256d ymm16; + + for(i = 0; (i+D_MR-1) < m; i += D_MR) //loop along 'M' direction + { + for(j = 0; (j+D_NR-1) < n; j += D_NR) //loop along 'N' direction + { + a01 = L + j; //pointer to block of A to be used in GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i; //pointer to block of B to be used in GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = j / D_NR; //number of GEMM operations to be done(in blocks of 4x4) + + ymm0 = _mm256_setzero_pd(); + ymm1 = _mm256_setzero_pd(); + ymm2 = _mm256_setzero_pd(); + ymm3 = _mm256_setzero_pd(); + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation starts/// + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //broadcast 1st row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] + + a01 += cs_a; //move to next row + + //load 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] + + a01 += cs_a; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) + + //broadcast 3rd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] + + a01 += cs_a; //move to next row of A01 + + //load next 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) + ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) + + //broadcast 4th row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] + + a01 += cs_a; //move to next row of A01 + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM + } + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); + //load 8x4 block of B11 + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] + + + ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 + ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 + ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 + ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 + + ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 + ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 + ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 + ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + ymm7 = _mm256_broadcast_sd((double const *)(&ones)); + + //1st col + ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + //2nd col + a11 += 1; + ymm1 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][1] + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][1] + + //3rd col + a11 += 1; + ymm3 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][2] + ymm4 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][2] + ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][2] + + //4th col + a11 += 1; + ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 3)); //A11[3][3] + + //compute reciprocals of L(i,i) and broadcast in registers + ymm0 = _mm256_unpacklo_pd(ymm0, ymm2); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] + ymm2 = _mm256_unpacklo_pd(ymm5, ymm6); //A11[2][2] A11[3][3] A11[1][1] A11[3][3] + + ymm0 = _mm256_blend_pd(ymm0, ymm2, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm7 = _mm256_div_pd(ymm7, ymm0); //(1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3]) + + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][3] + ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][3] + ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][3] + + //extract a00 + ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) + + ymm8 = _mm256_mul_pd(ymm8, ymm0); //B11[0-3][0] /= A11[0][0] + + ymm12 = _mm256_mul_pd(ymm12, ymm0); //B11[4-7][0] /= A11[0][0] + + //extract a11 + ymm0 = _mm256_permute_pd(ymm7, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00);//(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) + + //(Row1): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm1, ymm8, ymm9); //B11[0-3][1] -= B11[0-3][0] * A11[0][1] + ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[0-3][2] -= B11[0-3][0] * A11[0][2] + ymm11 = _mm256_fnmadd_pd(ymm2, ymm8, ymm11); //B11[0-3][3] -= B11[0-3][0] * A11[0][3] + + ymm13 = _mm256_fnmadd_pd(ymm1, ymm12, ymm13); //B11[4-7][1] -= B11[4-7][0] * A11[0][1] + ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[4-7][2] -= B11[4-7][0] * A11[0][2] + ymm15 = _mm256_fnmadd_pd(ymm2, ymm12, ymm15); //B11[4-7][3] -= B11[4-7][0] * A11[0][3] + + ymm9 = _mm256_mul_pd(ymm9, ymm0); //B11[0-3][1] /= A11[1][1] + + ymm13 = _mm256_mul_pd(ymm13, ymm0); //B11[4-7][1] /= A11[1][1] + + //extract a22 + ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) + + //(Row2)FMA operations + ymm10 = _mm256_fnmadd_pd(ymm4, ymm9, ymm10); //B11[0-3][2] -= B11[0-3][1] * A11[1][2] + ymm11 = _mm256_fnmadd_pd(ymm5, ymm9, ymm11); //B11[0-3][3] -= B11[0-3][1] * A11[1][3] + + ymm14 = _mm256_fnmadd_pd(ymm4, ymm13, ymm14); //B11[4-7][2] -= B11[4-7][1] * A11[1][2] + ymm15 = _mm256_fnmadd_pd(ymm5, ymm13, ymm15); //B11[4-7][3] -= B11[4-7][1] * A11[1][3] + + ymm10 = _mm256_mul_pd(ymm10, ymm0); //B11[0-3][2] /= A11[2][2] + + ymm14 = _mm256_mul_pd(ymm14, ymm0); //B11[4-7][2] /= A11[2][2] + + //extract a33 + ymm0 = _mm256_permute_pd(ymm7, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + + //(Row3)FMA operations + ymm11 = _mm256_fnmadd_pd(ymm6, ymm10, ymm11); //B11[0-3][3] -= B11[0-3][2] * A11[2][3] + + ymm15 = _mm256_fnmadd_pd(ymm6, ymm14, ymm15); //B11[4-7][3] -= B11[4-7][2] * A11[2][3] + + ymm11 = _mm256_mul_pd(ymm11, ymm0); //B11[0-3][3] /= A11[3][3] + + ymm15 = _mm256_mul_pd(ymm15, ymm0); //B11[4-7][3] /= A11[3][3] + + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b), ymm11); //store(B11[0-3][3]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b + D_NR), ymm15);//store(B11[4-7][3]) + } + if(n_remainder) //implementation for remainder columns(when n is not multiple of D_NR) + { + a01 = L + j; //pointer to block of A to be used for GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i; //pointer to block of B to be used for GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = j / D_NR; //number of GEMM operations to be performed(in blocks of 4x4) + + ///load 4x4 block of b11 + + ymm0 = _mm256_setzero_pd(); + ymm1 = _mm256_setzero_pd(); + ymm2 = _mm256_setzero_pd(); + ymm3 = _mm256_setzero_pd(); + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation begins/// + + for(k = 0; k < k_iter; k++) ///loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //broadcast 1st row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] + + a01 += cs_a; //move to next row of A + + //load 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR));//B10[4][1] B10[5][1] B10[6][1] B10[7][1] + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] + + a01 += cs_a; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) + + //broadcast 3rd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] + + a01 += cs_a; //move to next row of A + + //load next 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) + ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) + + //broadcast 4th row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] + + a01 += cs_a; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM + } + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); + + //subtract the calculated GEMM block from current TRSM block + //load 8x4 block of B11 + if(n_remainder == 3) + { + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0-3][1] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][1] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0-3][2] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4-7][2] + ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + } + if(n_remainder == 2) + { + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0-3][1] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][1] + ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] + ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] + ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + } + if(n_remainder == 1) + { + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] + ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][1] + ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][1] + ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] + ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] + ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + } + + ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= B10[0-3][0] + ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha -= B10[4-7][0] + ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha -= B10[0-3][1] + ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= B10[4-7][1] + ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= B10[0-3][2] + ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= B10[4-7][2] + ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= B10[0-3][3] + ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= B10[4-7][3] + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + ymm7 = _mm256_broadcast_sd((double const *)(&ones)); + + //1st col + ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + //2nd col + a11 += 1; + ymm1 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][1] + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][1] + + //3rd col + a11 += 1; + ymm3 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][2] + ymm4 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][2] + ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][2] + + //4th col + a11 += 1; + ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 3)); //A11[3][3] + + //compute reciprocals of L(i,i) and broadcast in registers + ymm0 = _mm256_unpacklo_pd(ymm0, ymm2); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] + ymm2 = _mm256_unpacklo_pd(ymm5, ymm6); //A11[2][2] A11[3][3] A11[1][1] A11[3][3] + + ymm0 = _mm256_blend_pd(ymm0, ymm2, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm7 = _mm256_div_pd(ymm7, ymm0); //(1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3]) + + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][3] + ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][3] + ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][3] + + //extract a00 + ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00);//(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) + + ymm8 = _mm256_mul_pd(ymm8, ymm0); //B11[0-3][0] /= A11[0][0] + + ymm12 = _mm256_mul_pd(ymm12, ymm0); //B11[4-7][0] /= A11[0][0] + + //extract a11 + ymm0 = _mm256_permute_pd(ymm7, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00);//(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) + + //(Row1): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm1, ymm8, ymm9); //B11[0-3][1] -= B11[0-3][0] * A11[0][1] + ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[0-3][2] -= B11[0-3][0] * A11[0][2] + ymm11 = _mm256_fnmadd_pd(ymm2, ymm8, ymm11); //B11[0-3][3] -= B11[0-3][0] * A11[0][3] + + ymm13 = _mm256_fnmadd_pd(ymm1, ymm12, ymm13); //B11[4-7][1] -= B11[4-7][0] * A11[0][1] + ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[4-7][2] -= B11[4-7][0] * A11[0][2] + ymm15 = _mm256_fnmadd_pd(ymm2, ymm12, ymm15); //B11[4-7][3] -= B11[4-7][0] * A11[0][3] + + ymm9 = _mm256_mul_pd(ymm9, ymm0); //B11[0-3][1] /= A11[1][1] + + ymm13 = _mm256_mul_pd(ymm13, ymm0); //B11[4-7][1] /= A11[1][1] + + //extract a22 + ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) + + //(Row2)FMA operations + ymm10 = _mm256_fnmadd_pd(ymm4, ymm9, ymm10); //B11[0-3][2] -= B11[0-3][1] * A11[1][2] + ymm11 = _mm256_fnmadd_pd(ymm5, ymm9, ymm11); //B11[0-3][3] -= B11[0-3][1] * A11[1][3] + + ymm14 = _mm256_fnmadd_pd(ymm4, ymm13, ymm14); //B11[4-7][2] -= B11[4-7][1] * A11[1][2] + ymm15 = _mm256_fnmadd_pd(ymm5, ymm13, ymm15); //B11[4-7][3] -= B11[4-7][1] * A11[1][3] + + ymm10 = _mm256_mul_pd(ymm10, ymm0); //B11[0-3][2] /= A11[2][2] + + ymm14 = _mm256_mul_pd(ymm14, ymm0); //B11[4-7][2] /= A11[2][2] + + //extract a33 + ymm0 = _mm256_permute_pd(ymm7, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11); //(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + + //(Row3)FMA operations + ymm11 = _mm256_fnmadd_pd(ymm6, ymm10, ymm11); //B11[0-3][3] -= B11[0-3][2] * A11[2][3] + + ymm15 = _mm256_fnmadd_pd(ymm6, ymm14, ymm15); //B11[4-7][3] -= B11[4-7][2] * A11[2][3] + + ymm11 = _mm256_mul_pd(ymm11, ymm0); //B11[0-3][3] /= A11[3][3] + + ymm15 = _mm256_mul_pd(ymm15, ymm0); //B11[4-7][3] /= A11[3][3] + + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14);//store(B11[4-7][2]) + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + } + } + } + if((m & 4)) ///implementation for remainder rows(when m_remainder is a multiple of 4) + { + for(j = 0; (j+D_NR-1) a01 ----> + ***************** *********** + *b01*b11* * * * * * * +b11 * * * * * **a01 * * a11 + | ***************** ********* | + | * * * * * *a11* * | + | * * * * * * * * | + v ***************** ****** v + * * * * * * * + * * * * * * * + ***************** * * + * + +*/ +static err_t bli_dtrsm_small_XAltB_unitDiag( + side_t side, + obj_t* AlphaObj, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ) +{ + dim_t D_MR = 8; //block dimension along the rows + dim_t D_NR = 4; //block dimension along the columns + + dim_t m = bli_obj_length(b); //number of rows + dim_t n = bli_obj_width(b); //number of columns + dim_t m_remainder = m % D_MR; //number of corner rows + dim_t n_remainder = n % D_NR; //number of corner columns + dim_t cs_a = bli_obj_col_stride(a); //column stride of matrix A + dim_t cs_b = bli_obj_col_stride(b); //column stride of matrix B + + if(max(m,n) > 120) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + + + dim_t i, j, k; //loop variablse + dim_t k_iter; //determines the number of GEMM operations to be done + dim_t cs_b_offset[2]; //pre-calculated strides + + double ones = 1.0; + + double AlphaVal = *(double *)AlphaObj->buffer; //value of Alpha + double *L = a->buffer; //pointer to matrix A + double *B = b->buffer; //pointer to matrix B + + double *a01, *a11, *b10, *b11; //pointers for GEMM and TRSM blocks + double *ptr_a01_dup; + + cs_b_offset[0] = cs_b << 1; //cs_b_offset[0] = cs_b * 2; + cs_b_offset[1] = cs_b_offset[0] + cs_b;//cs_b_offset[1] = cs_b * 3; + + //ymm scratch reginsters + __m256d ymm0, ymm1, ymm2, ymm3; + __m256d ymm4, ymm5, ymm6, ymm7; + __m256d ymm8, ymm9, ymm10, ymm11; + __m256d ymm12, ymm13, ymm14, ymm15; + __m256d ymm16; + + for(i = 0; (i+D_MR-1) < m; i += D_MR) //loop along 'M' direction + { + for(j = 0; (j+D_NR-1) < n; j += D_NR) //loop along 'N' direction + { + a01 = L + j; //pointer to block of A to be used in GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i; //pointer to block of B to be used in GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = j / D_NR; //number of GEMM operations to be done(in blocks of 4x4) + + ymm0 = _mm256_setzero_pd(); + ymm1 = _mm256_setzero_pd(); + ymm2 = _mm256_setzero_pd(); + ymm3 = _mm256_setzero_pd(); + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation starts/// + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //broadcast 1st row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] + + a01 += cs_a; //move to next row + + //load 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] + + a01 += cs_a; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) + + //broadcast 3rd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] + + a01 += cs_a; //move to next row of A01 + + //load next 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) + ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) + + //broadcast 4th row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] + + a01 += cs_a; //move to next row of A01 + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM + } + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); + //load 8x4 block of B11 + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] + + + ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 + ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 + ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 + ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 + + ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 + ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 + ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 + ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + //1st col + ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + //2nd col + a11 += 1; + ymm1 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][1] + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][1] + + //3rd col + a11 += 1; + ymm3 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][2] + ymm4 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][2] + ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][2] + + //4th col + a11 += 1; + ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 3)); //A11[3][3] + + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][3] + ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][3] + ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][3] + + //(Row1): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm1, ymm8, ymm9); //B11[0-3][1] -= B11[0-3][0] * A11[0][1] + ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[0-3][2] -= B11[0-3][0] * A11[0][2] + ymm11 = _mm256_fnmadd_pd(ymm2, ymm8, ymm11); //B11[0-3][3] -= B11[0-3][0] * A11[0][3] + + ymm13 = _mm256_fnmadd_pd(ymm1, ymm12, ymm13); //B11[4-7][1] -= B11[4-7][0] * A11[0][1] + ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[4-7][2] -= B11[4-7][0] * A11[0][2] + ymm15 = _mm256_fnmadd_pd(ymm2, ymm12, ymm15); //B11[4-7][3] -= B11[4-7][0] * A11[0][3] + + //(Row2)FMA operations + ymm10 = _mm256_fnmadd_pd(ymm4, ymm9, ymm10); //B11[0-3][2] -= B11[0-3][1] * A11[1][2] + ymm11 = _mm256_fnmadd_pd(ymm5, ymm9, ymm11); //B11[0-3][3] -= B11[0-3][1] * A11[1][3] + + ymm14 = _mm256_fnmadd_pd(ymm4, ymm13, ymm14); //B11[4-7][2] -= B11[4-7][1] * A11[1][2] + ymm15 = _mm256_fnmadd_pd(ymm5, ymm13, ymm15); //B11[4-7][3] -= B11[4-7][1] * A11[1][3] + + //(Row3)FMA operations + ymm11 = _mm256_fnmadd_pd(ymm6, ymm10, ymm11); //B11[0-3][3] -= B11[0-3][2] * A11[2][3] + + ymm15 = _mm256_fnmadd_pd(ymm6, ymm14, ymm15); //B11[4-7][3] -= B11[4-7][2] * A11[2][3] + + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b), ymm11); //store(B11[0-3][3]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b + D_NR), ymm15);//store(B11[4-7][3]) + } + if(n_remainder) //implementation for remainder columns(when n is not multiple of D_NR) + { + a01 = L + j; //pointer to block of A to be used for GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i; //pointer to block of B to be used for GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = j / D_NR; //number of GEMM operations to be performed(in blocks of 4x4) + + ///load 4x4 block of b11 + + ymm0 = _mm256_setzero_pd(); + ymm1 = _mm256_setzero_pd(); + ymm2 = _mm256_setzero_pd(); + ymm3 = _mm256_setzero_pd(); + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation begins/// + + for(k = 0; k < k_iter; k++) ///loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //broadcast 1st row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] + + a01 += cs_a; //move to next row of A + + //load 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR));//B10[4][1] B10[5][1] B10[6][1] B10[7][1] + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] + + a01 += cs_a; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) + + //broadcast 3rd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] + + a01 += cs_a; //move to next row of A + + //load next 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) + ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) + + //broadcast 4th row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] + + a01 += cs_a; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM + } + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); + + //subtract the calculated GEMM block from current TRSM block + //load 8x4 block of B11 + if(n_remainder == 3) + { + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0-3][1] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][1] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0-3][2] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4-7][2] + ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + } + if(n_remainder == 2) + { + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0-3][1] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][1] + ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] + ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] + ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + } + if(n_remainder == 1) + { + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] + ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][1] + ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][1] + ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] + ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] + ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + } + + ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= B10[0-3][0] + ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha -= B10[4-7][0] + ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha -= B10[0-3][1] + ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= B10[4-7][1] + ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= B10[0-3][2] + ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= B10[4-7][2] + ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= B10[0-3][3] + ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= B10[4-7][3] + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + ymm7 = _mm256_broadcast_sd((double const *)(&ones)); + + //1st col + ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + //2nd col + a11 += 1; + ymm1 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][1] + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][1] + + //3rd col + a11 += 1; + ymm3 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][2] + ymm4 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][2] + ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][2] + + //4th col + a11 += 1; + ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 3)); //A11[3][3] + + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][3] + ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][3] + ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][3] + + //(Row1): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm1, ymm8, ymm9); //B11[0-3][1] -= B11[0-3][0] * A11[0][1] + ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[0-3][2] -= B11[0-3][0] * A11[0][2] + ymm11 = _mm256_fnmadd_pd(ymm2, ymm8, ymm11); //B11[0-3][3] -= B11[0-3][0] * A11[0][3] + + ymm13 = _mm256_fnmadd_pd(ymm1, ymm12, ymm13); //B11[4-7][1] -= B11[4-7][0] * A11[0][1] + ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[4-7][2] -= B11[4-7][0] * A11[0][2] + ymm15 = _mm256_fnmadd_pd(ymm2, ymm12, ymm15); //B11[4-7][3] -= B11[4-7][0] * A11[0][3] + + //(Row2)FMA operations + ymm10 = _mm256_fnmadd_pd(ymm4, ymm9, ymm10); //B11[0-3][2] -= B11[0-3][1] * A11[1][2] + ymm11 = _mm256_fnmadd_pd(ymm5, ymm9, ymm11); //B11[0-3][3] -= B11[0-3][1] * A11[1][3] + + ymm14 = _mm256_fnmadd_pd(ymm4, ymm13, ymm14); //B11[4-7][2] -= B11[4-7][1] * A11[1][2] + ymm15 = _mm256_fnmadd_pd(ymm5, ymm13, ymm15); //B11[4-7][3] -= B11[4-7][1] * A11[1][3] + + //(Row3)FMA operations + ymm11 = _mm256_fnmadd_pd(ymm6, ymm10, ymm11); //B11[0-3][3] -= B11[0-3][2] * A11[2][3] + + ymm15 = _mm256_fnmadd_pd(ymm6, ymm14, ymm15); //B11[4-7][3] -= B11[4-7][2] * A11[2][3] + + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14);//store(B11[4-7][2]) + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + } + } + } + if((m & 4)) ///implementation for remainder rows(when m_remainder is a multiple of 4) + { + for(j = 0; (j+D_NR-1) 120) + return BLIS_NOT_YET_IMPLEMENTED; + + dim_t i, j, k; //loop variablse + dim_t k_iter; //determines the number of GEMM operations to be done + dim_t cs_b_offset[2]; //pre-calculated strides + + double ones = 1.0; + + double AlphaVal = *(double *)AlphaObj->buffer; //value of Alpha + double *L = a->buffer; //pointer to matrix A + double *B = b->buffer; //pointer to matrix B + + double *a01, *a11, *b10, *b11; //pointers for GEMM and TRSM blocks + double *ptr_a01_dup; + + cs_b_offset[0] = cs_b << 1; //cs_b_offset[0] = cs_b * 2; + cs_b_offset[1] = cs_b_offset[0] + cs_b;//cs_b_offset[1] = cs_b * 3; + + //ymm scratch reginsters + __m256d ymm0, ymm1, ymm2, ymm3; + __m256d ymm4, ymm5, ymm6, ymm7; + __m256d ymm8, ymm9, ymm10, ymm11; + __m256d ymm12, ymm13, ymm14, ymm15; + __m256d ymm16; + + for(i = (m-D_MR); (i+1) > 0; i -= D_MR) //loop along 'M' direction + { + for(j = (n-D_NR); (j+1) > 0; j -= D_NR) //loop along 'N' direction + { + a01 = L + j*cs_a +(j+D_NR); //pointer to block of A to be used in GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used in GEMM + b11 = B + (i) + (j)*cs_b; //pointer to block of B to be used for TRSM + + k_iter = (n-j-D_NR) / D_NR; //number of GEMM operations to be done(in blocks of 4x4) + + ymm0 = _mm256_setzero_pd(); + ymm1 = _mm256_setzero_pd(); + ymm2 = _mm256_setzero_pd(); + ymm3 = _mm256_setzero_pd(); + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation starts/// + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //broadcast 1st row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] + + a01 += 1; //move to next row + + //load 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] + + a01 += 1; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) + + //broadcast 3rd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] + + a01 += 1; //move to next row of A01 + + //load next 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) + ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) + + //broadcast 4th row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] + + a01 += 1; //move to next row of A01 + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM + } + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); + //load 8x4 block of B11 + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] + + + ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 + ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 + ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 + ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 + + ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 + ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 + ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 + ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + ymm7 = _mm256_broadcast_sd((double const *)(&ones)); + + //1st col + ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + //2nd col + a11 += 1; + ymm1 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][1] + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][1] + + //3rd col + a11 += 1; + ymm3 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][2] + ymm4 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][2] + ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][2] + + //4th col + a11 += 1; + ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 3)); //A11[3][3] + + //compute reciprocals of L(i,i) and broadcast in registers + ymm0 = _mm256_unpacklo_pd(ymm0, ymm2); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] + ymm2 = _mm256_unpacklo_pd(ymm5, ymm6); //A11[2][2] A11[3][3] A11[1][1] A11[3][3] + + ymm0 = _mm256_blend_pd(ymm0, ymm2, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm7 = _mm256_div_pd(ymm7, ymm0); //(1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3]) + + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][3] + ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][3] + ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][3] + + //extract a33 + ymm0 = _mm256_permute_pd(ymm7, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + + ymm11 = _mm256_mul_pd(ymm11, ymm0); + + ymm15 = _mm256_mul_pd(ymm15, ymm0); + + //extract a22 + ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) + + //(row 3):FMA operations + ymm10 = _mm256_fnmadd_pd(ymm11, ymm6, ymm10); + ymm9 = _mm256_fnmadd_pd(ymm11, ymm5, ymm9); + ymm8 = _mm256_fnmadd_pd(ymm11, ymm2, ymm8); + + ymm14 = _mm256_fnmadd_pd(ymm15, ymm6, ymm14); + ymm13 = _mm256_fnmadd_pd(ymm15, ymm5, ymm13); + ymm12 = _mm256_fnmadd_pd(ymm15, ymm2, ymm12); + + ymm10 = _mm256_mul_pd(ymm10, ymm0); + + ymm14 = _mm256_mul_pd(ymm14, ymm0); + + //extract a11 + ymm0 = _mm256_permute_pd(ymm7, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00);//(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) + + //(Row 2): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm10, ymm4, ymm9); + ymm8 = _mm256_fnmadd_pd(ymm10, ymm3, ymm8); + + ymm13 = _mm256_fnmadd_pd(ymm14, ymm4, ymm13); + ymm12 = _mm256_fnmadd_pd(ymm14, ymm3, ymm12); + + ymm9 = _mm256_mul_pd(ymm9, ymm0); + + ymm13 = _mm256_mul_pd(ymm13, ymm0); + + //extract a00 + ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) + + //(Row 1): FMA operations + ymm8 = _mm256_fnmadd_pd(ymm9, ymm1, ymm8); + + ymm12 = _mm256_fnmadd_pd(ymm13, ymm1, ymm12); + + ymm8 = _mm256_mul_pd(ymm8, ymm0); //B11[0-3][0] /= A11[0][0] + + ymm12 = _mm256_mul_pd(ymm12, ymm0); //B11[4-7][0] /= A11[0][0] + + + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b), ymm11); //store(B11[0-3][3]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b + D_NR), ymm15);//store(B11[4-7][3]) + + + } + if(n_remainder) //implementation for remainder columns(when n is not multiple of D_NR) + { + a01 = L + j*cs_a + (j+D_NR); //pointer to block of A to be used for GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i + (j + D_NR)*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = (n-j-D_NR) / D_NR; //number of GEMM operations to be performed(in blocks of 4x4) + + ///load 4x4 block of b11 + + ymm0 = _mm256_setzero_pd(); + ymm1 = _mm256_setzero_pd(); + ymm2 = _mm256_setzero_pd(); + ymm3 = _mm256_setzero_pd(); + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation begins/// + + for(k = 0; k < k_iter; k++) ///loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //broadcast 1st row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] + + a01 += 1; //move to next row of A + + //load 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR));//B10[4][1] B10[5][1] B10[6][1] B10[7][1] + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] + + a01 += 1; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) + + //broadcast 3rd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] + + a01 += 1; //move to next row of A + + //load next 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) + ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) + + //broadcast 4th row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] + + a01 += 1; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM + } + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); + + //subtract the calculated GEMM block from current TRSM block + //load 8x4 block of B11 + if(n_remainder == 3) + { + ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + ymm9 = _mm256_loadu_pd((double const *)(b11+cs_b)); //B11[0-3][0] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][0] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b*2)); //B11[0-3][1] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b*2 + D_NR)); //B11[4-7][1] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0-3][2] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4-7][2] + } + if(n_remainder == 2) + { + ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] + ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] + ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0-3][0] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4-7][0] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0-3][1] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4-7][1] + } + if(n_remainder == 1) + { + ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][1] + ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][1] + ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] + ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] + ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + ymm11 = _mm256_loadu_pd((double const *)(b11+cs_b_offset[1])); //B11[0-3][0] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] +D_NR)); //B11[4-7][0] + } + + ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= B10[0-3][0] + ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha -= B10[4-7][0] + ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha -= B10[0-3][1] + ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= B10[4-7][1] + ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= B10[0-3][2] + ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= B10[4-7][2] + ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= B10[0-3][3] + ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= B10[4-7][3] + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + ymm7 = _mm256_broadcast_sd((double const *)(&ones)); + + //1st col + ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + //2nd col + a11 += 1; + ymm1 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][1] + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][1] + + //3rd col + a11 += 1; + ymm3 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][2] + ymm4 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][2] + ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][2] + + //4th col + a11 += 1; + ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 3)); //A11[3][3] + + //compute reciprocals of L(i,i) and broadcast in registers + ymm0 = _mm256_unpacklo_pd(ymm0, ymm2); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] + ymm2 = _mm256_unpacklo_pd(ymm5, ymm6); //A11[2][2] A11[3][3] A11[1][1] A11[3][3] + + ymm0 = _mm256_blend_pd(ymm0, ymm2, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm7 = _mm256_div_pd(ymm7, ymm0); //(1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3]) + + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][3] + ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][3] + ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][3] + + //extract a33 + ymm0 = _mm256_permute_pd(ymm7, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + + ymm11 = _mm256_mul_pd(ymm11, ymm0); + + ymm15 = _mm256_mul_pd(ymm15, ymm0); + + //extract a22 + ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) + + //(row 3):FMA operations + ymm10 = _mm256_fnmadd_pd(ymm11, ymm6, ymm10); + ymm9 = _mm256_fnmadd_pd(ymm11, ymm5, ymm9); + ymm8 = _mm256_fnmadd_pd(ymm11, ymm2, ymm8); + + ymm14 = _mm256_fnmadd_pd(ymm15, ymm6, ymm14); + ymm13 = _mm256_fnmadd_pd(ymm15, ymm5, ymm13); + ymm12 = _mm256_fnmadd_pd(ymm15, ymm2, ymm12); + + ymm10 = _mm256_mul_pd(ymm10, ymm0); + + ymm14 = _mm256_mul_pd(ymm14, ymm0); + + //extract a11 + ymm0 = _mm256_permute_pd(ymm7, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00);//(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) + + //(Row 2): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm10, ymm4, ymm9); + ymm8 = _mm256_fnmadd_pd(ymm10, ymm3, ymm8); + + ymm13 = _mm256_fnmadd_pd(ymm14, ymm4, ymm13); + ymm12 = _mm256_fnmadd_pd(ymm14, ymm3, ymm12); + + ymm9 = _mm256_mul_pd(ymm9, ymm0); + + ymm13 = _mm256_mul_pd(ymm13, ymm0); + + //extract a00 + ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) + + //(Row 1): FMA operations + ymm8 = _mm256_fnmadd_pd(ymm9, ymm1, ymm8); + + ymm12 = _mm256_fnmadd_pd(ymm13, ymm1, ymm12); + + ymm8 = _mm256_mul_pd(ymm8, ymm0); //B11[0-3][0] /= A11[0][0] + + ymm12 = _mm256_mul_pd(ymm12, ymm0); //B11[4-7][0] /= A11[0][0] + + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14);//store(B11[4-7][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)(b11+ cs_b_offset[1]), ymm11); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) + } + } + } + if(i<0) + i += D_NR; + if((m & 4)) ///implementation for remainder rows(when m_remainder is a multiple of 4) + { + for(j = (n-D_NR); (j+1) > 0; j -=D_NR) //loop along n direction + { + a01 = L + j*cs_a + (j+D_NR); //pointer to block of A to be used for GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = (n-j-D_NR) / D_NR; //number of times GEMM operations to be performed(in blocks of 4x4) + + ymm15 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha + ///GEMM for previous blocks /// + + ///load 4x4 block of b11 + ymm0 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + //multiply by alpha + ymm0 = _mm256_mul_pd(ymm0, ymm15); //B11[x][0] *= alpha + ymm1 = _mm256_mul_pd(ymm1, ymm15); //B11[x][1] *=alpha + ymm2 = _mm256_mul_pd(ymm2, ymm15); //B11[x][2] *= alpha + ymm3 = _mm256_mul_pd(ymm3, ymm15); //B11[x][3] *= alpha + + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation starts/// + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //load 4x4 bblock of b10 + ymm8 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm9 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm10 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //B10[0][2] B10[1][2] B10[2][2] B10[3][2] + ymm11 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[1])); //B10[0][3] B10[1][3] B10[2][3] B10[3][3] + + //broadcast 1st row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] + + a01 += 1; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] + + a01 += 1; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B10[0][1]*A01[1][0] B10[1][1]*A01[1][0] B10[2][1]*A01[1][0] B10[3][1]*A01[1][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B10[0][1]*A01[1][1] B10[1][1]*A01[1][1] B10[2][1]*A01[1][1] B10[3][1]*A01[1][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B10[0][1]*A01[1][2] B10[1][1]*A01[1][2] B10[2][1]*A01[1][2] B10[3][1]*A01[1][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B10[0][1]*A01[1][3] B10[1][1]*A01[1][3] B10[2][1]*A01[1][3] B10[3][1]*A01[1][3]) + + //braodcast 3rd row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] + + a01 += 1; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B10[0][2]*A01[2][0] B10[1][2]*A01[2][0] B10[2][2]*A01[2][0] B10[3][2]*A01[2][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B10[0][2]*A01[2][1] B10[1][2]*A01[2][1] B10[2][2]*A01[2][1] B10[3][2]*A01[2][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B10[0][2]*A01[2][2] B10[1][2]*A01[2][2] B10[2][2]*A01[2][2] B10[3][2]*A01[2][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B10[0][2]*A01[2][3] B10[1][2]*A01[2][3] B10[2][2]*A01[2][3] B10[3][2]*A01[2][3]) + + //broadcast 4th row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] + + a01 += 1; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B10[0][3]*A01[3][0] B10[1][3]*A01[3][0] B10[2][3]*A01[3][0] B10[3][3]*A01[3][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B10[0][3]*A01[3][1] B10[1][3]*A01[3][1] B10[2][3]*A01[3][1] B10[3][3]*A01[3][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B10[0][3]*A01[3][2] B10[1][3]*A01[3][2] B10[2][3]*A01[3][2] B10[3][3]*A01[3][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B10[0][3]*A01[3][3] B10[1][3]*A01[3][3] B10[2][3]*A01[3][3] B10[3][3]*A01[3][3]) + + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM + } + + ///GEMM code end/// + + ymm0 = _mm256_sub_pd(ymm0, ymm4); //B11[x][0] -=ymm4 + ymm1 = _mm256_sub_pd(ymm1, ymm5); //B11[x][1] -= ymm5 + ymm2 = _mm256_sub_pd(ymm2, ymm6); //B11[x][2] -= ymm6 + ymm3 = _mm256_sub_pd(ymm3, ymm7); //B11[x][3] -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + + //1st col + ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][0] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][0] + ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][0] + + //2nd col + a11 += cs_a; + ymm8 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm9 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[1][1] + + //3rd col + a11 += cs_a; + ymm11 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][2] + ymm12 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[1][2] + + //4th col + a11 += cs_a; + ymm13 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][3] + + ymm14 = _mm256_broadcast_sd((double const *)&ones); + + //compute reciprocals of A(i,i) and broadcast in registers + ymm4 = _mm256_unpacklo_pd(ymm4, ymm8); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] + ymm8 = _mm256_unpacklo_pd(ymm11, ymm13); //A11[2][2] A11[3][3] A11[2][2] A11[3][3] + + ymm15 = _mm256_blend_pd(ymm4, ymm8, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm14 = _mm256_div_pd(ymm14, ymm15); // 1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] + + //extract a33 + ymm15 = _mm256_permute_pd(ymm14, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3]) + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + + ymm3 = _mm256_mul_pd(ymm3, ymm15); + + //extract a22 + ymm15 = _mm256_permute_pd(ymm14, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) + + //(Row 3): FMA operations + ymm2 = _mm256_fnmadd_pd(ymm3, ymm12, ymm2); + ymm1 = _mm256_fnmadd_pd(ymm3, ymm10, ymm1); + ymm0 = _mm256_fnmadd_pd(ymm3, ymm7, ymm0); + + ymm2 = _mm256_mul_pd(ymm2, ymm15); + + //extract a11 + ymm15 = _mm256_permute_pd(ymm14, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) + + //(ROW 2): FMA operations + ymm1 = _mm256_fnmadd_pd(ymm2, ymm9, ymm1); + ymm0 = _mm256_fnmadd_pd(ymm2, ymm6, ymm0); + + ymm1 = _mm256_mul_pd(ymm1, ymm15); + + //extract A00 + ymm15 = _mm256_permute_pd(ymm14, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) + + //(Row 1):FMA operations + ymm0 = _mm256_fnmadd_pd(ymm1, ymm5, ymm0); + + ymm0 = _mm256_mul_pd(ymm0, ymm15); + + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[x][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm1); //store(B11[x][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm2); //(store(B11[x][2])) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm3); //store(B11[x][3]) + + } + if(n_remainder) //implementation for remainder columns(when n is not a multiple of D_NR) + { + a01 = L + j*cs_a + (j+D_NR); //pointer to block of A to be used for GEMM + a11 = L + j*cs_a + j; //pointwr to block of A to be used for TRSM + b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = (n-j-D_NR) / D_NR; //number of times GEMM operations to be performed(in blocks of 4x4) + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha value + ///GEMM for previous blocks /// + + ///load 4x4 block of b11 + if(n_remainder == 3) + { + ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm1 = _mm256_loadu_pd((double const *)b11+ cs_b); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + } + if(n_remainder == 2) + { + ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm1 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + } + if(n_remainder == 1) + { + ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm1 = _mm256_broadcast_sd((double const *)&ones); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm2 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + } + //multiply by alpha + ymm0 = _mm256_mul_pd(ymm0, ymm16); //B11[x][0] *= alpha + ymm1 = _mm256_mul_pd(ymm1, ymm16); //B11[x][1] *=alpha + ymm2 = _mm256_mul_pd(ymm2, ymm16); //B11[x][2] *= alpha + ymm3 = _mm256_mul_pd(ymm3, ymm16); //B11[x][3] *= alpha + + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + + ///GEMM processing stars/// + + for(k = 0; k < k_iter; k++) + { + ptr_a01_dup = a01; + + //load 4x4 bblock of b10 + ymm8 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm9 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm10 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //B10[0][2] B10[1][2] B10[2][2] B10[3][2] + ymm11 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[1])); //B10[0][3] B10[1][3] B10[2][3] B10[3][3] + + //broadcast 1st row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] + + a01 += 1; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] + + a01 += 1; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B10[0][1]*A01[1][0] B10[1][1]*A01[1][0] B10[2][1]*A01[1][0] B10[3][1]*A01[1][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B10[0][1]*A01[1][1] B10[1][1]*A01[1][1] B10[2][1]*A01[1][1] B10[3][1]*A01[1][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B10[0][1]*A01[1][2] B10[1][1]*A01[1][2] B10[2][1]*A01[1][2] B10[3][1]*A01[1][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B10[0][1]*A01[1][3] B10[1][1]*A01[1][3] B10[2][1]*A01[1][3] B10[3][1]*A01[1][3]) + + //braodcast 3rd row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] + + a01 += 1; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B10[0][2]*A01[2][0] B10[1][2]*A01[2][0] B10[2][2]*A01[2][0] B10[3][2]*A01[2][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B10[0][2]*A01[2][1] B10[1][2]*A01[2][1] B10[2][2]*A01[2][1] B10[3][2]*A01[2][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B10[0][2]*A01[2][2] B10[1][2]*A01[2][2] B10[2][2]*A01[2][2] B10[3][2]*A01[2][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B10[0][2]*A01[2][3] B10[1][2]*A01[2][3] B10[2][2]*A01[2][3] B10[3][2]*A01[2][3]) + + //broadcast 4th row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] + + a01 += 1; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B10[0][3]*A01[3][0] B10[1][3]*A01[3][0] B10[2][3]*A01[3][0] B10[3][3]*A01[3][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B10[0][3]*A01[3][1] B10[1][3]*A01[3][1] B10[2][3]*A01[3][1] B10[3][3]*A01[3][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B10[0][3]*A01[3][2] B10[1][3]*A01[3][2] B10[2][3]*A01[3][2] B10[3][3]*A01[3][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B10[0][3]*A01[3][3] B10[1][3]*A01[3][3] B10[2][3]*A01[3][3] B10[3][3]*A01[3][3]) + + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM + + } + + ///GEMM code ends/// + + ymm0 = _mm256_sub_pd(ymm0, ymm4); //B11[x][0] -= ymm4 + ymm1 = _mm256_sub_pd(ymm1, ymm5); //B11[x][1] -= ymm5 + ymm2 = _mm256_sub_pd(ymm2, ymm6); //B11[x][2] -= ymm6 + ymm3 = _mm256_sub_pd(ymm3, ymm7); //B11[x][3] -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + //1st col + ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][0] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][0] + ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][0] + + //2nd col + a11 += cs_a; + ymm8 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm9 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[1][1] + + //3rd col + a11 += cs_a; + ymm11 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][2] + ymm12 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[1][2] + + //4th col + a11 += cs_a; + ymm13 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][3] + + ymm14 = _mm256_broadcast_sd((double const *)&ones); + + //compute reciprocals of A(i,i) and broadcast in registers + ymm4 = _mm256_unpacklo_pd(ymm4, ymm8); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] + ymm8 = _mm256_unpacklo_pd(ymm11, ymm13); //A11[2][2] A11[3][3] A11[2][2] A11[3][3] + + ymm15 = _mm256_blend_pd(ymm4, ymm8, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm14 = _mm256_div_pd(ymm14, ymm15); // 1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] + + //extract a33 + ymm15 = _mm256_permute_pd(ymm14, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3]) + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + + ymm3 = _mm256_mul_pd(ymm3, ymm15); + + //extract a22 + ymm15 = _mm256_permute_pd(ymm14, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) + + //(Row 3): FMA operations + ymm2 = _mm256_fnmadd_pd(ymm3, ymm12, ymm2); + ymm1 = _mm256_fnmadd_pd(ymm3, ymm10, ymm1); + ymm0 = _mm256_fnmadd_pd(ymm3, ymm7, ymm0); + + ymm2 = _mm256_mul_pd(ymm2, ymm15); + + //extract a11 + ymm15 = _mm256_permute_pd(ymm14, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) + + //(ROW 2): FMA operations + ymm1 = _mm256_fnmadd_pd(ymm2, ymm9, ymm1); + ymm0 = _mm256_fnmadd_pd(ymm2, ymm6, ymm0); + + ymm1 = _mm256_mul_pd(ymm1, ymm15); + + //extract A00 + ymm15 = _mm256_permute_pd(ymm14, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) + + //(Row 1):FMA operations + ymm0 = _mm256_fnmadd_pd(ymm1, ymm5, ymm0); + + ymm0 = _mm256_mul_pd(ymm0, ymm15); + + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)(b11 + cs_b), ymm1); //store(B11[x][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm2); //(store(B11[x][2])) + _mm256_storeu_pd((double *)(b11 + cs_b*3), ymm3); //store(B11[x][0]) + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)(b11+ cs_b * 2), ymm2); //store(B11[x][0]) + _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[x][1]) + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[x][0]) + } + + } + m_remainder -= 4; + i -= 4; + } +// if(i < 0) i = 0; + if(m_remainder) ///implementation for remainder rows + { + dtrsm_small_XAlB(L, B, AlphaVal, m_remainder, n, cs_a, cs_b); + } + return BLIS_SUCCESS; +} + +/*implements TRSM for the case XA = alpha * B + *A is lower triangular, unit-diagonal, no transpose + *dimensions: X:mxn A:nxn B: mxn + */ + +/* <---b11 <---a11 + ***************** * + *b01*b11* * * * * + ^ * * * * * ^ * * + | ***************** | ******* + | * * * * * | * * * + | * * * * * a01* * * +b10 ***************** ************* + * * * * * * * * * + * * * * * * * * * + ***************** ******************* + +*/ +static err_t bli_dtrsm_small_XAlB_unitDiag( + side_t side, + obj_t* AlphaObj, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ) +{ + dim_t D_MR = 8; //block dimension along the rows + dim_t D_NR = 4; //block dimension along the columns + + dim_t m = bli_obj_length(b); //number of rows + dim_t n = bli_obj_width(b); //number of columns + dim_t m_remainder = m % D_MR; //number of corner rows + dim_t n_remainder = n % D_NR; //number of corner columns + dim_t cs_a = bli_obj_col_stride(a); //column stride of matrix A + dim_t cs_b = bli_obj_col_stride(b); //column stride of matrix B + + if(max(m,n) > 120) + return BLIS_NOT_YET_IMPLEMENTED; + + dim_t i, j, k; //loop variablse + dim_t k_iter; //determines the number of GEMM operations to be done + dim_t cs_b_offset[2]; //pre-calculated strides + + double ones = 1.0; + + double AlphaVal = *(double *)AlphaObj->buffer; //value of Alpha + double *L = a->buffer; //pointer to matrix A + double *B = b->buffer; //pointer to matrix B + + double *a01, *a11, *b10, *b11; //pointers for GEMM and TRSM blocks + double *ptr_a01_dup; + + cs_b_offset[0] = cs_b << 1; //cs_b_offset[0] = cs_b * 2; + cs_b_offset[1] = cs_b_offset[0] + cs_b;//cs_b_offset[1] = cs_b * 3; + + //ymm scratch reginsters + __m256d ymm0, ymm1, ymm2, ymm3; + __m256d ymm4, ymm5, ymm6, ymm7; + __m256d ymm8, ymm9, ymm10, ymm11; + __m256d ymm12, ymm13, ymm14, ymm15; + __m256d ymm16; + + for(i = (m-D_MR); (i+1) > 0; i -= D_MR) //loop along 'M' direction + { + for(j = (n-D_NR); (j+1) > 0; j -= D_NR) //loop along 'N' direction + { + a01 = L + j*cs_a +(j+D_NR); //pointer to block of A to be used in GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used in GEMM + b11 = B + (i) + (j)*cs_b; //pointer to block of B to be used for TRSM + + k_iter = (n-j-D_NR) / D_NR; //number of GEMM operations to be done(in blocks of 4x4) + + ymm0 = _mm256_setzero_pd(); + ymm1 = _mm256_setzero_pd(); + ymm2 = _mm256_setzero_pd(); + ymm3 = _mm256_setzero_pd(); + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation starts/// + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //broadcast 1st row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] + + a01 += 1; //move to next row + + //load 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] + + a01 += 1; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) + + //broadcast 3rd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] + + a01 += 1; //move to next row of A01 + + //load next 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) + ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) + + //broadcast 4th row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] + + a01 += 1; //move to next row of A01 + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM + } + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); + //load 8x4 block of B11 + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] + + + ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 + ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 + ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 + ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 + + ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 + ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 + ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 + ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + //1st col + ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + //2nd col + a11 += 1; + ymm1 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][1] + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][1] + + //3rd col + a11 += 1; + ymm3 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][2] + ymm4 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][2] + ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][2] + + //4th col + a11 += 1; + ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 3)); //A11[3][3] + + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][3] + ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][3] + ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][3] + + //(row 3):FMA operations + ymm10 = _mm256_fnmadd_pd(ymm11, ymm6, ymm10); + ymm9 = _mm256_fnmadd_pd(ymm11, ymm5, ymm9); + ymm8 = _mm256_fnmadd_pd(ymm11, ymm2, ymm8); + + ymm14 = _mm256_fnmadd_pd(ymm15, ymm6, ymm14); + ymm13 = _mm256_fnmadd_pd(ymm15, ymm5, ymm13); + ymm12 = _mm256_fnmadd_pd(ymm15, ymm2, ymm12); + + //(Row 2): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm10, ymm4, ymm9); + ymm8 = _mm256_fnmadd_pd(ymm10, ymm3, ymm8); + + ymm13 = _mm256_fnmadd_pd(ymm14, ymm4, ymm13); + ymm12 = _mm256_fnmadd_pd(ymm14, ymm3, ymm12); + + //(Row 1): FMA operations + ymm8 = _mm256_fnmadd_pd(ymm9, ymm1, ymm8); + + ymm12 = _mm256_fnmadd_pd(ymm13, ymm1, ymm12); + + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b), ymm11); //store(B11[0-3][3]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b + D_NR), ymm15);//store(B11[4-7][3]) + + + } + if(n_remainder) //implementation for remainder columns(when n is not multiple of D_NR) + { + a01 = L + j*cs_a + (j+D_NR); //pointer to block of A to be used for GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i + (j + D_NR)*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = (n-j-D_NR) / D_NR; //number of GEMM operations to be performed(in blocks of 4x4) + + ///load 4x4 block of b11 + + ymm0 = _mm256_setzero_pd(); + ymm1 = _mm256_setzero_pd(); + ymm2 = _mm256_setzero_pd(); + ymm3 = _mm256_setzero_pd(); + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation begins/// + + for(k = 0; k < k_iter; k++) ///loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //broadcast 1st row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] + + a01 += 1; //move to next row of A + + //load 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR));//B10[4][1] B10[5][1] B10[6][1] B10[7][1] + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] + + a01 += 1; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) + + //broadcast 3rd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] + + a01 += 1; //move to next row of A + + //load next 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) + ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) + + //broadcast 4th row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] + + a01 += 1; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM + } + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); + + //subtract the calculated GEMM block from current TRSM block + //load 8x4 block of B11 + if(n_remainder == 3) + { + ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + ymm9 = _mm256_loadu_pd((double const *)(b11+cs_b)); //B11[0-3][0] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][0] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b*2)); //B11[0-3][1] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b*2 + D_NR)); //B11[4-7][1] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0-3][2] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4-7][2] + } + if(n_remainder == 2) + { + ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] + ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] + ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0-3][0] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4-7][0] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0-3][1] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4-7][1] + } + if(n_remainder == 1) + { + ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][1] + ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][1] + ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] + ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] + ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + ymm11 = _mm256_loadu_pd((double const *)(b11+cs_b_offset[1])); //B11[0-3][0] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] +D_NR)); //B11[4-7][0] + } + + ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= B10[0-3][0] + ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha -= B10[4-7][0] + ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha -= B10[0-3][1] + ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= B10[4-7][1] + ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= B10[0-3][2] + ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= B10[4-7][2] + ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= B10[0-3][3] + ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= B10[4-7][3] + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + ymm7 = _mm256_broadcast_sd((double const *)(&ones)); + + //1st col + ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + //2nd col + a11 += 1; + ymm1 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][1] + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][1] + + //3rd col + a11 += 1; + ymm3 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][2] + ymm4 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][2] + ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][2] + + //4th col + a11 += 1; + ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 3)); //A11[3][3] + + + ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][3] + ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][3] + ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][3] + + //(row 3):FMA operations + ymm10 = _mm256_fnmadd_pd(ymm11, ymm6, ymm10); + ymm9 = _mm256_fnmadd_pd(ymm11, ymm5, ymm9); + ymm8 = _mm256_fnmadd_pd(ymm11, ymm2, ymm8); + + ymm14 = _mm256_fnmadd_pd(ymm15, ymm6, ymm14); + ymm13 = _mm256_fnmadd_pd(ymm15, ymm5, ymm13); + ymm12 = _mm256_fnmadd_pd(ymm15, ymm2, ymm12); + + //(Row 2): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm10, ymm4, ymm9); + ymm8 = _mm256_fnmadd_pd(ymm10, ymm3, ymm8); + + ymm13 = _mm256_fnmadd_pd(ymm14, ymm4, ymm13); + ymm12 = _mm256_fnmadd_pd(ymm14, ymm3, ymm12); + + //(Row 1): FMA operations + ymm8 = _mm256_fnmadd_pd(ymm9, ymm1, ymm8); + + ymm12 = _mm256_fnmadd_pd(ymm13, ymm1, ymm12); + + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14);//store(B11[4-7][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)(b11+ cs_b_offset[1]), ymm11); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) + } + } + } + if(i<0) + i += D_NR; + if((m & 4)) ///implementation for remainder rows(when m_remainder is a multiple of 4) + { + for(j = (n-D_NR); (j+1) > 0; j -=D_NR) //loop along n direction + { + a01 = L + j*cs_a + (j+D_NR); //pointer to block of A to be used for GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = (n-j-D_NR) / D_NR; //number of times GEMM operations to be performed(in blocks of 4x4) + + ymm15 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha + ///GEMM for previous blocks /// + + ///load 4x4 block of b11 + ymm0 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + //multiply by alpha + ymm0 = _mm256_mul_pd(ymm0, ymm15); //B11[x][0] *= alpha + ymm1 = _mm256_mul_pd(ymm1, ymm15); //B11[x][1] *=alpha + ymm2 = _mm256_mul_pd(ymm2, ymm15); //B11[x][2] *= alpha + ymm3 = _mm256_mul_pd(ymm3, ymm15); //B11[x][3] *= alpha + + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation starts/// + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //load 4x4 bblock of b10 + ymm8 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm9 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm10 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //B10[0][2] B10[1][2] B10[2][2] B10[3][2] + ymm11 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[1])); //B10[0][3] B10[1][3] B10[2][3] B10[3][3] + + //broadcast 1st row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] + + a01 += 1; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] + + a01 += 1; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B10[0][1]*A01[1][0] B10[1][1]*A01[1][0] B10[2][1]*A01[1][0] B10[3][1]*A01[1][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B10[0][1]*A01[1][1] B10[1][1]*A01[1][1] B10[2][1]*A01[1][1] B10[3][1]*A01[1][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B10[0][1]*A01[1][2] B10[1][1]*A01[1][2] B10[2][1]*A01[1][2] B10[3][1]*A01[1][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B10[0][1]*A01[1][3] B10[1][1]*A01[1][3] B10[2][1]*A01[1][3] B10[3][1]*A01[1][3]) + + //braodcast 3rd row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] + + a01 += 1; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B10[0][2]*A01[2][0] B10[1][2]*A01[2][0] B10[2][2]*A01[2][0] B10[3][2]*A01[2][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B10[0][2]*A01[2][1] B10[1][2]*A01[2][1] B10[2][2]*A01[2][1] B10[3][2]*A01[2][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B10[0][2]*A01[2][2] B10[1][2]*A01[2][2] B10[2][2]*A01[2][2] B10[3][2]*A01[2][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B10[0][2]*A01[2][3] B10[1][2]*A01[2][3] B10[2][2]*A01[2][3] B10[3][2]*A01[2][3]) + + //broadcast 4th row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] + + a01 += 1; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B10[0][3]*A01[3][0] B10[1][3]*A01[3][0] B10[2][3]*A01[3][0] B10[3][3]*A01[3][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B10[0][3]*A01[3][1] B10[1][3]*A01[3][1] B10[2][3]*A01[3][1] B10[3][3]*A01[3][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B10[0][3]*A01[3][2] B10[1][3]*A01[3][2] B10[2][3]*A01[3][2] B10[3][3]*A01[3][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B10[0][3]*A01[3][3] B10[1][3]*A01[3][3] B10[2][3]*A01[3][3] B10[3][3]*A01[3][3]) + + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM + } + + ///GEMM code end/// + + ymm0 = _mm256_sub_pd(ymm0, ymm4); //B11[x][0] -=ymm4 + ymm1 = _mm256_sub_pd(ymm1, ymm5); //B11[x][1] -= ymm5 + ymm2 = _mm256_sub_pd(ymm2, ymm6); //B11[x][2] -= ymm6 + ymm3 = _mm256_sub_pd(ymm3, ymm7); //B11[x][3] -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + + //1st col + ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][0] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][0] + ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][0] + + //2nd col + a11 += cs_a; + ymm8 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm9 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[1][1] + + //3rd col + a11 += cs_a; + ymm11 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][2] + ymm12 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[1][2] + + //4th col + a11 += cs_a; + ymm13 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][3] + + ymm14 = _mm256_broadcast_sd((double const *)&ones); + + + //(Row 3): FMA operations + ymm2 = _mm256_fnmadd_pd(ymm3, ymm12, ymm2); + ymm1 = _mm256_fnmadd_pd(ymm3, ymm10, ymm1); + ymm0 = _mm256_fnmadd_pd(ymm3, ymm7, ymm0); + + //(ROW 2): FMA operations + ymm1 = _mm256_fnmadd_pd(ymm2, ymm9, ymm1); + ymm0 = _mm256_fnmadd_pd(ymm2, ymm6, ymm0); + + //(Row 1):FMA operations + ymm0 = _mm256_fnmadd_pd(ymm1, ymm5, ymm0); + + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[x][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm1); //store(B11[x][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm2); //store(B11[x][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm3); //store(B11[x][3]) + + } + if(n_remainder) //implementation for remainder columns(when n is not a multiple of D_NR) + { + a01 = L + j*cs_a + (j+D_NR); //pointer to block of A to be used for GEMM + a11 = L + j*cs_a + j; //pointwr to block of A to be used for TRSM + b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = (n-j-D_NR) / D_NR; //number of times GEMM operations to be performed(in blocks of 4x4) + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha value + ///GEMM for previous blocks /// + + ///load 4x4 block of b11 + if(n_remainder == 3) + { + ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm1 = _mm256_loadu_pd((double const *)b11+ cs_b); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + } + if(n_remainder == 2) + { + ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm1 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + } + if(n_remainder == 1) + { + ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm1 = _mm256_broadcast_sd((double const *)&ones); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm2 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + } + //multiply by alpha + ymm0 = _mm256_mul_pd(ymm0, ymm16); //B11[x][0] *= alpha + ymm1 = _mm256_mul_pd(ymm1, ymm16); //B11[x][1] *=alpha + ymm2 = _mm256_mul_pd(ymm2, ymm16); //B11[x][2] *= alpha + ymm3 = _mm256_mul_pd(ymm3, ymm16); //B11[x][3] *= alpha + + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + + ///GEMM processing stars/// + + for(k = 0; k < k_iter; k++) + { + ptr_a01_dup = a01; + + //load 4x4 bblock of b10 + ymm8 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm9 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm10 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //B10[0][2] B10[1][2] B10[2][2] B10[3][2] + ymm11 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[1])); //B10[0][3] B10[1][3] B10[2][3] B10[3][3] + + //broadcast 1st row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] + + a01 += 1; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] + + a01 += 1; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B10[0][1]*A01[1][0] B10[1][1]*A01[1][0] B10[2][1]*A01[1][0] B10[3][1]*A01[1][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B10[0][1]*A01[1][1] B10[1][1]*A01[1][1] B10[2][1]*A01[1][1] B10[3][1]*A01[1][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B10[0][1]*A01[1][2] B10[1][1]*A01[1][2] B10[2][1]*A01[1][2] B10[3][1]*A01[1][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B10[0][1]*A01[1][3] B10[1][1]*A01[1][3] B10[2][1]*A01[1][3] B10[3][1]*A01[1][3]) + + //braodcast 3rd row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] + + a01 += 1; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B10[0][2]*A01[2][0] B10[1][2]*A01[2][0] B10[2][2]*A01[2][0] B10[3][2]*A01[2][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B10[0][2]*A01[2][1] B10[1][2]*A01[2][1] B10[2][2]*A01[2][1] B10[3][2]*A01[2][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B10[0][2]*A01[2][2] B10[1][2]*A01[2][2] B10[2][2]*A01[2][2] B10[3][2]*A01[2][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B10[0][2]*A01[2][3] B10[1][2]*A01[2][3] B10[2][2]*A01[2][3] B10[3][2]*A01[2][3]) + + //broadcast 4th row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] + + a01 += 1; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B10[0][3]*A01[3][0] B10[1][3]*A01[3][0] B10[2][3]*A01[3][0] B10[3][3]*A01[3][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B10[0][3]*A01[3][1] B10[1][3]*A01[3][1] B10[2][3]*A01[3][1] B10[3][3]*A01[3][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B10[0][3]*A01[3][2] B10[1][3]*A01[3][2] B10[2][3]*A01[3][2] B10[3][3]*A01[3][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B10[0][3]*A01[3][3] B10[1][3]*A01[3][3] B10[2][3]*A01[3][3] B10[3][3]*A01[3][3]) + + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM + + } + + ///GEMM code ends/// + + ymm0 = _mm256_sub_pd(ymm0, ymm4); //B11[x][0] -= ymm4 + ymm1 = _mm256_sub_pd(ymm1, ymm5); //B11[x][1] -= ymm5 + ymm2 = _mm256_sub_pd(ymm2, ymm6); //B11[x][2] -= ymm6 + ymm3 = _mm256_sub_pd(ymm3, ymm7); //B11[x][3] -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + //1st col + ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][0] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][0] + ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][0] + + //2nd col + a11 += cs_a; + ymm8 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm9 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[1][1] + + //3rd col + a11 += cs_a; + ymm11 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][2] + ymm12 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[1][2] + + //4th col + a11 += cs_a; + ymm13 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][3] + + ymm14 = _mm256_broadcast_sd((double const *)&ones); + + //(Row 3): FMA operations + ymm2 = _mm256_fnmadd_pd(ymm3, ymm12, ymm2); + ymm1 = _mm256_fnmadd_pd(ymm3, ymm10, ymm1); + ymm0 = _mm256_fnmadd_pd(ymm3, ymm7, ymm0); + + //(ROW 2): FMA operations + ymm1 = _mm256_fnmadd_pd(ymm2, ymm9, ymm1); + ymm0 = _mm256_fnmadd_pd(ymm2, ymm6, ymm0); + + //(Row 1):FMA operations + ymm0 = _mm256_fnmadd_pd(ymm1, ymm5, ymm0); + + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)(b11 + cs_b), ymm1); //store(B11[x][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm2); //(store(B11[x][2])) + _mm256_storeu_pd((double *)(b11 + cs_b*3), ymm3); //store(B11[x][0]) + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)(b11+ cs_b * 2), ymm2); //store(B11[x][0]) + _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[x][1]) + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[x][0]) + } + + } + m_remainder -= 4; + i -= 4; + } + if(m_remainder) + { + dtrsm_small_XAlB_unitDiag(L, B, AlphaVal, m_remainder, n, cs_a, cs_b); + } + return BLIS_SUCCESS; +} + + +/*implements TRSM for the case XA = alpha * B + *A is lower triangular, non-unit diagonal, no transpose + *dimensions: X:mxn A:nxn B: mxn + */ + +/* <---b11 <---a11 + ***************** * + *b01*b11* * * * * + ^ * * * * * ^ * * + | ***************** | ******* + | * * * * * | * * * + | * * * * * a01* * * +b10 ***************** ************* + * * * * * * * * * + * * * * * * * * * + ***************** ******************* + +*/ +static err_t bli_dtrsm_small_XAutB( + side_t side, + obj_t* AlphaObj, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ) +{ + dim_t D_MR = 8; //block dimension along the rows + dim_t D_NR = 4; //block dimension along the columns + + dim_t m = bli_obj_length(b); //number of rows + dim_t n = bli_obj_width(b); //number of columns + dim_t m_remainder = m % D_MR; //number of corner rows + dim_t n_remainder = n % D_NR; //number of corner columns + dim_t cs_a = bli_obj_col_stride(a); //column stride of matrix A + dim_t cs_b = bli_obj_col_stride(b); //column stride of matrix B + + if(max(m,n) > 120) + return BLIS_NOT_YET_IMPLEMENTED; + + dim_t i, j, k; //loop variablse + dim_t k_iter; //determines the number of GEMM operations to be done + dim_t cs_b_offset[2]; //pre-calculated strides + + double ones = 1.0; + + double AlphaVal = *(double *)AlphaObj->buffer; //value of Alpha + double *L = a->buffer; //pointer to matrix A + double *B = b->buffer; //pointer to matrix B + + double *a01, *a11, *b10, *b11; //pointers for GEMM and TRSM blocks + double *ptr_a01_dup; + + cs_b_offset[0] = cs_b << 1; //cs_b_offset[0] = cs_b * 2; + cs_b_offset[1] = cs_b_offset[0] + cs_b;//cs_b_offset[1] = cs_b * 3; + + //ymm scratch reginsters + __m256d ymm0, ymm1, ymm2, ymm3; + __m256d ymm4, ymm5, ymm6, ymm7; + __m256d ymm8, ymm9, ymm10, ymm11; + __m256d ymm12, ymm13, ymm14, ymm15; + __m256d ymm16; + + for(i = (m-D_MR); (i+1) > 0; i -= D_MR) //loop along 'M' direction + { + for(j = (n-D_NR); (j+1) > 0; j -= D_NR) //loop along 'N' direction + { + a01 = L + (j+D_NR)*cs_a +(j); //pointer to block of A to be used in GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used in GEMM + b11 = B + (i) + (j)*cs_b; //pointer to block of B to be used for TRSM + + k_iter = (n-j-D_NR) / D_NR; //number of GEMM operations to be done(in blocks of 4x4) + + ymm0 = _mm256_setzero_pd(); + ymm1 = _mm256_setzero_pd(); + ymm2 = _mm256_setzero_pd(); + ymm3 = _mm256_setzero_pd(); + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation starts/// + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //broadcast 1st row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] + + a01 += cs_a; //move to next row + + //load 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] + + a01 += cs_a; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) + + //broadcast 3rd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] + + a01 += cs_a; //move to next row of A01 + + //load next 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) + ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) + + //broadcast 4th row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] + + a01 += cs_a; //move to next row of A01 + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM + } + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); + //load 8x4 block of B11 + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] + + ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 + ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 + ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 + ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 + + ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 + ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 + ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 + ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + //1st col + ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + a11 += cs_a; + + //2nd col + ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm2 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + + a11 += cs_a; + + //3rd col + ymm3 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm4 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm5 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] + + a11 += cs_a; + + //4th col + ymm6 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][1] + + + ymm7 = _mm256_broadcast_sd((double const *)&ones); + + //compute reciprocals of A(i,i) and broadcast in registers + ymm0 = _mm256_unpacklo_pd(ymm0, ymm2); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] + ymm2 = _mm256_unpacklo_pd(ymm5, ymm6); //A11[2][2] A11[3][3] A11[2][2] A11[3][3] + + ymm0 = _mm256_blend_pd(ymm0, ymm2, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm0 = _mm256_div_pd(ymm7, ymm0); // 1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] + + ymm2 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] + //extract a33 + ymm7 = _mm256_permute_pd(ymm0, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3]) + ymm7 = _mm256_permute2f128_pd(ymm7, ymm7, 0x11); //(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + + ymm11 = _mm256_mul_pd(ymm11, ymm7); + + ymm15 = _mm256_mul_pd(ymm15, ymm7); + + //extract a22 + ymm7 = _mm256_permute_pd(ymm0, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm7 = _mm256_permute2f128_pd(ymm7, ymm7, 0x11); //(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) + + //(Row 3): FMA operations + ymm10 = _mm256_fnmadd_pd(ymm11, ymm6, ymm10); + ymm9 = _mm256_fnmadd_pd(ymm11, ymm5, ymm9); + ymm8 = _mm256_fnmadd_pd(ymm11, ymm2, ymm8); + + //(Row 3): FMA operations + ymm14 = _mm256_fnmadd_pd(ymm15, ymm6, ymm14); + ymm13 = _mm256_fnmadd_pd(ymm15, ymm5, ymm13); + ymm12 = _mm256_fnmadd_pd(ymm15, ymm2, ymm12); + + ymm10 = _mm256_mul_pd(ymm10, ymm7); + + ymm14 = _mm256_mul_pd(ymm14, ymm7); + + //extract a11 + ymm7 = _mm256_permute_pd(ymm0, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) + ymm7 = _mm256_permute2f128_pd(ymm7, ymm7, 0x00); //(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) + + //(ROW 2): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm10, ymm4, ymm9); + ymm8 = _mm256_fnmadd_pd(ymm10, ymm3, ymm8); + + ymm13 = _mm256_fnmadd_pd(ymm14, ymm4, ymm13); + ymm12 = _mm256_fnmadd_pd(ymm14, ymm3, ymm12); + + ymm9 = _mm256_mul_pd(ymm9, ymm7); + + ymm13 = _mm256_mul_pd(ymm13, ymm7); + + //extract A00 + ymm7 = _mm256_permute_pd(ymm0, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm7 = _mm256_permute2f128_pd(ymm7, ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) + + //(Row 1):FMA operations + ymm8 = _mm256_fnmadd_pd(ymm9, ymm1, ymm8); + + ymm12 = _mm256_fnmadd_pd(ymm13, ymm1, ymm12); + + ymm8 = _mm256_mul_pd(ymm8, ymm7); + + ymm12 = _mm256_mul_pd(ymm12, ymm7); + + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[x][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[x][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[x][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[x][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //(store(B11[x][2])) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //(store(B11[x][2])) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[x][3]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[x][3]) + + } + if(n_remainder) //implementation for remainder columns(when n is not multiple of D_NR) + { + + a01 = L + (j+D_NR)*cs_a +(j); //pointer to block of A to be used in GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used in GEMM + b11 = B + (i) + (j)*cs_b; //pointer to block of B to be used for TRSM + + k_iter = (n-j-D_NR) / D_NR; //number of GEMM operations to be done(in blocks of 4x4) + + ymm0 = _mm256_setzero_pd(); + ymm1 = _mm256_setzero_pd(); + ymm2 = _mm256_setzero_pd(); + ymm3 = _mm256_setzero_pd(); + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation starts/// + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //broadcast 1st row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] + + a01 += cs_a; //move to next row + + //load 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] + + a01 += cs_a; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) + + //broadcast 3rd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] + + a01 += cs_a; //move to next row of A01 + + //load next 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) + ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) + + //broadcast 4th row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] + + a01 += cs_a; //move to next row of A01 + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM + } + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); + //load 8x4 block of B11 + if(n_remainder == 3) + { + ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + ymm9 = _mm256_loadu_pd((double const *)(b11+cs_b)); //B11[0-3][0] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][0] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b*2)); //B11[0-3][1] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b*2 + D_NR)); //B11[4-7][1] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0-3][2] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4-7][2] + } + if(n_remainder == 2) + { + ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] + ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] + ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0-3][0] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4-7][0] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0-3][1] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4-7][1] + } + if(n_remainder == 1) + { + ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][1] + ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][1] + ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] + ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] + ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + ymm11 = _mm256_loadu_pd((double const *)(b11+cs_b_offset[1])); //B11[0-3][0] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] +D_NR)); //B11[4-7][0] + } + + ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 + ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 + ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 + ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 + + ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 + ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 + ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 + ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + //1st col + ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + a11 += cs_a; + + //2nd col + ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm2 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + + a11 += cs_a; + + //3rd col + ymm3 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm4 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm5 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] + + a11 += cs_a; + + //4th col + ymm6 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][1] + + + ymm7 = _mm256_broadcast_sd((double const *)&ones); + + //compute reciprocals of A(i,i) and broadcast in registers + ymm0 = _mm256_unpacklo_pd(ymm0, ymm2); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] + ymm2 = _mm256_unpacklo_pd(ymm5, ymm6); //A11[2][2] A11[3][3] A11[2][2] A11[3][3] + + ymm0 = _mm256_blend_pd(ymm0, ymm2, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm0 = _mm256_div_pd(ymm7, ymm0); // 1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] + + ymm2 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] + //extract a33 + ymm7 = _mm256_permute_pd(ymm0, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3]) + ymm7 = _mm256_permute2f128_pd(ymm7, ymm7, 0x11); //(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + + ymm11 = _mm256_mul_pd(ymm11, ymm7); + + ymm15 = _mm256_mul_pd(ymm15, ymm7); + + //extract a22 + ymm7 = _mm256_permute_pd(ymm0, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm7 = _mm256_permute2f128_pd(ymm7, ymm7, 0x11); //(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) + + //(Row 3): FMA operations + ymm10 = _mm256_fnmadd_pd(ymm11, ymm6, ymm10); + ymm9 = _mm256_fnmadd_pd(ymm11, ymm5, ymm9); + ymm8 = _mm256_fnmadd_pd(ymm11, ymm2, ymm8); + + //(Row 3): FMA operations + ymm14 = _mm256_fnmadd_pd(ymm15, ymm6, ymm14); + ymm13 = _mm256_fnmadd_pd(ymm15, ymm5, ymm13); + ymm12 = _mm256_fnmadd_pd(ymm15, ymm2, ymm12); + + ymm10 = _mm256_mul_pd(ymm10, ymm7); + + ymm14 = _mm256_mul_pd(ymm14, ymm7); + + //extract a11 + ymm7 = _mm256_permute_pd(ymm0, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) + ymm7 = _mm256_permute2f128_pd(ymm7, ymm7, 0x00); //(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) + + //(ROW 2): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm10, ymm4, ymm9); + ymm8 = _mm256_fnmadd_pd(ymm10, ymm3, ymm8); + + ymm13 = _mm256_fnmadd_pd(ymm14, ymm4, ymm13); + ymm12 = _mm256_fnmadd_pd(ymm14, ymm3, ymm12); + + ymm9 = _mm256_mul_pd(ymm9, ymm7); + + ymm13 = _mm256_mul_pd(ymm13, ymm7); + + //extract A00 + ymm7 = _mm256_permute_pd(ymm0, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm7 = _mm256_permute2f128_pd(ymm7, ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) + + //(Row 1):FMA operations + ymm8 = _mm256_fnmadd_pd(ymm9, ymm1, ymm8); + + ymm12 = _mm256_fnmadd_pd(ymm13, ymm1, ymm12); + + ymm8 = _mm256_mul_pd(ymm8, ymm7); + + ymm12 = _mm256_mul_pd(ymm12, ymm7); + + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14);//store(B11[4-7][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)(b11+ cs_b_offset[1]), ymm11); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) + } + } + } + if(i<0) + i += D_NR; + if((m & 4)) ///implementation for remainder rows(when m_remainder is a multiple of 4) + { + for(j = (n-D_NR); (j+1) > 0; j -=D_NR) //loop along n direction + { + a01 = L + (j+D_NR)*cs_a + (j); //pointer to block of A to be used for GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = (n-j-D_NR) / D_NR; //number of times GEMM operations to be performed(in blocks of 4x4) + + ymm15 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha + ///GEMM for previous blocks /// + + ///load 4x4 block of b11 + ymm0 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + //multiply by alpha + ymm0 = _mm256_mul_pd(ymm0, ymm15); //B11[x][0] *= alpha + ymm1 = _mm256_mul_pd(ymm1, ymm15); //B11[x][1] *=alpha + ymm2 = _mm256_mul_pd(ymm2, ymm15); //B11[x][2] *= alpha + ymm3 = _mm256_mul_pd(ymm3, ymm15); //B11[x][3] *= alpha + + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation starts/// + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //load 4x4 bblock of b10 + ymm8 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm9 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm10 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //B10[0][2] B10[1][2] B10[2][2] B10[3][2] + ymm11 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[1])); //B10[0][3] B10[1][3] B10[2][3] B10[3][3] + + //broadcast 1st row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] + + a01 += cs_a; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] + + a01 += cs_a; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B10[0][1]*A01[1][0] B10[1][1]*A01[1][0] B10[2][1]*A01[1][0] B10[3][1]*A01[1][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B10[0][1]*A01[1][1] B10[1][1]*A01[1][1] B10[2][1]*A01[1][1] B10[3][1]*A01[1][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B10[0][1]*A01[1][2] B10[1][1]*A01[1][2] B10[2][1]*A01[1][2] B10[3][1]*A01[1][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B10[0][1]*A01[1][3] B10[1][1]*A01[1][3] B10[2][1]*A01[1][3] B10[3][1]*A01[1][3]) + + //braodcast 3rd row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] + + a01 += cs_a; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B10[0][2]*A01[2][0] B10[1][2]*A01[2][0] B10[2][2]*A01[2][0] B10[3][2]*A01[2][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B10[0][2]*A01[2][1] B10[1][2]*A01[2][1] B10[2][2]*A01[2][1] B10[3][2]*A01[2][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B10[0][2]*A01[2][2] B10[1][2]*A01[2][2] B10[2][2]*A01[2][2] B10[3][2]*A01[2][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B10[0][2]*A01[2][3] B10[1][2]*A01[2][3] B10[2][2]*A01[2][3] B10[3][2]*A01[2][3]) + + //broadcast 4th row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] + + a01 += cs_a; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B10[0][3]*A01[3][0] B10[1][3]*A01[3][0] B10[2][3]*A01[3][0] B10[3][3]*A01[3][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B10[0][3]*A01[3][1] B10[1][3]*A01[3][1] B10[2][3]*A01[3][1] B10[3][3]*A01[3][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B10[0][3]*A01[3][2] B10[1][3]*A01[3][2] B10[2][3]*A01[3][2] B10[3][3]*A01[3][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B10[0][3]*A01[3][3] B10[1][3]*A01[3][3] B10[2][3]*A01[3][3] B10[3][3]*A01[3][3]) + + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + D_NR*cs_a; //pointer math to find next block of A for GEMM + } + + ///GEMM code end/// + + ymm0 = _mm256_sub_pd(ymm0, ymm4); //B11[x][0] -=ymm4 + ymm1 = _mm256_sub_pd(ymm1, ymm5); //B11[x][1] -= ymm5 + ymm2 = _mm256_sub_pd(ymm2, ymm6); //B11[x][2] -= ymm6 + ymm3 = _mm256_sub_pd(ymm3, ymm7); //B11[x][3] -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + + //1st col + ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + a11 += cs_a; + + //2nd col + ymm5 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm8 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + + a11 += cs_a; + + //3rd col + ymm6 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm9 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm11 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] + + a11 += cs_a; + + //4th col + ymm7 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm12 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] + ymm13 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][1] + + + ymm14 = _mm256_broadcast_sd((double const *)&ones); + + //compute reciprocals of A(i,i) and broadcast in registers + ymm4 = _mm256_unpacklo_pd(ymm4, ymm8); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] + ymm8 = _mm256_unpacklo_pd(ymm11, ymm13); //A11[2][2] A11[3][3] A11[2][2] A11[3][3] + + ymm15 = _mm256_blend_pd(ymm4, ymm8, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm14 = _mm256_div_pd(ymm14, ymm15); // 1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] + + //extract a33 + ymm15 = _mm256_permute_pd(ymm14, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3]) + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + + ymm3 = _mm256_mul_pd(ymm3, ymm15); + + //extract a22 + ymm15 = _mm256_permute_pd(ymm14, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) + + //(Row 3): FMA operations + ymm2 = _mm256_fnmadd_pd(ymm3, ymm12, ymm2); + ymm1 = _mm256_fnmadd_pd(ymm3, ymm10, ymm1); + ymm0 = _mm256_fnmadd_pd(ymm3, ymm7, ymm0); + + ymm2 = _mm256_mul_pd(ymm2, ymm15); + + //extract a11 + ymm15 = _mm256_permute_pd(ymm14, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) + + //(ROW 2): FMA operations + ymm1 = _mm256_fnmadd_pd(ymm2, ymm9, ymm1); + ymm0 = _mm256_fnmadd_pd(ymm2, ymm6, ymm0); + + ymm1 = _mm256_mul_pd(ymm1, ymm15); + + //extract A00 + ymm15 = _mm256_permute_pd(ymm14, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) + + //(Row 1):FMA operations + ymm0 = _mm256_fnmadd_pd(ymm1, ymm5, ymm0); + + ymm0 = _mm256_mul_pd(ymm0, ymm15); + + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[x][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm1); //store(B11[x][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm2); //(store(B11[x][2])) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm3); //store(B11[x][3]) + + } + if(n_remainder) //implementation for remainder columns(when n is not a multiple of D_NR) + { + + a01 = L + (j+D_NR)*cs_a + (j); //pointer to block of A to be used for GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = (n-j-D_NR) / D_NR; //number of times GEMM operations to be performed(in blocks of 4x4) + + ymm15 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha + ///GEMM for previous blocks /// + + ///load 4x4 block of b11 + if(n_remainder == 3) + { + ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm1 = _mm256_loadu_pd((double const *)b11+ cs_b); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + } + if(n_remainder == 2) + { + ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm1 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + } + if(n_remainder == 1) + { + ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm1 = _mm256_broadcast_sd((double const *)&ones); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm2 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + } + + //multiply by alpha + ymm0 = _mm256_mul_pd(ymm0, ymm15); //B11[x][0] *= alpha + ymm1 = _mm256_mul_pd(ymm1, ymm15); //B11[x][1] *=alpha + ymm2 = _mm256_mul_pd(ymm2, ymm15); //B11[x][2] *= alpha + ymm3 = _mm256_mul_pd(ymm3, ymm15); //B11[x][3] *= alpha + + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation starts/// + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //load 4x4 bblock of b10 + ymm8 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm9 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm10 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //B10[0][2] B10[1][2] B10[2][2] B10[3][2] + ymm11 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[1])); //B10[0][3] B10[1][3] B10[2][3] B10[3][3] + + //broadcast 1st row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] + + a01 += cs_a; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] + + a01 += cs_a; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B10[0][1]*A01[1][0] B10[1][1]*A01[1][0] B10[2][1]*A01[1][0] B10[3][1]*A01[1][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B10[0][1]*A01[1][1] B10[1][1]*A01[1][1] B10[2][1]*A01[1][1] B10[3][1]*A01[1][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B10[0][1]*A01[1][2] B10[1][1]*A01[1][2] B10[2][1]*A01[1][2] B10[3][1]*A01[1][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B10[0][1]*A01[1][3] B10[1][1]*A01[1][3] B10[2][1]*A01[1][3] B10[3][1]*A01[1][3]) + + //braodcast 3rd row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] + + a01 += cs_a; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B10[0][2]*A01[2][0] B10[1][2]*A01[2][0] B10[2][2]*A01[2][0] B10[3][2]*A01[2][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B10[0][2]*A01[2][1] B10[1][2]*A01[2][1] B10[2][2]*A01[2][1] B10[3][2]*A01[2][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B10[0][2]*A01[2][2] B10[1][2]*A01[2][2] B10[2][2]*A01[2][2] B10[3][2]*A01[2][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B10[0][2]*A01[2][3] B10[1][2]*A01[2][3] B10[2][2]*A01[2][3] B10[3][2]*A01[2][3]) + + //broadcast 4th row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] + + a01 += cs_a; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B10[0][3]*A01[3][0] B10[1][3]*A01[3][0] B10[2][3]*A01[3][0] B10[3][3]*A01[3][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B10[0][3]*A01[3][1] B10[1][3]*A01[3][1] B10[2][3]*A01[3][1] B10[3][3]*A01[3][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B10[0][3]*A01[3][2] B10[1][3]*A01[3][2] B10[2][3]*A01[3][2] B10[3][3]*A01[3][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B10[0][3]*A01[3][3] B10[1][3]*A01[3][3] B10[2][3]*A01[3][3] B10[3][3]*A01[3][3]) + + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM + } + + ///GEMM code end/// + + ymm0 = _mm256_sub_pd(ymm0, ymm4); //B11[x][0] -=ymm4 + ymm1 = _mm256_sub_pd(ymm1, ymm5); //B11[x][1] -= ymm5 + ymm2 = _mm256_sub_pd(ymm2, ymm6); //B11[x][2] -= ymm6 + ymm3 = _mm256_sub_pd(ymm3, ymm7); //B11[x][3] -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + + //1st col + ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + a11 += cs_a; + + //2nd col + ymm5 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm8 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + + a11 += cs_a; + + //3rd col + ymm6 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm9 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm11 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] + + a11 += cs_a; + + //4th col + ymm7 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm12 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] + ymm13 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][1] + + + ymm14 = _mm256_broadcast_sd((double const *)&ones); + + //compute reciprocals of A(i,i) and broadcast in registers + ymm4 = _mm256_unpacklo_pd(ymm4, ymm8); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] + ymm8 = _mm256_unpacklo_pd(ymm11, ymm13); //A11[2][2] A11[3][3] A11[2][2] A11[3][3] + + ymm15 = _mm256_blend_pd(ymm4, ymm8, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] + ymm14 = _mm256_div_pd(ymm14, ymm15); // 1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] + + //extract a33 + ymm15 = _mm256_permute_pd(ymm14, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3]) + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) + + ymm3 = _mm256_mul_pd(ymm3, ymm15); + + //extract a22 + ymm15 = _mm256_permute_pd(ymm14, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) + + //(Row 3): FMA operations + ymm2 = _mm256_fnmadd_pd(ymm3, ymm12, ymm2); + ymm1 = _mm256_fnmadd_pd(ymm3, ymm10, ymm1); + ymm0 = _mm256_fnmadd_pd(ymm3, ymm7, ymm0); + + ymm2 = _mm256_mul_pd(ymm2, ymm15); + + //extract a11 + ymm15 = _mm256_permute_pd(ymm14, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) + + //(ROW 2): FMA operations + ymm1 = _mm256_fnmadd_pd(ymm2, ymm9, ymm1); + ymm0 = _mm256_fnmadd_pd(ymm2, ymm6, ymm0); + + ymm1 = _mm256_mul_pd(ymm1, ymm15); + + //extract A00 + ymm15 = _mm256_permute_pd(ymm14, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) + ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) + + //(Row 1):FMA operations + ymm0 = _mm256_fnmadd_pd(ymm1, ymm5, ymm0); + + ymm0 = _mm256_mul_pd(ymm0, ymm15); + + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)(b11 + cs_b), ymm1); //store(B11[x][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm2); //(store(B11[x][2])) + _mm256_storeu_pd((double *)(b11 + cs_b*3), ymm3); //store(B11[x][0]) + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)(b11+ cs_b * 2), ymm2); //store(B11[x][0]) + _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[x][1]) + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[x][0]) + } + + } + m_remainder -= 4; + i -= 4; + } + if(m_remainder) ///implementation for remainder rows + { + dtrsm_small_XAutB(L, B, AlphaVal, m_remainder, n, cs_a, cs_b); + } + return BLIS_SUCCESS; +} + +/*implements TRSM for the case XA = alpha * B + *A is lower triangular, unit-diagonal, no transpose + *dimensions: X:mxn A:nxn B: mxn + */ + +/* <---b11 <---a11 + ***************** * + *b01*b11* * * * * + ^ * * * * * ^ * * + | ***************** | ******* + | * * * * * | * * * + | * * * * * a01* * * +b10 ***************** ************* + * * * * * * * * * + * * * * * * * * * + ***************** ******************* + +*/ +static err_t bli_dtrsm_small_XAutB_unitDiag( + side_t side, + obj_t* AlphaObj, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ) +{ + dim_t D_MR = 8; //block dimension along the rows + dim_t D_NR = 4; //block dimension along the columns + + dim_t m = bli_obj_length(b); //number of rows + dim_t n = bli_obj_width(b); //number of columns + dim_t m_remainder = m % D_MR; //number of corner rows + dim_t n_remainder = n % D_NR; //number of corner columns + dim_t cs_a = bli_obj_col_stride(a); //column stride of matrix A + dim_t cs_b = bli_obj_col_stride(b); //column stride of matrix B + + if(max(m,n) > 120) + return BLIS_NOT_YET_IMPLEMENTED; + + dim_t i, j, k; //loop variablse + dim_t k_iter; //determines the number of GEMM operations to be done + dim_t cs_b_offset[2]; //pre-calculated strides + + double ones = 1.0; + + double AlphaVal = *(double *)AlphaObj->buffer; //value of Alpha + double *L = a->buffer; //pointer to matrix A + double *B = b->buffer; //pointer to matrix B + + double *a01, *a11, *b10, *b11; //pointers for GEMM and TRSM blocks + double *ptr_a01_dup; + + cs_b_offset[0] = cs_b << 1; //cs_b_offset[0] = cs_b * 2; + cs_b_offset[1] = cs_b_offset[0] + cs_b;//cs_b_offset[1] = cs_b * 3; + + //ymm scratch reginsters + __m256d ymm0, ymm1, ymm2, ymm3; + __m256d ymm4, ymm5, ymm6, ymm7; + __m256d ymm8, ymm9, ymm10, ymm11; + __m256d ymm12, ymm13, ymm14, ymm15; + __m256d ymm16; + + for(i = (m-D_MR); (i+1) > 0; i -= D_MR) //loop along 'M' direction + { + for(j = (n-D_NR); (j+1) > 0; j -= D_NR) //loop along 'N' direction + { + a01 = L + (j+D_NR)*cs_a +(j); //pointer to block of A to be used in GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used in GEMM + b11 = B + (i) + (j)*cs_b; //pointer to block of B to be used for TRSM + + k_iter = (n-j-D_NR) / D_NR; //number of GEMM operations to be done(in blocks of 4x4) + + ymm0 = _mm256_setzero_pd(); + ymm1 = _mm256_setzero_pd(); + ymm2 = _mm256_setzero_pd(); + ymm3 = _mm256_setzero_pd(); + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation starts/// + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //broadcast 1st row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] + + a01 += cs_a; //move to next row + + //load 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] + + a01 += cs_a; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) + + //broadcast 3rd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] + + a01 += cs_a; //move to next row of A01 + + //load next 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) + ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) + + //broadcast 4th row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] + + a01 += cs_a; //move to next row of A01 + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM + } + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); + //load 8x4 block of B11 + ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] + ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] + + ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 + ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 + ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 + ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 + + ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 + ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 + ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 + ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + //1st col + ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + a11 += cs_a; + + //2nd col + ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm2 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + + a11 += cs_a; + + //3rd col + ymm3 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm4 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm5 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] + + a11 += cs_a; + + //4th col + ymm6 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][1] + + ymm2 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] + + //(Row 3): FMA operations + ymm10 = _mm256_fnmadd_pd(ymm11, ymm6, ymm10); + ymm9 = _mm256_fnmadd_pd(ymm11, ymm5, ymm9); + ymm8 = _mm256_fnmadd_pd(ymm11, ymm2, ymm8); + + //(Row 3): FMA operations + ymm14 = _mm256_fnmadd_pd(ymm15, ymm6, ymm14); + ymm13 = _mm256_fnmadd_pd(ymm15, ymm5, ymm13); + ymm12 = _mm256_fnmadd_pd(ymm15, ymm2, ymm12); + + //(ROW 2): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm10, ymm4, ymm9); + ymm8 = _mm256_fnmadd_pd(ymm10, ymm3, ymm8); + + ymm13 = _mm256_fnmadd_pd(ymm14, ymm4, ymm13); + ymm12 = _mm256_fnmadd_pd(ymm14, ymm3, ymm12); + + //(Row 1):FMA operations + ymm8 = _mm256_fnmadd_pd(ymm9, ymm1, ymm8); + + ymm12 = _mm256_fnmadd_pd(ymm13, ymm1, ymm12); + + _mm256_storeu_pd((double *)b11, ymm8); //store(B11[x][0]) + _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[x][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[x][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[x][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //(store(B11[x][2])) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //(store(B11[x][2])) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[x][3]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[x][3]) + + } + if(n_remainder) //implementation for remainder columns(when n is not multiple of D_NR) + { + + a01 = L + (j+D_NR)*cs_a +(j); //pointer to block of A to be used in GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used in GEMM + b11 = B + (i) + (j)*cs_b; //pointer to block of B to be used for TRSM + + k_iter = (n-j-D_NR) / D_NR; //number of GEMM operations to be done(in blocks of 4x4) + + ymm0 = _mm256_setzero_pd(); + ymm1 = _mm256_setzero_pd(); + ymm2 = _mm256_setzero_pd(); + ymm3 = _mm256_setzero_pd(); + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation starts/// + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //broadcast 1st row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] + + a01 += cs_a; //move to next row + + //load 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] + + a01 += cs_a; //move to next row of A + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) + + //broadcast 3rd row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] + + a01 += cs_a; //move to next row of A01 + + //load next 8x2 block of B10 + ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) + ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) + ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) + ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) + + ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) + + //broadcast 4th row of A01 + ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] + ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] + ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] + ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] + + a01 += cs_a; //move to next row of A01 + + ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) + ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) + ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) + ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) + + ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM + } + + ///GEMM code ends/// + + ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); + //load 8x4 block of B11 + if(n_remainder == 3) + { + ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + ymm9 = _mm256_loadu_pd((double const *)(b11+cs_b)); //B11[0-3][0] + ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][0] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b*2)); //B11[0-3][1] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b*2 + D_NR)); //B11[4-7][1] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0-3][2] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4-7][2] + } + if(n_remainder == 2) + { + ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] + ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] + ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0-3][0] + ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4-7][0] + ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0-3][1] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4-7][1] + } + if(n_remainder == 1) + { + ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][1] + ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][1] + ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] + ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] + ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] + ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] + ymm11 = _mm256_loadu_pd((double const *)(b11+cs_b_offset[1])); //B11[0-3][0] + ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] +D_NR)); //B11[4-7][0] + } + + ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 + ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 + ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 + ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 + + ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 + ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 + ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 + ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + //1st col + ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + a11 += cs_a; + + //2nd col + ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm2 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + + a11 += cs_a; + + //3rd col + ymm3 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm4 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm5 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] + + a11 += cs_a; + + //4th col + ymm6 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][1] + + ymm2 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] + + //(Row 3): FMA operations + ymm10 = _mm256_fnmadd_pd(ymm11, ymm6, ymm10); + ymm9 = _mm256_fnmadd_pd(ymm11, ymm5, ymm9); + ymm8 = _mm256_fnmadd_pd(ymm11, ymm2, ymm8); + + //(Row 3): FMA operations + ymm14 = _mm256_fnmadd_pd(ymm15, ymm6, ymm14); + ymm13 = _mm256_fnmadd_pd(ymm15, ymm5, ymm13); + ymm12 = _mm256_fnmadd_pd(ymm15, ymm2, ymm12); + + //(ROW 2): FMA operations + ymm9 = _mm256_fnmadd_pd(ymm10, ymm4, ymm9); + ymm8 = _mm256_fnmadd_pd(ymm10, ymm3, ymm8); + + ymm13 = _mm256_fnmadd_pd(ymm14, ymm4, ymm13); + ymm12 = _mm256_fnmadd_pd(ymm14, ymm3, ymm12); + + //(Row 1):FMA operations + ymm8 = _mm256_fnmadd_pd(ymm9, ymm1, ymm8); + + ymm12 = _mm256_fnmadd_pd(ymm13, ymm1, ymm12); + + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14);//store(B11[4-7][2]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)(b11+ cs_b_offset[1]), ymm11); //store(B11[0-3][0]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) + } + + } + } + if(i<0) + i += D_NR; + if((m & 4)) ///implementation for remainder rows(when m_remainder is a multiple of 4) + { + for(j = (n-D_NR); (j+1) > 0; j -=D_NR) //loop along n direction + { + a01 = L + (j+D_NR)*cs_a + (j); //pointer to block of A to be used for GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = (n-j-D_NR) / D_NR; //number of times GEMM operations to be performed(in blocks of 4x4) + + ymm15 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha + ///GEMM for previous blocks /// + + ///load 4x4 block of b11 + ymm0 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + + //multiply by alpha + ymm0 = _mm256_mul_pd(ymm0, ymm15); //B11[x][0] *= alpha + ymm1 = _mm256_mul_pd(ymm1, ymm15); //B11[x][1] *=alpha + ymm2 = _mm256_mul_pd(ymm2, ymm15); //B11[x][2] *= alpha + ymm3 = _mm256_mul_pd(ymm3, ymm15); //B11[x][3] *= alpha + + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation starts/// + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //load 4x4 bblock of b10 + ymm8 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm9 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm10 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //B10[0][2] B10[1][2] B10[2][2] B10[3][2] + ymm11 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[1])); //B10[0][3] B10[1][3] B10[2][3] B10[3][3] + + //broadcast 1st row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] + + a01 += cs_a; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] + + a01 += cs_a; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B10[0][1]*A01[1][0] B10[1][1]*A01[1][0] B10[2][1]*A01[1][0] B10[3][1]*A01[1][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B10[0][1]*A01[1][1] B10[1][1]*A01[1][1] B10[2][1]*A01[1][1] B10[3][1]*A01[1][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B10[0][1]*A01[1][2] B10[1][1]*A01[1][2] B10[2][1]*A01[1][2] B10[3][1]*A01[1][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B10[0][1]*A01[1][3] B10[1][1]*A01[1][3] B10[2][1]*A01[1][3] B10[3][1]*A01[1][3]) + + //braodcast 3rd row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] + + a01 += cs_a; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B10[0][2]*A01[2][0] B10[1][2]*A01[2][0] B10[2][2]*A01[2][0] B10[3][2]*A01[2][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B10[0][2]*A01[2][1] B10[1][2]*A01[2][1] B10[2][2]*A01[2][1] B10[3][2]*A01[2][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B10[0][2]*A01[2][2] B10[1][2]*A01[2][2] B10[2][2]*A01[2][2] B10[3][2]*A01[2][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B10[0][2]*A01[2][3] B10[1][2]*A01[2][3] B10[2][2]*A01[2][3] B10[3][2]*A01[2][3]) + + //broadcast 4th row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] + + a01 += cs_a; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B10[0][3]*A01[3][0] B10[1][3]*A01[3][0] B10[2][3]*A01[3][0] B10[3][3]*A01[3][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B10[0][3]*A01[3][1] B10[1][3]*A01[3][1] B10[2][3]*A01[3][1] B10[3][3]*A01[3][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B10[0][3]*A01[3][2] B10[1][3]*A01[3][2] B10[2][3]*A01[3][2] B10[3][3]*A01[3][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B10[0][3]*A01[3][3] B10[1][3]*A01[3][3] B10[2][3]*A01[3][3] B10[3][3]*A01[3][3]) + + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + D_NR*cs_a; //pointer math to find next block of A for GEMM + } + + ///GEMM code end/// + + ymm0 = _mm256_sub_pd(ymm0, ymm4); //B11[x][0] -=ymm4 + ymm1 = _mm256_sub_pd(ymm1, ymm5); //B11[x][1] -= ymm5 + ymm2 = _mm256_sub_pd(ymm2, ymm6); //B11[x][2] -= ymm6 + ymm3 = _mm256_sub_pd(ymm3, ymm7); //B11[x][3] -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + + //1st col + ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + a11 += cs_a; + + //2nd col + ymm5 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm8 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + + a11 += cs_a; + + //3rd col + ymm6 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm9 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm11 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] + + a11 += cs_a; + + //4th col + ymm7 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm12 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] + ymm13 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][1] + + + //(Row 3): FMA operations + ymm2 = _mm256_fnmadd_pd(ymm3, ymm12, ymm2); + ymm1 = _mm256_fnmadd_pd(ymm3, ymm10, ymm1); + ymm0 = _mm256_fnmadd_pd(ymm3, ymm7, ymm0); + + //(ROW 2): FMA operations + ymm1 = _mm256_fnmadd_pd(ymm2, ymm9, ymm1); + ymm0 = _mm256_fnmadd_pd(ymm2, ymm6, ymm0); + + //(Row 1):FMA operations + ymm0 = _mm256_fnmadd_pd(ymm1, ymm5, ymm0); + + _mm256_storeu_pd((double *)b11, ymm0); //store(B11[x][0]) + _mm256_storeu_pd((double *)(b11 + cs_b), ymm1); //store(B11[x][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm2); //(store(B11[x][2])) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm3); //store(B11[x][3]) + + } + if(n_remainder) //implementation for remainder columns(when n is not a multiple of D_NR) + { + + a01 = L + (j+D_NR)*cs_a + (j); //pointer to block of A to be used for GEMM + a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM + b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used for GEMM + b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM + + k_iter = (n-j-D_NR) / D_NR; //number of times GEMM operations to be performed(in blocks of 4x4) + + ymm15 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha + ///GEMM for previous blocks /// + + ///load 4x4 block of b11 + if(n_remainder == 3) + { + ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm1 = _mm256_loadu_pd((double const *)b11+ cs_b); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + } + if(n_remainder == 2) + { + ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm1 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + } + if(n_remainder == 1) + { + ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] + ymm1 = _mm256_broadcast_sd((double const *)&ones); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] + ymm2 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] + ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] + } + + //multiply by alpha + ymm0 = _mm256_mul_pd(ymm0, ymm15); //B11[x][0] *= alpha + ymm1 = _mm256_mul_pd(ymm1, ymm15); //B11[x][1] *=alpha + ymm2 = _mm256_mul_pd(ymm2, ymm15); //B11[x][2] *= alpha + ymm3 = _mm256_mul_pd(ymm3, ymm15); //B11[x][3] *= alpha + + ymm4 = _mm256_setzero_pd(); + ymm5 = _mm256_setzero_pd(); + ymm6 = _mm256_setzero_pd(); + ymm7 = _mm256_setzero_pd(); + + ///GEMM implementation starts/// + + for(k = 0; k < k_iter; k++) //loop for number of GEMM operations + { + ptr_a01_dup = a01; + + //load 4x4 bblock of b10 + ymm8 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] + ymm9 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] + ymm10 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //B10[0][2] B10[1][2] B10[2][2] B10[3][2] + ymm11 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[1])); //B10[0][3] B10[1][3] B10[2][3] B10[3][3] + + //broadcast 1st row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] + + a01 += cs_a; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) + + //broadcast 2nd row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] + + a01 += cs_a; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B10[0][1]*A01[1][0] B10[1][1]*A01[1][0] B10[2][1]*A01[1][0] B10[3][1]*A01[1][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B10[0][1]*A01[1][1] B10[1][1]*A01[1][1] B10[2][1]*A01[1][1] B10[3][1]*A01[1][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B10[0][1]*A01[1][2] B10[1][1]*A01[1][2] B10[2][1]*A01[1][2] B10[3][1]*A01[1][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B10[0][1]*A01[1][3] B10[1][1]*A01[1][3] B10[2][1]*A01[1][3] B10[3][1]*A01[1][3]) + + //braodcast 3rd row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] + + a01 += cs_a; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B10[0][2]*A01[2][0] B10[1][2]*A01[2][0] B10[2][2]*A01[2][0] B10[3][2]*A01[2][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B10[0][2]*A01[2][1] B10[1][2]*A01[2][1] B10[2][2]*A01[2][1] B10[3][2]*A01[2][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B10[0][2]*A01[2][2] B10[1][2]*A01[2][2] B10[2][2]*A01[2][2] B10[3][2]*A01[2][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B10[0][2]*A01[2][3] B10[1][2]*A01[2][3] B10[2][2]*A01[2][3] B10[3][2]*A01[2][3]) + + //broadcast 4th row of A01 + ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] + ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] + ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] + ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] + + a01 += cs_a; //move to next row of A + + ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B10[0][3]*A01[3][0] B10[1][3]*A01[3][0] B10[2][3]*A01[3][0] B10[3][3]*A01[3][0]) + ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B10[0][3]*A01[3][1] B10[1][3]*A01[3][1] B10[2][3]*A01[3][1] B10[3][3]*A01[3][1]) + ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B10[0][3]*A01[3][2] B10[1][3]*A01[3][2] B10[2][3]*A01[3][2] B10[3][3]*A01[3][2]) + ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B10[0][3]*A01[3][3] B10[1][3]*A01[3][3] B10[2][3]*A01[3][3] B10[3][3]*A01[3][3]) + + + b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM + a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM + } + + ///GEMM code end/// + + ymm0 = _mm256_sub_pd(ymm0, ymm4); //B11[x][0] -=ymm4 + ymm1 = _mm256_sub_pd(ymm1, ymm5); //B11[x][1] -= ymm5 + ymm2 = _mm256_sub_pd(ymm2, ymm6); //B11[x][2] -= ymm6 + ymm3 = _mm256_sub_pd(ymm3, ymm7); //B11[x][3] -= ymm7 + + ///implement TRSM/// + + ///read 4x4 block of A11/// + + + //1st col + ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] + + a11 += cs_a; + + //2nd col + ymm5 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm8 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + + a11 += cs_a; + + //3rd col + ymm6 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm9 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm11 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] + + a11 += cs_a; + + //4th col + ymm7 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] + ymm10 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] + ymm12 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] + ymm13 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][1] + + //(Row 3): FMA operations + ymm2 = _mm256_fnmadd_pd(ymm3, ymm12, ymm2); + ymm1 = _mm256_fnmadd_pd(ymm3, ymm10, ymm1); + ymm0 = _mm256_fnmadd_pd(ymm3, ymm7, ymm0); + + //(ROW 2): FMA operations + ymm1 = _mm256_fnmadd_pd(ymm2, ymm9, ymm1); + ymm0 = _mm256_fnmadd_pd(ymm2, ymm6, ymm0); + + //(Row 1):FMA operations + ymm0 = _mm256_fnmadd_pd(ymm1, ymm5, ymm0); + + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)(b11 + cs_b), ymm1); //store(B11[x][1]) + _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm2); //(store(B11[x][2])) + _mm256_storeu_pd((double *)(b11 + cs_b*3), ymm3); //store(B11[x][0]) + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)(b11+ cs_b * 2), ymm2); //store(B11[x][0]) + _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[x][1]) + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[x][0]) + } + + } + m_remainder -= 4; + i -= 4; + } + if(m_remainder) + { + dtrsm_small_XAutB_unitDiag(a->buffer, b->buffer,AlphaVal, m_remainder, n, cs_a, cs_b); + } + return BLIS_SUCCESS; +} + + +/* + * AX = Alpha*B, Single precision, A: lower triangular + * This kernel implementation supports matrices A and B such that m is equal to BLI_AlXB_M_SP and n is mutiple of 8 + */ + +static err_t bli_strsm_small_AlXB ( + side_t side, + obj_t* AlphaObj, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ) +{ + obj_t alpha, beta; // gemm parameters + obj_t Ga, Gb, Gc; // for GEMM + int m = bli_obj_length(b); // number of rows of matrix B + int n = bli_obj_width(b); // number of columns of matrix B + + int lda = bli_obj_col_stride(a); // column stride of A + int ldb = bli_obj_col_stride(b); // column stride of B + + int rsa = bli_obj_row_stride(a); // row stride of A + int rsb = bli_obj_row_stride(b); // row stride of B + + int i = 0; + int j; + int blk_size = 8; + int isUnitDiag = bli_obj_has_unit_diag(a); + + float alphaVal; + float *L = a->buffer; + float *B = b->buffer; + + if (m != BLI_AlXB_M_SP || (n&7) != 0) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + if ( (m*(m + n)) > BLIS_SMALL_MATRIX_THRES_TRSM ) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + + alphaVal = *((float *)bli_obj_buffer_for_const(BLIS_FLOAT, AlphaObj)); + + /* Small _GEMM preparation code */ + bli_obj_create( BLIS_FLOAT, 1, 1, 0, 0, &alpha ); + bli_obj_create( BLIS_FLOAT, 1, 1, 0, 0, &beta ); + + /* B = B - A*B */ + bli_setsc( -(1.0), 0.0, &alpha ); + bli_setsc( (1.0), 0.0, &beta ); + + + bli_obj_create_with_attached_buffer( BLIS_FLOAT, blk_size, blk_size, a->buffer, rsa, lda, &Ga); + bli_obj_create_with_attached_buffer( BLIS_FLOAT, blk_size, n, b->buffer, rsb, ldb, &Gb); + bli_obj_create_with_attached_buffer( BLIS_FLOAT, blk_size, n, b->buffer, rsb, ldb, &Gc); + + bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, &Ga ); + bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, &Gb ); + bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, &Gc ); + + //first block of trsm + Gb.buffer = (void*)(B + i); + + //trsm of first 8xn block + if (alphaVal != 1) + { + if (isUnitDiag == 0) + { + blis_strsm_microkernel_alpha((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); + fp_blis_strsm_microkernel = blis_strsm_microkernel; + } + else + { + blis_strsm_microkernel_alpha_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); + fp_blis_strsm_microkernel = blis_strsm_microkernel_unitDiag; + } + bli_setsc( alphaVal, 0.0, &beta ); + } + else + { + if (isUnitDiag == 0) + { + blis_strsm_microkernel((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); + fp_blis_strsm_microkernel = blis_strsm_microkernel; + } + else + { + blis_strsm_microkernel_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); + fp_blis_strsm_microkernel = blis_strsm_microkernel_unitDiag; + } + } + + //gemm update + for (j = i + blk_size; j < m; j += blk_size) // for rows upto multiple of BLOCK_HEIGHT + { + Ga.buffer = (void*)(L + j + i*lda); + Gc.buffer = (void*)(B + j); + + bli_gemm_small(&alpha, &Ga, &Gb, &beta, &Gc, cntx, cntl ); // Gc = beta*Gc + alpha*Ga *Gb + } + + //trsm of remaining blocks + for (i = blk_size; i < m; i += blk_size) + { + Gb.buffer = (void*)(B + i); + + fp_blis_strsm_microkernel((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); + + for (j = i + blk_size; j < m; j += blk_size) // for rows upto multiple of BLOCK_HEIGHT + { + Ga.buffer = (void*)(L + j + i*lda); + Gc.buffer = (void*)(B + j); + + bli_gemm_small(&alpha, &Ga, &Gb, &beta, &Gc, cntx, cntl ); // Gc = beta*Gc + alpha*Ga *Gb + } + + } // End of for loop - i + + return BLIS_SUCCESS; +} + + + +/* + * XA' = Alpha*B, Single precision, A: lower triangular + * This kernel implementation supports matrices A and B such that + * m and n are multiples of 8 and n is less than or equal to BLI_XAltB_N_SP + */ +static err_t bli_strsm_small_XAltB( + side_t side, + obj_t* AlphaObj, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ) +{ + int m = bli_obj_length(a); // number of rows of matrix B + int n = bli_obj_length(b); // number of columns of matrix B + + int lda = bli_obj_col_stride(a); // column stride of A + int ldb = bli_obj_col_stride(b); // column stride of B + + int rsa = bli_obj_row_stride(a); // row stride of A + int rsb = bli_obj_row_stride(b); // row stride of B + + int i = 0; + int isUnitDiag = bli_obj_has_unit_diag(a); + + float alphaVal; + float *L = a->buffer; + float *B = b->buffer; + + if ((m&7) != 0 || (n&7) != 0) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + if ( n > BLI_XAltB_N_SP || (m*(m + n)) > BLIS_SMALL_MATRIX_THRES_TRSM ) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + + alphaVal = *((float *)bli_obj_buffer_for_const(BLIS_FLOAT, AlphaObj)); + + if (alphaVal != 1) + { + if (isUnitDiag == 0) + { + trsm_XAtB_block_allSmallSizedMatrices_alpha((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); + } + else + { + trsm_XAtB_block_allSmallSizedMatrices_alpha_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); + } + } + else + { + if (isUnitDiag == 0) + { + trsm_XAtB_block_allSmallSizedMatrices((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); + } + else + { + trsm_XAtB_block_allSmallSizedMatrices_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); + } + } + return BLIS_SUCCESS; +} + +/* + * A'X = Alpha*B, Single precision, A: upper triangular + * This kernel implementation supports matrices A and B such that + * m and n are multiples of 8, m is less than or equal to BLI_AutXB_M_SP and n is less than or equal to BLI_AutXB_N_SP + */ +static err_t bli_strsm_small_AutXB( + side_t side, + obj_t* AlphaObj, + obj_t* a, + obj_t* b, + cntx_t* cntx, + cntl_t* cntl + ) +{ + int m = bli_obj_width(a); // number of rows of matrix A (since At, so width is taken) + int n = bli_obj_width(b); // number of columns of matrix B + + int lda = bli_obj_col_stride(a); // column stride of A + int ldb = bli_obj_col_stride(b); // column stride of B + + int rsa = bli_obj_row_stride(a); // row stride of A + int rsb = bli_obj_row_stride(b); // row stride of B + + int i = 0; + int isUnitDiag = bli_obj_has_unit_diag(a); + + float alphaVal; + float *L = a->buffer; + float *B = b->buffer; + + if ((m&7) != 0 || (n&7) != 0) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + if ( m > BLI_AutXB_M_SP || n > BLI_AutXB_N_SP || (m*(m + n)) > BLIS_SMALL_MATRIX_THRES_TRSM ) + { + return BLIS_NOT_YET_IMPLEMENTED; + } + + alphaVal = *((float *)bli_obj_buffer_for_const(BLIS_FLOAT, AlphaObj)); + + if (alphaVal != 1) + { + if (isUnitDiag == 0) + { + trsm_AutXB_block_allSmallSizedMatrices_alpha((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); + } + else + { + trsm_AutXB_block_allSmallSizedMatrices_alpha_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); + } + } + else + { + if (isUnitDiag == 0) + { + trsm_AutXB_block_allSmallSizedMatrices((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); + } + else + { + trsm_AutXB_block_allSmallSizedMatrices_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); + } + } + return BLIS_SUCCESS; +} + +///////////////////////////// AX=B /////////////////////////////// +static void blis_strsm_microkernel_alpha(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alphaVal) +{ + float ones = 1.0; + int j; + int cs_b_offset[6]; + //int row2, row4, row6; + float *ptr_b_dup; + + //70 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[8]; + __m256 mat_a_cols[8]; + __m256 mat_a_cols_rearr[36]; + __m256 mat_a_diag_inv[8]; + __m256 reciprocal_diags; + __m256 alphaReg; + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + + //reciprocal_diags = _mm256_loadu_ps((float const *)ones); + reciprocal_diags = _mm256_broadcast_ss((float const *)&ones); + alphaReg = _mm256_broadcast_ss((float const *)&alphaVal); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //read first set of 16x8 block of B into registers, where 16 is the blk_height and 8 is the blk_width for B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); + //_mm_prefetch((char*)(ptr_l + 0), _MM_HINT_T0); + //row2 = (cs_l << 1); + //row4 = (cs_l << 2); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); + //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); + //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); + //_mm_prefetch((char*)(ptr_l + row2 + cs_l), _MM_HINT_T0); + //row6 = row2 + row4; + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); + //_mm_prefetch((char*)(ptr_l + row4), _MM_HINT_T0); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); + //_mm_prefetch((char*)(ptr_l + row4 + cs_l), _MM_HINT_T0); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); + //_mm_prefetch((char*)(ptr_l + row6), _MM_HINT_T0); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); + //_mm_prefetch((char*)(ptr_l + row6 + cs_l), _MM_HINT_T0); + + //reciprocal_diags = _mm256_loadu_ps((float const *)ones); + + //read first set of 16x16 block of L, where 16 is the blk_height and 16 is the blk_width for L + /*mat_a_cols[0] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[1] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[2] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[3] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[4] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[5] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[6] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[7] = _mm256_loadu_ps((float const *)ptr_l);*/ + + //Shuffle to rearrange/transpose 16x16 block of L into contiguous row-wise registers + //tmpRegs[0] = _mm256_castps256_ps128(mat_a_cols[0]); //zero latency, no instruction added actually. + //mat_a_cols_rearr[0] = _mm256_broadcastss_ps(tmpRegs[0]); + //1st col + mat_a_cols_rearr[0] = _mm256_broadcast_ss((float const *)(ptr_l+0)); + mat_a_cols_rearr[1] = _mm256_broadcast_ss((float const *)(ptr_l+1)); + mat_a_cols_rearr[3] = _mm256_broadcast_ss((float const *)(ptr_l+2)); + mat_a_cols_rearr[6] = _mm256_broadcast_ss((float const *)(ptr_l+3)); + mat_a_cols_rearr[10] = _mm256_broadcast_ss((float const *)(ptr_l+4)); + mat_a_cols_rearr[15] = _mm256_broadcast_ss((float const *)(ptr_l+5)); + mat_a_cols_rearr[21] = _mm256_broadcast_ss((float const *)(ptr_l+6)); + mat_a_cols_rearr[28] = _mm256_broadcast_ss((float const *)(ptr_l+7)); + //2nd col + ptr_l += cs_l; + mat_a_cols_rearr[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_cols_rearr[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_cols_rearr[7] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[11] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[16] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[22] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[29] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //3rd col + ptr_l += cs_l; + mat_a_cols_rearr[5] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_cols_rearr[8] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[12] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[17] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[23] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[30] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //4rth col + ptr_l += cs_l; + mat_a_cols_rearr[9] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[13] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[18] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[24] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[31] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //5th col + ptr_l += cs_l; + mat_a_cols_rearr[14] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[19] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[25] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[32] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //6th col + ptr_l += cs_l; + mat_a_cols_rearr[20] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[26] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[33] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //7th col + ptr_l += cs_l; + mat_a_cols_rearr[27] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[34] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //7th col + ptr_l += cs_l; + mat_a_cols_rearr[35] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + numCols_b -= 8; // blk_width = 8 + + //compute reciprocals of L(i,i) and broadcast in registers + mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); + mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); + mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[20]); + mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_cols_rearr[27], mat_a_cols_rearr[35]); + + //mat_a_diag_inv[1] = _mm256_permute_ps(mat_a_diag_inv[1], 0x55); + //mat_a_diag_inv[3] = _mm256_permute_ps(mat_a_diag_inv[3], 0x55); + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC); + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x20); + + //reciprocal of diagnol elements + reciprocal_diags = _mm256_div_ps(reciprocal_diags, mat_a_diag_inv[0]); + + //Start loop for cols of B to be processed in size of blk_width + for (j = 0; j < numCols_b; j += 8) + { + ptr_b_dup = ptr_b; + + /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ + + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); + + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); + mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); +#else + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); + mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); + mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); + mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); + mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); + mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); + mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); + mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + //Read next set of B columns + ptr_b += (cs_b + cs_b_offset[5]); + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); + + //end loop of cols + } + + //Last block trsm processing + ptr_b_dup = ptr_b; + + /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ + + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); + + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); + mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); +#else + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); + mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); + mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); + mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); + mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); + mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); + mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); + mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); + + //end loop of cols +} + +static void blis_strsm_microkernel_alpha_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alphaVal) +{ + //float ones = 1.0; + int j; + int cs_b_offset[6]; + //int row2, row4, row6; + float *ptr_b_dup; + + //70 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[8]; + __m256 mat_a_cols[8]; + __m256 mat_a_cols_rearr[36]; + //__m256 mat_a_diag_inv[8]; + //__m256 reciprocal_diags; + __m256 alphaReg; + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + + //reciprocal_diags = _mm256_loadu_ps((float const *)ones); + //reciprocal_diags = _mm256_broadcast_ss((float const *)&ones); + alphaReg = _mm256_broadcast_ss((float const *)&alphaVal); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //read first set of 16x8 block of B into registers, where 16 is the blk_height and 8 is the blk_width for B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); + //_mm_prefetch((char*)(ptr_l + 0), _MM_HINT_T0); + //row2 = (cs_l << 1); + //row4 = (cs_l << 2); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); + //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); + //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); + //_mm_prefetch((char*)(ptr_l + row2 + cs_l), _MM_HINT_T0); + //row6 = row2 + row4; + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); + //_mm_prefetch((char*)(ptr_l + row4), _MM_HINT_T0); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); + //_mm_prefetch((char*)(ptr_l + row4 + cs_l), _MM_HINT_T0); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); + //_mm_prefetch((char*)(ptr_l + row6), _MM_HINT_T0); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); + //_mm_prefetch((char*)(ptr_l + row6 + cs_l), _MM_HINT_T0); + + //reciprocal_diags = _mm256_loadu_ps((float const *)ones); + + //read first set of 16x16 block of L, where 16 is the blk_height and 16 is the blk_width for L + /*mat_a_cols[0] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[1] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[2] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[3] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[4] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[5] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[6] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[7] = _mm256_loadu_ps((float const *)ptr_l);*/ + + //Shuffle to rearrange/transpose 16x16 block of L into contiguous row-wise registers + //tmpRegs[0] = _mm256_castps256_ps128(mat_a_cols[0]); //zero latency, no instruction added actually. + //mat_a_cols_rearr[0] = _mm256_broadcastss_ps(tmpRegs[0]); + //1st col + mat_a_cols_rearr[0] = _mm256_broadcast_ss((float const *)(ptr_l+0)); + mat_a_cols_rearr[1] = _mm256_broadcast_ss((float const *)(ptr_l+1)); + mat_a_cols_rearr[3] = _mm256_broadcast_ss((float const *)(ptr_l+2)); + mat_a_cols_rearr[6] = _mm256_broadcast_ss((float const *)(ptr_l+3)); + mat_a_cols_rearr[10] = _mm256_broadcast_ss((float const *)(ptr_l+4)); + mat_a_cols_rearr[15] = _mm256_broadcast_ss((float const *)(ptr_l+5)); + mat_a_cols_rearr[21] = _mm256_broadcast_ss((float const *)(ptr_l+6)); + mat_a_cols_rearr[28] = _mm256_broadcast_ss((float const *)(ptr_l+7)); + //2nd col + ptr_l += cs_l; + mat_a_cols_rearr[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_cols_rearr[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_cols_rearr[7] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[11] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[16] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[22] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[29] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //3rd col + ptr_l += cs_l; + mat_a_cols_rearr[5] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_cols_rearr[8] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[12] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[17] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[23] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[30] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //4rth col + ptr_l += cs_l; + mat_a_cols_rearr[9] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[13] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[18] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[24] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[31] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //5th col + ptr_l += cs_l; + mat_a_cols_rearr[14] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[19] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[25] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[32] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //6th col + ptr_l += cs_l; + mat_a_cols_rearr[20] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[26] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[33] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //7th col + ptr_l += cs_l; + mat_a_cols_rearr[27] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[34] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //8th col + //ptr_l += cs_l; + //mat_a_cols_rearr[35] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + numCols_b -= 8; // blk_width = 8 + + //compute reciprocals of L(i,i) and broadcast in registers + //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[20]); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_cols_rearr[27], mat_a_cols_rearr[35]); + + //mat_a_diag_inv[1] = _mm256_permute_ps(mat_a_diag_inv[1], 0x55); + //mat_a_diag_inv[3] = _mm256_permute_ps(mat_a_diag_inv[3], 0x55); + //mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC); + //mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC); + //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x20); + + //reciprocal of diagnol elements + //reciprocal_diags = _mm256_div_ps(reciprocal_diags, mat_a_diag_inv[0]); + + //Start loop for cols of B to be processed in size of blk_width + for (j = 0; j < numCols_b; j += 8) + { + ptr_b_dup = ptr_b; + + /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ + + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //extract diag a00 from a + //mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); + //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + //mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); + + //extract diag a11 from a + //mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); + //mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + //mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + //mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); + //mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + //mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + //mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); + //mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + //mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + //mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); + //mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + //mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + //mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); + //mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + //mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + //mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); + //mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + //mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + //mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); + //mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + //mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); + mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); +#else + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); + mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); + mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); + mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); + mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); + mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); + mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); + mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + //Read next set of B columns + ptr_b += (cs_b + cs_b_offset[5]); + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); + + //end loop of cols + } + + //Last block trsm processing + ptr_b_dup = ptr_b; + + /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ + + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //extract diag a00 from a + //mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); + //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + //mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); + + //extract diag a11 from a + //mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); + //mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + //mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + //mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); + //mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + //mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + //mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); + //mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + //mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + //mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); + //mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + //mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + //mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); + //mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + //mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + //mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); + //mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + //mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + //mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); + //mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + //mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); + mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); +#else + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); + mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); + mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); + mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); + mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); + mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); + mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); + mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); + + //end loop of cols +} + +static void blis_strsm_microkernel_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) +{ + //float ones = 1.0; + int j; + int cs_b_offset[6]; + //int row2, row4, row6; + float *ptr_b_dup; + + //70 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[8]; + __m256 mat_a_cols[8]; + __m256 mat_a_cols_rearr[36]; + //__m256 mat_a_diag_inv[8]; + //__m256 reciprocal_diags; + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + + //reciprocal_diags = _mm256_loadu_ps((float const *)ones); + //reciprocal_diags = _mm256_broadcast_ss((float const *)&ones); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //read first set of 16x8 block of B into registers, where 16 is the blk_height and 8 is the blk_width for B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); + //_mm_prefetch((char*)(ptr_l + 0), _MM_HINT_T0); + //row2 = (cs_l << 1); + //row4 = (cs_l << 2); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); + //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); + //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); + //_mm_prefetch((char*)(ptr_l + row2 + cs_l), _MM_HINT_T0); + //row6 = row2 + row4; + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); + //_mm_prefetch((char*)(ptr_l + row4), _MM_HINT_T0); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); + //_mm_prefetch((char*)(ptr_l + row4 + cs_l), _MM_HINT_T0); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); + //_mm_prefetch((char*)(ptr_l + row6), _MM_HINT_T0); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); + //_mm_prefetch((char*)(ptr_l + row6 + cs_l), _MM_HINT_T0); + + //reciprocal_diags = _mm256_loadu_ps((float const *)ones); + + //read first set of 16x16 block of L, where 16 is the blk_height and 16 is the blk_width for L + /*mat_a_cols[0] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[1] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[2] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[3] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[4] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[5] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[6] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[7] = _mm256_loadu_ps((float const *)ptr_l);*/ + + //Shuffle to rearrange/transpose 16x16 block of L into contiguous row-wise registers + //tmpRegs[0] = _mm256_castps256_ps128(mat_a_cols[0]); //zero latency, no instruction added actually. + //mat_a_cols_rearr[0] = _mm256_broadcastss_ps(tmpRegs[0]); + //1st col + mat_a_cols_rearr[0] = _mm256_broadcast_ss((float const *)(ptr_l+0)); + mat_a_cols_rearr[1] = _mm256_broadcast_ss((float const *)(ptr_l+1)); + mat_a_cols_rearr[3] = _mm256_broadcast_ss((float const *)(ptr_l+2)); + mat_a_cols_rearr[6] = _mm256_broadcast_ss((float const *)(ptr_l+3)); + mat_a_cols_rearr[10] = _mm256_broadcast_ss((float const *)(ptr_l+4)); + mat_a_cols_rearr[15] = _mm256_broadcast_ss((float const *)(ptr_l+5)); + mat_a_cols_rearr[21] = _mm256_broadcast_ss((float const *)(ptr_l+6)); + mat_a_cols_rearr[28] = _mm256_broadcast_ss((float const *)(ptr_l+7)); + //2nd col + ptr_l += cs_l; + mat_a_cols_rearr[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_cols_rearr[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_cols_rearr[7] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[11] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[16] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[22] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[29] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //3rd col + ptr_l += cs_l; + mat_a_cols_rearr[5] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_cols_rearr[8] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[12] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[17] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[23] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[30] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //4rth col + ptr_l += cs_l; + mat_a_cols_rearr[9] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[13] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[18] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[24] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[31] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //5th col + ptr_l += cs_l; + mat_a_cols_rearr[14] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[19] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[25] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[32] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //6th col + ptr_l += cs_l; + mat_a_cols_rearr[20] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[26] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[33] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //7th col + ptr_l += cs_l; + mat_a_cols_rearr[27] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[34] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //8th col + //ptr_l += cs_l; + //mat_a_cols_rearr[35] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + numCols_b -= 8; // blk_width = 8 + + //compute reciprocals of L(i,i) and broadcast in registers + //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[20]); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_cols_rearr[27], mat_a_cols_rearr[35]); + + //mat_a_diag_inv[1] = _mm256_permute_ps(mat_a_diag_inv[1], 0x55); + //mat_a_diag_inv[3] = _mm256_permute_ps(mat_a_diag_inv[3], 0x55); + //mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC); + //mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC); + //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x20); + + //reciprocal of diagnol elements + //reciprocal_diags = _mm256_div_ps(reciprocal_diags, mat_a_diag_inv[0]); + + //Start loop for cols of B to be processed in size of blk_width + for (j = 0; j < numCols_b; j += 8) + { + ptr_b_dup = ptr_b; + + /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ + + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //extract diag a00 from a + //mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); + //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + //mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + //extract diag a11 from a + //mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); + //mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + //mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + //mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); + //mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + //mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + //mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); + //mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + //mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + //mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); + //mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + //mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + //mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); + //mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + //mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + //mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); + //mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + //mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + //mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); + //mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + //mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); + mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); +#else + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); + mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); + mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); + mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); + mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); + mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); + mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); + mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + //Read next set of B columns + ptr_b += (cs_b + cs_b_offset[5]); + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); + //end loop of cols + } + + //Last block trsm processing + ptr_b_dup = ptr_b; + + /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ + + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //extract diag a00 from a + //mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); + //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + //mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + //extract diag a11 from a + //mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); + //mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + //mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + //mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); + //mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + //mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + //mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); + //mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + //mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + //mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); + //mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + //mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + //mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); + //mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + //mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + //mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); + //mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + //mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + //mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); + //mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + //mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); + mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); +#else + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); + mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); + mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); + mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); + mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); + mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); + mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); + mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); + //end loop of cols +} + +static void blis_strsm_microkernel(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) +{ + float ones = 1.0; + int j; + int cs_b_offset[6]; + //int row2, row4, row6; + float *ptr_b_dup; + + //70 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[8]; + __m256 mat_a_cols[8]; + __m256 mat_a_cols_rearr[36]; + __m256 mat_a_diag_inv[8]; + __m256 reciprocal_diags; + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + + //reciprocal_diags = _mm256_loadu_ps((float const *)ones); + reciprocal_diags = _mm256_broadcast_ss((float const *)&ones); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //read first set of 16x8 block of B into registers, where 16 is the blk_height and 8 is the blk_width for B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); + //_mm_prefetch((char*)(ptr_l + 0), _MM_HINT_T0); + //row2 = (cs_l << 1); + //row4 = (cs_l << 2); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); + //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); + //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); + //_mm_prefetch((char*)(ptr_l + row2 + cs_l), _MM_HINT_T0); + //row6 = row2 + row4; + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); + //_mm_prefetch((char*)(ptr_l + row4), _MM_HINT_T0); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); + //_mm_prefetch((char*)(ptr_l + row4 + cs_l), _MM_HINT_T0); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); + //_mm_prefetch((char*)(ptr_l + row6), _MM_HINT_T0); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); + //_mm_prefetch((char*)(ptr_l + row6 + cs_l), _MM_HINT_T0); + + //reciprocal_diags = _mm256_loadu_ps((float const *)ones); + + //read first set of 16x16 block of L, where 16 is the blk_height and 16 is the blk_width for L + /*mat_a_cols[0] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[1] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[2] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[3] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[4] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[5] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[6] = _mm256_loadu_ps((float const *)ptr_l); + ptr_l += cs_l; + mat_a_cols[7] = _mm256_loadu_ps((float const *)ptr_l);*/ + + //Shuffle to rearrange/transpose 16x16 block of L into contiguous row-wise registers + //tmpRegs[0] = _mm256_castps256_ps128(mat_a_cols[0]); //zero latency, no instruction added actually. + //mat_a_cols_rearr[0] = _mm256_broadcastss_ps(tmpRegs[0]); + //1st col + mat_a_cols_rearr[0] = _mm256_broadcast_ss((float const *)(ptr_l+0)); + mat_a_cols_rearr[1] = _mm256_broadcast_ss((float const *)(ptr_l+1)); + mat_a_cols_rearr[3] = _mm256_broadcast_ss((float const *)(ptr_l+2)); + mat_a_cols_rearr[6] = _mm256_broadcast_ss((float const *)(ptr_l+3)); + mat_a_cols_rearr[10] = _mm256_broadcast_ss((float const *)(ptr_l+4)); + mat_a_cols_rearr[15] = _mm256_broadcast_ss((float const *)(ptr_l+5)); + mat_a_cols_rearr[21] = _mm256_broadcast_ss((float const *)(ptr_l+6)); + mat_a_cols_rearr[28] = _mm256_broadcast_ss((float const *)(ptr_l+7)); + //2nd col + ptr_l += cs_l; + mat_a_cols_rearr[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_cols_rearr[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_cols_rearr[7] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[11] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[16] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[22] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[29] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //3rd col + ptr_l += cs_l; + mat_a_cols_rearr[5] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_cols_rearr[8] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[12] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[17] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[23] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[30] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //4rth col + ptr_l += cs_l; + mat_a_cols_rearr[9] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_cols_rearr[13] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[18] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[24] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[31] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //5th col + ptr_l += cs_l; + mat_a_cols_rearr[14] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_cols_rearr[19] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[25] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[32] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //6th col + ptr_l += cs_l; + mat_a_cols_rearr[20] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_cols_rearr[26] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[33] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //7th col + ptr_l += cs_l; + mat_a_cols_rearr[27] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_cols_rearr[34] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + //7th col + ptr_l += cs_l; + mat_a_cols_rearr[35] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + numCols_b -= 8; // blk_width = 8 + + //compute reciprocals of L(i,i) and broadcast in registers + mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); + mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); + mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[20]); + mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_cols_rearr[27], mat_a_cols_rearr[35]); + + //mat_a_diag_inv[1] = _mm256_permute_ps(mat_a_diag_inv[1], 0x55); + //mat_a_diag_inv[3] = _mm256_permute_ps(mat_a_diag_inv[3], 0x55); + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC); + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x20); + + //reciprocal of diagnol elements + reciprocal_diags = _mm256_div_ps(reciprocal_diags, mat_a_diag_inv[0]); + + //Start loop for cols of B to be processed in size of blk_width + for (j = 0; j < numCols_b; j += 8) + { + ptr_b_dup = ptr_b; + + /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ + + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); + mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); +#else + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); + mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); + mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); + mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); + mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); + mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); + mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); + mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + //Read next set of B columns + ptr_b += (cs_b + cs_b_offset[5]); + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); + //end loop of cols + } + + //Last block trsm processing + ptr_b_dup = ptr_b; + + /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ + + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); + mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); +#else + mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); + mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); + mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); + mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); + mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); + mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); + mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); + mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); + mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); + //end loop of cols +} +static void blis_dtrsm_microkernel_alpha(double *ptr_l, + double *ptr_b, + int m, + int n, + int rs_l, + int rs_b, + int cs_l, + int cs_b, + double alphaVal + ) +{ + int j; + int n_remainder = n%4; + int cs_b_offset[2]; + double *ptr_b_dup; + double ones = 1.0; + __m256d mat_b_col[4]; + __m256d mat_b_rearr[4]; + __m256d mat_a_cols[4]; + __m256d mat_a_cols_rearr[10]; + __m256d mat_a_diag_inv[4]; + __m256d reciprocal_diags; + __m256d alphaReg; + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + + reciprocal_diags = _mm256_broadcast_sd((double const *)&ones); + alphaReg = _mm256_broadcast_sd((double const *)&alphaVal); + + //if(m % 4 == 0) + //{ + //1st col + mat_a_cols_rearr[0] = _mm256_broadcast_sd((double const *)(ptr_l+0)); + mat_a_cols_rearr[1] = _mm256_broadcast_sd((double const *)(ptr_l+1)); + mat_a_cols_rearr[3] = _mm256_broadcast_sd((double const *)(ptr_l+2)); + mat_a_cols_rearr[6] = _mm256_broadcast_sd((double const *)(ptr_l+3)); + + //2nd col + ptr_l += cs_l; + mat_a_cols_rearr[2] = _mm256_broadcast_sd((double const *)(ptr_l + 1)); + mat_a_cols_rearr[4] = _mm256_broadcast_sd((double const *)(ptr_l + 2)); + mat_a_cols_rearr[7] = _mm256_broadcast_sd((double const *)(ptr_l + 3)); + + //3rd col + ptr_l += cs_l; + mat_a_cols_rearr[5] = _mm256_broadcast_sd((double const *)(ptr_l + 2)); + mat_a_cols_rearr[8] = _mm256_broadcast_sd((double const *)(ptr_l + 3)); + + //4th col + ptr_l += cs_l; + mat_a_cols_rearr[9] = _mm256_broadcast_sd((double const *)(ptr_l + 3)); + //compute reciprocals of L(i,i) and broadcast in registers + mat_a_diag_inv[0] = _mm256_unpacklo_pd(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); + mat_a_diag_inv[1] = _mm256_unpacklo_pd(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); + + mat_a_diag_inv[0] = _mm256_blend_pd(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x0C); + reciprocal_diags = _mm256_div_pd(reciprocal_diags, mat_a_diag_inv[0]); + + for(j = 0;(j+3) < n; j += 4) + { + ptr_b_dup = ptr_b; + /*Shuffle to rearrange/transpose 8x4 block of B into contiguous row-wise registers*/ + + //read first set of 4x4 block of B into registers + mat_b_col[0] = _mm256_loadu_pd((double const *)ptr_b); + mat_b_col[1] = _mm256_loadu_pd((double const *)(ptr_b + (cs_b))); + //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); + mat_b_col[2] = _mm256_loadu_pd((double const *)(ptr_b + cs_b_offset[0])); + //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); + mat_b_col[3] = _mm256_loadu_pd((double const *)(ptr_b + cs_b_offset[1])); + + ////unpacklow//// + mat_b_rearr[1] = _mm256_unpacklo_pd(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[3] = _mm256_unpacklo_pd(mat_b_col[2], mat_b_col[3]); + + //rearrange low elements + mat_b_rearr[0] = _mm256_permute2f128_pd(mat_b_rearr[1],mat_b_rearr[3],0x20); + mat_b_rearr[2] = _mm256_permute2f128_pd(mat_b_rearr[1],mat_b_rearr[3],0x31); + + mat_b_rearr[0] = _mm256_mul_pd(mat_b_rearr[0], alphaReg); + mat_b_rearr[2] = _mm256_mul_pd(mat_b_rearr[2], alphaReg); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_pd(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_pd(mat_b_col[2], mat_b_col[3]); + + //rearrange high elements + mat_b_rearr[1] = _mm256_permute2f128_pd(mat_b_col[0],mat_b_col[1],0x20); + mat_b_rearr[3] = _mm256_permute2f128_pd(mat_b_col[0],mat_b_col[1],0x31); + + mat_b_rearr[1] = _mm256_mul_pd(mat_b_rearr[1], alphaReg); + mat_b_rearr[3] = _mm256_mul_pd(mat_b_rearr[3], alphaReg); + //extract a00 + mat_a_diag_inv[0] = _mm256_permute_pd(reciprocal_diags, 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_pd(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[0] = _mm256_mul_pd(mat_b_rearr[0], mat_a_diag_inv[0]); + + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_pd(reciprocal_diags, 0x03); + mat_a_diag_inv[1] = _mm256_permute2f128_pd(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (3, 0) + mat_b_rearr[1] = _mm256_fnmadd_pd(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_pd(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_pd(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[1] = _mm256_mul_pd(mat_b_rearr[1], mat_a_diag_inv[1]); + + + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_pd(reciprocal_diags, 0x00); + mat_a_diag_inv[2] = _mm256_permute2f128_pd(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x11); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_pd(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_pd(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[2] = _mm256_mul_pd(mat_b_rearr[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_pd(reciprocal_diags, 0x0C); + mat_a_diag_inv[3] = _mm256_permute2f128_pd(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x11); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_pd(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[3] = _mm256_mul_pd(mat_b_rearr[3], mat_a_diag_inv[3]); + + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[1] = _mm256_unpacklo_pd(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[3] = _mm256_unpacklo_pd(mat_b_rearr[2], mat_b_rearr[3]); + + //rearrange low elements + mat_a_cols[0] = _mm256_permute2f128_pd(mat_a_cols[1],mat_a_cols[3],0x20); + mat_a_cols[2] = _mm256_permute2f128_pd(mat_a_cols[1],mat_a_cols[3],0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_pd(mat_b_rearr[0], mat_b_rearr[1]); + + mat_b_rearr[1] = _mm256_unpackhi_pd(mat_b_rearr[2], mat_b_rearr[3]); + + //rearrange high elements + mat_a_cols[1] = _mm256_permute2f128_pd(mat_b_rearr[0],mat_b_rearr[1],0x20); + mat_a_cols[3] = _mm256_permute2f128_pd(mat_b_rearr[0],mat_b_rearr[1],0x31); + + //Read next set of B columns + ptr_b += (cs_b+cs_b_offset[1]); + _mm256_storeu_pd((double *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_pd((double *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_pd((double *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + _mm256_storeu_pd((double *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); + + } + ptr_b_dup = ptr_b; + if(n_remainder == 3) + { + + //read first set of 4x4 block of B into registers + mat_b_col[0] = _mm256_loadu_pd((double const *)ptr_b); + mat_b_col[1] = _mm256_loadu_pd((double const *)(ptr_b + (cs_b))); + mat_b_col[2] = _mm256_loadu_pd((double const *)(ptr_b + cs_b_offset[0])); + mat_b_col[3] = _mm256_broadcast_sd((double const *)&ones); + } + if(n_remainder == 2) + { + //read first set of 4x4 block of B into registers + mat_b_col[0] = _mm256_loadu_pd((double const *)ptr_b); + mat_b_col[1] = _mm256_loadu_pd((double const *)(ptr_b + (cs_b))); + mat_b_col[2] = _mm256_broadcast_sd((double const *)&ones); + mat_b_col[3] = _mm256_broadcast_sd((double const *)&ones); + } + if(n_remainder == 1) + { + //read first set of 4x4 block of B into registers + mat_b_col[0] = _mm256_loadu_pd((double const *)ptr_b); + mat_b_col[1] = _mm256_broadcast_sd((double const *)&ones); + mat_b_col[2] = _mm256_broadcast_sd((double const *)&ones); + mat_b_col[3] = _mm256_broadcast_sd((double const *)&ones); + } + /*Shuffle to rearrange/transpose 8x4 block of B into contiguous row-wise registers*/ + ////unpacklow//// + mat_b_rearr[1] = _mm256_unpacklo_pd(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[3] = _mm256_unpacklo_pd(mat_b_col[2], mat_b_col[3]); + //rearrange low elements + mat_b_rearr[0] = _mm256_permute2f128_pd(mat_b_rearr[1],mat_b_rearr[3],0x20); + mat_b_rearr[2] = _mm256_permute2f128_pd(mat_b_rearr[1],mat_b_rearr[3],0x31); + mat_b_rearr[0] = _mm256_mul_pd(mat_b_rearr[0], alphaReg); + mat_b_rearr[2] = _mm256_mul_pd(mat_b_rearr[2], alphaReg); + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_pd(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_pd(mat_b_col[2], mat_b_col[3]); + //rearrange high elements + mat_b_rearr[1] = _mm256_permute2f128_pd(mat_b_col[0],mat_b_col[1],0x20); + mat_b_rearr[3] = _mm256_permute2f128_pd(mat_b_col[0],mat_b_col[1],0x31); + mat_b_rearr[1] = _mm256_mul_pd(mat_b_rearr[1], alphaReg); + mat_b_rearr[3] = _mm256_mul_pd(mat_b_rearr[3], alphaReg); + //extract a00 + mat_a_diag_inv[0] = _mm256_permute_pd(reciprocal_diags, 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_pd(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[0] = _mm256_mul_pd(mat_b_rearr[0], mat_a_diag_inv[0]); + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_pd(reciprocal_diags, 0x03); + mat_a_diag_inv[1] = _mm256_permute2f128_pd(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (3, 0) + mat_b_rearr[1] = _mm256_fnmadd_pd(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_pd(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_pd(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[1] = _mm256_mul_pd(mat_b_rearr[1], mat_a_diag_inv[1]); + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_pd(reciprocal_diags, 0x00); + mat_a_diag_inv[2] = _mm256_permute2f128_pd(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x11); + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_pd(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_pd(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[2] = _mm256_mul_pd(mat_b_rearr[2], mat_a_diag_inv[2]); + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_pd(reciprocal_diags, 0x0C); + mat_a_diag_inv[3] = _mm256_permute2f128_pd(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x11); + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_pd(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[3] = _mm256_mul_pd(mat_b_rearr[3], mat_a_diag_inv[3]); + //--> Transpose and store results of columns of B block <--// + ////unpacklow//// + mat_a_cols[1] = _mm256_unpacklo_pd(mat_b_rearr[0], mat_b_rearr[1]); + mat_a_cols[3] = _mm256_unpacklo_pd(mat_b_rearr[2], mat_b_rearr[3]); + //rearrange low elements + mat_a_cols[0] = _mm256_permute2f128_pd(mat_a_cols[1],mat_a_cols[3],0x20); + mat_a_cols[2] = _mm256_permute2f128_pd(mat_a_cols[1],mat_a_cols[3],0x31); + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_pd(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_pd(mat_b_rearr[2], mat_b_rearr[3]); + //rearrange high elements + mat_a_cols[1] = _mm256_permute2f128_pd(mat_b_rearr[0],mat_b_rearr[1],0x20); + mat_a_cols[3] = _mm256_permute2f128_pd(mat_b_rearr[0],mat_b_rearr[1],0x31); + //Store the computed B columns + if(n_remainder == 3) + { + _mm256_storeu_pd((double *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_pd((double *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + _mm256_storeu_pd((double *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); + } + if(n_remainder == 2) + { + _mm256_storeu_pd((double *)ptr_b_dup, mat_a_cols[0]); + _mm256_storeu_pd((double *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); + } + if(n_remainder == 1) + { + _mm256_storeu_pd((double *)ptr_b_dup, mat_a_cols[0]); + } + + //} + +} + +#if OPT_CACHE_BLOCKING_L1 //new intrinsic kernels +static void trsm_XAtB_block_allSmallSizedMatrices(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) +{ + float ones = 1.0; + int i, i1, i2, i3, i4, j, k, l, r; + int cs_b_offset[7]; + int cs_l_offset[7]; + float *ptr_b_dup, *ptr_l_dup; + + //57 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[8]; + __m256 mat_a_blk_elems[8]; + __m256 mat_a_diag_inv[8]; + __m256 reciprocal_diags[2]; + + reciprocal_diags[0] = _mm256_broadcast_ss((float const *)(&ones)); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //L matrix offsets + cs_l_offset[0] = (cs_l << 1); + cs_l_offset[1] = cs_l + cs_l_offset[0]; + cs_l_offset[2] = (cs_l << 2); + cs_l_offset[3] = cs_l + cs_l_offset[2]; + cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; + cs_l_offset[5] = cs_l + cs_l_offset[4]; + cs_l_offset[6] = (cs_l_offset[5] + cs_l); + + //read diag elems of L 16x16 block + mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_l); + mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)ptr_l + cs_l); + mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[0]); + mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[1]); + mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[2]); + mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[3]); + mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[4]); + mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[5]); + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + cs_b_offset[6] = (cs_b_offset[5] + cs_b); + + reciprocal_diags[1] = reciprocal_diags[0]; + + //pack first 8 diags together + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xAA);//diag 0,1 + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xAA);//diag 2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_blk_elems[4], mat_a_blk_elems[5], 0xAA);//diag 4,5 + mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_blk_elems[6], mat_a_blk_elems[7], 0xAA);//diag 6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 + + //reciprocal of diagnal elements 0,1,2,3,4,5,6,7 + reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_diag_inv[0], mat_a_diag_inv[0]); + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); + + + /***************** first set of 8 rows of B processing starts *****************/ + ptr_b_dup = ptr_b; + i = 0; + for (j = 0; j < numCols_b; j += 8) + { + /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A + //read 8x8 block of B into registers + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], mat_a_diag_inv[0]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_col[1]);//d = c - (a*b) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_col[2]);//d = c - (a*b) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], mat_a_diag_inv[1]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_col[2]);//d = c - (a*b) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], mat_a_diag_inv[2]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], mat_a_diag_inv[3]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], mat_a_diag_inv[4]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], mat_a_diag_inv[5]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], mat_a_diag_inv[6]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], mat_a_diag_inv[7]); + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); + + //i += cs_b_offset[6]; + //ptr_b_dup += cs_b_offset[6]; + i += 8; + ptr_b_dup += 8; + } + + //c = 0; + /***************** first set of 8 cols of B processing done *****************/ + ptr_b_dup = ptr_b; + i3 = 0; + i1 = 0; + //Start loop for cols of B to be processed in size of blk_width + for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row + { + ptr_l += 8; + //ptr_b += j; + //ptr_b_dup += 8; + ptr_b_dup += cs_b_offset[6]; + i1 += cs_b_offset[6]; + + //Read next 8x8 block of A to get diag elements + i3 += cs_l_offset[6]; + mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_l + i3); + mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l); + mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[0]); + mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[1]); + mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[2]); + mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[3]); + mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[4]); + mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[5]); + + //pack 8 diags of A together + reciprocal_diags[0] = reciprocal_diags[1]; + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xAA);//diag 0,1 + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xAA);//diag 2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_blk_elems[4], mat_a_blk_elems[5], 0xAA);//diag 4,5 + mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_blk_elems[6], mat_a_blk_elems[7], 0xAA);//diag 6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 + + //reciprocal of diagnal elements of A :- 0,1,2,3,4,5,6,7 + reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //mat_a_diag_inv2[0] = _mm256_unpacklo_ps(mat_a_diag_inv2[0], mat_a_diag_inv2[0]); + + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); + + for (r = 0; r < numCols_b; r += GEMM_BLK_V1) + { +#if GEMM_ACCUM_A + i = i1 + r; + //Read 8 cols of B columns of Block-to-be-solved + mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); +#endif + i = 0; + i2 = 0; + for (l = 0; l < j; l += 8) // move across m + { + //for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) + { + /////////////////// Partial Lower 8x8 block trsm of B + ptr_l_dup = ptr_l; + i4 = i2 + r; + //Read current 8 cols of B columns from specified 8x8 current-block of B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); + + //Broadcast A8,0 to A15,0 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + i4 = k >> 3; + ptr_l_dup += cs_l; + +#if GEMM_ACCUM_A + //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_mul_ps(mat_a_blk_elems[0], mat_b_col[0]); + mat_b_rearr[1] = _mm256_mul_ps(mat_a_blk_elems[1], mat_b_col[0]); + mat_b_rearr[2] = _mm256_mul_ps(mat_a_blk_elems[2], mat_b_col[0]); + mat_b_rearr[3] = _mm256_mul_ps(mat_a_blk_elems[3], mat_b_col[0]); + mat_b_rearr[4] = _mm256_mul_ps(mat_a_blk_elems[4], mat_b_col[0]); + mat_b_rearr[5] = _mm256_mul_ps(mat_a_blk_elems[5], mat_b_col[0]); + mat_b_rearr[6] = _mm256_mul_ps(mat_a_blk_elems[6], mat_b_col[0]); + mat_b_rearr[7] = _mm256_mul_ps(mat_a_blk_elems[7], mat_b_col[0]); +#endif + //Broadcast A21 to A71 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,2 to A15,2 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,3 to A15,3 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,4 to A15,4 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,5 to A15,5 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,6 to A15,6 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,7 to A15,7 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) +#endif + //end loop of cols + } + i2 += cs_b_offset[6]; + i += cs_l_offset[6]; + } + //trsm solve + + k = 0; + //for (i2 = 0; i2 < numCols_b; i2 += 8) + { + i2 = i1 + r; + /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A +#if !GEMM_ACCUM_A + //Read 8 cols of B columns of Block-to-be-solved + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i2); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i2)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i2)); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i2)); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i2)); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i2)); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i2)); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i2)); +#endif + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + +#if GEMM_ACCUM_A + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); +#else + mat_b_rearr[0] = _mm256_sub_ps(mat_b_col[0], mat_b_rearr[0]); + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); +#endif + +#if GEMM_ACCUM_A + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[1] = _mm256_sub_ps(mat_b_col[1], mat_b_rearr[1]); + mat_b_rearr[2] = _mm256_sub_ps(mat_b_col[2], mat_b_rearr[2]); + mat_b_rearr[3] = _mm256_sub_ps(mat_b_col[3], mat_b_rearr[3]); + mat_b_rearr[4] = _mm256_sub_ps(mat_b_col[4], mat_b_rearr[4]); + mat_b_rearr[5] = _mm256_sub_ps(mat_b_col[5], mat_b_rearr[5]); + mat_b_rearr[6] = _mm256_sub_ps(mat_b_col[6], mat_b_rearr[6]); + mat_b_rearr[7] = _mm256_sub_ps(mat_b_col[7], mat_b_rearr[7]); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A21 to A71 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A76 to register + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup + r, mat_b_rearr[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)+r), mat_b_rearr[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + r), mat_b_rearr[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + r), mat_b_rearr[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + r), mat_b_rearr[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + r), mat_b_rearr[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + r), mat_b_rearr[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + r), mat_b_rearr[7]); + //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); + k++; + } + } + } //numRows of A + ///////////////////loop ends ///////////////////// +} + +static void trsm_XAtB_block_allSmallSizedMatrices_alpha(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alpha) +{ + float ones = 1.0; + int i, i1, i2, i3, i4, j, k, l, r; + int cs_b_offset[7]; + int cs_l_offset[7]; + float *ptr_b_dup, *ptr_l_dup; + + //57 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[8]; + __m256 mat_a_blk_elems[8]; + __m256 mat_a_diag_inv[8]; + __m256 reciprocal_diags[2]; + __m256 alphaReg; + + reciprocal_diags[0] = _mm256_broadcast_ss((float const *)(&ones)); + alphaReg = _mm256_broadcast_ss((float const *)&alpha); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //L matrix offsets + cs_l_offset[0] = (cs_l << 1); + cs_l_offset[1] = cs_l + cs_l_offset[0]; + cs_l_offset[2] = (cs_l << 2); + cs_l_offset[3] = cs_l + cs_l_offset[2]; + cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; + cs_l_offset[5] = cs_l + cs_l_offset[4]; + cs_l_offset[6] = (cs_l_offset[5] + cs_l); + + //read diag elems of L 16x16 block + mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_l); + mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)ptr_l + cs_l); + mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[0]); + mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[1]); + mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[2]); + mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[3]); + mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[4]); + mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[5]); + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + cs_b_offset[6] = (cs_b_offset[5] + cs_b); + + reciprocal_diags[1] = reciprocal_diags[0]; + + //pack first 8 diags together + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xAA);//diag 0,1 + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xAA);//diag 2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_blk_elems[4], mat_a_blk_elems[5], 0xAA);//diag 4,5 + mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_blk_elems[6], mat_a_blk_elems[7], 0xAA);//diag 6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 + + //reciprocal of diagnal elements 0,1,2,3,4,5,6,7 + reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); +#if 0 + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); +#endif + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_diag_inv[0], mat_a_diag_inv[0]); + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); + + + /***************** first set of 8 rows of B processing starts *****************/ + ptr_b_dup = ptr_b; + i = 0; + for (j = 0; j < numCols_b; j += 8) + { + /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A + //read 8x8 block of B into registers + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], alphaReg); + mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], alphaReg); + mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], alphaReg); + mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], alphaReg); + mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], alphaReg); + mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], alphaReg); + mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], alphaReg); + mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], alphaReg); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], mat_a_diag_inv[0]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_col[1]);//d = c - (a*b) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_col[2]);//d = c - (a*b) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], mat_a_diag_inv[1]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_col[2]);//d = c - (a*b) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], mat_a_diag_inv[2]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], mat_a_diag_inv[3]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], mat_a_diag_inv[4]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], mat_a_diag_inv[5]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], mat_a_diag_inv[6]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], mat_a_diag_inv[7]); + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); + + //i += cs_b_offset[6]; + //ptr_b_dup += cs_b_offset[6]; + i += 8; + ptr_b_dup += 8; + } + + //c = 0; + /***************** first set of 8 cols of B processing done *****************/ + ptr_b_dup = ptr_b; + i3 = 0; + i1 = 0; + //Start loop for cols of B to be processed in size of blk_width + for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row + { + ptr_l += 8; + //ptr_b += j; + //ptr_b_dup += 8; + ptr_b_dup += cs_b_offset[6]; + i1 += cs_b_offset[6]; + + //Read next 8x8 block of A to get diag elements + i3 += cs_l_offset[6]; + mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_l + i3); + mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l); + mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[0]); + mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[1]); + mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[2]); + mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[3]); + mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[4]); + mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[5]); + + //pack 8 diags of A together + reciprocal_diags[0] = reciprocal_diags[1]; + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xAA);//diag 0,1 + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xAA);//diag 2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_blk_elems[4], mat_a_blk_elems[5], 0xAA);//diag 4,5 + mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_blk_elems[6], mat_a_blk_elems[7], 0xAA);//diag 6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 + + //reciprocal of diagnal elements of A :- 0,1,2,3,4,5,6,7 + reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //mat_a_diag_inv2[0] = _mm256_unpacklo_ps(mat_a_diag_inv2[0], mat_a_diag_inv2[0]); + + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); + + for (r = 0; r < numCols_b; r += GEMM_BLK_V1) + { +#if GEMM_ACCUM_A + i = i1 + r; + //Read 8 cols of B columns of Block-to-be-solved + mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); +#endif + i = 0; + i2 = 0; + for (l = 0; l < j; l += 8) // move across m + { + //for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) + { + /////////////////// Partial Lower 8x8 block trsm of B + ptr_l_dup = ptr_l; + i4 = i2 + r; + //Read current 8 cols of B columns from specified 8x8 current-block of B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); + + //Broadcast A8,0 to A15,0 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + i4 = k >> 3; + ptr_l_dup += cs_l; + +#if GEMM_ACCUM_A + //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_mul_ps(mat_a_blk_elems[0], mat_b_col[0]); + mat_b_rearr[1] = _mm256_mul_ps(mat_a_blk_elems[1], mat_b_col[0]); + mat_b_rearr[2] = _mm256_mul_ps(mat_a_blk_elems[2], mat_b_col[0]); + mat_b_rearr[3] = _mm256_mul_ps(mat_a_blk_elems[3], mat_b_col[0]); + mat_b_rearr[4] = _mm256_mul_ps(mat_a_blk_elems[4], mat_b_col[0]); + mat_b_rearr[5] = _mm256_mul_ps(mat_a_blk_elems[5], mat_b_col[0]); + mat_b_rearr[6] = _mm256_mul_ps(mat_a_blk_elems[6], mat_b_col[0]); + mat_b_rearr[7] = _mm256_mul_ps(mat_a_blk_elems[7], mat_b_col[0]); +#endif + //Broadcast A21 to A71 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,2 to A15,2 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,3 to A15,3 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,4 to A15,4 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,5 to A15,5 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,6 to A15,6 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,7 to A15,7 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) +#endif + //end loop of cols + } + i2 += cs_b_offset[6]; + i += cs_l_offset[6]; + } + //trsm solve + + k = 0; + //for (i2 = 0; i2 < numCols_b; i2 += 8) + { + i2 = i1 + r; + /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A +#if !GEMM_ACCUM_A + //Read 8 cols of B columns of Block-to-be-solved + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i2); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i2)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i2)); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i2)); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i2)); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i2)); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i2)); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i2)); + + mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], alphaReg); + mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], alphaReg); + mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], alphaReg); + mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], alphaReg); + mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], alphaReg); + mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], alphaReg); + mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], alphaReg); + mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], alphaReg); +#endif + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + +#if GEMM_ACCUM_A + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); +#else + mat_b_rearr[0] = _mm256_sub_ps(mat_b_col[0], mat_b_rearr[0]); + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); +#endif + +#if GEMM_ACCUM_A + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[1] = _mm256_sub_ps(mat_b_col[1], mat_b_rearr[1]); + mat_b_rearr[2] = _mm256_sub_ps(mat_b_col[2], mat_b_rearr[2]); + mat_b_rearr[3] = _mm256_sub_ps(mat_b_col[3], mat_b_rearr[3]); + mat_b_rearr[4] = _mm256_sub_ps(mat_b_col[4], mat_b_rearr[4]); + mat_b_rearr[5] = _mm256_sub_ps(mat_b_col[5], mat_b_rearr[5]); + mat_b_rearr[6] = _mm256_sub_ps(mat_b_col[6], mat_b_rearr[6]); + mat_b_rearr[7] = _mm256_sub_ps(mat_b_col[7], mat_b_rearr[7]); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A21 to A71 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A76 to register + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + + _mm256_storeu_ps((float *)ptr_b_dup + r, mat_b_rearr[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)+r), mat_b_rearr[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + r), mat_b_rearr[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + r), mat_b_rearr[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + r), mat_b_rearr[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + r), mat_b_rearr[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + r), mat_b_rearr[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + r), mat_b_rearr[7]); + //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); + k++; + } + } + } //numRows of A + ///////////////////loop ends ///////////////////// +} + +static void trsm_XAtB_block_allSmallSizedMatrices_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) +{ + //float ones = 1.0; + int i, i1, i2, i3, i4, j, k, l, r; + int cs_b_offset[7]; + int cs_l_offset[7]; + float *ptr_b_dup, *ptr_l_dup; + + //57 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[8]; + __m256 mat_a_blk_elems[8]; + //__m256 mat_a_diag_inv[8]; + //__m256 reciprocal_diags[2]; + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //L matrix offsets + cs_l_offset[0] = (cs_l << 1); + cs_l_offset[1] = cs_l + cs_l_offset[0]; + cs_l_offset[2] = (cs_l << 2); + cs_l_offset[3] = cs_l + cs_l_offset[2]; + cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; + cs_l_offset[5] = cs_l + cs_l_offset[4]; + cs_l_offset[6] = (cs_l_offset[5] + cs_l); + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + cs_b_offset[6] = (cs_b_offset[5] + cs_b); + + /***************** first set of 8 rows of B processing starts *****************/ + ptr_b_dup = ptr_b; + i = 0; + for (j = 0; j < numCols_b; j += 8) + { + /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A + //read 8x8 block of B into registers + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + //(Row0) + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_col[1]);//d = c - (a*b) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_col[2]);//d = c - (a*b) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_col[7]);//d = c - (a*b) + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_col[2]);//d = c - (a*b) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_col[7]);//d = c - (a*b) + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_col[7]);//d = c - (a*b) + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_col[7]);//d = c - (a*b) + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_col[7]);//d = c - (a*b) + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_col[7]);//d = c - (a*b) + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_col[7]);//d = c - (a*b) + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); + + //i += cs_b_offset[6]; + //ptr_b_dup += cs_b_offset[6]; + i += 8; + ptr_b_dup += 8; + } + + //c = 0; + /***************** first set of 8 cols of B processing done *****************/ + ptr_b_dup = ptr_b; + i3 = 0; + i1 = 0; + //Start loop for cols of B to be processed in size of blk_width + for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row + { + ptr_l += 8; + //ptr_b += j; + //ptr_b_dup += 8; + ptr_b_dup += cs_b_offset[6]; + i1 += cs_b_offset[6]; + i3 += cs_l_offset[6]; + + i = 0; + i2 = 0; + for (r = 0; r < numCols_b; r += GEMM_BLK_V1) + { +#if GEMM_ACCUM_A + i = i1 + r; + //Read 8 cols of B columns of Block-to-be-solved + mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); +#endif + i = 0; + i2 = 0; + for (l = 0; l < j; l += 8) // move across m + { + //for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) + { + /////////////////// Partial Lower 8x8 block trsm of B + ptr_l_dup = ptr_l; + i4 = i2 + r; + //Read current 8 cols of B columns from specified 8x8 current-block of B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); + + //Broadcast A8,0 to A15,0 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + i4 = k >> 3; + ptr_l_dup += cs_l; + +#if GEMM_ACCUM_A + //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_mul_ps(mat_a_blk_elems[0], mat_b_col[0]); + mat_b_rearr[1] = _mm256_mul_ps(mat_a_blk_elems[1], mat_b_col[0]); + mat_b_rearr[2] = _mm256_mul_ps(mat_a_blk_elems[2], mat_b_col[0]); + mat_b_rearr[3] = _mm256_mul_ps(mat_a_blk_elems[3], mat_b_col[0]); + mat_b_rearr[4] = _mm256_mul_ps(mat_a_blk_elems[4], mat_b_col[0]); + mat_b_rearr[5] = _mm256_mul_ps(mat_a_blk_elems[5], mat_b_col[0]); + mat_b_rearr[6] = _mm256_mul_ps(mat_a_blk_elems[6], mat_b_col[0]); + mat_b_rearr[7] = _mm256_mul_ps(mat_a_blk_elems[7], mat_b_col[0]); +#endif + //Broadcast A21 to A71 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,2 to A15,2 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,3 to A15,3 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,4 to A15,4 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,5 to A15,5 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,6 to A15,6 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,7 to A15,7 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) +#endif + //end loop of cols + } + i2 += cs_b_offset[6]; + i += cs_l_offset[6]; + } + //trsm solve + + k = 0; + //for (i2 = 0; i2 < numCols_b; i2 += 8) + { + i2 = i1 + r; + /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A +#if !GEMM_ACCUM_A + //Read 8 cols of B columns of Block-to-be-solved + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i2); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i2)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i2)); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i2)); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i2)); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i2)); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i2)); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i2)); +#endif + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + +#if GEMM_ACCUM_A + //(Row0): already done +#else + mat_b_rearr[0] = _mm256_sub_ps(mat_b_col[0], mat_b_rearr[0]); +#endif + +#if GEMM_ACCUM_A + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[1] = _mm256_sub_ps(mat_b_col[1], mat_b_rearr[1]); + mat_b_rearr[2] = _mm256_sub_ps(mat_b_col[2], mat_b_rearr[2]); + mat_b_rearr[3] = _mm256_sub_ps(mat_b_col[3], mat_b_rearr[3]); + mat_b_rearr[4] = _mm256_sub_ps(mat_b_col[4], mat_b_rearr[4]); + mat_b_rearr[5] = _mm256_sub_ps(mat_b_col[5], mat_b_rearr[5]); + mat_b_rearr[6] = _mm256_sub_ps(mat_b_col[6], mat_b_rearr[6]); + mat_b_rearr[7] = _mm256_sub_ps(mat_b_col[7], mat_b_rearr[7]); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A21 to A71 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A76 to register + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup + r, mat_b_rearr[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)+r), mat_b_rearr[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + r), mat_b_rearr[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + r), mat_b_rearr[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + r), mat_b_rearr[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + r), mat_b_rearr[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + r), mat_b_rearr[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + r), mat_b_rearr[7]); + //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); + k++; + } + } + } //numRows of A + ///////////////////loop ends ///////////////////// +} + +static void trsm_XAtB_block_allSmallSizedMatrices_alpha_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alpha) +{ + //float ones = 1.0; + int i, i1, i2, i3, i4, j, k, l, r; + int cs_b_offset[7]; + int cs_l_offset[7]; + float *ptr_b_dup, *ptr_l_dup; + + //57 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[8]; + __m256 mat_a_blk_elems[8]; + //__m256 mat_a_diag_inv[8]; + //__m256 reciprocal_diags[2]; + __m256 alphaReg; + alphaReg = _mm256_broadcast_ss((float const *)&alpha); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //L matrix offsets + cs_l_offset[0] = (cs_l << 1); + cs_l_offset[1] = cs_l + cs_l_offset[0]; + cs_l_offset[2] = (cs_l << 2); + cs_l_offset[3] = cs_l + cs_l_offset[2]; + cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; + cs_l_offset[5] = cs_l + cs_l_offset[4]; + cs_l_offset[6] = (cs_l_offset[5] + cs_l); + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + cs_b_offset[6] = (cs_b_offset[5] + cs_b); + +#if 0 + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); +#endif + + + /***************** first set of 8 rows of B processing starts *****************/ + ptr_b_dup = ptr_b; + i = 0; + for (j = 0; j < numCols_b; j += 8) + { + /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A + //read 8x8 block of B into registers + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], alphaReg); + mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], alphaReg); + mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], alphaReg); + mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], alphaReg); + mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], alphaReg); + mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], alphaReg); + mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], alphaReg); + mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], alphaReg); + + //(Row0) + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_col[1]);//d = c - (a*b) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_col[2]);//d = c - (a*b) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_col[7]);//d = c - (a*b) + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_col[2]);//d = c - (a*b) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_col[7]);//d = c - (a*b) + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_col[7]);//d = c - (a*b) + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_col[7]);//d = c - (a*b) + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_col[7]);//d = c - (a*b) + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_col[7]);//d = c - (a*b) + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_col[7]);//d = c - (a*b) + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); + + //i += cs_b_offset[6]; + //ptr_b_dup += cs_b_offset[6]; + i += 8; + ptr_b_dup += 8; + } + + //c = 0; + /***************** first set of 8 cols of B processing done *****************/ + ptr_b_dup = ptr_b; + i3 = 0; + i1 = 0; + //Start loop for cols of B to be processed in size of blk_width + for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row + { + ptr_l += 8; + //ptr_b += j; + //ptr_b_dup += 8; + ptr_b_dup += cs_b_offset[6]; + i1 += cs_b_offset[6]; + i3 += cs_l_offset[6]; + + i = 0; + i2 = 0; + for (r = 0; r < numCols_b; r += GEMM_BLK_V1) + { +#if GEMM_ACCUM_A + i = i1 + r; + //Read 8 cols of B columns of Block-to-be-solved + mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); +#endif + i = 0; + i2 = 0; + for (l = 0; l < j; l += 8) // move across m + { + //for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) + { + /////////////////// Partial Lower 8x8 block trsm of B + ptr_l_dup = ptr_l; + i4 = i2 + r; + //Read current 8 cols of B columns from specified 8x8 current-block of B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); + + //Broadcast A8,0 to A15,0 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + i4 = k >> 3; + ptr_l_dup += cs_l; + +#if GEMM_ACCUM_A + //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_mul_ps(mat_a_blk_elems[0], mat_b_col[0]); + mat_b_rearr[1] = _mm256_mul_ps(mat_a_blk_elems[1], mat_b_col[0]); + mat_b_rearr[2] = _mm256_mul_ps(mat_a_blk_elems[2], mat_b_col[0]); + mat_b_rearr[3] = _mm256_mul_ps(mat_a_blk_elems[3], mat_b_col[0]); + mat_b_rearr[4] = _mm256_mul_ps(mat_a_blk_elems[4], mat_b_col[0]); + mat_b_rearr[5] = _mm256_mul_ps(mat_a_blk_elems[5], mat_b_col[0]); + mat_b_rearr[6] = _mm256_mul_ps(mat_a_blk_elems[6], mat_b_col[0]); + mat_b_rearr[7] = _mm256_mul_ps(mat_a_blk_elems[7], mat_b_col[0]); +#endif + //Broadcast A21 to A71 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,2 to A15,2 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,3 to A15,3 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,4 to A15,4 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,5 to A15,5 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,6 to A15,6 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,7 to A15,7 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); + ptr_l_dup += cs_l; +#if GEMM_ACCUM_A + //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) +#endif + //end loop of cols + } + i2 += cs_b_offset[6]; + i += cs_l_offset[6]; + } + //trsm solve + + k = 0; + //for (i2 = 0; i2 < numCols_b; i2 += 8) + { + i2 = i1 + r; + /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A +#if !GEMM_ACCUM_A + //Read 8 cols of B columns of Block-to-be-solved + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i2); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i2)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i2)); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i2)); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i2)); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i2)); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i2)); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i2)); + + mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], alphaReg); + mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], alphaReg); + mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], alphaReg); + mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], alphaReg); + mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], alphaReg); + mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], alphaReg); + mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], alphaReg); + mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], alphaReg); +#endif + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + +#if GEMM_ACCUM_A + //(Row0): already done + +#else + mat_b_rearr[0] = _mm256_sub_ps(mat_b_col[0], mat_b_rearr[0]); +#endif + +#if GEMM_ACCUM_A + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[1] = _mm256_sub_ps(mat_b_col[1], mat_b_rearr[1]); + mat_b_rearr[2] = _mm256_sub_ps(mat_b_col[2], mat_b_rearr[2]); + mat_b_rearr[3] = _mm256_sub_ps(mat_b_col[3], mat_b_rearr[3]); + mat_b_rearr[4] = _mm256_sub_ps(mat_b_col[4], mat_b_rearr[4]); + mat_b_rearr[5] = _mm256_sub_ps(mat_b_col[5], mat_b_rearr[5]); + mat_b_rearr[6] = _mm256_sub_ps(mat_b_col[6], mat_b_rearr[6]); + mat_b_rearr[7] = _mm256_sub_ps(mat_b_col[7], mat_b_rearr[7]); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A21 to A71 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A76 to register + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup + r, mat_b_rearr[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)+r), mat_b_rearr[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + r), mat_b_rearr[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + r), mat_b_rearr[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + r), mat_b_rearr[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + r), mat_b_rearr[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + r), mat_b_rearr[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + r), mat_b_rearr[7]); + //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); + k++; + } + } + } //numRows of A + ///////////////////loop ends ///////////////////// +} +#else //rel 1.0 intrisic kernels (NOT OPT_CACHE_BLOCKING_L1) +static void trsm_XAtB_block_allSmallSizedMatrices(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) +{ + float ones = 1.0; + int i, i1, i2, i3, i4, j, k, l; + int cs_b_offset[7]; + int cs_l_offset[7]; + float *ptr_b_dup; + + //57 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[16][8]; + __m256 mat_a_cols_rearr[8]; + __m256 mat_a_blk_elems[64]; + __m256 mat_a_diag_inv[8]; + __m256 reciprocal_diags[2]; + + reciprocal_diags[0] = _mm256_broadcast_ss((float const *)(&ones)); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //L matrix offsets + cs_l_offset[0] = (cs_l << 1); + cs_l_offset[1] = cs_l + cs_l_offset[0]; + cs_l_offset[2] = (cs_l << 2); + cs_l_offset[3] = cs_l + cs_l_offset[2]; + cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; + cs_l_offset[5] = cs_l + cs_l_offset[4]; + cs_l_offset[6] = (cs_l_offset[5] + cs_l); + + //read diag elems of L 16x16 block + mat_a_cols_rearr[0] = _mm256_loadu_ps((float const *)ptr_l); + mat_a_cols_rearr[1] = _mm256_loadu_ps((float const *)ptr_l + cs_l); + mat_a_cols_rearr[2] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[0]); + mat_a_cols_rearr[3] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[1]); + mat_a_cols_rearr[4] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[2]); + mat_a_cols_rearr[5] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[3]); + mat_a_cols_rearr[6] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[4]); + mat_a_cols_rearr[7] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[5]); + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + cs_b_offset[6] = (cs_b_offset[5] + cs_b); + + reciprocal_diags[1] = reciprocal_diags[0]; + + //pack first 8 diags together + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[1], 0xAA);//diag 0,1 + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_cols_rearr[2], mat_a_cols_rearr[3], 0xAA);//diag 2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_cols_rearr[4], mat_a_cols_rearr[5], 0xAA);//diag 4,5 + mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_cols_rearr[6], mat_a_cols_rearr[7], 0xAA);//diag 6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 + + //reciprocal of diagnal elements 0,1,2,3,4,5,6,7 + reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); + + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_diag_inv[0], mat_a_diag_inv[0]); + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); + + + /***************** first set of 8 rows of B processing starts *****************/ + ptr_b_dup = ptr_b; + i = 0; + for (j = 0; j < numCols_b; j += 8) + { + /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A + //read 8x8 block of B into registers + mat_b_rearr[0][0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_col[0] = _mm256_mul_ps(mat_b_rearr[0][0], mat_a_diag_inv[0]); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[1][0]);//d = c - (a*b) + mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[2][0]);//d = c - (a*b) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_col[1] = _mm256_mul_ps(mat_b_rearr[1][0], mat_a_diag_inv[1]); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[2][0]);//d = c - (a*b) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_col[2] = _mm256_mul_ps(mat_b_rearr[2][0], mat_a_diag_inv[2]); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[2], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[2], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[2], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_col[3] = _mm256_mul_ps(mat_b_rearr[3][0], mat_a_diag_inv[3]); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[3], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[3], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[3], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[3], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_col[4] = _mm256_mul_ps(mat_b_rearr[4][0], mat_a_diag_inv[4]); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[4], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[4], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[4], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_col[5] = _mm256_mul_ps(mat_b_rearr[5][0], mat_a_diag_inv[5]); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[5], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[5], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_col[6] = _mm256_mul_ps(mat_b_rearr[6][0], mat_a_diag_inv[6]); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[6], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_col[7] = _mm256_mul_ps(mat_b_rearr[7][0], mat_a_diag_inv[7]); + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); + + //i += cs_b_offset[6]; + //ptr_b_dup += cs_b_offset[6]; + i += 8; + ptr_b_dup += 8; + } + + //c = 0; + /***************** first set of 8 cols of B processing done *****************/ + ptr_b_dup = ptr_b; + i3 = 0; + i1 = 0; + //Start loop for cols of B to be processed in size of blk_width + for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row + { + ptr_l += 8; + //ptr_b += j; + //ptr_b_dup += 8; + ptr_b_dup += cs_b_offset[6]; + i1 += cs_b_offset[6]; + + //Read next 8x8 block of A to get diag elements + i3 += cs_l_offset[6]; + mat_a_cols_rearr[0] = _mm256_loadu_ps((float const *)ptr_l + i3); + mat_a_cols_rearr[1] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l); + mat_a_cols_rearr[2] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[0]); + mat_a_cols_rearr[3] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[1]); + mat_a_cols_rearr[4] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[2]); + mat_a_cols_rearr[5] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[3]); + mat_a_cols_rearr[6] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[4]); + mat_a_cols_rearr[7] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[5]); + + //pack 8 diags of A together + reciprocal_diags[0] = reciprocal_diags[1]; + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[1], 0xAA);//diag 0,1 + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_cols_rearr[2], mat_a_cols_rearr[3], 0xAA);//diag 2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_cols_rearr[4], mat_a_cols_rearr[5], 0xAA);//diag 4,5 + mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_cols_rearr[6], mat_a_cols_rearr[7], 0xAA);//diag 6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 + + //reciprocal of diagnal elements of A :- 0,1,2,3,4,5,6,7 + reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); + + i = 0; + i2 = 0; + for (k = 0; k < numCols_b; k += 8) + { + i = i1 + k; + //Read 8 cols of B columns of Block-to-be-solved + mat_b_rearr[i2][0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[i2][1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[i2][2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[i2][3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[i2][4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[i2][5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[i2][6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[i2][7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + i2++; + } + + i = 0; + i2 = 0; + for (l = 0; l < j; l += 8) // move across m + { + //Broadcast A8,0 to A15,0 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 1)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 2)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 3)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 4)); + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 5)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 6)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 7)); + + //Broadcast A8,2 to A15,2 to registers + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 1)); + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 2)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 3)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 4)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 5)); + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 6)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 7)); + + //Broadcast A8,3 to A15,3 to registers + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i)); + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 1)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 2)); + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 3)); + mat_a_blk_elems[28] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 4)); + mat_a_blk_elems[29] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 5)); + mat_a_blk_elems[30] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 6)); + mat_a_blk_elems[31] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 7)); + + // _mm256_permute2f128_ps() + + //Broadcast A8,4 to A15,4 to registers + mat_a_blk_elems[32] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i)); + mat_a_blk_elems[33] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 1)); + mat_a_blk_elems[34] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 2)); + mat_a_blk_elems[35] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 3)); + mat_a_blk_elems[36] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 4)); + mat_a_blk_elems[37] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 5)); + mat_a_blk_elems[38] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 6)); + mat_a_blk_elems[39] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 7)); + + //Broadcast A8,5 to A15,5 to registers + mat_a_blk_elems[40] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i)); + mat_a_blk_elems[41] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 1)); + mat_a_blk_elems[42] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 2)); + mat_a_blk_elems[43] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 3)); + mat_a_blk_elems[44] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 4)); + mat_a_blk_elems[45] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 5)); + mat_a_blk_elems[46] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 6)); + mat_a_blk_elems[47] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 7)); + + //Broadcast A8,6 to A15,6 to registers + mat_a_blk_elems[48] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i)); + mat_a_blk_elems[49] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 1)); + mat_a_blk_elems[50] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 2)); + mat_a_blk_elems[51] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 3)); + mat_a_blk_elems[52] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 4)); + mat_a_blk_elems[53] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 5)); + mat_a_blk_elems[54] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 6)); + mat_a_blk_elems[55] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 7)); + + //Broadcast A8,7 to A15,7 to registers + mat_a_blk_elems[56] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i)); + mat_a_blk_elems[57] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 1)); + mat_a_blk_elems[58] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 2)); + mat_a_blk_elems[59] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 3)); + mat_a_blk_elems[60] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 4)); + mat_a_blk_elems[61] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 5)); + mat_a_blk_elems[62] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 6)); + mat_a_blk_elems[63] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 7)); + + i += cs_l_offset[6]; + + + for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) + { + /////////////////// Partial Lower 8x8 block trsm of B + + i4 = i2 + k; + //Read current 8 cols of B columns from specified 8x8 current-block of B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); + + i4 = k >> 3; + + //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[1], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[1], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[1], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[2], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[2], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[2], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[2], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[2], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[2], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[3], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[3], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[3], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[3], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[28], mat_b_col[3], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[29], mat_b_col[3], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[30], mat_b_col[3], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[31], mat_b_col[3], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[32], mat_b_col[4], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[33], mat_b_col[4], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[34], mat_b_col[4], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[35], mat_b_col[4], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[36], mat_b_col[4], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[37], mat_b_col[4], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[38], mat_b_col[4], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[39], mat_b_col[4], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[40], mat_b_col[5], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[41], mat_b_col[5], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[42], mat_b_col[5], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[43], mat_b_col[5], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[44], mat_b_col[5], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[45], mat_b_col[5], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[46], mat_b_col[5], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[47], mat_b_col[5], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[48], mat_b_col[6], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[49], mat_b_col[6], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[50], mat_b_col[6], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[51], mat_b_col[6], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[52], mat_b_col[6], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[53], mat_b_col[6], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[54], mat_b_col[6], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[55], mat_b_col[6], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[56], mat_b_col[7], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[57], mat_b_col[7], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[58], mat_b_col[7], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[59], mat_b_col[7], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[60], mat_b_col[7], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[61], mat_b_col[7], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[62], mat_b_col[7], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[63], mat_b_col[7], mat_b_rearr[i4][7]);//d = c - (a*b) + + //end loop of cols + } + i2 += cs_b_offset[6]; + } + + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //mat_a_diag_inv2[0] = _mm256_unpacklo_ps(mat_a_diag_inv2[0], mat_a_diag_inv2[0]); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); + + k = 0; + for (i = 0; i < numCols_b; i+=8) + { + /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[k][0] = _mm256_mul_ps(mat_b_rearr[k][0], mat_a_diag_inv[0]); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[k][1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[k][0], mat_b_rearr[k][1]);//d = c - (a*b) + mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[k][0], mat_b_rearr[k][2]);//d = c - (a*b) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[k][0], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[k][0], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[k][0], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[k][0], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[k][0], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[k][1] = _mm256_mul_ps(mat_b_rearr[k][1], mat_a_diag_inv[1]); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_rearr[k][1], mat_b_rearr[k][2]);//d = c - (a*b) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_rearr[k][1], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_rearr[k][1], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_rearr[k][1], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_rearr[k][1], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_rearr[k][1], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[k][2] = _mm256_mul_ps(mat_b_rearr[k][2], mat_a_diag_inv[2]); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_rearr[k][2], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_rearr[k][2], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_rearr[k][2], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_rearr[k][2], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_rearr[k][2], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[k][3] = _mm256_mul_ps(mat_b_rearr[k][3], mat_a_diag_inv[3]); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_rearr[k][3], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_rearr[k][3], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_rearr[k][3], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_rearr[k][3], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_rearr[k][4] = _mm256_mul_ps(mat_b_rearr[k][4], mat_a_diag_inv[4]); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_rearr[k][4], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_rearr[k][4], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_rearr[k][4], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_rearr[k][5] = _mm256_mul_ps(mat_b_rearr[k][5], mat_a_diag_inv[5]); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_rearr[k][5], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_rearr[k][5], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_rearr[k][6] = _mm256_mul_ps(mat_b_rearr[k][6], mat_a_diag_inv[6]); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_rearr[k][6], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_rearr[k][7] = _mm256_mul_ps(mat_b_rearr[k][7], mat_a_diag_inv[7]); + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + + _mm256_storeu_ps((float *)ptr_b_dup + i, mat_b_rearr[k][0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b) + i), mat_b_rearr[k][1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i), mat_b_rearr[k][2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i), mat_b_rearr[k][3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i), mat_b_rearr[k][4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i), mat_b_rearr[k][5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i), mat_b_rearr[k][6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i), mat_b_rearr[k][7]); + //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); + k++; + } + + + } + ///////////////////loop ends ///////////////////// +} + +static void trsm_XAtB_block_allSmallSizedMatrices_alpha(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alpha) +{ + float ones = 1.0; + int i, i1, i2, i3, i4, j, k, l; + int cs_b_offset[7]; + int cs_l_offset[7]; + float *ptr_b_dup; + + //57 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[16][8]; + __m256 mat_a_cols_rearr[8]; + __m256 mat_a_blk_elems[64]; + __m256 mat_a_diag_inv[8]; + __m256 reciprocal_diags[2]; + __m256 alphaReg; + + reciprocal_diags[0] = _mm256_broadcast_ss((float const *)(&ones)); + alphaReg = _mm256_broadcast_ss((float const *)&alpha); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //L matrix offsets + cs_l_offset[0] = (cs_l << 1); + cs_l_offset[1] = cs_l + cs_l_offset[0]; + cs_l_offset[2] = (cs_l << 2); + cs_l_offset[3] = cs_l + cs_l_offset[2]; + cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; + cs_l_offset[5] = cs_l + cs_l_offset[4]; + cs_l_offset[6] = (cs_l_offset[5] + cs_l); + + //read diag elems of L 16x16 block + mat_a_cols_rearr[0] = _mm256_loadu_ps((float const *)ptr_l); + mat_a_cols_rearr[1] = _mm256_loadu_ps((float const *)ptr_l + cs_l); + mat_a_cols_rearr[2] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[0]); + mat_a_cols_rearr[3] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[1]); + mat_a_cols_rearr[4] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[2]); + mat_a_cols_rearr[5] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[3]); + mat_a_cols_rearr[6] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[4]); + mat_a_cols_rearr[7] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[5]); + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + cs_b_offset[6] = (cs_b_offset[5] + cs_b); + + reciprocal_diags[1] = reciprocal_diags[0]; + + //pack first 8 diags together + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[1], 0xAA);//diag 0,1 + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_cols_rearr[2], mat_a_cols_rearr[3], 0xAA);//diag 2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_cols_rearr[4], mat_a_cols_rearr[5], 0xAA);//diag 4,5 + mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_cols_rearr[6], mat_a_cols_rearr[7], 0xAA);//diag 6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 + + //reciprocal of diagnal elements 0,1,2,3,4,5,6,7 + reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); + + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_diag_inv[0], mat_a_diag_inv[0]); + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); + + + /***************** first set of 8 rows of B processing starts *****************/ + ptr_b_dup = ptr_b; + i = 0; + for (j = 0; j < numCols_b; j += 8) + { + /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A + //read 8x8 block of B into registers + mat_b_rearr[0][0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + mat_b_rearr[0][0] = _mm256_mul_ps(mat_b_rearr[0][0], alphaReg); + mat_b_rearr[1][0] = _mm256_mul_ps(mat_b_rearr[1][0], alphaReg); + mat_b_rearr[2][0] = _mm256_mul_ps(mat_b_rearr[2][0], alphaReg); + mat_b_rearr[3][0] = _mm256_mul_ps(mat_b_rearr[3][0], alphaReg); + mat_b_rearr[4][0] = _mm256_mul_ps(mat_b_rearr[4][0], alphaReg); + mat_b_rearr[5][0] = _mm256_mul_ps(mat_b_rearr[5][0], alphaReg); + mat_b_rearr[6][0] = _mm256_mul_ps(mat_b_rearr[6][0], alphaReg); + mat_b_rearr[7][0] = _mm256_mul_ps(mat_b_rearr[7][0], alphaReg); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_col[0] = _mm256_mul_ps(mat_b_rearr[0][0], mat_a_diag_inv[0]); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[1][0]);//d = c - (a*b) + mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[2][0]);//d = c - (a*b) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_col[1] = _mm256_mul_ps(mat_b_rearr[1][0], mat_a_diag_inv[1]); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[2][0]);//d = c - (a*b) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_col[2] = _mm256_mul_ps(mat_b_rearr[2][0], mat_a_diag_inv[2]); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[2], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[2], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[2], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_col[3] = _mm256_mul_ps(mat_b_rearr[3][0], mat_a_diag_inv[3]); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[3], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[3], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[3], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[3], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_col[4] = _mm256_mul_ps(mat_b_rearr[4][0], mat_a_diag_inv[4]); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[4], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[4], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[4], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_col[5] = _mm256_mul_ps(mat_b_rearr[5][0], mat_a_diag_inv[5]); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[5], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[5], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_col[6] = _mm256_mul_ps(mat_b_rearr[6][0], mat_a_diag_inv[6]); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[6], mat_b_rearr[7][0]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_col[7] = _mm256_mul_ps(mat_b_rearr[7][0], mat_a_diag_inv[7]); + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); + + //i += cs_b_offset[6]; + //ptr_b_dup += cs_b_offset[6]; + i += 8; + ptr_b_dup += 8; + } + + //c = 0; + /***************** first set of 8 cols of B processing done *****************/ + ptr_b_dup = ptr_b; + i3 = 0; + i1 = 0; + //Start loop for cols of B to be processed in size of blk_width + for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row + { + ptr_l += 8; + //ptr_b += j; + //ptr_b_dup += 8; + ptr_b_dup += cs_b_offset[6]; + i1 += cs_b_offset[6]; + + //Read next 8x8 block of A to get diag elements + i3 += cs_l_offset[6]; + mat_a_cols_rearr[0] = _mm256_loadu_ps((float const *)ptr_l + i3); + mat_a_cols_rearr[1] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l); + mat_a_cols_rearr[2] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[0]); + mat_a_cols_rearr[3] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[1]); + mat_a_cols_rearr[4] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[2]); + mat_a_cols_rearr[5] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[3]); + mat_a_cols_rearr[6] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[4]); + mat_a_cols_rearr[7] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[5]); + + //pack 8 diags of A together + reciprocal_diags[0] = reciprocal_diags[1]; + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[1], 0xAA);//diag 0,1 + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_cols_rearr[2], mat_a_cols_rearr[3], 0xAA);//diag 2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_cols_rearr[4], mat_a_cols_rearr[5], 0xAA);//diag 4,5 + mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_cols_rearr[6], mat_a_cols_rearr[7], 0xAA);//diag 6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 + + //reciprocal of diagnal elements of A :- 0,1,2,3,4,5,6,7 + reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); + + i = 0; + i2 = 0; + for (k = 0; k < numCols_b; k += 8) + { + i = i1 + k; + //Read 8 cols of B columns of Block-to-be-solved + mat_b_rearr[i2][0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[i2][1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[i2][2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[i2][3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[i2][4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[i2][5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[i2][6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[i2][7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + mat_b_rearr[i2][0] = _mm256_mul_ps(mat_b_rearr[i2][0], alphaReg); + mat_b_rearr[i2][1] = _mm256_mul_ps(mat_b_rearr[i2][1], alphaReg); + mat_b_rearr[i2][2] = _mm256_mul_ps(mat_b_rearr[i2][2], alphaReg); + mat_b_rearr[i2][3] = _mm256_mul_ps(mat_b_rearr[i2][3], alphaReg); + mat_b_rearr[i2][4] = _mm256_mul_ps(mat_b_rearr[i2][4], alphaReg); + mat_b_rearr[i2][5] = _mm256_mul_ps(mat_b_rearr[i2][5], alphaReg); + mat_b_rearr[i2][6] = _mm256_mul_ps(mat_b_rearr[i2][6], alphaReg); + mat_b_rearr[i2][7] = _mm256_mul_ps(mat_b_rearr[i2][7], alphaReg); + + i2++; + } + + i = 0; + i2 = 0; + for (l = 0; l < j; l += 8) // move across m + { + //Broadcast A8,0 to A15,0 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 1)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 2)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 3)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 4)); + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 5)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 6)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 7)); + + //Broadcast A8,2 to A15,2 to registers + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 1)); + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 2)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 3)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 4)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 5)); + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 6)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 7)); + + //Broadcast A8,3 to A15,3 to registers + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i)); + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 1)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 2)); + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 3)); + mat_a_blk_elems[28] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 4)); + mat_a_blk_elems[29] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 5)); + mat_a_blk_elems[30] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 6)); + mat_a_blk_elems[31] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 7)); + + // _mm256_permute2f128_ps() + + //Broadcast A8,4 to A15,4 to registers + mat_a_blk_elems[32] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i)); + mat_a_blk_elems[33] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 1)); + mat_a_blk_elems[34] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 2)); + mat_a_blk_elems[35] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 3)); + mat_a_blk_elems[36] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 4)); + mat_a_blk_elems[37] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 5)); + mat_a_blk_elems[38] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 6)); + mat_a_blk_elems[39] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 7)); + + //Broadcast A8,5 to A15,5 to registers + mat_a_blk_elems[40] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i)); + mat_a_blk_elems[41] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 1)); + mat_a_blk_elems[42] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 2)); + mat_a_blk_elems[43] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 3)); + mat_a_blk_elems[44] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 4)); + mat_a_blk_elems[45] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 5)); + mat_a_blk_elems[46] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 6)); + mat_a_blk_elems[47] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 7)); + + //Broadcast A8,6 to A15,6 to registers + mat_a_blk_elems[48] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i)); + mat_a_blk_elems[49] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 1)); + mat_a_blk_elems[50] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 2)); + mat_a_blk_elems[51] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 3)); + mat_a_blk_elems[52] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 4)); + mat_a_blk_elems[53] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 5)); + mat_a_blk_elems[54] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 6)); + mat_a_blk_elems[55] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 7)); + + //Broadcast A8,7 to A15,7 to registers + mat_a_blk_elems[56] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i)); + mat_a_blk_elems[57] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 1)); + mat_a_blk_elems[58] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 2)); + mat_a_blk_elems[59] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 3)); + mat_a_blk_elems[60] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 4)); + mat_a_blk_elems[61] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 5)); + mat_a_blk_elems[62] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 6)); + mat_a_blk_elems[63] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 7)); + + i += cs_l_offset[6]; + + + for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) + { + /////////////////// Partial Lower 8x8 block trsm of B + + i4 = i2 + k; + //Read current 8 cols of B columns from specified 8x8 current-block of B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); + + i4 = k >> 3; + + //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[1], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[1], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[1], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[2], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[2], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[2], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[2], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[2], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[2], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[3], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[3], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[3], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[3], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[28], mat_b_col[3], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[29], mat_b_col[3], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[30], mat_b_col[3], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[31], mat_b_col[3], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[32], mat_b_col[4], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[33], mat_b_col[4], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[34], mat_b_col[4], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[35], mat_b_col[4], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[36], mat_b_col[4], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[37], mat_b_col[4], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[38], mat_b_col[4], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[39], mat_b_col[4], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[40], mat_b_col[5], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[41], mat_b_col[5], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[42], mat_b_col[5], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[43], mat_b_col[5], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[44], mat_b_col[5], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[45], mat_b_col[5], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[46], mat_b_col[5], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[47], mat_b_col[5], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[48], mat_b_col[6], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[49], mat_b_col[6], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[50], mat_b_col[6], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[51], mat_b_col[6], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[52], mat_b_col[6], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[53], mat_b_col[6], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[54], mat_b_col[6], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[55], mat_b_col[6], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[56], mat_b_col[7], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[57], mat_b_col[7], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[58], mat_b_col[7], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[59], mat_b_col[7], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[60], mat_b_col[7], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[61], mat_b_col[7], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[62], mat_b_col[7], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[63], mat_b_col[7], mat_b_rearr[i4][7]);//d = c - (a*b) + + //end loop of cols + } + i2 += cs_b_offset[6]; + } + + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //mat_a_diag_inv2[0] = _mm256_unpacklo_ps(mat_a_diag_inv2[0], mat_a_diag_inv2[0]); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); + + k = 0; + for (i = 0; i < numCols_b; i+=8) + { + /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[k][0] = _mm256_mul_ps(mat_b_rearr[k][0], mat_a_diag_inv[0]); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[k][1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[k][0], mat_b_rearr[k][1]);//d = c - (a*b) + mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[k][0], mat_b_rearr[k][2]);//d = c - (a*b) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[k][0], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[k][0], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[k][0], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[k][0], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[k][0], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[k][1] = _mm256_mul_ps(mat_b_rearr[k][1], mat_a_diag_inv[1]); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_rearr[k][1], mat_b_rearr[k][2]);//d = c - (a*b) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_rearr[k][1], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_rearr[k][1], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_rearr[k][1], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_rearr[k][1], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_rearr[k][1], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[k][2] = _mm256_mul_ps(mat_b_rearr[k][2], mat_a_diag_inv[2]); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_rearr[k][2], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_rearr[k][2], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_rearr[k][2], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_rearr[k][2], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_rearr[k][2], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[k][3] = _mm256_mul_ps(mat_b_rearr[k][3], mat_a_diag_inv[3]); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_rearr[k][3], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_rearr[k][3], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_rearr[k][3], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_rearr[k][3], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_rearr[k][4] = _mm256_mul_ps(mat_b_rearr[k][4], mat_a_diag_inv[4]); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_rearr[k][4], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_rearr[k][4], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_rearr[k][4], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_rearr[k][5] = _mm256_mul_ps(mat_b_rearr[k][5], mat_a_diag_inv[5]); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_rearr[k][5], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_rearr[k][5], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_rearr[k][6] = _mm256_mul_ps(mat_b_rearr[k][6], mat_a_diag_inv[6]); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_rearr[k][6], mat_b_rearr[k][7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_rearr[k][7] = _mm256_mul_ps(mat_b_rearr[k][7], mat_a_diag_inv[7]); + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + + _mm256_storeu_ps((float *)ptr_b_dup + i, mat_b_rearr[k][0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b) + i), mat_b_rearr[k][1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i), mat_b_rearr[k][2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i), mat_b_rearr[k][3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i), mat_b_rearr[k][4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i), mat_b_rearr[k][5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i), mat_b_rearr[k][6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i), mat_b_rearr[k][7]); + k++; + } + + + } + ///////////////////loop ends ///////////////////// +} + +static void trsm_XAtB_block_allSmallSizedMatrices_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) +{ + //float ones = 1.0; + int i, i1, i2, i3, i4, j, k, l; + int cs_b_offset[7]; + int cs_l_offset[7]; + float *ptr_b_dup; + + //57 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[16][8]; + //__m256 mat_a_cols_rearr[8]; + __m256 mat_a_blk_elems[64]; + //__m256 mat_a_diag_inv[8]; + //__m256 reciprocal_diags[2]; + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //L matrix offsets + cs_l_offset[0] = (cs_l << 1); + cs_l_offset[1] = cs_l + cs_l_offset[0]; + cs_l_offset[2] = (cs_l << 2); + cs_l_offset[3] = cs_l + cs_l_offset[2]; + cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; + cs_l_offset[5] = cs_l + cs_l_offset[4]; + cs_l_offset[6] = (cs_l_offset[5] + cs_l); + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + cs_b_offset[6] = (cs_b_offset[5] + cs_b); + + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); + + + /***************** first set of 8 rows of B processing starts *****************/ + ptr_b_dup = ptr_b; + i = 0; + for (j = 0; j < numCols_b; j += 8) + { + /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A + //read 8x8 block of B into registers + mat_b_rearr[0][0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + //(Row0) + mat_b_col[0] = mat_b_rearr[0][0]; + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[1][0]);//d = c - (a*b) + mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[2][0]);//d = c - (a*b) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[2][0]);//d = c - (a*b) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[2], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[2], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[2], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[3], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[3], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[3], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[3], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[4], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[4], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[4], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[5], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[5], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[6], mat_b_rearr[7][0]);//d = c - (a*b) + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); + + //i += cs_b_offset[6]; + //ptr_b_dup += cs_b_offset[6]; + i += 8; + ptr_b_dup += 8; + } + + //c = 0; + /***************** first set of 8 cols of B processing done *****************/ + ptr_b_dup = ptr_b; + i3 = 0; + i1 = 0; + //Start loop for cols of B to be processed in size of blk_width + for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row + { + ptr_l += 8; + //ptr_b += j; + //ptr_b_dup += 8; + ptr_b_dup += cs_b_offset[6]; + i1 += cs_b_offset[6]; + i3 += cs_l_offset[6]; + + i = 0; + i2 = 0; + for (k = 0; k < numCols_b; k += 8) + { + i = i1 + k; + //Read 8 cols of B columns of Block-to-be-solved + mat_b_rearr[i2][0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[i2][1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[i2][2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[i2][3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[i2][4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[i2][5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[i2][6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[i2][7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + i2++; + } + + i = 0; + i2 = 0; + for (l = 0; l < j; l += 8) // move across m + { + //Broadcast A8,0 to A15,0 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 1)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 2)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 3)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 4)); + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 5)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 6)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 7)); + + //Broadcast A8,2 to A15,2 to registers + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 1)); + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 2)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 3)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 4)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 5)); + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 6)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 7)); + + //Broadcast A8,3 to A15,3 to registers + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i)); + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 1)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 2)); + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 3)); + mat_a_blk_elems[28] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 4)); + mat_a_blk_elems[29] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 5)); + mat_a_blk_elems[30] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 6)); + mat_a_blk_elems[31] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 7)); + + // _mm256_permute2f128_ps() + + //Broadcast A8,4 to A15,4 to registers + mat_a_blk_elems[32] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i)); + mat_a_blk_elems[33] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 1)); + mat_a_blk_elems[34] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 2)); + mat_a_blk_elems[35] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 3)); + mat_a_blk_elems[36] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 4)); + mat_a_blk_elems[37] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 5)); + mat_a_blk_elems[38] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 6)); + mat_a_blk_elems[39] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 7)); + + //Broadcast A8,5 to A15,5 to registers + mat_a_blk_elems[40] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i)); + mat_a_blk_elems[41] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 1)); + mat_a_blk_elems[42] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 2)); + mat_a_blk_elems[43] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 3)); + mat_a_blk_elems[44] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 4)); + mat_a_blk_elems[45] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 5)); + mat_a_blk_elems[46] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 6)); + mat_a_blk_elems[47] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 7)); + + //Broadcast A8,6 to A15,6 to registers + mat_a_blk_elems[48] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i)); + mat_a_blk_elems[49] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 1)); + mat_a_blk_elems[50] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 2)); + mat_a_blk_elems[51] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 3)); + mat_a_blk_elems[52] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 4)); + mat_a_blk_elems[53] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 5)); + mat_a_blk_elems[54] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 6)); + mat_a_blk_elems[55] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 7)); + + //Broadcast A8,7 to A15,7 to registers + mat_a_blk_elems[56] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i)); + mat_a_blk_elems[57] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 1)); + mat_a_blk_elems[58] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 2)); + mat_a_blk_elems[59] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 3)); + mat_a_blk_elems[60] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 4)); + mat_a_blk_elems[61] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 5)); + mat_a_blk_elems[62] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 6)); + mat_a_blk_elems[63] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 7)); + + i += cs_l_offset[6]; + + for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) + { + /////////////////// Partial Lower 8x8 block trsm of B + + i4 = i2 + k; + //Read current 8 cols of B columns from specified 8x8 current-block of B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); + + i4 = k >> 3; + + //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[1], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[1], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[1], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[2], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[2], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[2], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[2], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[2], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[2], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[3], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[3], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[3], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[3], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[28], mat_b_col[3], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[29], mat_b_col[3], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[30], mat_b_col[3], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[31], mat_b_col[3], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[32], mat_b_col[4], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[33], mat_b_col[4], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[34], mat_b_col[4], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[35], mat_b_col[4], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[36], mat_b_col[4], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[37], mat_b_col[4], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[38], mat_b_col[4], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[39], mat_b_col[4], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[40], mat_b_col[5], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[41], mat_b_col[5], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[42], mat_b_col[5], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[43], mat_b_col[5], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[44], mat_b_col[5], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[45], mat_b_col[5], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[46], mat_b_col[5], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[47], mat_b_col[5], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[48], mat_b_col[6], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[49], mat_b_col[6], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[50], mat_b_col[6], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[51], mat_b_col[6], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[52], mat_b_col[6], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[53], mat_b_col[6], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[54], mat_b_col[6], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[55], mat_b_col[6], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[56], mat_b_col[7], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[57], mat_b_col[7], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[58], mat_b_col[7], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[59], mat_b_col[7], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[60], mat_b_col[7], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[61], mat_b_col[7], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[62], mat_b_col[7], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[63], mat_b_col[7], mat_b_rearr[i4][7]);//d = c - (a*b) + + //end loop of cols + } + i2 += cs_b_offset[6]; + } + + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + + k = 0; + for (i = 0; i < numCols_b; i+=8) + { + /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A + + //(Row0): already done + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[k][1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[k][0], mat_b_rearr[k][1]);//d = c - (a*b) + mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[k][0], mat_b_rearr[k][2]);//d = c - (a*b) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[k][0], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[k][0], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[k][0], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[k][0], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[k][0], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_rearr[k][1], mat_b_rearr[k][2]);//d = c - (a*b) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_rearr[k][1], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_rearr[k][1], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_rearr[k][1], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_rearr[k][1], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_rearr[k][1], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_rearr[k][2], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_rearr[k][2], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_rearr[k][2], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_rearr[k][2], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_rearr[k][2], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_rearr[k][3], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_rearr[k][3], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_rearr[k][3], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_rearr[k][3], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_rearr[k][4], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_rearr[k][4], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_rearr[k][4], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_rearr[k][5], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_rearr[k][5], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_rearr[k][6], mat_b_rearr[k][7]);//d = c - (a*b) + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + + _mm256_storeu_ps((float *)ptr_b_dup + i, mat_b_rearr[k][0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b) + i), mat_b_rearr[k][1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i), mat_b_rearr[k][2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i), mat_b_rearr[k][3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i), mat_b_rearr[k][4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i), mat_b_rearr[k][5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i), mat_b_rearr[k][6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i), mat_b_rearr[k][7]); + //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); + k++; + } + + + } + ///////////////////loop ends ///////////////////// +} + +static void trsm_XAtB_block_allSmallSizedMatrices_alpha_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alpha) +{ + //float ones = 1.0; + int i, i1, i2, i3, i4, j, k, l; + int cs_b_offset[7]; + int cs_l_offset[7]; + float *ptr_b_dup; + + //57 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[16][8]; + //__m256 mat_a_cols_rearr[8]; + __m256 mat_a_blk_elems[64]; + //__m256 mat_a_diag_inv[8]; + //__m256 reciprocal_diags[2]; + __m256 alphaReg; + alphaReg = _mm256_broadcast_ss((float const *)&alpha); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //L matrix offsets + cs_l_offset[0] = (cs_l << 1); + cs_l_offset[1] = cs_l + cs_l_offset[0]; + cs_l_offset[2] = (cs_l << 2); + cs_l_offset[3] = cs_l + cs_l_offset[2]; + cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; + cs_l_offset[5] = cs_l + cs_l_offset[4]; + cs_l_offset[6] = (cs_l_offset[5] + cs_l); + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + cs_b_offset[6] = (cs_b_offset[5] + cs_b); + + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); + + + /***************** first set of 8 rows of B processing starts *****************/ + ptr_b_dup = ptr_b; + i = 0; + for (j = 0; j < numCols_b; j += 8) + { + /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A + //read 8x8 block of B into registers + mat_b_rearr[0][0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + mat_b_rearr[0][0] = _mm256_mul_ps(mat_b_rearr[0][0], alphaReg); + mat_b_rearr[1][0] = _mm256_mul_ps(mat_b_rearr[1][0], alphaReg); + mat_b_rearr[2][0] = _mm256_mul_ps(mat_b_rearr[2][0], alphaReg); + mat_b_rearr[3][0] = _mm256_mul_ps(mat_b_rearr[3][0], alphaReg); + mat_b_rearr[4][0] = _mm256_mul_ps(mat_b_rearr[4][0], alphaReg); + mat_b_rearr[5][0] = _mm256_mul_ps(mat_b_rearr[5][0], alphaReg); + mat_b_rearr[6][0] = _mm256_mul_ps(mat_b_rearr[6][0], alphaReg); + mat_b_rearr[7][0] = _mm256_mul_ps(mat_b_rearr[7][0], alphaReg); + + //(Row0) + mat_b_col[0] = mat_b_rearr[0][0]; + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[1][0]);//d = c - (a*b) + mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[2][0]);//d = c - (a*b) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[2][0]);//d = c - (a*b) + mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[2], mat_b_rearr[3][0]);//d = c - (a*b) + mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[2], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[2], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[3], mat_b_rearr[4][0]);//d = c - (a*b) + mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[3], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[3], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[3], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[4], mat_b_rearr[5][0]);//d = c - (a*b) + mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[4], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[4], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[5], mat_b_rearr[6][0]);//d = c - (a*b) + mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[5], mat_b_rearr[7][0]);//d = c - (a*b) + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[6], mat_b_rearr[7][0]);//d = c - (a*b) + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); + + //i += cs_b_offset[6]; + //ptr_b_dup += cs_b_offset[6]; + i += 8; + ptr_b_dup += 8; + } + + //c = 0; + /***************** first set of 8 cols of B processing done *****************/ + ptr_b_dup = ptr_b; + i3 = 0; + i1 = 0; + //Start loop for cols of B to be processed in size of blk_width + for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row + { + ptr_l += 8; + //ptr_b += j; + //ptr_b_dup += 8; + ptr_b_dup += cs_b_offset[6]; + i1 += cs_b_offset[6]; + i3 += cs_l_offset[6]; + + i = 0; + i2 = 0; + for (k = 0; k < numCols_b; k += 8) + { + i = i1 + k; + //Read 8 cols of B columns of Block-to-be-solved + mat_b_rearr[i2][0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[i2][1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[i2][2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[i2][3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[i2][4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[i2][5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[i2][6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[i2][7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + mat_b_rearr[i2][0] = _mm256_mul_ps(mat_b_rearr[i2][0], alphaReg); + mat_b_rearr[i2][1] = _mm256_mul_ps(mat_b_rearr[i2][1], alphaReg); + mat_b_rearr[i2][2] = _mm256_mul_ps(mat_b_rearr[i2][2], alphaReg); + mat_b_rearr[i2][3] = _mm256_mul_ps(mat_b_rearr[i2][3], alphaReg); + mat_b_rearr[i2][4] = _mm256_mul_ps(mat_b_rearr[i2][4], alphaReg); + mat_b_rearr[i2][5] = _mm256_mul_ps(mat_b_rearr[i2][5], alphaReg); + mat_b_rearr[i2][6] = _mm256_mul_ps(mat_b_rearr[i2][6], alphaReg); + mat_b_rearr[i2][7] = _mm256_mul_ps(mat_b_rearr[i2][7], alphaReg); + + i2++; + } + + i = 0; + i2 = 0; + for (l = 0; l < j; l += 8) // move across m + { + //Broadcast A8,0 to A15,0 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 1)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 2)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 3)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 4)); + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 5)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 6)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 7)); + + //Broadcast A8,2 to A15,2 to registers + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 1)); + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 2)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 3)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 4)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 5)); + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 6)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 7)); + + //Broadcast A8,3 to A15,3 to registers + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i)); + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 1)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 2)); + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 3)); + mat_a_blk_elems[28] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 4)); + mat_a_blk_elems[29] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 5)); + mat_a_blk_elems[30] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 6)); + mat_a_blk_elems[31] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 7)); + + // _mm256_permute2f128_ps() + + //Broadcast A8,4 to A15,4 to registers + mat_a_blk_elems[32] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i)); + mat_a_blk_elems[33] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 1)); + mat_a_blk_elems[34] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 2)); + mat_a_blk_elems[35] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 3)); + mat_a_blk_elems[36] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 4)); + mat_a_blk_elems[37] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 5)); + mat_a_blk_elems[38] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 6)); + mat_a_blk_elems[39] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 7)); + + //Broadcast A8,5 to A15,5 to registers + mat_a_blk_elems[40] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i)); + mat_a_blk_elems[41] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 1)); + mat_a_blk_elems[42] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 2)); + mat_a_blk_elems[43] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 3)); + mat_a_blk_elems[44] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 4)); + mat_a_blk_elems[45] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 5)); + mat_a_blk_elems[46] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 6)); + mat_a_blk_elems[47] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 7)); + + //Broadcast A8,6 to A15,6 to registers + mat_a_blk_elems[48] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i)); + mat_a_blk_elems[49] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 1)); + mat_a_blk_elems[50] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 2)); + mat_a_blk_elems[51] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 3)); + mat_a_blk_elems[52] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 4)); + mat_a_blk_elems[53] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 5)); + mat_a_blk_elems[54] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 6)); + mat_a_blk_elems[55] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 7)); + + //Broadcast A8,7 to A15,7 to registers + mat_a_blk_elems[56] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i)); + mat_a_blk_elems[57] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 1)); + mat_a_blk_elems[58] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 2)); + mat_a_blk_elems[59] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 3)); + mat_a_blk_elems[60] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 4)); + mat_a_blk_elems[61] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 5)); + mat_a_blk_elems[62] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 6)); + mat_a_blk_elems[63] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 7)); + + i += cs_l_offset[6]; + + for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) + { + /////////////////// Partial Lower 8x8 block trsm of B + + i4 = i2 + k; + //Read current 8 cols of B columns from specified 8x8 current-block of B + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); + + i4 = k >> 3; + + //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[1], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[1], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[1], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[2], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[2], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[2], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[2], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[2], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[2], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[3], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[3], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[3], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[3], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[28], mat_b_col[3], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[29], mat_b_col[3], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[30], mat_b_col[3], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[31], mat_b_col[3], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[32], mat_b_col[4], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[33], mat_b_col[4], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[34], mat_b_col[4], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[35], mat_b_col[4], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[36], mat_b_col[4], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[37], mat_b_col[4], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[38], mat_b_col[4], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[39], mat_b_col[4], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[40], mat_b_col[5], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[41], mat_b_col[5], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[42], mat_b_col[5], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[43], mat_b_col[5], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[44], mat_b_col[5], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[45], mat_b_col[5], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[46], mat_b_col[5], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[47], mat_b_col[5], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[48], mat_b_col[6], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[49], mat_b_col[6], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[50], mat_b_col[6], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[51], mat_b_col[6], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[52], mat_b_col[6], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[53], mat_b_col[6], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[54], mat_b_col[6], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[55], mat_b_col[6], mat_b_rearr[i4][7]);//d = c - (a*b) + + //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[56], mat_b_col[7], mat_b_rearr[i4][0]);//d = c - (a*b) + mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[57], mat_b_col[7], mat_b_rearr[i4][1]);//d = c - (a*b) + mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[58], mat_b_col[7], mat_b_rearr[i4][2]);//d = c - (a*b) + mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[59], mat_b_col[7], mat_b_rearr[i4][3]);//d = c - (a*b) + mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[60], mat_b_col[7], mat_b_rearr[i4][4]);//d = c - (a*b) + mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[61], mat_b_col[7], mat_b_rearr[i4][5]);//d = c - (a*b) + mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[62], mat_b_col[7], mat_b_rearr[i4][6]);//d = c - (a*b) + mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[63], mat_b_col[7], mat_b_rearr[i4][7]);//d = c - (a*b) + + //end loop of cols + } + i2 += cs_b_offset[6]; + } + + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + i += cs_l; + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); + + k = 0; + for (i = 0; i < numCols_b; i+=8) + { + /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A + + //(Row0): already done + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[k][1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[k][0], mat_b_rearr[k][1]);//d = c - (a*b) + mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[k][0], mat_b_rearr[k][2]);//d = c - (a*b) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[k][0], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[k][0], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[k][0], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[k][0], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[k][0], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_rearr[k][1], mat_b_rearr[k][2]);//d = c - (a*b) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_rearr[k][1], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_rearr[k][1], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_rearr[k][1], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_rearr[k][1], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_rearr[k][1], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_rearr[k][2], mat_b_rearr[k][3]);//d = c - (a*b) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_rearr[k][2], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_rearr[k][2], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_rearr[k][2], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_rearr[k][2], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_rearr[k][3], mat_b_rearr[k][4]);//d = c - (a*b) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_rearr[k][3], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_rearr[k][3], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_rearr[k][3], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_rearr[k][4], mat_b_rearr[k][5]);//d = c - (a*b) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_rearr[k][4], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_rearr[k][4], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_rearr[k][5], mat_b_rearr[k][6]);//d = c - (a*b) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_rearr[k][5], mat_b_rearr[k][7]);//d = c - (a*b) + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_rearr[k][6], mat_b_rearr[k][7]);//d = c - (a*b) + + //////////////////////////////////////////////////////////////////////////////// + + //Store the computed B columns + + _mm256_storeu_ps((float *)ptr_b_dup + i, mat_b_rearr[k][0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b) + i), mat_b_rearr[k][1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i), mat_b_rearr[k][2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i), mat_b_rearr[k][3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i), mat_b_rearr[k][4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i), mat_b_rearr[k][5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i), mat_b_rearr[k][6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i), mat_b_rearr[k][7]); + //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); + k++; + } + + + } + ///////////////////loop ends ///////////////////// +} +#endif //OPT_CACHE_BLOCKING_L1 + +//////////////////////////// AutX=B /////////////////////// +static void trsm_AutXB_block_allSmallSizedMatrices(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) +{ + float ones = 1.0; + int i, i1, i2, i3, i4, j, k, l, r; + int cs_b_offset[7]; + int cs_l_offset[7]; + float *ptr_b_dup, *ptr_l_dup; + + //57 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[8]; + __m256 mat_a_blk_elems[8]; + __m256 mat_a_diag_inv[8]; + __m256 reciprocal_diags[2]; + + reciprocal_diags[0] = _mm256_broadcast_ss((float const *)(&ones)); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //L matrix offsets + cs_l_offset[0] = (cs_l << 1); + cs_l_offset[1] = cs_l + cs_l_offset[0]; + cs_l_offset[2] = (cs_l << 2); + cs_l_offset[3] = cs_l + cs_l_offset[2]; + cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; + cs_l_offset[5] = cs_l + cs_l_offset[4]; + cs_l_offset[6] = (cs_l_offset[5] + cs_l); + + //read diag elems of L 16x16 block + mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_l); + mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)ptr_l + cs_l); + mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[0]); + mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[1]); + mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[2]); + mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[3]); + mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[4]); + mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[5]); + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + cs_b_offset[6] = (cs_b_offset[5] + cs_b); + + reciprocal_diags[1] = reciprocal_diags[0]; + + //pack first 8 diags together + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xAA);//diag 0,1 + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xAA);//diag 2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_blk_elems[4], mat_a_blk_elems[5], 0xAA);//diag 4,5 + mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_blk_elems[6], mat_a_blk_elems[7], 0xAA);//diag 6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 + + //reciprocal of diagnal elements 0,1,2,3,4,5,6,7 + reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); +#if 0 + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); +#endif + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_diag_inv[0], mat_a_diag_inv[0]); + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); + + + /***************** first set of 8 rows of B processing starts *****************/ + ptr_b_dup = ptr_b; + i = 0; + for (j = 0; j < numCols_b; j += 8) + { + /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A + //read 8x8 block of B into registers + mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + /* transpose steps start */ + ////unpacklow//// + mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + /* transpose steps end */ + + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], mat_a_diag_inv[0]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5])); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_col[1]);//d = c - (a*b) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_col[2]);//d = c - (a*b) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], mat_a_diag_inv[1]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[0])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[1])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[2])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[3])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[4])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[5])); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_col[2]);//d = c - (a*b) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], mat_a_diag_inv[2]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[1])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[2])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[3])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[4])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[5])); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], mat_a_diag_inv[3]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[2])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[3])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[4])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[5])); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], mat_a_diag_inv[4]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[3])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[4])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[5])); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], mat_a_diag_inv[5]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 5 + cs_l_offset[4])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 5 + cs_l_offset[5])); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], mat_a_diag_inv[6]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 6 + cs_l_offset[5])); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], mat_a_diag_inv[7]); + + //////////////////////////////////////////////////////////////////////////////// + + /* transpose steps start */ + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + /* transpose steps end */ + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_b_rearr[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_rearr[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_rearr[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_rearr[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_rearr[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_rearr[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_rearr[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_rearr[7]); + + i += cs_b_offset[6]; + ptr_b_dup += cs_b_offset[6]; + //i += 8; + //ptr_b_dup += 8; + } + + //c = 0; + /***************** first set of 8 cols of B processing done *****************/ + ptr_b_dup = ptr_b; + i3 = 0; + i1 = 0; + //Start loop for cols of B to be processed in size of blk_width + for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row + { + ptr_l += cs_l_offset[6]; + + //Read next 8x8 block of A to get diag elements + i3 += 8; + mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_l + i3); + mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l); + mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[0]); + mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[1]); + mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[2]); + mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[3]); + mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[4]); + mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[5]); + + //pack 8 diags of A together + reciprocal_diags[0] = reciprocal_diags[1]; + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xAA);//diag 0,1 + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xAA);//diag 2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_blk_elems[4], mat_a_blk_elems[5], 0xAA);//diag 4,5 + mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_blk_elems[6], mat_a_blk_elems[7], 0xAA);//diag 6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 + + //reciprocal of diagnal elements of A :- 0,1,2,3,4,5,6,7 + reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); + + //ptr_b += j; + //ptr_b_dup += 8; + ptr_b_dup += 8; + i1 += 8; + i = i1; + i2 = 0; + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //mat_a_diag_inv2[0] = _mm256_unpacklo_ps(mat_a_diag_inv2[0], mat_a_diag_inv2[0]); + + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); + + for (r = 0; r < numCols_b; r += GEMM_BLK_V1) + { +#if GEMM_ACCUM_A + //Read 8 cols of B columns of Block-to-be-solved + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + /* transpose steps start */ + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + /* transpose steps end */ +#endif + //i = 0; + ptr_l_dup = ptr_l; + i4 = i2; + for (l = 0; l < j; l += 8) // move across m + { + //for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) + //{ + /////////////////// Partial Lower 8x8 block trsm of B + //Read current 8 cols of B columns from specified 8x8 current-block of B + mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_b + i4); + mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); + mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); + mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); + mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); + mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); + mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); + mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); + + /* transpose steps start */ + ////unpacklow//// + mat_b_col[0] = _mm256_unpacklo_ps(mat_a_blk_elems[0], mat_a_blk_elems[1]); + mat_b_col[1] = _mm256_unpacklo_ps(mat_a_blk_elems[2], mat_a_blk_elems[3]); + mat_b_col[2] = _mm256_unpacklo_ps(mat_a_blk_elems[4], mat_a_blk_elems[5]); + mat_b_col[3] = _mm256_unpacklo_ps(mat_a_blk_elems[6], mat_a_blk_elems[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + ////unpackhigh//// + mat_a_blk_elems[0] = _mm256_unpackhi_ps(mat_a_blk_elems[0], mat_a_blk_elems[1]); + mat_a_blk_elems[1] = _mm256_unpackhi_ps(mat_a_blk_elems[2], mat_a_blk_elems[3]); + mat_a_blk_elems[2] = _mm256_unpackhi_ps(mat_a_blk_elems[4], mat_a_blk_elems[5]); + mat_a_blk_elems[3] = _mm256_unpackhi_ps(mat_a_blk_elems[6], mat_a_blk_elems[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_a_blk_elems[4] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0x44); + mat_a_blk_elems[5] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xEE); + mat_a_blk_elems[6] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0x44); + mat_a_blk_elems[7] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xEE); +#else + mat_a_blk_elems[6] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0x4E); + mat_a_blk_elems[7] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0x4E); + mat_a_blk_elems[4] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[6], 0xCC); + mat_a_blk_elems[5] = _mm256_blend_ps(mat_a_blk_elems[1], mat_a_blk_elems[6], 0x33); + mat_a_blk_elems[6] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[7], 0xCC); + mat_a_blk_elems[7] = _mm256_blend_ps(mat_a_blk_elems[3], mat_a_blk_elems[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_col[2] = _mm256_permute2f128_ps(mat_a_blk_elems[4], mat_a_blk_elems[6], 0x20); + mat_b_col[6] = _mm256_permute2f128_ps(mat_a_blk_elems[4], mat_a_blk_elems[6], 0x31); + mat_b_col[3] = _mm256_permute2f128_ps(mat_a_blk_elems[5], mat_a_blk_elems[7], 0x20); + mat_b_col[7] = _mm256_permute2f128_ps(mat_a_blk_elems[5], mat_a_blk_elems[7], 0x31); + /* transpose steps end */ + + //Broadcast A8,0 to A15,0 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + //i4 = k >> 3; + ptr_l_dup++; + +#if GEMM_ACCUM_A + //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_mul_ps(mat_a_blk_elems[0], mat_b_col[0]); + mat_b_rearr[1] = _mm256_mul_ps(mat_a_blk_elems[1], mat_b_col[0]); + mat_b_rearr[2] = _mm256_mul_ps(mat_a_blk_elems[2], mat_b_col[0]); + mat_b_rearr[3] = _mm256_mul_ps(mat_a_blk_elems[3], mat_b_col[0]); + mat_b_rearr[4] = _mm256_mul_ps(mat_a_blk_elems[4], mat_b_col[0]); + mat_b_rearr[5] = _mm256_mul_ps(mat_a_blk_elems[5], mat_b_col[0]); + mat_b_rearr[6] = _mm256_mul_ps(mat_a_blk_elems[6], mat_b_col[0]); + mat_b_rearr[7] = _mm256_mul_ps(mat_a_blk_elems[7], mat_b_col[0]); +#endif + //Broadcast A21 to A71 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,2 to A15,2 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,3 to A15,3 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,4 to A15,4 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,5 to A15,5 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,6 to A15,6 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,7 to A15,7 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) +#endif + //end loop of cols + //} + //i2 += cs_b_offset[6]; + i4 += 8; + } + //trsm solve + + k = 0; + //for (i2 = 0; i2 < numCols_b; i2 += 8) + //{ + //i2 = i1 + r; + /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A +#if !GEMM_ACCUM_A + //Read 8 cols of B columns of Block-to-be-solved + mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + /* transpose steps start */ + ////unpacklow//// + mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + /* transpose steps end */ +#endif + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + //i += cs_l; + +#if GEMM_ACCUM_A + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); +#else + mat_b_rearr[0] = _mm256_sub_ps(mat_b_col[0], mat_b_rearr[0]); + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); +#endif + +#if GEMM_ACCUM_A + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[1] = _mm256_sub_ps(mat_b_col[1], mat_b_rearr[1]); + mat_b_rearr[2] = _mm256_sub_ps(mat_b_col[2], mat_b_rearr[2]); + mat_b_rearr[3] = _mm256_sub_ps(mat_b_col[3], mat_b_rearr[3]); + mat_b_rearr[4] = _mm256_sub_ps(mat_b_col[4], mat_b_rearr[4]); + mat_b_rearr[5] = _mm256_sub_ps(mat_b_col[5], mat_b_rearr[5]); + mat_b_rearr[6] = _mm256_sub_ps(mat_b_col[6], mat_b_rearr[6]); + mat_b_rearr[7] = _mm256_sub_ps(mat_b_col[7], mat_b_rearr[7]); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A21 to A71 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[0])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[1])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[2])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[3])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[4])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[5])); + //i += cs_l; + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[1])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[2])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[3])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[4])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[5])); + //i += cs_l; + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[2])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[3])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[4])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[5])); + //i += cs_l; + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[3])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[4])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[5])); + //i += cs_l; + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 5 + cs_l_offset[4])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 5 + cs_l_offset[5])); + //i += cs_l; + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A76 to register + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 6 + cs_l_offset[5])); + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //////////////////////////////////////////////////////////////////////////////// + + /* transpose steps start */ + ////unpacklow//// + mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + /* transpose steps end */ + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup + i2, mat_b_col[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)+i2), mat_b_col[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i2), mat_b_col[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i2), mat_b_col[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i2), mat_b_col[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i2), mat_b_col[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i2), mat_b_col[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i2), mat_b_col[7]); + //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); + k++; + //} + i += cs_b_offset[6]; + i2 += cs_b_offset[6]; + } + } //numRows of A + ///////////////////loop ends ///////////////////// +} + +static void trsm_AutXB_block_allSmallSizedMatrices_alpha(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alpha) +{ + float ones = 1.0; + int i, i1, i2, i3, i4, j, k, l, r; + int cs_b_offset[7]; + int cs_l_offset[7]; + float *ptr_b_dup, *ptr_l_dup; + + //57 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[8]; + __m256 mat_a_blk_elems[8]; + __m256 mat_a_diag_inv[8]; + __m256 reciprocal_diags[2]; + __m256 alphaReg; + + reciprocal_diags[0] = _mm256_broadcast_ss((float const *)(&ones)); + alphaReg = _mm256_broadcast_ss((float const *)&alpha); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //L matrix offsets + cs_l_offset[0] = (cs_l << 1); + cs_l_offset[1] = cs_l + cs_l_offset[0]; + cs_l_offset[2] = (cs_l << 2); + cs_l_offset[3] = cs_l + cs_l_offset[2]; + cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; + cs_l_offset[5] = cs_l + cs_l_offset[4]; + cs_l_offset[6] = (cs_l_offset[5] + cs_l); + + //read diag elems of L 16x16 block + mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_l); + mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)ptr_l + cs_l); + mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[0]); + mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[1]); + mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[2]); + mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[3]); + mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[4]); + mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[5]); + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + cs_b_offset[6] = (cs_b_offset[5] + cs_b); + + reciprocal_diags[1] = reciprocal_diags[0]; + + //pack first 8 diags together + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xAA);//diag 0,1 + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xAA);//diag 2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_blk_elems[4], mat_a_blk_elems[5], 0xAA);//diag 4,5 + mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_blk_elems[6], mat_a_blk_elems[7], 0xAA);//diag 6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 + + //reciprocal of diagnal elements 0,1,2,3,4,5,6,7 + reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); +#if 0 + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); +#endif + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_diag_inv[0], mat_a_diag_inv[0]); + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); + + + /***************** first set of 8 rows of B processing starts *****************/ + ptr_b_dup = ptr_b; + i = 0; + for (j = 0; j < numCols_b; j += 8) + { + /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A + //read 8x8 block of B into registers + mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + /* transpose steps start */ + ////unpacklow//// + mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + /* transpose steps end */ + + mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], alphaReg); + mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], alphaReg); + mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], alphaReg); + mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], alphaReg); + mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], alphaReg); + mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], alphaReg); + mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], alphaReg); + mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], alphaReg); + + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], mat_a_diag_inv[0]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5])); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_col[1]);//d = c - (a*b) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_col[2]);//d = c - (a*b) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], mat_a_diag_inv[1]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[0])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[1])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[2])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[3])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[4])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[5])); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_col[2]);//d = c - (a*b) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], mat_a_diag_inv[2]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[1])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[2])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[3])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[4])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[5])); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], mat_a_diag_inv[3]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[2])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[3])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[4])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[5])); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], mat_a_diag_inv[4]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[3])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[4])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[5])); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], mat_a_diag_inv[5]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 5 + cs_l_offset[4])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 5 + cs_l_offset[5])); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], mat_a_diag_inv[6]); + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 6 + cs_l_offset[5])); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_col[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], mat_a_diag_inv[7]); + + //////////////////////////////////////////////////////////////////////////////// + + /* transpose steps start */ + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + /* transpose steps end */ + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_b_rearr[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_rearr[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_rearr[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_rearr[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_rearr[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_rearr[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_rearr[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_rearr[7]); + + i += cs_b_offset[6]; + ptr_b_dup += cs_b_offset[6]; + //i += 8; + //ptr_b_dup += 8; + } + + //c = 0; + /***************** first set of 8 cols of B processing done *****************/ + ptr_b_dup = ptr_b; + i3 = 0; + i1 = 0; + //Start loop for cols of B to be processed in size of blk_width + for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row + { + ptr_l += cs_l_offset[6]; + + //Read next 8x8 block of A to get diag elements + i3 += 8; + mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_l + i3); + mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l); + mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[0]); + mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[1]); + mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[2]); + mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[3]); + mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[4]); + mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[5]); + + //pack 8 diags of A together + reciprocal_diags[0] = reciprocal_diags[1]; + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xAA);//diag 0,1 + mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xAA);//diag 2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_blk_elems[4], mat_a_blk_elems[5], 0xAA);//diag 4,5 + mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_blk_elems[6], mat_a_blk_elems[7], 0xAA);//diag 6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 + mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 + mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 + + //reciprocal of diagnal elements of A :- 0,1,2,3,4,5,6,7 + reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); + + //ptr_b += j; + //ptr_b_dup += 8; + ptr_b_dup += 8; + i1 += 8; + i = i1; + i2 = 0; + + //extract diag a00 from a + mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); + //mat_a_diag_inv2[0] = _mm256_unpacklo_ps(mat_a_diag_inv2[0], mat_a_diag_inv2[0]); + + //extract diag a11 from a + mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); + //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); + + //extract diag a22 from a + mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); + //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); + + //extract diag a33 from a + mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); + //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); + + //extract diag a44 from a + mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); + mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); + //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); + + //extract diag a55 from a + mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); + mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); + //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); + + //extract diag a66 from a + mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); + mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); + //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); + + //extract diag a77 from a + mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); + mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); + //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); + + for (r = 0; r < numCols_b; r += GEMM_BLK_V1) + { +#if GEMM_ACCUM_A + //Read 8 cols of B columns of Block-to-be-solved + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + /* transpose steps start */ + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + /* transpose steps end */ + + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); +#endif + + //i = 0; + ptr_l_dup = ptr_l; + i4 = i2; + for (l = 0; l < j; l += 8) // move across m + { + //for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) + //{ + /////////////////// Partial Lower 8x8 block trsm of B + //Read current 8 cols of B columns from specified 8x8 current-block of B + mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_b + i4); + mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); + mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); + mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); + mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); + mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); + mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); + mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); + + /* transpose steps start */ + ////unpacklow//// + mat_b_col[0] = _mm256_unpacklo_ps(mat_a_blk_elems[0], mat_a_blk_elems[1]); + mat_b_col[1] = _mm256_unpacklo_ps(mat_a_blk_elems[2], mat_a_blk_elems[3]); + mat_b_col[2] = _mm256_unpacklo_ps(mat_a_blk_elems[4], mat_a_blk_elems[5]); + mat_b_col[3] = _mm256_unpacklo_ps(mat_a_blk_elems[6], mat_a_blk_elems[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + ////unpackhigh//// + mat_a_blk_elems[0] = _mm256_unpackhi_ps(mat_a_blk_elems[0], mat_a_blk_elems[1]); + mat_a_blk_elems[1] = _mm256_unpackhi_ps(mat_a_blk_elems[2], mat_a_blk_elems[3]); + mat_a_blk_elems[2] = _mm256_unpackhi_ps(mat_a_blk_elems[4], mat_a_blk_elems[5]); + mat_a_blk_elems[3] = _mm256_unpackhi_ps(mat_a_blk_elems[6], mat_a_blk_elems[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_a_blk_elems[4] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0x44); + mat_a_blk_elems[5] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xEE); + mat_a_blk_elems[6] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0x44); + mat_a_blk_elems[7] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xEE); +#else + mat_a_blk_elems[6] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0x4E); + mat_a_blk_elems[7] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0x4E); + mat_a_blk_elems[4] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[6], 0xCC); + mat_a_blk_elems[5] = _mm256_blend_ps(mat_a_blk_elems[1], mat_a_blk_elems[6], 0x33); + mat_a_blk_elems[6] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[7], 0xCC); + mat_a_blk_elems[7] = _mm256_blend_ps(mat_a_blk_elems[3], mat_a_blk_elems[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_col[2] = _mm256_permute2f128_ps(mat_a_blk_elems[4], mat_a_blk_elems[6], 0x20); + mat_b_col[6] = _mm256_permute2f128_ps(mat_a_blk_elems[4], mat_a_blk_elems[6], 0x31); + mat_b_col[3] = _mm256_permute2f128_ps(mat_a_blk_elems[5], mat_a_blk_elems[7], 0x20); + mat_b_col[7] = _mm256_permute2f128_ps(mat_a_blk_elems[5], mat_a_blk_elems[7], 0x31); + /* transpose steps end */ + + //Broadcast A8,0 to A15,0 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + //i4 = k >> 3; + ptr_l_dup++; + +#if GEMM_ACCUM_A + //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_mul_ps(mat_a_blk_elems[0], mat_b_col[0]); + mat_b_rearr[1] = _mm256_mul_ps(mat_a_blk_elems[1], mat_b_col[0]); + mat_b_rearr[2] = _mm256_mul_ps(mat_a_blk_elems[2], mat_b_col[0]); + mat_b_rearr[3] = _mm256_mul_ps(mat_a_blk_elems[3], mat_b_col[0]); + mat_b_rearr[4] = _mm256_mul_ps(mat_a_blk_elems[4], mat_b_col[0]); + mat_b_rearr[5] = _mm256_mul_ps(mat_a_blk_elems[5], mat_b_col[0]); + mat_b_rearr[6] = _mm256_mul_ps(mat_a_blk_elems[6], mat_b_col[0]); + mat_b_rearr[7] = _mm256_mul_ps(mat_a_blk_elems[7], mat_b_col[0]); +#endif + //Broadcast A21 to A71 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,2 to A15,2 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,3 to A15,3 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,4 to A15,4 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,5 to A15,5 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,6 to A15,6 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,7 to A15,7 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) +#endif + //end loop of cols + //} + //i2 += cs_b_offset[6]; + i4 += 8; + } + //trsm solve + + k = 0; + //for (i2 = 0; i2 < numCols_b; i2 += 8) + //{ + //i2 = i1 + r; + /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A +#if !GEMM_ACCUM_A + //Read 8 cols of B columns of Block-to-be-solved + mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + /* transpose steps start */ + ////unpacklow//// + mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + /* transpose steps end */ + + mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], alphaReg); + mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], alphaReg); + mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], alphaReg); + mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], alphaReg); + mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], alphaReg); + mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], alphaReg); + mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], alphaReg); + mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], alphaReg); +#endif + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + //i += cs_l; + +#if GEMM_ACCUM_A + //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); +#else + mat_b_rearr[0] = _mm256_sub_ps(mat_b_col[0], mat_b_rearr[0]); + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); +#endif + +#if GEMM_ACCUM_A + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[1] = _mm256_sub_ps(mat_b_col[1], mat_b_rearr[1]); + mat_b_rearr[2] = _mm256_sub_ps(mat_b_col[2], mat_b_rearr[2]); + mat_b_rearr[3] = _mm256_sub_ps(mat_b_col[3], mat_b_rearr[3]); + mat_b_rearr[4] = _mm256_sub_ps(mat_b_col[4], mat_b_rearr[4]); + mat_b_rearr[5] = _mm256_sub_ps(mat_b_col[5], mat_b_rearr[5]); + mat_b_rearr[6] = _mm256_sub_ps(mat_b_col[6], mat_b_rearr[6]); + mat_b_rearr[7] = _mm256_sub_ps(mat_b_col[7], mat_b_rearr[7]); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A21 to A71 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[0])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[1])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[2])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[3])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[4])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[5])); + //i += cs_l; + + //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[1])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[2])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[3])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[4])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[5])); + //i += cs_l; + + //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[2])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[3])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[4])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[5])); + //i += cs_l; + + //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[3])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[4])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[5])); + //i += cs_l; + + //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 5 + cs_l_offset[4])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 5 + cs_l_offset[5])); + //i += cs_l; + + //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A76 to register + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 6 + cs_l_offset[5])); + + //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); + + //////////////////////////////////////////////////////////////////////////////// + + /* transpose steps start */ + ////unpacklow//// + mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + /* transpose steps end */ + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup + i2, mat_b_col[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)+i2), mat_b_col[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i2), mat_b_col[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i2), mat_b_col[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i2), mat_b_col[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i2), mat_b_col[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i2), mat_b_col[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i2), mat_b_col[7]); + //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); + k++; + //} + i += cs_b_offset[6]; + i2 += cs_b_offset[6]; + } + } //numRows of A + ///////////////////loop ends ///////////////////// +} + +static void trsm_AutXB_block_allSmallSizedMatrices_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) +{ + //float ones = 1.0; + int i, i1, i2, i4, j, k, l, r; + int cs_b_offset[7]; + int cs_l_offset[7]; + float *ptr_b_dup, *ptr_l_dup; + + //57 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[8]; + __m256 mat_a_blk_elems[8]; + //__m256 mat_a_diag_inv[8]; + //__m256 reciprocal_diags[2]; + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //L matrix offsets + cs_l_offset[0] = (cs_l << 1); + cs_l_offset[1] = cs_l + cs_l_offset[0]; + cs_l_offset[2] = (cs_l << 2); + cs_l_offset[3] = cs_l + cs_l_offset[2]; + cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; + cs_l_offset[5] = cs_l + cs_l_offset[4]; + cs_l_offset[6] = (cs_l_offset[5] + cs_l); + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + cs_b_offset[6] = (cs_b_offset[5] + cs_b); + +#if 0 + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); +#endif + + + /***************** first set of 8 rows of B processing starts *****************/ + ptr_b_dup = ptr_b; + i = 0; + for (j = 0; j < numCols_b; j += 8) + { + /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A + //read 8x8 block of B into registers + mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + /* transpose steps start */ + ////unpacklow//// + mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + /* transpose steps end */ + + + //(Row0) + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5])); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_col[1]);//d = c - (a*b) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_col[2]);//d = c - (a*b) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_col[7]);//d = c - (a*b) + + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[0])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[1])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[2])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[3])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[4])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[5])); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_col[2]);//d = c - (a*b) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_col[7]);//d = c - (a*b) + + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[1])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[2])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[3])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[4])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[5])); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_col[7]);//d = c - (a*b) + + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[2])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[3])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[4])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[5])); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_col[7]);//d = c - (a*b) + + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[3])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[4])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[5])); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_col[7]);//d = c - (a*b) + + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 5 + cs_l_offset[4])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 5 + cs_l_offset[5])); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_col[7]);//d = c - (a*b) + + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 6 + cs_l_offset[5])); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_col[7]);//d = c - (a*b) + + + + //////////////////////////////////////////////////////////////////////////////// + + /* transpose steps start */ + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + /* transpose steps end */ + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_b_rearr[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_rearr[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_rearr[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_rearr[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_rearr[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_rearr[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_rearr[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_rearr[7]); + + i += cs_b_offset[6]; + ptr_b_dup += cs_b_offset[6]; + //i += 8; + //ptr_b_dup += 8; + } + + //c = 0; + /***************** first set of 8 cols of B processing done *****************/ + ptr_b_dup = ptr_b; + i1 = 0; + //Start loop for cols of B to be processed in size of blk_width + for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row + { + ptr_l += cs_l_offset[6]; + + + //ptr_b += j; + //ptr_b_dup += 8; + ptr_b_dup += 8; + i1 += 8; + i = i1; + i2 = 0; + + for (r = 0; r < numCols_b; r += GEMM_BLK_V1) + { +#if GEMM_ACCUM_A + //Read 8 cols of B columns of Block-to-be-solved + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + /* transpose steps start */ + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + /* transpose steps end */ +#endif + + //i = 0; + ptr_l_dup = ptr_l; + i4 = i2; + for (l = 0; l < j; l += 8) // move across m + { + //for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) + //{ + /////////////////// Partial Lower 8x8 block trsm of B + //Read current 8 cols of B columns from specified 8x8 current-block of B + mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_b + i4); + mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); + mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); + mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); + mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); + mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); + mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); + mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); + + /* transpose steps start */ + ////unpacklow//// + mat_b_col[0] = _mm256_unpacklo_ps(mat_a_blk_elems[0], mat_a_blk_elems[1]); + mat_b_col[1] = _mm256_unpacklo_ps(mat_a_blk_elems[2], mat_a_blk_elems[3]); + mat_b_col[2] = _mm256_unpacklo_ps(mat_a_blk_elems[4], mat_a_blk_elems[5]); + mat_b_col[3] = _mm256_unpacklo_ps(mat_a_blk_elems[6], mat_a_blk_elems[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + ////unpackhigh//// + mat_a_blk_elems[0] = _mm256_unpackhi_ps(mat_a_blk_elems[0], mat_a_blk_elems[1]); + mat_a_blk_elems[1] = _mm256_unpackhi_ps(mat_a_blk_elems[2], mat_a_blk_elems[3]); + mat_a_blk_elems[2] = _mm256_unpackhi_ps(mat_a_blk_elems[4], mat_a_blk_elems[5]); + mat_a_blk_elems[3] = _mm256_unpackhi_ps(mat_a_blk_elems[6], mat_a_blk_elems[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_a_blk_elems[4] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0x44); + mat_a_blk_elems[5] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xEE); + mat_a_blk_elems[6] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0x44); + mat_a_blk_elems[7] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xEE); +#else + mat_a_blk_elems[6] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0x4E); + mat_a_blk_elems[7] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0x4E); + mat_a_blk_elems[4] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[6], 0xCC); + mat_a_blk_elems[5] = _mm256_blend_ps(mat_a_blk_elems[1], mat_a_blk_elems[6], 0x33); + mat_a_blk_elems[6] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[7], 0xCC); + mat_a_blk_elems[7] = _mm256_blend_ps(mat_a_blk_elems[3], mat_a_blk_elems[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_col[2] = _mm256_permute2f128_ps(mat_a_blk_elems[4], mat_a_blk_elems[6], 0x20); + mat_b_col[6] = _mm256_permute2f128_ps(mat_a_blk_elems[4], mat_a_blk_elems[6], 0x31); + mat_b_col[3] = _mm256_permute2f128_ps(mat_a_blk_elems[5], mat_a_blk_elems[7], 0x20); + mat_b_col[7] = _mm256_permute2f128_ps(mat_a_blk_elems[5], mat_a_blk_elems[7], 0x31); + /* transpose steps end */ + + //Broadcast A8,0 to A15,0 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + //i4 = k >> 3; + ptr_l_dup++; + +#if GEMM_ACCUM_A + //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_mul_ps(mat_a_blk_elems[0], mat_b_col[0]); + mat_b_rearr[1] = _mm256_mul_ps(mat_a_blk_elems[1], mat_b_col[0]); + mat_b_rearr[2] = _mm256_mul_ps(mat_a_blk_elems[2], mat_b_col[0]); + mat_b_rearr[3] = _mm256_mul_ps(mat_a_blk_elems[3], mat_b_col[0]); + mat_b_rearr[4] = _mm256_mul_ps(mat_a_blk_elems[4], mat_b_col[0]); + mat_b_rearr[5] = _mm256_mul_ps(mat_a_blk_elems[5], mat_b_col[0]); + mat_b_rearr[6] = _mm256_mul_ps(mat_a_blk_elems[6], mat_b_col[0]); + mat_b_rearr[7] = _mm256_mul_ps(mat_a_blk_elems[7], mat_b_col[0]); +#endif + //Broadcast A21 to A71 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,2 to A15,2 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,3 to A15,3 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,4 to A15,4 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,5 to A15,5 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,6 to A15,6 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,7 to A15,7 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) +#endif + //end loop of cols + //} + //i2 += cs_b_offset[6]; + i4 += 8; + } + //trsm solve + + k = 0; + //for (i2 = 0; i2 < numCols_b; i2 += 8) + //{ + //i2 = i1 + r; + /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A +#if !GEMM_ACCUM_A + //Read 8 cols of B columns of Block-to-be-solved + mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + /* transpose steps start */ + ////unpacklow//// + mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + /* transpose steps end */ +#endif + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + //i += cs_l; + +#if GEMM_ACCUM_A + //(Row0): already done + +#else + mat_b_rearr[0] = _mm256_sub_ps(mat_b_col[0], mat_b_rearr[0]); +#endif + +#if GEMM_ACCUM_A + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[1] = _mm256_sub_ps(mat_b_col[1], mat_b_rearr[1]); + mat_b_rearr[2] = _mm256_sub_ps(mat_b_col[2], mat_b_rearr[2]); + mat_b_rearr[3] = _mm256_sub_ps(mat_b_col[3], mat_b_rearr[3]); + mat_b_rearr[4] = _mm256_sub_ps(mat_b_col[4], mat_b_rearr[4]); + mat_b_rearr[5] = _mm256_sub_ps(mat_b_col[5], mat_b_rearr[5]); + mat_b_rearr[6] = _mm256_sub_ps(mat_b_col[6], mat_b_rearr[6]); + mat_b_rearr[7] = _mm256_sub_ps(mat_b_col[7], mat_b_rearr[7]); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A21 to A71 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[0])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[1])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[2])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[3])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[4])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[5])); + //i += cs_l; + + + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[1])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[2])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[3])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[4])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[5])); + //i += cs_l; + + + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[2])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[3])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[4])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[5])); + //i += cs_l; + + + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[3])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[4])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[5])); + //i += cs_l; + + + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 5 + cs_l_offset[4])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 5 + cs_l_offset[5])); + //i += cs_l; + + + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A76 to register + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 6 + cs_l_offset[5])); + + + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + + + //////////////////////////////////////////////////////////////////////////////// + + /* transpose steps start */ + ////unpacklow//// + mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + /* transpose steps end */ + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup + i2, mat_b_col[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)+i2), mat_b_col[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i2), mat_b_col[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i2), mat_b_col[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i2), mat_b_col[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i2), mat_b_col[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i2), mat_b_col[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i2), mat_b_col[7]); + //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); + k++; + //} + i += cs_b_offset[6]; + i2 += cs_b_offset[6]; + } + } //numRows of A + ///////////////////loop ends ///////////////////// +} + +static void trsm_AutXB_block_allSmallSizedMatrices_alpha_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alpha) +{ + //float ones = 1.0; + int i, i1, i2, i4, j, k, l, r; + int cs_b_offset[7]; + int cs_l_offset[7]; + float *ptr_b_dup, *ptr_l_dup; + + //57 number of ymm(256 bits) registers used + __m256 mat_b_col[8]; + __m256 mat_b_rearr[8]; + __m256 mat_a_blk_elems[8]; + //__m256 mat_a_diag_inv[8]; + //__m256 reciprocal_diags[2]; + __m256 alphaReg; + alphaReg = _mm256_broadcast_ss((float const *)&alpha); + + // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // + + //L matrix offsets + cs_l_offset[0] = (cs_l << 1); + cs_l_offset[1] = cs_l + cs_l_offset[0]; + cs_l_offset[2] = (cs_l << 2); + cs_l_offset[3] = cs_l + cs_l_offset[2]; + cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; + cs_l_offset[5] = cs_l + cs_l_offset[4]; + cs_l_offset[6] = (cs_l_offset[5] + cs_l); + + cs_b_offset[0] = (cs_b << 1); + cs_b_offset[1] = cs_b + cs_b_offset[0]; + cs_b_offset[2] = (cs_b << 2); + cs_b_offset[3] = cs_b + cs_b_offset[2]; + cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; + cs_b_offset[5] = cs_b + cs_b_offset[4]; + cs_b_offset[6] = (cs_b_offset[5] + cs_b); + +#if 0 + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); + + //Broadcast A21 to A71 to registers + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); + mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); + mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); + mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); + mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); + mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); + mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); + mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); + mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); + mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); + mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); + mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); + mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); + mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); + mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); + mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); + + //Broadcast A76 to register + mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); +#endif + + + /***************** first set of 8 rows of B processing starts *****************/ + ptr_b_dup = ptr_b; + i = 0; + for (j = 0; j < numCols_b; j += 8) + { + /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A + //read 8x8 block of B into registers + mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + /* transpose steps start */ + ////unpacklow//// + mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + /* transpose steps end */ + + mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], alphaReg); + mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], alphaReg); + mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], alphaReg); + mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], alphaReg); + mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], alphaReg); + mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], alphaReg); + mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], alphaReg); + mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], alphaReg); + + //(Row0) + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5])); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_col[1]);//d = c - (a*b) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_col[2]);//d = c - (a*b) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_col[7]);//d = c - (a*b) + + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[0])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[1])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[2])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[3])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[4])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[5])); + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_col[2]);//d = c - (a*b) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_col[7]);//d = c - (a*b) + + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[1])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[2])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[3])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[4])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[5])); + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_col[3]);//d = c - (a*b) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_col[7]);//d = c - (a*b) + + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[2])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[3])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[4])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[5])); + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_col[4]);//d = c - (a*b) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_col[7]);//d = c - (a*b) + + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[3])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[4])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[5])); + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_col[5]);//d = c - (a*b) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_col[7]);//d = c - (a*b) + + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 5 + cs_l_offset[4])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 5 + cs_l_offset[5])); + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_col[6]);//d = c - (a*b) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_col[7]);//d = c - (a*b) + + + + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 6 + cs_l_offset[5])); + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_col[7]);//d = c - (a*b) + + + + //////////////////////////////////////////////////////////////////////////////// + + /* transpose steps start */ + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + /* transpose steps end */ + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup, mat_b_rearr[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_rearr[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_rearr[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_rearr[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_rearr[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_rearr[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_rearr[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_rearr[7]); + + i += cs_b_offset[6]; + ptr_b_dup += cs_b_offset[6]; + //i += 8; + //ptr_b_dup += 8; + } + + //c = 0; + /***************** first set of 8 cols of B processing done *****************/ + ptr_b_dup = ptr_b; + i1 = 0; + //Start loop for cols of B to be processed in size of blk_width + for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row + { + ptr_l += cs_l_offset[6]; + + + //ptr_b += j; + //ptr_b_dup += 8; + ptr_b_dup += 8; + i1 += 8; + i = i1; + i2 = 0; + + for (r = 0; r < numCols_b; r += GEMM_BLK_V1) + { +#if GEMM_ACCUM_A + //Read 8 cols of B columns of Block-to-be-solved + mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + /* transpose steps start */ + ////unpacklow//// + mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); + mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); + mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); + mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + + ////unpackhigh//// + mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); + mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); + mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); + mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + /* transpose steps end */ + + mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); + mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); + mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); + mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); + mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); + mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); + mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); + mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); +#endif + + //i = 0; + ptr_l_dup = ptr_l; + i4 = i2; + for (l = 0; l < j; l += 8) // move across m + { + //for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) + //{ + /////////////////// Partial Lower 8x8 block trsm of B + //Read current 8 cols of B columns from specified 8x8 current-block of B + mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_b + i4); + mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); + mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); + mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); + mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); + mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); + mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); + mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); + + /* transpose steps start */ + ////unpacklow//// + mat_b_col[0] = _mm256_unpacklo_ps(mat_a_blk_elems[0], mat_a_blk_elems[1]); + mat_b_col[1] = _mm256_unpacklo_ps(mat_a_blk_elems[2], mat_a_blk_elems[3]); + mat_b_col[2] = _mm256_unpacklo_ps(mat_a_blk_elems[4], mat_a_blk_elems[5]); + mat_b_col[3] = _mm256_unpacklo_ps(mat_a_blk_elems[6], mat_a_blk_elems[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + ////unpackhigh//// + mat_a_blk_elems[0] = _mm256_unpackhi_ps(mat_a_blk_elems[0], mat_a_blk_elems[1]); + mat_a_blk_elems[1] = _mm256_unpackhi_ps(mat_a_blk_elems[2], mat_a_blk_elems[3]); + mat_a_blk_elems[2] = _mm256_unpackhi_ps(mat_a_blk_elems[4], mat_a_blk_elems[5]); + mat_a_blk_elems[3] = _mm256_unpackhi_ps(mat_a_blk_elems[6], mat_a_blk_elems[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_a_blk_elems[4] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0x44); + mat_a_blk_elems[5] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xEE); + mat_a_blk_elems[6] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0x44); + mat_a_blk_elems[7] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xEE); +#else + mat_a_blk_elems[6] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0x4E); + mat_a_blk_elems[7] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0x4E); + mat_a_blk_elems[4] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[6], 0xCC); + mat_a_blk_elems[5] = _mm256_blend_ps(mat_a_blk_elems[1], mat_a_blk_elems[6], 0x33); + mat_a_blk_elems[6] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[7], 0xCC); + mat_a_blk_elems[7] = _mm256_blend_ps(mat_a_blk_elems[3], mat_a_blk_elems[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_col[2] = _mm256_permute2f128_ps(mat_a_blk_elems[4], mat_a_blk_elems[6], 0x20); + mat_b_col[6] = _mm256_permute2f128_ps(mat_a_blk_elems[4], mat_a_blk_elems[6], 0x31); + mat_b_col[3] = _mm256_permute2f128_ps(mat_a_blk_elems[5], mat_a_blk_elems[7], 0x20); + mat_b_col[7] = _mm256_permute2f128_ps(mat_a_blk_elems[5], mat_a_blk_elems[7], 0x31); + /* transpose steps end */ + + //Broadcast A8,0 to A15,0 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + //i4 = k >> 3; + ptr_l_dup++; + +#if GEMM_ACCUM_A + //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_mul_ps(mat_a_blk_elems[0], mat_b_col[0]); + mat_b_rearr[1] = _mm256_mul_ps(mat_a_blk_elems[1], mat_b_col[0]); + mat_b_rearr[2] = _mm256_mul_ps(mat_a_blk_elems[2], mat_b_col[0]); + mat_b_rearr[3] = _mm256_mul_ps(mat_a_blk_elems[3], mat_b_col[0]); + mat_b_rearr[4] = _mm256_mul_ps(mat_a_blk_elems[4], mat_b_col[0]); + mat_b_rearr[5] = _mm256_mul_ps(mat_a_blk_elems[5], mat_b_col[0]); + mat_b_rearr[6] = _mm256_mul_ps(mat_a_blk_elems[6], mat_b_col[0]); + mat_b_rearr[7] = _mm256_mul_ps(mat_a_blk_elems[7], mat_b_col[0]); +#endif + //Broadcast A21 to A71 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,2 to A15,2 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,3 to A15,3 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,4 to A15,4 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,5 to A15,5 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,6 to A15,6 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A8,7 to A15,7 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + ptr_l_dup++; +#if GEMM_ACCUM_A + //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) + mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) +#endif + //end loop of cols + //} + //i2 += cs_b_offset[6]; + i4 += 8; + } + //trsm solve + + k = 0; + //for (i2 = 0; i2 < numCols_b; i2 += 8) + //{ + //i2 = i1 + r; + /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A +#if !GEMM_ACCUM_A + //Read 8 cols of B columns of Block-to-be-solved + mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); + mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); + mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); + mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); + mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); + mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); + mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); + mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); + + /* transpose steps start */ + ////unpacklow//// + mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + /* transpose steps end */ + + mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], alphaReg); + mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], alphaReg); + mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], alphaReg); + mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], alphaReg); + mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], alphaReg); + mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], alphaReg); + mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], alphaReg); + mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], alphaReg); +#endif + //Broadcast A10 to A70 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); + mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); + //i += cs_l; + +#if GEMM_ACCUM_A + //(Row0): already done + +#else + mat_b_rearr[0] = _mm256_sub_ps(mat_b_col[0], mat_b_rearr[0]); +#endif + +#if GEMM_ACCUM_A + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) +#else + mat_b_rearr[1] = _mm256_sub_ps(mat_b_col[1], mat_b_rearr[1]); + mat_b_rearr[2] = _mm256_sub_ps(mat_b_col[2], mat_b_rearr[2]); + mat_b_rearr[3] = _mm256_sub_ps(mat_b_col[3], mat_b_rearr[3]); + mat_b_rearr[4] = _mm256_sub_ps(mat_b_col[4], mat_b_rearr[4]); + mat_b_rearr[5] = _mm256_sub_ps(mat_b_col[5], mat_b_rearr[5]); + mat_b_rearr[6] = _mm256_sub_ps(mat_b_col[6], mat_b_rearr[6]); + mat_b_rearr[7] = _mm256_sub_ps(mat_b_col[7], mat_b_rearr[7]); + + //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) + mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) +#endif + //Broadcast A21 to A71 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[0])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[1])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[2])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[3])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[4])); + mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[5])); + //i += cs_l; + + + + //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) + mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A32 to A72 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[1])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[2])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[3])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[4])); + mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[5])); + //i += cs_l; + + + + //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) + mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A43 to A73 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[2])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[3])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[4])); + mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[5])); + //i += cs_l; + + + + //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) + mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A54 to A74 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[3])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[4])); + mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[5])); + //i += cs_l; + + + + //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) + mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A65 to A75 to registers + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 5 + cs_l_offset[4])); + mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 5 + cs_l_offset[5])); + //i += cs_l; + + + + //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) + mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) + + //Broadcast A76 to register + mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 6 + cs_l_offset[5])); + + + + //(Row7): FMA operations of b7 with elements of index (7, 0) + mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) + + + + //////////////////////////////////////////////////////////////////////////////// + + /* transpose steps start */ + ////unpacklow//// + mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange low elements +#if REARRANGE_SHFL == 1 + mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); + mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); +#else + mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); + mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); + mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); + mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); + mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); + mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); +#endif + //Merge rearranged low elements into complete rows + mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); + mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); + mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); + mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); + + ////unpackhigh//// + mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); + mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); + mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); + mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); + + //Rearrange high elements +#if REARRANGE_SHFL == 1 + mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); + mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); +#else + mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); + mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); + mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); + mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); + mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); + mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); +#endif + + //Merge rearranged high elements into complete rows + mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); + mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); + mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); + mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); + /* transpose steps end */ + + //Store the computed B columns + _mm256_storeu_ps((float *)ptr_b_dup + i2, mat_b_col[0]); + _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)+i2), mat_b_col[1]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i2), mat_b_col[2]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i2), mat_b_col[3]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i2), mat_b_col[4]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i2), mat_b_col[5]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i2), mat_b_col[6]); + _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i2), mat_b_col[7]); + //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); + k++; + //} + i += cs_b_offset[6]; + i2 += cs_b_offset[6]; + } + } //numRows of A + ///////////////////loop ends ///////////////////// +} +#endif From ec907c3f4b86fcf3f72985a27f3e3b65bc34eb89 Mon Sep 17 00:00:00 2001 From: Meghana Date: Mon, 27 May 2019 15:36:44 +0530 Subject: [PATCH 102/109] Defined small matrix thresholds for TRSM for various cases for NAPLES and ROME Updated copyright information for kernels/zen/bli_trsm_small.c file Removed separate kernels for zen2 architecture Instead added threshold conditions in zen kernels both for ROME and NAPLES Change-Id: Ifd715731741d649b6ad16b123a86dbd6665d97e5 --- kernels/zen2/3/bli_trsm_small.c | 25023 ------------------------------ 1 file changed, 25023 deletions(-) delete mode 100644 kernels/zen2/3/bli_trsm_small.c diff --git a/kernels/zen2/3/bli_trsm_small.c b/kernels/zen2/3/bli_trsm_small.c deleted file mode 100644 index 346df3eca..000000000 --- a/kernels/zen2/3/bli_trsm_small.c +++ /dev/null @@ -1,25023 +0,0 @@ -/* - -BLIS -An object-based framework for developing high-performance BLAS-like -libraries. - -Copyright (C) 2018, Advanced Micro Devices, Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: -- Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. -- Neither the name of The University of Texas at Austin nor the names -of its contributors may be used to endorse or promote products -derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#include "blis.h" -#ifdef BLIS_ENABLE_SMALL_MATRIX_TRSM -#include "immintrin.h" -#define GEMM_BLK_V1 8 //Block size to perform gemm and apply trsm -#define GEMM_ACCUM_A 1 //Peform B1=B1-(B0*A0) operation instead of B1'=(B0*A0) and then B1=B1-B1' -#define OPT_CACHE_BLOCKING_L1 1 //Perform trsm block-wise in blocks of GEMM_BLK_V1 instead of all columns of B together. -#define REARRANGE_SHFL 0 //Rearrange operations using blend or shuffle -#define BLI_AlXB_M_SP 16 -//#define BLI_AlXB_M_DP 16 -#define BLI_XAltB_N_SP 128 -#define BLI_AutXB_M_SP 64 -#define BLI_AutXB_N_SP 128 -#define max(a,b) a>b?a:b -#define min(a,b) a 0; k--) - { - double lkk_inv = 1.0/A[k+k*lda]; - for(i = M-1; i+1 > 0; i--) - { - B[i+k*ldb] *= lkk_inv; - for(j = k-1; j+1 > 0; j--) - { - B[i+j*ldb] -= B[i+k*ldb] * A[k+j*lda]; - } - } - } -return BLIS_SUCCESS; -} - -/* TRSM scalar code for the case XA = alpha * B - * A is lower-triangular, unit-diagonal, no transpose - *Dimensions: X:mxn A:nxn B:mxn - */ -static err_t dtrsm_small_XAlB_unitDiag( - double *A, - double *B, - double alpha, - dim_t M, - dim_t N, - dim_t lda, - dim_t ldb -) -{ - - dim_t i, j, k; - - for(i = 0 ; i < M; i++) - for(j = 0; j < N; j++) - B[i+j*ldb] *= alpha; - - for(k = N-1; k+1 > 0; k--) - { - for(i = M-1; i+1 > 0; i--) - { - for(j = k-1; j+1 > 0; j--) - { - B[i+j*ldb] -= B[i+k*ldb] * A[k+j*lda]; - } - } - } -return BLIS_SUCCESS; -} - -/* TRSM scalar code for the case XA = alpha * B - *A is upper-triangular, non-unit-diagonal, A is transposed - * Dimensions: X:mxn A:nxn B:mxn - */ -static err_t dtrsm_small_XAutB ( - double *A, - double *B, - double alpha, - dim_t M, - dim_t N, - dim_t lda, - dim_t ldb -) -{ - - dim_t i, j, k; - - for(i = 0; i < M; i++) - for(j = 0; j < N; j++) - B[i+j*ldb] *=alpha; - - for(k = N-1; k+1 > 0; k--) - { - double lkk_inv = 1.0/A[k+k*lda]; - for(i = M-1; i+1 > 0; i--) - { - B[i+k*ldb] *= lkk_inv; - for(j = k-1; j+1 > 0; j--) - { - B[i+j*ldb] -= B[i+k*ldb] * A[j+k*lda]; - } - } - } -return BLIS_SUCCESS; -} - -/* TRSM scalar code for the case XA = alpha * B - * A is upper-triangular, unit-diagonal, A has to be transposed - * Dimensions: X:mxn A:nxn B:mxn - */ -static err_t dtrsm_small_XAutB_unitDiag( - double *A, - double *B, - double alpha, - dim_t M, - dim_t N, - dim_t lda, - dim_t ldb -) -{ - - dim_t i, j, k; - - for(i = 0; i< M; i++) - for(j = 0; j< N; j++) - B[i+j*ldb] *= alpha; - - for(i = M-1; i+1 > 0; i--) - { - for(j = N-1; j+1 > 0; j--) - { - for(k = j-1; k+1 > 0; k--) - { - B[i+k*ldb] -= B[i+j*ldb] * A[k+j*lda]; - - } - } - } -return BLIS_SUCCESS; -} - -/* TRSM scalar code for the case XA = alpha * B - * A is lower-triangular, non-unit-diagonal, A has to be transposed - * Dimensions: X:mxn A:nxn B:mxn - */ -static err_t dtrsm_small_XAltB ( - double *A, - double *B, - dim_t M, - dim_t N, - dim_t lda, - dim_t ldb -) -{ - - dim_t i, j, k; - - for(k = 0; k < N; k++) - { - double lkk_inv = 1.0/A[k+k*lda]; - for(i = 0; i < M; i++) - { - B[i+k*ldb] *= lkk_inv; - for(j = k+1; j < N; j++) - { - B[i+j*ldb] -= B[i+k*ldb] * A[j+k*lda]; - } - } - } -return BLIS_SUCCESS; -} - -/* TRSM scalar code for XA = alpha * B - * A is lower-triangular, unit-diagonal, A has to be transposed - * Dimensions: X:mxn A:nxn B:mxn - */ -static err_t dtrsm_small_XAltB_unitDiag( - double *A, - double *B, - dim_t M, - dim_t N, - dim_t lda, - dim_t ldb -) -{ - - dim_t i, j, k; - - for(k = 0; k < N; k++) - { - for(i = 0; i < M; i++) - { - for(j = k+1; j < N; j++) - { - B[i+j*ldb] -= B[i+k*ldb] * A[j+k*lda]; - } - } - } -return BLIS_SUCCESS; -} - -/* TRSM scalar code for the case XA = alpha * B - * A is upper-triangular, unit-diagonal, no transpose - * Dimensions: X:mxn A:nxn B:mxn - */ -static err_t dtrsm_small_XAuB_unitDiag ( - double *A, - double *B, - dim_t M, - dim_t N, - dim_t lda, - dim_t ldb -) -{ - - dim_t i, j, k; - - for(k = 0; k < N; k++) - { - for(i = 0; i < M; i++) - { - for(j = k+1; j < N; j++) - { - B[i+j*ldb] -= B[i+k*ldb] * A[k+j*lda]; - } - } - } -return BLIS_SUCCESS; -} - -/* TRSM for the case AX = alpha * B, Double precision - * A is lower-triangular, no-transpose, non-unit diagonal - * dimensions A: mxm X: mxn B: mxn - - b01---> - * ***************** - ** * * * * * - * * * * * * * - * * *b01* * * * - * * * * * * * -a10 ****** b11 ***************** - | * * * | * * * * * - | * * * | * * * * * - | *a10*a11* | *b11* * * * - v * * * v * * * * * - *********** ***************** - * * * * * * * * * - * * * * * * * * * - * * * * * * * * * - * * * * * * * * * - **************** ***************** - a11---> -*/ - -static err_t bli_dtrsm_small_AlXB( - side_t side, - obj_t* AlphaObj, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ) -{ - - dim_t D_MR = 4; //size of block along 'M' dimpension - dim_t D_NR = 8; //size of block along 'N' dimension - - dim_t m = bli_obj_length(b); // number of rows of matrix B - dim_t n = bli_obj_width(b); // number of columns of matrix B - - if(max(m,n) > 90) - return BLIS_NOT_YET_IMPLEMENTED; - - dim_t m_remainder = m % D_MR; //number of remainder rows - dim_t n_remainder = n % D_NR; //number of remainder columns - - dim_t cs_a = bli_obj_col_stride(a); // column stride of A - dim_t cs_b = bli_obj_col_stride(b); // column stride of B - - dim_t i, j, k; //loop variables - dim_t k_iter; //number of times GEMM to be performed - - double AlphaVal = *(double *)AlphaObj->buffer; //value of alpha - double *L = a->buffer; //pointer to matrix A - double *B = b->buffer; //pointer to matrix B - - double *a10, *a11, *b01, *b11; //pointers that point to blocks for GEMM and TRSM - double *ptr_b01_dup; - - double ones = 1.0; - - //scratch registers - __m256d ymm0, ymm1, ymm2, ymm3; - __m256d ymm4, ymm5, ymm6, ymm7; - __m256d ymm8, ymm9, ymm10, ymm11; - __m256d ymm12, ymm13, ymm14, ymm15; - __m256d ymm16; - - - - for(j = 0; j+D_NR-1 < n; j += D_NR) //loop along 'N' dimension - { - for(i = 0;i+D_MR-1 < m; i += D_MR) //loop along 'M' dimension - { - a10 = L +i; //pointer to block of A to be used for GEMM - a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM - b01 = B + j*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM - - k_iter = i / D_MR; //number of times GEMM to be performed(in blocks of 4x4) - - ymm8 = _mm256_setzero_pd(); - ymm9 = _mm256_setzero_pd(); - ymm10 = _mm256_setzero_pd(); - ymm11 = _mm256_setzero_pd(); - ymm12 = _mm256_setzero_pd(); - ymm13 = _mm256_setzero_pd(); - ymm14 = _mm256_setzero_pd(); - ymm15 = _mm256_setzero_pd(); - - ///GEMM code begins/// - - for(k = 0; k< k_iter; k++) //loop for number of GEMM operations - { - ptr_b01_dup = b01; - - ymm16 = _mm256_loadu_pd((double const *)(a10));//A10[0][0] A10[1][0] A10[2][0] A10[3][0] - - ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] - ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] - ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] - ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] - - ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[0][4] - ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[0][5] - ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[0][6] - ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[0][7] - - b01 += 1; //mobe to next row of B - - ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) - ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) - ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) - ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) - - ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[0][4]*A10[0][0] B01[0][4]*A10[1][0] B01[0][4]*A10[2][0] B01[0][4]*A10[3][0]) - ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[0][5]*A10[0][0] B01[0][5]*A10[1][0] B01[0][5]*A10[2][0] B01[0][5]*A10[3][0]) - ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[0][6]*A10[0][0] B01[0][6]*A10[1][0] B01[0][6]*A10[2][0] B01[0][6]*A10[3][0]) - ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[0][7]*A10[0][0] B01[0][7]*A10[1][0] B01[0][7]*A10[2][0] B01[0][7]*A10[3][0]) - - ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a));//A10[0][1] A10[1][1] A10[2][1] A10[3][1] - - ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] - ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] - ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] - ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] - - ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[1][4] - ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[1][5] - ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[1][6] - ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[1][7] - - b01 += 1; //mobe to next row of B - - ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) - ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) - ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) - ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) - - ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[1][4]*A10[0][1] B01[1][4]*A10[1][1] B01[1][4]*A10[2][1] B01[1][4]*A10[3][1]) - ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[1][5]*A10[0][1] B01[1][5]*A10[1][1] B01[1][5]*A10[2][1] B01[1][5]*A10[3][1]) - ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[1][6]*A10[0][1] B01[1][6]*A10[1][1] B01[1][6]*A10[2][1] B01[1][6]*A10[3][1]) - ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[1][7]*A10[0][1] B01[1][7]*A10[1][1] B01[1][7]*A10[2][1] B01[1][7]*A10[3][1]) - - ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2));//A10[0][2] A10[1][2] A10[2][2] A10[3][2] - - ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] - ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] - ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] - ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] - - ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[2][4] - ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[2][5] - ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[2][6] - ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[2][7] - - b01 += 1; //mobe to next row of B - - ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) - ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) - ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) - ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) - - ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[2][4]*A10[0][2] B01[2][4]*A10[1][2] B01[2][4]*A10[2][2] B01[2][4]*A10[3][2]) - ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[2][5]*A10[0][2] B01[2][5]*A10[1][2] B01[2][5]*A10[2][2] B01[2][5]*A10[3][2]) - ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[2][6]*A10[0][2] B01[2][6]*A10[1][2] B01[2][6]*A10[2][2] B01[2][6]*A10[3][2]) - ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[2][7]*A10[0][2] B01[2][7]*A10[1][2] B01[2][7]*A10[2][2] B01[2][7]*A10[3][2]) - - ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3));//A10[0][3] A10[1][3] A10[2][3] A10[3][3] - - ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] - ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] - ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] - ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] - - ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[3][4] - ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[3][5] - ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[3][6] - ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[3][7] - - b01 += 1; //mobe to next row of B - - ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[3][0]*A10[0][3] B01[3][0]*A10[3][0] B01[3][0]*A10[2][3] B01[3][0]*A10[3][0]) - ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[3][1]*A10[0][3] B01[3][1]*A10[3][0] B01[3][1]*A10[2][3] B01[3][1]*A10[3][0]) - ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[3][2]*A10[0][3] B01[3][2]*A10[3][0] B01[3][2]*A10[2][3] B01[3][2]*A10[3][0]) - ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[3][3]*A10[0][3] B01[3][3]*A10[3][0] B01[3][3]*A10[2][3] B01[3][3]*A10[3][0]) - - ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[3][4]*A10[0][3] B01[3][4]*A10[3][0] B01[3][4]*A10[2][3] B01[3][4]*A10[3][3]) - ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[3][5]*A10[0][3] B01[3][5]*A10[3][0] B01[3][5]*A10[2][3] B01[3][5]*A10[3][3]) - ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[3][6]*A10[0][3] B01[3][6]*A10[3][0] B01[3][6]*A10[2][3] B01[3][6]*A10[3][3]) - ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[3][7]*A10[0][3] B01[3][7]*A10[3][0] B01[3][7]*A10[2][3] B01[3][7]*A10[3][3]) - - a10 += D_MR * cs_a; //pointer math to calculate next block of A for GEMM - b01 = ptr_b01_dup + D_MR; //pointer math to calculate next block of B for GEMM - } - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to hold alpha - - ymm0 = _mm256_loadu_pd((double const *)(b11 + cs_b *0)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b *1)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b *2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b *3)); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm4 = _mm256_loadu_pd((double const *)(b11 + cs_b *4)); //B11[0][4] B11[1][4] B11[2][4] B11[3][4] - ymm5 = _mm256_loadu_pd((double const *)(b11 + cs_b *5)); //B11[0][5] B11[1][5] B11[2][5] B11[3][5] - ymm6 = _mm256_loadu_pd((double const *)(b11 + cs_b *6)); //B11[0][6] B11[1][6] B11[2][6] B11[3][6] - ymm7 = _mm256_loadu_pd((double const *)(b11 + cs_b *7)); //B11[0][7] B11[1][7] B11[2][7] B11[3][7] - - ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm8); //B11[0-3][0] * alpha -= B01[0-3][0] - ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm9); //B11[0-3][1] * alpha -= B01[0-3][1] - ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm10); //B11[0-3][2] * alpha -= B01[0-3][2] - ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm11); //B11[0-3][3] * alpha -= B01[0-3][3] - ymm4 = _mm256_fmsub_pd(ymm4, ymm16, ymm12); //B11[0-3][4] * alpha -= B01[0-3][4] - ymm5 = _mm256_fmsub_pd(ymm5, ymm16, ymm13); //B11[0-3][5] * alpha -= B01[0-3][5] - ymm6 = _mm256_fmsub_pd(ymm6, ymm16, ymm14); //B11[0-3][6] * alpha -= B01[0-3][6] - ymm7 = _mm256_fmsub_pd(ymm7, ymm16, ymm15); //B11[0-3][7] * alpha -= B01[0-3][7] - - ///implement TRSM/// - - ///transpose of B11// - ///unpacklow/// - ymm9 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] - ymm11 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] - - ymm13 = _mm256_unpacklo_pd(ymm4, ymm5); //B11[0][4] B11[0][5] B11[2][4] B11[2][5] - ymm15 = _mm256_unpacklo_pd(ymm6, ymm7); //B11[0][6] B11[0][7] B11[2][6] B11[2][7] - - //rearrange low elements - ymm8 = _mm256_permute2f128_pd(ymm9,ymm11,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] - ymm10 = _mm256_permute2f128_pd(ymm9,ymm11,0x31); //B11[2][0] B11[2][1] B11[2][2] B11[2][3] - - ymm12 = _mm256_permute2f128_pd(ymm13,ymm15,0x20); //B11[4][0] B11[4][1] B11[4][2] B11[4][3] - ymm14 = _mm256_permute2f128_pd(ymm13,ymm15,0x31); //B11[6][0] B11[6][1] B11[6][2] B11[6][3] - - ////unpackhigh//// - ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] - ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] - - ymm4 = _mm256_unpackhi_pd(ymm4, ymm5); //B11[1][4] B11[1][5] B11[3][4] B11[3][5] - ymm5 = _mm256_unpackhi_pd(ymm6, ymm7); //B11[1][6] B11[1][7] B11[3][6] B11[3][7] - - //rearrange high elements - ymm9 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] - ymm11 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] - - ymm13 = _mm256_permute2f128_pd(ymm4,ymm5,0x20); //B11[5][0] B11[5][1] B11[5][2] B11[5][3] - ymm15 = _mm256_permute2f128_pd(ymm4,ymm5,0x31); //B11[7][0] B11[7][1] B11[7][2] B11[7][3] - - ymm0 = _mm256_broadcast_sd((double const *)&ones); - - //broadcast diagonal elements of A11 - ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_b +1)); //A11[1][1] - ymm3 = _mm256_broadcast_sd((double const *)(a11+cs_b*2 + 2)); //A11[2][2] - ymm4 = _mm256_broadcast_sd((double const *)(a11+cs_b*3 + 3)); //A11[3][3] - - ymm5 = _mm256_unpacklo_pd(ymm1, ymm2); //A11[0][0] A11[0][0] A11[1][1] A11[1][1] - ymm6 = _mm256_unpacklo_pd(ymm3, ymm4); //A11[2][2] A11[2][2] A11[3][3] A11[3][3] - - ymm5 = _mm256_blend_pd(ymm5, ymm6, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm0 = _mm256_div_pd(ymm0, ymm5); //1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2] - - //extract a00 - ymm1 = _mm256_permute_pd(ymm0, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] - ymm1 = _mm256_permute2f128_pd(ymm1, ymm1, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0] - - //(Row 0): perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - ymm8 = _mm256_mul_pd(ymm8, ymm1); //B11[0-3][0] /= A11[0][0] - ymm12 = _mm256_mul_pd(ymm12, ymm1); //B11[0-3][4] /= A11[0][0] - - //extract a11 - ymm1 = _mm256_permute_pd(ymm0, 0x03); //1/A11[1][1] 1/A11[1][1] 1/A11[3][3] 1/A11[3][3] - ymm1 = _mm256_permute2f128_pd(ymm1, ymm1, 0x00); //1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1] - - ymm2 = _mm256_broadcast_sd((double const *)(a11 +1)); //A11[1][0] - ymm3 = _mm256_broadcast_sd((double const *)(a11 +2)); //A11[2][0] - ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][0] - - a11 += cs_a; - - //(Row1): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm2, ymm8, ymm9); //B11[1][0-3] -= A11[1][0] * B11[0-3][0] - ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[2][0-3] -= A11[2][0] * B11[0-3][0] - ymm11 = _mm256_fnmadd_pd(ymm4, ymm8, ymm11); //B11[3][0-3] -= A11[3][0] * B11[0-3][0] - - ymm13 = _mm256_fnmadd_pd(ymm2, ymm12, ymm13); //B11[5][0-3] -= A11[1][0] * B11[0-3][4] - ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[6][0-3] -= A11[2][0] * B11[0-3][4] - ymm15 = _mm256_fnmadd_pd(ymm4, ymm12, ymm15); //B11[7][0-3] -= A11[3][0] * B11[0-3][4] - - ymm9 = _mm256_mul_pd(ymm9, ymm1); //B11[0-3][1] /= A11[1][1] - ymm13 = _mm256_mul_pd(ymm13, ymm1); //B11[0-3][5] /= A11[1][1] - - ymm3 = _mm256_broadcast_sd((double const *)(a11 +2)); //A11[2][1] - ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][1] - - a11 += cs_a; - - //extract a22 - ymm1 = _mm256_permute_pd(ymm0, 0x00); //1/A11[0][0] 1/A110[][0] 1/A11[2][2] 1/A11[2][2] - ymm1 = _mm256_permute2f128_pd(ymm1, ymm1, 0x11); //1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2] - - //(ROw2): FMA operations - ymm10 = _mm256_fnmadd_pd(ymm3, ymm9, ymm10); //B11[2][0-3] -= A11[2][1] * B11[0-3][1] - ymm11 = _mm256_fnmadd_pd(ymm4, ymm9, ymm11); //B11[3][0-3] -= A11[3][1] * B11[0-3][1] - - ymm14 = _mm256_fnmadd_pd(ymm3, ymm13, ymm14); //B11[6][0-3] -= A11[2][1] * B11[0-3][5] - ymm15 = _mm256_fnmadd_pd(ymm4, ymm13, ymm15); //B11[7][0-3] -= A11[3][1] * B11[0-3][5] - - //perform mul operation - ymm10 = _mm256_mul_pd(ymm10, ymm1); //B11[0-3][2] /= A11[2][2] - ymm14 = _mm256_mul_pd(ymm14, ymm1); //B11[0-3][6] /= A11[2][2] - - ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][2] - - a11 += cs_a; - - //extract a33 - ymm1 = _mm256_permute_pd(ymm0, 0x0C); //1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] - ymm1 = _mm256_permute2f128_pd(ymm1, ymm1, 0x11);//1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3] - - //(ROw2): FMA operations - ymm11 = _mm256_fnmadd_pd(ymm4, ymm10, ymm11); //B11[3][0-3] -= A11[3][2] * B11[0-3][2] - - ymm15 = _mm256_fnmadd_pd(ymm4, ymm14, ymm15); //B11[7][0-3] -= A11[3][2] * B11[0-3][6] - - //perform mul operation - ymm11 = _mm256_mul_pd(ymm11, ymm1); //B11[0-3][3] /= A11[3][3] - ymm15 = _mm256_mul_pd(ymm15, ymm1); //B11[0-3][7] /= A11[3][3] - - //unpacklow// - ymm1 = _mm256_unpacklo_pd(ymm8, ymm9); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] - ymm3 = _mm256_unpacklo_pd(ymm10, ymm11); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] - - ymm5 = _mm256_unpacklo_pd(ymm12, ymm13); //B11[4][0] B11[5][0] B11[4][2] B11[5][2] - ymm7 = _mm256_unpacklo_pd(ymm14, ymm15); //B11[6][0] B11[7][0] B11[6][2] B11[7][2] - - //rearrange low elements - ymm0 = _mm256_permute2f128_pd(ymm1, ymm3, 0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm2 = _mm256_permute2f128_pd(ymm1, ymm3, 0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - - ymm4 = _mm256_permute2f128_pd(ymm5, ymm7, 0x20); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] - ymm6 = _mm256_permute2f128_pd(ymm5, ymm7, 0x31); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] - - ///unpack high/// - ymm8 = _mm256_unpackhi_pd(ymm8, ymm9); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] - ymm9 = _mm256_unpackhi_pd(ymm10, ymm11); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] - - ymm12 = _mm256_unpackhi_pd(ymm12, ymm13); //B11[4][1] B11[5][1] B11[4][3] B11[5][3] - ymm13 = _mm256_unpackhi_pd(ymm14, ymm15); //B11[6][1] B11[7][1] B11[6][3] B11[7][3] - - //rearrange high elements - ymm1 = _mm256_permute2f128_pd(ymm8, ymm9, 0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm3 = _mm256_permute2f128_pd(ymm8, ymm9, 0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - ymm5 = _mm256_permute2f128_pd(ymm12, ymm13, 0x20); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] - ymm7 = _mm256_permute2f128_pd(ymm12, ymm13, 0x31); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] - - _mm256_storeu_pd((double *)(b11 + cs_b * 0), ymm0); //store B11[0][0-3] - _mm256_storeu_pd((double *)(b11 + cs_b * 1), ymm1); //store B11[1][0-3] - _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store B11[2][0-3] - _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store B11[3][0-3] - _mm256_storeu_pd((double *)(b11 + cs_b * 4), ymm4); //store B11[4][0-3] - _mm256_storeu_pd((double *)(b11 + cs_b * 5), ymm5); //store B11[5][0-3] - _mm256_storeu_pd((double *)(b11 + cs_b * 6), ymm6); //store B11[6][0-3] - _mm256_storeu_pd((double *)(b11 + cs_b * 7), ymm7); //store B11[7][0-3] - } - - if(m_remainder) //implementation for reamainder rows(when 'M' is not a multiple of D_MR) - { - a10 = L +i; //pointer to block of A to be used for GEMM - a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM - b01 = B + j*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM - - k_iter = i / D_MR; //number of times GEMM operation to be done(in blocks of 4x4) - - ymm8 = _mm256_setzero_pd(); - ymm9 = _mm256_setzero_pd(); - ymm10 = _mm256_setzero_pd(); - ymm11 = _mm256_setzero_pd(); - ymm12 = _mm256_setzero_pd(); - ymm13 = _mm256_setzero_pd(); - ymm14 = _mm256_setzero_pd(); - ymm15 = _mm256_setzero_pd(); - - ///GEMM code Begins/// - for(k = 0; k< k_iter; k++) //loop for number of GEMM operations - { - ptr_b01_dup = b01; - - ymm16 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] - - ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] - ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] - ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] - ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] - - ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[0][4] - ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[0][5] - ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[0][6] - ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[0][7] - - b01 += 1; //move to next row of B - - ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0] ) - ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) - ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) - ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) - - ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[0][4]*A10[0][0] B01[0][4]*A10[1][0] B01[0][4]*A10[2][0] B01[0][4]*A10[3][0]) - ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[0][5]*A10[0][0] B01[0][5]*A10[1][0] B01[0][5]*A10[2][0] B01[0][5]*A10[3][0]) - ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[0][6]*A10[0][0] B01[0][6]*A10[1][0] B01[0][6]*A10[2][0] B01[0][6]*A10[3][0]) - ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm16 += (B01[0][7]*A10[0][0] B01[0][7]*A10[1][0] B01[0][7]*A10[2][0] B01[0][7]*A10[3][0]) - - ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 1)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] - - ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] - ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] - ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] - ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] - - ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[1][4] - ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[1][5] - ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[1][6] - ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[1][7] - - b01 += 1; //move to next row of B01 - - ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) - ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) - ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) - ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) - - ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[1][4]*A10[0][1] B01[1][4]*A10[1][1] B01[1][4]*A10[2][1] B01[1][4]*A10[3][1]) - ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[1][5]*A10[0][1] B01[1][5]*A10[1][1] B01[1][5]*A10[2][1] B01[1][5]*A10[3][1]) - ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[1][6]*A10[0][1] B01[1][6]*A10[1][1] B01[1][6]*A10[2][1] B01[1][6]*A10[3][1]) - ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[1][7]*A10[0][1] B01[1][7]*A10[1][1] B01[1][7]*A10[2][1] B01[1][7]*A10[3][1]) - - ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2)); //A10[0][2] //A10[1][2] A10[2][2] A10[3][2] - - ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] - ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] - ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] - ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] - - ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[2][4] - ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[2][5] - ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[2][6] - ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[2][7] - - b01 += 1; //move to next row of B - - ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) - ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) - ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) - ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) - - ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[2][4]*A10[0][2] B01[2][4]*A10[1][2] B01[2][4]*A10[2][2] B01[2][0]*A10[3][2]) - ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[2][5]*A10[0][2] B01[2][5]*A10[1][2] B01[2][5]*A10[2][2] B01[2][1]*A10[3][2]) - ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[2][6]*A10[0][2] B01[2][6]*A10[1][2] B01[2][6]*A10[2][2] B01[2][2]*A10[3][2]) - ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[2][7]*A10[0][2] B01[2][7]*A10[1][2] B01[2][7]*A10[2][2] B01[2][3]*A10[3][2]) - - ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] - - ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] - ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] - ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] - ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] - - ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[3][4] - ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[3][5] - ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[3][6] - ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[3][7] - - b01 += 1; //move to next row of B - - ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) - ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm8 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) - ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm8 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) - ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm8 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) - - ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm8 += (B01[3][0]*A10[0][3] B01[3][4]*A10[1][3] B01[3][4]*A10[2][3] B01[3][4]*A10[3][3]) - ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm8 += (B01[3][1]*A10[0][3] B01[3][5]*A10[1][3] B01[3][5]*A10[2][3] B01[3][5]*A10[3][3]) - ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm8 += (B01[3][2]*A10[0][3] B01[3][6]*A10[1][3] B01[3][6]*A10[2][3] B01[3][6]*A10[3][3]) - ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm8 += (B01[3][3]*A10[0][3] B01[3][7]*A10[1][3] B01[3][7]*A10[2][3] B01[3][7]*A10[3][3]) - - a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM - b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM - } - - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha value - - ymm0 = _mm256_loadu_pd((double const *)(b11 + cs_b *0)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b *1)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b *2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b *3)); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm4 = _mm256_loadu_pd((double const *)(b11 + cs_b *4)); //B11[0][4] B11[1][4] B11[2][4] B11[3][4] - ymm5 = _mm256_loadu_pd((double const *)(b11 + cs_b *5)); //B11[0][5] B11[1][5] B11[2][5] B11[3][5] - ymm6 = _mm256_loadu_pd((double const *)(b11 + cs_b *6)); //B11[0][6] B11[1][6] B11[2][6] B11[3][6] - ymm7 = _mm256_loadu_pd((double const *)(b11 + cs_b *7)); //B11[0][7] B11[1][7] B11[2][7] B11[3][7] - - ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm8); //B11[0-3][0] *alpha -= B01[0-3][0] - ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm9); //B11[0-3][1] *alpha -= B01[0-3][1] - ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm10); //B11[0-3][2] *alpha -= B01[0-3][2] - ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm11); //B11[0-3][3] *alpha -= B01[0-3][3] - ymm4 = _mm256_fmsub_pd(ymm4, ymm16, ymm12); //B11[0-3][4] *alpha -= B01[0-3][4] - ymm5 = _mm256_fmsub_pd(ymm5, ymm16, ymm13); //B11[0-3][5] *alpha -= B01[0-3][5] - ymm6 = _mm256_fmsub_pd(ymm6, ymm16, ymm14); //B11[0-3][6] *alpha -= B01[0-3][6] - ymm7 = _mm256_fmsub_pd(ymm7, ymm16, ymm15); //B11[0-3][7] *alpha -= B01[0-3][7] - - ///implement TRSM/// - - ///unpacklow/// - ymm9 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] - ymm11 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] - - ymm13 = _mm256_unpacklo_pd(ymm4, ymm5); //B11[0][4] B11[0][5] B11[1][4] B11[1][5] - ymm15 = _mm256_unpacklo_pd(ymm6, ymm7); //B11[0][6] B11[0][7] B11[1][6] B11[1][7] - - //rearrange low elements - ymm8 = _mm256_permute2f128_pd(ymm9,ymm11,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] - ymm10 = _mm256_permute2f128_pd(ymm9,ymm11,0x31); //B11[2][0] B11[2][1] B11[2][2] B11[2][3] - - ymm12 = _mm256_permute2f128_pd(ymm13,ymm15,0x20); //B11[4][0] B11[4][1] B11[4][2] B11[4][3] - ymm14 = _mm256_permute2f128_pd(ymm13,ymm15,0x31); //B11[6][0] B11[6][1] B11[6][2] B11[6][3] - - ////unpackhigh//// - ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] - ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] - - ymm4 = _mm256_unpackhi_pd(ymm4, ymm5); //B11[5][0] B11[5][1] B11[7][0] B11[7][1] - ymm5 = _mm256_unpackhi_pd(ymm6, ymm7); //B11[5][2] B11[5][3] B11[7][2] B11[7][3] - - //rearrange high elements - ymm9 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] - ymm11 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] - - ymm13 = _mm256_permute2f128_pd(ymm4,ymm5,0x20); //B11[5][0] B11[5][1] B11[5][2] B11[5][3] - ymm15 = _mm256_permute2f128_pd(ymm4,ymm5,0x31); //B11[7][0] B11[7][1] B11[7][2] B11[7][3] - - - ymm0 = _mm256_broadcast_sd((double const *)&ones); - - //broadcast diagonal elements of A11 - ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_b +1)); //A11[1][1] - ymm3 = _mm256_broadcast_sd((double const *)(a11+cs_b*2 + 2)); //A11[2][2] - ymm4 = _mm256_broadcast_sd((double const *)(a11+cs_b*3 + 3)); //A11[3][3] - - ymm5 = _mm256_unpacklo_pd(ymm1, ymm2); //A11[0][0] A11[0][0] A11[1][1] A11[1][1] - ymm6 = _mm256_unpacklo_pd(ymm3, ymm4); //A11[2][2] A11[2][2] A11[3][3] A11[3][3] - - ymm5 = _mm256_blend_pd(ymm5, ymm6, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm0 = _mm256_div_pd(ymm0, ymm5); //1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] - - //extract a00 - ymm1 = _mm256_permute_pd(ymm0, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] - ymm1 = _mm256_permute2f128_pd(ymm1, ymm1, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0] - - //(Row 0): perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - ymm8 = _mm256_mul_pd(ymm8, ymm1); //B11[0-3][0] /= A11[0][0] - ymm12 = _mm256_mul_pd(ymm12, ymm1); //B11[0-3][4] /= A11[0][0] - - //extract a11 - ymm1 = _mm256_permute_pd(ymm0, 0x03); //1/A11[1][1] 1/A11[1][1] 1/A11[3][3] 1/A11[3][3] - ymm1 = _mm256_permute2f128_pd(ymm1, ymm1, 0x00); //1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1] - - ymm2 = _mm256_broadcast_sd((double const *)(a11 +1)); //A11[1][0] - ymm3 = _mm256_broadcast_sd((double const *)(a11 +2)); //A11[2][0] - ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][0] - - a11 += cs_a; - - //(Row1): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm2, ymm8, ymm9); //B11[1][0-3] -= B11[0-3][0]*A11[1][0] - ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[2][0-3] -= B11[0-3][0]*A11[2][0] - ymm11 = _mm256_fnmadd_pd(ymm4, ymm8, ymm11); //B11[3][0-3] -= B11[0-3][0]*A11[3][0] - - ymm13 = _mm256_fnmadd_pd(ymm2, ymm12, ymm13); //B11[5][0-3] -= B11[0-3][4]*A11[1][4] - ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[6][0-3] -= B11[0-3][4]*A11[2][4] - ymm15 = _mm256_fnmadd_pd(ymm4, ymm12, ymm15); //B11[7][0-3] -= B11[0-3][4]*A11[3][4] - - ymm9 = _mm256_mul_pd(ymm9, ymm1); //B11[0-3][1] /= A11[1][1] - ymm13 = _mm256_mul_pd(ymm13, ymm1); //B11[0-3][5] /= A11[1][1] - - ymm3 = _mm256_broadcast_sd((double const *)(a11 +2)); //A11[2][1] - ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][1] - - a11 += cs_a; - - //extract a22 - ymm1 = _mm256_permute_pd(ymm0, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] - ymm1 = _mm256_permute2f128_pd(ymm1, ymm1, 0x11); //1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2] - - //(ROw2): FMA operations - ymm10 = _mm256_fnmadd_pd(ymm3, ymm9, ymm10); //B11[2][0-3] -= A11[2][1] * B11[0-3][1] - ymm11 = _mm256_fnmadd_pd(ymm4, ymm9, ymm11); //B11[3][0-3] -= A11[3][1] * B11[0-3][1] - - ymm14 = _mm256_fnmadd_pd(ymm3, ymm13, ymm14); //B11[6][0-3] -= A11[2][1] * B11[0-3][5] - ymm15 = _mm256_fnmadd_pd(ymm4, ymm13, ymm15); //B11[7][0-3] -= A11[3][1] * B11[0-3][5] - - //perform mul operation - ymm10 = _mm256_mul_pd(ymm10, ymm1); //B11[0-3][2] /=A11[2][2] - ymm14 = _mm256_mul_pd(ymm14, ymm1); //B11[0-3][6] /= A11[2][2] - - ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][2] - - a11 += cs_a; - - //extract a33 - ymm1 = _mm256_permute_pd(ymm0, 0x0C); //1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] - ymm1 = _mm256_permute2f128_pd(ymm1, ymm1, 0x11); //1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3] - - //(ROw2): FMA operations - ymm11 = _mm256_fnmadd_pd(ymm4, ymm10, ymm11); //B11[0-3][3] -= A11[3][2]*B11[0-3][2] - - ymm15 = _mm256_fnmadd_pd(ymm4, ymm14, ymm15); //B11[0-3][7] -= A11[3][2]*B11[0-3][6] - - //perform mul operation - ymm11 = _mm256_mul_pd(ymm11, ymm1); //B11[0-3][3] /= A11[3][3] - ymm15 = _mm256_mul_pd(ymm15, ymm1); //B11[0-3][7] /= A11[3][3] - - //unpacklow// - ymm1 = _mm256_unpacklo_pd(ymm8, ymm9); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] - ymm3 = _mm256_unpacklo_pd(ymm10, ymm11); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] - - ymm5 = _mm256_unpacklo_pd(ymm12, ymm13); //B11[4][0] B11[5][0] B11[4][2] B11[5][2] - ymm7 = _mm256_unpacklo_pd(ymm14, ymm15); //B11[6][0] B11[7][0] B11[6][2] B11[7][2] - - //rearrange low elements - ymm0 = _mm256_permute2f128_pd(ymm1, ymm3, 0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm2 = _mm256_permute2f128_pd(ymm1, ymm3, 0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - - ymm4 = _mm256_permute2f128_pd(ymm5, ymm7, 0x20); //B11[0][4] B11[1][4] B11[2][4] B11[3][4] - ymm6 = _mm256_permute2f128_pd(ymm5, ymm7, 0x31); //B11[0][6] B11[1][6] B11[2][6] B11[3][6] - - ///unpack high/// - ymm8 = _mm256_unpackhi_pd(ymm8, ymm9); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] - ymm9 = _mm256_unpackhi_pd(ymm10, ymm11); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] - - ymm12 = _mm256_unpackhi_pd(ymm12, ymm13); //B11[0][5] B11[1][5] B11[0][7] B11[1][7] - ymm13 = _mm256_unpackhi_pd(ymm14, ymm15); //B11[2][5] B11[3][5] B11[2][7] B11[3][7] - - //rearrange high elements - ymm1 = _mm256_permute2f128_pd(ymm8, ymm9, 0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm3 = _mm256_permute2f128_pd(ymm8, ymm9, 0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - ymm5 = _mm256_permute2f128_pd(ymm12, ymm13, 0x20); //B11[0][5] B11[1][5] B11[2][5] B11[3][5] - ymm7 = _mm256_permute2f128_pd(ymm12, ymm13, 0x31); //B11[0][7] B11[1][7] B11[2][7] B11[3][7] - - ymm8 = _mm256_loadu_pd((double const *)(b11 + cs_b * 0)); //load B11[0-3][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b * 1)); //load B11[0-3][1] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //load B11[0-3][2] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //load B11[0-3][3] - ymm12 = _mm256_loadu_pd((double const *)(b11 + cs_b * 4)); //load B11[0-3][4] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b * 5)); //load B11[0-3][5] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b * 6)); //load B11[0-3][6] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b * 7)); //load B11[0-3][7] - //determine correct values to store - if(m_remainder == 3) - { - ymm0 = _mm256_blend_pd(ymm0, ymm8, 0x08); - ymm1 = _mm256_blend_pd(ymm1, ymm9, 0x08); - ymm2 = _mm256_blend_pd(ymm2, ymm10, 0x08); - ymm3 = _mm256_blend_pd(ymm3, ymm11, 0x08); - ymm4 = _mm256_blend_pd(ymm4, ymm12, 0x08); - ymm5 = _mm256_blend_pd(ymm5, ymm13, 0x08); - ymm6 = _mm256_blend_pd(ymm6, ymm14, 0x08); - ymm7 = _mm256_blend_pd(ymm7, ymm15, 0x08); - } - if(m_remainder == 2) - { - ymm0 = _mm256_permute2f128_pd(ymm0, ymm8, 0x30); - ymm1 = _mm256_permute2f128_pd(ymm1, ymm9, 0x30); - ymm2 = _mm256_permute2f128_pd(ymm2, ymm10, 0x30); - ymm3 = _mm256_permute2f128_pd(ymm3, ymm11, 0x30); - ymm4 = _mm256_permute2f128_pd(ymm4, ymm12, 0x30); - ymm5 = _mm256_permute2f128_pd(ymm5, ymm13, 0x30); - ymm6 = _mm256_permute2f128_pd(ymm6, ymm14, 0x30); - ymm7 = _mm256_permute2f128_pd(ymm7, ymm15, 0x30); - } - if(m_remainder == 1) - { - ymm0 = _mm256_blend_pd(ymm0, ymm8, 0x0E); - ymm1 = _mm256_blend_pd(ymm1, ymm9, 0x0E); - ymm2 = _mm256_blend_pd(ymm2, ymm10, 0x0E); - ymm3 = _mm256_blend_pd(ymm3, ymm11, 0x0E); - ymm4 = _mm256_blend_pd(ymm4, ymm12, 0x0E); - ymm5 = _mm256_blend_pd(ymm5, ymm13, 0x0E); - ymm6 = _mm256_blend_pd(ymm6, ymm14, 0x0E); - ymm7 = _mm256_blend_pd(ymm7, ymm15, 0x0E); - } - - _mm256_storeu_pd((double *)(b11 + cs_b * 0), ymm0); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + cs_b * 1), ymm1); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[0-3][3]) - _mm256_storeu_pd((double *)(b11 + cs_b * 4), ymm4); //store(B11[0-3][4]) - _mm256_storeu_pd((double *)(b11 + cs_b * 5), ymm5); //store(B11[0-3][5]) - _mm256_storeu_pd((double *)(b11 + cs_b * 6), ymm6); //store(B11[0-3][6]) - _mm256_storeu_pd((double *)(b11 + cs_b * 7), ymm7); //store(B11[0-3][7]) - - } - } - - if((n & 4)) //implementation for remainder columns(when 'N' is a multiple of 4) - { - for(i = 0;i+D_MR-1 < m; i += D_MR) //loop along 'M' direction - { - a10 = L +i; //pointer to block of A to be used for GEMM - a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM - b01 = B + j*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM - - k_iter = i / D_MR; //number of times GEMM to be performed(in block of 4) - ///GEMM for previously calculated values /// - - //load 4x4 block from b11 - ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b*2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b*3)); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_b01_dup = b01; - ymm8 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] - ymm9 = _mm256_loadu_pd((double const *)(a10 + cs_a)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] - ymm10 = _mm256_loadu_pd((double const *)(a10 + cs_a*2)); //A10[0][2] A10[1][2] A10[2][2] A10[3][2] - ymm11 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] - - b01 += 1; //move to next row of B - - ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B01[2][1]*A10[1][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B01[2][2]*A10[2][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B01[2][3]*A10[3][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) - - - a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM - b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM - - } - - ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm4); //B11[0-3][0] *alpha -= ymm4 - ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm5); //B01[0-3][1] *alpha -= ymm5 - ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm6); //B01[0-3][2] *alpha -= ymm6 - ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm7); //B01[0-3][3] *alpha -= ymm7 - - ///implement TRSM/// - //1st col - ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][0] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][0] - ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][0] - - //2nd col - a11 += cs_a; - ymm8 = _mm256_broadcast_sd((double const *)(a11 + 1)); //A11[1][1] - ymm9 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][1] - - //3rd col - a11 += cs_a; - ymm11 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][2] - ymm12 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][2] - - //4th col - a11 += cs_a; - ymm13 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][3] - //compute reciprocals of L(i,i) and broadcast in registers - ymm4 = _mm256_unpacklo_pd(ymm4, ymm8); //A11[0][0] A11[0][0] A11[2][2] A11[2][2] - ymm8 = _mm256_unpacklo_pd(ymm11, ymm13); //A11[1][1] A11[1][1] A11[3][3] A11[3][3] - - ymm14 = _mm256_broadcast_sd((double const *)&ones); - - ymm4 = _mm256_blend_pd(ymm4, ymm8, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm14 = _mm256_div_pd(ymm14, ymm4); //1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] - - ////unpacklow//// - ymm8 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] - ymm13 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] - - //rearrange low elements - ymm4 = _mm256_permute2f128_pd(ymm8,ymm13,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] - ymm11 = _mm256_permute2f128_pd(ymm8,ymm13,0x31);//B11[2][0] B11[2][1] B11[2][2] B11[2][3] -/* - mat_b_rearr[0] = _mm256_mul_pd(mat_b_rearr[0], alphaReg); - mat_b_rearr[2] = _mm256_mul_pd(mat_b_rearr[2], alphaReg); -*/ - ////unpackhigh//// - ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] - ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] - - //rearrange high elements - ymm8 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] - ymm13 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] -/* - mat_b_rearr[1] = _mm256_mul_pd(mat_b_rearr[1], alphaReg); - mat_b_rearr[3] = _mm256_mul_pd(mat_b_rearr[3], alphaReg); -*/ - //extract a00 - ymm15 = _mm256_permute_pd(ymm14, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0] - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - ymm4 = _mm256_mul_pd(ymm4, ymm15); //B11[0][0-3] /= A11[0][0] - - //extract diag a11 from a - ymm15 = _mm256_permute_pd(ymm14, 0x03); //1/A11[1][1] 1/A11[1][1] 1/A11[3][3] 1/A11[3][3] - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1] - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (3, 0) - ymm8 = _mm256_fnmadd_pd(ymm5, ymm4, ymm8);//d = c - (a*b) //B11[1][0-3] -= A11[1][0]*B11[0][0-3] - ymm11 = _mm256_fnmadd_pd(ymm6, ymm4, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][0]*B11[0][0-3] - ymm13 = _mm256_fnmadd_pd(ymm7, ymm4, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][0]*B11[0][0-3] - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - ymm8 = _mm256_mul_pd(ymm8, ymm15); //B11[1][0-3] /= A11[1][1] - - - //extract diag a22 from a - ymm15 = _mm256_permute_pd(ymm14, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2] - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - ymm11 = _mm256_fnmadd_pd(ymm9, ymm8, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][1]*B11[1][0-3] - ymm13 = _mm256_fnmadd_pd(ymm10, ymm8, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][1]*B11[1][0-3] - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - ymm11 = _mm256_mul_pd(ymm11, ymm15); //B11[2][0-3] /= A11[2][2] - - //extract diag a33 from a - ymm15 = _mm256_permute_pd(ymm14, 0x0C); //1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3] - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - ymm13 = _mm256_fnmadd_pd(ymm12, ymm11, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][2]*B11[2][0-3] - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - ymm13 = _mm256_mul_pd(ymm13, ymm15); //B11[3][0-3] /= A11[3][3] - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - ymm1 = _mm256_unpacklo_pd(ymm4, ymm8); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] - ymm3 = _mm256_unpacklo_pd(ymm11, ymm13); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] - - //rearrange low elements - ymm0 = _mm256_permute2f128_pd(ymm1,ymm3,0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm2 = _mm256_permute2f128_pd(ymm1,ymm3,0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - - ////unpackhigh//// - ymm14 = _mm256_unpackhi_pd(ymm4, ymm8); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] - - ymm15 = _mm256_unpackhi_pd(ymm11, ymm13); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] - - //rearrange high elements - ymm1 = _mm256_permute2f128_pd(ymm14,ymm15,0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm3 = _mm256_permute2f128_pd(ymm14,ymm15,0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b*2), ymm2); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b*3), ymm3); //store(B11[0-3][3]) - - } - if(m_remainder) //implementation for remainder rows(when 'M' is not a multiple of D_MR) - { - a10 = L +i; //pointer to block of A to be used for GEMM - a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM - b01 = B + j*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha - - k_iter = i / D_MR; //number of GEMM operations to be performed(in blocks of 4x4) - - ///GEMM for previously calculated values /// - - //load 4x4 block from b11 - ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - for(k = 0; k < k_iter; k++) //looop for number of GEMM operations - { - ptr_b01_dup = b01; - - ymm8 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] - ymm9 = _mm256_loadu_pd((double const *)(a10 + cs_a)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] - ymm10 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2)); //A10[0][2] A10[1][2] A10[2][2] A10[3][2] - ymm11 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) - - a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM - b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM - - } - - ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm4); //B11[0-3][0] *alpha -= ymm4 - ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm5); //B11[0-3][1] *alpha -= ymm5 - ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm6); //B11[0-3][2] *alpha -= ymm6 - ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm7); //B11[0-3][3] *alpha -= ymm7 - - ///implement TRSM/// - //1st col - ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][0] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][0] - ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][0] - - //2nd col - a11 += cs_a; - ymm8 = _mm256_broadcast_sd((double const *)(a11 + 1)); //A11[1][1] - ymm9 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][1] - - //3rd col - a11 += cs_a; - ymm11 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][2] - ymm12 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][2] - - //4th col - a11 += cs_a; - ymm13 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][3] - //compute reciprocals of L(i,i) and broadcast in registers - ymm4 = _mm256_unpacklo_pd(ymm4, ymm8); //A11[0][0] A11[0][0] A11[1][1] A11[1][1] - ymm8 = _mm256_unpacklo_pd(ymm11, ymm13); //A11[2][2] A11[2][2] A11[3][3] A11[3][3] - - ymm14 = _mm256_broadcast_sd((double const *)&ones); - - ymm4 = _mm256_blend_pd(ymm4, ymm8, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm14 = _mm256_div_pd(ymm14, ymm4); //1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] - - ////unpacklow//// - ymm8 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] - ymm13 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] - - //rearrange low elements - ymm4 = _mm256_permute2f128_pd(ymm8,ymm13,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] - ymm11 = _mm256_permute2f128_pd(ymm8,ymm13,0x31);//B11[2][0] B11[2][1] B11[2][2] B11[2][3] -/* - mat_b_rearr[0] = _mm256_mul_pd(mat_b_rearr[0], alphaReg); - mat_b_rearr[2] = _mm256_mul_pd(mat_b_rearr[2], alphaReg); -*/ - ////unpackhigh//// - ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] - ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] - - //rearrange high elements - ymm8 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] - ymm13 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] -/* - mat_b_rearr[1] = _mm256_mul_pd(mat_b_rearr[1], alphaReg); - mat_b_rearr[3] = _mm256_mul_pd(mat_b_rearr[3], alphaReg); -*/ - //extract a00 - ymm15 = _mm256_permute_pd(ymm14, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00);//1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0] - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - ymm4 = _mm256_mul_pd(ymm4, ymm15); //B11[0][0-3] /= A11[0][0] - - //extract diag a11 from a - ymm15 = _mm256_permute_pd(ymm14, 0x03); //1/A11[1][1] 1/A11[1][1] 1/A11[3][3] 1/A11[3][3] - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //1/A11[][] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1] - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (3, 0) - ymm8 = _mm256_fnmadd_pd(ymm5, ymm4, ymm8);//d = c - (a*b) //B11[1][0-3] -= A11[1][0]* B11[0][0-3] - ymm11 = _mm256_fnmadd_pd(ymm6, ymm4, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][0]* B11[0][0-3] - ymm13 = _mm256_fnmadd_pd(ymm7, ymm4, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][0]* B11[0][0-3] - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - ymm8 = _mm256_mul_pd(ymm8, ymm15); //B11[1][0-3] /= A11[1][1] - - - //extract diag a22 from a - ymm15 = _mm256_permute_pd(ymm14, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2] - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - ymm11 = _mm256_fnmadd_pd(ymm9, ymm8, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][1]* B11[1][0-3] - ymm13 = _mm256_fnmadd_pd(ymm10, ymm8, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][1]* B11[1][0-3] - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - ymm11 = _mm256_mul_pd(ymm11, ymm15); //B11[2][0-3] /= A11[2][2] - - //extract diag a33 from a - ymm15 = _mm256_permute_pd(ymm14, 0x0C); //1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3] - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - ymm13 = _mm256_fnmadd_pd(ymm12, ymm11, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][2]* B11[2][0-3] - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - ymm13 = _mm256_mul_pd(ymm13, ymm15); //B11[3][0-3] /= A11[3][3] - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - ymm1 = _mm256_unpacklo_pd(ymm4, ymm8); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] - ymm3 = _mm256_unpacklo_pd(ymm11, ymm13); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] - - //rearrange low elements - ymm0 = _mm256_permute2f128_pd(ymm1,ymm3,0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm2 = _mm256_permute2f128_pd(ymm1,ymm3,0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - - ////unpackhigh//// - ymm14 = _mm256_unpackhi_pd(ymm4, ymm8); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] - - ymm15 = _mm256_unpackhi_pd(ymm11, ymm13); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] - - //rearrange high elements - ymm1 = _mm256_permute2f128_pd(ymm14,ymm15,0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm3 = _mm256_permute2f128_pd(ymm14,ymm15,0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - //load 4x4 block from b11 - ymm4 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm5 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm6 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm7 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][3] B11[1][3] B11[2][2] B11[3][3] - - //determine correct values to store - - if(m_remainder == 3) - { - ymm0 = _mm256_blend_pd(ymm0, ymm4, 0x08); - ymm1 = _mm256_blend_pd(ymm1, ymm5, 0x08); - ymm2 = _mm256_blend_pd(ymm2, ymm6, 0x08); - ymm3 = _mm256_blend_pd(ymm3, ymm7, 0x08); - } - if(m_remainder == 2) - { - ymm0 = _mm256_permute2f128_pd(ymm0, ymm4,0x30); - ymm1 = _mm256_permute2f128_pd(ymm1, ymm5,0x30); - ymm2 = _mm256_permute2f128_pd(ymm2, ymm6,0x30); - ymm3 = _mm256_permute2f128_pd(ymm3, ymm7,0x30); - } - if(m_remainder == 1) - { - ymm0 = _mm256_blend_pd(ymm0, ymm4, 0x0E); - ymm1 = _mm256_blend_pd(ymm1, ymm5, 0x0E); - ymm2 = _mm256_blend_pd(ymm2, ymm6, 0x0E); - ymm3 = _mm256_blend_pd(ymm3, ymm7, 0x0E); - } - - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[0-3][3]) - - } - - n_remainder -= 4; - j += 4; - - } - - if(n_remainder) //implementation fo remaining columns(when 'N' is not a multiple of D_NR) - { - for(i = 0;i+D_MR-1 < m; i += D_MR) //loop along 'M' direction - { - a10 = L +i; //pointer to block of A to be used for GEMM - a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM - b01 = B + j*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM - - k_iter = i / D_MR; //number of GEMM operations to be performed(in blocks of 4x4) - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha Value - - ///GEMM for previously calculated values /// - - //load 4x4 block from b11 - if(n_remainder == 3) - { - ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm3 = _mm256_broadcast_sd((double const *)&ones); - } - if(n_remainder == 2) - { - ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_broadcast_sd((double const *)&ones); - ymm3 = _mm256_broadcast_sd((double const *)&ones); - } - if(n_remainder == 1) - { - ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_broadcast_sd((double const *)&ones); - ymm2 = _mm256_broadcast_sd((double const *)&ones); - ymm3 = _mm256_broadcast_sd((double const*)&ones); - } - - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - for(k = 0; k < k_iter; k++) - { - ptr_b01_dup = b01; - ymm8 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] - ymm9 = _mm256_loadu_pd((double const *)(a10 + cs_a)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] - ymm10 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2)); //A10[0][2] A10[1][2] A10[2][2] A10[3][2] - ymm11 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) - - a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM - b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM - } - - ///GEMM code ends/// - - ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm4); //B11[0-3][0] *alpha -= ymm4 - ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm5); //B11[0-3][1] *alpha -= ymm5 - ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm6); //B11[0-3][2] *alpha -= ymm6 - ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm7); //B11[0-3][3] *alpha -= ymm7 - - ///implement TRSM/// - //1st col - ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][0] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][0] - ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][0] - - //2nd col - a11 += cs_a; - ymm8 = _mm256_broadcast_sd((double const *)(a11 + 1)); //A11[1][1] - ymm9 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][1] - - //3rd col - a11 += cs_a; - ymm11 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][2] - ymm12 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][2] - - //4th col - a11 += cs_a; - ymm13 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][3] - //compute reciprocals of L(i,i) and broadcast in registers - ymm4 = _mm256_unpacklo_pd(ymm4, ymm8); //A11[0][0] A11[0][0] A11[1][1] A11[1][1] - ymm8 = _mm256_unpacklo_pd(ymm11, ymm13); //A11[2][2] A11[2][2] A11[3][3] A11[3][3] - - ymm14 = _mm256_broadcast_sd((double const *)&ones); - - ymm4 = _mm256_blend_pd(ymm4, ymm8, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm14 = _mm256_div_pd(ymm14, ymm4); //1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] - - ////unpacklow//// - ymm8 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] - ymm13 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] - - //rearrange low elements - ymm4 = _mm256_permute2f128_pd(ymm8,ymm13,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] - ymm11 = _mm256_permute2f128_pd(ymm8,ymm13,0x31);//B11[2][0] B11[2][1] B11[2][2] B11[2][3] -/* - mat_b_rearr[0] = _mm256_mul_pd(mat_b_rearr[0], alphaReg); - mat_b_rearr[2] = _mm256_mul_pd(mat_b_rearr[2], alphaReg); -*/ - ////unpackhigh//// - ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] - ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] - - //rearrange high elements - ymm8 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] - ymm13 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] -/* - mat_b_rearr[1] = _mm256_mul_pd(mat_b_rearr[1], alphaReg); - mat_b_rearr[3] = _mm256_mul_pd(mat_b_rearr[3], alphaReg); -*/ - //extract a00 - ymm15 = _mm256_permute_pd(ymm14, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0] - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - ymm4 = _mm256_mul_pd(ymm4, ymm15); //B11[0][0-3] /= A11[0][0] - - //extract diag a11 from a - ymm15 = _mm256_permute_pd(ymm14, 0x03); //1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2] - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1] - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (3, 0) - ymm8 = _mm256_fnmadd_pd(ymm5, ymm4, ymm8);//d = c - (a*b) //B11[1][0-3] -= A11[1][0] * B11[0][0-3] - ymm11 = _mm256_fnmadd_pd(ymm6, ymm4, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][0] * B11[0][0-3] - ymm13 = _mm256_fnmadd_pd(ymm7, ymm4, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][0] * B11[0][0-3] - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - ymm8 = _mm256_mul_pd(ymm8, ymm15); //B11[1][0-3] /= A11[1][1] - - - //extract diag a22 from a - ymm15 = _mm256_permute_pd(ymm14, 0x00); //1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2] - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2] - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - ymm11 = _mm256_fnmadd_pd(ymm9, ymm8, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][1] * B11[1][0-3] - ymm13 = _mm256_fnmadd_pd(ymm10, ymm8, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][1] * B11[1][0-3] - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - ymm11 = _mm256_mul_pd(ymm11, ymm15); //B11[2][0-3] /= A11[2][2] - - //extract diag a33 from a - ymm15 = _mm256_permute_pd(ymm14, 0x0C); //1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3] - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - ymm13 = _mm256_fnmadd_pd(ymm12, ymm11, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][2] * B11[2][0-3] - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - ymm13 = _mm256_mul_pd(ymm13, ymm15); //B11[3][0-3] /= A11[3][3] - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - ymm1 = _mm256_unpacklo_pd(ymm4, ymm8); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] - ymm3 = _mm256_unpacklo_pd(ymm11, ymm13); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] - - //rearrange low elements - ymm0 = _mm256_permute2f128_pd(ymm1,ymm3,0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm2 = _mm256_permute2f128_pd(ymm1,ymm3,0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - - ////unpackhigh//// - ymm14 = _mm256_unpackhi_pd(ymm4, ymm8); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] - - ymm15 = _mm256_unpackhi_pd(ymm11, ymm13); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] - - //rearrange high elements - ymm1 = _mm256_permute2f128_pd(ymm14,ymm15,0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm3 = _mm256_permute2f128_pd(ymm14,ymm15,0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store(B11[0-3][2]) - - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) - - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) - } - - } - if(m_remainder) //implementation for remainder rows(when 'M' is not a multiple of D_MR) - { - a10 = L +i; //pointer to block of A to be used for GEMM - a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM - b01 = B + j*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM - - - k_iter = i / D_MR; //number of times GEMM operations to be performed - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to hold alpha value - - ///GEMM for previously calculated values /// - - - //load 4x4 block from b11 - if(n_remainder == 3) - { - ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm3 = _mm256_broadcast_sd((double const *)&ones); - } - if(n_remainder == 2) - { - ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_broadcast_sd((double const *)&ones); - ymm3 = _mm256_broadcast_sd((double const *)&ones); - } - if(n_remainder == 1) - { - ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_broadcast_sd((double const *)&ones); - ymm2 = _mm256_broadcast_sd((double const *)&ones); - ymm3 = _mm256_broadcast_sd((double const *)&ones); - } - - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_b01_dup = b01; - ymm8 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] - ymm9 = _mm256_loadu_pd((double const *)(a10 + cs_a)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] - ymm10 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2)); //A10[0][2] A10[1][2] A10[2][2] A10[3][2] - ymm11 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B10[0][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B10[0][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B10[0][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B10[0][3] - - b01 += 1; //move to next row of B - - ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B10[1][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B10[1][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B10[1][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B10[1][3] - - b01 += 1; //move to next row of B - - ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B10[2][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B10[2][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B10[2][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B10[2][3] - - b01 += 1; //move to next row of B - - - ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B10[3][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B10[3][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B10[3][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B10[3][3] - - b01 += 1; //move to next row of B - - ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) - - a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM - b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM - - } - - ymm8 = _mm256_fmsub_pd(ymm0, ymm16, ymm4); //B11[0-3][0] * alpha -= ymm4 - ymm9 = _mm256_fmsub_pd(ymm1, ymm16, ymm5); //B11[0-3][1] * alpha -= ymm5 - ymm10 = _mm256_fmsub_pd(ymm2, ymm16, ymm6); //B11[0-3][2] * alpha -= ymm6 - ymm11 = _mm256_fmsub_pd(ymm3, ymm16, ymm7); //B11[0-3][3] * alpha -= ymm7 - - ///implement TRSM/// - //determine correct values to store - if(m_remainder == 3) - { - ymm0 = _mm256_blend_pd(ymm8, ymm0, 0x08); - ymm1 = _mm256_blend_pd(ymm9, ymm1, 0x08); - ymm2 = _mm256_blend_pd(ymm10, ymm2, 0x08); - ymm3 = _mm256_blend_pd(ymm11, ymm3, 0x08); - - } - if(m_remainder == 2) - { - ymm0 = _mm256_permute2f128_pd(ymm8, ymm0, 0x30); - ymm1 = _mm256_permute2f128_pd(ymm9, ymm1, 0x30); - ymm2 = _mm256_permute2f128_pd(ymm10, ymm2, 0x30); - ymm3 = _mm256_permute2f128_pd(ymm11, ymm3, 0x30); - - } - if(m_remainder == 1) - { - ymm0 = _mm256_blend_pd(ymm8, ymm0, 0x0E); - ymm1 = _mm256_blend_pd(ymm9, ymm1, 0x0E); - ymm2 = _mm256_blend_pd(ymm10, ymm2, 0x0E); - ymm3 = _mm256_blend_pd(ymm11, ymm3, 0x0E); - } - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store(B11[0-3][2]) - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) - } - - ///scalar code for trsm without alpha/// - dtrsm_small_AlXB(a11, b11, m_remainder, n_remainder, cs_a, cs_b); - } - } - return BLIS_SUCCESS; -} - -/* TRSM for the case AX = alpha * B, Double precision - * A is lower-triangular, no-transpose, unit diagonal - * dimensions A: mxm X: mxn B: mxn - - b01---> - * ***************** - ** * * * * * - * * * * * * * - * * *b01* * * * - * * * * * * * -a10 ****** b11 ***************** - | * * * | * * * * * - | * * * | * * * * * - | *a10*a11* | *b11* * * * - v * * * v * * * * * - *********** ***************** - * * * * * * * * * - * * * * * * * * * - * * * * * * * * * - * * * * * * * * * - **************** ***************** - a11---> -*/ - -static err_t bli_dtrsm_small_AlXB_unitDiag( - side_t side, - obj_t* AlphaObj, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ) -{ - - dim_t D_MR = 4; //size of block along 'M' dimpension - dim_t D_NR = 8; //size of block along 'N' dimension - - dim_t m = bli_obj_length(b); // number of rows of matrix B - dim_t n = bli_obj_width(b); // number of columns of matrix B - - if(max(m,n) > 90) - return BLIS_NOT_YET_IMPLEMENTED; - - dim_t m_remainder = m % D_MR; //number of remainder rows - dim_t n_remainder = n % D_NR; //number of remainder columns - - dim_t cs_a = bli_obj_col_stride(a); // column stride of A - dim_t cs_b = bli_obj_col_stride(b); // column stride of B - - dim_t i, j, k; //loop variables - dim_t k_iter; //number of times GEMM to be performed - - double AlphaVal = *(double *)AlphaObj->buffer; //value of alpha - double *L = a->buffer; //pointer to matrix A - double *B = b->buffer; //pointer to matrix B - - double *a10, *a11, *b01, *b11; //pointers that point to blocks for GEMM and TRSM - double *ptr_b01_dup; - - double ones = 1.0; - - //scratch registers - __m256d ymm0, ymm1, ymm2, ymm3; - __m256d ymm4, ymm5, ymm6, ymm7; - __m256d ymm8, ymm9, ymm10, ymm11; - __m256d ymm12, ymm13, ymm14, ymm15; - __m256d ymm16; - - - - for(j = 0; j+D_NR-1 < n; j += D_NR) //loop along 'N' dimension - { - for(i = 0;i+D_MR-1 < m; i += D_MR) //loop along 'M' dimension - { - a10 = L +i; //pointer to block of A to be used for GEMM - a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM - b01 = B + j*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM - - k_iter = i / D_MR; //number of times GEMM to be performed(in blocks of 4x4) - - ymm8 = _mm256_setzero_pd(); - ymm9 = _mm256_setzero_pd(); - ymm10 = _mm256_setzero_pd(); - ymm11 = _mm256_setzero_pd(); - ymm12 = _mm256_setzero_pd(); - ymm13 = _mm256_setzero_pd(); - ymm14 = _mm256_setzero_pd(); - ymm15 = _mm256_setzero_pd(); - - ///GEMM code begins/// - - for(k = 0; k< k_iter; k++) //loop for number of GEMM operations - { - ptr_b01_dup = b01; - - ymm16 = _mm256_loadu_pd((double const *)(a10));//A10[0][0] A10[1][0] A10[2][0] A10[3][0] - - ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] - ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] - ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] - ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] - - ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[0][4] - ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[0][5] - ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[0][6] - ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[0][7] - - b01 += 1; //mobe to next row of B - - ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) - ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) - ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) - ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) - - ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[0][4]*A10[0][0] B01[0][4]*A10[1][0] B01[0][4]*A10[2][0] B01[0][4]*A10[3][0]) - ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[0][5]*A10[0][0] B01[0][5]*A10[1][0] B01[0][5]*A10[2][0] B01[0][5]*A10[3][0]) - ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[0][6]*A10[0][0] B01[0][6]*A10[1][0] B01[0][6]*A10[2][0] B01[0][6]*A10[3][0]) - ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[0][7]*A10[0][0] B01[0][7]*A10[1][0] B01[0][7]*A10[2][0] B01[0][7]*A10[3][0]) - - ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a));//A10[0][1] A10[1][1] A10[2][1] A10[3][1] - - ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] - ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] - ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] - ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] - - ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[1][4] - ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[1][5] - ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[1][6] - ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[1][7] - - b01 += 1; //mobe to next row of B - - ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) - ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) - ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) - ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) - - ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[1][4]*A10[0][1] B01[1][4]*A10[1][1] B01[1][4]*A10[2][1] B01[1][4]*A10[3][1]) - ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[1][5]*A10[0][1] B01[1][5]*A10[1][1] B01[1][5]*A10[2][1] B01[1][5]*A10[3][1]) - ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[1][6]*A10[0][1] B01[1][6]*A10[1][1] B01[1][6]*A10[2][1] B01[1][6]*A10[3][1]) - ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[1][7]*A10[0][1] B01[1][7]*A10[1][1] B01[1][7]*A10[2][1] B01[1][7]*A10[3][1]) - - ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2));//A10[0][2] A10[1][2] A10[2][2] A10[3][2] - - ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] - ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] - ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] - ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] - - ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[2][4] - ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[2][5] - ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[2][6] - ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[2][7] - - b01 += 1; //mobe to next row of B - - ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) - ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) - ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) - ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) - - ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[2][4]*A10[0][2] B01[2][4]*A10[1][2] B01[2][4]*A10[2][2] B01[2][4]*A10[3][2]) - ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[2][5]*A10[0][2] B01[2][5]*A10[1][2] B01[2][5]*A10[2][2] B01[2][5]*A10[3][2]) - ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[2][6]*A10[0][2] B01[2][6]*A10[1][2] B01[2][6]*A10[2][2] B01[2][6]*A10[3][2]) - ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[2][7]*A10[0][2] B01[2][7]*A10[1][2] B01[2][7]*A10[2][2] B01[2][7]*A10[3][2]) - - ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3));//A10[0][3] A10[1][3] A10[2][3] A10[3][3] - - ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] - ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] - ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] - ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] - - ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[3][4] - ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[3][5] - ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[3][6] - ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[3][7] - - b01 += 1; //mobe to next row of B - - ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[3][0]*A10[0][3] B01[3][0]*A10[3][0] B01[3][0]*A10[2][3] B01[3][0]*A10[3][0]) - ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[3][1]*A10[0][3] B01[3][1]*A10[3][0] B01[3][1]*A10[2][3] B01[3][1]*A10[3][0]) - ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[3][2]*A10[0][3] B01[3][2]*A10[3][0] B01[3][2]*A10[2][3] B01[3][2]*A10[3][0]) - ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[3][3]*A10[0][3] B01[3][3]*A10[3][0] B01[3][3]*A10[2][3] B01[3][3]*A10[3][0]) - - ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[3][4]*A10[0][3] B01[3][4]*A10[3][0] B01[3][4]*A10[2][3] B01[3][4]*A10[3][3]) - ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[3][5]*A10[0][3] B01[3][5]*A10[3][0] B01[3][5]*A10[2][3] B01[3][5]*A10[3][3]) - ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[3][6]*A10[0][3] B01[3][6]*A10[3][0] B01[3][6]*A10[2][3] B01[3][6]*A10[3][3]) - ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[3][7]*A10[0][3] B01[3][7]*A10[3][0] B01[3][7]*A10[2][3] B01[3][7]*A10[3][3]) - - a10 += D_MR * cs_a; //pointer math to calculate next block of A for GEMM - b01 = ptr_b01_dup + D_MR; //pointer math to calculate next block of B for GEMM - } - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to hold alpha - - ymm0 = _mm256_loadu_pd((double const *)(b11 + cs_b *0)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b *1)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b *2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b *3)); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm4 = _mm256_loadu_pd((double const *)(b11 + cs_b *4)); //B11[0][4] B11[1][4] B11[2][4] B11[3][4] - ymm5 = _mm256_loadu_pd((double const *)(b11 + cs_b *5)); //B11[0][5] B11[1][5] B11[2][5] B11[3][5] - ymm6 = _mm256_loadu_pd((double const *)(b11 + cs_b *6)); //B11[0][6] B11[1][6] B11[2][6] B11[3][6] - ymm7 = _mm256_loadu_pd((double const *)(b11 + cs_b *7)); //B11[0][7] B11[1][7] B11[2][7] B11[3][7] - - ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm8); //B11[0-3][0] * alpha -= B01[0-3][0] - ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm9); //B11[0-3][1] * alpha -= B01[0-3][1] - ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm10); //B11[0-3][2] * alpha -= B01[0-3][2] - ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm11); //B11[0-3][3] * alpha -= B01[0-3][3] - ymm4 = _mm256_fmsub_pd(ymm4, ymm16, ymm12); //B11[0-3][4] * alpha -= B01[0-3][4] - ymm5 = _mm256_fmsub_pd(ymm5, ymm16, ymm13); //B11[0-3][5] * alpha -= B01[0-3][5] - ymm6 = _mm256_fmsub_pd(ymm6, ymm16, ymm14); //B11[0-3][6] * alpha -= B01[0-3][6] - ymm7 = _mm256_fmsub_pd(ymm7, ymm16, ymm15); //B11[0-3][7] * alpha -= B01[0-3][7] - - ///implement TRSM/// - - ///transpose of B11// - ///unpacklow/// - ymm9 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] - ymm11 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] - - ymm13 = _mm256_unpacklo_pd(ymm4, ymm5); //B11[0][4] B11[0][5] B11[2][4] B11[2][5] - ymm15 = _mm256_unpacklo_pd(ymm6, ymm7); //B11[0][6] B11[0][7] B11[2][6] B11[2][7] - - //rearrange low elements - ymm8 = _mm256_permute2f128_pd(ymm9,ymm11,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] - ymm10 = _mm256_permute2f128_pd(ymm9,ymm11,0x31); //B11[2][0] B11[2][1] B11[2][2] B11[2][3] - - ymm12 = _mm256_permute2f128_pd(ymm13,ymm15,0x20); //B11[4][0] B11[4][1] B11[4][2] B11[4][3] - ymm14 = _mm256_permute2f128_pd(ymm13,ymm15,0x31); //B11[6][0] B11[6][1] B11[6][2] B11[6][3] - - ////unpackhigh//// - ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] - ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] - - ymm4 = _mm256_unpackhi_pd(ymm4, ymm5); //B11[1][4] B11[1][5] B11[3][4] B11[3][5] - ymm5 = _mm256_unpackhi_pd(ymm6, ymm7); //B11[1][6] B11[1][7] B11[3][6] B11[3][7] - - //rearrange high elements - ymm9 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] - ymm11 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] - - ymm13 = _mm256_permute2f128_pd(ymm4,ymm5,0x20); //B11[5][0] B11[5][1] B11[5][2] B11[5][3] - ymm15 = _mm256_permute2f128_pd(ymm4,ymm5,0x31); //B11[7][0] B11[7][1] B11[7][2] B11[7][3] - - //broadcast diagonal elements of A11 - ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_b +1)); //A11[1][1] - ymm3 = _mm256_broadcast_sd((double const *)(a11+cs_b*2 + 2)); //A11[2][2] - ymm4 = _mm256_broadcast_sd((double const *)(a11+cs_b*3 + 3)); //A11[3][3] - - ymm2 = _mm256_broadcast_sd((double const *)(a11 +1)); //A11[1][0] - ymm3 = _mm256_broadcast_sd((double const *)(a11 +2)); //A11[2][0] - ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][0] - - a11 += cs_a; - - //(Row1): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm2, ymm8, ymm9); //B11[1][0-3] -= A11[1][0] * B11[0-3][0] - ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[2][0-3] -= A11[2][0] * B11[0-3][0] - ymm11 = _mm256_fnmadd_pd(ymm4, ymm8, ymm11); //B11[3][0-3] -= A11[3][0] * B11[0-3][0] - - ymm13 = _mm256_fnmadd_pd(ymm2, ymm12, ymm13); //B11[5][0-3] -= A11[1][0] * B11[0-3][4] - ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[6][0-3] -= A11[2][0] * B11[0-3][4] - ymm15 = _mm256_fnmadd_pd(ymm4, ymm12, ymm15); //B11[7][0-3] -= A11[3][0] * B11[0-3][4] - - ymm3 = _mm256_broadcast_sd((double const *)(a11 +2)); //A11[2][1] - ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][1] - - a11 += cs_a; - - //(ROw2): FMA operations - ymm10 = _mm256_fnmadd_pd(ymm3, ymm9, ymm10); //B11[2][0-3] -= A11[2][1] * B11[0-3][1] - ymm11 = _mm256_fnmadd_pd(ymm4, ymm9, ymm11); //B11[3][0-3] -= A11[3][1] * B11[0-3][1] - - ymm14 = _mm256_fnmadd_pd(ymm3, ymm13, ymm14); //B11[6][0-3] -= A11[2][1] * B11[0-3][5] - ymm15 = _mm256_fnmadd_pd(ymm4, ymm13, ymm15); //B11[7][0-3] -= A11[3][1] * B11[0-3][5] - - ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][2] - - a11 += cs_a; - - //(ROw2): FMA operations - ymm11 = _mm256_fnmadd_pd(ymm4, ymm10, ymm11); //B11[3][0-3] -= A11[3][2] * B11[0-3][2] - - ymm15 = _mm256_fnmadd_pd(ymm4, ymm14, ymm15); //B11[7][0-3] -= A11[3][2] * B11[0-3][6] - - //unpacklow// - ymm1 = _mm256_unpacklo_pd(ymm8, ymm9); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] - ymm3 = _mm256_unpacklo_pd(ymm10, ymm11); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] - - ymm5 = _mm256_unpacklo_pd(ymm12, ymm13); //B11[4][0] B11[5][0] B11[4][2] B11[5][2] - ymm7 = _mm256_unpacklo_pd(ymm14, ymm15); //B11[6][0] B11[7][0] B11[6][2] B11[7][2] - - //rearrange low elements - ymm0 = _mm256_permute2f128_pd(ymm1, ymm3, 0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm2 = _mm256_permute2f128_pd(ymm1, ymm3, 0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - - ymm4 = _mm256_permute2f128_pd(ymm5, ymm7, 0x20); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] - ymm6 = _mm256_permute2f128_pd(ymm5, ymm7, 0x31); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] - - ///unpack high/// - ymm8 = _mm256_unpackhi_pd(ymm8, ymm9); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] - ymm9 = _mm256_unpackhi_pd(ymm10, ymm11); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] - - ymm12 = _mm256_unpackhi_pd(ymm12, ymm13); //B11[4][1] B11[5][1] B11[4][3] B11[5][3] - ymm13 = _mm256_unpackhi_pd(ymm14, ymm15); //B11[6][1] B11[7][1] B11[6][3] B11[7][3] - - //rearrange high elements - ymm1 = _mm256_permute2f128_pd(ymm8, ymm9, 0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm3 = _mm256_permute2f128_pd(ymm8, ymm9, 0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - ymm5 = _mm256_permute2f128_pd(ymm12, ymm13, 0x20); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] - ymm7 = _mm256_permute2f128_pd(ymm12, ymm13, 0x31); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] - - _mm256_storeu_pd((double *)(b11 + cs_b * 0), ymm0); //store B11[0][0-3] - _mm256_storeu_pd((double *)(b11 + cs_b * 1), ymm1); //store B11[1][0-3] - _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store B11[2][0-3] - _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store B11[3][0-3] - _mm256_storeu_pd((double *)(b11 + cs_b * 4), ymm4); //store B11[4][0-3] - _mm256_storeu_pd((double *)(b11 + cs_b * 5), ymm5); //store B11[5][0-3] - _mm256_storeu_pd((double *)(b11 + cs_b * 6), ymm6); //store B11[6][0-3] - _mm256_storeu_pd((double *)(b11 + cs_b * 7), ymm7); //store B11[7][0-3] - } - - if(m_remainder) //implementation for reamainder rows(when 'M' is not a multiple of D_MR) - { - a10 = L +i; //pointer to block of A to be used for GEMM - a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM - b01 = B + j*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM - - k_iter = i / D_MR; //number of times GEMM operation to be done(in blocks of 4x4) - - ymm8 = _mm256_setzero_pd(); - ymm9 = _mm256_setzero_pd(); - ymm10 = _mm256_setzero_pd(); - ymm11 = _mm256_setzero_pd(); - ymm12 = _mm256_setzero_pd(); - ymm13 = _mm256_setzero_pd(); - ymm14 = _mm256_setzero_pd(); - ymm15 = _mm256_setzero_pd(); - - ///GEMM code Begins/// - for(k = 0; k< k_iter; k++) //loop for number of GEMM operations - { - ptr_b01_dup = b01; - - ymm16 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] - - ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] - ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] - ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] - ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] - - ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[0][4] - ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[0][5] - ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[0][6] - ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[0][7] - - b01 += 1; //move to next row of B - - ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0] ) - ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) - ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) - ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) - - ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[0][4]*A10[0][0] B01[0][4]*A10[1][0] B01[0][4]*A10[2][0] B01[0][4]*A10[3][0]) - ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[0][5]*A10[0][0] B01[0][5]*A10[1][0] B01[0][5]*A10[2][0] B01[0][5]*A10[3][0]) - ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[0][6]*A10[0][0] B01[0][6]*A10[1][0] B01[0][6]*A10[2][0] B01[0][6]*A10[3][0]) - ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm16 += (B01[0][7]*A10[0][0] B01[0][7]*A10[1][0] B01[0][7]*A10[2][0] B01[0][7]*A10[3][0]) - - ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 1)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] - - ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] - ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] - ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] - ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] - - ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[1][4] - ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[1][5] - ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[1][6] - ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[1][7] - - b01 += 1; //move to next row of B01 - - ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) - ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) - ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) - ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) - - ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[1][4]*A10[0][1] B01[1][4]*A10[1][1] B01[1][4]*A10[2][1] B01[1][4]*A10[3][1]) - ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[1][5]*A10[0][1] B01[1][5]*A10[1][1] B01[1][5]*A10[2][1] B01[1][5]*A10[3][1]) - ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[1][6]*A10[0][1] B01[1][6]*A10[1][1] B01[1][6]*A10[2][1] B01[1][6]*A10[3][1]) - ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[1][7]*A10[0][1] B01[1][7]*A10[1][1] B01[1][7]*A10[2][1] B01[1][7]*A10[3][1]) - - ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2)); //A10[0][2] //A10[1][2] A10[2][2] A10[3][2] - - ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] - ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] - ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] - ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] - - ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[2][4] - ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[2][5] - ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[2][6] - ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[2][7] - - b01 += 1; //move to next row of B - - ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) - ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm9 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) - ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm10 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) - ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm11 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) - - ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm12 += (B01[2][4]*A10[0][2] B01[2][4]*A10[1][2] B01[2][4]*A10[2][2] B01[2][0]*A10[3][2]) - ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm13 += (B01[2][5]*A10[0][2] B01[2][5]*A10[1][2] B01[2][5]*A10[2][2] B01[2][1]*A10[3][2]) - ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm14 += (B01[2][6]*A10[0][2] B01[2][6]*A10[1][2] B01[2][6]*A10[2][2] B01[2][2]*A10[3][2]) - ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm15 += (B01[2][7]*A10[0][2] B01[2][7]*A10[1][2] B01[2][7]*A10[2][2] B01[2][3]*A10[3][2]) - - ymm16 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] - - ymm4 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] - ymm5 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] - ymm6 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] - ymm7 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] - - ymm0 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 4)); //B01[3][4] - ymm1 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 5)); //B01[3][5] - ymm2 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 6)); //B01[3][6] - ymm3 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 7)); //B01[3][7] - - b01 += 1; //move to next row of B - - ymm8 = _mm256_fmadd_pd(ymm4, ymm16, ymm8); //ymm8 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) - ymm9 = _mm256_fmadd_pd(ymm5, ymm16, ymm9); //ymm8 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) - ymm10 = _mm256_fmadd_pd(ymm6, ymm16, ymm10); //ymm8 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) - ymm11 = _mm256_fmadd_pd(ymm7, ymm16, ymm11); //ymm8 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) - - ymm12 = _mm256_fmadd_pd(ymm0, ymm16, ymm12); //ymm8 += (B01[3][0]*A10[0][3] B01[3][4]*A10[1][3] B01[3][4]*A10[2][3] B01[3][4]*A10[3][3]) - ymm13 = _mm256_fmadd_pd(ymm1, ymm16, ymm13); //ymm8 += (B01[3][1]*A10[0][3] B01[3][5]*A10[1][3] B01[3][5]*A10[2][3] B01[3][5]*A10[3][3]) - ymm14 = _mm256_fmadd_pd(ymm2, ymm16, ymm14); //ymm8 += (B01[3][2]*A10[0][3] B01[3][6]*A10[1][3] B01[3][6]*A10[2][3] B01[3][6]*A10[3][3]) - ymm15 = _mm256_fmadd_pd(ymm3, ymm16, ymm15); //ymm8 += (B01[3][3]*A10[0][3] B01[3][7]*A10[1][3] B01[3][7]*A10[2][3] B01[3][7]*A10[3][3]) - - a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM - b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM - } - - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha value - - ymm0 = _mm256_loadu_pd((double const *)(b11 + cs_b *0)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b *1)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b *2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b *3)); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm4 = _mm256_loadu_pd((double const *)(b11 + cs_b *4)); //B11[0][4] B11[1][4] B11[2][4] B11[3][4] - ymm5 = _mm256_loadu_pd((double const *)(b11 + cs_b *5)); //B11[0][5] B11[1][5] B11[2][5] B11[3][5] - ymm6 = _mm256_loadu_pd((double const *)(b11 + cs_b *6)); //B11[0][6] B11[1][6] B11[2][6] B11[3][6] - ymm7 = _mm256_loadu_pd((double const *)(b11 + cs_b *7)); //B11[0][7] B11[1][7] B11[2][7] B11[3][7] - - ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm8); //B11[0-3][0] *alpha -= B01[0-3][0] - ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm9); //B11[0-3][1] *alpha -= B01[0-3][1] - ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm10); //B11[0-3][2] *alpha -= B01[0-3][2] - ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm11); //B11[0-3][3] *alpha -= B01[0-3][3] - ymm4 = _mm256_fmsub_pd(ymm4, ymm16, ymm12); //B11[0-3][4] *alpha -= B01[0-3][4] - ymm5 = _mm256_fmsub_pd(ymm5, ymm16, ymm13); //B11[0-3][5] *alpha -= B01[0-3][5] - ymm6 = _mm256_fmsub_pd(ymm6, ymm16, ymm14); //B11[0-3][6] *alpha -= B01[0-3][6] - ymm7 = _mm256_fmsub_pd(ymm7, ymm16, ymm15); //B11[0-3][7] *alpha -= B01[0-3][7] - - ///implement TRSM/// - - ///unpacklow/// - ymm9 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] - ymm11 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] - - ymm13 = _mm256_unpacklo_pd(ymm4, ymm5); //B11[0][4] B11[0][5] B11[1][4] B11[1][5] - ymm15 = _mm256_unpacklo_pd(ymm6, ymm7); //B11[0][6] B11[0][7] B11[1][6] B11[1][7] - - //rearrange low elements - ymm8 = _mm256_permute2f128_pd(ymm9,ymm11,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] - ymm10 = _mm256_permute2f128_pd(ymm9,ymm11,0x31); //B11[2][0] B11[2][1] B11[2][2] B11[2][3] - - ymm12 = _mm256_permute2f128_pd(ymm13,ymm15,0x20); //B11[4][0] B11[4][1] B11[4][2] B11[4][3] - ymm14 = _mm256_permute2f128_pd(ymm13,ymm15,0x31); //B11[6][0] B11[6][1] B11[6][2] B11[6][3] - - ////unpackhigh//// - ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] - ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] - - ymm4 = _mm256_unpackhi_pd(ymm4, ymm5); //B11[5][0] B11[5][1] B11[7][0] B11[7][1] - ymm5 = _mm256_unpackhi_pd(ymm6, ymm7); //B11[5][2] B11[5][3] B11[7][2] B11[7][3] - - //rearrange high elements - ymm9 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] - ymm11 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] - - ymm13 = _mm256_permute2f128_pd(ymm4,ymm5,0x20); //B11[5][0] B11[5][1] B11[5][2] B11[5][3] - ymm15 = _mm256_permute2f128_pd(ymm4,ymm5,0x31); //B11[7][0] B11[7][1] B11[7][2] B11[7][3] - - //broadcast diagonal elements of A11 - ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_b +1)); //A11[1][1] - ymm3 = _mm256_broadcast_sd((double const *)(a11+cs_b*2 + 2)); //A11[2][2] - ymm4 = _mm256_broadcast_sd((double const *)(a11+cs_b*3 + 3)); //A11[3][3] - - ymm2 = _mm256_broadcast_sd((double const *)(a11 +1)); //A11[1][0] - ymm3 = _mm256_broadcast_sd((double const *)(a11 +2)); //A11[2][0] - ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][0] - - a11 += cs_a; - - //(Row1): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm2, ymm8, ymm9); //B11[1][0-3] -= B11[0-3][0]*A11[1][0] - ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[2][0-3] -= B11[0-3][0]*A11[2][0] - ymm11 = _mm256_fnmadd_pd(ymm4, ymm8, ymm11); //B11[3][0-3] -= B11[0-3][0]*A11[3][0] - - ymm13 = _mm256_fnmadd_pd(ymm2, ymm12, ymm13); //B11[5][0-3] -= B11[0-3][4]*A11[1][4] - ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[6][0-3] -= B11[0-3][4]*A11[2][4] - ymm15 = _mm256_fnmadd_pd(ymm4, ymm12, ymm15); //B11[7][0-3] -= B11[0-3][4]*A11[3][4] - - ymm3 = _mm256_broadcast_sd((double const *)(a11 +2)); //A11[2][1] - ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][1] - - a11 += cs_a; - - //(ROw2): FMA operations - ymm10 = _mm256_fnmadd_pd(ymm3, ymm9, ymm10); //B11[2][0-3] -= A11[2][1] * B11[0-3][1] - ymm11 = _mm256_fnmadd_pd(ymm4, ymm9, ymm11); //B11[3][0-3] -= A11[3][1] * B11[0-3][1] - - ymm14 = _mm256_fnmadd_pd(ymm3, ymm13, ymm14); //B11[6][0-3] -= A11[2][1] * B11[0-3][5] - ymm15 = _mm256_fnmadd_pd(ymm4, ymm13, ymm15); //B11[7][0-3] -= A11[3][1] * B11[0-3][5] - - ymm4 = _mm256_broadcast_sd((double const *)(a11 +3)); //A11[3][2] - - a11 += cs_a; - - //(ROw2): FMA operations - ymm11 = _mm256_fnmadd_pd(ymm4, ymm10, ymm11); //B11[0-3][3] -= A11[3][2]*B11[0-3][2] - - ymm15 = _mm256_fnmadd_pd(ymm4, ymm14, ymm15); //B11[0-3][7] -= A11[3][2]*B11[0-3][6] - - //unpacklow// - ymm1 = _mm256_unpacklo_pd(ymm8, ymm9); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] - ymm3 = _mm256_unpacklo_pd(ymm10, ymm11); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] - - ymm5 = _mm256_unpacklo_pd(ymm12, ymm13); //B11[4][0] B11[5][0] B11[4][2] B11[5][2] - ymm7 = _mm256_unpacklo_pd(ymm14, ymm15); //B11[6][0] B11[7][0] B11[6][2] B11[7][2] - - //rearrange low elements - ymm0 = _mm256_permute2f128_pd(ymm1, ymm3, 0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm2 = _mm256_permute2f128_pd(ymm1, ymm3, 0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - - ymm4 = _mm256_permute2f128_pd(ymm5, ymm7, 0x20); //B11[0][4] B11[1][4] B11[2][4] B11[3][4] - ymm6 = _mm256_permute2f128_pd(ymm5, ymm7, 0x31); //B11[0][6] B11[1][6] B11[2][6] B11[3][6] - - ///unpack high/// - ymm8 = _mm256_unpackhi_pd(ymm8, ymm9); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] - ymm9 = _mm256_unpackhi_pd(ymm10, ymm11); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] - - ymm12 = _mm256_unpackhi_pd(ymm12, ymm13); //B11[0][5] B11[1][5] B11[0][7] B11[1][7] - ymm13 = _mm256_unpackhi_pd(ymm14, ymm15); //B11[2][5] B11[3][5] B11[2][7] B11[3][7] - - //rearrange high elements - ymm1 = _mm256_permute2f128_pd(ymm8, ymm9, 0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm3 = _mm256_permute2f128_pd(ymm8, ymm9, 0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - ymm5 = _mm256_permute2f128_pd(ymm12, ymm13, 0x20); //B11[0][5] B11[1][5] B11[2][5] B11[3][5] - ymm7 = _mm256_permute2f128_pd(ymm12, ymm13, 0x31); //B11[0][7] B11[1][7] B11[2][7] B11[3][7] - - ymm8 = _mm256_loadu_pd((double const *)(b11 + cs_b * 0)); //load B11[0-3][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b * 1)); //load B11[0-3][1] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //load B11[0-3][2] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //load B11[0-3][3] - ymm12 = _mm256_loadu_pd((double const *)(b11 + cs_b * 4)); //load B11[0-3][4] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b * 5)); //load B11[0-3][5] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b * 6)); //load B11[0-3][6] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b * 7)); //load B11[0-3][7] - //determine correct values to store - if(m_remainder == 3) - { - ymm0 = _mm256_blend_pd(ymm0, ymm8, 0x08); - ymm1 = _mm256_blend_pd(ymm1, ymm9, 0x08); - ymm2 = _mm256_blend_pd(ymm2, ymm10, 0x08); - ymm3 = _mm256_blend_pd(ymm3, ymm11, 0x08); - ymm4 = _mm256_blend_pd(ymm4, ymm12, 0x08); - ymm5 = _mm256_blend_pd(ymm5, ymm13, 0x08); - ymm6 = _mm256_blend_pd(ymm6, ymm14, 0x08); - ymm7 = _mm256_blend_pd(ymm7, ymm15, 0x08); - } - if(m_remainder == 2) - { - ymm0 = _mm256_permute2f128_pd(ymm0, ymm8, 0x30); - ymm1 = _mm256_permute2f128_pd(ymm1, ymm9, 0x30); - ymm2 = _mm256_permute2f128_pd(ymm2, ymm10, 0x30); - ymm3 = _mm256_permute2f128_pd(ymm3, ymm11, 0x30); - ymm4 = _mm256_permute2f128_pd(ymm4, ymm12, 0x30); - ymm5 = _mm256_permute2f128_pd(ymm5, ymm13, 0x30); - ymm6 = _mm256_permute2f128_pd(ymm6, ymm14, 0x30); - ymm7 = _mm256_permute2f128_pd(ymm7, ymm15, 0x30); - } - if(m_remainder == 1) - { - ymm0 = _mm256_blend_pd(ymm0, ymm8, 0x0E); - ymm1 = _mm256_blend_pd(ymm1, ymm9, 0x0E); - ymm2 = _mm256_blend_pd(ymm2, ymm10, 0x0E); - ymm3 = _mm256_blend_pd(ymm3, ymm11, 0x0E); - ymm4 = _mm256_blend_pd(ymm4, ymm12, 0x0E); - ymm5 = _mm256_blend_pd(ymm5, ymm13, 0x0E); - ymm6 = _mm256_blend_pd(ymm6, ymm14, 0x0E); - ymm7 = _mm256_blend_pd(ymm7, ymm15, 0x0E); - } - - _mm256_storeu_pd((double *)(b11 + cs_b * 0), ymm0); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + cs_b * 1), ymm1); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[0-3][3]) - _mm256_storeu_pd((double *)(b11 + cs_b * 4), ymm4); //store(B11[0-3][4]) - _mm256_storeu_pd((double *)(b11 + cs_b * 5), ymm5); //store(B11[0-3][5]) - _mm256_storeu_pd((double *)(b11 + cs_b * 6), ymm6); //store(B11[0-3][6]) - _mm256_storeu_pd((double *)(b11 + cs_b * 7), ymm7); //store(B11[0-3][7]) - - } - } - - if((n & 4)) //implementation for remainder columns(when 'N' is a multiple of 4) - { - for(i = 0;i+D_MR-1 < m; i += D_MR) //loop along 'M' direction - { - a10 = L +i; //pointer to block of A to be used for GEMM - a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM - b01 = B + j*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM - - k_iter = i / D_MR; //number of times GEMM to be performed(in block of 4) - ///GEMM for previously calculated values /// - - //load 4x4 block from b11 - ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b*2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b*3)); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_b01_dup = b01; - ymm8 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] - ymm9 = _mm256_loadu_pd((double const *)(a10 + cs_a)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] - ymm10 = _mm256_loadu_pd((double const *)(a10 + cs_a*2)); //A10[0][2] A10[1][2] A10[2][2] A10[3][2] - ymm11 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] - - b01 += 1; //move to next row of B - - ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B01[2][1]*A10[1][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B01[2][2]*A10[2][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B01[2][3]*A10[3][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) - - - a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM - b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM - - } - - ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm4); //B11[0-3][0] *alpha -= ymm4 - ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm5); //B01[0-3][1] *alpha -= ymm5 - ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm6); //B01[0-3][2] *alpha -= ymm6 - ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm7); //B01[0-3][3] *alpha -= ymm7 - - ///implement TRSM/// - //1st col - ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][0] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][0] - ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][0] - - //2nd col - a11 += cs_a; - ymm8 = _mm256_broadcast_sd((double const *)(a11 + 1)); //A11[1][1] - ymm9 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][1] - - //3rd col - a11 += cs_a; - ymm11 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][2] - ymm12 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][2] - - //4th col - a11 += cs_a; - ymm13 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][3] - - ////unpacklow//// - ymm8 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] - ymm13 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] - - //rearrange low elements - ymm4 = _mm256_permute2f128_pd(ymm8,ymm13,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] - ymm11 = _mm256_permute2f128_pd(ymm8,ymm13,0x31);//B11[2][0] B11[2][1] B11[2][2] B11[2][3] - - ////unpackhigh//// - ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] - ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] - - //rearrange high elements - ymm8 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] - ymm13 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (3, 0) - ymm8 = _mm256_fnmadd_pd(ymm5, ymm4, ymm8);//d = c - (a*b) //B11[1][0-3] -= A11[1][0]*B11[0][0-3] - ymm11 = _mm256_fnmadd_pd(ymm6, ymm4, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][0]*B11[0][0-3] - ymm13 = _mm256_fnmadd_pd(ymm7, ymm4, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][0]*B11[0][0-3] - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - ymm11 = _mm256_fnmadd_pd(ymm9, ymm8, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][1]*B11[1][0-3] - ymm13 = _mm256_fnmadd_pd(ymm10, ymm8, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][1]*B11[1][0-3] - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - ymm13 = _mm256_fnmadd_pd(ymm12, ymm11, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][2]*B11[2][0-3] - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - ymm1 = _mm256_unpacklo_pd(ymm4, ymm8); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] - ymm3 = _mm256_unpacklo_pd(ymm11, ymm13); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] - - //rearrange low elements - ymm0 = _mm256_permute2f128_pd(ymm1,ymm3,0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm2 = _mm256_permute2f128_pd(ymm1,ymm3,0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - - ////unpackhigh//// - ymm14 = _mm256_unpackhi_pd(ymm4, ymm8); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] - - ymm15 = _mm256_unpackhi_pd(ymm11, ymm13); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] - - //rearrange high elements - ymm1 = _mm256_permute2f128_pd(ymm14,ymm15,0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm3 = _mm256_permute2f128_pd(ymm14,ymm15,0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b*2), ymm2); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b*3), ymm3); //store(B11[0-3][3]) - - } - if(m_remainder) //implementation for remainder rows(when 'M' is not a multiple of D_MR) - { - a10 = L +i; //pointer to block of A to be used for GEMM - a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM - b01 = B + j*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha - - k_iter = i / D_MR; //number of GEMM operations to be performed(in blocks of 4x4) - - ///GEMM for previously calculated values /// - - //load 4x4 block from b11 - ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - for(k = 0; k < k_iter; k++) //looop for number of GEMM operations - { - ptr_b01_dup = b01; - - ymm8 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] - ymm9 = _mm256_loadu_pd((double const *)(a10 + cs_a)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] - ymm10 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2)); //A10[0][2] A10[1][2] A10[2][2] A10[3][2] - ymm11 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) - - a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM - b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM - - } - - ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm4); //B11[0-3][0] *alpha -= ymm4 - ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm5); //B11[0-3][1] *alpha -= ymm5 - ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm6); //B11[0-3][2] *alpha -= ymm6 - ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm7); //B11[0-3][3] *alpha -= ymm7 - - ///implement TRSM/// - //1st col - ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][0] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][0] - ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][0] - - //2nd col - a11 += cs_a; - ymm8 = _mm256_broadcast_sd((double const *)(a11 + 1)); //A11[1][1] - ymm9 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][1] - - //3rd col - a11 += cs_a; - ymm11 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][2] - ymm12 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][2] - - //4th col - a11 += cs_a; - ymm13 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][3] - - ////unpacklow//// - ymm8 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] - ymm13 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] - - //rearrange low elements - ymm4 = _mm256_permute2f128_pd(ymm8,ymm13,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] - ymm11 = _mm256_permute2f128_pd(ymm8,ymm13,0x31);//B11[2][0] B11[2][1] B11[2][2] B11[2][3] - - ////unpackhigh//// - ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] - ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] - - //rearrange high elements - ymm8 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] - ymm13 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (3, 0) - ymm8 = _mm256_fnmadd_pd(ymm5, ymm4, ymm8);//d = c - (a*b) //B11[1][0-3] -= A11[1][0]* B11[0][0-3] - ymm11 = _mm256_fnmadd_pd(ymm6, ymm4, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][0]* B11[0][0-3] - ymm13 = _mm256_fnmadd_pd(ymm7, ymm4, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][0]* B11[0][0-3] - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - ymm11 = _mm256_fnmadd_pd(ymm9, ymm8, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][1]* B11[1][0-3] - ymm13 = _mm256_fnmadd_pd(ymm10, ymm8, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][1]* B11[1][0-3] - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - ymm13 = _mm256_fnmadd_pd(ymm12, ymm11, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][2]* B11[2][0-3] - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - ymm1 = _mm256_unpacklo_pd(ymm4, ymm8); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] - ymm3 = _mm256_unpacklo_pd(ymm11, ymm13); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] - - //rearrange low elements - ymm0 = _mm256_permute2f128_pd(ymm1,ymm3,0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm2 = _mm256_permute2f128_pd(ymm1,ymm3,0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - - ////unpackhigh//// - ymm14 = _mm256_unpackhi_pd(ymm4, ymm8); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] - - ymm15 = _mm256_unpackhi_pd(ymm11, ymm13); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] - - //rearrange high elements - ymm1 = _mm256_permute2f128_pd(ymm14,ymm15,0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm3 = _mm256_permute2f128_pd(ymm14,ymm15,0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - //load 4x4 block from b11 - ymm4 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm5 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm6 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm7 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][3] B11[1][3] B11[2][2] B11[3][3] - - //determine correct values to store - - if(m_remainder == 3) - { - ymm0 = _mm256_blend_pd(ymm0, ymm4, 0x08); - ymm1 = _mm256_blend_pd(ymm1, ymm5, 0x08); - ymm2 = _mm256_blend_pd(ymm2, ymm6, 0x08); - ymm3 = _mm256_blend_pd(ymm3, ymm7, 0x08); - } - if(m_remainder == 2) - { - ymm0 = _mm256_permute2f128_pd(ymm0, ymm4,0x30); - ymm1 = _mm256_permute2f128_pd(ymm1, ymm5,0x30); - ymm2 = _mm256_permute2f128_pd(ymm2, ymm6,0x30); - ymm3 = _mm256_permute2f128_pd(ymm3, ymm7,0x30); - } - if(m_remainder == 1) - { - ymm0 = _mm256_blend_pd(ymm0, ymm4, 0x0E); - ymm1 = _mm256_blend_pd(ymm1, ymm5, 0x0E); - ymm2 = _mm256_blend_pd(ymm2, ymm6, 0x0E); - ymm3 = _mm256_blend_pd(ymm3, ymm7, 0x0E); - } - - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[0-3][3]) - - } - - n_remainder -= 4; - j += 4; - - } - - if(n_remainder) //implementation fo remaining columns(when 'N' is not a multiple of D_NR) - { - for(i = 0;i+D_MR-1 < m; i += D_MR) //loop along 'M' direction - { - a10 = L +i; //pointer to block of A to be used for GEMM - a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM - b01 = B + j*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM - - k_iter = i / D_MR; //number of GEMM operations to be performed(in blocks of 4x4) - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha Value - - ///GEMM for previously calculated values /// - - //load 4x4 block from b11 - if(n_remainder == 3) - { - ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm3 = _mm256_broadcast_sd((double const *)&ones); - } - if(n_remainder == 2) - { - ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_broadcast_sd((double const *)&ones); - ymm3 = _mm256_broadcast_sd((double const *)&ones); - } - if(n_remainder == 1) - { - ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_broadcast_sd((double const *)&ones); - ymm2 = _mm256_broadcast_sd((double const *)&ones); - ymm3 = _mm256_broadcast_sd((double const*)&ones); - } - - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - for(k = 0; k < k_iter; k++) - { - ptr_b01_dup = b01; - ymm8 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] - ymm9 = _mm256_loadu_pd((double const *)(a10 + cs_a)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] - ymm10 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2)); //A10[0][2] A10[1][2] A10[2][2] A10[3][2] - ymm11 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[0][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[0][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[0][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[0][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[1][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[1][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[1][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[1][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[2][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[2][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[2][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[2][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B01[3][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B01[3][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B01[3][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B01[3][3] - - b01 += 1; - - ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) - - a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM - b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM - } - - ///GEMM code ends/// - - ymm0 = _mm256_fmsub_pd(ymm0, ymm16, ymm4); //B11[0-3][0] *alpha -= ymm4 - ymm1 = _mm256_fmsub_pd(ymm1, ymm16, ymm5); //B11[0-3][1] *alpha -= ymm5 - ymm2 = _mm256_fmsub_pd(ymm2, ymm16, ymm6); //B11[0-3][2] *alpha -= ymm6 - ymm3 = _mm256_fmsub_pd(ymm3, ymm16, ymm7); //B11[0-3][3] *alpha -= ymm7 - - ///implement TRSM/// - //1st col - ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][0] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][0] - ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][0] - - //2nd col - a11 += cs_a; - ymm8 = _mm256_broadcast_sd((double const *)(a11 + 1)); //A11[1][1] - ymm9 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][1] - - //3rd col - a11 += cs_a; - ymm11 = _mm256_broadcast_sd((double const *)(a11 + 2)); //A11[2][2] - ymm12 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][2] - - //4th col - a11 += cs_a; - ymm13 = _mm256_broadcast_sd((double const *)(a11 + 3)); //A11[3][3] - - ////unpacklow//// - ymm8 = _mm256_unpacklo_pd(ymm0, ymm1); //B11[0][0] B11[0][1] B11[2][0] B11[2][1] - ymm13 = _mm256_unpacklo_pd(ymm2, ymm3); //B11[0][2] B11[0][3] B11[2][2] B11[2][3] - - //rearrange low elements - ymm4 = _mm256_permute2f128_pd(ymm8,ymm13,0x20); //B11[0][0] B11[0][1] B11[0][2] B11[0][3] - ymm11 = _mm256_permute2f128_pd(ymm8,ymm13,0x31);//B11[2][0] B11[2][1] B11[2][2] B11[2][3] - - ////unpackhigh//// - ymm0 = _mm256_unpackhi_pd(ymm0, ymm1); //B11[1][0] B11[1][1] B11[3][0] B11[3][1] - ymm1 = _mm256_unpackhi_pd(ymm2, ymm3); //B11[1][2] B11[1][3] B11[3][2] B11[3][3] - - //rearrange high elements - ymm8 = _mm256_permute2f128_pd(ymm0,ymm1,0x20); //B11[1][0] B11[1][1] B11[1][2] B11[1][3] - ymm13 = _mm256_permute2f128_pd(ymm0,ymm1,0x31); //B11[3][0] B11[3][1] B11[3][2] B11[3][3] - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (3, 0) - ymm8 = _mm256_fnmadd_pd(ymm5, ymm4, ymm8);//d = c - (a*b) //B11[1][0-3] -= A11[1][0] * B11[0][0-3] - ymm11 = _mm256_fnmadd_pd(ymm6, ymm4, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][0] * B11[0][0-3] - ymm13 = _mm256_fnmadd_pd(ymm7, ymm4, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][0] * B11[0][0-3] - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - ymm11 = _mm256_fnmadd_pd(ymm9, ymm8, ymm11);//d = c - (a*b) //B11[2][0-3] -= A11[2][1] * B11[1][0-3] - ymm13 = _mm256_fnmadd_pd(ymm10, ymm8, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][1] * B11[1][0-3] - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - ymm13 = _mm256_fnmadd_pd(ymm12, ymm11, ymm13);//d = c - (a*b) //B11[3][0-3] -= A11[3][2] * B11[2][0-3] - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - ymm1 = _mm256_unpacklo_pd(ymm4, ymm8); //B11[0][0] B11[1][0] B11[0][2] B11[1][2] - ymm3 = _mm256_unpacklo_pd(ymm11, ymm13); //B11[2][0] B11[3][0] B11[2][2] B11[3][2] - - //rearrange low elements - ymm0 = _mm256_permute2f128_pd(ymm1,ymm3,0x20); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm2 = _mm256_permute2f128_pd(ymm1,ymm3,0x31); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - - ////unpackhigh//// - ymm14 = _mm256_unpackhi_pd(ymm4, ymm8); //B11[0][1] B11[1][1] B11[0][3] B11[1][3] - - ymm15 = _mm256_unpackhi_pd(ymm11, ymm13); //B11[2][1] B11[3][1] B11[2][3] B11[3][3] - - //rearrange high elements - ymm1 = _mm256_permute2f128_pd(ymm14,ymm15,0x20); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm3 = _mm256_permute2f128_pd(ymm14,ymm15,0x31); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store(B11[0-3][2]) - - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) - - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) - } - - } - if(m_remainder) //implementation for remainder rows(when 'M' is not a multiple of D_MR) - { - a10 = L +i; //pointer to block of A to be used for GEMM - a11 = L + i + (i*cs_a); //pointer to block of A to be used for TRSM - b01 = B + j*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j* cs_b; //pointer to block of B to be used for TRSM - - - k_iter = i / D_MR; //number of times GEMM operations to be performed - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to hold alpha value - - ///GEMM for previously calculated values /// - - - //load 4x4 block from b11 - if(n_remainder == 3) - { - ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm3 = _mm256_broadcast_sd((double const *)&ones); - } - if(n_remainder == 2) - { - ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_broadcast_sd((double const *)&ones); - ymm3 = _mm256_broadcast_sd((double const *)&ones); - } - if(n_remainder == 1) - { - ymm0 = _mm256_loadu_pd((double const *)(b11)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_broadcast_sd((double const *)&ones); - ymm2 = _mm256_broadcast_sd((double const *)&ones); - ymm3 = _mm256_broadcast_sd((double const *)&ones); - } - - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_b01_dup = b01; - ymm8 = _mm256_loadu_pd((double const *)(a10)); //A10[0][0] A10[1][0] A10[2][0] A10[3][0] - ymm9 = _mm256_loadu_pd((double const *)(a10 + cs_a)); //A10[0][1] A10[1][1] A10[2][1] A10[3][1] - ymm10 = _mm256_loadu_pd((double const *)(a10 + cs_a * 2)); //A10[0][2] A10[1][2] A10[2][2] A10[3][2] - ymm11 = _mm256_loadu_pd((double const *)(a10 + cs_a * 3)); //A10[0][3] A10[1][3] A10[2][3] A10[3][3] - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B10[0][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B10[0][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B10[0][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B10[0][3] - - b01 += 1; //move to next row of B - - ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B01[0][0]*A10[0][0] B01[0][0]*A10[1][0] B01[0][0]*A10[2][0] B01[0][0]*A10[3][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B01[0][1]*A10[0][0] B01[0][1]*A10[1][0] B01[0][1]*A10[2][0] B01[0][1]*A10[3][0]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B01[0][2]*A10[0][0] B01[0][2]*A10[1][0] B01[0][2]*A10[2][0] B01[0][2]*A10[3][0]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B01[0][3]*A10[0][0] B01[0][3]*A10[1][0] B01[0][3]*A10[2][0] B01[0][3]*A10[3][0]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B10[1][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B10[1][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B10[1][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B10[1][3] - - b01 += 1; //move to next row of B - - ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B01[1][0]*A10[0][1] B01[1][0]*A10[1][1] B01[1][0]*A10[2][1] B01[1][0]*A10[3][1]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B01[1][1]*A10[0][1] B01[1][1]*A10[1][1] B01[1][1]*A10[2][1] B01[1][1]*A10[3][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B01[1][2]*A10[0][1] B01[1][2]*A10[1][1] B01[1][2]*A10[2][1] B01[1][2]*A10[3][1]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B01[1][3]*A10[0][1] B01[1][3]*A10[1][1] B01[1][3]*A10[2][1] B01[1][3]*A10[3][1]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B10[2][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B10[2][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B10[2][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B10[2][3] - - b01 += 1; //move to next row of B - - - ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B01[2][0]*A10[0][2] B01[2][0]*A10[1][2] B01[2][0]*A10[2][2] B01[2][0]*A10[3][2]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B01[2][1]*A10[0][2] B01[2][1]*A10[1][2] B01[2][1]*A10[2][2] B01[2][1]*A10[3][2]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B01[2][2]*A10[0][2] B01[2][2]*A10[1][2] B01[2][2]*A10[2][2] B01[2][2]*A10[3][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B01[2][3]*A10[0][2] B01[2][3]*A10[1][2] B01[2][3]*A10[2][2] B01[2][3]*A10[3][2]) - - ymm12 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 0)); //B10[3][0] - ymm13 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 1)); //B10[3][1] - ymm14 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 2)); //B10[3][2] - ymm15 = _mm256_broadcast_sd((double const *)(b01 + cs_b * 3)); //B10[3][3] - - b01 += 1; //move to next row of B - - ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B01[3][0]*A10[0][3] B01[3][0]*A10[1][3] B01[3][0]*A10[2][3] B01[3][0]*A10[3][3]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B01[3][1]*A10[0][3] B01[3][1]*A10[1][3] B01[3][1]*A10[2][3] B01[3][1]*A10[3][3]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B01[3][2]*A10[0][3] B01[3][2]*A10[1][3] B01[3][2]*A10[2][3] B01[3][2]*A10[3][3]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B01[3][3]*A10[0][3] B01[3][3]*A10[1][3] B01[3][3]*A10[2][3] B01[3][3]*A10[3][3]) - - a10 += D_MR * cs_a; //pointer math to find next block of A for GEMM - b01 = ptr_b01_dup + D_MR; //pointer math to find next block of B for GEMM - - } - - ymm8 = _mm256_fmsub_pd(ymm0, ymm16, ymm4); //B11[0-3][0] * alpha -= ymm4 - ymm9 = _mm256_fmsub_pd(ymm1, ymm16, ymm5); //B11[0-3][1] * alpha -= ymm5 - ymm10 = _mm256_fmsub_pd(ymm2, ymm16, ymm6); //B11[0-3][2] * alpha -= ymm6 - ymm11 = _mm256_fmsub_pd(ymm3, ymm16, ymm7); //B11[0-3][3] * alpha -= ymm7 - - ///implement TRSM/// - //determine correct values to store - if(m_remainder == 3) - { - ymm0 = _mm256_blend_pd(ymm8, ymm0, 0x08); - ymm1 = _mm256_blend_pd(ymm9, ymm1, 0x08); - ymm2 = _mm256_blend_pd(ymm10, ymm2, 0x08); - ymm3 = _mm256_blend_pd(ymm11, ymm3, 0x08); - - } - if(m_remainder == 2) - { - ymm0 = _mm256_permute2f128_pd(ymm8, ymm0, 0x30); - ymm1 = _mm256_permute2f128_pd(ymm9, ymm1, 0x30); - ymm2 = _mm256_permute2f128_pd(ymm10, ymm2, 0x30); - ymm3 = _mm256_permute2f128_pd(ymm11, ymm3, 0x30); - - } - if(m_remainder == 1) - { - ymm0 = _mm256_blend_pd(ymm8, ymm0, 0x0E); - ymm1 = _mm256_blend_pd(ymm9, ymm1, 0x0E); - ymm2 = _mm256_blend_pd(ymm10, ymm2, 0x0E); - ymm3 = _mm256_blend_pd(ymm11, ymm3, 0x0E); - } - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b * 2), ymm2); //store(B11[0-3][2]) - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + (cs_b)), ymm1); //store(B11[0-3][1]) - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[0-3][0]) - } - - ///scalar code for trsm without alpha/// - dtrsm_small_AlXB_unitDiag(a11, b11, m_remainder, n_remainder, cs_a, cs_b); - } - } - return BLIS_SUCCESS; -} - - -/*implements TRSM for the case XA = alpha * B - *A is upper triangular, non-unit diagonal, no transpose - *dimensions: X:mxn A:nxn B: mxn - */ - -/* b11---> a01 ----> - ***************** *********** - *b01*b11* * * * * * * -b11 * * * * * **a01 * * a11 - | ***************** ********* | - | * * * * * *a11* * | - | * * * * * * * * | - v ***************** ****** v - * * * * * * * - * * * * * * * - ***************** * * - * - -*/ -static err_t bli_dtrsm_small_XAuB( - side_t side, - obj_t* AlphaObj, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ) -{ - dim_t D_MR = 8; //block dimension along the rows - dim_t D_NR = 4; //block dimension along the columns - - dim_t m = bli_obj_length(b); //number of rows - dim_t n = bli_obj_width(b); //number of columns - dim_t m_remainder = m % D_MR; //number of corner rows - dim_t n_remainder = n % D_NR; //number of corner columns - dim_t cs_a = bli_obj_col_stride(a); //column stride of matrix A - dim_t cs_b = bli_obj_col_stride(b); //column stride of matrix B - - if(max(m,n)>150 && (m/n) < 22) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - - dim_t i, j, k; //loop variablse - dim_t k_iter; //determines the number of GEMM operations to be done - dim_t cs_b_offset[2]; //pre-calculated strides - - double ones = 1.0; - - double AlphaVal = *(double *)AlphaObj->buffer; //value of Alpha - double *L = a->buffer; //pointer to matrix A - double *B = b->buffer; //pointer to matrix B - - double *a01, *a11, *b10, *b11; //pointers for GEMM and TRSM blocks - double *ptr_a01_dup; - - cs_b_offset[0] = cs_b << 1; //cs_b_offset[0] = cs_b * 2; - cs_b_offset[1] = cs_b_offset[0] + cs_b;//cs_b_offset[1] = cs_b * 3; - - //ymm scratch reginsters - __m256d ymm0, ymm1, ymm2, ymm3; - __m256d ymm4, ymm5, ymm6, ymm7; - __m256d ymm8, ymm9, ymm10, ymm11; - __m256d ymm12, ymm13, ymm14, ymm15; - __m256d ymm16; - - for(i = 0; (i+D_MR-1) < m; i += D_MR) //loop along 'M' direction - { - for(j = 0; (j+D_NR-1) < n; j += D_NR) //loop along 'N' direction - { - a01 = L + j*cs_a; //pointer to block of A to be used in GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i; //pointer to block of B to be used in GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = j / D_NR; //number of GEMM operations to be done(in blocks of 4x4) - - ymm0 = _mm256_setzero_pd(); - ymm1 = _mm256_setzero_pd(); - ymm2 = _mm256_setzero_pd(); - ymm3 = _mm256_setzero_pd(); - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation starts/// - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //broadcast 1st row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] - - a01 += 1; //move to next row - - //load 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] - - a01 += 1; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) - - //broadcast 3rd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] - - a01 += 1; //move to next row of A01 - - //load next 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) - ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) - - //broadcast 4th row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] - - a01 += 1; //move to next row of A01 - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM - } - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); - //load 8x4 block of B11 - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] - - - ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 - ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 - ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 - ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 - - ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 - ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 - ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 - ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - ymm7 = _mm256_broadcast_sd((double const *)(&ones)); - - //1st col - ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - //2nd col - a11 += cs_a; - ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm2 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][1] - - //3rd col - a11 += cs_a; - ymm3 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][2] - ymm4 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][2] - ymm5 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][2] - - //4th col - a11 += cs_a; - ymm6 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][3] - - //compute reciprocals of L(i,i) and broadcast in registers - ymm0 = _mm256_unpacklo_pd(ymm0, ymm2); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] - ymm2 = _mm256_unpacklo_pd(ymm5, ymm6); //A11[2][2] A11[3][3] A11[1][1] A11[3][3] - - ymm0 = _mm256_blend_pd(ymm0, ymm2, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm7 = _mm256_div_pd(ymm7, ymm0); //(1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3]) - - ymm2 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][3] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][3] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][3] - - //extract a00 - ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) - - ymm8 = _mm256_mul_pd(ymm8, ymm0); //B11[0-3][0] /= A11[0][0] - - ymm12 = _mm256_mul_pd(ymm12, ymm0); //B11[4-7][0] /= A11[0][0] - - //extract a11 - ymm0 = _mm256_permute_pd(ymm7, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00);//(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) - - //(Row1): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm1, ymm8, ymm9); //B11[0-3][1] -= B11[0-3][0] * A11[0][1] - ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[0-3][2] -= B11[0-3][0] * A11[0][2] - ymm11 = _mm256_fnmadd_pd(ymm2, ymm8, ymm11); //B11[0-3][3] -= B11[0-3][0] * A11[0][3] - - ymm13 = _mm256_fnmadd_pd(ymm1, ymm12, ymm13); //B11[4-7][1] -= B11[4-7][0] * A11[0][1] - ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[4-7][2] -= B11[4-7][0] * A11[0][2] - ymm15 = _mm256_fnmadd_pd(ymm2, ymm12, ymm15); //B11[4-7][3] -= B11[4-7][0] * A11[0][3] - - ymm9 = _mm256_mul_pd(ymm9, ymm0); //B11[0-3][1] /= A11[1][1] - - ymm13 = _mm256_mul_pd(ymm13, ymm0); //B11[4-7][1] /= A11[1][1] - - //extract a22 - ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) - - //(Row2)FMA operations - ymm10 = _mm256_fnmadd_pd(ymm4, ymm9, ymm10); //B11[0-3][2] -= B11[0-3][1] * A11[1][2] - ymm11 = _mm256_fnmadd_pd(ymm5, ymm9, ymm11); //B11[0-3][3] -= B11[0-3][1] * A11[1][3] - - ymm14 = _mm256_fnmadd_pd(ymm4, ymm13, ymm14); //B11[4-7][2] -= B11[4-7][1] * A11[1][2] - ymm15 = _mm256_fnmadd_pd(ymm5, ymm13, ymm15); //B11[4-7][3] -= B11[4-7][1] * A11[1][3] - - ymm10 = _mm256_mul_pd(ymm10, ymm0); //B11[0-3][2] /= A11[2][2] - - ymm14 = _mm256_mul_pd(ymm14, ymm0); //B11[4-7][2] /= A11[2][2] - - //extract a33 - ymm0 = _mm256_permute_pd(ymm7, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - - //(Row3)FMA operations - ymm11 = _mm256_fnmadd_pd(ymm6, ymm10, ymm11); //B11[0-3][3] -= B11[0-3][2] * A11[2][3] - - ymm15 = _mm256_fnmadd_pd(ymm6, ymm14, ymm15); //B11[4-7][3] -= B11[4-7][2] * A11[2][3] - - ymm11 = _mm256_mul_pd(ymm11, ymm0); //B11[0-3][3] /= A11[3][3] - - ymm15 = _mm256_mul_pd(ymm15, ymm0); //B11[4-7][3] /= A11[3][3] - - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b), ymm11); //store(B11[0-3][3]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b + D_NR), ymm15);//store(B11[4-7][3]) - } - if(n_remainder) //implementation for remainder columns(when n is not multiple of D_NR) - { - a01 = L + j*cs_a; //pointer to block of A to be used for GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i; //pointer to block of B to be used for GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = j / D_NR; //number of GEMM operations to be performed(in blocks of 4x4) - - ///load 4x4 block of b11 - - ymm0 = _mm256_setzero_pd(); - ymm1 = _mm256_setzero_pd(); - ymm2 = _mm256_setzero_pd(); - ymm3 = _mm256_setzero_pd(); - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation begins/// - - for(k = 0; k < k_iter; k++) ///loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //broadcast 1st row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] - - a01 += 1; //move to next row of A - - //load 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR));//B10[4][1] B10[5][1] B10[6][1] B10[7][1] - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] - - a01 += 1; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) - - //broadcast 3rd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] - - a01 += 1; //move to next row of A - - //load next 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) - ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) - - //broadcast 4th row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] - - a01 += 1; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM - } - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); - - //subtract the calculated GEMM block from current TRSM block - //load 8x4 block of B11 - if(n_remainder == 3) - { - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0-3][1] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][1] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0-3][2] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4-7][2] - ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - } - if(n_remainder == 2) - { - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0-3][1] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][1] - ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] - ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] - ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - } - if(n_remainder == 1) - { - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] - ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][1] - ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][1] - ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] - ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] - ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - } - - ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= B10[0-3][0] - ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha -= B10[4-7][0] - ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha -= B10[0-3][1] - ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= B10[4-7][1] - ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= B10[0-3][2] - ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= B10[4-7][2] - ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= B10[0-3][3] - ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= B10[4-7][3] - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - ymm7 = _mm256_broadcast_sd((double const *)(&ones)); - - //1st col - ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - //2nd col - a11 += cs_a; - ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm2 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][1] - - //3rd col - a11 += cs_a; - ymm3 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][2] - ymm4 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][2] - ymm5 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][2] - - //4th col - a11 += cs_a; - ymm6 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][3] - - //compute reciprocals of L(i,i) and broadcast in registers - ymm0 = _mm256_unpacklo_pd(ymm0, ymm2); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] - ymm2 = _mm256_unpacklo_pd(ymm5, ymm6); //A11[2][2] A11[3][3] A11[1][1] A11[3][3] - - ymm0 = _mm256_blend_pd(ymm0, ymm2, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm7 = _mm256_div_pd(ymm7, ymm0); //(1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3]) - - ymm2 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][3] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][3] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][3] - - //extract a00 - ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00);//(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) - - ymm8 = _mm256_mul_pd(ymm8, ymm0); //B11[0-3][0] /= A11[0][0] - - ymm12 = _mm256_mul_pd(ymm12, ymm0); //B11[4-7][0] /= A11[0][0] - - //extract a11 - ymm0 = _mm256_permute_pd(ymm7, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00);//(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) - - //(Row1): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm1, ymm8, ymm9); //B11[0-3][1] -= B11[0-3][0] * A11[0][1] - ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[0-3][2] -= B11[0-3][0] * A11[0][2] - ymm11 = _mm256_fnmadd_pd(ymm2, ymm8, ymm11); //B11[0-3][3] -= B11[0-3][0] * A11[0][3] - - ymm13 = _mm256_fnmadd_pd(ymm1, ymm12, ymm13); //B11[4-7][1] -= B11[4-7][0] * A11[0][1] - ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[4-7][2] -= B11[4-7][0] * A11[0][2] - ymm15 = _mm256_fnmadd_pd(ymm2, ymm12, ymm15); //B11[4-7][3] -= B11[4-7][0] * A11[0][3] - - ymm9 = _mm256_mul_pd(ymm9, ymm0); //B11[0-3][1] /= A11[1][1] - - ymm13 = _mm256_mul_pd(ymm13, ymm0); //B11[4-7][1] /= A11[1][1] - - //extract a22 - ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) - - //(Row2)FMA operations - ymm10 = _mm256_fnmadd_pd(ymm4, ymm9, ymm10); //B11[0-3][2] -= B11[0-3][1] * A11[1][2] - ymm11 = _mm256_fnmadd_pd(ymm5, ymm9, ymm11); //B11[0-3][3] -= B11[0-3][1] * A11[1][3] - - ymm14 = _mm256_fnmadd_pd(ymm4, ymm13, ymm14); //B11[4-7][2] -= B11[4-7][1] * A11[1][2] - ymm15 = _mm256_fnmadd_pd(ymm5, ymm13, ymm15); //B11[4-7][3] -= B11[4-7][1] * A11[1][3] - - ymm10 = _mm256_mul_pd(ymm10, ymm0); //B11[0-3][2] /= A11[2][2] - - ymm14 = _mm256_mul_pd(ymm14, ymm0); //B11[4-7][2] /= A11[2][2] - - //extract a33 - ymm0 = _mm256_permute_pd(ymm7, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11); //(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - - //(Row3)FMA operations - ymm11 = _mm256_fnmadd_pd(ymm6, ymm10, ymm11); //B11[0-3][3] -= B11[0-3][2] * A11[2][3] - - ymm15 = _mm256_fnmadd_pd(ymm6, ymm14, ymm15); //B11[4-7][3] -= B11[4-7][2] * A11[2][3] - - ymm11 = _mm256_mul_pd(ymm11, ymm0); //B11[0-3][3] /= A11[3][3] - - ymm15 = _mm256_mul_pd(ymm15, ymm0); //B11[4-7][3] /= A11[3][3] - - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14);//store(B11[4-7][2]) - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - } - } - } - if((m & 4)) ///implementation for remainder rows(when m_remainder is a multiple of 4) - { - for(j = 0; (j+D_NR-1) a01 ----> - ***************** *********** - *b01*b11* * * * * * * -b11 * * * * * **a01 * * a11 - | ***************** ********* | - | * * * * * *a11* * | - | * * * * * * * * | - v ***************** ****** v - * * * * * * * - * * * * * * * - ***************** * * - * - -*/ - -static err_t bli_dtrsm_small_XAuB_unitDiag( - side_t side, - obj_t* AlphaObj, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ) -{ - dim_t D_MR = 8; //block dimension along the rows - dim_t D_NR = 4; //block dimension along the columns - - dim_t m = bli_obj_length(b); //number of rows - dim_t n = bli_obj_width(b); //number of columns - dim_t m_remainder = m % D_MR; //number of corner rows - dim_t n_remainder = n % D_NR; //number of corner columns - dim_t cs_a = bli_obj_col_stride(a); //column stride of matrix A - dim_t cs_b = bli_obj_col_stride(b); //column stride of matrix B - - if((max(m,n)>180) && (m/n)<22) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - - dim_t i, j, k; //loop variablse - dim_t k_iter; //determines the number of GEMM operations to be done - dim_t cs_b_offset[2]; //pre-calculated strides - - double ones = 1.0; - - double AlphaVal = *(double *)AlphaObj->buffer; //value of Alpha - double *L = a->buffer; //pointer to matrix A - double *B = b->buffer; //pointer to matrix B - - double *a01, *a11, *b10, *b11; //pointers for GEMM and TRSM blocks - double *ptr_a01_dup; - - cs_b_offset[0] = cs_b << 1; //cs_b_offset[0] = cs_b * 2; - cs_b_offset[1] = cs_b_offset[0] + cs_b;//cs_b_offset[1] = cs_b * 3; - - //ymm scratch reginsters - __m256d ymm0, ymm1, ymm2, ymm3; - __m256d ymm4, ymm5, ymm6, ymm7; - __m256d ymm8, ymm9, ymm10, ymm11; - __m256d ymm12, ymm13, ymm14, ymm15; - __m256d ymm16; - - for(i = 0; (i+D_MR-1) < m; i += D_MR) //loop along 'M' direction - { - for(j = 0; (j+D_NR-1) < n; j += D_NR) //loop along 'N' direction - { - a01 = L + j*cs_a; //pointer to block of A to be used in GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i; //pointer to block of B to be used in GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = j / D_NR; //number of GEMM operations to be done(in blocks of 4x4) - - ymm0 = _mm256_setzero_pd(); - ymm1 = _mm256_setzero_pd(); - ymm2 = _mm256_setzero_pd(); - ymm3 = _mm256_setzero_pd(); - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation starts/// - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //broadcast 1st row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] - - a01 += 1; //move to next row - - //load 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] - - a01 += 1; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) - - //broadcast 3rd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] - - a01 += 1; //move to next row of A01 - - //load next 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) - ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) - - //broadcast 4th row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] - - a01 += 1; //move to next row of A01 - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM - } - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); - //load 8x4 block of B11 - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] - - - ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 - ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 - ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 - ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 - - ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 - ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 - ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 - ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - ymm7 = _mm256_broadcast_sd((double const *)(&ones)); - - //1st col - ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - //2nd col - a11 += cs_a; - ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm2 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][1] - - //3rd col - a11 += cs_a; - ymm3 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][2] - ymm4 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][2] - ymm5 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][2] - - //4th col - a11 += cs_a; - ymm6 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][3] - - ymm2 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][3] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][3] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][3] - - //(Row1): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm1, ymm8, ymm9); //B11[0-3][1] -= B11[0-3][0] * A11[0][1] - ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[0-3][2] -= B11[0-3][0] * A11[0][2] - ymm11 = _mm256_fnmadd_pd(ymm2, ymm8, ymm11); //B11[0-3][3] -= B11[0-3][0] * A11[0][3] - - ymm13 = _mm256_fnmadd_pd(ymm1, ymm12, ymm13); //B11[4-7][1] -= B11[4-7][0] * A11[0][1] - ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[4-7][2] -= B11[4-7][0] * A11[0][2] - ymm15 = _mm256_fnmadd_pd(ymm2, ymm12, ymm15); //B11[4-7][3] -= B11[4-7][0] * A11[0][3] - - - //(Row2)FMA operations - ymm10 = _mm256_fnmadd_pd(ymm4, ymm9, ymm10); //B11[0-3][2] -= B11[0-3][1] * A11[1][2] - ymm11 = _mm256_fnmadd_pd(ymm5, ymm9, ymm11); //B11[0-3][3] -= B11[0-3][1] * A11[1][3] - - ymm14 = _mm256_fnmadd_pd(ymm4, ymm13, ymm14); //B11[4-7][2] -= B11[4-7][1] * A11[1][2] - ymm15 = _mm256_fnmadd_pd(ymm5, ymm13, ymm15); //B11[4-7][3] -= B11[4-7][1] * A11[1][3] - - - //(Row3)FMA operations - ymm11 = _mm256_fnmadd_pd(ymm6, ymm10, ymm11); //B11[0-3][3] -= B11[0-3][2] * A11[2][3] - - ymm15 = _mm256_fnmadd_pd(ymm6, ymm14, ymm15); //B11[4-7][3] -= B11[4-7][2] * A11[2][3] - - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b), ymm11); //store(B11[0-3][3]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b + D_NR), ymm15);//store(B11[4-7][3]) - } - if(n_remainder) //implementation for remainder columns(when n is not multiple of D_NR) - { - a01 = L + j*cs_a; //pointer to block of A to be used for GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i; //pointer to block of B to be used for GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = j / D_NR; //number of GEMM operations to be performed(in blocks of 4x4) - - ///load 4x4 block of b11 - - ymm0 = _mm256_setzero_pd(); - ymm1 = _mm256_setzero_pd(); - ymm2 = _mm256_setzero_pd(); - ymm3 = _mm256_setzero_pd(); - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation begins/// - - for(k = 0; k < k_iter; k++) ///loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //broadcast 1st row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] - - a01 += 1; //move to next row of A - - //load 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR));//B10[4][1] B10[5][1] B10[6][1] B10[7][1] - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] - - a01 += 1; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) - - //broadcast 3rd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] - - a01 += 1; //move to next row of A - - //load next 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) - ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) - - //broadcast 4th row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] - - a01 += 1; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM - } - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); - - //subtract the calculated GEMM block from current TRSM block - //load 8x4 block of B11 - if(n_remainder == 3) - { - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0-3][1] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][1] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0-3][2] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4-7][2] - ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - } - if(n_remainder == 2) - { - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0-3][1] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][1] - ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] - ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] - ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - } - if(n_remainder == 1) - { - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] - ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][1] - ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][1] - ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] - ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] - ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - } - - ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= B10[0-3][0] - ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha -= B10[4-7][0] - ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha -= B10[0-3][1] - ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= B10[4-7][1] - ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= B10[0-3][2] - ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= B10[4-7][2] - ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= B10[0-3][3] - ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= B10[4-7][3] - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - ymm7 = _mm256_broadcast_sd((double const *)(&ones)); - - //1st col - ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - //2nd col - a11 += cs_a; - ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm2 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][1] - - //3rd col - a11 += cs_a; - ymm3 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][2] - ymm4 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][2] - ymm5 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][2] - - //4th col - a11 += cs_a; - ymm6 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[3][3] - - ymm2 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][3] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[1][3] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[2][3] - - - //(Row1): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm1, ymm8, ymm9); //B11[0-3][1] -= B11[0-3][0] * A11[0][1] - ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[0-3][2] -= B11[0-3][0] * A11[0][2] - ymm11 = _mm256_fnmadd_pd(ymm2, ymm8, ymm11); //B11[0-3][3] -= B11[0-3][0] * A11[0][3] - - ymm13 = _mm256_fnmadd_pd(ymm1, ymm12, ymm13); //B11[4-7][1] -= B11[4-7][0] * A11[0][1] - ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[4-7][2] -= B11[4-7][0] * A11[0][2] - ymm15 = _mm256_fnmadd_pd(ymm2, ymm12, ymm15); //B11[4-7][3] -= B11[4-7][0] * A11[0][3] - - //(Row2)FMA operations - ymm10 = _mm256_fnmadd_pd(ymm4, ymm9, ymm10); //B11[0-3][2] -= B11[0-3][1] * A11[1][2] - ymm11 = _mm256_fnmadd_pd(ymm5, ymm9, ymm11); //B11[0-3][3] -= B11[0-3][1] * A11[1][3] - - ymm14 = _mm256_fnmadd_pd(ymm4, ymm13, ymm14); //B11[4-7][2] -= B11[4-7][1] * A11[1][2] - ymm15 = _mm256_fnmadd_pd(ymm5, ymm13, ymm15); //B11[4-7][3] -= B11[4-7][1] * A11[1][3] - - //(Row3)FMA operations - ymm11 = _mm256_fnmadd_pd(ymm6, ymm10, ymm11); //B11[0-3][3] -= B11[0-3][2] * A11[2][3] - - ymm15 = _mm256_fnmadd_pd(ymm6, ymm14, ymm15); //B11[4-7][3] -= B11[4-7][2] * A11[2][3] - - ymm11 = _mm256_mul_pd(ymm11, ymm0); //B11[0-3][3] /= A11[3][3] - - ymm15 = _mm256_mul_pd(ymm15, ymm0); //B11[4-7][3] /= A11[3][3] - - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14);//store(B11[4-7][2]) - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - } - } - } - if((m & 4)) ///implementation for remainder rows(when m_remainder is a multiple of 4) - { - for(j = 0; (j+D_NR-1) a01 ----> - ***************** *********** - *b01*b11* * * * * * * -b11 * * * * * **a01 * * a11 - | ***************** ********* | - | * * * * * *a11* * | - | * * * * * * * * | - v ***************** ****** v - * * * * * * * - * * * * * * * - ***************** * * - * - -*/ -static err_t bli_dtrsm_small_XAltB( - side_t side, - obj_t* AlphaObj, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ) -{ - dim_t D_MR = 8; //block dimension along the rows - dim_t D_NR = 4; //block dimension along the columns - - dim_t m = bli_obj_length(b); //number of rows - dim_t n = bli_obj_width(b); //number of columns - dim_t m_remainder = m % D_MR; //number of corner rows - dim_t n_remainder = n % D_NR; //number of corner columns - dim_t cs_a = bli_obj_col_stride(a); //column stride of matrix A - dim_t cs_b = bli_obj_col_stride(b); //column stride of matrix B - - if(max(m,n) > 120) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - - dim_t i, j, k; //loop variablse - dim_t k_iter; //determines the number of GEMM operations to be done - dim_t cs_b_offset[2]; //pre-calculated strides - - double ones = 1.0; - - double AlphaVal = *(double *)AlphaObj->buffer; //value of Alpha - double *L = a->buffer; //pointer to matrix A - double *B = b->buffer; //pointer to matrix B - - double *a01, *a11, *b10, *b11; //pointers for GEMM and TRSM blocks - double *ptr_a01_dup; - - cs_b_offset[0] = cs_b << 1; //cs_b_offset[0] = cs_b * 2; - cs_b_offset[1] = cs_b_offset[0] + cs_b;//cs_b_offset[1] = cs_b * 3; - - //ymm scratch reginsters - __m256d ymm0, ymm1, ymm2, ymm3; - __m256d ymm4, ymm5, ymm6, ymm7; - __m256d ymm8, ymm9, ymm10, ymm11; - __m256d ymm12, ymm13, ymm14, ymm15; - __m256d ymm16; - - for(i = 0; (i+D_MR-1) < m; i += D_MR) //loop along 'M' direction - { - for(j = 0; (j+D_NR-1) < n; j += D_NR) //loop along 'N' direction - { - a01 = L + j; //pointer to block of A to be used in GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i; //pointer to block of B to be used in GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = j / D_NR; //number of GEMM operations to be done(in blocks of 4x4) - - ymm0 = _mm256_setzero_pd(); - ymm1 = _mm256_setzero_pd(); - ymm2 = _mm256_setzero_pd(); - ymm3 = _mm256_setzero_pd(); - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation starts/// - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //broadcast 1st row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] - - a01 += cs_a; //move to next row - - //load 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] - - a01 += cs_a; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) - - //broadcast 3rd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] - - a01 += cs_a; //move to next row of A01 - - //load next 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) - ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) - - //broadcast 4th row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] - - a01 += cs_a; //move to next row of A01 - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM - } - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); - //load 8x4 block of B11 - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] - - - ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 - ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 - ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 - ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 - - ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 - ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 - ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 - ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - ymm7 = _mm256_broadcast_sd((double const *)(&ones)); - - //1st col - ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - //2nd col - a11 += 1; - ymm1 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][1] - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][1] - - //3rd col - a11 += 1; - ymm3 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][2] - ymm4 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][2] - ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][2] - - //4th col - a11 += 1; - ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 3)); //A11[3][3] - - //compute reciprocals of L(i,i) and broadcast in registers - ymm0 = _mm256_unpacklo_pd(ymm0, ymm2); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] - ymm2 = _mm256_unpacklo_pd(ymm5, ymm6); //A11[2][2] A11[3][3] A11[1][1] A11[3][3] - - ymm0 = _mm256_blend_pd(ymm0, ymm2, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm7 = _mm256_div_pd(ymm7, ymm0); //(1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3]) - - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][3] - ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][3] - ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][3] - - //extract a00 - ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) - - ymm8 = _mm256_mul_pd(ymm8, ymm0); //B11[0-3][0] /= A11[0][0] - - ymm12 = _mm256_mul_pd(ymm12, ymm0); //B11[4-7][0] /= A11[0][0] - - //extract a11 - ymm0 = _mm256_permute_pd(ymm7, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00);//(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) - - //(Row1): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm1, ymm8, ymm9); //B11[0-3][1] -= B11[0-3][0] * A11[0][1] - ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[0-3][2] -= B11[0-3][0] * A11[0][2] - ymm11 = _mm256_fnmadd_pd(ymm2, ymm8, ymm11); //B11[0-3][3] -= B11[0-3][0] * A11[0][3] - - ymm13 = _mm256_fnmadd_pd(ymm1, ymm12, ymm13); //B11[4-7][1] -= B11[4-7][0] * A11[0][1] - ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[4-7][2] -= B11[4-7][0] * A11[0][2] - ymm15 = _mm256_fnmadd_pd(ymm2, ymm12, ymm15); //B11[4-7][3] -= B11[4-7][0] * A11[0][3] - - ymm9 = _mm256_mul_pd(ymm9, ymm0); //B11[0-3][1] /= A11[1][1] - - ymm13 = _mm256_mul_pd(ymm13, ymm0); //B11[4-7][1] /= A11[1][1] - - //extract a22 - ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) - - //(Row2)FMA operations - ymm10 = _mm256_fnmadd_pd(ymm4, ymm9, ymm10); //B11[0-3][2] -= B11[0-3][1] * A11[1][2] - ymm11 = _mm256_fnmadd_pd(ymm5, ymm9, ymm11); //B11[0-3][3] -= B11[0-3][1] * A11[1][3] - - ymm14 = _mm256_fnmadd_pd(ymm4, ymm13, ymm14); //B11[4-7][2] -= B11[4-7][1] * A11[1][2] - ymm15 = _mm256_fnmadd_pd(ymm5, ymm13, ymm15); //B11[4-7][3] -= B11[4-7][1] * A11[1][3] - - ymm10 = _mm256_mul_pd(ymm10, ymm0); //B11[0-3][2] /= A11[2][2] - - ymm14 = _mm256_mul_pd(ymm14, ymm0); //B11[4-7][2] /= A11[2][2] - - //extract a33 - ymm0 = _mm256_permute_pd(ymm7, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - - //(Row3)FMA operations - ymm11 = _mm256_fnmadd_pd(ymm6, ymm10, ymm11); //B11[0-3][3] -= B11[0-3][2] * A11[2][3] - - ymm15 = _mm256_fnmadd_pd(ymm6, ymm14, ymm15); //B11[4-7][3] -= B11[4-7][2] * A11[2][3] - - ymm11 = _mm256_mul_pd(ymm11, ymm0); //B11[0-3][3] /= A11[3][3] - - ymm15 = _mm256_mul_pd(ymm15, ymm0); //B11[4-7][3] /= A11[3][3] - - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b), ymm11); //store(B11[0-3][3]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b + D_NR), ymm15);//store(B11[4-7][3]) - } - if(n_remainder) //implementation for remainder columns(when n is not multiple of D_NR) - { - a01 = L + j; //pointer to block of A to be used for GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i; //pointer to block of B to be used for GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = j / D_NR; //number of GEMM operations to be performed(in blocks of 4x4) - - ///load 4x4 block of b11 - - ymm0 = _mm256_setzero_pd(); - ymm1 = _mm256_setzero_pd(); - ymm2 = _mm256_setzero_pd(); - ymm3 = _mm256_setzero_pd(); - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation begins/// - - for(k = 0; k < k_iter; k++) ///loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //broadcast 1st row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] - - a01 += cs_a; //move to next row of A - - //load 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR));//B10[4][1] B10[5][1] B10[6][1] B10[7][1] - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] - - a01 += cs_a; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) - - //broadcast 3rd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] - - a01 += cs_a; //move to next row of A - - //load next 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) - ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) - - //broadcast 4th row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] - - a01 += cs_a; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM - } - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); - - //subtract the calculated GEMM block from current TRSM block - //load 8x4 block of B11 - if(n_remainder == 3) - { - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0-3][1] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][1] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0-3][2] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4-7][2] - ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - } - if(n_remainder == 2) - { - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0-3][1] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][1] - ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] - ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] - ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - } - if(n_remainder == 1) - { - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] - ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][1] - ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][1] - ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] - ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] - ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - } - - ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= B10[0-3][0] - ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha -= B10[4-7][0] - ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha -= B10[0-3][1] - ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= B10[4-7][1] - ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= B10[0-3][2] - ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= B10[4-7][2] - ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= B10[0-3][3] - ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= B10[4-7][3] - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - ymm7 = _mm256_broadcast_sd((double const *)(&ones)); - - //1st col - ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - //2nd col - a11 += 1; - ymm1 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][1] - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][1] - - //3rd col - a11 += 1; - ymm3 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][2] - ymm4 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][2] - ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][2] - - //4th col - a11 += 1; - ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 3)); //A11[3][3] - - //compute reciprocals of L(i,i) and broadcast in registers - ymm0 = _mm256_unpacklo_pd(ymm0, ymm2); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] - ymm2 = _mm256_unpacklo_pd(ymm5, ymm6); //A11[2][2] A11[3][3] A11[1][1] A11[3][3] - - ymm0 = _mm256_blend_pd(ymm0, ymm2, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm7 = _mm256_div_pd(ymm7, ymm0); //(1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3]) - - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][3] - ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][3] - ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][3] - - //extract a00 - ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00);//(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) - - ymm8 = _mm256_mul_pd(ymm8, ymm0); //B11[0-3][0] /= A11[0][0] - - ymm12 = _mm256_mul_pd(ymm12, ymm0); //B11[4-7][0] /= A11[0][0] - - //extract a11 - ymm0 = _mm256_permute_pd(ymm7, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00);//(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) - - //(Row1): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm1, ymm8, ymm9); //B11[0-3][1] -= B11[0-3][0] * A11[0][1] - ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[0-3][2] -= B11[0-3][0] * A11[0][2] - ymm11 = _mm256_fnmadd_pd(ymm2, ymm8, ymm11); //B11[0-3][3] -= B11[0-3][0] * A11[0][3] - - ymm13 = _mm256_fnmadd_pd(ymm1, ymm12, ymm13); //B11[4-7][1] -= B11[4-7][0] * A11[0][1] - ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[4-7][2] -= B11[4-7][0] * A11[0][2] - ymm15 = _mm256_fnmadd_pd(ymm2, ymm12, ymm15); //B11[4-7][3] -= B11[4-7][0] * A11[0][3] - - ymm9 = _mm256_mul_pd(ymm9, ymm0); //B11[0-3][1] /= A11[1][1] - - ymm13 = _mm256_mul_pd(ymm13, ymm0); //B11[4-7][1] /= A11[1][1] - - //extract a22 - ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) - - //(Row2)FMA operations - ymm10 = _mm256_fnmadd_pd(ymm4, ymm9, ymm10); //B11[0-3][2] -= B11[0-3][1] * A11[1][2] - ymm11 = _mm256_fnmadd_pd(ymm5, ymm9, ymm11); //B11[0-3][3] -= B11[0-3][1] * A11[1][3] - - ymm14 = _mm256_fnmadd_pd(ymm4, ymm13, ymm14); //B11[4-7][2] -= B11[4-7][1] * A11[1][2] - ymm15 = _mm256_fnmadd_pd(ymm5, ymm13, ymm15); //B11[4-7][3] -= B11[4-7][1] * A11[1][3] - - ymm10 = _mm256_mul_pd(ymm10, ymm0); //B11[0-3][2] /= A11[2][2] - - ymm14 = _mm256_mul_pd(ymm14, ymm0); //B11[4-7][2] /= A11[2][2] - - //extract a33 - ymm0 = _mm256_permute_pd(ymm7, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11); //(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - - //(Row3)FMA operations - ymm11 = _mm256_fnmadd_pd(ymm6, ymm10, ymm11); //B11[0-3][3] -= B11[0-3][2] * A11[2][3] - - ymm15 = _mm256_fnmadd_pd(ymm6, ymm14, ymm15); //B11[4-7][3] -= B11[4-7][2] * A11[2][3] - - ymm11 = _mm256_mul_pd(ymm11, ymm0); //B11[0-3][3] /= A11[3][3] - - ymm15 = _mm256_mul_pd(ymm15, ymm0); //B11[4-7][3] /= A11[3][3] - - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14);//store(B11[4-7][2]) - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - } - } - } - if((m & 4)) ///implementation for remainder rows(when m_remainder is a multiple of 4) - { - for(j = 0; (j+D_NR-1) a01 ----> - ***************** *********** - *b01*b11* * * * * * * -b11 * * * * * **a01 * * a11 - | ***************** ********* | - | * * * * * *a11* * | - | * * * * * * * * | - v ***************** ****** v - * * * * * * * - * * * * * * * - ***************** * * - * - -*/ -static err_t bli_dtrsm_small_XAltB_unitDiag( - side_t side, - obj_t* AlphaObj, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ) -{ - dim_t D_MR = 8; //block dimension along the rows - dim_t D_NR = 4; //block dimension along the columns - - dim_t m = bli_obj_length(b); //number of rows - dim_t n = bli_obj_width(b); //number of columns - dim_t m_remainder = m % D_MR; //number of corner rows - dim_t n_remainder = n % D_NR; //number of corner columns - dim_t cs_a = bli_obj_col_stride(a); //column stride of matrix A - dim_t cs_b = bli_obj_col_stride(b); //column stride of matrix B - - if(max(m,n) > 120) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - - - dim_t i, j, k; //loop variablse - dim_t k_iter; //determines the number of GEMM operations to be done - dim_t cs_b_offset[2]; //pre-calculated strides - - double ones = 1.0; - - double AlphaVal = *(double *)AlphaObj->buffer; //value of Alpha - double *L = a->buffer; //pointer to matrix A - double *B = b->buffer; //pointer to matrix B - - double *a01, *a11, *b10, *b11; //pointers for GEMM and TRSM blocks - double *ptr_a01_dup; - - cs_b_offset[0] = cs_b << 1; //cs_b_offset[0] = cs_b * 2; - cs_b_offset[1] = cs_b_offset[0] + cs_b;//cs_b_offset[1] = cs_b * 3; - - //ymm scratch reginsters - __m256d ymm0, ymm1, ymm2, ymm3; - __m256d ymm4, ymm5, ymm6, ymm7; - __m256d ymm8, ymm9, ymm10, ymm11; - __m256d ymm12, ymm13, ymm14, ymm15; - __m256d ymm16; - - for(i = 0; (i+D_MR-1) < m; i += D_MR) //loop along 'M' direction - { - for(j = 0; (j+D_NR-1) < n; j += D_NR) //loop along 'N' direction - { - a01 = L + j; //pointer to block of A to be used in GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i; //pointer to block of B to be used in GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = j / D_NR; //number of GEMM operations to be done(in blocks of 4x4) - - ymm0 = _mm256_setzero_pd(); - ymm1 = _mm256_setzero_pd(); - ymm2 = _mm256_setzero_pd(); - ymm3 = _mm256_setzero_pd(); - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation starts/// - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //broadcast 1st row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] - - a01 += cs_a; //move to next row - - //load 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] - - a01 += cs_a; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) - - //broadcast 3rd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] - - a01 += cs_a; //move to next row of A01 - - //load next 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) - ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) - - //broadcast 4th row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] - - a01 += cs_a; //move to next row of A01 - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM - } - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); - //load 8x4 block of B11 - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] - - - ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 - ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 - ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 - ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 - - ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 - ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 - ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 - ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - //1st col - ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - //2nd col - a11 += 1; - ymm1 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][1] - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][1] - - //3rd col - a11 += 1; - ymm3 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][2] - ymm4 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][2] - ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][2] - - //4th col - a11 += 1; - ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 3)); //A11[3][3] - - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][3] - ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][3] - ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][3] - - //(Row1): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm1, ymm8, ymm9); //B11[0-3][1] -= B11[0-3][0] * A11[0][1] - ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[0-3][2] -= B11[0-3][0] * A11[0][2] - ymm11 = _mm256_fnmadd_pd(ymm2, ymm8, ymm11); //B11[0-3][3] -= B11[0-3][0] * A11[0][3] - - ymm13 = _mm256_fnmadd_pd(ymm1, ymm12, ymm13); //B11[4-7][1] -= B11[4-7][0] * A11[0][1] - ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[4-7][2] -= B11[4-7][0] * A11[0][2] - ymm15 = _mm256_fnmadd_pd(ymm2, ymm12, ymm15); //B11[4-7][3] -= B11[4-7][0] * A11[0][3] - - //(Row2)FMA operations - ymm10 = _mm256_fnmadd_pd(ymm4, ymm9, ymm10); //B11[0-3][2] -= B11[0-3][1] * A11[1][2] - ymm11 = _mm256_fnmadd_pd(ymm5, ymm9, ymm11); //B11[0-3][3] -= B11[0-3][1] * A11[1][3] - - ymm14 = _mm256_fnmadd_pd(ymm4, ymm13, ymm14); //B11[4-7][2] -= B11[4-7][1] * A11[1][2] - ymm15 = _mm256_fnmadd_pd(ymm5, ymm13, ymm15); //B11[4-7][3] -= B11[4-7][1] * A11[1][3] - - //(Row3)FMA operations - ymm11 = _mm256_fnmadd_pd(ymm6, ymm10, ymm11); //B11[0-3][3] -= B11[0-3][2] * A11[2][3] - - ymm15 = _mm256_fnmadd_pd(ymm6, ymm14, ymm15); //B11[4-7][3] -= B11[4-7][2] * A11[2][3] - - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b), ymm11); //store(B11[0-3][3]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b + D_NR), ymm15);//store(B11[4-7][3]) - } - if(n_remainder) //implementation for remainder columns(when n is not multiple of D_NR) - { - a01 = L + j; //pointer to block of A to be used for GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i; //pointer to block of B to be used for GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = j / D_NR; //number of GEMM operations to be performed(in blocks of 4x4) - - ///load 4x4 block of b11 - - ymm0 = _mm256_setzero_pd(); - ymm1 = _mm256_setzero_pd(); - ymm2 = _mm256_setzero_pd(); - ymm3 = _mm256_setzero_pd(); - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation begins/// - - for(k = 0; k < k_iter; k++) ///loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //broadcast 1st row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] - - a01 += cs_a; //move to next row of A - - //load 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR));//B10[4][1] B10[5][1] B10[6][1] B10[7][1] - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] - - a01 += cs_a; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) - - //broadcast 3rd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] - - a01 += cs_a; //move to next row of A - - //load next 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) - ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) - - //broadcast 4th row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] - - a01 += cs_a; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM - } - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); - - //subtract the calculated GEMM block from current TRSM block - //load 8x4 block of B11 - if(n_remainder == 3) - { - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0-3][1] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][1] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0-3][2] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4-7][2] - ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - } - if(n_remainder == 2) - { - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0-3][1] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][1] - ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] - ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] - ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - } - if(n_remainder == 1) - { - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0-3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4-7][0] - ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][1] - ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][1] - ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] - ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] - ymm11 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm15 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - } - - ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= B10[0-3][0] - ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha -= B10[4-7][0] - ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha -= B10[0-3][1] - ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= B10[4-7][1] - ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= B10[0-3][2] - ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= B10[4-7][2] - ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= B10[0-3][3] - ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= B10[4-7][3] - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - ymm7 = _mm256_broadcast_sd((double const *)(&ones)); - - //1st col - ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - //2nd col - a11 += 1; - ymm1 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][1] - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][1] - - //3rd col - a11 += 1; - ymm3 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][2] - ymm4 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][2] - ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][2] - - //4th col - a11 += 1; - ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 3)); //A11[3][3] - - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][3] - ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][3] - ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][3] - - //(Row1): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm1, ymm8, ymm9); //B11[0-3][1] -= B11[0-3][0] * A11[0][1] - ymm10 = _mm256_fnmadd_pd(ymm3, ymm8, ymm10); //B11[0-3][2] -= B11[0-3][0] * A11[0][2] - ymm11 = _mm256_fnmadd_pd(ymm2, ymm8, ymm11); //B11[0-3][3] -= B11[0-3][0] * A11[0][3] - - ymm13 = _mm256_fnmadd_pd(ymm1, ymm12, ymm13); //B11[4-7][1] -= B11[4-7][0] * A11[0][1] - ymm14 = _mm256_fnmadd_pd(ymm3, ymm12, ymm14); //B11[4-7][2] -= B11[4-7][0] * A11[0][2] - ymm15 = _mm256_fnmadd_pd(ymm2, ymm12, ymm15); //B11[4-7][3] -= B11[4-7][0] * A11[0][3] - - //(Row2)FMA operations - ymm10 = _mm256_fnmadd_pd(ymm4, ymm9, ymm10); //B11[0-3][2] -= B11[0-3][1] * A11[1][2] - ymm11 = _mm256_fnmadd_pd(ymm5, ymm9, ymm11); //B11[0-3][3] -= B11[0-3][1] * A11[1][3] - - ymm14 = _mm256_fnmadd_pd(ymm4, ymm13, ymm14); //B11[4-7][2] -= B11[4-7][1] * A11[1][2] - ymm15 = _mm256_fnmadd_pd(ymm5, ymm13, ymm15); //B11[4-7][3] -= B11[4-7][1] * A11[1][3] - - //(Row3)FMA operations - ymm11 = _mm256_fnmadd_pd(ymm6, ymm10, ymm11); //B11[0-3][3] -= B11[0-3][2] * A11[2][3] - - ymm15 = _mm256_fnmadd_pd(ymm6, ymm14, ymm15); //B11[4-7][3] -= B11[4-7][2] * A11[2][3] - - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14);//store(B11[4-7][2]) - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - } - } - } - if((m & 4)) ///implementation for remainder rows(when m_remainder is a multiple of 4) - { - for(j = 0; (j+D_NR-1) 120) - return BLIS_NOT_YET_IMPLEMENTED; - - dim_t i, j, k; //loop variablse - dim_t k_iter; //determines the number of GEMM operations to be done - dim_t cs_b_offset[2]; //pre-calculated strides - - double ones = 1.0; - - double AlphaVal = *(double *)AlphaObj->buffer; //value of Alpha - double *L = a->buffer; //pointer to matrix A - double *B = b->buffer; //pointer to matrix B - - double *a01, *a11, *b10, *b11; //pointers for GEMM and TRSM blocks - double *ptr_a01_dup; - - cs_b_offset[0] = cs_b << 1; //cs_b_offset[0] = cs_b * 2; - cs_b_offset[1] = cs_b_offset[0] + cs_b;//cs_b_offset[1] = cs_b * 3; - - //ymm scratch reginsters - __m256d ymm0, ymm1, ymm2, ymm3; - __m256d ymm4, ymm5, ymm6, ymm7; - __m256d ymm8, ymm9, ymm10, ymm11; - __m256d ymm12, ymm13, ymm14, ymm15; - __m256d ymm16; - - for(i = (m-D_MR); (i+1) > 0; i -= D_MR) //loop along 'M' direction - { - for(j = (n-D_NR); (j+1) > 0; j -= D_NR) //loop along 'N' direction - { - a01 = L + j*cs_a +(j+D_NR); //pointer to block of A to be used in GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used in GEMM - b11 = B + (i) + (j)*cs_b; //pointer to block of B to be used for TRSM - - k_iter = (n-j-D_NR) / D_NR; //number of GEMM operations to be done(in blocks of 4x4) - - ymm0 = _mm256_setzero_pd(); - ymm1 = _mm256_setzero_pd(); - ymm2 = _mm256_setzero_pd(); - ymm3 = _mm256_setzero_pd(); - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation starts/// - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //broadcast 1st row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] - - a01 += 1; //move to next row - - //load 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] - - a01 += 1; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) - - //broadcast 3rd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] - - a01 += 1; //move to next row of A01 - - //load next 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) - ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) - - //broadcast 4th row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] - - a01 += 1; //move to next row of A01 - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM - } - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); - //load 8x4 block of B11 - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] - - - ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 - ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 - ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 - ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 - - ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 - ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 - ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 - ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - ymm7 = _mm256_broadcast_sd((double const *)(&ones)); - - //1st col - ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - //2nd col - a11 += 1; - ymm1 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][1] - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][1] - - //3rd col - a11 += 1; - ymm3 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][2] - ymm4 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][2] - ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][2] - - //4th col - a11 += 1; - ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 3)); //A11[3][3] - - //compute reciprocals of L(i,i) and broadcast in registers - ymm0 = _mm256_unpacklo_pd(ymm0, ymm2); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] - ymm2 = _mm256_unpacklo_pd(ymm5, ymm6); //A11[2][2] A11[3][3] A11[1][1] A11[3][3] - - ymm0 = _mm256_blend_pd(ymm0, ymm2, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm7 = _mm256_div_pd(ymm7, ymm0); //(1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3]) - - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][3] - ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][3] - ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][3] - - //extract a33 - ymm0 = _mm256_permute_pd(ymm7, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - - ymm11 = _mm256_mul_pd(ymm11, ymm0); - - ymm15 = _mm256_mul_pd(ymm15, ymm0); - - //extract a22 - ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) - - //(row 3):FMA operations - ymm10 = _mm256_fnmadd_pd(ymm11, ymm6, ymm10); - ymm9 = _mm256_fnmadd_pd(ymm11, ymm5, ymm9); - ymm8 = _mm256_fnmadd_pd(ymm11, ymm2, ymm8); - - ymm14 = _mm256_fnmadd_pd(ymm15, ymm6, ymm14); - ymm13 = _mm256_fnmadd_pd(ymm15, ymm5, ymm13); - ymm12 = _mm256_fnmadd_pd(ymm15, ymm2, ymm12); - - ymm10 = _mm256_mul_pd(ymm10, ymm0); - - ymm14 = _mm256_mul_pd(ymm14, ymm0); - - //extract a11 - ymm0 = _mm256_permute_pd(ymm7, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00);//(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) - - //(Row 2): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm10, ymm4, ymm9); - ymm8 = _mm256_fnmadd_pd(ymm10, ymm3, ymm8); - - ymm13 = _mm256_fnmadd_pd(ymm14, ymm4, ymm13); - ymm12 = _mm256_fnmadd_pd(ymm14, ymm3, ymm12); - - ymm9 = _mm256_mul_pd(ymm9, ymm0); - - ymm13 = _mm256_mul_pd(ymm13, ymm0); - - //extract a00 - ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) - - //(Row 1): FMA operations - ymm8 = _mm256_fnmadd_pd(ymm9, ymm1, ymm8); - - ymm12 = _mm256_fnmadd_pd(ymm13, ymm1, ymm12); - - ymm8 = _mm256_mul_pd(ymm8, ymm0); //B11[0-3][0] /= A11[0][0] - - ymm12 = _mm256_mul_pd(ymm12, ymm0); //B11[4-7][0] /= A11[0][0] - - - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b), ymm11); //store(B11[0-3][3]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b + D_NR), ymm15);//store(B11[4-7][3]) - - - } - if(n_remainder) //implementation for remainder columns(when n is not multiple of D_NR) - { - a01 = L + j*cs_a + (j+D_NR); //pointer to block of A to be used for GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i + (j + D_NR)*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = (n-j-D_NR) / D_NR; //number of GEMM operations to be performed(in blocks of 4x4) - - ///load 4x4 block of b11 - - ymm0 = _mm256_setzero_pd(); - ymm1 = _mm256_setzero_pd(); - ymm2 = _mm256_setzero_pd(); - ymm3 = _mm256_setzero_pd(); - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation begins/// - - for(k = 0; k < k_iter; k++) ///loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //broadcast 1st row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] - - a01 += 1; //move to next row of A - - //load 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR));//B10[4][1] B10[5][1] B10[6][1] B10[7][1] - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] - - a01 += 1; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) - - //broadcast 3rd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] - - a01 += 1; //move to next row of A - - //load next 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) - ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) - - //broadcast 4th row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] - - a01 += 1; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM - } - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); - - //subtract the calculated GEMM block from current TRSM block - //load 8x4 block of B11 - if(n_remainder == 3) - { - ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - ymm9 = _mm256_loadu_pd((double const *)(b11+cs_b)); //B11[0-3][0] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][0] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b*2)); //B11[0-3][1] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b*2 + D_NR)); //B11[4-7][1] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0-3][2] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4-7][2] - } - if(n_remainder == 2) - { - ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] - ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] - ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0-3][0] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4-7][0] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0-3][1] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4-7][1] - } - if(n_remainder == 1) - { - ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][1] - ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][1] - ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] - ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] - ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - ymm11 = _mm256_loadu_pd((double const *)(b11+cs_b_offset[1])); //B11[0-3][0] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] +D_NR)); //B11[4-7][0] - } - - ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= B10[0-3][0] - ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha -= B10[4-7][0] - ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha -= B10[0-3][1] - ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= B10[4-7][1] - ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= B10[0-3][2] - ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= B10[4-7][2] - ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= B10[0-3][3] - ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= B10[4-7][3] - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - ymm7 = _mm256_broadcast_sd((double const *)(&ones)); - - //1st col - ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - //2nd col - a11 += 1; - ymm1 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][1] - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][1] - - //3rd col - a11 += 1; - ymm3 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][2] - ymm4 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][2] - ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][2] - - //4th col - a11 += 1; - ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 3)); //A11[3][3] - - //compute reciprocals of L(i,i) and broadcast in registers - ymm0 = _mm256_unpacklo_pd(ymm0, ymm2); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] - ymm2 = _mm256_unpacklo_pd(ymm5, ymm6); //A11[2][2] A11[3][3] A11[1][1] A11[3][3] - - ymm0 = _mm256_blend_pd(ymm0, ymm2, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm7 = _mm256_div_pd(ymm7, ymm0); //(1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3]) - - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][3] - ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][3] - ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][3] - - //extract a33 - ymm0 = _mm256_permute_pd(ymm7, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - - ymm11 = _mm256_mul_pd(ymm11, ymm0); - - ymm15 = _mm256_mul_pd(ymm15, ymm0); - - //extract a22 - ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x11);//(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) - - //(row 3):FMA operations - ymm10 = _mm256_fnmadd_pd(ymm11, ymm6, ymm10); - ymm9 = _mm256_fnmadd_pd(ymm11, ymm5, ymm9); - ymm8 = _mm256_fnmadd_pd(ymm11, ymm2, ymm8); - - ymm14 = _mm256_fnmadd_pd(ymm15, ymm6, ymm14); - ymm13 = _mm256_fnmadd_pd(ymm15, ymm5, ymm13); - ymm12 = _mm256_fnmadd_pd(ymm15, ymm2, ymm12); - - ymm10 = _mm256_mul_pd(ymm10, ymm0); - - ymm14 = _mm256_mul_pd(ymm14, ymm0); - - //extract a11 - ymm0 = _mm256_permute_pd(ymm7, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00);//(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) - - //(Row 2): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm10, ymm4, ymm9); - ymm8 = _mm256_fnmadd_pd(ymm10, ymm3, ymm8); - - ymm13 = _mm256_fnmadd_pd(ymm14, ymm4, ymm13); - ymm12 = _mm256_fnmadd_pd(ymm14, ymm3, ymm12); - - ymm9 = _mm256_mul_pd(ymm9, ymm0); - - ymm13 = _mm256_mul_pd(ymm13, ymm0); - - //extract a00 - ymm0 = _mm256_permute_pd(ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm0 = _mm256_permute2f128_pd(ymm0, ymm0, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) - - //(Row 1): FMA operations - ymm8 = _mm256_fnmadd_pd(ymm9, ymm1, ymm8); - - ymm12 = _mm256_fnmadd_pd(ymm13, ymm1, ymm12); - - ymm8 = _mm256_mul_pd(ymm8, ymm0); //B11[0-3][0] /= A11[0][0] - - ymm12 = _mm256_mul_pd(ymm12, ymm0); //B11[4-7][0] /= A11[0][0] - - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14);//store(B11[4-7][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)(b11+ cs_b_offset[1]), ymm11); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) - } - } - } - if(i<0) - i += D_NR; - if((m & 4)) ///implementation for remainder rows(when m_remainder is a multiple of 4) - { - for(j = (n-D_NR); (j+1) > 0; j -=D_NR) //loop along n direction - { - a01 = L + j*cs_a + (j+D_NR); //pointer to block of A to be used for GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = (n-j-D_NR) / D_NR; //number of times GEMM operations to be performed(in blocks of 4x4) - - ymm15 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha - ///GEMM for previous blocks /// - - ///load 4x4 block of b11 - ymm0 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - //multiply by alpha - ymm0 = _mm256_mul_pd(ymm0, ymm15); //B11[x][0] *= alpha - ymm1 = _mm256_mul_pd(ymm1, ymm15); //B11[x][1] *=alpha - ymm2 = _mm256_mul_pd(ymm2, ymm15); //B11[x][2] *= alpha - ymm3 = _mm256_mul_pd(ymm3, ymm15); //B11[x][3] *= alpha - - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation starts/// - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //load 4x4 bblock of b10 - ymm8 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm9 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm10 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //B10[0][2] B10[1][2] B10[2][2] B10[3][2] - ymm11 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[1])); //B10[0][3] B10[1][3] B10[2][3] B10[3][3] - - //broadcast 1st row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] - - a01 += 1; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] - - a01 += 1; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B10[0][1]*A01[1][0] B10[1][1]*A01[1][0] B10[2][1]*A01[1][0] B10[3][1]*A01[1][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B10[0][1]*A01[1][1] B10[1][1]*A01[1][1] B10[2][1]*A01[1][1] B10[3][1]*A01[1][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B10[0][1]*A01[1][2] B10[1][1]*A01[1][2] B10[2][1]*A01[1][2] B10[3][1]*A01[1][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B10[0][1]*A01[1][3] B10[1][1]*A01[1][3] B10[2][1]*A01[1][3] B10[3][1]*A01[1][3]) - - //braodcast 3rd row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] - - a01 += 1; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B10[0][2]*A01[2][0] B10[1][2]*A01[2][0] B10[2][2]*A01[2][0] B10[3][2]*A01[2][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B10[0][2]*A01[2][1] B10[1][2]*A01[2][1] B10[2][2]*A01[2][1] B10[3][2]*A01[2][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B10[0][2]*A01[2][2] B10[1][2]*A01[2][2] B10[2][2]*A01[2][2] B10[3][2]*A01[2][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B10[0][2]*A01[2][3] B10[1][2]*A01[2][3] B10[2][2]*A01[2][3] B10[3][2]*A01[2][3]) - - //broadcast 4th row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] - - a01 += 1; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B10[0][3]*A01[3][0] B10[1][3]*A01[3][0] B10[2][3]*A01[3][0] B10[3][3]*A01[3][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B10[0][3]*A01[3][1] B10[1][3]*A01[3][1] B10[2][3]*A01[3][1] B10[3][3]*A01[3][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B10[0][3]*A01[3][2] B10[1][3]*A01[3][2] B10[2][3]*A01[3][2] B10[3][3]*A01[3][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B10[0][3]*A01[3][3] B10[1][3]*A01[3][3] B10[2][3]*A01[3][3] B10[3][3]*A01[3][3]) - - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM - } - - ///GEMM code end/// - - ymm0 = _mm256_sub_pd(ymm0, ymm4); //B11[x][0] -=ymm4 - ymm1 = _mm256_sub_pd(ymm1, ymm5); //B11[x][1] -= ymm5 - ymm2 = _mm256_sub_pd(ymm2, ymm6); //B11[x][2] -= ymm6 - ymm3 = _mm256_sub_pd(ymm3, ymm7); //B11[x][3] -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - - //1st col - ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][0] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][0] - ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][0] - - //2nd col - a11 += cs_a; - ymm8 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm9 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[1][1] - - //3rd col - a11 += cs_a; - ymm11 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][2] - ymm12 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[1][2] - - //4th col - a11 += cs_a; - ymm13 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][3] - - ymm14 = _mm256_broadcast_sd((double const *)&ones); - - //compute reciprocals of A(i,i) and broadcast in registers - ymm4 = _mm256_unpacklo_pd(ymm4, ymm8); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] - ymm8 = _mm256_unpacklo_pd(ymm11, ymm13); //A11[2][2] A11[3][3] A11[2][2] A11[3][3] - - ymm15 = _mm256_blend_pd(ymm4, ymm8, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm14 = _mm256_div_pd(ymm14, ymm15); // 1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] - - //extract a33 - ymm15 = _mm256_permute_pd(ymm14, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3]) - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - - ymm3 = _mm256_mul_pd(ymm3, ymm15); - - //extract a22 - ymm15 = _mm256_permute_pd(ymm14, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) - - //(Row 3): FMA operations - ymm2 = _mm256_fnmadd_pd(ymm3, ymm12, ymm2); - ymm1 = _mm256_fnmadd_pd(ymm3, ymm10, ymm1); - ymm0 = _mm256_fnmadd_pd(ymm3, ymm7, ymm0); - - ymm2 = _mm256_mul_pd(ymm2, ymm15); - - //extract a11 - ymm15 = _mm256_permute_pd(ymm14, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) - - //(ROW 2): FMA operations - ymm1 = _mm256_fnmadd_pd(ymm2, ymm9, ymm1); - ymm0 = _mm256_fnmadd_pd(ymm2, ymm6, ymm0); - - ymm1 = _mm256_mul_pd(ymm1, ymm15); - - //extract A00 - ymm15 = _mm256_permute_pd(ymm14, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) - - //(Row 1):FMA operations - ymm0 = _mm256_fnmadd_pd(ymm1, ymm5, ymm0); - - ymm0 = _mm256_mul_pd(ymm0, ymm15); - - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[x][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm1); //store(B11[x][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm2); //(store(B11[x][2])) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm3); //store(B11[x][3]) - - } - if(n_remainder) //implementation for remainder columns(when n is not a multiple of D_NR) - { - a01 = L + j*cs_a + (j+D_NR); //pointer to block of A to be used for GEMM - a11 = L + j*cs_a + j; //pointwr to block of A to be used for TRSM - b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = (n-j-D_NR) / D_NR; //number of times GEMM operations to be performed(in blocks of 4x4) - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha value - ///GEMM for previous blocks /// - - ///load 4x4 block of b11 - if(n_remainder == 3) - { - ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm1 = _mm256_loadu_pd((double const *)b11+ cs_b); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - } - if(n_remainder == 2) - { - ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm1 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - } - if(n_remainder == 1) - { - ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm1 = _mm256_broadcast_sd((double const *)&ones); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm2 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - } - //multiply by alpha - ymm0 = _mm256_mul_pd(ymm0, ymm16); //B11[x][0] *= alpha - ymm1 = _mm256_mul_pd(ymm1, ymm16); //B11[x][1] *=alpha - ymm2 = _mm256_mul_pd(ymm2, ymm16); //B11[x][2] *= alpha - ymm3 = _mm256_mul_pd(ymm3, ymm16); //B11[x][3] *= alpha - - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - - ///GEMM processing stars/// - - for(k = 0; k < k_iter; k++) - { - ptr_a01_dup = a01; - - //load 4x4 bblock of b10 - ymm8 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm9 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm10 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //B10[0][2] B10[1][2] B10[2][2] B10[3][2] - ymm11 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[1])); //B10[0][3] B10[1][3] B10[2][3] B10[3][3] - - //broadcast 1st row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] - - a01 += 1; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] - - a01 += 1; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B10[0][1]*A01[1][0] B10[1][1]*A01[1][0] B10[2][1]*A01[1][0] B10[3][1]*A01[1][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B10[0][1]*A01[1][1] B10[1][1]*A01[1][1] B10[2][1]*A01[1][1] B10[3][1]*A01[1][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B10[0][1]*A01[1][2] B10[1][1]*A01[1][2] B10[2][1]*A01[1][2] B10[3][1]*A01[1][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B10[0][1]*A01[1][3] B10[1][1]*A01[1][3] B10[2][1]*A01[1][3] B10[3][1]*A01[1][3]) - - //braodcast 3rd row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] - - a01 += 1; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B10[0][2]*A01[2][0] B10[1][2]*A01[2][0] B10[2][2]*A01[2][0] B10[3][2]*A01[2][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B10[0][2]*A01[2][1] B10[1][2]*A01[2][1] B10[2][2]*A01[2][1] B10[3][2]*A01[2][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B10[0][2]*A01[2][2] B10[1][2]*A01[2][2] B10[2][2]*A01[2][2] B10[3][2]*A01[2][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B10[0][2]*A01[2][3] B10[1][2]*A01[2][3] B10[2][2]*A01[2][3] B10[3][2]*A01[2][3]) - - //broadcast 4th row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] - - a01 += 1; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B10[0][3]*A01[3][0] B10[1][3]*A01[3][0] B10[2][3]*A01[3][0] B10[3][3]*A01[3][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B10[0][3]*A01[3][1] B10[1][3]*A01[3][1] B10[2][3]*A01[3][1] B10[3][3]*A01[3][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B10[0][3]*A01[3][2] B10[1][3]*A01[3][2] B10[2][3]*A01[3][2] B10[3][3]*A01[3][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B10[0][3]*A01[3][3] B10[1][3]*A01[3][3] B10[2][3]*A01[3][3] B10[3][3]*A01[3][3]) - - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM - - } - - ///GEMM code ends/// - - ymm0 = _mm256_sub_pd(ymm0, ymm4); //B11[x][0] -= ymm4 - ymm1 = _mm256_sub_pd(ymm1, ymm5); //B11[x][1] -= ymm5 - ymm2 = _mm256_sub_pd(ymm2, ymm6); //B11[x][2] -= ymm6 - ymm3 = _mm256_sub_pd(ymm3, ymm7); //B11[x][3] -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - //1st col - ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][0] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][0] - ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][0] - - //2nd col - a11 += cs_a; - ymm8 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm9 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[1][1] - - //3rd col - a11 += cs_a; - ymm11 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][2] - ymm12 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[1][2] - - //4th col - a11 += cs_a; - ymm13 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][3] - - ymm14 = _mm256_broadcast_sd((double const *)&ones); - - //compute reciprocals of A(i,i) and broadcast in registers - ymm4 = _mm256_unpacklo_pd(ymm4, ymm8); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] - ymm8 = _mm256_unpacklo_pd(ymm11, ymm13); //A11[2][2] A11[3][3] A11[2][2] A11[3][3] - - ymm15 = _mm256_blend_pd(ymm4, ymm8, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm14 = _mm256_div_pd(ymm14, ymm15); // 1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] - - //extract a33 - ymm15 = _mm256_permute_pd(ymm14, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3]) - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - - ymm3 = _mm256_mul_pd(ymm3, ymm15); - - //extract a22 - ymm15 = _mm256_permute_pd(ymm14, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) - - //(Row 3): FMA operations - ymm2 = _mm256_fnmadd_pd(ymm3, ymm12, ymm2); - ymm1 = _mm256_fnmadd_pd(ymm3, ymm10, ymm1); - ymm0 = _mm256_fnmadd_pd(ymm3, ymm7, ymm0); - - ymm2 = _mm256_mul_pd(ymm2, ymm15); - - //extract a11 - ymm15 = _mm256_permute_pd(ymm14, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) - - //(ROW 2): FMA operations - ymm1 = _mm256_fnmadd_pd(ymm2, ymm9, ymm1); - ymm0 = _mm256_fnmadd_pd(ymm2, ymm6, ymm0); - - ymm1 = _mm256_mul_pd(ymm1, ymm15); - - //extract A00 - ymm15 = _mm256_permute_pd(ymm14, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) - - //(Row 1):FMA operations - ymm0 = _mm256_fnmadd_pd(ymm1, ymm5, ymm0); - - ymm0 = _mm256_mul_pd(ymm0, ymm15); - - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)(b11 + cs_b), ymm1); //store(B11[x][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm2); //(store(B11[x][2])) - _mm256_storeu_pd((double *)(b11 + cs_b*3), ymm3); //store(B11[x][0]) - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)(b11+ cs_b * 2), ymm2); //store(B11[x][0]) - _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[x][1]) - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[x][0]) - } - - } - m_remainder -= 4; - i -= 4; - } -// if(i < 0) i = 0; - if(m_remainder) ///implementation for remainder rows - { - dtrsm_small_XAlB(L, B, AlphaVal, m_remainder, n, cs_a, cs_b); - } - return BLIS_SUCCESS; -} - -/*implements TRSM for the case XA = alpha * B - *A is lower triangular, unit-diagonal, no transpose - *dimensions: X:mxn A:nxn B: mxn - */ - -/* <---b11 <---a11 - ***************** * - *b01*b11* * * * * - ^ * * * * * ^ * * - | ***************** | ******* - | * * * * * | * * * - | * * * * * a01* * * -b10 ***************** ************* - * * * * * * * * * - * * * * * * * * * - ***************** ******************* - -*/ -static err_t bli_dtrsm_small_XAlB_unitDiag( - side_t side, - obj_t* AlphaObj, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ) -{ - dim_t D_MR = 8; //block dimension along the rows - dim_t D_NR = 4; //block dimension along the columns - - dim_t m = bli_obj_length(b); //number of rows - dim_t n = bli_obj_width(b); //number of columns - dim_t m_remainder = m % D_MR; //number of corner rows - dim_t n_remainder = n % D_NR; //number of corner columns - dim_t cs_a = bli_obj_col_stride(a); //column stride of matrix A - dim_t cs_b = bli_obj_col_stride(b); //column stride of matrix B - - if(max(m,n) > 120) - return BLIS_NOT_YET_IMPLEMENTED; - - dim_t i, j, k; //loop variablse - dim_t k_iter; //determines the number of GEMM operations to be done - dim_t cs_b_offset[2]; //pre-calculated strides - - double ones = 1.0; - - double AlphaVal = *(double *)AlphaObj->buffer; //value of Alpha - double *L = a->buffer; //pointer to matrix A - double *B = b->buffer; //pointer to matrix B - - double *a01, *a11, *b10, *b11; //pointers for GEMM and TRSM blocks - double *ptr_a01_dup; - - cs_b_offset[0] = cs_b << 1; //cs_b_offset[0] = cs_b * 2; - cs_b_offset[1] = cs_b_offset[0] + cs_b;//cs_b_offset[1] = cs_b * 3; - - //ymm scratch reginsters - __m256d ymm0, ymm1, ymm2, ymm3; - __m256d ymm4, ymm5, ymm6, ymm7; - __m256d ymm8, ymm9, ymm10, ymm11; - __m256d ymm12, ymm13, ymm14, ymm15; - __m256d ymm16; - - for(i = (m-D_MR); (i+1) > 0; i -= D_MR) //loop along 'M' direction - { - for(j = (n-D_NR); (j+1) > 0; j -= D_NR) //loop along 'N' direction - { - a01 = L + j*cs_a +(j+D_NR); //pointer to block of A to be used in GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used in GEMM - b11 = B + (i) + (j)*cs_b; //pointer to block of B to be used for TRSM - - k_iter = (n-j-D_NR) / D_NR; //number of GEMM operations to be done(in blocks of 4x4) - - ymm0 = _mm256_setzero_pd(); - ymm1 = _mm256_setzero_pd(); - ymm2 = _mm256_setzero_pd(); - ymm3 = _mm256_setzero_pd(); - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation starts/// - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //broadcast 1st row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] - - a01 += 1; //move to next row - - //load 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] - - a01 += 1; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) - - //broadcast 3rd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] - - a01 += 1; //move to next row of A01 - - //load next 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) - ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) - - //broadcast 4th row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] - - a01 += 1; //move to next row of A01 - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM - } - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); - //load 8x4 block of B11 - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] - - - ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 - ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 - ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 - ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 - - ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 - ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 - ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 - ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - //1st col - ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - //2nd col - a11 += 1; - ymm1 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][1] - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][1] - - //3rd col - a11 += 1; - ymm3 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][2] - ymm4 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][2] - ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][2] - - //4th col - a11 += 1; - ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 3)); //A11[3][3] - - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][3] - ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][3] - ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][3] - - //(row 3):FMA operations - ymm10 = _mm256_fnmadd_pd(ymm11, ymm6, ymm10); - ymm9 = _mm256_fnmadd_pd(ymm11, ymm5, ymm9); - ymm8 = _mm256_fnmadd_pd(ymm11, ymm2, ymm8); - - ymm14 = _mm256_fnmadd_pd(ymm15, ymm6, ymm14); - ymm13 = _mm256_fnmadd_pd(ymm15, ymm5, ymm13); - ymm12 = _mm256_fnmadd_pd(ymm15, ymm2, ymm12); - - //(Row 2): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm10, ymm4, ymm9); - ymm8 = _mm256_fnmadd_pd(ymm10, ymm3, ymm8); - - ymm13 = _mm256_fnmadd_pd(ymm14, ymm4, ymm13); - ymm12 = _mm256_fnmadd_pd(ymm14, ymm3, ymm12); - - //(Row 1): FMA operations - ymm8 = _mm256_fnmadd_pd(ymm9, ymm1, ymm8); - - ymm12 = _mm256_fnmadd_pd(ymm13, ymm1, ymm12); - - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[4-7][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b), ymm11); //store(B11[0-3][3]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + cs_b + D_NR), ymm15);//store(B11[4-7][3]) - - - } - if(n_remainder) //implementation for remainder columns(when n is not multiple of D_NR) - { - a01 = L + j*cs_a + (j+D_NR); //pointer to block of A to be used for GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i + (j + D_NR)*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = (n-j-D_NR) / D_NR; //number of GEMM operations to be performed(in blocks of 4x4) - - ///load 4x4 block of b11 - - ymm0 = _mm256_setzero_pd(); - ymm1 = _mm256_setzero_pd(); - ymm2 = _mm256_setzero_pd(); - ymm3 = _mm256_setzero_pd(); - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation begins/// - - for(k = 0; k < k_iter; k++) ///loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //broadcast 1st row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] - - a01 += 1; //move to next row of A - - //load 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR));//B10[4][1] B10[5][1] B10[6][1] B10[7][1] - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] - - a01 += 1; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) - - //broadcast 3rd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] - - a01 += 1; //move to next row of A - - //load next 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) - ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) - - //broadcast 4th row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] - - a01 += 1; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM - } - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); - - //subtract the calculated GEMM block from current TRSM block - //load 8x4 block of B11 - if(n_remainder == 3) - { - ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - ymm9 = _mm256_loadu_pd((double const *)(b11+cs_b)); //B11[0-3][0] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][0] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b*2)); //B11[0-3][1] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b*2 + D_NR)); //B11[4-7][1] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0-3][2] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4-7][2] - } - if(n_remainder == 2) - { - ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] - ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] - ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0-3][0] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4-7][0] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0-3][1] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4-7][1] - } - if(n_remainder == 1) - { - ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][1] - ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][1] - ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] - ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] - ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - ymm11 = _mm256_loadu_pd((double const *)(b11+cs_b_offset[1])); //B11[0-3][0] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] +D_NR)); //B11[4-7][0] - } - - ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= B10[0-3][0] - ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha -= B10[4-7][0] - ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha -= B10[0-3][1] - ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= B10[4-7][1] - ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= B10[0-3][2] - ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= B10[4-7][2] - ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= B10[0-3][3] - ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= B10[4-7][3] - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - ymm7 = _mm256_broadcast_sd((double const *)(&ones)); - - //1st col - ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - //2nd col - a11 += 1; - ymm1 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][1] - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][1] - - //3rd col - a11 += 1; - ymm3 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][2] - ymm4 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][2] - ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][2] - - //4th col - a11 += 1; - ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 3)); //A11[3][3] - - - ymm2 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 0)); //A11[0][3] - ymm5 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 1)); //A11[1][3] - ymm6 = _mm256_broadcast_sd((double const *)(a11+ cs_a * 2)); //A11[2][3] - - //(row 3):FMA operations - ymm10 = _mm256_fnmadd_pd(ymm11, ymm6, ymm10); - ymm9 = _mm256_fnmadd_pd(ymm11, ymm5, ymm9); - ymm8 = _mm256_fnmadd_pd(ymm11, ymm2, ymm8); - - ymm14 = _mm256_fnmadd_pd(ymm15, ymm6, ymm14); - ymm13 = _mm256_fnmadd_pd(ymm15, ymm5, ymm13); - ymm12 = _mm256_fnmadd_pd(ymm15, ymm2, ymm12); - - //(Row 2): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm10, ymm4, ymm9); - ymm8 = _mm256_fnmadd_pd(ymm10, ymm3, ymm8); - - ymm13 = _mm256_fnmadd_pd(ymm14, ymm4, ymm13); - ymm12 = _mm256_fnmadd_pd(ymm14, ymm3, ymm12); - - //(Row 1): FMA operations - ymm8 = _mm256_fnmadd_pd(ymm9, ymm1, ymm8); - - ymm12 = _mm256_fnmadd_pd(ymm13, ymm1, ymm12); - - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14);//store(B11[4-7][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)(b11+ cs_b_offset[1]), ymm11); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) - } - } - } - if(i<0) - i += D_NR; - if((m & 4)) ///implementation for remainder rows(when m_remainder is a multiple of 4) - { - for(j = (n-D_NR); (j+1) > 0; j -=D_NR) //loop along n direction - { - a01 = L + j*cs_a + (j+D_NR); //pointer to block of A to be used for GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = (n-j-D_NR) / D_NR; //number of times GEMM operations to be performed(in blocks of 4x4) - - ymm15 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha - ///GEMM for previous blocks /// - - ///load 4x4 block of b11 - ymm0 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - //multiply by alpha - ymm0 = _mm256_mul_pd(ymm0, ymm15); //B11[x][0] *= alpha - ymm1 = _mm256_mul_pd(ymm1, ymm15); //B11[x][1] *=alpha - ymm2 = _mm256_mul_pd(ymm2, ymm15); //B11[x][2] *= alpha - ymm3 = _mm256_mul_pd(ymm3, ymm15); //B11[x][3] *= alpha - - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation starts/// - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //load 4x4 bblock of b10 - ymm8 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm9 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm10 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //B10[0][2] B10[1][2] B10[2][2] B10[3][2] - ymm11 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[1])); //B10[0][3] B10[1][3] B10[2][3] B10[3][3] - - //broadcast 1st row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] - - a01 += 1; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] - - a01 += 1; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B10[0][1]*A01[1][0] B10[1][1]*A01[1][0] B10[2][1]*A01[1][0] B10[3][1]*A01[1][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B10[0][1]*A01[1][1] B10[1][1]*A01[1][1] B10[2][1]*A01[1][1] B10[3][1]*A01[1][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B10[0][1]*A01[1][2] B10[1][1]*A01[1][2] B10[2][1]*A01[1][2] B10[3][1]*A01[1][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B10[0][1]*A01[1][3] B10[1][1]*A01[1][3] B10[2][1]*A01[1][3] B10[3][1]*A01[1][3]) - - //braodcast 3rd row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] - - a01 += 1; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B10[0][2]*A01[2][0] B10[1][2]*A01[2][0] B10[2][2]*A01[2][0] B10[3][2]*A01[2][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B10[0][2]*A01[2][1] B10[1][2]*A01[2][1] B10[2][2]*A01[2][1] B10[3][2]*A01[2][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B10[0][2]*A01[2][2] B10[1][2]*A01[2][2] B10[2][2]*A01[2][2] B10[3][2]*A01[2][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B10[0][2]*A01[2][3] B10[1][2]*A01[2][3] B10[2][2]*A01[2][3] B10[3][2]*A01[2][3]) - - //broadcast 4th row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] - - a01 += 1; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B10[0][3]*A01[3][0] B10[1][3]*A01[3][0] B10[2][3]*A01[3][0] B10[3][3]*A01[3][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B10[0][3]*A01[3][1] B10[1][3]*A01[3][1] B10[2][3]*A01[3][1] B10[3][3]*A01[3][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B10[0][3]*A01[3][2] B10[1][3]*A01[3][2] B10[2][3]*A01[3][2] B10[3][3]*A01[3][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B10[0][3]*A01[3][3] B10[1][3]*A01[3][3] B10[2][3]*A01[3][3] B10[3][3]*A01[3][3]) - - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM - } - - ///GEMM code end/// - - ymm0 = _mm256_sub_pd(ymm0, ymm4); //B11[x][0] -=ymm4 - ymm1 = _mm256_sub_pd(ymm1, ymm5); //B11[x][1] -= ymm5 - ymm2 = _mm256_sub_pd(ymm2, ymm6); //B11[x][2] -= ymm6 - ymm3 = _mm256_sub_pd(ymm3, ymm7); //B11[x][3] -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - - //1st col - ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][0] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][0] - ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][0] - - //2nd col - a11 += cs_a; - ymm8 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm9 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[1][1] - - //3rd col - a11 += cs_a; - ymm11 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][2] - ymm12 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[1][2] - - //4th col - a11 += cs_a; - ymm13 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][3] - - ymm14 = _mm256_broadcast_sd((double const *)&ones); - - - //(Row 3): FMA operations - ymm2 = _mm256_fnmadd_pd(ymm3, ymm12, ymm2); - ymm1 = _mm256_fnmadd_pd(ymm3, ymm10, ymm1); - ymm0 = _mm256_fnmadd_pd(ymm3, ymm7, ymm0); - - //(ROW 2): FMA operations - ymm1 = _mm256_fnmadd_pd(ymm2, ymm9, ymm1); - ymm0 = _mm256_fnmadd_pd(ymm2, ymm6, ymm0); - - //(Row 1):FMA operations - ymm0 = _mm256_fnmadd_pd(ymm1, ymm5, ymm0); - - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[x][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm1); //store(B11[x][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm2); //store(B11[x][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm3); //store(B11[x][3]) - - } - if(n_remainder) //implementation for remainder columns(when n is not a multiple of D_NR) - { - a01 = L + j*cs_a + (j+D_NR); //pointer to block of A to be used for GEMM - a11 = L + j*cs_a + j; //pointwr to block of A to be used for TRSM - b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = (n-j-D_NR) / D_NR; //number of times GEMM operations to be performed(in blocks of 4x4) - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha value - ///GEMM for previous blocks /// - - ///load 4x4 block of b11 - if(n_remainder == 3) - { - ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm1 = _mm256_loadu_pd((double const *)b11+ cs_b); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - } - if(n_remainder == 2) - { - ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm1 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - } - if(n_remainder == 1) - { - ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm1 = _mm256_broadcast_sd((double const *)&ones); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm2 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - } - //multiply by alpha - ymm0 = _mm256_mul_pd(ymm0, ymm16); //B11[x][0] *= alpha - ymm1 = _mm256_mul_pd(ymm1, ymm16); //B11[x][1] *=alpha - ymm2 = _mm256_mul_pd(ymm2, ymm16); //B11[x][2] *= alpha - ymm3 = _mm256_mul_pd(ymm3, ymm16); //B11[x][3] *= alpha - - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - - ///GEMM processing stars/// - - for(k = 0; k < k_iter; k++) - { - ptr_a01_dup = a01; - - //load 4x4 bblock of b10 - ymm8 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm9 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm10 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //B10[0][2] B10[1][2] B10[2][2] B10[3][2] - ymm11 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[1])); //B10[0][3] B10[1][3] B10[2][3] B10[3][3] - - //broadcast 1st row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[0][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[0][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[0][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[0][3] - - a01 += 1; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[1][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[1][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[1][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[1][3] - - a01 += 1; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B10[0][1]*A01[1][0] B10[1][1]*A01[1][0] B10[2][1]*A01[1][0] B10[3][1]*A01[1][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B10[0][1]*A01[1][1] B10[1][1]*A01[1][1] B10[2][1]*A01[1][1] B10[3][1]*A01[1][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B10[0][1]*A01[1][2] B10[1][1]*A01[1][2] B10[2][1]*A01[1][2] B10[3][1]*A01[1][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B10[0][1]*A01[1][3] B10[1][1]*A01[1][3] B10[2][1]*A01[1][3] B10[3][1]*A01[1][3]) - - //braodcast 3rd row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[2][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[2][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[2][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[2][3] - - a01 += 1; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B10[0][2]*A01[2][0] B10[1][2]*A01[2][0] B10[2][2]*A01[2][0] B10[3][2]*A01[2][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B10[0][2]*A01[2][1] B10[1][2]*A01[2][1] B10[2][2]*A01[2][1] B10[3][2]*A01[2][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B10[0][2]*A01[2][2] B10[1][2]*A01[2][2] B10[2][2]*A01[2][2] B10[3][2]*A01[2][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B10[0][2]*A01[2][3] B10[1][2]*A01[2][3] B10[2][2]*A01[2][3] B10[3][2]*A01[2][3]) - - //broadcast 4th row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 0)); //A01[3][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 1)); //A01[3][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 2)); //A01[3][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + cs_a * 3)); //A01[3][3] - - a01 += 1; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B10[0][3]*A01[3][0] B10[1][3]*A01[3][0] B10[2][3]*A01[3][0] B10[3][3]*A01[3][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B10[0][3]*A01[3][1] B10[1][3]*A01[3][1] B10[2][3]*A01[3][1] B10[3][3]*A01[3][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B10[0][3]*A01[3][2] B10[1][3]*A01[3][2] B10[2][3]*A01[3][2] B10[3][3]*A01[3][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B10[0][3]*A01[3][3] B10[1][3]*A01[3][3] B10[2][3]*A01[3][3] B10[3][3]*A01[3][3]) - - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + D_NR; //pointer math to find next block of A for GEMM - - } - - ///GEMM code ends/// - - ymm0 = _mm256_sub_pd(ymm0, ymm4); //B11[x][0] -= ymm4 - ymm1 = _mm256_sub_pd(ymm1, ymm5); //B11[x][1] -= ymm5 - ymm2 = _mm256_sub_pd(ymm2, ymm6); //B11[x][2] -= ymm6 - ymm3 = _mm256_sub_pd(ymm3, ymm7); //B11[x][3] -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - //1st col - ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][0] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][0] - ymm7 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][0] - - //2nd col - a11 += cs_a; - ymm8 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm9 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[1][1] - - //3rd col - a11 += cs_a; - ymm11 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][2] - ymm12 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[1][2] - - //4th col - a11 += cs_a; - ymm13 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][3] - - ymm14 = _mm256_broadcast_sd((double const *)&ones); - - //(Row 3): FMA operations - ymm2 = _mm256_fnmadd_pd(ymm3, ymm12, ymm2); - ymm1 = _mm256_fnmadd_pd(ymm3, ymm10, ymm1); - ymm0 = _mm256_fnmadd_pd(ymm3, ymm7, ymm0); - - //(ROW 2): FMA operations - ymm1 = _mm256_fnmadd_pd(ymm2, ymm9, ymm1); - ymm0 = _mm256_fnmadd_pd(ymm2, ymm6, ymm0); - - //(Row 1):FMA operations - ymm0 = _mm256_fnmadd_pd(ymm1, ymm5, ymm0); - - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)(b11 + cs_b), ymm1); //store(B11[x][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm2); //(store(B11[x][2])) - _mm256_storeu_pd((double *)(b11 + cs_b*3), ymm3); //store(B11[x][0]) - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)(b11+ cs_b * 2), ymm2); //store(B11[x][0]) - _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[x][1]) - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[x][0]) - } - - } - m_remainder -= 4; - i -= 4; - } - if(m_remainder) - { - dtrsm_small_XAlB_unitDiag(L, B, AlphaVal, m_remainder, n, cs_a, cs_b); - } - return BLIS_SUCCESS; -} - - -/*implements TRSM for the case XA = alpha * B - *A is lower triangular, non-unit diagonal, no transpose - *dimensions: X:mxn A:nxn B: mxn - */ - -/* <---b11 <---a11 - ***************** * - *b01*b11* * * * * - ^ * * * * * ^ * * - | ***************** | ******* - | * * * * * | * * * - | * * * * * a01* * * -b10 ***************** ************* - * * * * * * * * * - * * * * * * * * * - ***************** ******************* - -*/ -static err_t bli_dtrsm_small_XAutB( - side_t side, - obj_t* AlphaObj, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ) -{ - dim_t D_MR = 8; //block dimension along the rows - dim_t D_NR = 4; //block dimension along the columns - - dim_t m = bli_obj_length(b); //number of rows - dim_t n = bli_obj_width(b); //number of columns - dim_t m_remainder = m % D_MR; //number of corner rows - dim_t n_remainder = n % D_NR; //number of corner columns - dim_t cs_a = bli_obj_col_stride(a); //column stride of matrix A - dim_t cs_b = bli_obj_col_stride(b); //column stride of matrix B - - if(max(m,n) > 120) - return BLIS_NOT_YET_IMPLEMENTED; - - dim_t i, j, k; //loop variablse - dim_t k_iter; //determines the number of GEMM operations to be done - dim_t cs_b_offset[2]; //pre-calculated strides - - double ones = 1.0; - - double AlphaVal = *(double *)AlphaObj->buffer; //value of Alpha - double *L = a->buffer; //pointer to matrix A - double *B = b->buffer; //pointer to matrix B - - double *a01, *a11, *b10, *b11; //pointers for GEMM and TRSM blocks - double *ptr_a01_dup; - - cs_b_offset[0] = cs_b << 1; //cs_b_offset[0] = cs_b * 2; - cs_b_offset[1] = cs_b_offset[0] + cs_b;//cs_b_offset[1] = cs_b * 3; - - //ymm scratch reginsters - __m256d ymm0, ymm1, ymm2, ymm3; - __m256d ymm4, ymm5, ymm6, ymm7; - __m256d ymm8, ymm9, ymm10, ymm11; - __m256d ymm12, ymm13, ymm14, ymm15; - __m256d ymm16; - - for(i = (m-D_MR); (i+1) > 0; i -= D_MR) //loop along 'M' direction - { - for(j = (n-D_NR); (j+1) > 0; j -= D_NR) //loop along 'N' direction - { - a01 = L + (j+D_NR)*cs_a +(j); //pointer to block of A to be used in GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used in GEMM - b11 = B + (i) + (j)*cs_b; //pointer to block of B to be used for TRSM - - k_iter = (n-j-D_NR) / D_NR; //number of GEMM operations to be done(in blocks of 4x4) - - ymm0 = _mm256_setzero_pd(); - ymm1 = _mm256_setzero_pd(); - ymm2 = _mm256_setzero_pd(); - ymm3 = _mm256_setzero_pd(); - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation starts/// - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //broadcast 1st row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] - - a01 += cs_a; //move to next row - - //load 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] - - a01 += cs_a; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) - - //broadcast 3rd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] - - a01 += cs_a; //move to next row of A01 - - //load next 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) - ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) - - //broadcast 4th row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] - - a01 += cs_a; //move to next row of A01 - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM - } - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); - //load 8x4 block of B11 - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] - - ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 - ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 - ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 - ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 - - ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 - ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 - ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 - ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - //1st col - ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - a11 += cs_a; - - //2nd col - ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm2 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - - a11 += cs_a; - - //3rd col - ymm3 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm4 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm5 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] - - a11 += cs_a; - - //4th col - ymm6 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][1] - - - ymm7 = _mm256_broadcast_sd((double const *)&ones); - - //compute reciprocals of A(i,i) and broadcast in registers - ymm0 = _mm256_unpacklo_pd(ymm0, ymm2); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] - ymm2 = _mm256_unpacklo_pd(ymm5, ymm6); //A11[2][2] A11[3][3] A11[2][2] A11[3][3] - - ymm0 = _mm256_blend_pd(ymm0, ymm2, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm0 = _mm256_div_pd(ymm7, ymm0); // 1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] - - ymm2 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] - //extract a33 - ymm7 = _mm256_permute_pd(ymm0, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3]) - ymm7 = _mm256_permute2f128_pd(ymm7, ymm7, 0x11); //(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - - ymm11 = _mm256_mul_pd(ymm11, ymm7); - - ymm15 = _mm256_mul_pd(ymm15, ymm7); - - //extract a22 - ymm7 = _mm256_permute_pd(ymm0, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm7 = _mm256_permute2f128_pd(ymm7, ymm7, 0x11); //(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) - - //(Row 3): FMA operations - ymm10 = _mm256_fnmadd_pd(ymm11, ymm6, ymm10); - ymm9 = _mm256_fnmadd_pd(ymm11, ymm5, ymm9); - ymm8 = _mm256_fnmadd_pd(ymm11, ymm2, ymm8); - - //(Row 3): FMA operations - ymm14 = _mm256_fnmadd_pd(ymm15, ymm6, ymm14); - ymm13 = _mm256_fnmadd_pd(ymm15, ymm5, ymm13); - ymm12 = _mm256_fnmadd_pd(ymm15, ymm2, ymm12); - - ymm10 = _mm256_mul_pd(ymm10, ymm7); - - ymm14 = _mm256_mul_pd(ymm14, ymm7); - - //extract a11 - ymm7 = _mm256_permute_pd(ymm0, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) - ymm7 = _mm256_permute2f128_pd(ymm7, ymm7, 0x00); //(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) - - //(ROW 2): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm10, ymm4, ymm9); - ymm8 = _mm256_fnmadd_pd(ymm10, ymm3, ymm8); - - ymm13 = _mm256_fnmadd_pd(ymm14, ymm4, ymm13); - ymm12 = _mm256_fnmadd_pd(ymm14, ymm3, ymm12); - - ymm9 = _mm256_mul_pd(ymm9, ymm7); - - ymm13 = _mm256_mul_pd(ymm13, ymm7); - - //extract A00 - ymm7 = _mm256_permute_pd(ymm0, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm7 = _mm256_permute2f128_pd(ymm7, ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) - - //(Row 1):FMA operations - ymm8 = _mm256_fnmadd_pd(ymm9, ymm1, ymm8); - - ymm12 = _mm256_fnmadd_pd(ymm13, ymm1, ymm12); - - ymm8 = _mm256_mul_pd(ymm8, ymm7); - - ymm12 = _mm256_mul_pd(ymm12, ymm7); - - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[x][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[x][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[x][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[x][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //(store(B11[x][2])) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //(store(B11[x][2])) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[x][3]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[x][3]) - - } - if(n_remainder) //implementation for remainder columns(when n is not multiple of D_NR) - { - - a01 = L + (j+D_NR)*cs_a +(j); //pointer to block of A to be used in GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used in GEMM - b11 = B + (i) + (j)*cs_b; //pointer to block of B to be used for TRSM - - k_iter = (n-j-D_NR) / D_NR; //number of GEMM operations to be done(in blocks of 4x4) - - ymm0 = _mm256_setzero_pd(); - ymm1 = _mm256_setzero_pd(); - ymm2 = _mm256_setzero_pd(); - ymm3 = _mm256_setzero_pd(); - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation starts/// - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //broadcast 1st row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] - - a01 += cs_a; //move to next row - - //load 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] - - a01 += cs_a; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) - - //broadcast 3rd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] - - a01 += cs_a; //move to next row of A01 - - //load next 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) - ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) - - //broadcast 4th row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] - - a01 += cs_a; //move to next row of A01 - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM - } - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); - //load 8x4 block of B11 - if(n_remainder == 3) - { - ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - ymm9 = _mm256_loadu_pd((double const *)(b11+cs_b)); //B11[0-3][0] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][0] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b*2)); //B11[0-3][1] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b*2 + D_NR)); //B11[4-7][1] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0-3][2] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4-7][2] - } - if(n_remainder == 2) - { - ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] - ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] - ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0-3][0] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4-7][0] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0-3][1] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4-7][1] - } - if(n_remainder == 1) - { - ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][1] - ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][1] - ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] - ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] - ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - ymm11 = _mm256_loadu_pd((double const *)(b11+cs_b_offset[1])); //B11[0-3][0] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] +D_NR)); //B11[4-7][0] - } - - ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 - ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 - ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 - ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 - - ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 - ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 - ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 - ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - //1st col - ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - a11 += cs_a; - - //2nd col - ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm2 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - - a11 += cs_a; - - //3rd col - ymm3 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm4 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm5 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] - - a11 += cs_a; - - //4th col - ymm6 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][1] - - - ymm7 = _mm256_broadcast_sd((double const *)&ones); - - //compute reciprocals of A(i,i) and broadcast in registers - ymm0 = _mm256_unpacklo_pd(ymm0, ymm2); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] - ymm2 = _mm256_unpacklo_pd(ymm5, ymm6); //A11[2][2] A11[3][3] A11[2][2] A11[3][3] - - ymm0 = _mm256_blend_pd(ymm0, ymm2, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm0 = _mm256_div_pd(ymm7, ymm0); // 1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] - - ymm2 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] - //extract a33 - ymm7 = _mm256_permute_pd(ymm0, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3]) - ymm7 = _mm256_permute2f128_pd(ymm7, ymm7, 0x11); //(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - - ymm11 = _mm256_mul_pd(ymm11, ymm7); - - ymm15 = _mm256_mul_pd(ymm15, ymm7); - - //extract a22 - ymm7 = _mm256_permute_pd(ymm0, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm7 = _mm256_permute2f128_pd(ymm7, ymm7, 0x11); //(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) - - //(Row 3): FMA operations - ymm10 = _mm256_fnmadd_pd(ymm11, ymm6, ymm10); - ymm9 = _mm256_fnmadd_pd(ymm11, ymm5, ymm9); - ymm8 = _mm256_fnmadd_pd(ymm11, ymm2, ymm8); - - //(Row 3): FMA operations - ymm14 = _mm256_fnmadd_pd(ymm15, ymm6, ymm14); - ymm13 = _mm256_fnmadd_pd(ymm15, ymm5, ymm13); - ymm12 = _mm256_fnmadd_pd(ymm15, ymm2, ymm12); - - ymm10 = _mm256_mul_pd(ymm10, ymm7); - - ymm14 = _mm256_mul_pd(ymm14, ymm7); - - //extract a11 - ymm7 = _mm256_permute_pd(ymm0, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) - ymm7 = _mm256_permute2f128_pd(ymm7, ymm7, 0x00); //(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) - - //(ROW 2): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm10, ymm4, ymm9); - ymm8 = _mm256_fnmadd_pd(ymm10, ymm3, ymm8); - - ymm13 = _mm256_fnmadd_pd(ymm14, ymm4, ymm13); - ymm12 = _mm256_fnmadd_pd(ymm14, ymm3, ymm12); - - ymm9 = _mm256_mul_pd(ymm9, ymm7); - - ymm13 = _mm256_mul_pd(ymm13, ymm7); - - //extract A00 - ymm7 = _mm256_permute_pd(ymm0, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm7 = _mm256_permute2f128_pd(ymm7, ymm7, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) - - //(Row 1):FMA operations - ymm8 = _mm256_fnmadd_pd(ymm9, ymm1, ymm8); - - ymm12 = _mm256_fnmadd_pd(ymm13, ymm1, ymm12); - - ymm8 = _mm256_mul_pd(ymm8, ymm7); - - ymm12 = _mm256_mul_pd(ymm12, ymm7); - - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14);//store(B11[4-7][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)(b11+ cs_b_offset[1]), ymm11); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) - } - } - } - if(i<0) - i += D_NR; - if((m & 4)) ///implementation for remainder rows(when m_remainder is a multiple of 4) - { - for(j = (n-D_NR); (j+1) > 0; j -=D_NR) //loop along n direction - { - a01 = L + (j+D_NR)*cs_a + (j); //pointer to block of A to be used for GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = (n-j-D_NR) / D_NR; //number of times GEMM operations to be performed(in blocks of 4x4) - - ymm15 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha - ///GEMM for previous blocks /// - - ///load 4x4 block of b11 - ymm0 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - //multiply by alpha - ymm0 = _mm256_mul_pd(ymm0, ymm15); //B11[x][0] *= alpha - ymm1 = _mm256_mul_pd(ymm1, ymm15); //B11[x][1] *=alpha - ymm2 = _mm256_mul_pd(ymm2, ymm15); //B11[x][2] *= alpha - ymm3 = _mm256_mul_pd(ymm3, ymm15); //B11[x][3] *= alpha - - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation starts/// - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //load 4x4 bblock of b10 - ymm8 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm9 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm10 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //B10[0][2] B10[1][2] B10[2][2] B10[3][2] - ymm11 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[1])); //B10[0][3] B10[1][3] B10[2][3] B10[3][3] - - //broadcast 1st row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] - - a01 += cs_a; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] - - a01 += cs_a; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B10[0][1]*A01[1][0] B10[1][1]*A01[1][0] B10[2][1]*A01[1][0] B10[3][1]*A01[1][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B10[0][1]*A01[1][1] B10[1][1]*A01[1][1] B10[2][1]*A01[1][1] B10[3][1]*A01[1][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B10[0][1]*A01[1][2] B10[1][1]*A01[1][2] B10[2][1]*A01[1][2] B10[3][1]*A01[1][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B10[0][1]*A01[1][3] B10[1][1]*A01[1][3] B10[2][1]*A01[1][3] B10[3][1]*A01[1][3]) - - //braodcast 3rd row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] - - a01 += cs_a; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B10[0][2]*A01[2][0] B10[1][2]*A01[2][0] B10[2][2]*A01[2][0] B10[3][2]*A01[2][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B10[0][2]*A01[2][1] B10[1][2]*A01[2][1] B10[2][2]*A01[2][1] B10[3][2]*A01[2][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B10[0][2]*A01[2][2] B10[1][2]*A01[2][2] B10[2][2]*A01[2][2] B10[3][2]*A01[2][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B10[0][2]*A01[2][3] B10[1][2]*A01[2][3] B10[2][2]*A01[2][3] B10[3][2]*A01[2][3]) - - //broadcast 4th row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] - - a01 += cs_a; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B10[0][3]*A01[3][0] B10[1][3]*A01[3][0] B10[2][3]*A01[3][0] B10[3][3]*A01[3][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B10[0][3]*A01[3][1] B10[1][3]*A01[3][1] B10[2][3]*A01[3][1] B10[3][3]*A01[3][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B10[0][3]*A01[3][2] B10[1][3]*A01[3][2] B10[2][3]*A01[3][2] B10[3][3]*A01[3][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B10[0][3]*A01[3][3] B10[1][3]*A01[3][3] B10[2][3]*A01[3][3] B10[3][3]*A01[3][3]) - - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + D_NR*cs_a; //pointer math to find next block of A for GEMM - } - - ///GEMM code end/// - - ymm0 = _mm256_sub_pd(ymm0, ymm4); //B11[x][0] -=ymm4 - ymm1 = _mm256_sub_pd(ymm1, ymm5); //B11[x][1] -= ymm5 - ymm2 = _mm256_sub_pd(ymm2, ymm6); //B11[x][2] -= ymm6 - ymm3 = _mm256_sub_pd(ymm3, ymm7); //B11[x][3] -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - - //1st col - ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - a11 += cs_a; - - //2nd col - ymm5 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm8 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - - a11 += cs_a; - - //3rd col - ymm6 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm9 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm11 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] - - a11 += cs_a; - - //4th col - ymm7 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm12 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] - ymm13 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][1] - - - ymm14 = _mm256_broadcast_sd((double const *)&ones); - - //compute reciprocals of A(i,i) and broadcast in registers - ymm4 = _mm256_unpacklo_pd(ymm4, ymm8); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] - ymm8 = _mm256_unpacklo_pd(ymm11, ymm13); //A11[2][2] A11[3][3] A11[2][2] A11[3][3] - - ymm15 = _mm256_blend_pd(ymm4, ymm8, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm14 = _mm256_div_pd(ymm14, ymm15); // 1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] - - //extract a33 - ymm15 = _mm256_permute_pd(ymm14, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3]) - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - - ymm3 = _mm256_mul_pd(ymm3, ymm15); - - //extract a22 - ymm15 = _mm256_permute_pd(ymm14, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) - - //(Row 3): FMA operations - ymm2 = _mm256_fnmadd_pd(ymm3, ymm12, ymm2); - ymm1 = _mm256_fnmadd_pd(ymm3, ymm10, ymm1); - ymm0 = _mm256_fnmadd_pd(ymm3, ymm7, ymm0); - - ymm2 = _mm256_mul_pd(ymm2, ymm15); - - //extract a11 - ymm15 = _mm256_permute_pd(ymm14, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) - - //(ROW 2): FMA operations - ymm1 = _mm256_fnmadd_pd(ymm2, ymm9, ymm1); - ymm0 = _mm256_fnmadd_pd(ymm2, ymm6, ymm0); - - ymm1 = _mm256_mul_pd(ymm1, ymm15); - - //extract A00 - ymm15 = _mm256_permute_pd(ymm14, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) - - //(Row 1):FMA operations - ymm0 = _mm256_fnmadd_pd(ymm1, ymm5, ymm0); - - ymm0 = _mm256_mul_pd(ymm0, ymm15); - - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[x][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm1); //store(B11[x][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm2); //(store(B11[x][2])) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm3); //store(B11[x][3]) - - } - if(n_remainder) //implementation for remainder columns(when n is not a multiple of D_NR) - { - - a01 = L + (j+D_NR)*cs_a + (j); //pointer to block of A to be used for GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = (n-j-D_NR) / D_NR; //number of times GEMM operations to be performed(in blocks of 4x4) - - ymm15 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha - ///GEMM for previous blocks /// - - ///load 4x4 block of b11 - if(n_remainder == 3) - { - ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm1 = _mm256_loadu_pd((double const *)b11+ cs_b); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - } - if(n_remainder == 2) - { - ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm1 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - } - if(n_remainder == 1) - { - ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm1 = _mm256_broadcast_sd((double const *)&ones); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm2 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - } - - //multiply by alpha - ymm0 = _mm256_mul_pd(ymm0, ymm15); //B11[x][0] *= alpha - ymm1 = _mm256_mul_pd(ymm1, ymm15); //B11[x][1] *=alpha - ymm2 = _mm256_mul_pd(ymm2, ymm15); //B11[x][2] *= alpha - ymm3 = _mm256_mul_pd(ymm3, ymm15); //B11[x][3] *= alpha - - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation starts/// - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //load 4x4 bblock of b10 - ymm8 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm9 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm10 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //B10[0][2] B10[1][2] B10[2][2] B10[3][2] - ymm11 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[1])); //B10[0][3] B10[1][3] B10[2][3] B10[3][3] - - //broadcast 1st row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] - - a01 += cs_a; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] - - a01 += cs_a; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B10[0][1]*A01[1][0] B10[1][1]*A01[1][0] B10[2][1]*A01[1][0] B10[3][1]*A01[1][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B10[0][1]*A01[1][1] B10[1][1]*A01[1][1] B10[2][1]*A01[1][1] B10[3][1]*A01[1][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B10[0][1]*A01[1][2] B10[1][1]*A01[1][2] B10[2][1]*A01[1][2] B10[3][1]*A01[1][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B10[0][1]*A01[1][3] B10[1][1]*A01[1][3] B10[2][1]*A01[1][3] B10[3][1]*A01[1][3]) - - //braodcast 3rd row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] - - a01 += cs_a; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B10[0][2]*A01[2][0] B10[1][2]*A01[2][0] B10[2][2]*A01[2][0] B10[3][2]*A01[2][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B10[0][2]*A01[2][1] B10[1][2]*A01[2][1] B10[2][2]*A01[2][1] B10[3][2]*A01[2][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B10[0][2]*A01[2][2] B10[1][2]*A01[2][2] B10[2][2]*A01[2][2] B10[3][2]*A01[2][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B10[0][2]*A01[2][3] B10[1][2]*A01[2][3] B10[2][2]*A01[2][3] B10[3][2]*A01[2][3]) - - //broadcast 4th row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] - - a01 += cs_a; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B10[0][3]*A01[3][0] B10[1][3]*A01[3][0] B10[2][3]*A01[3][0] B10[3][3]*A01[3][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B10[0][3]*A01[3][1] B10[1][3]*A01[3][1] B10[2][3]*A01[3][1] B10[3][3]*A01[3][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B10[0][3]*A01[3][2] B10[1][3]*A01[3][2] B10[2][3]*A01[3][2] B10[3][3]*A01[3][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B10[0][3]*A01[3][3] B10[1][3]*A01[3][3] B10[2][3]*A01[3][3] B10[3][3]*A01[3][3]) - - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM - } - - ///GEMM code end/// - - ymm0 = _mm256_sub_pd(ymm0, ymm4); //B11[x][0] -=ymm4 - ymm1 = _mm256_sub_pd(ymm1, ymm5); //B11[x][1] -= ymm5 - ymm2 = _mm256_sub_pd(ymm2, ymm6); //B11[x][2] -= ymm6 - ymm3 = _mm256_sub_pd(ymm3, ymm7); //B11[x][3] -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - - //1st col - ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - a11 += cs_a; - - //2nd col - ymm5 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm8 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - - a11 += cs_a; - - //3rd col - ymm6 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm9 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm11 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] - - a11 += cs_a; - - //4th col - ymm7 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm12 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] - ymm13 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][1] - - - ymm14 = _mm256_broadcast_sd((double const *)&ones); - - //compute reciprocals of A(i,i) and broadcast in registers - ymm4 = _mm256_unpacklo_pd(ymm4, ymm8); //A11[0][0] A11[1][1] A11[0][0] A11[1][1] - ymm8 = _mm256_unpacklo_pd(ymm11, ymm13); //A11[2][2] A11[3][3] A11[2][2] A11[3][3] - - ymm15 = _mm256_blend_pd(ymm4, ymm8, 0x0C); //A11[0][0] A11[1][1] A11[2][2] A11[3][3] - ymm14 = _mm256_div_pd(ymm14, ymm15); // 1/A11[0][0] 1/A11[1][1] 1/A11[2][2] 1/A11[3][3] - - //extract a33 - ymm15 = _mm256_permute_pd(ymm14, 0x0C); //(1/A11[0][0] 1/A11[0][0] 1/A11[3][3] 1/A11[3][3]) - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //(1/A11[3][3] 1/A11[3][3] 1/A11[3][3] 1/A11[3][3]) - - ymm3 = _mm256_mul_pd(ymm3, ymm15); - - //extract a22 - ymm15 = _mm256_permute_pd(ymm14, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x11); //(1/A11[2][2] 1/A11[2][2] 1/A11[2][2] 1/A11[2][2]) - - //(Row 3): FMA operations - ymm2 = _mm256_fnmadd_pd(ymm3, ymm12, ymm2); - ymm1 = _mm256_fnmadd_pd(ymm3, ymm10, ymm1); - ymm0 = _mm256_fnmadd_pd(ymm3, ymm7, ymm0); - - ymm2 = _mm256_mul_pd(ymm2, ymm15); - - //extract a11 - ymm15 = _mm256_permute_pd(ymm14, 0x03); //(1/A11[1][1] 1/A11[1][1] 1/A11[2][2] 1/A11[2][2]) - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //(1/A11[1][1] 1/A11[1][1] 1/A11[1][1] 1/A11[1][1]) - - //(ROW 2): FMA operations - ymm1 = _mm256_fnmadd_pd(ymm2, ymm9, ymm1); - ymm0 = _mm256_fnmadd_pd(ymm2, ymm6, ymm0); - - ymm1 = _mm256_mul_pd(ymm1, ymm15); - - //extract A00 - ymm15 = _mm256_permute_pd(ymm14, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[2][2] 1/A11[2][2]) - ymm15 = _mm256_permute2f128_pd(ymm15, ymm15, 0x00); //(1/A11[0][0] 1/A11[0][0] 1/A11[0][0] 1/A11[0][0]) - - //(Row 1):FMA operations - ymm0 = _mm256_fnmadd_pd(ymm1, ymm5, ymm0); - - ymm0 = _mm256_mul_pd(ymm0, ymm15); - - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)(b11 + cs_b), ymm1); //store(B11[x][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm2); //(store(B11[x][2])) - _mm256_storeu_pd((double *)(b11 + cs_b*3), ymm3); //store(B11[x][0]) - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)(b11+ cs_b * 2), ymm2); //store(B11[x][0]) - _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[x][1]) - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[x][0]) - } - - } - m_remainder -= 4; - i -= 4; - } - if(m_remainder) ///implementation for remainder rows - { - dtrsm_small_XAutB(L, B, AlphaVal, m_remainder, n, cs_a, cs_b); - } - return BLIS_SUCCESS; -} - -/*implements TRSM for the case XA = alpha * B - *A is lower triangular, unit-diagonal, no transpose - *dimensions: X:mxn A:nxn B: mxn - */ - -/* <---b11 <---a11 - ***************** * - *b01*b11* * * * * - ^ * * * * * ^ * * - | ***************** | ******* - | * * * * * | * * * - | * * * * * a01* * * -b10 ***************** ************* - * * * * * * * * * - * * * * * * * * * - ***************** ******************* - -*/ -static err_t bli_dtrsm_small_XAutB_unitDiag( - side_t side, - obj_t* AlphaObj, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ) -{ - dim_t D_MR = 8; //block dimension along the rows - dim_t D_NR = 4; //block dimension along the columns - - dim_t m = bli_obj_length(b); //number of rows - dim_t n = bli_obj_width(b); //number of columns - dim_t m_remainder = m % D_MR; //number of corner rows - dim_t n_remainder = n % D_NR; //number of corner columns - dim_t cs_a = bli_obj_col_stride(a); //column stride of matrix A - dim_t cs_b = bli_obj_col_stride(b); //column stride of matrix B - - if(max(m,n) > 120) - return BLIS_NOT_YET_IMPLEMENTED; - - dim_t i, j, k; //loop variablse - dim_t k_iter; //determines the number of GEMM operations to be done - dim_t cs_b_offset[2]; //pre-calculated strides - - double ones = 1.0; - - double AlphaVal = *(double *)AlphaObj->buffer; //value of Alpha - double *L = a->buffer; //pointer to matrix A - double *B = b->buffer; //pointer to matrix B - - double *a01, *a11, *b10, *b11; //pointers for GEMM and TRSM blocks - double *ptr_a01_dup; - - cs_b_offset[0] = cs_b << 1; //cs_b_offset[0] = cs_b * 2; - cs_b_offset[1] = cs_b_offset[0] + cs_b;//cs_b_offset[1] = cs_b * 3; - - //ymm scratch reginsters - __m256d ymm0, ymm1, ymm2, ymm3; - __m256d ymm4, ymm5, ymm6, ymm7; - __m256d ymm8, ymm9, ymm10, ymm11; - __m256d ymm12, ymm13, ymm14, ymm15; - __m256d ymm16; - - for(i = (m-D_MR); (i+1) > 0; i -= D_MR) //loop along 'M' direction - { - for(j = (n-D_NR); (j+1) > 0; j -= D_NR) //loop along 'N' direction - { - a01 = L + (j+D_NR)*cs_a +(j); //pointer to block of A to be used in GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used in GEMM - b11 = B + (i) + (j)*cs_b; //pointer to block of B to be used for TRSM - - k_iter = (n-j-D_NR) / D_NR; //number of GEMM operations to be done(in blocks of 4x4) - - ymm0 = _mm256_setzero_pd(); - ymm1 = _mm256_setzero_pd(); - ymm2 = _mm256_setzero_pd(); - ymm3 = _mm256_setzero_pd(); - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation starts/// - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //broadcast 1st row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] - - a01 += cs_a; //move to next row - - //load 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] - - a01 += cs_a; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) - - //broadcast 3rd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] - - a01 += cs_a; //move to next row of A01 - - //load next 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) - ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) - - //broadcast 4th row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] - - a01 += cs_a; //move to next row of A01 - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM - } - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); - //load 8x4 block of B11 - ymm8 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm12 = _mm256_loadu_pd((double const *)(b11 + D_NR)); //B11[4][0] B11[5][0] B11[6][0] B11[7][0] - ymm9 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4][1] B11[5][1] B11[6][1] B11[7][1] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4][2] B11[5][2] B11[6][2] B11[7][2] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4][3] B11[5][3] B11[6][3] B11[7][3] - - ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 - ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 - ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 - ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 - - ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 - ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 - ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 - ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - //1st col - ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - a11 += cs_a; - - //2nd col - ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm2 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - - a11 += cs_a; - - //3rd col - ymm3 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm4 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm5 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] - - a11 += cs_a; - - //4th col - ymm6 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][1] - - ymm2 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] - - //(Row 3): FMA operations - ymm10 = _mm256_fnmadd_pd(ymm11, ymm6, ymm10); - ymm9 = _mm256_fnmadd_pd(ymm11, ymm5, ymm9); - ymm8 = _mm256_fnmadd_pd(ymm11, ymm2, ymm8); - - //(Row 3): FMA operations - ymm14 = _mm256_fnmadd_pd(ymm15, ymm6, ymm14); - ymm13 = _mm256_fnmadd_pd(ymm15, ymm5, ymm13); - ymm12 = _mm256_fnmadd_pd(ymm15, ymm2, ymm12); - - //(ROW 2): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm10, ymm4, ymm9); - ymm8 = _mm256_fnmadd_pd(ymm10, ymm3, ymm8); - - ymm13 = _mm256_fnmadd_pd(ymm14, ymm4, ymm13); - ymm12 = _mm256_fnmadd_pd(ymm14, ymm3, ymm12); - - //(Row 1):FMA operations - ymm8 = _mm256_fnmadd_pd(ymm9, ymm1, ymm8); - - ymm12 = _mm256_fnmadd_pd(ymm13, ymm1, ymm12); - - _mm256_storeu_pd((double *)b11, ymm8); //store(B11[x][0]) - _mm256_storeu_pd((double *)(b11 + D_NR), ymm12); //store(B11[x][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[x][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[x][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //(store(B11[x][2])) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //(store(B11[x][2])) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[x][3]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[x][3]) - - } - if(n_remainder) //implementation for remainder columns(when n is not multiple of D_NR) - { - - a01 = L + (j+D_NR)*cs_a +(j); //pointer to block of A to be used in GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used in GEMM - b11 = B + (i) + (j)*cs_b; //pointer to block of B to be used for TRSM - - k_iter = (n-j-D_NR) / D_NR; //number of GEMM operations to be done(in blocks of 4x4) - - ymm0 = _mm256_setzero_pd(); - ymm1 = _mm256_setzero_pd(); - ymm2 = _mm256_setzero_pd(); - ymm3 = _mm256_setzero_pd(); - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation starts/// - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //broadcast 1st row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] - - a01 += cs_a; //move to next row - - //load 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm13 = _mm256_loadu_pd((double const *)(b10 + D_NR)); //B10[4][0] B10[5][0] B10[6][0] B10[7][0] - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b + D_NR)); //B10[4][1] B10[5][1] B10[6][1] B10[7][1] - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][0]*A01[0][0] B10[5][0]*A01[0][0] B10[6][0]*A01[0][0] B10[7][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][0]*A01[0][1] B10[5][0]*A01[0][1] B10[6][0]*A01[0][1] B10[7][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][0]*A01[0][2] B10[5][0]*A01[0][2] B10[6][0]*A01[0][2] B10[7][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][0]*A01[0][3] B10[5][0]*A01[0][3] B10[6][0]*A01[0][3] B10[7][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] - - a01 += cs_a; //move to next row of A - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][1]*A01[0][0] B10[1][1]*A01[0][0] B10[2][1]*A01[0][0] B10[3][1]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][1]*A01[0][1] B10[1][1]*A01[0][1] B10[2][1]*A01[0][1] B10[3][1]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][1]*A01[0][2] B10[1][1]*A01[0][2] B10[2][1]*A01[0][2] B10[3][1]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][1]*A01[0][3] B10[1][1]*A01[0][3] B10[2][1]*A01[0][3] B10[3][1]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][1]*A01[0][0] B10[5][1]*A01[0][0] B10[6][1]*A01[0][0] B10[7][1]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][1]*A01[0][1] B10[5][1]*A01[0][1] B10[6][1]*A01[0][1] B10[7][1]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][1]*A01[0][2] B10[5][1]*A01[0][2] B10[6][1]*A01[0][2] B10[7][1]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][1]*A01[0][3] B10[5][1]*A01[0][3] B10[6][1]*A01[0][3] B10[7][1]*A01[0][3]) - - //broadcast 3rd row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] - - a01 += cs_a; //move to next row of A01 - - //load next 8x2 block of B10 - ymm12 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //(B10[0][2] B10[1][2] B10[2][2] B10[3][2]) - ymm13 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + D_NR)); //(B10[4][2] B10[5][2] B10[6][2] B10[7][2]) - ymm14 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b)); //(B10[0][3] B10[1][3] B10[2][3] B10[3][3]) - ymm15 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0] + cs_b + D_NR)); //(B10[4][3] B10[5][3] B10[6][3] B10[7][3]) - - ymm0 = _mm256_fmadd_pd(ymm8, ymm12, ymm0); //ymm0 += (B10[0][2]*A01[0][0] B10[1][2]*A01[0][0] B10[2][2]*A01[0][0] B10[3][2]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm12, ymm1); //ymm1 += (B10[0][2]*A01[0][1] B10[1][2]*A01[0][1] B10[2][2]*A01[0][1] B10[3][2]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm12, ymm2); //ymm2 += (B10[0][2]*A01[0][2] B10[1][2]*A01[0][2] B10[2][2]*A01[0][2] B10[3][2]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm12, ymm3); //ymm3 += (B10[0][2]*A01[0][3] B10[1][2]*A01[0][3] B10[2][2]*A01[0][3] B10[3][2]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm13, ymm4); //ymm4 += (B10[4][2]*A01[0][0] B10[5][2]*A01[0][0] B10[6][2]*A01[0][0] B10[7][2]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm13, ymm5); //ymm5 += (B10[4][2]*A01[0][1] B10[5][2]*A01[0][1] B10[6][2]*A01[0][1] B10[7][2]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm13, ymm6); //ymm6 += (B10[4][2]*A01[0][2] B10[5][2]*A01[0][2] B10[6][2]*A01[0][2] B10[7][2]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm13, ymm7); //ymm7 += (B10[4][2]*A01[0][3] B10[5][2]*A01[0][3] B10[6][2]*A01[0][3] B10[7][2]*A01[0][3]) - - //broadcast 4th row of A01 - ymm8 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] - ymm9 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] - ymm10 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] - ymm11 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] - - a01 += cs_a; //move to next row of A01 - - ymm0 = _mm256_fmadd_pd(ymm8, ymm14, ymm0); //ymm0 += (B10[0][3]*A01[0][0] B10[1][3]*A01[0][0] B10[2][3]*A01[0][0] B10[3][3]*A01[0][0]) - ymm1 = _mm256_fmadd_pd(ymm9, ymm14, ymm1); //ymm1 += (B10[0][3]*A01[0][1] B10[1][3]*A01[0][1] B10[2][3]*A01[0][1] B10[3][3]*A01[0][1]) - ymm2 = _mm256_fmadd_pd(ymm10, ymm14, ymm2); //ymm2 += (B10[0][3]*A01[0][2] B10[1][3]*A01[0][2] B10[2][3]*A01[0][2] B10[3][3]*A01[0][2]) - ymm3 = _mm256_fmadd_pd(ymm11, ymm14, ymm3); //ymm3 += (B10[0][3]*A01[0][3] B10[1][3]*A01[0][3] B10[2][3]*A01[0][3] B10[3][3]*A01[0][3]) - - ymm4 = _mm256_fmadd_pd(ymm8, ymm15, ymm4); //ymm4 += (B10[4][3]*A01[0][0] B10[5][3]*A01[0][0] B10[6][3]*A01[0][0] B10[7][3]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm9, ymm15, ymm5); //ymm5 += (B10[4][3]*A01[0][1] B10[5][3]*A01[0][1] B10[6][3]*A01[0][1] B10[7][3]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm10, ymm15, ymm6); //ymm6 += (B10[4][3]*A01[0][2] B10[5][3]*A01[0][2] B10[6][3]*A01[0][2] B10[7][3]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm11, ymm15, ymm7); //ymm7 += (B10[4][3]*A01[0][3] B10[5][3]*A01[0][3] B10[6][3]*A01[0][3] B10[7][3]*A01[0][3]) - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM - } - - ///GEMM code ends/// - - ymm16 = _mm256_broadcast_sd((double const *)&AlphaVal); - //load 8x4 block of B11 - if(n_remainder == 3) - { - ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - ymm9 = _mm256_loadu_pd((double const *)(b11+cs_b)); //B11[0-3][0] - ymm13 = _mm256_loadu_pd((double const *)(b11 + cs_b + D_NR)); //B11[4-7][0] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b*2)); //B11[0-3][1] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b*2 + D_NR)); //B11[4-7][1] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0-3][2] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4-7][2] - } - if(n_remainder == 2) - { - ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] - ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] - ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - ymm10 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0-3][0] - ymm14 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0] + D_NR)); //B11[4-7][0] - ymm11 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0-3][1] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] + D_NR)); //B11[4-7][1] - } - if(n_remainder == 1) - { - ymm8 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][1] - ymm12 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][1] - ymm9 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][2] - ymm13 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][2] - ymm10 = _mm256_broadcast_sd((double const *)&ones); //B11[0-3][3] - ymm14 = _mm256_broadcast_sd((double const *)&ones); //B11[4-7][3] - ymm11 = _mm256_loadu_pd((double const *)(b11+cs_b_offset[1])); //B11[0-3][0] - ymm15 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1] +D_NR)); //B11[4-7][0] - } - - ymm8 = _mm256_fmsub_pd(ymm8, ymm16, ymm0); //B11[0-3][0] * alpha -= ymm0 - ymm9 = _mm256_fmsub_pd(ymm9, ymm16, ymm1); //B11[4-7][0] * alpha-= ymm1 - ymm10 = _mm256_fmsub_pd(ymm10, ymm16, ymm2); //B11[0-3][1] * alpha-= ymm2 - ymm11 = _mm256_fmsub_pd(ymm11, ymm16, ymm3); //B11[4-7][1] * alpha -= ymm3 - - ymm12 = _mm256_fmsub_pd(ymm12, ymm16, ymm4); //B11[0-3][2] * alpha -= ymm4 - ymm13 = _mm256_fmsub_pd(ymm13, ymm16, ymm5); //B11[4-7][2] * alpha -= ymm5 - ymm14 = _mm256_fmsub_pd(ymm14, ymm16, ymm6); //B11[0-3][3] * alpha -= ymm6 - ymm15 = _mm256_fmsub_pd(ymm15, ymm16, ymm7); //B11[4-7][3] * alpha -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - //1st col - ymm0 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - a11 += cs_a; - - //2nd col - ymm1 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm2 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - - a11 += cs_a; - - //3rd col - ymm3 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm4 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm5 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] - - a11 += cs_a; - - //4th col - ymm6 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][1] - - ymm2 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm5 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm6 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] - - //(Row 3): FMA operations - ymm10 = _mm256_fnmadd_pd(ymm11, ymm6, ymm10); - ymm9 = _mm256_fnmadd_pd(ymm11, ymm5, ymm9); - ymm8 = _mm256_fnmadd_pd(ymm11, ymm2, ymm8); - - //(Row 3): FMA operations - ymm14 = _mm256_fnmadd_pd(ymm15, ymm6, ymm14); - ymm13 = _mm256_fnmadd_pd(ymm15, ymm5, ymm13); - ymm12 = _mm256_fnmadd_pd(ymm15, ymm2, ymm12); - - //(ROW 2): FMA operations - ymm9 = _mm256_fnmadd_pd(ymm10, ymm4, ymm9); - ymm8 = _mm256_fnmadd_pd(ymm10, ymm3, ymm8); - - ymm13 = _mm256_fnmadd_pd(ymm14, ymm4, ymm13); - ymm12 = _mm256_fnmadd_pd(ymm14, ymm3, ymm12); - - //(Row 1):FMA operations - ymm8 = _mm256_fnmadd_pd(ymm9, ymm1, ymm8); - - ymm12 = _mm256_fnmadd_pd(ymm13, ymm1, ymm12); - - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)(b11 + cs_b), ymm9); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b + D_NR), ymm13); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14);//store(B11[4-7][2]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm10); //store(B11[0-3][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0] + D_NR), ymm14); //store(B11[4-7][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm11); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)(b11+ cs_b_offset[1]), ymm11); //store(B11[0-3][0]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1] + D_NR), ymm15); //store(B11[4-7][0]) - } - - } - } - if(i<0) - i += D_NR; - if((m & 4)) ///implementation for remainder rows(when m_remainder is a multiple of 4) - { - for(j = (n-D_NR); (j+1) > 0; j -=D_NR) //loop along n direction - { - a01 = L + (j+D_NR)*cs_a + (j); //pointer to block of A to be used for GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = (n-j-D_NR) / D_NR; //number of times GEMM operations to be performed(in blocks of 4x4) - - ymm15 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha - ///GEMM for previous blocks /// - - ///load 4x4 block of b11 - ymm0 = _mm256_loadu_pd((double const *)b11); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm1 = _mm256_loadu_pd((double const *)(b11 + cs_b)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[0])); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b_offset[1])); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - - //multiply by alpha - ymm0 = _mm256_mul_pd(ymm0, ymm15); //B11[x][0] *= alpha - ymm1 = _mm256_mul_pd(ymm1, ymm15); //B11[x][1] *=alpha - ymm2 = _mm256_mul_pd(ymm2, ymm15); //B11[x][2] *= alpha - ymm3 = _mm256_mul_pd(ymm3, ymm15); //B11[x][3] *= alpha - - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation starts/// - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //load 4x4 bblock of b10 - ymm8 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm9 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm10 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //B10[0][2] B10[1][2] B10[2][2] B10[3][2] - ymm11 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[1])); //B10[0][3] B10[1][3] B10[2][3] B10[3][3] - - //broadcast 1st row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] - - a01 += cs_a; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] - - a01 += cs_a; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B10[0][1]*A01[1][0] B10[1][1]*A01[1][0] B10[2][1]*A01[1][0] B10[3][1]*A01[1][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B10[0][1]*A01[1][1] B10[1][1]*A01[1][1] B10[2][1]*A01[1][1] B10[3][1]*A01[1][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B10[0][1]*A01[1][2] B10[1][1]*A01[1][2] B10[2][1]*A01[1][2] B10[3][1]*A01[1][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B10[0][1]*A01[1][3] B10[1][1]*A01[1][3] B10[2][1]*A01[1][3] B10[3][1]*A01[1][3]) - - //braodcast 3rd row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] - - a01 += cs_a; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B10[0][2]*A01[2][0] B10[1][2]*A01[2][0] B10[2][2]*A01[2][0] B10[3][2]*A01[2][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B10[0][2]*A01[2][1] B10[1][2]*A01[2][1] B10[2][2]*A01[2][1] B10[3][2]*A01[2][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B10[0][2]*A01[2][2] B10[1][2]*A01[2][2] B10[2][2]*A01[2][2] B10[3][2]*A01[2][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B10[0][2]*A01[2][3] B10[1][2]*A01[2][3] B10[2][2]*A01[2][3] B10[3][2]*A01[2][3]) - - //broadcast 4th row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] - - a01 += cs_a; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B10[0][3]*A01[3][0] B10[1][3]*A01[3][0] B10[2][3]*A01[3][0] B10[3][3]*A01[3][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B10[0][3]*A01[3][1] B10[1][3]*A01[3][1] B10[2][3]*A01[3][1] B10[3][3]*A01[3][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B10[0][3]*A01[3][2] B10[1][3]*A01[3][2] B10[2][3]*A01[3][2] B10[3][3]*A01[3][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B10[0][3]*A01[3][3] B10[1][3]*A01[3][3] B10[2][3]*A01[3][3] B10[3][3]*A01[3][3]) - - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + D_NR*cs_a; //pointer math to find next block of A for GEMM - } - - ///GEMM code end/// - - ymm0 = _mm256_sub_pd(ymm0, ymm4); //B11[x][0] -=ymm4 - ymm1 = _mm256_sub_pd(ymm1, ymm5); //B11[x][1] -= ymm5 - ymm2 = _mm256_sub_pd(ymm2, ymm6); //B11[x][2] -= ymm6 - ymm3 = _mm256_sub_pd(ymm3, ymm7); //B11[x][3] -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - - //1st col - ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - a11 += cs_a; - - //2nd col - ymm5 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm8 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - - a11 += cs_a; - - //3rd col - ymm6 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm9 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm11 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] - - a11 += cs_a; - - //4th col - ymm7 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm12 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] - ymm13 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][1] - - - //(Row 3): FMA operations - ymm2 = _mm256_fnmadd_pd(ymm3, ymm12, ymm2); - ymm1 = _mm256_fnmadd_pd(ymm3, ymm10, ymm1); - ymm0 = _mm256_fnmadd_pd(ymm3, ymm7, ymm0); - - //(ROW 2): FMA operations - ymm1 = _mm256_fnmadd_pd(ymm2, ymm9, ymm1); - ymm0 = _mm256_fnmadd_pd(ymm2, ymm6, ymm0); - - //(Row 1):FMA operations - ymm0 = _mm256_fnmadd_pd(ymm1, ymm5, ymm0); - - _mm256_storeu_pd((double *)b11, ymm0); //store(B11[x][0]) - _mm256_storeu_pd((double *)(b11 + cs_b), ymm1); //store(B11[x][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm2); //(store(B11[x][2])) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[1]), ymm3); //store(B11[x][3]) - - } - if(n_remainder) //implementation for remainder columns(when n is not a multiple of D_NR) - { - - a01 = L + (j+D_NR)*cs_a + (j); //pointer to block of A to be used for GEMM - a11 = L + j*cs_a + j; //pointer to block of A to be used for TRSM - b10 = B + i + (j+D_NR)*cs_b; //pointer to block of B to be used for GEMM - b11 = B + i + j*cs_b; //pointer to block of B to be used for TRSM - - k_iter = (n-j-D_NR) / D_NR; //number of times GEMM operations to be performed(in blocks of 4x4) - - ymm15 = _mm256_broadcast_sd((double const *)&AlphaVal); //register to store alpha - ///GEMM for previous blocks /// - - ///load 4x4 block of b11 - if(n_remainder == 3) - { - ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm1 = _mm256_loadu_pd((double const *)b11+ cs_b); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - } - if(n_remainder == 2) - { - ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm1 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm2 = _mm256_loadu_pd((double const *)(b11 + cs_b * 2)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - } - if(n_remainder == 1) - { - ymm0 = _mm256_broadcast_sd((double const *)&ones); //B11[0][1] B11[1][1] B11[2][1] B11[3][1] - ymm1 = _mm256_broadcast_sd((double const *)&ones); //B11[0][2] B11[1][2] B11[2][2] B11[3][2] - ymm2 = _mm256_broadcast_sd((double const *)&ones); //B11[0][3] B11[1][3] B11[2][3] B11[3][3] - ymm3 = _mm256_loadu_pd((double const *)(b11 + cs_b * 3)); //B11[0][0] B11[1][0] B11[2][0] B11[3][0] - } - - //multiply by alpha - ymm0 = _mm256_mul_pd(ymm0, ymm15); //B11[x][0] *= alpha - ymm1 = _mm256_mul_pd(ymm1, ymm15); //B11[x][1] *=alpha - ymm2 = _mm256_mul_pd(ymm2, ymm15); //B11[x][2] *= alpha - ymm3 = _mm256_mul_pd(ymm3, ymm15); //B11[x][3] *= alpha - - ymm4 = _mm256_setzero_pd(); - ymm5 = _mm256_setzero_pd(); - ymm6 = _mm256_setzero_pd(); - ymm7 = _mm256_setzero_pd(); - - ///GEMM implementation starts/// - - for(k = 0; k < k_iter; k++) //loop for number of GEMM operations - { - ptr_a01_dup = a01; - - //load 4x4 bblock of b10 - ymm8 = _mm256_loadu_pd((double const *)b10); //B10[0][0] B10[1][0] B10[2][0] B10[3][0] - ymm9 = _mm256_loadu_pd((double const *)(b10 + cs_b)); //B10[0][1] B10[1][1] B10[2][1] B10[3][1] - ymm10 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[0])); //B10[0][2] B10[1][2] B10[2][2] B10[3][2] - ymm11 = _mm256_loadu_pd((double const *)(b10 + cs_b_offset[1])); //B10[0][3] B10[1][3] B10[2][3] B10[3][3] - - //broadcast 1st row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[0][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[0][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[0][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[0][3] - - a01 += cs_a; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm8, ymm4); //ymm4 += (B10[0][0]*A01[0][0] B10[1][0]*A01[0][0] B10[2][0]*A01[0][0] B10[3][0]*A01[0][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm8, ymm5); //ymm5 += (B10[0][0]*A01[0][1] B10[1][0]*A01[0][1] B10[2][0]*A01[0][1] B10[3][0]*A01[0][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm8, ymm6); //ymm6 += (B10[0][0]*A01[0][2] B10[1][0]*A01[0][2] B10[2][0]*A01[0][2] B10[3][0]*A01[0][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm8, ymm7); //ymm7 += (B10[0][0]*A01[0][3] B10[1][0]*A01[0][3] B10[2][0]*A01[0][3] B10[3][0]*A01[0][3]) - - //broadcast 2nd row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[1][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[1][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[1][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[1][3] - - a01 += cs_a; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm9, ymm4); //ymm4 += (B10[0][1]*A01[1][0] B10[1][1]*A01[1][0] B10[2][1]*A01[1][0] B10[3][1]*A01[1][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm9, ymm5); //ymm5 += (B10[0][1]*A01[1][1] B10[1][1]*A01[1][1] B10[2][1]*A01[1][1] B10[3][1]*A01[1][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm9, ymm6); //ymm6 += (B10[0][1]*A01[1][2] B10[1][1]*A01[1][2] B10[2][1]*A01[1][2] B10[3][1]*A01[1][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm9, ymm7); //ymm7 += (B10[0][1]*A01[1][3] B10[1][1]*A01[1][3] B10[2][1]*A01[1][3] B10[3][1]*A01[1][3]) - - //braodcast 3rd row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[2][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[2][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[2][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[2][3] - - a01 += cs_a; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm10, ymm4); //ymm4 += (B10[0][2]*A01[2][0] B10[1][2]*A01[2][0] B10[2][2]*A01[2][0] B10[3][2]*A01[2][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm10, ymm5); //ymm5 += (B10[0][2]*A01[2][1] B10[1][2]*A01[2][1] B10[2][2]*A01[2][1] B10[3][2]*A01[2][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm10, ymm6); //ymm6 += (B10[0][2]*A01[2][2] B10[1][2]*A01[2][2] B10[2][2]*A01[2][2] B10[3][2]*A01[2][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm10, ymm7); //ymm7 += (B10[0][2]*A01[2][3] B10[1][2]*A01[2][3] B10[2][2]*A01[2][3] B10[3][2]*A01[2][3]) - - //broadcast 4th row of A01 - ymm12 = _mm256_broadcast_sd((double const *)(a01 + 0)); //A01[3][0] - ymm13 = _mm256_broadcast_sd((double const *)(a01 + 1)); //A01[3][1] - ymm14 = _mm256_broadcast_sd((double const *)(a01 + 2)); //A01[3][2] - ymm15 = _mm256_broadcast_sd((double const *)(a01 + 3)); //A01[3][3] - - a01 += cs_a; //move to next row of A - - ymm4 = _mm256_fmadd_pd(ymm12, ymm11, ymm4); //ymm4 += (B10[0][3]*A01[3][0] B10[1][3]*A01[3][0] B10[2][3]*A01[3][0] B10[3][3]*A01[3][0]) - ymm5 = _mm256_fmadd_pd(ymm13, ymm11, ymm5); //ymm5 += (B10[0][3]*A01[3][1] B10[1][3]*A01[3][1] B10[2][3]*A01[3][1] B10[3][3]*A01[3][1]) - ymm6 = _mm256_fmadd_pd(ymm14, ymm11, ymm6); //ymm6 += (B10[0][3]*A01[3][2] B10[1][3]*A01[3][2] B10[2][3]*A01[3][2] B10[3][3]*A01[3][2]) - ymm7 = _mm256_fmadd_pd(ymm15, ymm11, ymm7); //ymm7 += (B10[0][3]*A01[3][3] B10[1][3]*A01[3][3] B10[2][3]*A01[3][3] B10[3][3]*A01[3][3]) - - - b10 += D_NR * cs_b; //pointer math to find next block of B for GEMM - a01 = ptr_a01_dup + (D_NR * cs_a); //pointer math to find next block of A for GEMM - } - - ///GEMM code end/// - - ymm0 = _mm256_sub_pd(ymm0, ymm4); //B11[x][0] -=ymm4 - ymm1 = _mm256_sub_pd(ymm1, ymm5); //B11[x][1] -= ymm5 - ymm2 = _mm256_sub_pd(ymm2, ymm6); //B11[x][2] -= ymm6 - ymm3 = _mm256_sub_pd(ymm3, ymm7); //B11[x][3] -= ymm7 - - ///implement TRSM/// - - ///read 4x4 block of A11/// - - - //1st col - ymm4 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][0] - - a11 += cs_a; - - //2nd col - ymm5 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm8 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - - a11 += cs_a; - - //3rd col - ymm6 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm9 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm11 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] - - a11 += cs_a; - - //4th col - ymm7 = _mm256_broadcast_sd((double const *)(a11+0)); //A11[0][1] - ymm10 = _mm256_broadcast_sd((double const *)(a11+1)); //A11[0][1] - ymm12 = _mm256_broadcast_sd((double const *)(a11+2)); //A11[0][1] - ymm13 = _mm256_broadcast_sd((double const *)(a11+3)); //A11[0][1] - - //(Row 3): FMA operations - ymm2 = _mm256_fnmadd_pd(ymm3, ymm12, ymm2); - ymm1 = _mm256_fnmadd_pd(ymm3, ymm10, ymm1); - ymm0 = _mm256_fnmadd_pd(ymm3, ymm7, ymm0); - - //(ROW 2): FMA operations - ymm1 = _mm256_fnmadd_pd(ymm2, ymm9, ymm1); - ymm0 = _mm256_fnmadd_pd(ymm2, ymm6, ymm0); - - //(Row 1):FMA operations - ymm0 = _mm256_fnmadd_pd(ymm1, ymm5, ymm0); - - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)(b11 + cs_b), ymm1); //store(B11[x][1]) - _mm256_storeu_pd((double *)(b11 + cs_b_offset[0]), ymm2); //(store(B11[x][2])) - _mm256_storeu_pd((double *)(b11 + cs_b*3), ymm3); //store(B11[x][0]) - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)(b11+ cs_b * 2), ymm2); //store(B11[x][0]) - _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[x][1]) - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)(b11 + cs_b * 3), ymm3); //store(B11[x][0]) - } - - } - m_remainder -= 4; - i -= 4; - } - if(m_remainder) - { - dtrsm_small_XAutB_unitDiag(a->buffer, b->buffer,AlphaVal, m_remainder, n, cs_a, cs_b); - } - return BLIS_SUCCESS; -} - - -/* - * AX = Alpha*B, Single precision, A: lower triangular - * This kernel implementation supports matrices A and B such that m is equal to BLI_AlXB_M_SP and n is mutiple of 8 - */ - -static err_t bli_strsm_small_AlXB ( - side_t side, - obj_t* AlphaObj, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ) -{ - obj_t alpha, beta; // gemm parameters - obj_t Ga, Gb, Gc; // for GEMM - int m = bli_obj_length(b); // number of rows of matrix B - int n = bli_obj_width(b); // number of columns of matrix B - - int lda = bli_obj_col_stride(a); // column stride of A - int ldb = bli_obj_col_stride(b); // column stride of B - - int rsa = bli_obj_row_stride(a); // row stride of A - int rsb = bli_obj_row_stride(b); // row stride of B - - int i = 0; - int j; - int blk_size = 8; - int isUnitDiag = bli_obj_has_unit_diag(a); - - float alphaVal; - float *L = a->buffer; - float *B = b->buffer; - - if (m != BLI_AlXB_M_SP || (n&7) != 0) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - if ( (m*(m + n)) > BLIS_SMALL_MATRIX_THRES_TRSM ) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - - alphaVal = *((float *)bli_obj_buffer_for_const(BLIS_FLOAT, AlphaObj)); - - /* Small _GEMM preparation code */ - bli_obj_create( BLIS_FLOAT, 1, 1, 0, 0, &alpha ); - bli_obj_create( BLIS_FLOAT, 1, 1, 0, 0, &beta ); - - /* B = B - A*B */ - bli_setsc( -(1.0), 0.0, &alpha ); - bli_setsc( (1.0), 0.0, &beta ); - - - bli_obj_create_with_attached_buffer( BLIS_FLOAT, blk_size, blk_size, a->buffer, rsa, lda, &Ga); - bli_obj_create_with_attached_buffer( BLIS_FLOAT, blk_size, n, b->buffer, rsb, ldb, &Gb); - bli_obj_create_with_attached_buffer( BLIS_FLOAT, blk_size, n, b->buffer, rsb, ldb, &Gc); - - bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, &Ga ); - bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, &Gb ); - bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, &Gc ); - - //first block of trsm - Gb.buffer = (void*)(B + i); - - //trsm of first 8xn block - if (alphaVal != 1) - { - if (isUnitDiag == 0) - { - blis_strsm_microkernel_alpha((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); - fp_blis_strsm_microkernel = blis_strsm_microkernel; - } - else - { - blis_strsm_microkernel_alpha_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); - fp_blis_strsm_microkernel = blis_strsm_microkernel_unitDiag; - } - bli_setsc( alphaVal, 0.0, &beta ); - } - else - { - if (isUnitDiag == 0) - { - blis_strsm_microkernel((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); - fp_blis_strsm_microkernel = blis_strsm_microkernel; - } - else - { - blis_strsm_microkernel_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); - fp_blis_strsm_microkernel = blis_strsm_microkernel_unitDiag; - } - } - - //gemm update - for (j = i + blk_size; j < m; j += blk_size) // for rows upto multiple of BLOCK_HEIGHT - { - Ga.buffer = (void*)(L + j + i*lda); - Gc.buffer = (void*)(B + j); - - bli_gemm_small(&alpha, &Ga, &Gb, &beta, &Gc, cntx, cntl ); // Gc = beta*Gc + alpha*Ga *Gb - } - - //trsm of remaining blocks - for (i = blk_size; i < m; i += blk_size) - { - Gb.buffer = (void*)(B + i); - - fp_blis_strsm_microkernel((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); - - for (j = i + blk_size; j < m; j += blk_size) // for rows upto multiple of BLOCK_HEIGHT - { - Ga.buffer = (void*)(L + j + i*lda); - Gc.buffer = (void*)(B + j); - - bli_gemm_small(&alpha, &Ga, &Gb, &beta, &Gc, cntx, cntl ); // Gc = beta*Gc + alpha*Ga *Gb - } - - } // End of for loop - i - - return BLIS_SUCCESS; -} - - - -/* - * XA' = Alpha*B, Single precision, A: lower triangular - * This kernel implementation supports matrices A and B such that - * m and n are multiples of 8 and n is less than or equal to BLI_XAltB_N_SP - */ -static err_t bli_strsm_small_XAltB( - side_t side, - obj_t* AlphaObj, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ) -{ - int m = bli_obj_length(a); // number of rows of matrix B - int n = bli_obj_length(b); // number of columns of matrix B - - int lda = bli_obj_col_stride(a); // column stride of A - int ldb = bli_obj_col_stride(b); // column stride of B - - int rsa = bli_obj_row_stride(a); // row stride of A - int rsb = bli_obj_row_stride(b); // row stride of B - - int i = 0; - int isUnitDiag = bli_obj_has_unit_diag(a); - - float alphaVal; - float *L = a->buffer; - float *B = b->buffer; - - if ((m&7) != 0 || (n&7) != 0) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - if ( n > BLI_XAltB_N_SP || (m*(m + n)) > BLIS_SMALL_MATRIX_THRES_TRSM ) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - - alphaVal = *((float *)bli_obj_buffer_for_const(BLIS_FLOAT, AlphaObj)); - - if (alphaVal != 1) - { - if (isUnitDiag == 0) - { - trsm_XAtB_block_allSmallSizedMatrices_alpha((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); - } - else - { - trsm_XAtB_block_allSmallSizedMatrices_alpha_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); - } - } - else - { - if (isUnitDiag == 0) - { - trsm_XAtB_block_allSmallSizedMatrices((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); - } - else - { - trsm_XAtB_block_allSmallSizedMatrices_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); - } - } - return BLIS_SUCCESS; -} - -/* - * A'X = Alpha*B, Single precision, A: upper triangular - * This kernel implementation supports matrices A and B such that - * m and n are multiples of 8, m is less than or equal to BLI_AutXB_M_SP and n is less than or equal to BLI_AutXB_N_SP - */ -static err_t bli_strsm_small_AutXB( - side_t side, - obj_t* AlphaObj, - obj_t* a, - obj_t* b, - cntx_t* cntx, - cntl_t* cntl - ) -{ - int m = bli_obj_width(a); // number of rows of matrix A (since At, so width is taken) - int n = bli_obj_width(b); // number of columns of matrix B - - int lda = bli_obj_col_stride(a); // column stride of A - int ldb = bli_obj_col_stride(b); // column stride of B - - int rsa = bli_obj_row_stride(a); // row stride of A - int rsb = bli_obj_row_stride(b); // row stride of B - - int i = 0; - int isUnitDiag = bli_obj_has_unit_diag(a); - - float alphaVal; - float *L = a->buffer; - float *B = b->buffer; - - if ((m&7) != 0 || (n&7) != 0) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - if ( m > BLI_AutXB_M_SP || n > BLI_AutXB_N_SP || (m*(m + n)) > BLIS_SMALL_MATRIX_THRES_TRSM ) - { - return BLIS_NOT_YET_IMPLEMENTED; - } - - alphaVal = *((float *)bli_obj_buffer_for_const(BLIS_FLOAT, AlphaObj)); - - if (alphaVal != 1) - { - if (isUnitDiag == 0) - { - trsm_AutXB_block_allSmallSizedMatrices_alpha((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); - } - else - { - trsm_AutXB_block_allSmallSizedMatrices_alpha_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb, alphaVal); - } - } - else - { - if (isUnitDiag == 0) - { - trsm_AutXB_block_allSmallSizedMatrices((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); - } - else - { - trsm_AutXB_block_allSmallSizedMatrices_unitDiag((L + i * lda + i), (B + i), m, n, rsa, rsb, lda, ldb); - } - } - return BLIS_SUCCESS; -} - -///////////////////////////// AX=B /////////////////////////////// -static void blis_strsm_microkernel_alpha(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alphaVal) -{ - float ones = 1.0; - int j; - int cs_b_offset[6]; - //int row2, row4, row6; - float *ptr_b_dup; - - //70 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[8]; - __m256 mat_a_cols[8]; - __m256 mat_a_cols_rearr[36]; - __m256 mat_a_diag_inv[8]; - __m256 reciprocal_diags; - __m256 alphaReg; - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - - //reciprocal_diags = _mm256_loadu_ps((float const *)ones); - reciprocal_diags = _mm256_broadcast_ss((float const *)&ones); - alphaReg = _mm256_broadcast_ss((float const *)&alphaVal); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //read first set of 16x8 block of B into registers, where 16 is the blk_height and 8 is the blk_width for B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); - //_mm_prefetch((char*)(ptr_l + 0), _MM_HINT_T0); - //row2 = (cs_l << 1); - //row4 = (cs_l << 2); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); - //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); - //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); - //_mm_prefetch((char*)(ptr_l + row2 + cs_l), _MM_HINT_T0); - //row6 = row2 + row4; - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); - //_mm_prefetch((char*)(ptr_l + row4), _MM_HINT_T0); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); - //_mm_prefetch((char*)(ptr_l + row4 + cs_l), _MM_HINT_T0); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); - //_mm_prefetch((char*)(ptr_l + row6), _MM_HINT_T0); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); - //_mm_prefetch((char*)(ptr_l + row6 + cs_l), _MM_HINT_T0); - - //reciprocal_diags = _mm256_loadu_ps((float const *)ones); - - //read first set of 16x16 block of L, where 16 is the blk_height and 16 is the blk_width for L - /*mat_a_cols[0] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[1] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[2] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[3] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[4] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[5] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[6] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[7] = _mm256_loadu_ps((float const *)ptr_l);*/ - - //Shuffle to rearrange/transpose 16x16 block of L into contiguous row-wise registers - //tmpRegs[0] = _mm256_castps256_ps128(mat_a_cols[0]); //zero latency, no instruction added actually. - //mat_a_cols_rearr[0] = _mm256_broadcastss_ps(tmpRegs[0]); - //1st col - mat_a_cols_rearr[0] = _mm256_broadcast_ss((float const *)(ptr_l+0)); - mat_a_cols_rearr[1] = _mm256_broadcast_ss((float const *)(ptr_l+1)); - mat_a_cols_rearr[3] = _mm256_broadcast_ss((float const *)(ptr_l+2)); - mat_a_cols_rearr[6] = _mm256_broadcast_ss((float const *)(ptr_l+3)); - mat_a_cols_rearr[10] = _mm256_broadcast_ss((float const *)(ptr_l+4)); - mat_a_cols_rearr[15] = _mm256_broadcast_ss((float const *)(ptr_l+5)); - mat_a_cols_rearr[21] = _mm256_broadcast_ss((float const *)(ptr_l+6)); - mat_a_cols_rearr[28] = _mm256_broadcast_ss((float const *)(ptr_l+7)); - //2nd col - ptr_l += cs_l; - mat_a_cols_rearr[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_cols_rearr[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_cols_rearr[7] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[11] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[16] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[22] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[29] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //3rd col - ptr_l += cs_l; - mat_a_cols_rearr[5] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_cols_rearr[8] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[12] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[17] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[23] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[30] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //4rth col - ptr_l += cs_l; - mat_a_cols_rearr[9] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[13] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[18] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[24] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[31] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //5th col - ptr_l += cs_l; - mat_a_cols_rearr[14] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[19] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[25] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[32] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //6th col - ptr_l += cs_l; - mat_a_cols_rearr[20] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[26] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[33] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //7th col - ptr_l += cs_l; - mat_a_cols_rearr[27] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[34] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //7th col - ptr_l += cs_l; - mat_a_cols_rearr[35] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - numCols_b -= 8; // blk_width = 8 - - //compute reciprocals of L(i,i) and broadcast in registers - mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); - mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); - mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[20]); - mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_cols_rearr[27], mat_a_cols_rearr[35]); - - //mat_a_diag_inv[1] = _mm256_permute_ps(mat_a_diag_inv[1], 0x55); - //mat_a_diag_inv[3] = _mm256_permute_ps(mat_a_diag_inv[3], 0x55); - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC); - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x20); - - //reciprocal of diagnol elements - reciprocal_diags = _mm256_div_ps(reciprocal_diags, mat_a_diag_inv[0]); - - //Start loop for cols of B to be processed in size of blk_width - for (j = 0; j < numCols_b; j += 8) - { - ptr_b_dup = ptr_b; - - /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ - - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); - - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); - mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); -#else - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); - mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); - mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); - mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); - mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); - mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); - mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); - mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - //Read next set of B columns - ptr_b += (cs_b + cs_b_offset[5]); - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); - - //end loop of cols - } - - //Last block trsm processing - ptr_b_dup = ptr_b; - - /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ - - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); - - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); - mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); -#else - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); - mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); - mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); - mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); - mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); - mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); - mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); - mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); - - //end loop of cols -} - -static void blis_strsm_microkernel_alpha_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alphaVal) -{ - //float ones = 1.0; - int j; - int cs_b_offset[6]; - //int row2, row4, row6; - float *ptr_b_dup; - - //70 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[8]; - __m256 mat_a_cols[8]; - __m256 mat_a_cols_rearr[36]; - //__m256 mat_a_diag_inv[8]; - //__m256 reciprocal_diags; - __m256 alphaReg; - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - - //reciprocal_diags = _mm256_loadu_ps((float const *)ones); - //reciprocal_diags = _mm256_broadcast_ss((float const *)&ones); - alphaReg = _mm256_broadcast_ss((float const *)&alphaVal); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //read first set of 16x8 block of B into registers, where 16 is the blk_height and 8 is the blk_width for B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); - //_mm_prefetch((char*)(ptr_l + 0), _MM_HINT_T0); - //row2 = (cs_l << 1); - //row4 = (cs_l << 2); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); - //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); - //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); - //_mm_prefetch((char*)(ptr_l + row2 + cs_l), _MM_HINT_T0); - //row6 = row2 + row4; - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); - //_mm_prefetch((char*)(ptr_l + row4), _MM_HINT_T0); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); - //_mm_prefetch((char*)(ptr_l + row4 + cs_l), _MM_HINT_T0); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); - //_mm_prefetch((char*)(ptr_l + row6), _MM_HINT_T0); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); - //_mm_prefetch((char*)(ptr_l + row6 + cs_l), _MM_HINT_T0); - - //reciprocal_diags = _mm256_loadu_ps((float const *)ones); - - //read first set of 16x16 block of L, where 16 is the blk_height and 16 is the blk_width for L - /*mat_a_cols[0] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[1] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[2] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[3] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[4] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[5] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[6] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[7] = _mm256_loadu_ps((float const *)ptr_l);*/ - - //Shuffle to rearrange/transpose 16x16 block of L into contiguous row-wise registers - //tmpRegs[0] = _mm256_castps256_ps128(mat_a_cols[0]); //zero latency, no instruction added actually. - //mat_a_cols_rearr[0] = _mm256_broadcastss_ps(tmpRegs[0]); - //1st col - mat_a_cols_rearr[0] = _mm256_broadcast_ss((float const *)(ptr_l+0)); - mat_a_cols_rearr[1] = _mm256_broadcast_ss((float const *)(ptr_l+1)); - mat_a_cols_rearr[3] = _mm256_broadcast_ss((float const *)(ptr_l+2)); - mat_a_cols_rearr[6] = _mm256_broadcast_ss((float const *)(ptr_l+3)); - mat_a_cols_rearr[10] = _mm256_broadcast_ss((float const *)(ptr_l+4)); - mat_a_cols_rearr[15] = _mm256_broadcast_ss((float const *)(ptr_l+5)); - mat_a_cols_rearr[21] = _mm256_broadcast_ss((float const *)(ptr_l+6)); - mat_a_cols_rearr[28] = _mm256_broadcast_ss((float const *)(ptr_l+7)); - //2nd col - ptr_l += cs_l; - mat_a_cols_rearr[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_cols_rearr[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_cols_rearr[7] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[11] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[16] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[22] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[29] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //3rd col - ptr_l += cs_l; - mat_a_cols_rearr[5] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_cols_rearr[8] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[12] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[17] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[23] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[30] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //4rth col - ptr_l += cs_l; - mat_a_cols_rearr[9] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[13] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[18] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[24] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[31] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //5th col - ptr_l += cs_l; - mat_a_cols_rearr[14] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[19] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[25] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[32] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //6th col - ptr_l += cs_l; - mat_a_cols_rearr[20] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[26] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[33] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //7th col - ptr_l += cs_l; - mat_a_cols_rearr[27] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[34] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //8th col - //ptr_l += cs_l; - //mat_a_cols_rearr[35] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - numCols_b -= 8; // blk_width = 8 - - //compute reciprocals of L(i,i) and broadcast in registers - //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[20]); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_cols_rearr[27], mat_a_cols_rearr[35]); - - //mat_a_diag_inv[1] = _mm256_permute_ps(mat_a_diag_inv[1], 0x55); - //mat_a_diag_inv[3] = _mm256_permute_ps(mat_a_diag_inv[3], 0x55); - //mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC); - //mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC); - //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x20); - - //reciprocal of diagnol elements - //reciprocal_diags = _mm256_div_ps(reciprocal_diags, mat_a_diag_inv[0]); - - //Start loop for cols of B to be processed in size of blk_width - for (j = 0; j < numCols_b; j += 8) - { - ptr_b_dup = ptr_b; - - /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ - - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //extract diag a00 from a - //mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); - //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - //mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); - - //extract diag a11 from a - //mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); - //mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - //mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - //mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); - //mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - //mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - //mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); - //mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - //mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - //mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); - //mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - //mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - //mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); - //mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - //mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - //mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); - //mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - //mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - //mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); - //mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - //mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); - mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); -#else - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); - mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); - mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); - mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); - mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); - mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); - mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); - mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - //Read next set of B columns - ptr_b += (cs_b + cs_b_offset[5]); - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); - - //end loop of cols - } - - //Last block trsm processing - ptr_b_dup = ptr_b; - - /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ - - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //extract diag a00 from a - //mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); - //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - //mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); - - //extract diag a11 from a - //mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); - //mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - //mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - //mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); - //mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - //mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - //mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); - //mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - //mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - //mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); - //mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - //mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - //mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); - //mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - //mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - //mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); - //mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - //mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - //mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); - //mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - //mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); - mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); -#else - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); - mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); - mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); - mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); - mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); - mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); - mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); - mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); - - //end loop of cols -} - -static void blis_strsm_microkernel_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) -{ - //float ones = 1.0; - int j; - int cs_b_offset[6]; - //int row2, row4, row6; - float *ptr_b_dup; - - //70 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[8]; - __m256 mat_a_cols[8]; - __m256 mat_a_cols_rearr[36]; - //__m256 mat_a_diag_inv[8]; - //__m256 reciprocal_diags; - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - - //reciprocal_diags = _mm256_loadu_ps((float const *)ones); - //reciprocal_diags = _mm256_broadcast_ss((float const *)&ones); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //read first set of 16x8 block of B into registers, where 16 is the blk_height and 8 is the blk_width for B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); - //_mm_prefetch((char*)(ptr_l + 0), _MM_HINT_T0); - //row2 = (cs_l << 1); - //row4 = (cs_l << 2); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); - //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); - //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); - //_mm_prefetch((char*)(ptr_l + row2 + cs_l), _MM_HINT_T0); - //row6 = row2 + row4; - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); - //_mm_prefetch((char*)(ptr_l + row4), _MM_HINT_T0); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); - //_mm_prefetch((char*)(ptr_l + row4 + cs_l), _MM_HINT_T0); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); - //_mm_prefetch((char*)(ptr_l + row6), _MM_HINT_T0); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); - //_mm_prefetch((char*)(ptr_l + row6 + cs_l), _MM_HINT_T0); - - //reciprocal_diags = _mm256_loadu_ps((float const *)ones); - - //read first set of 16x16 block of L, where 16 is the blk_height and 16 is the blk_width for L - /*mat_a_cols[0] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[1] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[2] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[3] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[4] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[5] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[6] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[7] = _mm256_loadu_ps((float const *)ptr_l);*/ - - //Shuffle to rearrange/transpose 16x16 block of L into contiguous row-wise registers - //tmpRegs[0] = _mm256_castps256_ps128(mat_a_cols[0]); //zero latency, no instruction added actually. - //mat_a_cols_rearr[0] = _mm256_broadcastss_ps(tmpRegs[0]); - //1st col - mat_a_cols_rearr[0] = _mm256_broadcast_ss((float const *)(ptr_l+0)); - mat_a_cols_rearr[1] = _mm256_broadcast_ss((float const *)(ptr_l+1)); - mat_a_cols_rearr[3] = _mm256_broadcast_ss((float const *)(ptr_l+2)); - mat_a_cols_rearr[6] = _mm256_broadcast_ss((float const *)(ptr_l+3)); - mat_a_cols_rearr[10] = _mm256_broadcast_ss((float const *)(ptr_l+4)); - mat_a_cols_rearr[15] = _mm256_broadcast_ss((float const *)(ptr_l+5)); - mat_a_cols_rearr[21] = _mm256_broadcast_ss((float const *)(ptr_l+6)); - mat_a_cols_rearr[28] = _mm256_broadcast_ss((float const *)(ptr_l+7)); - //2nd col - ptr_l += cs_l; - mat_a_cols_rearr[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_cols_rearr[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_cols_rearr[7] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[11] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[16] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[22] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[29] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //3rd col - ptr_l += cs_l; - mat_a_cols_rearr[5] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_cols_rearr[8] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[12] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[17] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[23] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[30] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //4rth col - ptr_l += cs_l; - mat_a_cols_rearr[9] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[13] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[18] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[24] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[31] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //5th col - ptr_l += cs_l; - mat_a_cols_rearr[14] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[19] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[25] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[32] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //6th col - ptr_l += cs_l; - mat_a_cols_rearr[20] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[26] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[33] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //7th col - ptr_l += cs_l; - mat_a_cols_rearr[27] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[34] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //8th col - //ptr_l += cs_l; - //mat_a_cols_rearr[35] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - numCols_b -= 8; // blk_width = 8 - - //compute reciprocals of L(i,i) and broadcast in registers - //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[20]); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_cols_rearr[27], mat_a_cols_rearr[35]); - - //mat_a_diag_inv[1] = _mm256_permute_ps(mat_a_diag_inv[1], 0x55); - //mat_a_diag_inv[3] = _mm256_permute_ps(mat_a_diag_inv[3], 0x55); - //mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC); - //mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC); - //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x20); - - //reciprocal of diagnol elements - //reciprocal_diags = _mm256_div_ps(reciprocal_diags, mat_a_diag_inv[0]); - - //Start loop for cols of B to be processed in size of blk_width - for (j = 0; j < numCols_b; j += 8) - { - ptr_b_dup = ptr_b; - - /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ - - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //extract diag a00 from a - //mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); - //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - //mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - //extract diag a11 from a - //mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); - //mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - //mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - //mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); - //mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - //mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - //mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); - //mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - //mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - //mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); - //mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - //mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - //mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); - //mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - //mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - //mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); - //mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - //mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - //mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); - //mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - //mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); - mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); -#else - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); - mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); - mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); - mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); - mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); - mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); - mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); - mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - //Read next set of B columns - ptr_b += (cs_b + cs_b_offset[5]); - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); - //end loop of cols - } - - //Last block trsm processing - ptr_b_dup = ptr_b; - - /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ - - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //extract diag a00 from a - //mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); - //mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - //mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - //extract diag a11 from a - //mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); - //mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - //mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - //mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); - //mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - //mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - //mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); - //mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - //mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - //mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); - //mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - //mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - //mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); - //mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - //mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - //mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); - //mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - //mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - //mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); - //mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - //mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); - mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); -#else - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); - mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); - mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); - mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); - mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); - mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); - mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); - mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); - //end loop of cols -} - -static void blis_strsm_microkernel(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) -{ - float ones = 1.0; - int j; - int cs_b_offset[6]; - //int row2, row4, row6; - float *ptr_b_dup; - - //70 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[8]; - __m256 mat_a_cols[8]; - __m256 mat_a_cols_rearr[36]; - __m256 mat_a_diag_inv[8]; - __m256 reciprocal_diags; - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - - //reciprocal_diags = _mm256_loadu_ps((float const *)ones); - reciprocal_diags = _mm256_broadcast_ss((float const *)&ones); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //read first set of 16x8 block of B into registers, where 16 is the blk_height and 8 is the blk_width for B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); - //_mm_prefetch((char*)(ptr_l + 0), _MM_HINT_T0); - //row2 = (cs_l << 1); - //row4 = (cs_l << 2); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); - //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); - //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); - //_mm_prefetch((char*)(ptr_l + row2 + cs_l), _MM_HINT_T0); - //row6 = row2 + row4; - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); - //_mm_prefetch((char*)(ptr_l + row4), _MM_HINT_T0); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); - //_mm_prefetch((char*)(ptr_l + row4 + cs_l), _MM_HINT_T0); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); - //_mm_prefetch((char*)(ptr_l + row6), _MM_HINT_T0); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); - //_mm_prefetch((char*)(ptr_l + row6 + cs_l), _MM_HINT_T0); - - //reciprocal_diags = _mm256_loadu_ps((float const *)ones); - - //read first set of 16x16 block of L, where 16 is the blk_height and 16 is the blk_width for L - /*mat_a_cols[0] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[1] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[2] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[3] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[4] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[5] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[6] = _mm256_loadu_ps((float const *)ptr_l); - ptr_l += cs_l; - mat_a_cols[7] = _mm256_loadu_ps((float const *)ptr_l);*/ - - //Shuffle to rearrange/transpose 16x16 block of L into contiguous row-wise registers - //tmpRegs[0] = _mm256_castps256_ps128(mat_a_cols[0]); //zero latency, no instruction added actually. - //mat_a_cols_rearr[0] = _mm256_broadcastss_ps(tmpRegs[0]); - //1st col - mat_a_cols_rearr[0] = _mm256_broadcast_ss((float const *)(ptr_l+0)); - mat_a_cols_rearr[1] = _mm256_broadcast_ss((float const *)(ptr_l+1)); - mat_a_cols_rearr[3] = _mm256_broadcast_ss((float const *)(ptr_l+2)); - mat_a_cols_rearr[6] = _mm256_broadcast_ss((float const *)(ptr_l+3)); - mat_a_cols_rearr[10] = _mm256_broadcast_ss((float const *)(ptr_l+4)); - mat_a_cols_rearr[15] = _mm256_broadcast_ss((float const *)(ptr_l+5)); - mat_a_cols_rearr[21] = _mm256_broadcast_ss((float const *)(ptr_l+6)); - mat_a_cols_rearr[28] = _mm256_broadcast_ss((float const *)(ptr_l+7)); - //2nd col - ptr_l += cs_l; - mat_a_cols_rearr[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_cols_rearr[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_cols_rearr[7] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[11] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[16] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[22] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[29] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //3rd col - ptr_l += cs_l; - mat_a_cols_rearr[5] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_cols_rearr[8] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[12] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[17] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[23] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[30] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //4rth col - ptr_l += cs_l; - mat_a_cols_rearr[9] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_cols_rearr[13] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[18] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[24] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[31] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //5th col - ptr_l += cs_l; - mat_a_cols_rearr[14] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_cols_rearr[19] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[25] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[32] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //6th col - ptr_l += cs_l; - mat_a_cols_rearr[20] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_cols_rearr[26] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[33] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //7th col - ptr_l += cs_l; - mat_a_cols_rearr[27] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_cols_rearr[34] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - //7th col - ptr_l += cs_l; - mat_a_cols_rearr[35] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - numCols_b -= 8; // blk_width = 8 - - //compute reciprocals of L(i,i) and broadcast in registers - mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); - mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); - mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_cols_rearr[14], mat_a_cols_rearr[20]); - mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_cols_rearr[27], mat_a_cols_rearr[35]); - - //mat_a_diag_inv[1] = _mm256_permute_ps(mat_a_diag_inv[1], 0x55); - //mat_a_diag_inv[3] = _mm256_permute_ps(mat_a_diag_inv[3], 0x55); - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC); - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x20); - - //reciprocal of diagnol elements - reciprocal_diags = _mm256_div_ps(reciprocal_diags, mat_a_diag_inv[0]); - - //Start loop for cols of B to be processed in size of blk_width - for (j = 0; j < numCols_b; j += 8) - { - ptr_b_dup = ptr_b; - - /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ - - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); - mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); -#else - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); - mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); - mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); - mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); - mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); - mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); - mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); - mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - //Read next set of B columns - ptr_b += (cs_b + cs_b_offset[5]); - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + (cs_b))); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5])); - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); - //end loop of cols - } - - //Last block trsm processing - ptr_b_dup = ptr_b; - - /*Shuffle to rearrange/transpose 16x8 block of B into contiguous row-wise registers*/ - - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags, 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags, 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[10], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[15], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[21], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[28], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags, 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[11], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[16], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[22], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[29], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags, 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[12], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[17], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[23], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[30], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags, 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_cols_rearr[13], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[18], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[24], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[31], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags, 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_cols_rearr[19], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[25], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[32], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags, 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_cols_rearr[26], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[33], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags, 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_cols_rearr[34], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_a_cols[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_a_cols[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_a_cols[4] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x44); - mat_a_cols[5] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0xEE); - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x44); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0xEE); -#else - mat_a_cols[6] = _mm256_shuffle_ps(mat_a_cols[0], mat_a_cols[1], 0x4E); - mat_a_cols[7] = _mm256_shuffle_ps(mat_a_cols[2], mat_a_cols[3], 0x4E); - mat_a_cols[4] = _mm256_blend_ps(mat_a_cols[0], mat_a_cols[6], 0xCC); - mat_a_cols[5] = _mm256_blend_ps(mat_a_cols[1], mat_a_cols[6], 0x33); - mat_a_cols[6] = _mm256_blend_ps(mat_a_cols[2], mat_a_cols[7], 0xCC); - mat_a_cols[7] = _mm256_blend_ps(mat_a_cols[3], mat_a_cols[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_a_cols[0] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x20); - mat_a_cols[4] = _mm256_permute2f128_ps(mat_a_cols[4], mat_a_cols[6], 0x31); - mat_a_cols[1] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x20); - mat_a_cols[5] = _mm256_permute2f128_ps(mat_a_cols[5], mat_a_cols[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_a_cols[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_a_cols[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_a_cols[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_a_cols[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_a_cols[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_a_cols[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_a_cols[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_a_cols[7]); - //end loop of cols -} -static void blis_dtrsm_microkernel_alpha(double *ptr_l, - double *ptr_b, - int m, - int n, - int rs_l, - int rs_b, - int cs_l, - int cs_b, - double alphaVal - ) -{ - int j; - int n_remainder = n%4; - int cs_b_offset[2]; - double *ptr_b_dup; - double ones = 1.0; - __m256d mat_b_col[4]; - __m256d mat_b_rearr[4]; - __m256d mat_a_cols[4]; - __m256d mat_a_cols_rearr[10]; - __m256d mat_a_diag_inv[4]; - __m256d reciprocal_diags; - __m256d alphaReg; - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - - reciprocal_diags = _mm256_broadcast_sd((double const *)&ones); - alphaReg = _mm256_broadcast_sd((double const *)&alphaVal); - - //if(m % 4 == 0) - //{ - //1st col - mat_a_cols_rearr[0] = _mm256_broadcast_sd((double const *)(ptr_l+0)); - mat_a_cols_rearr[1] = _mm256_broadcast_sd((double const *)(ptr_l+1)); - mat_a_cols_rearr[3] = _mm256_broadcast_sd((double const *)(ptr_l+2)); - mat_a_cols_rearr[6] = _mm256_broadcast_sd((double const *)(ptr_l+3)); - - //2nd col - ptr_l += cs_l; - mat_a_cols_rearr[2] = _mm256_broadcast_sd((double const *)(ptr_l + 1)); - mat_a_cols_rearr[4] = _mm256_broadcast_sd((double const *)(ptr_l + 2)); - mat_a_cols_rearr[7] = _mm256_broadcast_sd((double const *)(ptr_l + 3)); - - //3rd col - ptr_l += cs_l; - mat_a_cols_rearr[5] = _mm256_broadcast_sd((double const *)(ptr_l + 2)); - mat_a_cols_rearr[8] = _mm256_broadcast_sd((double const *)(ptr_l + 3)); - - //4th col - ptr_l += cs_l; - mat_a_cols_rearr[9] = _mm256_broadcast_sd((double const *)(ptr_l + 3)); - //compute reciprocals of L(i,i) and broadcast in registers - mat_a_diag_inv[0] = _mm256_unpacklo_pd(mat_a_cols_rearr[0], mat_a_cols_rearr[2]); - mat_a_diag_inv[1] = _mm256_unpacklo_pd(mat_a_cols_rearr[5], mat_a_cols_rearr[9]); - - mat_a_diag_inv[0] = _mm256_blend_pd(mat_a_diag_inv[0], mat_a_diag_inv[1], 0x0C); - reciprocal_diags = _mm256_div_pd(reciprocal_diags, mat_a_diag_inv[0]); - - for(j = 0;(j+3) < n; j += 4) - { - ptr_b_dup = ptr_b; - /*Shuffle to rearrange/transpose 8x4 block of B into contiguous row-wise registers*/ - - //read first set of 4x4 block of B into registers - mat_b_col[0] = _mm256_loadu_pd((double const *)ptr_b); - mat_b_col[1] = _mm256_loadu_pd((double const *)(ptr_b + (cs_b))); - //_mm_prefetch((char*)(ptr_l + cs_l), _MM_HINT_T0); - mat_b_col[2] = _mm256_loadu_pd((double const *)(ptr_b + cs_b_offset[0])); - //_mm_prefetch((char*)(ptr_l + row2), _MM_HINT_T0); - mat_b_col[3] = _mm256_loadu_pd((double const *)(ptr_b + cs_b_offset[1])); - - ////unpacklow//// - mat_b_rearr[1] = _mm256_unpacklo_pd(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[3] = _mm256_unpacklo_pd(mat_b_col[2], mat_b_col[3]); - - //rearrange low elements - mat_b_rearr[0] = _mm256_permute2f128_pd(mat_b_rearr[1],mat_b_rearr[3],0x20); - mat_b_rearr[2] = _mm256_permute2f128_pd(mat_b_rearr[1],mat_b_rearr[3],0x31); - - mat_b_rearr[0] = _mm256_mul_pd(mat_b_rearr[0], alphaReg); - mat_b_rearr[2] = _mm256_mul_pd(mat_b_rearr[2], alphaReg); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_pd(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_pd(mat_b_col[2], mat_b_col[3]); - - //rearrange high elements - mat_b_rearr[1] = _mm256_permute2f128_pd(mat_b_col[0],mat_b_col[1],0x20); - mat_b_rearr[3] = _mm256_permute2f128_pd(mat_b_col[0],mat_b_col[1],0x31); - - mat_b_rearr[1] = _mm256_mul_pd(mat_b_rearr[1], alphaReg); - mat_b_rearr[3] = _mm256_mul_pd(mat_b_rearr[3], alphaReg); - //extract a00 - mat_a_diag_inv[0] = _mm256_permute_pd(reciprocal_diags, 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_pd(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[0] = _mm256_mul_pd(mat_b_rearr[0], mat_a_diag_inv[0]); - - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_pd(reciprocal_diags, 0x03); - mat_a_diag_inv[1] = _mm256_permute2f128_pd(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (3, 0) - mat_b_rearr[1] = _mm256_fnmadd_pd(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_pd(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_pd(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[1] = _mm256_mul_pd(mat_b_rearr[1], mat_a_diag_inv[1]); - - - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_pd(reciprocal_diags, 0x00); - mat_a_diag_inv[2] = _mm256_permute2f128_pd(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x11); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_pd(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_pd(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[2] = _mm256_mul_pd(mat_b_rearr[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_pd(reciprocal_diags, 0x0C); - mat_a_diag_inv[3] = _mm256_permute2f128_pd(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x11); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_pd(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[3] = _mm256_mul_pd(mat_b_rearr[3], mat_a_diag_inv[3]); - - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[1] = _mm256_unpacklo_pd(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[3] = _mm256_unpacklo_pd(mat_b_rearr[2], mat_b_rearr[3]); - - //rearrange low elements - mat_a_cols[0] = _mm256_permute2f128_pd(mat_a_cols[1],mat_a_cols[3],0x20); - mat_a_cols[2] = _mm256_permute2f128_pd(mat_a_cols[1],mat_a_cols[3],0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_pd(mat_b_rearr[0], mat_b_rearr[1]); - - mat_b_rearr[1] = _mm256_unpackhi_pd(mat_b_rearr[2], mat_b_rearr[3]); - - //rearrange high elements - mat_a_cols[1] = _mm256_permute2f128_pd(mat_b_rearr[0],mat_b_rearr[1],0x20); - mat_a_cols[3] = _mm256_permute2f128_pd(mat_b_rearr[0],mat_b_rearr[1],0x31); - - //Read next set of B columns - ptr_b += (cs_b+cs_b_offset[1]); - _mm256_storeu_pd((double *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_pd((double *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_pd((double *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - _mm256_storeu_pd((double *)(ptr_b_dup + cs_b_offset[1]), mat_a_cols[3]); - - } - ptr_b_dup = ptr_b; - if(n_remainder == 3) - { - - //read first set of 4x4 block of B into registers - mat_b_col[0] = _mm256_loadu_pd((double const *)ptr_b); - mat_b_col[1] = _mm256_loadu_pd((double const *)(ptr_b + (cs_b))); - mat_b_col[2] = _mm256_loadu_pd((double const *)(ptr_b + cs_b_offset[0])); - mat_b_col[3] = _mm256_broadcast_sd((double const *)&ones); - } - if(n_remainder == 2) - { - //read first set of 4x4 block of B into registers - mat_b_col[0] = _mm256_loadu_pd((double const *)ptr_b); - mat_b_col[1] = _mm256_loadu_pd((double const *)(ptr_b + (cs_b))); - mat_b_col[2] = _mm256_broadcast_sd((double const *)&ones); - mat_b_col[3] = _mm256_broadcast_sd((double const *)&ones); - } - if(n_remainder == 1) - { - //read first set of 4x4 block of B into registers - mat_b_col[0] = _mm256_loadu_pd((double const *)ptr_b); - mat_b_col[1] = _mm256_broadcast_sd((double const *)&ones); - mat_b_col[2] = _mm256_broadcast_sd((double const *)&ones); - mat_b_col[3] = _mm256_broadcast_sd((double const *)&ones); - } - /*Shuffle to rearrange/transpose 8x4 block of B into contiguous row-wise registers*/ - ////unpacklow//// - mat_b_rearr[1] = _mm256_unpacklo_pd(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[3] = _mm256_unpacklo_pd(mat_b_col[2], mat_b_col[3]); - //rearrange low elements - mat_b_rearr[0] = _mm256_permute2f128_pd(mat_b_rearr[1],mat_b_rearr[3],0x20); - mat_b_rearr[2] = _mm256_permute2f128_pd(mat_b_rearr[1],mat_b_rearr[3],0x31); - mat_b_rearr[0] = _mm256_mul_pd(mat_b_rearr[0], alphaReg); - mat_b_rearr[2] = _mm256_mul_pd(mat_b_rearr[2], alphaReg); - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_pd(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_pd(mat_b_col[2], mat_b_col[3]); - //rearrange high elements - mat_b_rearr[1] = _mm256_permute2f128_pd(mat_b_col[0],mat_b_col[1],0x20); - mat_b_rearr[3] = _mm256_permute2f128_pd(mat_b_col[0],mat_b_col[1],0x31); - mat_b_rearr[1] = _mm256_mul_pd(mat_b_rearr[1], alphaReg); - mat_b_rearr[3] = _mm256_mul_pd(mat_b_rearr[3], alphaReg); - //extract a00 - mat_a_diag_inv[0] = _mm256_permute_pd(reciprocal_diags, 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_pd(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[0] = _mm256_mul_pd(mat_b_rearr[0], mat_a_diag_inv[0]); - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_pd(reciprocal_diags, 0x03); - mat_a_diag_inv[1] = _mm256_permute2f128_pd(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (3, 0) - mat_b_rearr[1] = _mm256_fnmadd_pd(mat_a_cols_rearr[1], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_pd(mat_a_cols_rearr[3], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_pd(mat_a_cols_rearr[6], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[1] = _mm256_mul_pd(mat_b_rearr[1], mat_a_diag_inv[1]); - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_pd(reciprocal_diags, 0x00); - mat_a_diag_inv[2] = _mm256_permute2f128_pd(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x11); - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_pd(mat_a_cols_rearr[4], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_pd(mat_a_cols_rearr[7], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[2] = _mm256_mul_pd(mat_b_rearr[2], mat_a_diag_inv[2]); - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_pd(reciprocal_diags, 0x0C); - mat_a_diag_inv[3] = _mm256_permute2f128_pd(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x11); - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_pd(mat_a_cols_rearr[8], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[3] = _mm256_mul_pd(mat_b_rearr[3], mat_a_diag_inv[3]); - //--> Transpose and store results of columns of B block <--// - ////unpacklow//// - mat_a_cols[1] = _mm256_unpacklo_pd(mat_b_rearr[0], mat_b_rearr[1]); - mat_a_cols[3] = _mm256_unpacklo_pd(mat_b_rearr[2], mat_b_rearr[3]); - //rearrange low elements - mat_a_cols[0] = _mm256_permute2f128_pd(mat_a_cols[1],mat_a_cols[3],0x20); - mat_a_cols[2] = _mm256_permute2f128_pd(mat_a_cols[1],mat_a_cols[3],0x31); - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_pd(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_pd(mat_b_rearr[2], mat_b_rearr[3]); - //rearrange high elements - mat_a_cols[1] = _mm256_permute2f128_pd(mat_b_rearr[0],mat_b_rearr[1],0x20); - mat_a_cols[3] = _mm256_permute2f128_pd(mat_b_rearr[0],mat_b_rearr[1],0x31); - //Store the computed B columns - if(n_remainder == 3) - { - _mm256_storeu_pd((double *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_pd((double *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - _mm256_storeu_pd((double *)(ptr_b_dup + cs_b_offset[0]), mat_a_cols[2]); - } - if(n_remainder == 2) - { - _mm256_storeu_pd((double *)ptr_b_dup, mat_a_cols[0]); - _mm256_storeu_pd((double *)(ptr_b_dup + (cs_b)), mat_a_cols[1]); - } - if(n_remainder == 1) - { - _mm256_storeu_pd((double *)ptr_b_dup, mat_a_cols[0]); - } - - //} - -} - -#if OPT_CACHE_BLOCKING_L1 //new intrinsic kernels -static void trsm_XAtB_block_allSmallSizedMatrices(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) -{ - float ones = 1.0; - int i, i1, i2, i3, i4, j, k, l, r; - int cs_b_offset[7]; - int cs_l_offset[7]; - float *ptr_b_dup, *ptr_l_dup; - - //57 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[8]; - __m256 mat_a_blk_elems[8]; - __m256 mat_a_diag_inv[8]; - __m256 reciprocal_diags[2]; - - reciprocal_diags[0] = _mm256_broadcast_ss((float const *)(&ones)); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //L matrix offsets - cs_l_offset[0] = (cs_l << 1); - cs_l_offset[1] = cs_l + cs_l_offset[0]; - cs_l_offset[2] = (cs_l << 2); - cs_l_offset[3] = cs_l + cs_l_offset[2]; - cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; - cs_l_offset[5] = cs_l + cs_l_offset[4]; - cs_l_offset[6] = (cs_l_offset[5] + cs_l); - - //read diag elems of L 16x16 block - mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_l); - mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)ptr_l + cs_l); - mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[0]); - mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[1]); - mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[2]); - mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[3]); - mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[4]); - mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[5]); - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - cs_b_offset[6] = (cs_b_offset[5] + cs_b); - - reciprocal_diags[1] = reciprocal_diags[0]; - - //pack first 8 diags together - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xAA);//diag 0,1 - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xAA);//diag 2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_blk_elems[4], mat_a_blk_elems[5], 0xAA);//diag 4,5 - mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_blk_elems[6], mat_a_blk_elems[7], 0xAA);//diag 6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 - - //reciprocal of diagnal elements 0,1,2,3,4,5,6,7 - reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_diag_inv[0], mat_a_diag_inv[0]); - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); - - - /***************** first set of 8 rows of B processing starts *****************/ - ptr_b_dup = ptr_b; - i = 0; - for (j = 0; j < numCols_b; j += 8) - { - /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A - //read 8x8 block of B into registers - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], mat_a_diag_inv[0]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_col[1]);//d = c - (a*b) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_col[2]);//d = c - (a*b) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], mat_a_diag_inv[1]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_col[2]);//d = c - (a*b) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], mat_a_diag_inv[2]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], mat_a_diag_inv[3]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], mat_a_diag_inv[4]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], mat_a_diag_inv[5]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], mat_a_diag_inv[6]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], mat_a_diag_inv[7]); - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); - - //i += cs_b_offset[6]; - //ptr_b_dup += cs_b_offset[6]; - i += 8; - ptr_b_dup += 8; - } - - //c = 0; - /***************** first set of 8 cols of B processing done *****************/ - ptr_b_dup = ptr_b; - i3 = 0; - i1 = 0; - //Start loop for cols of B to be processed in size of blk_width - for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row - { - ptr_l += 8; - //ptr_b += j; - //ptr_b_dup += 8; - ptr_b_dup += cs_b_offset[6]; - i1 += cs_b_offset[6]; - - //Read next 8x8 block of A to get diag elements - i3 += cs_l_offset[6]; - mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_l + i3); - mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l); - mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[0]); - mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[1]); - mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[2]); - mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[3]); - mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[4]); - mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[5]); - - //pack 8 diags of A together - reciprocal_diags[0] = reciprocal_diags[1]; - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xAA);//diag 0,1 - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xAA);//diag 2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_blk_elems[4], mat_a_blk_elems[5], 0xAA);//diag 4,5 - mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_blk_elems[6], mat_a_blk_elems[7], 0xAA);//diag 6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 - - //reciprocal of diagnal elements of A :- 0,1,2,3,4,5,6,7 - reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //mat_a_diag_inv2[0] = _mm256_unpacklo_ps(mat_a_diag_inv2[0], mat_a_diag_inv2[0]); - - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); - - for (r = 0; r < numCols_b; r += GEMM_BLK_V1) - { -#if GEMM_ACCUM_A - i = i1 + r; - //Read 8 cols of B columns of Block-to-be-solved - mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); -#endif - i = 0; - i2 = 0; - for (l = 0; l < j; l += 8) // move across m - { - //for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) - { - /////////////////// Partial Lower 8x8 block trsm of B - ptr_l_dup = ptr_l; - i4 = i2 + r; - //Read current 8 cols of B columns from specified 8x8 current-block of B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); - - //Broadcast A8,0 to A15,0 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - i4 = k >> 3; - ptr_l_dup += cs_l; - -#if GEMM_ACCUM_A - //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_mul_ps(mat_a_blk_elems[0], mat_b_col[0]); - mat_b_rearr[1] = _mm256_mul_ps(mat_a_blk_elems[1], mat_b_col[0]); - mat_b_rearr[2] = _mm256_mul_ps(mat_a_blk_elems[2], mat_b_col[0]); - mat_b_rearr[3] = _mm256_mul_ps(mat_a_blk_elems[3], mat_b_col[0]); - mat_b_rearr[4] = _mm256_mul_ps(mat_a_blk_elems[4], mat_b_col[0]); - mat_b_rearr[5] = _mm256_mul_ps(mat_a_blk_elems[5], mat_b_col[0]); - mat_b_rearr[6] = _mm256_mul_ps(mat_a_blk_elems[6], mat_b_col[0]); - mat_b_rearr[7] = _mm256_mul_ps(mat_a_blk_elems[7], mat_b_col[0]); -#endif - //Broadcast A21 to A71 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,2 to A15,2 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,3 to A15,3 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,4 to A15,4 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,5 to A15,5 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,6 to A15,6 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,7 to A15,7 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) -#endif - //end loop of cols - } - i2 += cs_b_offset[6]; - i += cs_l_offset[6]; - } - //trsm solve - - k = 0; - //for (i2 = 0; i2 < numCols_b; i2 += 8) - { - i2 = i1 + r; - /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A -#if !GEMM_ACCUM_A - //Read 8 cols of B columns of Block-to-be-solved - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i2); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i2)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i2)); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i2)); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i2)); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i2)); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i2)); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i2)); -#endif - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - -#if GEMM_ACCUM_A - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); -#else - mat_b_rearr[0] = _mm256_sub_ps(mat_b_col[0], mat_b_rearr[0]); - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); -#endif - -#if GEMM_ACCUM_A - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[1] = _mm256_sub_ps(mat_b_col[1], mat_b_rearr[1]); - mat_b_rearr[2] = _mm256_sub_ps(mat_b_col[2], mat_b_rearr[2]); - mat_b_rearr[3] = _mm256_sub_ps(mat_b_col[3], mat_b_rearr[3]); - mat_b_rearr[4] = _mm256_sub_ps(mat_b_col[4], mat_b_rearr[4]); - mat_b_rearr[5] = _mm256_sub_ps(mat_b_col[5], mat_b_rearr[5]); - mat_b_rearr[6] = _mm256_sub_ps(mat_b_col[6], mat_b_rearr[6]); - mat_b_rearr[7] = _mm256_sub_ps(mat_b_col[7], mat_b_rearr[7]); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A21 to A71 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A76 to register - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup + r, mat_b_rearr[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)+r), mat_b_rearr[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + r), mat_b_rearr[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + r), mat_b_rearr[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + r), mat_b_rearr[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + r), mat_b_rearr[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + r), mat_b_rearr[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + r), mat_b_rearr[7]); - //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); - k++; - } - } - } //numRows of A - ///////////////////loop ends ///////////////////// -} - -static void trsm_XAtB_block_allSmallSizedMatrices_alpha(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alpha) -{ - float ones = 1.0; - int i, i1, i2, i3, i4, j, k, l, r; - int cs_b_offset[7]; - int cs_l_offset[7]; - float *ptr_b_dup, *ptr_l_dup; - - //57 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[8]; - __m256 mat_a_blk_elems[8]; - __m256 mat_a_diag_inv[8]; - __m256 reciprocal_diags[2]; - __m256 alphaReg; - - reciprocal_diags[0] = _mm256_broadcast_ss((float const *)(&ones)); - alphaReg = _mm256_broadcast_ss((float const *)&alpha); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //L matrix offsets - cs_l_offset[0] = (cs_l << 1); - cs_l_offset[1] = cs_l + cs_l_offset[0]; - cs_l_offset[2] = (cs_l << 2); - cs_l_offset[3] = cs_l + cs_l_offset[2]; - cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; - cs_l_offset[5] = cs_l + cs_l_offset[4]; - cs_l_offset[6] = (cs_l_offset[5] + cs_l); - - //read diag elems of L 16x16 block - mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_l); - mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)ptr_l + cs_l); - mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[0]); - mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[1]); - mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[2]); - mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[3]); - mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[4]); - mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[5]); - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - cs_b_offset[6] = (cs_b_offset[5] + cs_b); - - reciprocal_diags[1] = reciprocal_diags[0]; - - //pack first 8 diags together - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xAA);//diag 0,1 - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xAA);//diag 2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_blk_elems[4], mat_a_blk_elems[5], 0xAA);//diag 4,5 - mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_blk_elems[6], mat_a_blk_elems[7], 0xAA);//diag 6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 - - //reciprocal of diagnal elements 0,1,2,3,4,5,6,7 - reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); -#if 0 - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); -#endif - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_diag_inv[0], mat_a_diag_inv[0]); - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); - - - /***************** first set of 8 rows of B processing starts *****************/ - ptr_b_dup = ptr_b; - i = 0; - for (j = 0; j < numCols_b; j += 8) - { - /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A - //read 8x8 block of B into registers - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], alphaReg); - mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], alphaReg); - mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], alphaReg); - mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], alphaReg); - mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], alphaReg); - mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], alphaReg); - mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], alphaReg); - mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], alphaReg); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], mat_a_diag_inv[0]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_col[1]);//d = c - (a*b) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_col[2]);//d = c - (a*b) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], mat_a_diag_inv[1]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_col[2]);//d = c - (a*b) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], mat_a_diag_inv[2]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], mat_a_diag_inv[3]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], mat_a_diag_inv[4]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], mat_a_diag_inv[5]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], mat_a_diag_inv[6]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], mat_a_diag_inv[7]); - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); - - //i += cs_b_offset[6]; - //ptr_b_dup += cs_b_offset[6]; - i += 8; - ptr_b_dup += 8; - } - - //c = 0; - /***************** first set of 8 cols of B processing done *****************/ - ptr_b_dup = ptr_b; - i3 = 0; - i1 = 0; - //Start loop for cols of B to be processed in size of blk_width - for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row - { - ptr_l += 8; - //ptr_b += j; - //ptr_b_dup += 8; - ptr_b_dup += cs_b_offset[6]; - i1 += cs_b_offset[6]; - - //Read next 8x8 block of A to get diag elements - i3 += cs_l_offset[6]; - mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_l + i3); - mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l); - mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[0]); - mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[1]); - mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[2]); - mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[3]); - mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[4]); - mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[5]); - - //pack 8 diags of A together - reciprocal_diags[0] = reciprocal_diags[1]; - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xAA);//diag 0,1 - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xAA);//diag 2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_blk_elems[4], mat_a_blk_elems[5], 0xAA);//diag 4,5 - mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_blk_elems[6], mat_a_blk_elems[7], 0xAA);//diag 6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 - - //reciprocal of diagnal elements of A :- 0,1,2,3,4,5,6,7 - reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //mat_a_diag_inv2[0] = _mm256_unpacklo_ps(mat_a_diag_inv2[0], mat_a_diag_inv2[0]); - - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); - - for (r = 0; r < numCols_b; r += GEMM_BLK_V1) - { -#if GEMM_ACCUM_A - i = i1 + r; - //Read 8 cols of B columns of Block-to-be-solved - mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); -#endif - i = 0; - i2 = 0; - for (l = 0; l < j; l += 8) // move across m - { - //for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) - { - /////////////////// Partial Lower 8x8 block trsm of B - ptr_l_dup = ptr_l; - i4 = i2 + r; - //Read current 8 cols of B columns from specified 8x8 current-block of B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); - - //Broadcast A8,0 to A15,0 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - i4 = k >> 3; - ptr_l_dup += cs_l; - -#if GEMM_ACCUM_A - //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_mul_ps(mat_a_blk_elems[0], mat_b_col[0]); - mat_b_rearr[1] = _mm256_mul_ps(mat_a_blk_elems[1], mat_b_col[0]); - mat_b_rearr[2] = _mm256_mul_ps(mat_a_blk_elems[2], mat_b_col[0]); - mat_b_rearr[3] = _mm256_mul_ps(mat_a_blk_elems[3], mat_b_col[0]); - mat_b_rearr[4] = _mm256_mul_ps(mat_a_blk_elems[4], mat_b_col[0]); - mat_b_rearr[5] = _mm256_mul_ps(mat_a_blk_elems[5], mat_b_col[0]); - mat_b_rearr[6] = _mm256_mul_ps(mat_a_blk_elems[6], mat_b_col[0]); - mat_b_rearr[7] = _mm256_mul_ps(mat_a_blk_elems[7], mat_b_col[0]); -#endif - //Broadcast A21 to A71 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,2 to A15,2 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,3 to A15,3 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,4 to A15,4 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,5 to A15,5 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,6 to A15,6 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,7 to A15,7 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) -#endif - //end loop of cols - } - i2 += cs_b_offset[6]; - i += cs_l_offset[6]; - } - //trsm solve - - k = 0; - //for (i2 = 0; i2 < numCols_b; i2 += 8) - { - i2 = i1 + r; - /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A -#if !GEMM_ACCUM_A - //Read 8 cols of B columns of Block-to-be-solved - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i2); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i2)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i2)); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i2)); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i2)); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i2)); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i2)); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i2)); - - mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], alphaReg); - mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], alphaReg); - mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], alphaReg); - mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], alphaReg); - mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], alphaReg); - mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], alphaReg); - mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], alphaReg); - mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], alphaReg); -#endif - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - -#if GEMM_ACCUM_A - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); -#else - mat_b_rearr[0] = _mm256_sub_ps(mat_b_col[0], mat_b_rearr[0]); - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); -#endif - -#if GEMM_ACCUM_A - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[1] = _mm256_sub_ps(mat_b_col[1], mat_b_rearr[1]); - mat_b_rearr[2] = _mm256_sub_ps(mat_b_col[2], mat_b_rearr[2]); - mat_b_rearr[3] = _mm256_sub_ps(mat_b_col[3], mat_b_rearr[3]); - mat_b_rearr[4] = _mm256_sub_ps(mat_b_col[4], mat_b_rearr[4]); - mat_b_rearr[5] = _mm256_sub_ps(mat_b_col[5], mat_b_rearr[5]); - mat_b_rearr[6] = _mm256_sub_ps(mat_b_col[6], mat_b_rearr[6]); - mat_b_rearr[7] = _mm256_sub_ps(mat_b_col[7], mat_b_rearr[7]); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A21 to A71 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A76 to register - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - - _mm256_storeu_ps((float *)ptr_b_dup + r, mat_b_rearr[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)+r), mat_b_rearr[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + r), mat_b_rearr[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + r), mat_b_rearr[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + r), mat_b_rearr[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + r), mat_b_rearr[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + r), mat_b_rearr[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + r), mat_b_rearr[7]); - //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); - k++; - } - } - } //numRows of A - ///////////////////loop ends ///////////////////// -} - -static void trsm_XAtB_block_allSmallSizedMatrices_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) -{ - //float ones = 1.0; - int i, i1, i2, i3, i4, j, k, l, r; - int cs_b_offset[7]; - int cs_l_offset[7]; - float *ptr_b_dup, *ptr_l_dup; - - //57 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[8]; - __m256 mat_a_blk_elems[8]; - //__m256 mat_a_diag_inv[8]; - //__m256 reciprocal_diags[2]; - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //L matrix offsets - cs_l_offset[0] = (cs_l << 1); - cs_l_offset[1] = cs_l + cs_l_offset[0]; - cs_l_offset[2] = (cs_l << 2); - cs_l_offset[3] = cs_l + cs_l_offset[2]; - cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; - cs_l_offset[5] = cs_l + cs_l_offset[4]; - cs_l_offset[6] = (cs_l_offset[5] + cs_l); - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - cs_b_offset[6] = (cs_b_offset[5] + cs_b); - - /***************** first set of 8 rows of B processing starts *****************/ - ptr_b_dup = ptr_b; - i = 0; - for (j = 0; j < numCols_b; j += 8) - { - /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A - //read 8x8 block of B into registers - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - //(Row0) - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_col[1]);//d = c - (a*b) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_col[2]);//d = c - (a*b) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_col[7]);//d = c - (a*b) - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_col[2]);//d = c - (a*b) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_col[7]);//d = c - (a*b) - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_col[7]);//d = c - (a*b) - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_col[7]);//d = c - (a*b) - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_col[7]);//d = c - (a*b) - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_col[7]);//d = c - (a*b) - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_col[7]);//d = c - (a*b) - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); - - //i += cs_b_offset[6]; - //ptr_b_dup += cs_b_offset[6]; - i += 8; - ptr_b_dup += 8; - } - - //c = 0; - /***************** first set of 8 cols of B processing done *****************/ - ptr_b_dup = ptr_b; - i3 = 0; - i1 = 0; - //Start loop for cols of B to be processed in size of blk_width - for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row - { - ptr_l += 8; - //ptr_b += j; - //ptr_b_dup += 8; - ptr_b_dup += cs_b_offset[6]; - i1 += cs_b_offset[6]; - i3 += cs_l_offset[6]; - - i = 0; - i2 = 0; - for (r = 0; r < numCols_b; r += GEMM_BLK_V1) - { -#if GEMM_ACCUM_A - i = i1 + r; - //Read 8 cols of B columns of Block-to-be-solved - mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); -#endif - i = 0; - i2 = 0; - for (l = 0; l < j; l += 8) // move across m - { - //for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) - { - /////////////////// Partial Lower 8x8 block trsm of B - ptr_l_dup = ptr_l; - i4 = i2 + r; - //Read current 8 cols of B columns from specified 8x8 current-block of B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); - - //Broadcast A8,0 to A15,0 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - i4 = k >> 3; - ptr_l_dup += cs_l; - -#if GEMM_ACCUM_A - //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_mul_ps(mat_a_blk_elems[0], mat_b_col[0]); - mat_b_rearr[1] = _mm256_mul_ps(mat_a_blk_elems[1], mat_b_col[0]); - mat_b_rearr[2] = _mm256_mul_ps(mat_a_blk_elems[2], mat_b_col[0]); - mat_b_rearr[3] = _mm256_mul_ps(mat_a_blk_elems[3], mat_b_col[0]); - mat_b_rearr[4] = _mm256_mul_ps(mat_a_blk_elems[4], mat_b_col[0]); - mat_b_rearr[5] = _mm256_mul_ps(mat_a_blk_elems[5], mat_b_col[0]); - mat_b_rearr[6] = _mm256_mul_ps(mat_a_blk_elems[6], mat_b_col[0]); - mat_b_rearr[7] = _mm256_mul_ps(mat_a_blk_elems[7], mat_b_col[0]); -#endif - //Broadcast A21 to A71 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,2 to A15,2 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,3 to A15,3 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,4 to A15,4 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,5 to A15,5 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,6 to A15,6 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,7 to A15,7 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) -#endif - //end loop of cols - } - i2 += cs_b_offset[6]; - i += cs_l_offset[6]; - } - //trsm solve - - k = 0; - //for (i2 = 0; i2 < numCols_b; i2 += 8) - { - i2 = i1 + r; - /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A -#if !GEMM_ACCUM_A - //Read 8 cols of B columns of Block-to-be-solved - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i2); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i2)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i2)); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i2)); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i2)); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i2)); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i2)); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i2)); -#endif - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - -#if GEMM_ACCUM_A - //(Row0): already done -#else - mat_b_rearr[0] = _mm256_sub_ps(mat_b_col[0], mat_b_rearr[0]); -#endif - -#if GEMM_ACCUM_A - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[1] = _mm256_sub_ps(mat_b_col[1], mat_b_rearr[1]); - mat_b_rearr[2] = _mm256_sub_ps(mat_b_col[2], mat_b_rearr[2]); - mat_b_rearr[3] = _mm256_sub_ps(mat_b_col[3], mat_b_rearr[3]); - mat_b_rearr[4] = _mm256_sub_ps(mat_b_col[4], mat_b_rearr[4]); - mat_b_rearr[5] = _mm256_sub_ps(mat_b_col[5], mat_b_rearr[5]); - mat_b_rearr[6] = _mm256_sub_ps(mat_b_col[6], mat_b_rearr[6]); - mat_b_rearr[7] = _mm256_sub_ps(mat_b_col[7], mat_b_rearr[7]); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A21 to A71 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A76 to register - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup + r, mat_b_rearr[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)+r), mat_b_rearr[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + r), mat_b_rearr[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + r), mat_b_rearr[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + r), mat_b_rearr[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + r), mat_b_rearr[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + r), mat_b_rearr[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + r), mat_b_rearr[7]); - //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); - k++; - } - } - } //numRows of A - ///////////////////loop ends ///////////////////// -} - -static void trsm_XAtB_block_allSmallSizedMatrices_alpha_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alpha) -{ - //float ones = 1.0; - int i, i1, i2, i3, i4, j, k, l, r; - int cs_b_offset[7]; - int cs_l_offset[7]; - float *ptr_b_dup, *ptr_l_dup; - - //57 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[8]; - __m256 mat_a_blk_elems[8]; - //__m256 mat_a_diag_inv[8]; - //__m256 reciprocal_diags[2]; - __m256 alphaReg; - alphaReg = _mm256_broadcast_ss((float const *)&alpha); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //L matrix offsets - cs_l_offset[0] = (cs_l << 1); - cs_l_offset[1] = cs_l + cs_l_offset[0]; - cs_l_offset[2] = (cs_l << 2); - cs_l_offset[3] = cs_l + cs_l_offset[2]; - cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; - cs_l_offset[5] = cs_l + cs_l_offset[4]; - cs_l_offset[6] = (cs_l_offset[5] + cs_l); - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - cs_b_offset[6] = (cs_b_offset[5] + cs_b); - -#if 0 - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); -#endif - - - /***************** first set of 8 rows of B processing starts *****************/ - ptr_b_dup = ptr_b; - i = 0; - for (j = 0; j < numCols_b; j += 8) - { - /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A - //read 8x8 block of B into registers - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], alphaReg); - mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], alphaReg); - mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], alphaReg); - mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], alphaReg); - mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], alphaReg); - mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], alphaReg); - mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], alphaReg); - mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], alphaReg); - - //(Row0) - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_col[1]);//d = c - (a*b) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_col[2]);//d = c - (a*b) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_col[7]);//d = c - (a*b) - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_col[2]);//d = c - (a*b) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_col[7]);//d = c - (a*b) - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_col[7]);//d = c - (a*b) - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_col[7]);//d = c - (a*b) - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_col[7]);//d = c - (a*b) - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_col[7]);//d = c - (a*b) - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_col[7]);//d = c - (a*b) - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); - - //i += cs_b_offset[6]; - //ptr_b_dup += cs_b_offset[6]; - i += 8; - ptr_b_dup += 8; - } - - //c = 0; - /***************** first set of 8 cols of B processing done *****************/ - ptr_b_dup = ptr_b; - i3 = 0; - i1 = 0; - //Start loop for cols of B to be processed in size of blk_width - for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row - { - ptr_l += 8; - //ptr_b += j; - //ptr_b_dup += 8; - ptr_b_dup += cs_b_offset[6]; - i1 += cs_b_offset[6]; - i3 += cs_l_offset[6]; - - i = 0; - i2 = 0; - for (r = 0; r < numCols_b; r += GEMM_BLK_V1) - { -#if GEMM_ACCUM_A - i = i1 + r; - //Read 8 cols of B columns of Block-to-be-solved - mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); -#endif - i = 0; - i2 = 0; - for (l = 0; l < j; l += 8) // move across m - { - //for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) - { - /////////////////// Partial Lower 8x8 block trsm of B - ptr_l_dup = ptr_l; - i4 = i2 + r; - //Read current 8 cols of B columns from specified 8x8 current-block of B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); - - //Broadcast A8,0 to A15,0 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - i4 = k >> 3; - ptr_l_dup += cs_l; - -#if GEMM_ACCUM_A - //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_mul_ps(mat_a_blk_elems[0], mat_b_col[0]); - mat_b_rearr[1] = _mm256_mul_ps(mat_a_blk_elems[1], mat_b_col[0]); - mat_b_rearr[2] = _mm256_mul_ps(mat_a_blk_elems[2], mat_b_col[0]); - mat_b_rearr[3] = _mm256_mul_ps(mat_a_blk_elems[3], mat_b_col[0]); - mat_b_rearr[4] = _mm256_mul_ps(mat_a_blk_elems[4], mat_b_col[0]); - mat_b_rearr[5] = _mm256_mul_ps(mat_a_blk_elems[5], mat_b_col[0]); - mat_b_rearr[6] = _mm256_mul_ps(mat_a_blk_elems[6], mat_b_col[0]); - mat_b_rearr[7] = _mm256_mul_ps(mat_a_blk_elems[7], mat_b_col[0]); -#endif - //Broadcast A21 to A71 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,2 to A15,2 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,3 to A15,3 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,4 to A15,4 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,5 to A15,5 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,6 to A15,6 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,7 to A15,7 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + i + 7)); - ptr_l_dup += cs_l; -#if GEMM_ACCUM_A - //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) -#endif - //end loop of cols - } - i2 += cs_b_offset[6]; - i += cs_l_offset[6]; - } - //trsm solve - - k = 0; - //for (i2 = 0; i2 < numCols_b; i2 += 8) - { - i2 = i1 + r; - /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A -#if !GEMM_ACCUM_A - //Read 8 cols of B columns of Block-to-be-solved - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i2); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i2)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i2)); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i2)); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i2)); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i2)); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i2)); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i2)); - - mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], alphaReg); - mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], alphaReg); - mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], alphaReg); - mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], alphaReg); - mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], alphaReg); - mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], alphaReg); - mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], alphaReg); - mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], alphaReg); -#endif - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - -#if GEMM_ACCUM_A - //(Row0): already done - -#else - mat_b_rearr[0] = _mm256_sub_ps(mat_b_col[0], mat_b_rearr[0]); -#endif - -#if GEMM_ACCUM_A - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[1] = _mm256_sub_ps(mat_b_col[1], mat_b_rearr[1]); - mat_b_rearr[2] = _mm256_sub_ps(mat_b_col[2], mat_b_rearr[2]); - mat_b_rearr[3] = _mm256_sub_ps(mat_b_col[3], mat_b_rearr[3]); - mat_b_rearr[4] = _mm256_sub_ps(mat_b_col[4], mat_b_rearr[4]); - mat_b_rearr[5] = _mm256_sub_ps(mat_b_col[5], mat_b_rearr[5]); - mat_b_rearr[6] = _mm256_sub_ps(mat_b_col[6], mat_b_rearr[6]); - mat_b_rearr[7] = _mm256_sub_ps(mat_b_col[7], mat_b_rearr[7]); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A21 to A71 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A76 to register - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup + r, mat_b_rearr[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)+r), mat_b_rearr[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + r), mat_b_rearr[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + r), mat_b_rearr[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + r), mat_b_rearr[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + r), mat_b_rearr[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + r), mat_b_rearr[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + r), mat_b_rearr[7]); - //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); - k++; - } - } - } //numRows of A - ///////////////////loop ends ///////////////////// -} -#else //rel 1.0 intrisic kernels (NOT OPT_CACHE_BLOCKING_L1) -static void trsm_XAtB_block_allSmallSizedMatrices(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) -{ - float ones = 1.0; - int i, i1, i2, i3, i4, j, k, l; - int cs_b_offset[7]; - int cs_l_offset[7]; - float *ptr_b_dup; - - //57 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[16][8]; - __m256 mat_a_cols_rearr[8]; - __m256 mat_a_blk_elems[64]; - __m256 mat_a_diag_inv[8]; - __m256 reciprocal_diags[2]; - - reciprocal_diags[0] = _mm256_broadcast_ss((float const *)(&ones)); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //L matrix offsets - cs_l_offset[0] = (cs_l << 1); - cs_l_offset[1] = cs_l + cs_l_offset[0]; - cs_l_offset[2] = (cs_l << 2); - cs_l_offset[3] = cs_l + cs_l_offset[2]; - cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; - cs_l_offset[5] = cs_l + cs_l_offset[4]; - cs_l_offset[6] = (cs_l_offset[5] + cs_l); - - //read diag elems of L 16x16 block - mat_a_cols_rearr[0] = _mm256_loadu_ps((float const *)ptr_l); - mat_a_cols_rearr[1] = _mm256_loadu_ps((float const *)ptr_l + cs_l); - mat_a_cols_rearr[2] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[0]); - mat_a_cols_rearr[3] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[1]); - mat_a_cols_rearr[4] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[2]); - mat_a_cols_rearr[5] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[3]); - mat_a_cols_rearr[6] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[4]); - mat_a_cols_rearr[7] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[5]); - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - cs_b_offset[6] = (cs_b_offset[5] + cs_b); - - reciprocal_diags[1] = reciprocal_diags[0]; - - //pack first 8 diags together - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[1], 0xAA);//diag 0,1 - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_cols_rearr[2], mat_a_cols_rearr[3], 0xAA);//diag 2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_cols_rearr[4], mat_a_cols_rearr[5], 0xAA);//diag 4,5 - mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_cols_rearr[6], mat_a_cols_rearr[7], 0xAA);//diag 6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 - - //reciprocal of diagnal elements 0,1,2,3,4,5,6,7 - reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); - - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_diag_inv[0], mat_a_diag_inv[0]); - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); - - - /***************** first set of 8 rows of B processing starts *****************/ - ptr_b_dup = ptr_b; - i = 0; - for (j = 0; j < numCols_b; j += 8) - { - /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A - //read 8x8 block of B into registers - mat_b_rearr[0][0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_col[0] = _mm256_mul_ps(mat_b_rearr[0][0], mat_a_diag_inv[0]); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[1][0]);//d = c - (a*b) - mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[2][0]);//d = c - (a*b) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_col[1] = _mm256_mul_ps(mat_b_rearr[1][0], mat_a_diag_inv[1]); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[2][0]);//d = c - (a*b) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_col[2] = _mm256_mul_ps(mat_b_rearr[2][0], mat_a_diag_inv[2]); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[2], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[2], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[2], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_col[3] = _mm256_mul_ps(mat_b_rearr[3][0], mat_a_diag_inv[3]); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[3], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[3], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[3], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[3], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_col[4] = _mm256_mul_ps(mat_b_rearr[4][0], mat_a_diag_inv[4]); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[4], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[4], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[4], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_col[5] = _mm256_mul_ps(mat_b_rearr[5][0], mat_a_diag_inv[5]); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[5], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[5], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_col[6] = _mm256_mul_ps(mat_b_rearr[6][0], mat_a_diag_inv[6]); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[6], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_col[7] = _mm256_mul_ps(mat_b_rearr[7][0], mat_a_diag_inv[7]); - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); - - //i += cs_b_offset[6]; - //ptr_b_dup += cs_b_offset[6]; - i += 8; - ptr_b_dup += 8; - } - - //c = 0; - /***************** first set of 8 cols of B processing done *****************/ - ptr_b_dup = ptr_b; - i3 = 0; - i1 = 0; - //Start loop for cols of B to be processed in size of blk_width - for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row - { - ptr_l += 8; - //ptr_b += j; - //ptr_b_dup += 8; - ptr_b_dup += cs_b_offset[6]; - i1 += cs_b_offset[6]; - - //Read next 8x8 block of A to get diag elements - i3 += cs_l_offset[6]; - mat_a_cols_rearr[0] = _mm256_loadu_ps((float const *)ptr_l + i3); - mat_a_cols_rearr[1] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l); - mat_a_cols_rearr[2] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[0]); - mat_a_cols_rearr[3] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[1]); - mat_a_cols_rearr[4] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[2]); - mat_a_cols_rearr[5] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[3]); - mat_a_cols_rearr[6] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[4]); - mat_a_cols_rearr[7] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[5]); - - //pack 8 diags of A together - reciprocal_diags[0] = reciprocal_diags[1]; - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[1], 0xAA);//diag 0,1 - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_cols_rearr[2], mat_a_cols_rearr[3], 0xAA);//diag 2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_cols_rearr[4], mat_a_cols_rearr[5], 0xAA);//diag 4,5 - mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_cols_rearr[6], mat_a_cols_rearr[7], 0xAA);//diag 6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 - - //reciprocal of diagnal elements of A :- 0,1,2,3,4,5,6,7 - reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); - - i = 0; - i2 = 0; - for (k = 0; k < numCols_b; k += 8) - { - i = i1 + k; - //Read 8 cols of B columns of Block-to-be-solved - mat_b_rearr[i2][0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[i2][1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[i2][2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[i2][3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[i2][4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[i2][5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[i2][6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[i2][7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - i2++; - } - - i = 0; - i2 = 0; - for (l = 0; l < j; l += 8) // move across m - { - //Broadcast A8,0 to A15,0 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 1)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 2)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 3)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 4)); - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 5)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 6)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 7)); - - //Broadcast A8,2 to A15,2 to registers - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 1)); - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 2)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 3)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 4)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 5)); - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 6)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 7)); - - //Broadcast A8,3 to A15,3 to registers - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i)); - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 1)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 2)); - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 3)); - mat_a_blk_elems[28] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 4)); - mat_a_blk_elems[29] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 5)); - mat_a_blk_elems[30] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 6)); - mat_a_blk_elems[31] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 7)); - - // _mm256_permute2f128_ps() - - //Broadcast A8,4 to A15,4 to registers - mat_a_blk_elems[32] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i)); - mat_a_blk_elems[33] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 1)); - mat_a_blk_elems[34] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 2)); - mat_a_blk_elems[35] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 3)); - mat_a_blk_elems[36] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 4)); - mat_a_blk_elems[37] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 5)); - mat_a_blk_elems[38] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 6)); - mat_a_blk_elems[39] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 7)); - - //Broadcast A8,5 to A15,5 to registers - mat_a_blk_elems[40] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i)); - mat_a_blk_elems[41] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 1)); - mat_a_blk_elems[42] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 2)); - mat_a_blk_elems[43] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 3)); - mat_a_blk_elems[44] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 4)); - mat_a_blk_elems[45] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 5)); - mat_a_blk_elems[46] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 6)); - mat_a_blk_elems[47] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 7)); - - //Broadcast A8,6 to A15,6 to registers - mat_a_blk_elems[48] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i)); - mat_a_blk_elems[49] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 1)); - mat_a_blk_elems[50] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 2)); - mat_a_blk_elems[51] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 3)); - mat_a_blk_elems[52] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 4)); - mat_a_blk_elems[53] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 5)); - mat_a_blk_elems[54] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 6)); - mat_a_blk_elems[55] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 7)); - - //Broadcast A8,7 to A15,7 to registers - mat_a_blk_elems[56] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i)); - mat_a_blk_elems[57] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 1)); - mat_a_blk_elems[58] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 2)); - mat_a_blk_elems[59] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 3)); - mat_a_blk_elems[60] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 4)); - mat_a_blk_elems[61] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 5)); - mat_a_blk_elems[62] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 6)); - mat_a_blk_elems[63] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 7)); - - i += cs_l_offset[6]; - - - for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) - { - /////////////////// Partial Lower 8x8 block trsm of B - - i4 = i2 + k; - //Read current 8 cols of B columns from specified 8x8 current-block of B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); - - i4 = k >> 3; - - //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[1], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[1], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[1], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[2], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[2], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[2], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[2], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[2], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[2], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[3], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[3], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[3], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[3], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[28], mat_b_col[3], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[29], mat_b_col[3], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[30], mat_b_col[3], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[31], mat_b_col[3], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[32], mat_b_col[4], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[33], mat_b_col[4], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[34], mat_b_col[4], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[35], mat_b_col[4], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[36], mat_b_col[4], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[37], mat_b_col[4], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[38], mat_b_col[4], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[39], mat_b_col[4], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[40], mat_b_col[5], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[41], mat_b_col[5], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[42], mat_b_col[5], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[43], mat_b_col[5], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[44], mat_b_col[5], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[45], mat_b_col[5], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[46], mat_b_col[5], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[47], mat_b_col[5], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[48], mat_b_col[6], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[49], mat_b_col[6], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[50], mat_b_col[6], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[51], mat_b_col[6], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[52], mat_b_col[6], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[53], mat_b_col[6], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[54], mat_b_col[6], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[55], mat_b_col[6], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[56], mat_b_col[7], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[57], mat_b_col[7], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[58], mat_b_col[7], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[59], mat_b_col[7], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[60], mat_b_col[7], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[61], mat_b_col[7], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[62], mat_b_col[7], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[63], mat_b_col[7], mat_b_rearr[i4][7]);//d = c - (a*b) - - //end loop of cols - } - i2 += cs_b_offset[6]; - } - - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //mat_a_diag_inv2[0] = _mm256_unpacklo_ps(mat_a_diag_inv2[0], mat_a_diag_inv2[0]); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); - - k = 0; - for (i = 0; i < numCols_b; i+=8) - { - /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[k][0] = _mm256_mul_ps(mat_b_rearr[k][0], mat_a_diag_inv[0]); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[k][1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[k][0], mat_b_rearr[k][1]);//d = c - (a*b) - mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[k][0], mat_b_rearr[k][2]);//d = c - (a*b) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[k][0], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[k][0], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[k][0], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[k][0], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[k][0], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[k][1] = _mm256_mul_ps(mat_b_rearr[k][1], mat_a_diag_inv[1]); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_rearr[k][1], mat_b_rearr[k][2]);//d = c - (a*b) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_rearr[k][1], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_rearr[k][1], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_rearr[k][1], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_rearr[k][1], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_rearr[k][1], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[k][2] = _mm256_mul_ps(mat_b_rearr[k][2], mat_a_diag_inv[2]); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_rearr[k][2], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_rearr[k][2], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_rearr[k][2], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_rearr[k][2], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_rearr[k][2], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[k][3] = _mm256_mul_ps(mat_b_rearr[k][3], mat_a_diag_inv[3]); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_rearr[k][3], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_rearr[k][3], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_rearr[k][3], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_rearr[k][3], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_rearr[k][4] = _mm256_mul_ps(mat_b_rearr[k][4], mat_a_diag_inv[4]); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_rearr[k][4], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_rearr[k][4], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_rearr[k][4], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_rearr[k][5] = _mm256_mul_ps(mat_b_rearr[k][5], mat_a_diag_inv[5]); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_rearr[k][5], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_rearr[k][5], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_rearr[k][6] = _mm256_mul_ps(mat_b_rearr[k][6], mat_a_diag_inv[6]); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_rearr[k][6], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_rearr[k][7] = _mm256_mul_ps(mat_b_rearr[k][7], mat_a_diag_inv[7]); - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - - _mm256_storeu_ps((float *)ptr_b_dup + i, mat_b_rearr[k][0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b) + i), mat_b_rearr[k][1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i), mat_b_rearr[k][2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i), mat_b_rearr[k][3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i), mat_b_rearr[k][4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i), mat_b_rearr[k][5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i), mat_b_rearr[k][6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i), mat_b_rearr[k][7]); - //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); - k++; - } - - - } - ///////////////////loop ends ///////////////////// -} - -static void trsm_XAtB_block_allSmallSizedMatrices_alpha(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alpha) -{ - float ones = 1.0; - int i, i1, i2, i3, i4, j, k, l; - int cs_b_offset[7]; - int cs_l_offset[7]; - float *ptr_b_dup; - - //57 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[16][8]; - __m256 mat_a_cols_rearr[8]; - __m256 mat_a_blk_elems[64]; - __m256 mat_a_diag_inv[8]; - __m256 reciprocal_diags[2]; - __m256 alphaReg; - - reciprocal_diags[0] = _mm256_broadcast_ss((float const *)(&ones)); - alphaReg = _mm256_broadcast_ss((float const *)&alpha); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //L matrix offsets - cs_l_offset[0] = (cs_l << 1); - cs_l_offset[1] = cs_l + cs_l_offset[0]; - cs_l_offset[2] = (cs_l << 2); - cs_l_offset[3] = cs_l + cs_l_offset[2]; - cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; - cs_l_offset[5] = cs_l + cs_l_offset[4]; - cs_l_offset[6] = (cs_l_offset[5] + cs_l); - - //read diag elems of L 16x16 block - mat_a_cols_rearr[0] = _mm256_loadu_ps((float const *)ptr_l); - mat_a_cols_rearr[1] = _mm256_loadu_ps((float const *)ptr_l + cs_l); - mat_a_cols_rearr[2] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[0]); - mat_a_cols_rearr[3] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[1]); - mat_a_cols_rearr[4] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[2]); - mat_a_cols_rearr[5] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[3]); - mat_a_cols_rearr[6] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[4]); - mat_a_cols_rearr[7] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[5]); - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - cs_b_offset[6] = (cs_b_offset[5] + cs_b); - - reciprocal_diags[1] = reciprocal_diags[0]; - - //pack first 8 diags together - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[1], 0xAA);//diag 0,1 - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_cols_rearr[2], mat_a_cols_rearr[3], 0xAA);//diag 2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_cols_rearr[4], mat_a_cols_rearr[5], 0xAA);//diag 4,5 - mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_cols_rearr[6], mat_a_cols_rearr[7], 0xAA);//diag 6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 - - //reciprocal of diagnal elements 0,1,2,3,4,5,6,7 - reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); - - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_diag_inv[0], mat_a_diag_inv[0]); - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); - - - /***************** first set of 8 rows of B processing starts *****************/ - ptr_b_dup = ptr_b; - i = 0; - for (j = 0; j < numCols_b; j += 8) - { - /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A - //read 8x8 block of B into registers - mat_b_rearr[0][0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - mat_b_rearr[0][0] = _mm256_mul_ps(mat_b_rearr[0][0], alphaReg); - mat_b_rearr[1][0] = _mm256_mul_ps(mat_b_rearr[1][0], alphaReg); - mat_b_rearr[2][0] = _mm256_mul_ps(mat_b_rearr[2][0], alphaReg); - mat_b_rearr[3][0] = _mm256_mul_ps(mat_b_rearr[3][0], alphaReg); - mat_b_rearr[4][0] = _mm256_mul_ps(mat_b_rearr[4][0], alphaReg); - mat_b_rearr[5][0] = _mm256_mul_ps(mat_b_rearr[5][0], alphaReg); - mat_b_rearr[6][0] = _mm256_mul_ps(mat_b_rearr[6][0], alphaReg); - mat_b_rearr[7][0] = _mm256_mul_ps(mat_b_rearr[7][0], alphaReg); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_col[0] = _mm256_mul_ps(mat_b_rearr[0][0], mat_a_diag_inv[0]); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[1][0]);//d = c - (a*b) - mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[2][0]);//d = c - (a*b) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_col[1] = _mm256_mul_ps(mat_b_rearr[1][0], mat_a_diag_inv[1]); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[2][0]);//d = c - (a*b) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_col[2] = _mm256_mul_ps(mat_b_rearr[2][0], mat_a_diag_inv[2]); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[2], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[2], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[2], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_col[3] = _mm256_mul_ps(mat_b_rearr[3][0], mat_a_diag_inv[3]); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[3], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[3], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[3], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[3], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_col[4] = _mm256_mul_ps(mat_b_rearr[4][0], mat_a_diag_inv[4]); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[4], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[4], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[4], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_col[5] = _mm256_mul_ps(mat_b_rearr[5][0], mat_a_diag_inv[5]); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[5], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[5], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_col[6] = _mm256_mul_ps(mat_b_rearr[6][0], mat_a_diag_inv[6]); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[6], mat_b_rearr[7][0]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_col[7] = _mm256_mul_ps(mat_b_rearr[7][0], mat_a_diag_inv[7]); - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); - - //i += cs_b_offset[6]; - //ptr_b_dup += cs_b_offset[6]; - i += 8; - ptr_b_dup += 8; - } - - //c = 0; - /***************** first set of 8 cols of B processing done *****************/ - ptr_b_dup = ptr_b; - i3 = 0; - i1 = 0; - //Start loop for cols of B to be processed in size of blk_width - for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row - { - ptr_l += 8; - //ptr_b += j; - //ptr_b_dup += 8; - ptr_b_dup += cs_b_offset[6]; - i1 += cs_b_offset[6]; - - //Read next 8x8 block of A to get diag elements - i3 += cs_l_offset[6]; - mat_a_cols_rearr[0] = _mm256_loadu_ps((float const *)ptr_l + i3); - mat_a_cols_rearr[1] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l); - mat_a_cols_rearr[2] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[0]); - mat_a_cols_rearr[3] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[1]); - mat_a_cols_rearr[4] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[2]); - mat_a_cols_rearr[5] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[3]); - mat_a_cols_rearr[6] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[4]); - mat_a_cols_rearr[7] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[5]); - - //pack 8 diags of A together - reciprocal_diags[0] = reciprocal_diags[1]; - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_cols_rearr[0], mat_a_cols_rearr[1], 0xAA);//diag 0,1 - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_cols_rearr[2], mat_a_cols_rearr[3], 0xAA);//diag 2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_cols_rearr[4], mat_a_cols_rearr[5], 0xAA);//diag 4,5 - mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_cols_rearr[6], mat_a_cols_rearr[7], 0xAA);//diag 6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 - - //reciprocal of diagnal elements of A :- 0,1,2,3,4,5,6,7 - reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); - - i = 0; - i2 = 0; - for (k = 0; k < numCols_b; k += 8) - { - i = i1 + k; - //Read 8 cols of B columns of Block-to-be-solved - mat_b_rearr[i2][0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[i2][1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[i2][2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[i2][3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[i2][4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[i2][5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[i2][6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[i2][7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - mat_b_rearr[i2][0] = _mm256_mul_ps(mat_b_rearr[i2][0], alphaReg); - mat_b_rearr[i2][1] = _mm256_mul_ps(mat_b_rearr[i2][1], alphaReg); - mat_b_rearr[i2][2] = _mm256_mul_ps(mat_b_rearr[i2][2], alphaReg); - mat_b_rearr[i2][3] = _mm256_mul_ps(mat_b_rearr[i2][3], alphaReg); - mat_b_rearr[i2][4] = _mm256_mul_ps(mat_b_rearr[i2][4], alphaReg); - mat_b_rearr[i2][5] = _mm256_mul_ps(mat_b_rearr[i2][5], alphaReg); - mat_b_rearr[i2][6] = _mm256_mul_ps(mat_b_rearr[i2][6], alphaReg); - mat_b_rearr[i2][7] = _mm256_mul_ps(mat_b_rearr[i2][7], alphaReg); - - i2++; - } - - i = 0; - i2 = 0; - for (l = 0; l < j; l += 8) // move across m - { - //Broadcast A8,0 to A15,0 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 1)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 2)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 3)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 4)); - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 5)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 6)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 7)); - - //Broadcast A8,2 to A15,2 to registers - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 1)); - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 2)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 3)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 4)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 5)); - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 6)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 7)); - - //Broadcast A8,3 to A15,3 to registers - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i)); - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 1)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 2)); - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 3)); - mat_a_blk_elems[28] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 4)); - mat_a_blk_elems[29] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 5)); - mat_a_blk_elems[30] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 6)); - mat_a_blk_elems[31] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 7)); - - // _mm256_permute2f128_ps() - - //Broadcast A8,4 to A15,4 to registers - mat_a_blk_elems[32] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i)); - mat_a_blk_elems[33] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 1)); - mat_a_blk_elems[34] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 2)); - mat_a_blk_elems[35] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 3)); - mat_a_blk_elems[36] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 4)); - mat_a_blk_elems[37] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 5)); - mat_a_blk_elems[38] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 6)); - mat_a_blk_elems[39] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 7)); - - //Broadcast A8,5 to A15,5 to registers - mat_a_blk_elems[40] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i)); - mat_a_blk_elems[41] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 1)); - mat_a_blk_elems[42] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 2)); - mat_a_blk_elems[43] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 3)); - mat_a_blk_elems[44] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 4)); - mat_a_blk_elems[45] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 5)); - mat_a_blk_elems[46] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 6)); - mat_a_blk_elems[47] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 7)); - - //Broadcast A8,6 to A15,6 to registers - mat_a_blk_elems[48] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i)); - mat_a_blk_elems[49] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 1)); - mat_a_blk_elems[50] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 2)); - mat_a_blk_elems[51] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 3)); - mat_a_blk_elems[52] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 4)); - mat_a_blk_elems[53] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 5)); - mat_a_blk_elems[54] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 6)); - mat_a_blk_elems[55] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 7)); - - //Broadcast A8,7 to A15,7 to registers - mat_a_blk_elems[56] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i)); - mat_a_blk_elems[57] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 1)); - mat_a_blk_elems[58] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 2)); - mat_a_blk_elems[59] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 3)); - mat_a_blk_elems[60] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 4)); - mat_a_blk_elems[61] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 5)); - mat_a_blk_elems[62] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 6)); - mat_a_blk_elems[63] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 7)); - - i += cs_l_offset[6]; - - - for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) - { - /////////////////// Partial Lower 8x8 block trsm of B - - i4 = i2 + k; - //Read current 8 cols of B columns from specified 8x8 current-block of B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); - - i4 = k >> 3; - - //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[1], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[1], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[1], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[2], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[2], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[2], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[2], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[2], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[2], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[3], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[3], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[3], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[3], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[28], mat_b_col[3], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[29], mat_b_col[3], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[30], mat_b_col[3], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[31], mat_b_col[3], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[32], mat_b_col[4], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[33], mat_b_col[4], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[34], mat_b_col[4], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[35], mat_b_col[4], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[36], mat_b_col[4], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[37], mat_b_col[4], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[38], mat_b_col[4], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[39], mat_b_col[4], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[40], mat_b_col[5], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[41], mat_b_col[5], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[42], mat_b_col[5], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[43], mat_b_col[5], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[44], mat_b_col[5], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[45], mat_b_col[5], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[46], mat_b_col[5], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[47], mat_b_col[5], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[48], mat_b_col[6], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[49], mat_b_col[6], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[50], mat_b_col[6], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[51], mat_b_col[6], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[52], mat_b_col[6], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[53], mat_b_col[6], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[54], mat_b_col[6], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[55], mat_b_col[6], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[56], mat_b_col[7], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[57], mat_b_col[7], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[58], mat_b_col[7], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[59], mat_b_col[7], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[60], mat_b_col[7], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[61], mat_b_col[7], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[62], mat_b_col[7], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[63], mat_b_col[7], mat_b_rearr[i4][7]);//d = c - (a*b) - - //end loop of cols - } - i2 += cs_b_offset[6]; - } - - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //mat_a_diag_inv2[0] = _mm256_unpacklo_ps(mat_a_diag_inv2[0], mat_a_diag_inv2[0]); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); - - k = 0; - for (i = 0; i < numCols_b; i+=8) - { - /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[k][0] = _mm256_mul_ps(mat_b_rearr[k][0], mat_a_diag_inv[0]); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[k][1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[k][0], mat_b_rearr[k][1]);//d = c - (a*b) - mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[k][0], mat_b_rearr[k][2]);//d = c - (a*b) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[k][0], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[k][0], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[k][0], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[k][0], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[k][0], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[k][1] = _mm256_mul_ps(mat_b_rearr[k][1], mat_a_diag_inv[1]); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_rearr[k][1], mat_b_rearr[k][2]);//d = c - (a*b) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_rearr[k][1], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_rearr[k][1], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_rearr[k][1], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_rearr[k][1], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_rearr[k][1], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[k][2] = _mm256_mul_ps(mat_b_rearr[k][2], mat_a_diag_inv[2]); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_rearr[k][2], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_rearr[k][2], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_rearr[k][2], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_rearr[k][2], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_rearr[k][2], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[k][3] = _mm256_mul_ps(mat_b_rearr[k][3], mat_a_diag_inv[3]); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_rearr[k][3], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_rearr[k][3], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_rearr[k][3], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_rearr[k][3], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_rearr[k][4] = _mm256_mul_ps(mat_b_rearr[k][4], mat_a_diag_inv[4]); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_rearr[k][4], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_rearr[k][4], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_rearr[k][4], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_rearr[k][5] = _mm256_mul_ps(mat_b_rearr[k][5], mat_a_diag_inv[5]); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_rearr[k][5], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_rearr[k][5], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_rearr[k][6] = _mm256_mul_ps(mat_b_rearr[k][6], mat_a_diag_inv[6]); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_rearr[k][6], mat_b_rearr[k][7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_rearr[k][7] = _mm256_mul_ps(mat_b_rearr[k][7], mat_a_diag_inv[7]); - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - - _mm256_storeu_ps((float *)ptr_b_dup + i, mat_b_rearr[k][0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b) + i), mat_b_rearr[k][1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i), mat_b_rearr[k][2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i), mat_b_rearr[k][3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i), mat_b_rearr[k][4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i), mat_b_rearr[k][5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i), mat_b_rearr[k][6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i), mat_b_rearr[k][7]); - k++; - } - - - } - ///////////////////loop ends ///////////////////// -} - -static void trsm_XAtB_block_allSmallSizedMatrices_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) -{ - //float ones = 1.0; - int i, i1, i2, i3, i4, j, k, l; - int cs_b_offset[7]; - int cs_l_offset[7]; - float *ptr_b_dup; - - //57 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[16][8]; - //__m256 mat_a_cols_rearr[8]; - __m256 mat_a_blk_elems[64]; - //__m256 mat_a_diag_inv[8]; - //__m256 reciprocal_diags[2]; - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //L matrix offsets - cs_l_offset[0] = (cs_l << 1); - cs_l_offset[1] = cs_l + cs_l_offset[0]; - cs_l_offset[2] = (cs_l << 2); - cs_l_offset[3] = cs_l + cs_l_offset[2]; - cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; - cs_l_offset[5] = cs_l + cs_l_offset[4]; - cs_l_offset[6] = (cs_l_offset[5] + cs_l); - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - cs_b_offset[6] = (cs_b_offset[5] + cs_b); - - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); - - - /***************** first set of 8 rows of B processing starts *****************/ - ptr_b_dup = ptr_b; - i = 0; - for (j = 0; j < numCols_b; j += 8) - { - /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A - //read 8x8 block of B into registers - mat_b_rearr[0][0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - //(Row0) - mat_b_col[0] = mat_b_rearr[0][0]; - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[1][0]);//d = c - (a*b) - mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[2][0]);//d = c - (a*b) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[2][0]);//d = c - (a*b) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[2], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[2], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[2], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[3], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[3], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[3], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[3], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[4], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[4], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[4], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[5], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[5], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[6], mat_b_rearr[7][0]);//d = c - (a*b) - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); - - //i += cs_b_offset[6]; - //ptr_b_dup += cs_b_offset[6]; - i += 8; - ptr_b_dup += 8; - } - - //c = 0; - /***************** first set of 8 cols of B processing done *****************/ - ptr_b_dup = ptr_b; - i3 = 0; - i1 = 0; - //Start loop for cols of B to be processed in size of blk_width - for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row - { - ptr_l += 8; - //ptr_b += j; - //ptr_b_dup += 8; - ptr_b_dup += cs_b_offset[6]; - i1 += cs_b_offset[6]; - i3 += cs_l_offset[6]; - - i = 0; - i2 = 0; - for (k = 0; k < numCols_b; k += 8) - { - i = i1 + k; - //Read 8 cols of B columns of Block-to-be-solved - mat_b_rearr[i2][0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[i2][1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[i2][2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[i2][3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[i2][4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[i2][5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[i2][6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[i2][7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - i2++; - } - - i = 0; - i2 = 0; - for (l = 0; l < j; l += 8) // move across m - { - //Broadcast A8,0 to A15,0 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 1)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 2)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 3)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 4)); - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 5)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 6)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 7)); - - //Broadcast A8,2 to A15,2 to registers - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 1)); - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 2)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 3)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 4)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 5)); - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 6)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 7)); - - //Broadcast A8,3 to A15,3 to registers - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i)); - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 1)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 2)); - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 3)); - mat_a_blk_elems[28] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 4)); - mat_a_blk_elems[29] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 5)); - mat_a_blk_elems[30] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 6)); - mat_a_blk_elems[31] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 7)); - - // _mm256_permute2f128_ps() - - //Broadcast A8,4 to A15,4 to registers - mat_a_blk_elems[32] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i)); - mat_a_blk_elems[33] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 1)); - mat_a_blk_elems[34] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 2)); - mat_a_blk_elems[35] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 3)); - mat_a_blk_elems[36] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 4)); - mat_a_blk_elems[37] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 5)); - mat_a_blk_elems[38] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 6)); - mat_a_blk_elems[39] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 7)); - - //Broadcast A8,5 to A15,5 to registers - mat_a_blk_elems[40] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i)); - mat_a_blk_elems[41] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 1)); - mat_a_blk_elems[42] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 2)); - mat_a_blk_elems[43] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 3)); - mat_a_blk_elems[44] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 4)); - mat_a_blk_elems[45] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 5)); - mat_a_blk_elems[46] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 6)); - mat_a_blk_elems[47] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 7)); - - //Broadcast A8,6 to A15,6 to registers - mat_a_blk_elems[48] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i)); - mat_a_blk_elems[49] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 1)); - mat_a_blk_elems[50] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 2)); - mat_a_blk_elems[51] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 3)); - mat_a_blk_elems[52] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 4)); - mat_a_blk_elems[53] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 5)); - mat_a_blk_elems[54] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 6)); - mat_a_blk_elems[55] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 7)); - - //Broadcast A8,7 to A15,7 to registers - mat_a_blk_elems[56] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i)); - mat_a_blk_elems[57] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 1)); - mat_a_blk_elems[58] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 2)); - mat_a_blk_elems[59] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 3)); - mat_a_blk_elems[60] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 4)); - mat_a_blk_elems[61] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 5)); - mat_a_blk_elems[62] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 6)); - mat_a_blk_elems[63] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 7)); - - i += cs_l_offset[6]; - - for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) - { - /////////////////// Partial Lower 8x8 block trsm of B - - i4 = i2 + k; - //Read current 8 cols of B columns from specified 8x8 current-block of B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); - - i4 = k >> 3; - - //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[1], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[1], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[1], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[2], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[2], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[2], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[2], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[2], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[2], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[3], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[3], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[3], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[3], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[28], mat_b_col[3], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[29], mat_b_col[3], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[30], mat_b_col[3], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[31], mat_b_col[3], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[32], mat_b_col[4], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[33], mat_b_col[4], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[34], mat_b_col[4], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[35], mat_b_col[4], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[36], mat_b_col[4], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[37], mat_b_col[4], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[38], mat_b_col[4], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[39], mat_b_col[4], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[40], mat_b_col[5], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[41], mat_b_col[5], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[42], mat_b_col[5], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[43], mat_b_col[5], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[44], mat_b_col[5], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[45], mat_b_col[5], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[46], mat_b_col[5], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[47], mat_b_col[5], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[48], mat_b_col[6], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[49], mat_b_col[6], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[50], mat_b_col[6], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[51], mat_b_col[6], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[52], mat_b_col[6], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[53], mat_b_col[6], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[54], mat_b_col[6], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[55], mat_b_col[6], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[56], mat_b_col[7], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[57], mat_b_col[7], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[58], mat_b_col[7], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[59], mat_b_col[7], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[60], mat_b_col[7], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[61], mat_b_col[7], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[62], mat_b_col[7], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[63], mat_b_col[7], mat_b_rearr[i4][7]);//d = c - (a*b) - - //end loop of cols - } - i2 += cs_b_offset[6]; - } - - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - - k = 0; - for (i = 0; i < numCols_b; i+=8) - { - /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A - - //(Row0): already done - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[k][1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[k][0], mat_b_rearr[k][1]);//d = c - (a*b) - mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[k][0], mat_b_rearr[k][2]);//d = c - (a*b) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[k][0], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[k][0], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[k][0], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[k][0], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[k][0], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_rearr[k][1], mat_b_rearr[k][2]);//d = c - (a*b) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_rearr[k][1], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_rearr[k][1], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_rearr[k][1], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_rearr[k][1], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_rearr[k][1], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_rearr[k][2], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_rearr[k][2], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_rearr[k][2], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_rearr[k][2], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_rearr[k][2], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_rearr[k][3], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_rearr[k][3], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_rearr[k][3], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_rearr[k][3], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_rearr[k][4], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_rearr[k][4], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_rearr[k][4], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_rearr[k][5], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_rearr[k][5], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_rearr[k][6], mat_b_rearr[k][7]);//d = c - (a*b) - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - - _mm256_storeu_ps((float *)ptr_b_dup + i, mat_b_rearr[k][0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b) + i), mat_b_rearr[k][1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i), mat_b_rearr[k][2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i), mat_b_rearr[k][3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i), mat_b_rearr[k][4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i), mat_b_rearr[k][5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i), mat_b_rearr[k][6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i), mat_b_rearr[k][7]); - //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); - k++; - } - - - } - ///////////////////loop ends ///////////////////// -} - -static void trsm_XAtB_block_allSmallSizedMatrices_alpha_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alpha) -{ - //float ones = 1.0; - int i, i1, i2, i3, i4, j, k, l; - int cs_b_offset[7]; - int cs_l_offset[7]; - float *ptr_b_dup; - - //57 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[16][8]; - //__m256 mat_a_cols_rearr[8]; - __m256 mat_a_blk_elems[64]; - //__m256 mat_a_diag_inv[8]; - //__m256 reciprocal_diags[2]; - __m256 alphaReg; - alphaReg = _mm256_broadcast_ss((float const *)&alpha); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //L matrix offsets - cs_l_offset[0] = (cs_l << 1); - cs_l_offset[1] = cs_l + cs_l_offset[0]; - cs_l_offset[2] = (cs_l << 2); - cs_l_offset[3] = cs_l + cs_l_offset[2]; - cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; - cs_l_offset[5] = cs_l + cs_l_offset[4]; - cs_l_offset[6] = (cs_l_offset[5] + cs_l); - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - cs_b_offset[6] = (cs_b_offset[5] + cs_b); - - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); - - - /***************** first set of 8 rows of B processing starts *****************/ - ptr_b_dup = ptr_b; - i = 0; - for (j = 0; j < numCols_b; j += 8) - { - /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A - //read 8x8 block of B into registers - mat_b_rearr[0][0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7][0] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - mat_b_rearr[0][0] = _mm256_mul_ps(mat_b_rearr[0][0], alphaReg); - mat_b_rearr[1][0] = _mm256_mul_ps(mat_b_rearr[1][0], alphaReg); - mat_b_rearr[2][0] = _mm256_mul_ps(mat_b_rearr[2][0], alphaReg); - mat_b_rearr[3][0] = _mm256_mul_ps(mat_b_rearr[3][0], alphaReg); - mat_b_rearr[4][0] = _mm256_mul_ps(mat_b_rearr[4][0], alphaReg); - mat_b_rearr[5][0] = _mm256_mul_ps(mat_b_rearr[5][0], alphaReg); - mat_b_rearr[6][0] = _mm256_mul_ps(mat_b_rearr[6][0], alphaReg); - mat_b_rearr[7][0] = _mm256_mul_ps(mat_b_rearr[7][0], alphaReg); - - //(Row0) - mat_b_col[0] = mat_b_rearr[0][0]; - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[1][0]);//d = c - (a*b) - mat_b_rearr[2][0] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[2][0]);//d = c - (a*b) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[2][0]);//d = c - (a*b) - mat_b_rearr[3][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[2], mat_b_rearr[3][0]);//d = c - (a*b) - mat_b_rearr[4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[2], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[2], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[3], mat_b_rearr[4][0]);//d = c - (a*b) - mat_b_rearr[5][0] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[3], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[3], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[3], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[4], mat_b_rearr[5][0]);//d = c - (a*b) - mat_b_rearr[6][0] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[4], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[4], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[5], mat_b_rearr[6][0]);//d = c - (a*b) - mat_b_rearr[7][0] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[5], mat_b_rearr[7][0]);//d = c - (a*b) - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[6], mat_b_rearr[7][0]);//d = c - (a*b) - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_b_col[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_col[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_col[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_col[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_col[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_col[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_col[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_col[7]); - - //i += cs_b_offset[6]; - //ptr_b_dup += cs_b_offset[6]; - i += 8; - ptr_b_dup += 8; - } - - //c = 0; - /***************** first set of 8 cols of B processing done *****************/ - ptr_b_dup = ptr_b; - i3 = 0; - i1 = 0; - //Start loop for cols of B to be processed in size of blk_width - for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row - { - ptr_l += 8; - //ptr_b += j; - //ptr_b_dup += 8; - ptr_b_dup += cs_b_offset[6]; - i1 += cs_b_offset[6]; - i3 += cs_l_offset[6]; - - i = 0; - i2 = 0; - for (k = 0; k < numCols_b; k += 8) - { - i = i1 + k; - //Read 8 cols of B columns of Block-to-be-solved - mat_b_rearr[i2][0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[i2][1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[i2][2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[i2][3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[i2][4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[i2][5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[i2][6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[i2][7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - mat_b_rearr[i2][0] = _mm256_mul_ps(mat_b_rearr[i2][0], alphaReg); - mat_b_rearr[i2][1] = _mm256_mul_ps(mat_b_rearr[i2][1], alphaReg); - mat_b_rearr[i2][2] = _mm256_mul_ps(mat_b_rearr[i2][2], alphaReg); - mat_b_rearr[i2][3] = _mm256_mul_ps(mat_b_rearr[i2][3], alphaReg); - mat_b_rearr[i2][4] = _mm256_mul_ps(mat_b_rearr[i2][4], alphaReg); - mat_b_rearr[i2][5] = _mm256_mul_ps(mat_b_rearr[i2][5], alphaReg); - mat_b_rearr[i2][6] = _mm256_mul_ps(mat_b_rearr[i2][6], alphaReg); - mat_b_rearr[i2][7] = _mm256_mul_ps(mat_b_rearr[i2][7], alphaReg); - - i2++; - } - - i = 0; - i2 = 0; - for (l = 0; l < j; l += 8) // move across m - { - //Broadcast A8,0 to A15,0 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 1)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 2)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 3)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 4)); - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 5)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 6)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + i + 7)); - - //Broadcast A8,2 to A15,2 to registers - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 1)); - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 2)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 3)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 4)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 5)); - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 6)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + i + 7)); - - //Broadcast A8,3 to A15,3 to registers - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i)); - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 1)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 2)); - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 3)); - mat_a_blk_elems[28] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 4)); - mat_a_blk_elems[29] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 5)); - mat_a_blk_elems[30] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 6)); - mat_a_blk_elems[31] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + i + 7)); - - // _mm256_permute2f128_ps() - - //Broadcast A8,4 to A15,4 to registers - mat_a_blk_elems[32] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i)); - mat_a_blk_elems[33] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 1)); - mat_a_blk_elems[34] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 2)); - mat_a_blk_elems[35] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 3)); - mat_a_blk_elems[36] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 4)); - mat_a_blk_elems[37] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 5)); - mat_a_blk_elems[38] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 6)); - mat_a_blk_elems[39] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + i + 7)); - - //Broadcast A8,5 to A15,5 to registers - mat_a_blk_elems[40] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i)); - mat_a_blk_elems[41] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 1)); - mat_a_blk_elems[42] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 2)); - mat_a_blk_elems[43] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 3)); - mat_a_blk_elems[44] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 4)); - mat_a_blk_elems[45] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 5)); - mat_a_blk_elems[46] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 6)); - mat_a_blk_elems[47] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + i + 7)); - - //Broadcast A8,6 to A15,6 to registers - mat_a_blk_elems[48] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i)); - mat_a_blk_elems[49] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 1)); - mat_a_blk_elems[50] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 2)); - mat_a_blk_elems[51] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 3)); - mat_a_blk_elems[52] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 4)); - mat_a_blk_elems[53] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 5)); - mat_a_blk_elems[54] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 6)); - mat_a_blk_elems[55] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + i + 7)); - - //Broadcast A8,7 to A15,7 to registers - mat_a_blk_elems[56] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i)); - mat_a_blk_elems[57] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 1)); - mat_a_blk_elems[58] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 2)); - mat_a_blk_elems[59] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 3)); - mat_a_blk_elems[60] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 4)); - mat_a_blk_elems[61] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 5)); - mat_a_blk_elems[62] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 6)); - mat_a_blk_elems[63] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5] + i + 7)); - - i += cs_l_offset[6]; - - for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) - { - /////////////////// Partial Lower 8x8 block trsm of B - - i4 = i2 + k; - //Read current 8 cols of B columns from specified 8x8 current-block of B - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i4); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); - - i4 = k >> 3; - - //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_col[1], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_col[1], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_col[1], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_col[1], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_col[1], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_col[1], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_col[1], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_col[1], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_col[2], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_col[2], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_col[2], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_col[2], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_col[2], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_col[2], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_col[2], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_col[2], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_col[3], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_col[3], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_col[3], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_col[3], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[28], mat_b_col[3], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[29], mat_b_col[3], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[30], mat_b_col[3], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[31], mat_b_col[3], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[32], mat_b_col[4], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[33], mat_b_col[4], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[34], mat_b_col[4], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[35], mat_b_col[4], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[36], mat_b_col[4], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[37], mat_b_col[4], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[38], mat_b_col[4], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[39], mat_b_col[4], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[40], mat_b_col[5], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[41], mat_b_col[5], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[42], mat_b_col[5], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[43], mat_b_col[5], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[44], mat_b_col[5], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[45], mat_b_col[5], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[46], mat_b_col[5], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[47], mat_b_col[5], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[48], mat_b_col[6], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[49], mat_b_col[6], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[50], mat_b_col[6], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[51], mat_b_col[6], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[52], mat_b_col[6], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[53], mat_b_col[6], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[54], mat_b_col[6], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[55], mat_b_col[6], mat_b_rearr[i4][7]);//d = c - (a*b) - - //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[i4][0] = _mm256_fnmadd_ps(mat_a_blk_elems[56], mat_b_col[7], mat_b_rearr[i4][0]);//d = c - (a*b) - mat_b_rearr[i4][1] = _mm256_fnmadd_ps(mat_a_blk_elems[57], mat_b_col[7], mat_b_rearr[i4][1]);//d = c - (a*b) - mat_b_rearr[i4][2] = _mm256_fnmadd_ps(mat_a_blk_elems[58], mat_b_col[7], mat_b_rearr[i4][2]);//d = c - (a*b) - mat_b_rearr[i4][3] = _mm256_fnmadd_ps(mat_a_blk_elems[59], mat_b_col[7], mat_b_rearr[i4][3]);//d = c - (a*b) - mat_b_rearr[i4][4] = _mm256_fnmadd_ps(mat_a_blk_elems[60], mat_b_col[7], mat_b_rearr[i4][4]);//d = c - (a*b) - mat_b_rearr[i4][5] = _mm256_fnmadd_ps(mat_a_blk_elems[61], mat_b_col[7], mat_b_rearr[i4][5]);//d = c - (a*b) - mat_b_rearr[i4][6] = _mm256_fnmadd_ps(mat_a_blk_elems[62], mat_b_col[7], mat_b_rearr[i4][6]);//d = c - (a*b) - mat_b_rearr[i4][7] = _mm256_fnmadd_ps(mat_a_blk_elems[63], mat_b_col[7], mat_b_rearr[i4][7]);//d = c - (a*b) - - //end loop of cols - } - i2 += cs_b_offset[6]; - } - - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + i + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + i + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + i + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + i + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + i + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + i + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - i += cs_l; - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + i + 7)); - - k = 0; - for (i = 0; i < numCols_b; i+=8) - { - /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A - - //(Row0): already done - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[k][1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[k][0], mat_b_rearr[k][1]);//d = c - (a*b) - mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[k][0], mat_b_rearr[k][2]);//d = c - (a*b) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[k][0], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[k][0], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[k][0], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[k][0], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[k][0], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[k][2] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_rearr[k][1], mat_b_rearr[k][2]);//d = c - (a*b) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[8], mat_b_rearr[k][1], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[9], mat_b_rearr[k][1], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[10], mat_b_rearr[k][1], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[11], mat_b_rearr[k][1], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[12], mat_b_rearr[k][1], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[k][3] = _mm256_fnmadd_ps(mat_a_blk_elems[13], mat_b_rearr[k][2], mat_b_rearr[k][3]);//d = c - (a*b) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[14], mat_b_rearr[k][2], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[15], mat_b_rearr[k][2], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[16], mat_b_rearr[k][2], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[17], mat_b_rearr[k][2], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[k][4] = _mm256_fnmadd_ps(mat_a_blk_elems[18], mat_b_rearr[k][3], mat_b_rearr[k][4]);//d = c - (a*b) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[19], mat_b_rearr[k][3], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[20], mat_b_rearr[k][3], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[21], mat_b_rearr[k][3], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[k][5] = _mm256_fnmadd_ps(mat_a_blk_elems[22], mat_b_rearr[k][4], mat_b_rearr[k][5]);//d = c - (a*b) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[23], mat_b_rearr[k][4], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[24], mat_b_rearr[k][4], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[k][6] = _mm256_fnmadd_ps(mat_a_blk_elems[25], mat_b_rearr[k][5], mat_b_rearr[k][6]);//d = c - (a*b) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[26], mat_b_rearr[k][5], mat_b_rearr[k][7]);//d = c - (a*b) - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[k][7] = _mm256_fnmadd_ps(mat_a_blk_elems[27], mat_b_rearr[k][6], mat_b_rearr[k][7]);//d = c - (a*b) - - //////////////////////////////////////////////////////////////////////////////// - - //Store the computed B columns - - _mm256_storeu_ps((float *)ptr_b_dup + i, mat_b_rearr[k][0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b) + i), mat_b_rearr[k][1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i), mat_b_rearr[k][2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i), mat_b_rearr[k][3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i), mat_b_rearr[k][4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i), mat_b_rearr[k][5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i), mat_b_rearr[k][6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i), mat_b_rearr[k][7]); - //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); - k++; - } - - - } - ///////////////////loop ends ///////////////////// -} -#endif //OPT_CACHE_BLOCKING_L1 - -//////////////////////////// AutX=B /////////////////////// -static void trsm_AutXB_block_allSmallSizedMatrices(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) -{ - float ones = 1.0; - int i, i1, i2, i3, i4, j, k, l, r; - int cs_b_offset[7]; - int cs_l_offset[7]; - float *ptr_b_dup, *ptr_l_dup; - - //57 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[8]; - __m256 mat_a_blk_elems[8]; - __m256 mat_a_diag_inv[8]; - __m256 reciprocal_diags[2]; - - reciprocal_diags[0] = _mm256_broadcast_ss((float const *)(&ones)); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //L matrix offsets - cs_l_offset[0] = (cs_l << 1); - cs_l_offset[1] = cs_l + cs_l_offset[0]; - cs_l_offset[2] = (cs_l << 2); - cs_l_offset[3] = cs_l + cs_l_offset[2]; - cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; - cs_l_offset[5] = cs_l + cs_l_offset[4]; - cs_l_offset[6] = (cs_l_offset[5] + cs_l); - - //read diag elems of L 16x16 block - mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_l); - mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)ptr_l + cs_l); - mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[0]); - mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[1]); - mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[2]); - mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[3]); - mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[4]); - mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[5]); - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - cs_b_offset[6] = (cs_b_offset[5] + cs_b); - - reciprocal_diags[1] = reciprocal_diags[0]; - - //pack first 8 diags together - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xAA);//diag 0,1 - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xAA);//diag 2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_blk_elems[4], mat_a_blk_elems[5], 0xAA);//diag 4,5 - mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_blk_elems[6], mat_a_blk_elems[7], 0xAA);//diag 6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 - - //reciprocal of diagnal elements 0,1,2,3,4,5,6,7 - reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); -#if 0 - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); -#endif - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_diag_inv[0], mat_a_diag_inv[0]); - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); - - - /***************** first set of 8 rows of B processing starts *****************/ - ptr_b_dup = ptr_b; - i = 0; - for (j = 0; j < numCols_b; j += 8) - { - /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A - //read 8x8 block of B into registers - mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - /* transpose steps start */ - ////unpacklow//// - mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - /* transpose steps end */ - - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], mat_a_diag_inv[0]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5])); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_col[1]);//d = c - (a*b) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_col[2]);//d = c - (a*b) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], mat_a_diag_inv[1]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[0])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[1])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[2])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[3])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[4])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[5])); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_col[2]);//d = c - (a*b) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], mat_a_diag_inv[2]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[1])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[2])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[3])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[4])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[5])); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], mat_a_diag_inv[3]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[2])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[3])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[4])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[5])); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], mat_a_diag_inv[4]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[3])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[4])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[5])); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], mat_a_diag_inv[5]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 5 + cs_l_offset[4])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 5 + cs_l_offset[5])); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], mat_a_diag_inv[6]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 6 + cs_l_offset[5])); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], mat_a_diag_inv[7]); - - //////////////////////////////////////////////////////////////////////////////// - - /* transpose steps start */ - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - /* transpose steps end */ - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_b_rearr[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_rearr[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_rearr[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_rearr[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_rearr[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_rearr[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_rearr[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_rearr[7]); - - i += cs_b_offset[6]; - ptr_b_dup += cs_b_offset[6]; - //i += 8; - //ptr_b_dup += 8; - } - - //c = 0; - /***************** first set of 8 cols of B processing done *****************/ - ptr_b_dup = ptr_b; - i3 = 0; - i1 = 0; - //Start loop for cols of B to be processed in size of blk_width - for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row - { - ptr_l += cs_l_offset[6]; - - //Read next 8x8 block of A to get diag elements - i3 += 8; - mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_l + i3); - mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l); - mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[0]); - mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[1]); - mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[2]); - mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[3]); - mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[4]); - mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[5]); - - //pack 8 diags of A together - reciprocal_diags[0] = reciprocal_diags[1]; - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xAA);//diag 0,1 - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xAA);//diag 2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_blk_elems[4], mat_a_blk_elems[5], 0xAA);//diag 4,5 - mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_blk_elems[6], mat_a_blk_elems[7], 0xAA);//diag 6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 - - //reciprocal of diagnal elements of A :- 0,1,2,3,4,5,6,7 - reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); - - //ptr_b += j; - //ptr_b_dup += 8; - ptr_b_dup += 8; - i1 += 8; - i = i1; - i2 = 0; - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //mat_a_diag_inv2[0] = _mm256_unpacklo_ps(mat_a_diag_inv2[0], mat_a_diag_inv2[0]); - - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); - - for (r = 0; r < numCols_b; r += GEMM_BLK_V1) - { -#if GEMM_ACCUM_A - //Read 8 cols of B columns of Block-to-be-solved - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - /* transpose steps start */ - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - /* transpose steps end */ -#endif - //i = 0; - ptr_l_dup = ptr_l; - i4 = i2; - for (l = 0; l < j; l += 8) // move across m - { - //for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) - //{ - /////////////////// Partial Lower 8x8 block trsm of B - //Read current 8 cols of B columns from specified 8x8 current-block of B - mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_b + i4); - mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); - mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); - mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); - mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); - mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); - mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); - mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); - - /* transpose steps start */ - ////unpacklow//// - mat_b_col[0] = _mm256_unpacklo_ps(mat_a_blk_elems[0], mat_a_blk_elems[1]); - mat_b_col[1] = _mm256_unpacklo_ps(mat_a_blk_elems[2], mat_a_blk_elems[3]); - mat_b_col[2] = _mm256_unpacklo_ps(mat_a_blk_elems[4], mat_a_blk_elems[5]); - mat_b_col[3] = _mm256_unpacklo_ps(mat_a_blk_elems[6], mat_a_blk_elems[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - ////unpackhigh//// - mat_a_blk_elems[0] = _mm256_unpackhi_ps(mat_a_blk_elems[0], mat_a_blk_elems[1]); - mat_a_blk_elems[1] = _mm256_unpackhi_ps(mat_a_blk_elems[2], mat_a_blk_elems[3]); - mat_a_blk_elems[2] = _mm256_unpackhi_ps(mat_a_blk_elems[4], mat_a_blk_elems[5]); - mat_a_blk_elems[3] = _mm256_unpackhi_ps(mat_a_blk_elems[6], mat_a_blk_elems[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_a_blk_elems[4] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0x44); - mat_a_blk_elems[5] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xEE); - mat_a_blk_elems[6] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0x44); - mat_a_blk_elems[7] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xEE); -#else - mat_a_blk_elems[6] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0x4E); - mat_a_blk_elems[7] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0x4E); - mat_a_blk_elems[4] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[6], 0xCC); - mat_a_blk_elems[5] = _mm256_blend_ps(mat_a_blk_elems[1], mat_a_blk_elems[6], 0x33); - mat_a_blk_elems[6] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[7], 0xCC); - mat_a_blk_elems[7] = _mm256_blend_ps(mat_a_blk_elems[3], mat_a_blk_elems[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_col[2] = _mm256_permute2f128_ps(mat_a_blk_elems[4], mat_a_blk_elems[6], 0x20); - mat_b_col[6] = _mm256_permute2f128_ps(mat_a_blk_elems[4], mat_a_blk_elems[6], 0x31); - mat_b_col[3] = _mm256_permute2f128_ps(mat_a_blk_elems[5], mat_a_blk_elems[7], 0x20); - mat_b_col[7] = _mm256_permute2f128_ps(mat_a_blk_elems[5], mat_a_blk_elems[7], 0x31); - /* transpose steps end */ - - //Broadcast A8,0 to A15,0 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - //i4 = k >> 3; - ptr_l_dup++; - -#if GEMM_ACCUM_A - //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_mul_ps(mat_a_blk_elems[0], mat_b_col[0]); - mat_b_rearr[1] = _mm256_mul_ps(mat_a_blk_elems[1], mat_b_col[0]); - mat_b_rearr[2] = _mm256_mul_ps(mat_a_blk_elems[2], mat_b_col[0]); - mat_b_rearr[3] = _mm256_mul_ps(mat_a_blk_elems[3], mat_b_col[0]); - mat_b_rearr[4] = _mm256_mul_ps(mat_a_blk_elems[4], mat_b_col[0]); - mat_b_rearr[5] = _mm256_mul_ps(mat_a_blk_elems[5], mat_b_col[0]); - mat_b_rearr[6] = _mm256_mul_ps(mat_a_blk_elems[6], mat_b_col[0]); - mat_b_rearr[7] = _mm256_mul_ps(mat_a_blk_elems[7], mat_b_col[0]); -#endif - //Broadcast A21 to A71 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,2 to A15,2 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,3 to A15,3 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,4 to A15,4 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,5 to A15,5 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,6 to A15,6 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,7 to A15,7 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) -#endif - //end loop of cols - //} - //i2 += cs_b_offset[6]; - i4 += 8; - } - //trsm solve - - k = 0; - //for (i2 = 0; i2 < numCols_b; i2 += 8) - //{ - //i2 = i1 + r; - /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A -#if !GEMM_ACCUM_A - //Read 8 cols of B columns of Block-to-be-solved - mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - /* transpose steps start */ - ////unpacklow//// - mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - /* transpose steps end */ -#endif - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - //i += cs_l; - -#if GEMM_ACCUM_A - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); -#else - mat_b_rearr[0] = _mm256_sub_ps(mat_b_col[0], mat_b_rearr[0]); - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); -#endif - -#if GEMM_ACCUM_A - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[1] = _mm256_sub_ps(mat_b_col[1], mat_b_rearr[1]); - mat_b_rearr[2] = _mm256_sub_ps(mat_b_col[2], mat_b_rearr[2]); - mat_b_rearr[3] = _mm256_sub_ps(mat_b_col[3], mat_b_rearr[3]); - mat_b_rearr[4] = _mm256_sub_ps(mat_b_col[4], mat_b_rearr[4]); - mat_b_rearr[5] = _mm256_sub_ps(mat_b_col[5], mat_b_rearr[5]); - mat_b_rearr[6] = _mm256_sub_ps(mat_b_col[6], mat_b_rearr[6]); - mat_b_rearr[7] = _mm256_sub_ps(mat_b_col[7], mat_b_rearr[7]); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A21 to A71 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[0])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[1])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[2])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[3])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[4])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[5])); - //i += cs_l; - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[1])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[2])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[3])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[4])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[5])); - //i += cs_l; - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[2])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[3])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[4])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[5])); - //i += cs_l; - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[3])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[4])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[5])); - //i += cs_l; - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 5 + cs_l_offset[4])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 5 + cs_l_offset[5])); - //i += cs_l; - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A76 to register - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 6 + cs_l_offset[5])); - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //////////////////////////////////////////////////////////////////////////////// - - /* transpose steps start */ - ////unpacklow//// - mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - /* transpose steps end */ - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup + i2, mat_b_col[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)+i2), mat_b_col[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i2), mat_b_col[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i2), mat_b_col[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i2), mat_b_col[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i2), mat_b_col[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i2), mat_b_col[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i2), mat_b_col[7]); - //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); - k++; - //} - i += cs_b_offset[6]; - i2 += cs_b_offset[6]; - } - } //numRows of A - ///////////////////loop ends ///////////////////// -} - -static void trsm_AutXB_block_allSmallSizedMatrices_alpha(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alpha) -{ - float ones = 1.0; - int i, i1, i2, i3, i4, j, k, l, r; - int cs_b_offset[7]; - int cs_l_offset[7]; - float *ptr_b_dup, *ptr_l_dup; - - //57 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[8]; - __m256 mat_a_blk_elems[8]; - __m256 mat_a_diag_inv[8]; - __m256 reciprocal_diags[2]; - __m256 alphaReg; - - reciprocal_diags[0] = _mm256_broadcast_ss((float const *)(&ones)); - alphaReg = _mm256_broadcast_ss((float const *)&alpha); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //L matrix offsets - cs_l_offset[0] = (cs_l << 1); - cs_l_offset[1] = cs_l + cs_l_offset[0]; - cs_l_offset[2] = (cs_l << 2); - cs_l_offset[3] = cs_l + cs_l_offset[2]; - cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; - cs_l_offset[5] = cs_l + cs_l_offset[4]; - cs_l_offset[6] = (cs_l_offset[5] + cs_l); - - //read diag elems of L 16x16 block - mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_l); - mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)ptr_l + cs_l); - mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[0]); - mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[1]); - mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[2]); - mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[3]); - mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[4]); - mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)ptr_l + cs_l_offset[5]); - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - cs_b_offset[6] = (cs_b_offset[5] + cs_b); - - reciprocal_diags[1] = reciprocal_diags[0]; - - //pack first 8 diags together - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xAA);//diag 0,1 - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xAA);//diag 2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_blk_elems[4], mat_a_blk_elems[5], 0xAA);//diag 4,5 - mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_blk_elems[6], mat_a_blk_elems[7], 0xAA);//diag 6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 - - //reciprocal of diagnal elements 0,1,2,3,4,5,6,7 - reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); -#if 0 - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); -#endif - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //mat_a_diag_inv[0] = _mm256_unpacklo_ps(mat_a_diag_inv[0], mat_a_diag_inv[0]); - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); - - - /***************** first set of 8 rows of B processing starts *****************/ - ptr_b_dup = ptr_b; - i = 0; - for (j = 0; j < numCols_b; j += 8) - { - /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A - //read 8x8 block of B into registers - mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - /* transpose steps start */ - ////unpacklow//// - mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - /* transpose steps end */ - - mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], alphaReg); - mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], alphaReg); - mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], alphaReg); - mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], alphaReg); - mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], alphaReg); - mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], alphaReg); - mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], alphaReg); - mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], alphaReg); - - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], mat_a_diag_inv[0]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5])); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_col[1]);//d = c - (a*b) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_col[2]);//d = c - (a*b) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], mat_a_diag_inv[1]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[0])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[1])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[2])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[3])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[4])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[5])); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_col[2]);//d = c - (a*b) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], mat_a_diag_inv[2]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[1])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[2])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[3])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[4])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[5])); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], mat_a_diag_inv[3]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[2])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[3])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[4])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[5])); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], mat_a_diag_inv[4]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[3])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[4])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[5])); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], mat_a_diag_inv[5]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 5 + cs_l_offset[4])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 5 + cs_l_offset[5])); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], mat_a_diag_inv[6]); - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 6 + cs_l_offset[5])); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_col[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], mat_a_diag_inv[7]); - - //////////////////////////////////////////////////////////////////////////////// - - /* transpose steps start */ - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - /* transpose steps end */ - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_b_rearr[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_rearr[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_rearr[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_rearr[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_rearr[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_rearr[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_rearr[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_rearr[7]); - - i += cs_b_offset[6]; - ptr_b_dup += cs_b_offset[6]; - //i += 8; - //ptr_b_dup += 8; - } - - //c = 0; - /***************** first set of 8 cols of B processing done *****************/ - ptr_b_dup = ptr_b; - i3 = 0; - i1 = 0; - //Start loop for cols of B to be processed in size of blk_width - for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row - { - ptr_l += cs_l_offset[6]; - - //Read next 8x8 block of A to get diag elements - i3 += 8; - mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_l + i3); - mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l); - mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[0]); - mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[1]); - mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[2]); - mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[3]); - mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[4]); - mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)ptr_l + i3 + cs_l_offset[5]); - - //pack 8 diags of A together - reciprocal_diags[0] = reciprocal_diags[1]; - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xAA);//diag 0,1 - mat_a_diag_inv[1] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xAA);//diag 2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_blk_elems[4], mat_a_blk_elems[5], 0xAA);//diag 4,5 - mat_a_diag_inv[3] = _mm256_blend_ps(mat_a_blk_elems[6], mat_a_blk_elems[7], 0xAA);//diag 6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[1], 0xCC);//diag 0,1,2,3 - mat_a_diag_inv[2] = _mm256_blend_ps(mat_a_diag_inv[2], mat_a_diag_inv[3], 0xCC);//diag 4,5,6,7 - mat_a_diag_inv[0] = _mm256_blend_ps(mat_a_diag_inv[0], mat_a_diag_inv[2], 0xF0);//diag 0,1,2,3,4,5,6,7 - - //reciprocal of diagnal elements of A :- 0,1,2,3,4,5,6,7 - reciprocal_diags[0] = _mm256_div_ps(reciprocal_diags[0], mat_a_diag_inv[0]); - - //ptr_b += j; - //ptr_b_dup += 8; - ptr_b_dup += 8; - i1 += 8; - i = i1; - i2 = 0; - - //extract diag a00 from a - mat_a_diag_inv[0] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[0] = _mm256_permute2f128_ps(mat_a_diag_inv[0], mat_a_diag_inv[0], 0x00); - //mat_a_diag_inv2[0] = _mm256_unpacklo_ps(mat_a_diag_inv2[0], mat_a_diag_inv2[0]); - - //extract diag a11 from a - mat_a_diag_inv[1] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[1] = _mm256_permute2f128_ps(mat_a_diag_inv[1], mat_a_diag_inv[1], 0x00); - //mat_a_diag_inv[1] = _mm256_unpacklo_ps(mat_a_diag_inv[1], mat_a_diag_inv[1]); - - //extract diag a22 from a - mat_a_diag_inv[2] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[2] = _mm256_permute2f128_ps(mat_a_diag_inv[2], mat_a_diag_inv[2], 0x00); - //mat_a_diag_inv[2] = _mm256_unpacklo_ps(mat_a_diag_inv[2], mat_a_diag_inv[2]); - - //extract diag a33 from a - mat_a_diag_inv[3] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[3] = _mm256_permute2f128_ps(mat_a_diag_inv[3], mat_a_diag_inv[3], 0x00); - //mat_a_diag_inv[3] = _mm256_unpacklo_ps(mat_a_diag_inv[3], mat_a_diag_inv[3]); - - //extract diag a44 from a - mat_a_diag_inv[4] = _mm256_permute_ps(reciprocal_diags[0], 0x00); - mat_a_diag_inv[4] = _mm256_permute2f128_ps(mat_a_diag_inv[4], mat_a_diag_inv[4], 0x11); - //mat_a_diag_inv[4] = _mm256_unpacklo_ps(mat_a_diag_inv[4], mat_a_diag_inv[4]); - - //extract diag a55 from a - mat_a_diag_inv[5] = _mm256_permute_ps(reciprocal_diags[0], 0x55); - mat_a_diag_inv[5] = _mm256_permute2f128_ps(mat_a_diag_inv[5], mat_a_diag_inv[5], 0x11); - //mat_a_diag_inv[5] = _mm256_unpacklo_ps(mat_a_diag_inv[5], mat_a_diag_inv[5]); - - //extract diag a66 from a - mat_a_diag_inv[6] = _mm256_permute_ps(reciprocal_diags[0], 0xAA); - mat_a_diag_inv[6] = _mm256_permute2f128_ps(mat_a_diag_inv[6], mat_a_diag_inv[6], 0x11); - //mat_a_diag_inv[6] = _mm256_unpacklo_ps(mat_a_diag_inv[6], mat_a_diag_inv[6]); - - //extract diag a77 from a - mat_a_diag_inv[7] = _mm256_permute_ps(reciprocal_diags[0], 0xFF); - mat_a_diag_inv[7] = _mm256_permute2f128_ps(mat_a_diag_inv[7], mat_a_diag_inv[7], 0x11); - //mat_a_diag_inv[7] = _mm256_unpacklo_ps(mat_a_diag_inv[7], mat_a_diag_inv[7]); - - for (r = 0; r < numCols_b; r += GEMM_BLK_V1) - { -#if GEMM_ACCUM_A - //Read 8 cols of B columns of Block-to-be-solved - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - /* transpose steps start */ - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - /* transpose steps end */ - - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); -#endif - - //i = 0; - ptr_l_dup = ptr_l; - i4 = i2; - for (l = 0; l < j; l += 8) // move across m - { - //for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) - //{ - /////////////////// Partial Lower 8x8 block trsm of B - //Read current 8 cols of B columns from specified 8x8 current-block of B - mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_b + i4); - mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); - mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); - mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); - mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); - mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); - mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); - mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); - - /* transpose steps start */ - ////unpacklow//// - mat_b_col[0] = _mm256_unpacklo_ps(mat_a_blk_elems[0], mat_a_blk_elems[1]); - mat_b_col[1] = _mm256_unpacklo_ps(mat_a_blk_elems[2], mat_a_blk_elems[3]); - mat_b_col[2] = _mm256_unpacklo_ps(mat_a_blk_elems[4], mat_a_blk_elems[5]); - mat_b_col[3] = _mm256_unpacklo_ps(mat_a_blk_elems[6], mat_a_blk_elems[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - ////unpackhigh//// - mat_a_blk_elems[0] = _mm256_unpackhi_ps(mat_a_blk_elems[0], mat_a_blk_elems[1]); - mat_a_blk_elems[1] = _mm256_unpackhi_ps(mat_a_blk_elems[2], mat_a_blk_elems[3]); - mat_a_blk_elems[2] = _mm256_unpackhi_ps(mat_a_blk_elems[4], mat_a_blk_elems[5]); - mat_a_blk_elems[3] = _mm256_unpackhi_ps(mat_a_blk_elems[6], mat_a_blk_elems[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_a_blk_elems[4] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0x44); - mat_a_blk_elems[5] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xEE); - mat_a_blk_elems[6] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0x44); - mat_a_blk_elems[7] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xEE); -#else - mat_a_blk_elems[6] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0x4E); - mat_a_blk_elems[7] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0x4E); - mat_a_blk_elems[4] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[6], 0xCC); - mat_a_blk_elems[5] = _mm256_blend_ps(mat_a_blk_elems[1], mat_a_blk_elems[6], 0x33); - mat_a_blk_elems[6] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[7], 0xCC); - mat_a_blk_elems[7] = _mm256_blend_ps(mat_a_blk_elems[3], mat_a_blk_elems[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_col[2] = _mm256_permute2f128_ps(mat_a_blk_elems[4], mat_a_blk_elems[6], 0x20); - mat_b_col[6] = _mm256_permute2f128_ps(mat_a_blk_elems[4], mat_a_blk_elems[6], 0x31); - mat_b_col[3] = _mm256_permute2f128_ps(mat_a_blk_elems[5], mat_a_blk_elems[7], 0x20); - mat_b_col[7] = _mm256_permute2f128_ps(mat_a_blk_elems[5], mat_a_blk_elems[7], 0x31); - /* transpose steps end */ - - //Broadcast A8,0 to A15,0 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - //i4 = k >> 3; - ptr_l_dup++; - -#if GEMM_ACCUM_A - //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_mul_ps(mat_a_blk_elems[0], mat_b_col[0]); - mat_b_rearr[1] = _mm256_mul_ps(mat_a_blk_elems[1], mat_b_col[0]); - mat_b_rearr[2] = _mm256_mul_ps(mat_a_blk_elems[2], mat_b_col[0]); - mat_b_rearr[3] = _mm256_mul_ps(mat_a_blk_elems[3], mat_b_col[0]); - mat_b_rearr[4] = _mm256_mul_ps(mat_a_blk_elems[4], mat_b_col[0]); - mat_b_rearr[5] = _mm256_mul_ps(mat_a_blk_elems[5], mat_b_col[0]); - mat_b_rearr[6] = _mm256_mul_ps(mat_a_blk_elems[6], mat_b_col[0]); - mat_b_rearr[7] = _mm256_mul_ps(mat_a_blk_elems[7], mat_b_col[0]); -#endif - //Broadcast A21 to A71 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,2 to A15,2 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,3 to A15,3 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,4 to A15,4 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,5 to A15,5 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,6 to A15,6 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,7 to A15,7 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) -#endif - //end loop of cols - //} - //i2 += cs_b_offset[6]; - i4 += 8; - } - //trsm solve - - k = 0; - //for (i2 = 0; i2 < numCols_b; i2 += 8) - //{ - //i2 = i1 + r; - /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A -#if !GEMM_ACCUM_A - //Read 8 cols of B columns of Block-to-be-solved - mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - /* transpose steps start */ - ////unpacklow//// - mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - /* transpose steps end */ - - mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], alphaReg); - mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], alphaReg); - mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], alphaReg); - mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], alphaReg); - mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], alphaReg); - mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], alphaReg); - mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], alphaReg); - mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], alphaReg); -#endif - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - //i += cs_l; - -#if GEMM_ACCUM_A - //(Row0): Perform mul operation of reciprocal of L(0,0) element with 1st row elements of B - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); -#else - mat_b_rearr[0] = _mm256_sub_ps(mat_b_col[0], mat_b_rearr[0]); - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], mat_a_diag_inv[0]); -#endif - -#if GEMM_ACCUM_A - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[1] = _mm256_sub_ps(mat_b_col[1], mat_b_rearr[1]); - mat_b_rearr[2] = _mm256_sub_ps(mat_b_col[2], mat_b_rearr[2]); - mat_b_rearr[3] = _mm256_sub_ps(mat_b_col[3], mat_b_rearr[3]); - mat_b_rearr[4] = _mm256_sub_ps(mat_b_col[4], mat_b_rearr[4]); - mat_b_rearr[5] = _mm256_sub_ps(mat_b_col[5], mat_b_rearr[5]); - mat_b_rearr[6] = _mm256_sub_ps(mat_b_col[6], mat_b_rearr[6]); - mat_b_rearr[7] = _mm256_sub_ps(mat_b_col[7], mat_b_rearr[7]); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A21 to A71 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[0])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[1])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[2])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[3])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[4])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[5])); - //i += cs_l; - - //Perform mul operation of reciprocal of L(1,1) element with 2nd row elements of B - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], mat_a_diag_inv[1]); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[1])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[2])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[3])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[4])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[5])); - //i += cs_l; - - //Perform mul operation of reciprocal of L(2, 2) element with 3rd row elements of B - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], mat_a_diag_inv[2]); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[2])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[3])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[4])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[5])); - //i += cs_l; - - //Perform mul operation of reciprocal of L(3, 3) element with 4rth row elements of B - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], mat_a_diag_inv[3]); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[3])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[4])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[5])); - //i += cs_l; - - //Perform mul operation of reciprocal of L(4, 4) element with 4rth row elements of B - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], mat_a_diag_inv[4]); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 5 + cs_l_offset[4])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 5 + cs_l_offset[5])); - //i += cs_l; - - //Perform mul operation of reciprocal of L(5, 5) element with 5th row elements of B - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], mat_a_diag_inv[5]); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A76 to register - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 6 + cs_l_offset[5])); - - //Perform mul operation of reciprocal of L(6, 6) element with 6th row elements of B - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], mat_a_diag_inv[6]); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - //Perform mul operation of reciprocal of L(7, 7) element with 7th row elements of B - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], mat_a_diag_inv[7]); - - //////////////////////////////////////////////////////////////////////////////// - - /* transpose steps start */ - ////unpacklow//// - mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - /* transpose steps end */ - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup + i2, mat_b_col[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)+i2), mat_b_col[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i2), mat_b_col[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i2), mat_b_col[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i2), mat_b_col[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i2), mat_b_col[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i2), mat_b_col[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i2), mat_b_col[7]); - //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); - k++; - //} - i += cs_b_offset[6]; - i2 += cs_b_offset[6]; - } - } //numRows of A - ///////////////////loop ends ///////////////////// -} - -static void trsm_AutXB_block_allSmallSizedMatrices_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b) -{ - //float ones = 1.0; - int i, i1, i2, i4, j, k, l, r; - int cs_b_offset[7]; - int cs_l_offset[7]; - float *ptr_b_dup, *ptr_l_dup; - - //57 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[8]; - __m256 mat_a_blk_elems[8]; - //__m256 mat_a_diag_inv[8]; - //__m256 reciprocal_diags[2]; - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //L matrix offsets - cs_l_offset[0] = (cs_l << 1); - cs_l_offset[1] = cs_l + cs_l_offset[0]; - cs_l_offset[2] = (cs_l << 2); - cs_l_offset[3] = cs_l + cs_l_offset[2]; - cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; - cs_l_offset[5] = cs_l + cs_l_offset[4]; - cs_l_offset[6] = (cs_l_offset[5] + cs_l); - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - cs_b_offset[6] = (cs_b_offset[5] + cs_b); - -#if 0 - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); -#endif - - - /***************** first set of 8 rows of B processing starts *****************/ - ptr_b_dup = ptr_b; - i = 0; - for (j = 0; j < numCols_b; j += 8) - { - /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A - //read 8x8 block of B into registers - mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - /* transpose steps start */ - ////unpacklow//// - mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - /* transpose steps end */ - - - //(Row0) - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5])); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_col[1]);//d = c - (a*b) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_col[2]);//d = c - (a*b) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_col[7]);//d = c - (a*b) - - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[0])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[1])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[2])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[3])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[4])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[5])); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_col[2]);//d = c - (a*b) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_col[7]);//d = c - (a*b) - - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[1])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[2])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[3])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[4])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[5])); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_col[7]);//d = c - (a*b) - - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[2])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[3])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[4])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[5])); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_col[7]);//d = c - (a*b) - - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[3])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[4])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[5])); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_col[7]);//d = c - (a*b) - - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 5 + cs_l_offset[4])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 5 + cs_l_offset[5])); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_col[7]);//d = c - (a*b) - - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 6 + cs_l_offset[5])); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_col[7]);//d = c - (a*b) - - - - //////////////////////////////////////////////////////////////////////////////// - - /* transpose steps start */ - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - /* transpose steps end */ - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_b_rearr[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_rearr[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_rearr[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_rearr[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_rearr[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_rearr[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_rearr[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_rearr[7]); - - i += cs_b_offset[6]; - ptr_b_dup += cs_b_offset[6]; - //i += 8; - //ptr_b_dup += 8; - } - - //c = 0; - /***************** first set of 8 cols of B processing done *****************/ - ptr_b_dup = ptr_b; - i1 = 0; - //Start loop for cols of B to be processed in size of blk_width - for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row - { - ptr_l += cs_l_offset[6]; - - - //ptr_b += j; - //ptr_b_dup += 8; - ptr_b_dup += 8; - i1 += 8; - i = i1; - i2 = 0; - - for (r = 0; r < numCols_b; r += GEMM_BLK_V1) - { -#if GEMM_ACCUM_A - //Read 8 cols of B columns of Block-to-be-solved - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - /* transpose steps start */ - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - /* transpose steps end */ -#endif - - //i = 0; - ptr_l_dup = ptr_l; - i4 = i2; - for (l = 0; l < j; l += 8) // move across m - { - //for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) - //{ - /////////////////// Partial Lower 8x8 block trsm of B - //Read current 8 cols of B columns from specified 8x8 current-block of B - mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_b + i4); - mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); - mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); - mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); - mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); - mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); - mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); - mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); - - /* transpose steps start */ - ////unpacklow//// - mat_b_col[0] = _mm256_unpacklo_ps(mat_a_blk_elems[0], mat_a_blk_elems[1]); - mat_b_col[1] = _mm256_unpacklo_ps(mat_a_blk_elems[2], mat_a_blk_elems[3]); - mat_b_col[2] = _mm256_unpacklo_ps(mat_a_blk_elems[4], mat_a_blk_elems[5]); - mat_b_col[3] = _mm256_unpacklo_ps(mat_a_blk_elems[6], mat_a_blk_elems[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - ////unpackhigh//// - mat_a_blk_elems[0] = _mm256_unpackhi_ps(mat_a_blk_elems[0], mat_a_blk_elems[1]); - mat_a_blk_elems[1] = _mm256_unpackhi_ps(mat_a_blk_elems[2], mat_a_blk_elems[3]); - mat_a_blk_elems[2] = _mm256_unpackhi_ps(mat_a_blk_elems[4], mat_a_blk_elems[5]); - mat_a_blk_elems[3] = _mm256_unpackhi_ps(mat_a_blk_elems[6], mat_a_blk_elems[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_a_blk_elems[4] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0x44); - mat_a_blk_elems[5] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xEE); - mat_a_blk_elems[6] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0x44); - mat_a_blk_elems[7] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xEE); -#else - mat_a_blk_elems[6] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0x4E); - mat_a_blk_elems[7] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0x4E); - mat_a_blk_elems[4] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[6], 0xCC); - mat_a_blk_elems[5] = _mm256_blend_ps(mat_a_blk_elems[1], mat_a_blk_elems[6], 0x33); - mat_a_blk_elems[6] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[7], 0xCC); - mat_a_blk_elems[7] = _mm256_blend_ps(mat_a_blk_elems[3], mat_a_blk_elems[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_col[2] = _mm256_permute2f128_ps(mat_a_blk_elems[4], mat_a_blk_elems[6], 0x20); - mat_b_col[6] = _mm256_permute2f128_ps(mat_a_blk_elems[4], mat_a_blk_elems[6], 0x31); - mat_b_col[3] = _mm256_permute2f128_ps(mat_a_blk_elems[5], mat_a_blk_elems[7], 0x20); - mat_b_col[7] = _mm256_permute2f128_ps(mat_a_blk_elems[5], mat_a_blk_elems[7], 0x31); - /* transpose steps end */ - - //Broadcast A8,0 to A15,0 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - //i4 = k >> 3; - ptr_l_dup++; - -#if GEMM_ACCUM_A - //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_mul_ps(mat_a_blk_elems[0], mat_b_col[0]); - mat_b_rearr[1] = _mm256_mul_ps(mat_a_blk_elems[1], mat_b_col[0]); - mat_b_rearr[2] = _mm256_mul_ps(mat_a_blk_elems[2], mat_b_col[0]); - mat_b_rearr[3] = _mm256_mul_ps(mat_a_blk_elems[3], mat_b_col[0]); - mat_b_rearr[4] = _mm256_mul_ps(mat_a_blk_elems[4], mat_b_col[0]); - mat_b_rearr[5] = _mm256_mul_ps(mat_a_blk_elems[5], mat_b_col[0]); - mat_b_rearr[6] = _mm256_mul_ps(mat_a_blk_elems[6], mat_b_col[0]); - mat_b_rearr[7] = _mm256_mul_ps(mat_a_blk_elems[7], mat_b_col[0]); -#endif - //Broadcast A21 to A71 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,2 to A15,2 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,3 to A15,3 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,4 to A15,4 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,5 to A15,5 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,6 to A15,6 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,7 to A15,7 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) -#endif - //end loop of cols - //} - //i2 += cs_b_offset[6]; - i4 += 8; - } - //trsm solve - - k = 0; - //for (i2 = 0; i2 < numCols_b; i2 += 8) - //{ - //i2 = i1 + r; - /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A -#if !GEMM_ACCUM_A - //Read 8 cols of B columns of Block-to-be-solved - mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - /* transpose steps start */ - ////unpacklow//// - mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - /* transpose steps end */ -#endif - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - //i += cs_l; - -#if GEMM_ACCUM_A - //(Row0): already done - -#else - mat_b_rearr[0] = _mm256_sub_ps(mat_b_col[0], mat_b_rearr[0]); -#endif - -#if GEMM_ACCUM_A - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[1] = _mm256_sub_ps(mat_b_col[1], mat_b_rearr[1]); - mat_b_rearr[2] = _mm256_sub_ps(mat_b_col[2], mat_b_rearr[2]); - mat_b_rearr[3] = _mm256_sub_ps(mat_b_col[3], mat_b_rearr[3]); - mat_b_rearr[4] = _mm256_sub_ps(mat_b_col[4], mat_b_rearr[4]); - mat_b_rearr[5] = _mm256_sub_ps(mat_b_col[5], mat_b_rearr[5]); - mat_b_rearr[6] = _mm256_sub_ps(mat_b_col[6], mat_b_rearr[6]); - mat_b_rearr[7] = _mm256_sub_ps(mat_b_col[7], mat_b_rearr[7]); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A21 to A71 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[0])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[1])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[2])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[3])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[4])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[5])); - //i += cs_l; - - - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[1])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[2])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[3])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[4])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[5])); - //i += cs_l; - - - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[2])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[3])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[4])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[5])); - //i += cs_l; - - - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[3])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[4])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[5])); - //i += cs_l; - - - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 5 + cs_l_offset[4])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 5 + cs_l_offset[5])); - //i += cs_l; - - - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A76 to register - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 6 + cs_l_offset[5])); - - - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - - - //////////////////////////////////////////////////////////////////////////////// - - /* transpose steps start */ - ////unpacklow//// - mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - /* transpose steps end */ - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup + i2, mat_b_col[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)+i2), mat_b_col[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i2), mat_b_col[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i2), mat_b_col[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i2), mat_b_col[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i2), mat_b_col[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i2), mat_b_col[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i2), mat_b_col[7]); - //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); - k++; - //} - i += cs_b_offset[6]; - i2 += cs_b_offset[6]; - } - } //numRows of A - ///////////////////loop ends ///////////////////// -} - -static void trsm_AutXB_block_allSmallSizedMatrices_alpha_unitDiag(float *ptr_l, float *ptr_b, int numRows_lb, int numCols_b, int rs_l, int rs_b, int cs_l, int cs_b, float alpha) -{ - //float ones = 1.0; - int i, i1, i2, i4, j, k, l, r; - int cs_b_offset[7]; - int cs_l_offset[7]; - float *ptr_b_dup, *ptr_l_dup; - - //57 number of ymm(256 bits) registers used - __m256 mat_b_col[8]; - __m256 mat_b_rearr[8]; - __m256 mat_a_blk_elems[8]; - //__m256 mat_a_diag_inv[8]; - //__m256 reciprocal_diags[2]; - __m256 alphaReg; - alphaReg = _mm256_broadcast_ss((float const *)&alpha); - - // ---> considering that the matrix size is multiple of 16 rows and 8 cols <--- // - - //L matrix offsets - cs_l_offset[0] = (cs_l << 1); - cs_l_offset[1] = cs_l + cs_l_offset[0]; - cs_l_offset[2] = (cs_l << 2); - cs_l_offset[3] = cs_l + cs_l_offset[2]; - cs_l_offset[4] = cs_l_offset[0] + cs_l_offset[2]; - cs_l_offset[5] = cs_l + cs_l_offset[4]; - cs_l_offset[6] = (cs_l_offset[5] + cs_l); - - cs_b_offset[0] = (cs_b << 1); - cs_b_offset[1] = cs_b + cs_b_offset[0]; - cs_b_offset[2] = (cs_b << 2); - cs_b_offset[3] = cs_b + cs_b_offset[2]; - cs_b_offset[4] = cs_b_offset[0] + cs_b_offset[2]; - cs_b_offset[5] = cs_b + cs_b_offset[4]; - cs_b_offset[6] = (cs_b_offset[5] + cs_b); - -#if 0 - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3)); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 4)); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 5)); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 6)); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + 7)); - - //Broadcast A21 to A71 to registers - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 2)); - mat_a_blk_elems[8] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 3)); - mat_a_blk_elems[9] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 4)); - mat_a_blk_elems[10] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 5)); - mat_a_blk_elems[11] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 6)); - mat_a_blk_elems[12] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l + 7)); - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[13] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 3)); - mat_a_blk_elems[14] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 4)); - mat_a_blk_elems[15] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 5)); - mat_a_blk_elems[16] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 6)); - mat_a_blk_elems[17] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0] + 7)); - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[18] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 4)); - mat_a_blk_elems[19] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 5)); - mat_a_blk_elems[20] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 6)); - mat_a_blk_elems[21] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1] + 7)); - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[22] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 5)); - mat_a_blk_elems[23] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 6)); - mat_a_blk_elems[24] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2] + 7)); - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[25] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 6)); - mat_a_blk_elems[26] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3] + 7)); - - //Broadcast A76 to register - mat_a_blk_elems[27] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4] + 7)); -#endif - - - /***************** first set of 8 rows of B processing starts *****************/ - ptr_b_dup = ptr_b; - i = 0; - for (j = 0; j < numCols_b; j += 8) - { - /////////////////// Complete Upper 8x8 block trsm of B :- upper 8x8 block of B with upper 8x8 block of A - //read 8x8 block of B into registers - mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - /* transpose steps start */ - ////unpacklow//// - mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - /* transpose steps end */ - - mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], alphaReg); - mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], alphaReg); - mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], alphaReg); - mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], alphaReg); - mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], alphaReg); - mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], alphaReg); - mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], alphaReg); - mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], alphaReg); - - //(Row0) - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[0])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[1])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[2])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[3])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[4])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l + cs_l_offset[5])); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_col[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_col[1]);//d = c - (a*b) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_col[2]);//d = c - (a*b) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_col[7]);//d = c - (a*b) - - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[0])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[1])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[2])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[3])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[4])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l + 1 + cs_l_offset[5])); - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_col[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_col[2]);//d = c - (a*b) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_col[7]);//d = c - (a*b) - - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[1])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[2])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[3])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[4])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l + 2 + cs_l_offset[5])); - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_col[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_col[3]);//d = c - (a*b) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_col[7]);//d = c - (a*b) - - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[2])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[3])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[4])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l + 3 + cs_l_offset[5])); - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_col[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_col[4]);//d = c - (a*b) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_col[7]);//d = c - (a*b) - - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[3])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[4])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l + 4 + cs_l_offset[5])); - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_col[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_col[5]);//d = c - (a*b) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_col[7]);//d = c - (a*b) - - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 5 + cs_l_offset[4])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l + 5 + cs_l_offset[5])); - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_col[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_col[6]);//d = c - (a*b) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_col[7]);//d = c - (a*b) - - - - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l + 6 + cs_l_offset[5])); - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_col[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_col[7]);//d = c - (a*b) - - - - //////////////////////////////////////////////////////////////////////////////// - - /* transpose steps start */ - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - /* transpose steps end */ - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup, mat_b_rearr[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)), mat_b_rearr[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0]), mat_b_rearr[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1]), mat_b_rearr[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2]), mat_b_rearr[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3]), mat_b_rearr[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4]), mat_b_rearr[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5]), mat_b_rearr[7]); - - i += cs_b_offset[6]; - ptr_b_dup += cs_b_offset[6]; - //i += 8; - //ptr_b_dup += 8; - } - - //c = 0; - /***************** first set of 8 cols of B processing done *****************/ - ptr_b_dup = ptr_b; - i1 = 0; - //Start loop for cols of B to be processed in size of blk_width - for (j = 8; j < numRows_lb; j += 8)//m :- 8x8 block row - { - ptr_l += cs_l_offset[6]; - - - //ptr_b += j; - //ptr_b_dup += 8; - ptr_b_dup += 8; - i1 += 8; - i = i1; - i2 = 0; - - for (r = 0; r < numCols_b; r += GEMM_BLK_V1) - { -#if GEMM_ACCUM_A - //Read 8 cols of B columns of Block-to-be-solved - mat_b_col[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_col[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_col[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_col[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_col[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_col[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_col[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_col[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - /* transpose steps start */ - ////unpacklow//// - mat_b_rearr[0] = _mm256_unpacklo_ps(mat_b_col[0], mat_b_col[1]); - mat_b_rearr[1] = _mm256_unpacklo_ps(mat_b_col[2], mat_b_col[3]); - mat_b_rearr[2] = _mm256_unpacklo_ps(mat_b_col[4], mat_b_col[5]); - mat_b_rearr[3] = _mm256_unpacklo_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_rearr[0] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_rearr[4] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_rearr[1] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_rearr[5] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - - ////unpackhigh//// - mat_b_col[0] = _mm256_unpackhi_ps(mat_b_col[0], mat_b_col[1]); - mat_b_col[1] = _mm256_unpackhi_ps(mat_b_col[2], mat_b_col[3]); - mat_b_col[2] = _mm256_unpackhi_ps(mat_b_col[4], mat_b_col[5]); - mat_b_col[3] = _mm256_unpackhi_ps(mat_b_col[6], mat_b_col[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_rearr[2] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_rearr[6] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_rearr[3] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_rearr[7] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - /* transpose steps end */ - - mat_b_rearr[0] = _mm256_mul_ps(mat_b_rearr[0], alphaReg); - mat_b_rearr[1] = _mm256_mul_ps(mat_b_rearr[1], alphaReg); - mat_b_rearr[2] = _mm256_mul_ps(mat_b_rearr[2], alphaReg); - mat_b_rearr[3] = _mm256_mul_ps(mat_b_rearr[3], alphaReg); - mat_b_rearr[4] = _mm256_mul_ps(mat_b_rearr[4], alphaReg); - mat_b_rearr[5] = _mm256_mul_ps(mat_b_rearr[5], alphaReg); - mat_b_rearr[6] = _mm256_mul_ps(mat_b_rearr[6], alphaReg); - mat_b_rearr[7] = _mm256_mul_ps(mat_b_rearr[7], alphaReg); -#endif - - //i = 0; - ptr_l_dup = ptr_l; - i4 = i2; - for (l = 0; l < j; l += 8) // move across m - { - //for (k = 0; k < numCols_b; k += 8) // move across n for the same value of l (index of m) - //{ - /////////////////// Partial Lower 8x8 block trsm of B - //Read current 8 cols of B columns from specified 8x8 current-block of B - mat_a_blk_elems[0] = _mm256_loadu_ps((float const *)ptr_b + i4); - mat_a_blk_elems[1] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b)); - mat_a_blk_elems[2] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[0])); - mat_a_blk_elems[3] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[1])); - mat_a_blk_elems[4] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[2])); - mat_a_blk_elems[5] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[3])); - mat_a_blk_elems[6] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[4])); - mat_a_blk_elems[7] = _mm256_loadu_ps((float const *)(ptr_b + i4 + cs_b_offset[5])); - - /* transpose steps start */ - ////unpacklow//// - mat_b_col[0] = _mm256_unpacklo_ps(mat_a_blk_elems[0], mat_a_blk_elems[1]); - mat_b_col[1] = _mm256_unpacklo_ps(mat_a_blk_elems[2], mat_a_blk_elems[3]); - mat_b_col[2] = _mm256_unpacklo_ps(mat_a_blk_elems[4], mat_a_blk_elems[5]); - mat_b_col[3] = _mm256_unpacklo_ps(mat_a_blk_elems[6], mat_a_blk_elems[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - ////unpackhigh//// - mat_a_blk_elems[0] = _mm256_unpackhi_ps(mat_a_blk_elems[0], mat_a_blk_elems[1]); - mat_a_blk_elems[1] = _mm256_unpackhi_ps(mat_a_blk_elems[2], mat_a_blk_elems[3]); - mat_a_blk_elems[2] = _mm256_unpackhi_ps(mat_a_blk_elems[4], mat_a_blk_elems[5]); - mat_a_blk_elems[3] = _mm256_unpackhi_ps(mat_a_blk_elems[6], mat_a_blk_elems[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_a_blk_elems[4] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0x44); - mat_a_blk_elems[5] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0xEE); - mat_a_blk_elems[6] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0x44); - mat_a_blk_elems[7] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0xEE); -#else - mat_a_blk_elems[6] = _mm256_shuffle_ps(mat_a_blk_elems[0], mat_a_blk_elems[1], 0x4E); - mat_a_blk_elems[7] = _mm256_shuffle_ps(mat_a_blk_elems[2], mat_a_blk_elems[3], 0x4E); - mat_a_blk_elems[4] = _mm256_blend_ps(mat_a_blk_elems[0], mat_a_blk_elems[6], 0xCC); - mat_a_blk_elems[5] = _mm256_blend_ps(mat_a_blk_elems[1], mat_a_blk_elems[6], 0x33); - mat_a_blk_elems[6] = _mm256_blend_ps(mat_a_blk_elems[2], mat_a_blk_elems[7], 0xCC); - mat_a_blk_elems[7] = _mm256_blend_ps(mat_a_blk_elems[3], mat_a_blk_elems[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_col[2] = _mm256_permute2f128_ps(mat_a_blk_elems[4], mat_a_blk_elems[6], 0x20); - mat_b_col[6] = _mm256_permute2f128_ps(mat_a_blk_elems[4], mat_a_blk_elems[6], 0x31); - mat_b_col[3] = _mm256_permute2f128_ps(mat_a_blk_elems[5], mat_a_blk_elems[7], 0x20); - mat_b_col[7] = _mm256_permute2f128_ps(mat_a_blk_elems[5], mat_a_blk_elems[7], 0x31); - /* transpose steps end */ - - //Broadcast A8,0 to A15,0 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - //i4 = k >> 3; - ptr_l_dup++; - -#if GEMM_ACCUM_A - //(Row8): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[0], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[0], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_mul_ps(mat_a_blk_elems[0], mat_b_col[0]); - mat_b_rearr[1] = _mm256_mul_ps(mat_a_blk_elems[1], mat_b_col[0]); - mat_b_rearr[2] = _mm256_mul_ps(mat_a_blk_elems[2], mat_b_col[0]); - mat_b_rearr[3] = _mm256_mul_ps(mat_a_blk_elems[3], mat_b_col[0]); - mat_b_rearr[4] = _mm256_mul_ps(mat_a_blk_elems[4], mat_b_col[0]); - mat_b_rearr[5] = _mm256_mul_ps(mat_a_blk_elems[5], mat_b_col[0]); - mat_b_rearr[6] = _mm256_mul_ps(mat_a_blk_elems[6], mat_b_col[0]); - mat_b_rearr[7] = _mm256_mul_ps(mat_a_blk_elems[7], mat_b_col[0]); -#endif - //Broadcast A21 to A71 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row9): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[1], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[1], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[1], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,2 to A15,2 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row10): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[2], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[2], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[2], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[2], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,3 to A15,3 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row11): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[3], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[3], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[3], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[3], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[3], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,4 to A15,4 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row12): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[4], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[4], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[4], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[4], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[4], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[4], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,5 to A15,5 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row13): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[5], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[5], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[5], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[5], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[5], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[5], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[5], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,6 to A15,6 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row14): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[6], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[6], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[6], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[6], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[6], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[6], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[6], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[6], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A8,7 to A15,7 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[7] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - ptr_l_dup++; -#if GEMM_ACCUM_A - //(Row15): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[0] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[0] = _mm256_fmadd_ps(mat_a_blk_elems[0], mat_b_col[7], mat_b_rearr[0]);//d = c - (a*b) - mat_b_rearr[1] = _mm256_fmadd_ps(mat_a_blk_elems[1], mat_b_col[7], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fmadd_ps(mat_a_blk_elems[2], mat_b_col[7], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fmadd_ps(mat_a_blk_elems[3], mat_b_col[7], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fmadd_ps(mat_a_blk_elems[4], mat_b_col[7], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fmadd_ps(mat_a_blk_elems[5], mat_b_col[7], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fmadd_ps(mat_a_blk_elems[6], mat_b_col[7], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fmadd_ps(mat_a_blk_elems[7], mat_b_col[7], mat_b_rearr[7]);//d = c - (a*b) -#endif - //end loop of cols - //} - //i2 += cs_b_offset[6]; - i4 += 8; - } - //trsm solve - - k = 0; - //for (i2 = 0; i2 < numCols_b; i2 += 8) - //{ - //i2 = i1 + r; - /////////////////// Complete Lower 8x8 block trsm of B :- lower 8x8 block of B with lower right 8x8 block of A -#if !GEMM_ACCUM_A - //Read 8 cols of B columns of Block-to-be-solved - mat_b_rearr[0] = _mm256_loadu_ps((float const *)ptr_b + i); - mat_b_rearr[1] = _mm256_loadu_ps((float const *)(ptr_b + cs_b + i)); - mat_b_rearr[2] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[0] + i)); - mat_b_rearr[3] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[1] + i)); - mat_b_rearr[4] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[2] + i)); - mat_b_rearr[5] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[3] + i)); - mat_b_rearr[6] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[4] + i)); - mat_b_rearr[7] = _mm256_loadu_ps((float const *)(ptr_b + cs_b_offset[5] + i)); - - /* transpose steps start */ - ////unpacklow//// - mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - /* transpose steps end */ - - mat_b_col[0] = _mm256_mul_ps(mat_b_col[0], alphaReg); - mat_b_col[1] = _mm256_mul_ps(mat_b_col[1], alphaReg); - mat_b_col[2] = _mm256_mul_ps(mat_b_col[2], alphaReg); - mat_b_col[3] = _mm256_mul_ps(mat_b_col[3], alphaReg); - mat_b_col[4] = _mm256_mul_ps(mat_b_col[4], alphaReg); - mat_b_col[5] = _mm256_mul_ps(mat_b_col[5], alphaReg); - mat_b_col[6] = _mm256_mul_ps(mat_b_col[6], alphaReg); - mat_b_col[7] = _mm256_mul_ps(mat_b_col[7], alphaReg); -#endif - //Broadcast A10 to A70 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l)); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[0])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[1])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[2])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[3])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[4])); - mat_a_blk_elems[6] = _mm256_broadcast_ss((float const *)(ptr_l_dup + cs_l_offset[5])); - //i += cs_l; - -#if GEMM_ACCUM_A - //(Row0): already done - -#else - mat_b_rearr[0] = _mm256_sub_ps(mat_b_col[0], mat_b_rearr[0]); -#endif - -#if GEMM_ACCUM_A - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) -#else - mat_b_rearr[1] = _mm256_sub_ps(mat_b_col[1], mat_b_rearr[1]); - mat_b_rearr[2] = _mm256_sub_ps(mat_b_col[2], mat_b_rearr[2]); - mat_b_rearr[3] = _mm256_sub_ps(mat_b_col[3], mat_b_rearr[3]); - mat_b_rearr[4] = _mm256_sub_ps(mat_b_col[4], mat_b_rearr[4]); - mat_b_rearr[5] = _mm256_sub_ps(mat_b_col[5], mat_b_rearr[5]); - mat_b_rearr[6] = _mm256_sub_ps(mat_b_col[6], mat_b_rearr[6]); - mat_b_rearr[7] = _mm256_sub_ps(mat_b_col[7], mat_b_rearr[7]); - - //(Row1): FMA operations of b1 with elements of indices from (1, 0) uptill (7, 0) - mat_b_rearr[1] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[0], mat_b_rearr[1]);//d = c - (a*b) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[0], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[0], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[0], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[0], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[0], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[6], mat_b_rearr[0], mat_b_rearr[7]);//d = c - (a*b) -#endif - //Broadcast A21 to A71 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[0])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[1])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[2])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[3])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[4])); - mat_a_blk_elems[5] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 1 + cs_l_offset[5])); - //i += cs_l; - - - - //(Row2): FMA operations of b2 with elements of indices from (2, 0) uptill (7, 0) - mat_b_rearr[2] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[1], mat_b_rearr[2]);//d = c - (a*b) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[1], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[1], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[1], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[1], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[5], mat_b_rearr[1], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A32 to A72 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[1])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[2])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[3])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[4])); - mat_a_blk_elems[4] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 2 + cs_l_offset[5])); - //i += cs_l; - - - - //(Row3): FMA operations of b3 with elements of indices from (3, 0) uptill (7, 0) - mat_b_rearr[3] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[2], mat_b_rearr[3]);//d = c - (a*b) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[2], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[2], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[2], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[4], mat_b_rearr[2], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A43 to A73 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[2])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[3])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[4])); - mat_a_blk_elems[3] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 3 + cs_l_offset[5])); - //i += cs_l; - - - - //(Row4): FMA operations of b4 with elements of indices from (4, 0) uptill (7, 0) - mat_b_rearr[4] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[3], mat_b_rearr[4]);//d = c - (a*b) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[3], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[3], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[3], mat_b_rearr[3], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A54 to A74 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[3])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[4])); - mat_a_blk_elems[2] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 4 + cs_l_offset[5])); - //i += cs_l; - - - - //(Row5): FMA operations of b5 with elements of indices from (5, 0) uptill (7, 0) - mat_b_rearr[5] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[4], mat_b_rearr[5]);//d = c - (a*b) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[4], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[2], mat_b_rearr[4], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A65 to A75 to registers - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 5 + cs_l_offset[4])); - mat_a_blk_elems[1] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 5 + cs_l_offset[5])); - //i += cs_l; - - - - //(Row6): FMA operations of b6 with elements of indices from (6, 0) uptill (7, 0) - mat_b_rearr[6] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[5], mat_b_rearr[6]);//d = c - (a*b) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[1], mat_b_rearr[5], mat_b_rearr[7]);//d = c - (a*b) - - //Broadcast A76 to register - mat_a_blk_elems[0] = _mm256_broadcast_ss((float const *)(ptr_l_dup + 6 + cs_l_offset[5])); - - - - //(Row7): FMA operations of b7 with elements of index (7, 0) - mat_b_rearr[7] = _mm256_fnmadd_ps(mat_a_blk_elems[0], mat_b_rearr[6], mat_b_rearr[7]);//d = c - (a*b) - - - - //////////////////////////////////////////////////////////////////////////////// - - /* transpose steps start */ - ////unpacklow//// - mat_b_col[0] = _mm256_unpacklo_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_col[1] = _mm256_unpacklo_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_col[2] = _mm256_unpacklo_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_col[3] = _mm256_unpacklo_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange low elements -#if REARRANGE_SHFL == 1 - mat_b_col[4] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x44); - mat_b_col[5] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0xEE); - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x44); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0xEE); -#else - mat_b_col[6] = _mm256_shuffle_ps(mat_b_col[0], mat_b_col[1], 0x4E); - mat_b_col[7] = _mm256_shuffle_ps(mat_b_col[2], mat_b_col[3], 0x4E); - mat_b_col[4] = _mm256_blend_ps(mat_b_col[0], mat_b_col[6], 0xCC); - mat_b_col[5] = _mm256_blend_ps(mat_b_col[1], mat_b_col[6], 0x33); - mat_b_col[6] = _mm256_blend_ps(mat_b_col[2], mat_b_col[7], 0xCC); - mat_b_col[7] = _mm256_blend_ps(mat_b_col[3], mat_b_col[7], 0x33); -#endif - //Merge rearranged low elements into complete rows - mat_b_col[0] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x20); - mat_b_col[4] = _mm256_permute2f128_ps(mat_b_col[4], mat_b_col[6], 0x31); - mat_b_col[1] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x20); - mat_b_col[5] = _mm256_permute2f128_ps(mat_b_col[5], mat_b_col[7], 0x31); - - ////unpackhigh//// - mat_b_rearr[0] = _mm256_unpackhi_ps(mat_b_rearr[0], mat_b_rearr[1]); - mat_b_rearr[1] = _mm256_unpackhi_ps(mat_b_rearr[2], mat_b_rearr[3]); - mat_b_rearr[2] = _mm256_unpackhi_ps(mat_b_rearr[4], mat_b_rearr[5]); - mat_b_rearr[3] = _mm256_unpackhi_ps(mat_b_rearr[6], mat_b_rearr[7]); - - //Rearrange high elements -#if REARRANGE_SHFL == 1 - mat_b_rearr[4] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x44); - mat_b_rearr[5] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0xEE); - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x44); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0xEE); -#else - mat_b_rearr[6] = _mm256_shuffle_ps(mat_b_rearr[0], mat_b_rearr[1], 0x4E); - mat_b_rearr[7] = _mm256_shuffle_ps(mat_b_rearr[2], mat_b_rearr[3], 0x4E); - mat_b_rearr[4] = _mm256_blend_ps(mat_b_rearr[0], mat_b_rearr[6], 0xCC); - mat_b_rearr[5] = _mm256_blend_ps(mat_b_rearr[1], mat_b_rearr[6], 0x33); - mat_b_rearr[6] = _mm256_blend_ps(mat_b_rearr[2], mat_b_rearr[7], 0xCC); - mat_b_rearr[7] = _mm256_blend_ps(mat_b_rearr[3], mat_b_rearr[7], 0x33); -#endif - - //Merge rearranged high elements into complete rows - mat_b_col[2] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x20); - mat_b_col[6] = _mm256_permute2f128_ps(mat_b_rearr[4], mat_b_rearr[6], 0x31); - mat_b_col[3] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x20); - mat_b_col[7] = _mm256_permute2f128_ps(mat_b_rearr[5], mat_b_rearr[7], 0x31); - /* transpose steps end */ - - //Store the computed B columns - _mm256_storeu_ps((float *)ptr_b_dup + i2, mat_b_col[0]); - _mm256_storeu_ps((float *)(ptr_b_dup + (cs_b)+i2), mat_b_col[1]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[0] + i2), mat_b_col[2]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[1] + i2), mat_b_col[3]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[2] + i2), mat_b_col[4]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[3] + i2), mat_b_col[5]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[4] + i2), mat_b_col[6]); - _mm256_storeu_ps((float *)(ptr_b_dup + cs_b_offset[5] + i2), mat_b_col[7]); - //printf("writing B => m[%d], n[%d], [%f]\n", j, k, *(ptr_b_dup + k)); - k++; - //} - i += cs_b_offset[6]; - i2 += cs_b_offset[6]; - } - } //numRows of A - ///////////////////loop ends ///////////////////// -} -#endif From c4368c66edcf2202ac11cda61e41e9c0b77a1685 Mon Sep 17 00:00:00 2001 From: kdevraje Date: Mon, 27 May 2019 16:24:43 +0530 Subject: [PATCH 103/109] This check in has changes w.r.t Copyright information, which is changed to (start year) - 2019 Change-Id: Ide3c8f7172210b8d3538d3c36e88634ab1ba9041 --- kernels/zen/1/bli_amaxv_zen_int.c | 2 +- kernels/zen/1/bli_dotv_zen_int.c | 4 ---- kernels/zen/1/bli_dotv_zen_int10.c | 4 ---- kernels/zen/1/bli_dotxv_zen_int.c | 4 ---- test/studies/skx/Makefile | 1 + test/studies/skx/test_syrk.c | 1 + test/studies/skx/test_trmm.c | 1 + test/studies/thunderx2/test_trmm.c | 3 ++- 8 files changed, 6 insertions(+), 14 deletions(-) diff --git a/kernels/zen/1/bli_amaxv_zen_int.c b/kernels/zen/1/bli_amaxv_zen_int.c index ccf6919cc..496649b50 100644 --- a/kernels/zen/1/bli_amaxv_zen_int.c +++ b/kernels/zen/1/bli_amaxv_zen_int.c @@ -4,7 +4,7 @@ An object-based framework for developing high-performance BLAS-like libraries. - Copyright (C) 2016 - 2018, Advanced Micro Devices, Inc + Copyright (C) 2016 - 2018 - 2019, Advanced Micro Devices, Inc. Copyright (C) 2018, The University of Texas at Austin Redistribution and use in source and binary forms, with or without diff --git a/kernels/zen/1/bli_dotv_zen_int.c b/kernels/zen/1/bli_dotv_zen_int.c index da3f4f771..01022d353 100644 --- a/kernels/zen/1/bli_dotv_zen_int.c +++ b/kernels/zen/1/bli_dotv_zen_int.c @@ -4,11 +4,7 @@ An object-based framework for developing high-performance BLAS-like libraries. -<<<<<<< HEAD Copyright (C) 2016 - 2019, Advanced Micro Devices, Inc. -======= - Copyright (C) 2016 - 2018, Advanced Micro Devices, Inc. ->>>>>>> Merged BLIS Release 1.3 Copyright (C) 2018, The University of Texas at Austin Redistribution and use in source and binary forms, with or without diff --git a/kernels/zen/1/bli_dotv_zen_int10.c b/kernels/zen/1/bli_dotv_zen_int10.c index 1888dface..959dc86b5 100644 --- a/kernels/zen/1/bli_dotv_zen_int10.c +++ b/kernels/zen/1/bli_dotv_zen_int10.c @@ -4,11 +4,7 @@ An object-based framework for developing high-performance BLAS-like libraries. -<<<<<<< HEAD Copyright (C) 2016 - 2019, Advanced Micro Devices, Inc. -======= - Copyright (C) 2016 - 2018, Advanced Micro Devices, Inc. ->>>>>>> Merged BLIS Release 1.3 Copyright (C) 2018, The University of Texas at Austin Redistribution and use in source and binary forms, with or without diff --git a/kernels/zen/1/bli_dotxv_zen_int.c b/kernels/zen/1/bli_dotxv_zen_int.c index 695ff6dc9..99ea51710 100644 --- a/kernels/zen/1/bli_dotxv_zen_int.c +++ b/kernels/zen/1/bli_dotxv_zen_int.c @@ -4,11 +4,7 @@ An object-based framework for developing high-performance BLAS-like libraries. -<<<<<<< HEAD Copyright (C) 2016 - 2019, Advanced Micro Devices, Inc. -======= - Copyright (C) 2016 - 2018, Advanced Micro Devices, Inc. ->>>>>>> Merged BLIS Release 1.3 Copyright (C) 2018, The University of Texas at Austin Redistribution and use in source and binary forms, with or without diff --git a/test/studies/skx/Makefile b/test/studies/skx/Makefile index 18a82c0ea..83c29f876 100644 --- a/test/studies/skx/Makefile +++ b/test/studies/skx/Makefile @@ -5,6 +5,7 @@ # libraries. # # Copyright (C) 2014, The University of Texas at Austin +# Copyright (C) 2018 - 2019, Advanced Micro Devices, Inc. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are diff --git a/test/studies/skx/test_syrk.c b/test/studies/skx/test_syrk.c index 5e1c43159..074d1e708 100644 --- a/test/studies/skx/test_syrk.c +++ b/test/studies/skx/test_syrk.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2018 - 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/test/studies/skx/test_trmm.c b/test/studies/skx/test_trmm.c index 1c7db7956..85cdee37f 100644 --- a/test/studies/skx/test_trmm.c +++ b/test/studies/skx/test_trmm.c @@ -5,6 +5,7 @@ libraries. Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2018 - 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/test/studies/thunderx2/test_trmm.c b/test/studies/thunderx2/test_trmm.c index 0fb153444..2f2c12386 100644 --- a/test/studies/thunderx2/test_trmm.c +++ b/test/studies/thunderx2/test_trmm.c @@ -4,7 +4,8 @@ An object-based framework for developing high-performance BLAS-like libraries. - Copyright (C) 2014, The University of Texas + Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2018 - 2019, Advanced Micro Devices, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are From ea25ba255a640a6f96bd349c59ed724d7a131ba3 Mon Sep 17 00:00:00 2001 From: Kiran Varaganti Date: Fri, 31 May 2019 15:14:22 +0530 Subject: [PATCH 104/109] Added back BLIS_ENABLE_ZEN_BLOCK_SIZES macro to zen configuration, this is same as release 1.3. This was added before to improve DGEMM Multithreaded scalability on Naples for when number of threads is greater than 16. By mistake this got deleted in many changes done for 2.0 release, now we are adding this change back., in bli_gemm_front.c - code clean Change-Id: I6827b58d2dab1041fe182fef5a007b679ac4bb1f --- config/zen/bli_cntx_init_zen.c | 3 ++- config/zen/bli_family_zen.h | 2 +- frame/3/gemm/bli_gemm_front.c | 6 ------ 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/config/zen/bli_cntx_init_zen.c b/config/zen/bli_cntx_init_zen.c index bcf793cb8..09ca2dee0 100644 --- a/config/zen/bli_cntx_init_zen.c +++ b/config/zen/bli_cntx_init_zen.c @@ -136,6 +136,7 @@ void bli_cntx_init_zen( cntx_t* cntx ) */ + // Zen optmized level 3 cache block sizes #ifdef BLIS_ENABLE_ZEN_BLOCK_SIZES #if BLIS_ENABLE_SINGLE_INSTANCE_BLOCK_SIZES @@ -155,7 +156,7 @@ void bli_cntx_init_zen( cntx_t* cntx ) bli_blksz_init_easy( &blkszs[ BLIS_NC ], 4080, 4080, 4080, 4080 ); #endif - bli_blksz_init_easy( &blkszs[ BLIS_NC ], 4080, 2040, 4080, 4080 ); + //bli_blksz_init_easy( &blkszs[ BLIS_NC ], 4080, 2040, 4080, 4080 ); bli_blksz_init_easy( &blkszs[ BLIS_AF ], 8, 8, -1, -1 ); bli_blksz_init_easy( &blkszs[ BLIS_DF ], 8, 8, -1, -1 ); diff --git a/config/zen/bli_family_zen.h b/config/zen/bli_family_zen.h index 01544e8b5..526e3a8b0 100644 --- a/config/zen/bli_family_zen.h +++ b/config/zen/bli_family_zen.h @@ -42,7 +42,7 @@ #define BLIS_DEFAULT_MR_THREAD_MAX 1 #define BLIS_DEFAULT_NR_THREAD_MAX 1 - +#define BLIS_ENABLE_ZEN_BLOCK_SIZES #define BLIS_ENABLE_SMALL_MATRIX #define BLIS_ENABLE_SMALL_MATRIX_TRSM diff --git a/frame/3/gemm/bli_gemm_front.c b/frame/3/gemm/bli_gemm_front.c index 610c86f24..bb6f2ee3b 100644 --- a/frame/3/gemm/bli_gemm_front.c +++ b/frame/3/gemm/bli_gemm_front.c @@ -52,13 +52,7 @@ void bli_gemm_front obj_t a_local; obj_t b_local; obj_t c_local; -#if 0 - gint_t M = bli_obj_length( c ); - gint_t N = bli_obj_width( c ); - gint_t K = bli_obj_width( a ); - if( !(M && N && K)) return; -#endif #ifdef BLIS_ENABLE_SMALL_MATRIX From 4158e7fffef676882ca4401712de8237679fb356 Mon Sep 17 00:00:00 2001 From: "Devrajegowda, Kiran" Date: Wed, 23 Oct 2019 10:33:43 +0530 Subject: [PATCH 105/109] missed changes while rebasing field's SUP code Change-Id: I560b93c42901ca2bbd4c22e833f55ba884a38a50 --- config/zen2/make_defs.mk | 41 ++++++++++++++++++++++++----------- frame/3/trsm/bli_trsm_front.c | 8 +++---- frame/base/bli_clock.c | 3 --- 3 files changed, 32 insertions(+), 20 deletions(-) diff --git a/config/zen2/make_defs.mk b/config/zen2/make_defs.mk index 404df2a19..832681ca6 100644 --- a/config/zen2/make_defs.mk +++ b/config/zen2/make_defs.mk @@ -33,32 +33,41 @@ # # -# FLAGS that are specific to 'zen2' architecture are added here. -# FLAGS that are common for all the AMD architectures are present in config/zen/amd_config.mk -# # Declare the name of the current configuration and add it to the # running list of configurations included by common.mk. THIS_CONFIG := zen2 #CONFIGS_INCL += $(THIS_CONFIG) -# Include file containing common flags for all AMD architectures -AMD_CONFIG_FILE := amd_config.mk -AMD_CONFIG_PATH := $(BASE_SHARE_PATH)/config/zen --include $(AMD_CONFIG_PATH)/$(AMD_CONFIG_FILE) # # --- Determine the C compiler and related flags --- # + +# NOTE: The build system will append these variables with various +# general-purpose/configuration-agnostic flags in common.mk. You +# may specify additional flags here as needed. +CPPROCFLAGS := +CMISCFLAGS := +CPICFLAGS := +CWARNFLAGS := + +ifneq ($(DEBUG_TYPE),off) +CDBGFLAGS := -g +endif + +ifeq ($(DEBUG_TYPE),noopt) +COPTFLAGS := -O0 +else +COPTFLAGS := -O3 -fomit-frame-pointer +endif + # Flags specific to optimized kernels. +CKOPTFLAGS := $(COPTFLAGS) ifeq ($(CC_VENDOR),gcc) # gcc 9.0 (clang ?) or later: -GCC_VERSION := $(strip $(shell gcc -dumpversion)) -ifeq ($(shell test $(GCC_VERSION) -ge 9; echo $$?),0) -CKVECFLAGS += -march=znver2 +#CKVECFLAGS := -mavx2 -mfpmath=sse -mfma -march=znver2 # gcc 6.0 (clang 4.0) or later: -else -CKVECFLAGS += -march=znver1 -mno-avx256-split-unaligned-store -endif +CKVECFLAGS := -mavx2 -mfpmath=sse -mfma -march=znver1 -mno-avx256-split-unaligned-store # gcc 4.9 (clang 3.5) or later: # possibly add zen-specific instructions: -mclzero -madx -mrdseed -mmwaitx -msha -mxsavec -mxsaves -mclflushopt -mpopcnt #CKVECFLAGS := -mavx2 -mfpmath=sse -mfma -march=bdver4 -mno-fma4 -mno-tbm -mno-xop -mno-lwp @@ -68,6 +77,12 @@ CKVECFLAGS := -mavx2 -mfpmath=sse -mfma -march=znver1 -mno-fma4 -mno-tbm -mn else $(error gcc or clang are required for this configuration.) endif +endif + +# Flags specific to reference kernels. +CROPTFLAGS := $(CKOPTFLAGS) +CRVECFLAGS := $(CKVECFLAGS) + # Store all of the variables here to new variables containing the # configuration name. $(eval $(call store-make-defs,$(THIS_CONFIG))) diff --git a/frame/3/trsm/bli_trsm_front.c b/frame/3/trsm/bli_trsm_front.c index 38af5388b..eb88913ea 100644 --- a/frame/3/trsm/bli_trsm_front.c +++ b/frame/3/trsm/bli_trsm_front.c @@ -53,10 +53,10 @@ void bli_trsm_front obj_t b_local; obj_t c_local; -int m = bli_obj_length(*b); -int n = bli_obj_width(*b); -float *L = a->buffer; - float *B = b->buffer; +//int m = bli_obj_length(*b); +//int n = bli_obj_width(*b); +//float *L = a->buffer; + // float *B = b->buffer; #ifdef PRINT_SMALL_TRSM_INFO printf("Side:: %c\n", side ? 'R' : 'L'); diff --git a/frame/base/bli_clock.c b/frame/base/bli_clock.c index 35f3361ef..f5bf2c49f 100644 --- a/frame/base/bli_clock.c +++ b/frame/base/bli_clock.c @@ -59,12 +59,9 @@ double bli_clock_min_diff( double time_min, double time_start ) // - under a nanosecond // is actually garbled due to the clocks being taken too closely together. if ( time_min <= 0.0 ) time_min = time_min_prev; -<<<<<<< HEAD -======= // To genuinely measure time for an application taking more than an hour, the below // line is commented. If wrongly measuring higher time we could always use previous_min. /* else if ( time_min > 3600.0 ) time_min = time_min_prev; */ ->>>>>>> This is a fix to floating-point exception error for BLIS SGEMM with larger matrix sizes. else if ( time_min < 1.0e-9 ) time_min = time_min_prev; return time_min; From 97a4236c820dec44ad2369ab5c1c0427e130f721 Mon Sep 17 00:00:00 2001 From: Kiran Varaganti Date: Thu, 24 Oct 2019 13:57:55 +0530 Subject: [PATCH 106/109] Matrices are not initialized when inputs dimensions are fed through file, now these are fixed. test_gemm.c contains matrices initialized for file-based inputs as well. Change-Id: I4c3625a51dcbf64c99f56f354dcd898e66035cb1 --- test/test_gemm.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/test_gemm.c b/test/test_gemm.c index 2d650260e..0ab9b4c1b 100644 --- a/test/test_gemm.c +++ b/test/test_gemm.c @@ -147,6 +147,10 @@ int main( int argc, char** argv ) bli_obj_create( dt, m, n, 1, cs_c, &c ); bli_obj_create( dt, m, n, 1, cs_c, &c_save ); + bli_randm( &a ); + bli_randm( &b ); + bli_randm( &c ); + bli_obj_set_conjtrans( transa, &a); bli_obj_set_conjtrans( transb, &b); From c3d4464f03018188f460f3702a05830decb7d1b9 Mon Sep 17 00:00:00 2001 From: Kiran Varaganti Date: Thu, 24 Oct 2019 14:56:04 +0530 Subject: [PATCH 107/109] Removed extra 'endif' statement causing build failures for zen configuration - Fixed now Change-Id: Ia7f164209124ffae5c70e1ff7c3d131cd44b9294 --- config/zen/make_defs.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/zen/make_defs.mk b/config/zen/make_defs.mk index bfbaa9871..f7f84aee2 100644 --- a/config/zen/make_defs.mk +++ b/config/zen/make_defs.mk @@ -57,7 +57,7 @@ CKOPTFLAGS := $(COPTFLAGS) ifeq ($(CC_VENDOR),gcc) CKVECFLAGS += -march=znver1 endif -endif + # Flags specific to reference kernels. CROPTFLAGS := $(CKOPTFLAGS) From d21c7260030150d1c23556a894db6922a28df908 Mon Sep 17 00:00:00 2001 From: prangana Date: Wed, 30 Oct 2019 15:26:31 +0530 Subject: [PATCH 108/109] update version 2.1 Change-Id: I531fe8005f63ad138077320c3f0b03a05a7c7dd2 --- so_version | 4 ++-- version | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/so_version b/so_version index 15d6c7665..79d9ce5e8 100644 --- a/so_version +++ b/so_version @@ -1,2 +1,2 @@ -1 -2.0 +2 +1.0 diff --git a/version b/version index cd5ac039d..879b416e6 100644 --- a/version +++ b/version @@ -1 +1 @@ -2.0 +2.1 From b5475f527db46ff1a867b9024ef4f32dc92cdbc3 Mon Sep 17 00:00:00 2001 From: "Devrajegowda, Kiran" Date: Tue, 12 Nov 2019 13:59:26 +0530 Subject: [PATCH 109/109] Adding context initialisation for SUP kernels in zen2 architecture Change-Id: I9de533abb039d0dff348728be51554cc53679d10 --- config/zen2/bli_cntx_init_zen2.c | 58 +++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/config/zen2/bli_cntx_init_zen2.c b/config/zen2/bli_cntx_init_zen2.c index 25eae4866..452e2426f 100644 --- a/config/zen2/bli_cntx_init_zen2.c +++ b/config/zen2/bli_cntx_init_zen2.c @@ -38,7 +38,7 @@ void bli_cntx_init_zen2( cntx_t* cntx ) { blksz_t blkszs[ BLIS_NUM_BLKSZS ]; - + blksz_t thresh[ BLIS_NUM_THRESH ]; // Set default kernel blocksizes and functions. bli_cntx_init_zen2_ref( cntx ); @@ -135,5 +135,61 @@ void bli_cntx_init_zen2( cntx_t* cntx ) BLIS_DF, &blkszs[ BLIS_DF ], BLIS_DF, cntx ); +// ------------------------------------------------------------------------- + + // Initialize sup thresholds with architecture-appropriate values. + // s d c z + bli_blksz_init_easy( &thresh[ BLIS_MT ], -1, 256, -1, -1 ); + bli_blksz_init_easy( &thresh[ BLIS_NT ], -1, 100, -1, -1 ); + bli_blksz_init_easy( &thresh[ BLIS_KT ], -1, 120, -1, -1 ); + + // Initialize the context with the sup thresholds. + bli_cntx_set_l3_sup_thresh + ( + 3, + BLIS_MT, &thresh[ BLIS_MT ], + BLIS_NT, &thresh[ BLIS_NT ], + BLIS_KT, &thresh[ BLIS_KT ], + cntx + ); + + // Update the context with optimized small/unpacked gemm kernels. + bli_cntx_set_l3_sup_kers + ( + 8, + //BLIS_RCR, BLIS_DOUBLE, bli_dgemmsup_r_haswell_ref, + BLIS_RRR, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8m, TRUE, + BLIS_RRC, BLIS_DOUBLE, bli_dgemmsup_rd_haswell_asm_6x8m, TRUE, + BLIS_RCR, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8m, TRUE, + BLIS_RCC, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8n, TRUE, + BLIS_CRR, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8m, TRUE, + BLIS_CRC, BLIS_DOUBLE, bli_dgemmsup_rd_haswell_asm_6x8n, TRUE, + BLIS_CCR, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8n, TRUE, + BLIS_CCC, BLIS_DOUBLE, bli_dgemmsup_rv_haswell_asm_6x8n, TRUE, + cntx + ); + + // Initialize level-3 sup blocksize objects with architecture-specific + // values. + // s d c z + bli_blksz_init ( &blkszs[ BLIS_MR ], -1, 6, -1, -1, + -1, 9, -1, -1 ); + bli_blksz_init_easy( &blkszs[ BLIS_NR ], -1, 8, -1, -1 ); + bli_blksz_init_easy( &blkszs[ BLIS_MC ], -1, 72, -1, -1 ); + bli_blksz_init_easy( &blkszs[ BLIS_KC ], -1, 256, -1, -1 ); + bli_blksz_init_easy( &blkszs[ BLIS_NC ], -1, 4080, -1, -1 ); + + // Update the context with the current architecture's register and cache + // blocksizes for small/unpacked level-3 problems. + bli_cntx_set_l3_sup_blkszs + ( + 5, + BLIS_NC, &blkszs[ BLIS_NC ], + BLIS_KC, &blkszs[ BLIS_KC ], + BLIS_MC, &blkszs[ BLIS_MC ], + BLIS_NR, &blkszs[ BLIS_NR ], + BLIS_MR, &blkszs[ BLIS_MR ], + cntx + ); }

    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£jE3%R+R+DU<4?`)G;7{fsq2 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

    {bo*YMwH$wX>^}a}g(nEd;PJ7w z>Vw7k9>iP}ArKp7Spayl88()igNd3?(Ts0BaBh9REAKqtQU3{KXvKVf_5ecz_(-$s zhh_72gzaU9&Hbj!tjLRl8(LW4?rsQPfbVSd(T96M1l8TQqQ7;q4Khh+d@q2ZEUDSm z`Owk+UbPZ1b%BmNVtxVS`@!s-4cODggsxsI;wrjO+THH2MoB);|AL|KF@l{71XEZ1 zZZGohDAE{7OqGV<9XwybVk>A3-bjY8DhrNQyprL?)uDY#@zFN&kR&!{I80u)Lt|?> z;f3;%6b)H5iGsK^P)TspWPJD`F#@J=|BD-y60{jgzcO_t&+s#Gc9tb+zs;(ZF;-}c zL)0JHf}JTt?eLw|zssAM@pBF&X7clY7#V#6r#R5d2F7FGK(XIoPGRFt6sNh&hB0zle>KKjU`1#C7 zJ4J%{fg0d614PO8s=H}`Ydo^9-oRWB`IDdKq4iza{TzEzVSUe56EHjvdX?_o;16{+ zA!A%gF)#2xMUvn;jKRBhQ}C^rhdf=={-aHGeIa9?#oUBPx6L8<@dNgK2>3AYVDFQ* z6UMqTVL|4dNkKSP4&NdK0ZyI)NjZ%G5QZuoA2~lffVGVi@uq6(ADJ4}15W<>=sKFun@(i)FEkC*f9G3<$oKKM{5=T!Sg-x&ToDt%Hiv+s5`7}E}o zj@vM-fw5O`_4agmu5JtOBR4I&GV-q_4;Jkw*sB32*#@5L4>}Ht&X6Fd?~J3{pZgaY zk!B=Qhl<>}<0oCtP_#Jh(7NmX$alYWVq3GuS_>lbFu!#Me&oBe{a01#Y4;4A)v>o?c%g%yw8Y;jeCO2to&ba~oLZR&UBhQTD$%jDx z+d$C7iTYkwMcf!$fnx~EKZgmMS?7_i4)MC$tFbtnNUJWeq`=R8`M4Zig)m2RQec(i z9zmXW1$(cdo?e5*xvCe{kZw>+3Q(0UmJJo4q#R z=n6(6v)*Mu0os-XTQbTKbeK$l^PQLRvNSSzi~aq!_Gq4fW1hEu9Pm?&yblhgE)l8~ zuke2V{=N2NOMml3EUzzr&`j>PE|&gleL6oU!V^h}d!9<)!HMD(c;IjFXHxD_$1%3W zA}r9I;5j?mfNnvMgWxF9N{IRL2h==1hy-obA1gv%DB2vuGb(nfyZI&ww$RZ!XiL?e zUn5D{BgP7GD{DmAVib`_L+`Adc1IS`@%fYA$BGK>vU0~-d$NeU$C;!3Bu{WyD6u7u zL#!;vc#gN;>jhJ?b6JuH;kRRV1pfEfS$Oc*s`vCj3i%-LKpjwY=2_F9jKZk^WggrU z9}J8Ndtyyy#VX8%IFH=H@J)=2Puy z#?Z=!|L3iHB#DYgWWh&dfN_8RD%dczurTqw)}Ka5GMEvxmCzwD%L6m7_hy{v?!#{h zHoPpp(%P+;%_b3EEUSEpcc(*b@+c#p6$4t>Jy1Qrn!bOYrD$ZCKHgSPC6mbvr;ey# zCb8MG;s~KxGz1dL*o~S}m=WN`{z=SAmVto_ASsc?%jj|Dcz<0_**cU)fUMi9Hi?vi zkz;TUn$s*_@`W(UB2$yF0*_3+6q~hesbKE9c`C@-z&v-H%L@qc+PqzUBz3YiuWjG$ z4d$=wp0k=0Zpp+KXSVMBg*QFR7f4iou@RD(?w{Czcmo-oOpL3jd_+aqXIYa%i_(I3 zbS%o+TD4K?5uk9%EJ=xZ;?yMs_)#jw9TcFvJlSfY2J(mo86?;e-c%SMPxzkQytxs7 zm*5t3!d(kcA$3FD*T>`X_CJ zfd-v*Dv-q?lSi4)H)xl=^`-}+vZV1O17Cs3s(qF(!P%cbG8s01oz#ybiJ`1T138D+7_l3dYjO$U&EOV|8YJ!{=9?+K{kw2+t9 zxSA42S#C}iULAEFAiXkeqFTKe=Kwb5%&;WzZSaH6X6s=>NDckSamyDsRh{c|#(4IF z7$-+^6S}bfY>C(9U}X6yEzW*s0Oei)RmCNrS%6kV$tONwfef;lpyL;k3AyK@UO1Dt z*eOz|Z-el5G?4pBk$#EywBp8O5Hx!&C)d=ylkDG|MG4VY_?=#F9vaY!>yUx=P8a@d zx;xr`*yj9m#s2y2NpLK83dR683%LLZ{_xCoe(D{!9Hvi$3mbh>RHUx5_k&(U#D%@E*QhO$XZ^f4U-N?Gm2eN^UF0hLh z%>^l&Sywo)p7^tu-wVvskD8iqq!?dtTm4!(u>L;!>M(O6facli4RTehEqS>vDsYhl z?_iS)NIiAg#g(lWw-i(rj^gG1Js|p2nVMWSkA}KKDP0XBtAhi%7-7LEkrC6N(038(-(Ed65ppu@2R0=gKWJxpL_&d9FrT6Vpfg9lOE@Ta*l=Q+3f4H5w^~?sa2gDNDL{BVM*(@rNStPd2V)f8F&cNnN5*!Fb|~T{Cgi+5xk(o)%2e^Dy$O zQ0nbgLsoBo0Xdx5)w|nx_vOukJqZ9fAVM=0#x^{a({WHNJ3SZ z*qyIOZ;p%I8O>BJXQVm(MB&J{J)VJNaD97?3JEpG}7(CM$$tYJ!2eFB+|^03;@O~3c|0broX z1z7c}GJ`$!!>_0nk?w&x#U2wjlT5s)47SGKH4gUXJ<5C&&*L3khIGqLF4Lv&{6y}{CwRG zXsd2C&L$y4M)PhkGoT`rpx_xfKW+A2@|=LTTzuzT+2+SZ0f9ct$@Q!X9(+fh!F8hq zQeOio`m_N2VhclVf6BXaXMwb;nI*gBUzpHq2P6@7T>LoJ+=A@|Ft1AT5~a@jX3l^r z+(&RXoJ`*mTNN)pm#GTpat8W1E8N1?6i)+gClzzNf6_wqF}(na?#B;|NZ$+%<(bA} zj-2Vl1+rwaU~+7^;&r;nyai1EJ|tOR973q-$38a1UY(a`DC)H@*7RkeI|hXO*hh>T zdS3ylBJU6#0?N3o5`ci=zN5r)7r62mqF$b>FQqh+kxLtX%kpyycp-eArj8WZeNx>; z6ipkn7?H1}rw0-epco8Hb2h5lx$xdUGd+6v0$i5O$SN`izzfEA01_`RI zKd9PkWBGou@80^N58emeZjpymu>z+mQ-br{7l zv{nFHIpnc0?D1cz#{mgsy3Hs?&CjEuqbY0i!R*pNVo1&JrD7{399iG#NP=fzQb>vk z=d$=iFYt(=ZflWjFb*i=Ki@>{(t&!mHT3*VE%SNo`;?v*1q4JWKBq6W& zQ*DCLcY2VHMrJ_0Q28V`OfLHCdgsB|#wU($VCsi&NE7DrtPhNR7_y`W4-T(Sj6qnA zijL+L@FIth>?tDOqtADBR#wewye~PHhZy4fV~}d}$N1!Xe7a|`sIp@c zm!`;2C_8<9V}qClXna$1d_Cz+~Fi$ATX*8{HBZ-jqE#|wc-_B*W>?pQdmV9!(q z4#WT(e_L7(v-5QFEm9PX0SWBh<_-K{Nz{TC_%;}*bs7EiUBat$c){#q<_HE zva^3u)_GJp`1E{CSjF!H3#Z8Y5Gf23f=^7+16a&`Ky3(|d2jIAvKoo5Ymr0134>mB z|L{xo%8yQAwfjC5tX6~=1*j!_z-w0YU~#{#i>wHW0=g3A&k~U=e0|BmD<49@>4FeM z!H&)SmiXw42~sy7=X(}M?YhG{TEeE++zO03mKqo zfa=(E$$$dBE%+!2y9rFcNC&$oKBKyy^xI5kLmiNREItDu63a!Y+lMccp;#_=;k4I~ zH*YR#^KjM^pTN+Wv_{c*7^2&p6h8K`KD`xE08%_Zhb;k zRC05`qOUsiP|=3dP*{!03+e`Hm<+%D zrrCwE)&P2kvUBIFg)b#)rmr6;7mCAXGjt8LUBLRK!;=eHH#8A|HqGy>Z|Wf zGXN}y1!xJ*wR+mgP3UL~wAikg2q8Qk+`)1qr1|AhE-jpxjX;WePYtReoUr$_pP>%nvyBD{he`C>cY?c)(8 zz_1mDV|^aIg>(AgsxC>{me6Jc*27>TW$m+rm8iVZm77hKOVD8fG`$lo0md{WR%!8c z+U{=(HQH?P*t}{)a>C0If~yz!KKVWmR<8S53VvR3zD>@dUPxky1i9Txfb9iJ8iA6m zp$P3gl%PCel=aE!UQ5Sv_-n(O&d?+)3yXq^+apzJ@&4Ir^W@^kubvMoq1@%){w_s8 z`iI{h^p~h*BY^(5x3_HpF%Of)2`itxcRaU9ccA?~k)I6Ma)L82%2p80osr;+bkk~J z>m&T~SpvH&dSvbJ_YlhDH%X!>H#gn64R)q%Ce2;mW*TpjMH{C2;9 z+}kop)?ReDKVknRZCP@3{VvfV?(pjxKkvCITAwyfy{rZ7iFXFIMV8%De}YIS@}+1wp1i{x^X12d0K5+N;|%DB4!@HhK|dA$ zB!;6XM(y_B^77w+oyYd%z0nt+e^>eH^owQaSSUevLx@2JS#g8KpU-@(abY;X+m82O zTWY8t^s6(aF0j&uOiW*HD$Sl~NpnTKGM;qeWPRCsarXUuJ2Ko|CVGt*Hv+9Ab`U7r zhQGLGFiHU4P!*R${78i>?~R-B5k^ITd;(DJJb>r}NL2;x?UVo+i4sz01~+bU{s5M| z<4{DJ9JBQ~`WYbBWgQM7xL@*so730V{Q9&I__f~L+!)kY$n=eCxrv$8SbS)?cjXpT z?~A^|gZodLmGiD2zp3=TvU_{`K~JWgtHVb@mxva-#h#BJBNayU1gSiXlm(6YAdJcb zy^+T7IZKW8UK}MlWrk)GV2s^-)_G9Wk=-18>tPNw#S5=Jto-lv9Z!GGpZ8!$PEIB% ziiqV2Iz9O!B>o@tkoR5yf36JRtjR^TJeP_$jIsU%AW6vxtQWnk$(zf;^yk#P)8V$K z$xgfa5Tdi>%v~iwIk~*LTC55-QSR=odkQu5pnI2!rcDHJEgQexVvnM4C^1uAsQ|JR zI>H0RVafF?(L6!Nc$`D|h>;GpPF6zk` zpu-~du6?aC-Qyg!tp`CEk7E6E@#B&2sYTzSP$NB&dKX2fhG0es=r~ie6a>?f; zQ!+5CP&)cjoreP{l)no(Y${SI|L`GnVtd5)upCfLSBT<%UQi&^bdM~ ze@EO`k|64-o%3=$h}O&p9{G=Zlaqu2e=0F*oGGxpHZY)s7r2T_{5-fvD?riq)lUU2 zVlXaCZ7zf;r~UZFWbjBtjD~_jhWW+19q;t9dp-!$2!dGX6^Sa#BvdSDJreB^GYS!_ zP+WwNGV&c!L~C6^h>#_3E#u||Ca|> zFy$jInuWv7`i?6u0N%!bQvFIJU=*kOgj#xfP>mWL^Zs}pL{AYO)YMy;g-%cS`B){& zL&j1=v4yWf_gdt>*Hc#KX@RGtbW1xzE(_nba#;m>0FMapnX0XXH)J({RQ6YT!dMHy z^fEi==xY#7Y_{fA1K4zy8Z?e&*0_zx($80l5hX%lio`*Xkd>7Ki>*(@G{M(9Sj}I& z>2kR^v+mbHn?yDf-T+eKwzO6R&vx5wP}0K{r!3#x;g~IcTS#lz>et?iruWj5Nf(Br z4G)(}E&lQeb=HDF3agq{PY00UB~Up@HoV@zp9 zm2vZUyq_81=YZG}r&6u|7`%=n-x>?V)e{MEUXK@>`E&$c`5ZI?lYnCF7}6Fu077ke zr$qx##DDdUrTy8&K#qtf`@&bAUNl~8IMva!!!=ik->kdNH39PrhOID{_^l~cZ1&R2 z!uP{(55wwR+P5NFWQ}$WM|m21eMY^IorhFedJum|tg!}l@q&Xe(#KMWCtZIzp*r&M zi;zl)Z^!kKdcci0RP;nu{GNpt+P3gmfEPh7x33wRB^(;&o&@`Jp?I-bhqg$DujE4P z--8w@+PHSjCCa5_(m48-3`9?$?E$(vh%oAY0jz&lj>AV(=qBEP%4|C4J0Wyhx5+hk zy|aXZLTx%lRh^1;HO9YISF(QiGv+~OYAQ~xx06j_dC&QZdkDej4YHoKFI5QW^*Ao8 zhy%>x_44W<5`Aced=!y2iD48$4|Zj(BJ-RG(mILK6%5n=qnZF!I`+7o^>q$>Iwh0H zWm5UeW1Vthki7zUu7?P(DnCHSl0qo|vM#_Vy&8F3Ubjw75S0VtOZM~TKRuyLKm&0W z{#kjEWvR)8t64T;q$#epwlD6ha@xTKDXu<~5|Ch*@`#*Gvwx*&^)Dph#|US$$pbS@ z#TXrRw53-_e+aH$e}07OZVGf9YN6&wg1LERIpN8rTO`f|OFY-K zym|mlxz41N=MnNz$!-xdT^@v+_p(9%&Rxn8)8SuBt+!#Qy?)ckWu-{FBS;Ry5j!Og z(gJbe=67x6#;n*pGVmzvIiE}tEn+ea%&unoUM=OAdIHkVD%8TTpKQ1v^zM^>*Hzt% zE0>m3S^~^Ugz+y((~$wQ4PiqJB1QypI+im(_6R;OYc66u7myZGo4(2chP?-oONty@?#q0%fA3O)?gq35c}e-Sv@DTtF#H0csfWY@ zkM#<*i+-?UT@ZuLxD{*FijgliimW)JTk9H3NzTB)iQ7Ci!-BLE^Lyxj;;^I^bPxSNv70WOqUVIhsH>Rei!$AlbsT1c7l{L08RMgN&Ztnamzmo?f zR}mxU#aQOi8O^T>Ez0&;UkMIofl2V$DOO@)w%j6DVEXDGoa@{4n3NFz-WUL-?y{6>dc z9n5P8* z%nWppK(ngzB)bG_2%ZA?FIsMc2^4tcn!^qEXfG$#!HVDgjMe?Zxa5pl2eo#0ulY5^ z$>OY*!9TGS25#cV@A*h2pguw+oRA^k)QiPtN_GI;lF0rA$Bq70m=*vv^s^f)ETRi$ zdub1%xL*A|A@v;AQscI@&aj$8p|O)zLF9>th`b0CVz}?20o|5;QMS#^jBQoXY0JQ% z*l!RV8lO2>9wdT!8od_tt|db%7Xf!Y?%W7!c18#C;e8xXonp~O_ z?R#Gi3NUfc+CHp^^Wj5Wcs8a!p4SLTkZBfk1k8|&I!on(@!yNy4WJ49Z3mjzD4==Q zLqziHw>~j zOP!_eta^H75#tQBW`I)+!2qz!gdBG4f~)f~1w&=zMy8&u zJ(p!Qc)f5c4KEKYIenkt@^glQr|M=-jezzzUt=JR=>&!X z04fYbaLmdo0VWl2hwh&8VU5&TAm*5-=(kkg7ZwhmX^Z_i<*WRacdt8n;5tq|a_?Ns z_MbEQ_3l6tbtxcm07=}J^W>}3qXLoc_Y;w|l3r%1M|kwVH}9qac6CaOgh+G|t(8@6 z*x;JMJfiSZ#aKi~Ux<5I2_sT?ID`2M2T~k3;|yCIxwu$T{=4O-P+gUu*~7X|=mFIM z&@kKXwUqzh7>MAA3j@Ja&y8t9L~VL;?mqx(c8o5>#(DMENA1GduTBg zmA_hmzHaR|Z|!IZAnXWs}=|G64IMB!1^1l>G0@&2L*^0_frZU}u>>dsSgbak

    EQ4fdz7=fOUNf$#dcH4auC@>JgE20`P^QE8wDfW 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 diff --git a/docs/graphs/l3_perf_has_nt1.pdf b/docs/graphs/l3_perf_has_nt1.pdf index 4ce611e57074b1f181f89598f8b175320d08e336..64da9d1603c4e6087803f35c45892fc58caa1fd6 100644 GIT binary patch delta 35658 zcmY&fQ+S?Tux)IsY1G(OV<(N-*lE-_X^c0vZL_iU#l{yjwrx8({m*l5&dqveX5((} z*|TQt;S9*;49HklxNoeSY#i+DaX!j`jkHVF!lZ#ihD$;8_M1hE5hPu&BSPT-@c7}=_hFE8 zGzPp~ggx{2sdu~iUCB_!*BtAts;=9Z z`DtI?PAR+!krac8=Z`hJos>nv?|vH}0^0R|o_8i25GR4zY0-2euQ1N2m^e@3vd>cQ z#}9TbuT%pu;c%U=??cQVPe3?r;K$P#@O1t1aoN}P(c%5XJfCC?jFSiy#u>l-X;a}j z@%XjZiGDR~Xv@G4a(r88h?(EdB)<>w!#;T|ZEQ{(`(~9~caYBVS1OV-hHGUB(%|-W zF*qhu$*x?{g_oY6SMS$5YSsjmMTsnu;K{AQzH(-%St0A!#?6i5nAqXaX}eJ0(3+>q z#;<>6YP`L6d7#iWfpbC`4az%>IThKbL!$PMnJXIVg*qbY554F?}Dlh04gJT1q zo2p69{*Q>Izf#0`yTN9L0$z#fRui-v1pZlPV|K^C#tc60U4ffsz||^xL&xWS$1{tB zHkj3X++eg{fygt4eM31X?0F;c$643w6`Iid<6Xr90)bCFfce=H`Odo4E36)vOp+OQV8nTaLX0jj{*uopyNpzBC`!G!5|7_%E zwC}?8^Is~Ffr|<^^J)~+JCljODyx%A3{u|M)zryHpG{rVL%g2~@WL^uJkY#O#t*a2 zOx^Yt+0>Db3KGLw6WfxE90!rEX{;DS1nW3q2;9t7r-F2iNocpQ%$kb}pE0V5#W2L* z6HOX5M5$=3WqKEltC}$27K9>L6nWt+HYpj>iLS+I0QEq;I#NO=WGe*s#CZ)2{oyT3 zO$j$dBnY%0Dm+P#J%E4z@cBj)S{ND>C!*z-*!q#Sa_VYV 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 diff --git a/docs/graphs/l3_perf_has_nt1.png b/docs/graphs/l3_perf_has_nt1.png index 69d0224ed4f50485aca0b3020118df4182db16ab..12651513ffc8aa0417c5903c8198400e376e9bb6 100644 GIT binary patch literal 82950 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 z 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 diff --git a/docs/graphs/l3_perf_has_jc2ic3jr2_nt12.pdf b/docs/graphs/l3_perf_has_jc2ic3jr2_nt12.pdf index a6978f34559415e4b53c5eb8fbe644a274bb29c2..cc27d747a3bf76e5e329d198aa2a727df2401335 100644 GIT binary patch delta 33727 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 delta 32136 zcmV)(K#RZOi~@&%0+4nKFgGzaGBY(fEig8bflPl(&uzJp9XQWlafj`Jj`)5Idf)AU~yyMIORf5w0RR(_j*{KKEV{Ns23=U><3-|h`I$1l!D zjNb<*|N0mCS5BM>8s#7V^xa?mVk{rV!=e58yZ`#%@JIjsJNM;3p}+qdO)13U{g?mu zJ8QoD=eK?T{!%}f#`kk#H+pd%zu}<-h(f4lDm3zWlc@fA~+|{cnGessD6el|xI;no@tm zNBRm!U$^$|0Eru4^8tp-dv~2pngVhclAN)xlFv^2&-XgEsl3j9`>z+f_3@S5*>C^( zV#mh4&Ti$$`%-IO-l4}7Z;F$2IK)YJdR3g*@en7~?^SV)C0|nb5-QY1o3pL{{Fa{D#;-!_`!9d~)A!$hT;0%n&ip8Z7mNwZkbL;! z9OjZ8+KnZoL)=nEn@a^yhh+WKRqoC7G9K%1upobI!#g<^Y`qIL2ZBW@T-j(pKM_}deE93xc zB5iorBe2#wKr$98#wcxg7uJJcU&i1~gdc)nnd zMSkogZFncYOwC!^09LqZ%2)9C&#}V|6!>j?BId|KR{CU85jQ!As zs)7H1>7Wg4P7}D@2HYoZTWrM)0r2I-ZOgA%jCUt)*YtmiG#=pd9Jq~>5udQ+X3o&K zT@2(N3msfJa63U{dB|CRz; z3JZem*!HnPZ4X(nIP;^(iAHT7uzT>evUdk+Lw6|H0v1Qzj@o=>z+X3!)u`nrYQ=~cmVbR+ju9m)PN1|57_3^ z9ljl;=YVar0XFcOc)~W$V{C$&eex5wF^Ir(F`97THamipqz3Z}wz0$%vRE4CDcI(` z92zmC1Ge!>N*xb_1Ge!_mp!(3E(dJmo%otKLE?Xb+I$RM;XsWCYUBG_{13Bp2WnHp z#7J-!+a0#?7=R9!Wp~0h#lizCG4}(u`L(kV-SL2JYD2+Lh)&oh0%q)WBVR_rHXieU zUx-OQVA}zHBlICFGuN=~0`9y}T~o{lY@;m$h%9u51Gn)`XhTp5WcO>_#(yNrWc4R* zbDV!bDjb9Mz-pML-60|+ZFrHJ8Zmq z>f0H6D>@&{iQLZNGFNTWv9z`gji~SnDsriCn}3JJ!rzxu+lJzgkB@Db58QS*=OA6s zvciGeSjs|hYY?Vj+sQV=Z#ACUw(OAFcb$f9ywY2Pb!x-Z+BSv>UC&{<2W+E1%gKNA zTY-jc+`^%zn;^EN4%^fv5;ci>pthrC905pO6JKE)k74^poSgN5ZFyw`BDOXK+t_wI z+KGAxY@N|d?{ z1rcfs6w7d`+qiK;!ZFu;s@wPv?wfyRHQUr}-sP|nTqy@`<5Cba)gh5Ct!_h>Lrk@u zSev?Cfz1JjQqyr2ZsV>5aPt62f2!LR!vu=f%&gO^zeVA{8zgI z)vFxsyS}d&R%@pV$HZ>*0;v-&GV<_m)7pNzPLM+GcaC=Z>G}}Vlx5NNFV{I*HR1Nv z%~v_vzruLyDi!vMg9c~oT~gK)=J9su7x9QOKyRLd(`hT8&RR#k#rY= z77|T$dY4423n#1ky-T9im6Lzf{oWf~f~w--6tRcehOEH10{qBu#1L!5M{SH+1P z4{=icUKJ`612?@akDvG{pR`W~EywZQ-ddxdfpj~6! zXmL%2SmEw0#ATpiW87$CeiaJ@623FgurV&QxY2v^Wkqc9frgEFp{+E{0IO?j+xX6i z2d&(Qf>YL)gawYcIQrJ6tS^ZZz^zekV8N~C7mv#(tvy0kg=Tu}_gTwR!~5ifwuIIQ zxp?lgcn+(DKWRguX=8ufXW1R@>bQVPcLDF5_t`+^)#FZ`q-~`;p^--NmU7DvVWT@u z<|Vj278TtYu)U+hH_Otd_)e&+7+9=wzr^>aVW{6{(MD~&+aW{3JLi4YziM`_Hv3qh zg=5@jNxkAq9=TcAhIfwpEZ!MX#tg&+5c0-%%Gau51PfX5oeqD0SWFFKQ3<*6oj_Jk z&toz5grW#fw2>4~RVG$8!V|Y>+eqaHdgX(JKQ?BAJf=S7dtFI~7B5z#w@J zqAWy^v~7f^$xgnlv?&7&pEDI3Qih4mQ@M|^QnD=MWOIL#D@KgU0E0~j@q|!Gf7m<; zbI;xe8E1~U1_7|99MFbLHc%{8xA;zt+H|Z4G)Q488*0;%jI9`CtrTcueW@7YfD1+ldbafKS=d}?c8j5p@ww8HZ9&%#+v_uhHb}%HYxaax~#D6 zJ*MML!qxnMZ4AW|4xJeAHEes*42Iv!AF$2S7^3c)F<8SkEde!!5`=oyuk_m zB#Tj9<2Ju(#YYXU9=J`~ukh1|bzI>#6+0T$T>~$L+mL!lInGo$!8LAUC?OeasC>Y- z6F+|^BW$MzZK3t(u#^tW#wWu`7E(y*z-+d0y=uxkW|NrA)sfdfFq^#rlT)LjG-l(u zU_wm7ZfVFyZ-&I<1LunC445b6zMT*Xu^m+m>>zB91F<<0Xl%Zz7#gu1y~%RyM{#O@ zZ5*_SoGvq+8nk(W;|pM*=}@(^qZ9(7MDTyKt{pvQgU{woJ#_8h*(1)L91dk0-^%l! zUT)=^vQ63$inxuZu8l9A@R4#m2^4BO{~|>K>F@_?laPXdx)Kg$o6IV(mpt`>+GwMd z6F2yHD%*wBEzv8SsEw0=9(Ji6bQ-m>=dAHQ7r&!6MhRiY5z^35p|((yI05^eK%sv& z(Z=Bb$>Q#?p|-;ZLVt~J+fW;Akl~cuFcoTZX-P-5h1Q@=4!b-)R~oeO7?umTEsCcG zZGIr^G@j!pXglmJ>>k(7zy{h}58F5G0otUK6FqEBT^r9~KslOrM^d0o+S21znctx{ zAr-6E%#K5`IH&d^Zo6ZK~OZ z-27fRJDXdKMs8?P1)|*OPL15SauzrA1&!SFAI7fkY_5iG+;H)Sf!+cKbQ6DH97f_B zp2j zCfx<0Nl@uduM$-3co0;o->U?bbUO$t-S1U`N;>WYmG1T;-?>Wdr|_N9;SeX?=~Z!J z$3vV{zgNXcx*g)A`@Jeo(s36j-R;NtPF#k9`1~8*2rluRx|3Ucr|y5{7T>9Qxx{y> zK5p=xbhCxVo}Iz1>g$B3bDHq{;h%32o{8oSs0+BarY}qwQe;p?5Ys8sId5p0CJo-Y zlWQL5=$KAAQKDvj78_Y|s}+Wky(!f0W1ReIg~2r&mqAbIm$v3{o@qhBzQWxqe=`B!pgG|I?RVKu@8+Q1>5Vk1tpZnT?XJB4Bl$u<%- zMP)k2%^TP3W^7Ec`I~pNNx1E{xE^V1{^tE)!)46i#X&sIQ(A2>o+Mr}P=jRxiB9s* zjh61N7zw0NhLV)&+>@!x)rir7LYki&ErwDpI!mQBsYoH3gT{Yy<>qnTO_3G1%@S&# zcu|IP#$vKh`XdOFa{s+8t&-i?uo(fO_sXQ?U^OyV|t;>J?NE2k|ok`akE zNi<-pj|qks@z6Mp%;W5lRD%t`=+hu6+$T=v(IsN^y%w9fC4$9%Y zQb04LQf3~M1;*mj`|O%kjbZGI1%_ea*jG_@BmRD|z|ep8R84K+Q#mRN44vd%^iJ#; z=ytWh6q-aUu13;bQWlshAq%CX)}|~l6@4dz2c<153k)>Fh+Ci&uZ*0P1qM(9vBmyx zZOVG?NWhpL@GIH@x~Yz?>te9EMR=a5ZHhPiayx1>+H4X78nwy3WKZVL@2KqRgyY-3!N!)&`p<94hVCcl54nBz5WW2%WOUIa5WZpTD26kkW2 zJv447y6-sKxfBiD0jp_9#|f%v;0^%*H+bg`+%$hCf>eVq1>Av5Zoy3605`KfRGh<6 z1WyAuI?45d^H>f!n7;g4)O&l z%LjjKqbV>7xFsLdupOA;5Ubm9O~E!(+W2fBUH*V=On}?lXW7IWwu2bJ0VpLMu#GlP zn$(@B&0%8KB%kYn+GxX$f@;vZTT$Cr#&!pOp98f$(-Fjo&ruK5_Ea;t&SG!ZsEw&+ zZ-`RyKyB(}4#-o)Hm*^dvC7t(+7C~K+GKyjyc}oYKy6Q_I4I){+S+9@)3qR%5<3Q22tWr?nk-Sxh3@o zhAYbArgM`y#6X%C*rRh>^or#RZ=iph$}GCUQl@u0x543&ojX--s0D>Fu5y_>RBq;i zA<1>B+;}C9F*47m%1vb!dQWVMuGYEP0shmKL*SX(`gw9XXH}7soW6Q%w$CE1LckM z#9A`sKbhSma&TdZf_KzbH>pR@#&#ym!U`KR0f*?f`q zeB1jC(`BE>_si6-bW`e1d~Sa~U1uF@h&%DQ{d9c@YRazYB#An3W zgOh`<=ft(E#3$Y8aVlnpQGAGGy-j@1{W^f*O72uMw$J7Ly38kj2K6Z&4z5afdX=kU z$Aha<{a)p&q}#z&>3*+rRnl?is&uy(sn11j0WY7yeYPHlKO?iXD}-V%B!jvPbuvsgp~uuWzOV++nklQ zyclH)J=oJ@sw&Z}94LR&@jceB62oGXNlXli3vY8uE-|kZsH3B;CFT*d7=dfN=`xE8J^ z8Cr8qgxV+*FJ?8#pv~apdr2EsN?1%XVrFoqWo`s4tQMI-(;j~YBTnk2nrV??$Vf4~ zH_Br*Xg_q)t<{?LSY9nM?nUSP+8m5==U*){Of$tCdE(n%O;{~5Xv2~>J5^;+;A)Uz z{xY<2;^Z_PYs?Uo- zhK|#Lv9sd#Ua@nQpii__e0vee8p1TlNI-E8ct?_^yclF?m571MFKyU2(;#CR&QoJ- z`N=9a&NRp{!!X{SoCre2#+e2gD<J3*RnABPvkE&YAWY8a*?@f@-rh~tjq5#gTJx0t_IhNeovbM(< zZ2gern|FT=f%58dwc%#ar$%itxH3~;Dko}7(r*V`I8mFa)FeVk_J~GpS%m1Y?c#yj zxXkJD{(i9T;bY;r0F$Xa^=WAY7#rw0)(!i1CdUQ>cwsLg;9` zE(dCRmQ7$9bfGdeY6k|wLEAA6OB8B*?%@Op4e3B_yt86=m=-jwQJcf$C8FhJ(5M}V zUA3g<^rcaoL?9+=TOh24ZBL66DHT(8*rtD{70Ja~%K_VbjND0ThmwMAa+yZ5vbqDd zg_9g94>fGdFmue!flk9VJ|(j#*XB~8VOvC?5I4#J+oTLl#{UsX>Q_p}Ar)r6{*dd+ z$4Sr)xpBsOk-2yvH@0pm5VCUW+eGJ7Byn>(kUNXZo@>~!soReK0da}p)VE2_#Aknh zY2*$>+L16^K{vKDW8-Wi479q9J7?f6t@Wm`JJ9D4->SCbMPWBR1w3ZgyrVRBQ%}dX zET*@u*zM_66)Upjx+m`Bb>k9iS@YU{8gcbEUh6JJEmJ7Va4ra?`4{#!c1;s}$d$H?>d5H_j7(ptqBZ z?up6emCB9Nn5k^aJC!@}SnbDzLT@s99vA2qBfqKKl~JJ>SUpv49k9Ep+$_Oio|LYe z%3WEiB0h@lu5!~uFgHzIsoW|WaZ|ae{CnyR?=)_l)3&r^9-GEpc^*7huS0+1##SU5 zequM1$OJk7x97CRjT4?KaBkYa*0^!zLYWQyc-1O5Gzy&KywM#hcjnPleLo4c%AK&5 zkn+YSpDH(A0Nv-rZl<}lgU{boZe|Ezg7tK2+?L((`uIlUj=b?zS30aKjoT4lcsAt$ z-IhVt09Ys5$*8T!nCARf6d!*I3|7T%fzlFWmob(+GgNxF%9t``>?m%_lwK zu+JP6ZP-QP_LzM+XJ7(Td6!9td}LmZuIRYML?+?*v5Ect|MRDR{kz}&$B$3$qb{85 zB;6BKvQE=!qv{7H3dzBVWEebu*ww~F|MUOxyKne_A9i?B(*!E+lN5iT{4i^8O&r9z z_@p-4p8st1bJ>2gfbQG=?-WN%=HzC7lh4O3y|6AwsL+UiNqqjgj|XI2 z`JxX>T;IoPMp07yh9`fc^UW@2O~6i>BKWs%ZV~*tn@a@0?&Jo+pIhWYW$=Ri35Gwc{QiGm?v=4MwB#|5b(GW$ z_6M zi!e`ItB}@AKac^;sL|MvB_>yvMjH6ql6NB!>oK-4QY(KJ!ZnW6I`3Sw{#ywwnKm7k zI>yK9%PtimF`mFAYGRMWBK1_ywv{N1VpUz#3AuTVO4T%V~~e%qUhZy0+dl^bJ9#5zCG2m6mA% z7K|`fqSMmfNm=tcC0UXWKlKkS8H{O|WbJ=YX1;9&t(jh472sm2EJh89l>09=oR^}pteEFcpqG-F3?pkYr-7bXh%JvS zpAUbaXHfv-+gIChULvDo%U^urd~G>-ThQnR^N9JBbRj9e zDZ(4hXWA^V&0T{kjq{lwm_bA)pE#eWNtNtUu_w-FQolHodY>BS83xUgw0)Ku=d%$9 zq2M|^Dx6O^1SIKdJCzj9rz9y~L(BBA;XHrCmP>Rg_1&s~o*~;ABHzNfH=rkc0bHuB zZ-72lme=)9mkQ@2-QghGEg*8kc|7Pdy{+pB^9-SoYSDg$c?M;h^i=ZQa6ZyGjgEIE zo;V++Y;|oJZa0{Z)GN?M?U1Wro-t#UW!=pim=7%Yhl4eQ6Xl}>#o>7Dr@TUWso{U@ znXmFhc{(=m^VS$olxG}vP1p}jd(tRR=aHH1VncZ>N2wY6*}OsdAXOPs?y8kWd6r4_ z#>dh>ltOuiPD9hd=Z`1Kvo2>qV~eBRP(CoZv*=~+K>5H5@r5Nf-HGzd^*3F&Hk1z% z<5yf`DL0g-e}^Lr*rZCMJQ^VcJ~n>}dV_g1GSD`dem*Fe_t*g`vEYI`VLmXSIi#Uw zJn6Sqx`fxKPQlG8xfWtw9+LT*fZl0YwyOsqqR~WfQeDOH&3u<>1?`S`dm)1r!RuX zVBMp*uS$Kv^#pVAeFG`5XK`NcskdNH^_z7XT;H?`?3ucoDGmD4Zd!e2S!A4OeI^R+ z>5-5C=kC$Xl~ymN?C4rK?+t(MN$W>asUc~t9un4_!FR2`NKsb%+>^9cUm=iaededN zdhw$Ryx6|c>Uk!Kn|XPo)w5b|!gqP@14^r>3l6jv*AMhvtHLV*XFn4=?qt%mBXGMg5+AF+gd02mgi=FAHt+jf` zO$dQ}o?P)B`fg^TiLUTyrJkMv0Lj>|L`tb|j-V;`mnyi&SSdtM&(d3^9yemox(O%T zn|>La8(^L_SX zT7Bnmv7BuAUP|@0L}GvZS1)Of*7mPU4DOrWuNYPPJicG%cB3C&TF6l5IkD}hDCXRf zu1%E&*ilNh4?+KQe+cW8+p=#zl^F^739HbDpnrNZgr79r(h|&qBJ?KWI|v9Yq6Pf> zo3pj}neglw3K2fi*LAjbi1tK>D`iqUBHZ4y>wMBA^zVXEU@m`_r{eV9^V)WA2+%C% ze%OYf+Aa>^Ty}qT+5K0R-QQpKRiw>C;d`Pc9qKvjoKo2aQFe1fRS5YA=4Cu-8+ zSC;*)sQvVbAX$71BbR`?bYqXu5(}Mn|8{h)?j+GoIAgfv%zm7kv_G$x5E(BQaq}r( zV?aO58S7qLpuK-ERoddd(u@Cjy%?HgN}<8#aBuxlVp`nB=#Oc&+t{zn%gFz5&HB~C zAJ3tzf58Y;$pCGWSl+W#-U$I8@EA$L|A}oVzx~bc{{A0+|LZ^g+Yf&_#?Y2cmZC0(cIT`u#~-T^ zVg`=6HB)Yv%DSZZ^N~SKfr-5M7=3F-VKX14tS@#+m8K=dpQovSULDo9wprKAvkF*@ zeH<*jNi%*Io4bo>qO6OTgQLOhnCh4S9CA0WPR)+44sQhRzJSc za*x$E{Vlw{7q<)@8^ktdSQp-$6#~YH!g-c6LKWXx_o3xZN^AayP0!3Y3 zlKOdyJOs4&mY1A<@=8;lub-DfW?YM9naYyU&j&`qxh%#lSC%Sf90s>uKgC^HGWzi; zTc>|m*IC8P)1scE>EFLD`TRV;PZ-~yNfDo_d(ss9Fg$iieQNG`$k zDYwU#r7yRn@oOU-pV_-5jUU&r@PF+wCPjaIs_n@zMqhr(;U_Ke*(aX$)rNGUiBYO8 zHKyn*6eRyZ)-`rmLvnrv7V~!XfMkq@Yhi2SL{>~@l|?_&4=PBO;*5Uc?gGiISeXdP zw$Z{XCI{Ab=Hbw&eTB){Fed*;FqwhaWeB|nWt^SX4ro)L%>7G0_H=?Wq$7>vW&JjXW+s%K8j*%(sTaU)lTL7Ul4SMSD;k{{N;^(W4bBYCotS^Fz?qIJ z^LWjrMbdv=ZDxw72Z}bec~LwLwb_pQ%BD4kzB9GL9M*5OY0S7- z&=z6*sWCGdM42}WtuiyjK0fE^hRifw*Wkryy8&~NOap!F8kiw$p}l?La#?q|#${2Z z2CQjZCY6kV`>tp!TxRy-Ar%^zmB46N4s-zP-gX-*vk=l;C5_7Z_M?AbnJL1iHmy)u zfBY4d_ofw=aT?i0bQL&rAY*fBY{qF6+P(9g(p;GLTRx;hW_)5dbsr7QOwKXZYSWpS zIIKM9tVU)k2;;+OU`7)*{G-V#T;?j;F=-9V{AlAUqk)-7JhTyw%c2Vml}`gRJqw16 z3NW*eNH^Z_O$02hQO$oQOsDl`3g*8W;UU3W7YW#Ry!DYs?ce!5P;swwv`Z+zI^-2^R}Pp|A3kt3!-1= zj-A+WGCJ!jqX=gfH%H8q4!5H%UXx$O5uO*;I_vVR->io1$?F)EQRy0_?8 z-N`NbRrhj>e$~C)qF;3{-$cLu1i9%Yvn(xuuKX0YX;*IZFaPr%x9O`gq`PUefUaj0 zxoH-bf(9KkZo+@nK@%N!$zYZeW@6r%CNxr{BYhuj;?sB%Xa^a0VTrqWjGn#L2M zu+W6#bEc(k8QQGi&4W0_)0w1a(Hz^k5-W}@3ZkBnd zg{tVyx>|pmqfz{3TsYfk6v4TY0MRIZ6EZ)!gJ@TNlc8q5(-6@rev_awWH;KSURh%u z!(*e4ZmCx$ETMV6a&()uCc4m#6U^^3yytzZ9@zI~^vYU;;g>N+KWmk77}LQadPQ*3 zF#ni%VpuAbdD(C=Y|N%D3=)>_!8~aTvl&+VO^km_fijBiQhq!}MQ&2QpWPVaQlE_D zp3*Mb06Lj-yhUzqm<()kUCwq)W^~N}$rX}=L|TUdgexQmroZxIH?D}xrkZ~Qk@I3z z(}19Qn1 zG;6HJV^(mT!lB@pcGYP-)p+dcVsh_r%;>NAP0Ge;=E2iyI3}k#T{$!!OGb+UbsCV_ zhHv6q=~)fP%yu!Y#Tt+)E5i{<RDGB8dJg~+&sM0_0VczZxHsn=nwSCCBB(+@8e zjmdapUD^~VOTE+Q_|@P{igKPBVIwvfS#%4$My$09f4mCED*))$Hps`sJl+1rm zDp$3z4B#TQsqxvS`9(K;hIF&;@52CSrI{K1rvPcCIV!$PE6tJ7V}pa!7|n$2)5%1G zba{J~o_ol)>jQtuaH7iSar2waV;P zHEdIv?NVQK)0o`~b8#a%eR^2YO=*92tKXf5>2$&~u6WalWz&`!?fLBWO<9g(nGa=| zaoRzHGrmNb!_~SnX{(2j+jQl;ZXXTKjKZfT)kx1xTTYAmsl=#;#MWsgimVK58ZdO+Qt8oczy~%98>-~nY@tMc> z%iON?lg%t%+a|XCbe&erF3o@PwS8^%PuGW_rref&`{_Efsixe&y#DE1n9bm7A`Dli z6T3`ph9vG(*!8>*|AM&9xo0OjT=|5>E!c2z&o1*xQz-6&(MCAwp6?S*9KuF8sUds< z;Uq&im;D~$BprTb**}5XTt)g*xJ~I$&sq2UIdk4bO%34_L`{ZpF8hByQIih8vh3f+ zZ8BdJ?jLfeyT)zmPHu6Vx|dtrrtakyx2b!%!EFZKQ$xutx0QZ^+{8s}p*DZ`=WCT` zX#RK#J<)G%m;eE*ZZ)IRlUL}o{s|~Zel^h4y4stQkFzM5 zr{C`MT2Ed@2r*rm>ArvZi5J|SeaWXfVQn?&n}>6w?rz+?uomEvlm zVS&nN^h`0%l4R|a#~F^QR;_1CX$?#iDr#l z!;2RS4b7?3-kbAkqT%qzK=Nv#!BYzxDw+V-eDraP*W7;q+08i09gyQ{!qcEkCV$$b zH7NTvPE~<&U}^1#wpNf#rZi5Iw1VVdoOtkeZbD&lwQHcVMrEMKB*`@>m$XF7YfLTx z(6OBrBr~pbGM^feOIX8SWS2Bp32_kC}19dNL3s_K+Ax{a)(FtuKv_|+4=k(j+XI_t{O1PEd0~1tWR6SD zfdiSBK)wx{?c!>*L9<`H6b@*fUQ`;H3#L9ssGyl~-~+T3GP9oXvwQ(ak( z2(2tj1(|2RXk?~m*^eNz6li{kc@4}=S+TrPLGzkoLIZP9>RSh9x<1Y5OAX9%4SLqV zEE#&952=BfPH!_PUL&)3^^E(HMrJzN4A*}Gjm&78H$jce!7hirM&{Kaazkdbg!yV{ zCKEYHzD;X3>rGHYa}dMMn3=+6Mz~H#u??J)xRyMMqJn4UQKxSx zqVU<5g(cSTEY;*6jY`9_UvJ_Xp8e`IqtTf|%;SQj(Aj4t2MV5LwFVa~_{^V1zJz}d zlbfuh+OtL)^O*GIpN&qCN~;&?&A0vEFgQLF`F@?+E6;aVI#ppRNx< zO}VZ6_S1EOQ%$)IVf*P@2+o*@{Lw<2GxajT$qe3fGXc!i50R<23C_7|CqCS%PC53_ z?OnUfD1HXTDIID8ME883cj6E>-bsHA;S+c#8N#{j_jo7i@GHyy2^8ld)KDTmgX3&H z>RIcqKWWyRw5c(CMy_TV!@2SolQm0^Us?HY<2msYIRWVCtT%Lv=-hg_#dL1n+@dLv?=|&`Ve< zDAAWa&3tktKly<(($oX;xo*+$mQJj*9Us#jGZry2fgj z5>^vVUKy6c+D_AklOz#j=M;ZRHH#5PrJ^e}tVWzP>72rw)>O5XMV+PzC#_kY zsK74Pb>9kKSCdz}x?M97R+h4ymUXu}UDK&xv8=l_<78!h)RxV4e2~ftPSbwlUv@+_ zRn~8shIQt08%9J3>uOo&&XZAlvs%?xQDSlzWmI1R9IDjaS_sdX>#%In~5m38Xe3z)1jmRV!{1~K0WJZh(f@cHdx)_BwRE~?0a|7ifnO7g|(4cG={-k3v z^E6Jwtp;VL?4FT-8!B_DA9n~1$_%fbc@Q)*Gk4}xDKs>*qGx(?k!oZnKRHLPkr@Iv zxCe#I+Pc3Xv+o8B(+0{8-;<3z8Gq9dKk-SyGV>tL^G2bvHv21B_AKx{XdeyBOrAO5 zO{22TCaGZ=!(Rkcp|bZYkDyVRFt?nF3YH}jcqv}q&zh?lR|tH z!9!_g27^cY(kio;WW^6gtO(6G(V3uoQ5 zeet*7t}~!|*3TgHZ{Na!W^8mQX)H3G^JNY+^MV1K3Dsi$zaS2D-MD?@w6#RlHeS-t`LX z7lp1_sr0;c-=8$^UFg&xK11l5jrv^ti$W(|er@r;jTBAEi!&*d?{KfM=+?_EQgrL) z7Ad-QbBh$+y17A$;_l#C5DB-7WPgekRh;Nw?iKDdG@dY{Z-11qb~kdD5oT%Kzzr?> z%z|%}BM}t9VV6c* zmZV+%Xv7tDCVxP}3lv3~mn$XOHi~p+WJMeP6N3ph*v@DUpJW=f6i2$;rD;4~Z9Z|y zJ%qL_xx4TIS~y=Am6e!_?$uYjMb|75Kxo`}(iuyMHf5LhosPs8F^mZQj-6E<*S$(qVkOq|@s$Az`kYmj! zO_|P|q5kiw&z`ULz-_MoST2p)wB*h(#tpV5@7ZIM z)u>Hl|3YVNs9jVl(G9jqpw9fn8n*N53$ejA+kZyn!-m?~E!MmZwR2oOB{tZ`d}sLl z2HQAaiXGC_zp|x z>wk&fOLXam-gLen#Oa3KVU4WU=q(jo$MLUGoS{}T(q}_)Nrmj5Mb;Q@^zo!Y+^kX8 z8;W}s;JKkVqk2XPjSaW;Lx^mIiM+EKi&LhTx3K8u=SH1ovUh2fHD- zswB4oxDT)8R8a7(3i56E?cM6@*Hb9_HGewtW(81<;;b#vq~QQ@XIIrhqqud=EoN7{ z?V1UGSGyUEW+z{v06Zx`+0^c(1n8!8`^A4`SGvurb!zk`w7KQD&`Nh%%0%u;_rew* z@Ew%T#|Gb|?dDK5db6zzx@?1Q>N&$}Xw$mQ>g2P*x0FYnTSdY5$U3}1_maZ*K!5I# zmMpg$a)-1McN=t*IUT;H8*-~M@DFrTCP&ow4&6~9qDF4Nl*!(a8*O2^5ozf53-P>T zw_j7N?AT3Lzj+T(*v&gzi-oGcF-=+ z)`z#uj@nA{8fd4rxbDZojC8qUF?^g_)eIDO0bGy-x z^X=}M=ft+3(hM-UG=#F$!0bcNKiwa~I_0+P`X^^@^Q&sgeF*BOcSHC|V}B`tmshR` z6;G6t3|y`Wm%%rd-=9gYvY-<%3cvwi{6JUNxz!=q6C17+bL@C&2bW~ETNwub$Z;O%*zdVr~#H>$;zH`{2PpUK_ zYEvK-)Q6lIzgdiWSPA+)P0z?K+44Q9Kl{kepa!xUQ{c4ww*VV{5p?e1=m;ET403c6 zqwBJ{TEFOE6&Tff97MfNqUGjqTGX*<$LE$#33N0}PLzoV*&E<{1K8T=(~1%>ElLo^ z$l-CMcbH)4W{__ZKck%+rTr)+4f2|eS{vL`Bb6@*o;2X{ z{Q~(_)T~kzD{SqW%e$nokQ~9R_^NfXI5*1lPg4)5C^DmG*)%5fgNDj+W_KnqJJ%&@ z6hq;isI3Fmo@*>G;1fUot9`0_K_U>Z3r5L%4AsLcwV~A4lu%VYSzHL9AO2{r7@;N5 zx619az^%PeSWo9vazcj&9n#eZ>AZ0y`>Isz4U9GI(ZCt4e6 zXku6>i!Ie7n^~69t+0AgI9wZ?#}tN-Ii+W;3MY(mm(uyW2lWEjsw=CMR5@EEupn@0 ztt|u``1iNX>OBYtncKsbSBqu1dKfH?96Z_Ge6X{yQZQJ3+MCmGo|w4ctf0(ip>0Zv zocaW&4L(*w!YQ3KR3wO^ZFMH=={Z)Mw~5!=3hR0w&ni&ps19=ElbTud$5w6D%hG^Q zT9(Yfa1-}LXXWdMMdXx*gTI4o5Hxyr84xbDlw=b(0SB>HRLN>*R`svM(jjfqMXGH+ z$24&7RHDf-W9u&brh-$h-o5OPy53yjXIT7a`W5aHK|j*Q*s|%4X@`zDyPg-s?Si?P zSvq5+!j);iGi=jek&u?K3kN1eNuMiQRYi5BA6_;4%-yFwnydGonWyO-62CdA1oss) zwVbT|Iw#bKZsj3C60A@We`QE=2|Pi0{WeUvO4iXZ|Nb~l4}g8bT5YFqY;RXwVCZg% zkeTxv2hcJ0euLDBB0A!7oYRBg#a*Bv+can=8v*QQ*&k@^j_SJLhcQCR-Rlp>*SEB{ zufJ9UfJQAQw%Y0L9G%TTCXoP8JT0S$5RL;xsKPnBUMG4O0+>|?ZncC?91Yq)n!Yie z3(fs_PgJk86}4d%T~FSFSkdn+iz1g3t8zLAopLIhwN>F7aoj9LOy>&0Xn+7WMy?8DWt~C3X%0c@9naA?S(=Q%SYnCH@uF_DU!$Ky{w)} zFEEGZ0cvma^b|Uo8{2`_acPXibjf3x7kCEuJ020}{ZSmc30Uj8+9|CvH%=c*-4*8;GY^X(P!6wdYPX+;CFL`1mAW^5 zHNocRw%zH(h z%g9HQ>!6K3v#t$R#m1d@TkRA2dW)o;>L13J0)ZRtX}n)-udxy@wKqH2^mOY@N}Y&g zsEaJ6Rr>jBygGY*a_p}zwd|^YN@>u_9|97`pr?L;Hj;l|mWH4zPO!~ux#+3Rh31X_ zwViGJ=9yorqjhQe^RH9ZGKW6=x~pD#Cvy$`DpA6KEW$!Ckmh2u4v)Atu;+l#2nvx$ zVY^kpg$K$l7=JR*<5@a22Gy|A)LcF?R)KVrLH7ZfI#nsfOIs#1_PPzmXof%kzbxth zHl$**^Lq$;G*no8(T=cz4hR*h{M%*c&rHBc%^evoRQ8ZCgdq`Rq5wzI+5`xNx%k^D z72>#+c?>0)OTV)u#-94>q=URIZc0`T6YdC(-SNi^LnAgfF|@u624|&zv{`Py-^J12 z>zXisBpbm#C~+;vz;}tF>>rZY zmAi$jD|J4*&Yi&pxoln>d1UwylRSvN6&VsKOE6o+IAQ%sv=|!jE{Pz=$*@j z)r_S&P<&wM!9Cl=!ZP&j%f~Rg!=qmEdCfQl-|1+Vxr|tQrsIqB;pZ?258jsGK^)?g z=Pj5Joc>#fw7f|KhhT#|AU4-~TAeol<6!!k&R8bXl5v74Imym>oOD1JpqAm>x)g`N z(xj(ePJ$fG;^=rb1N2ZH&Z(Jj{x#=>Z^r|_tuhIn`-RUy&N|o1Yn>or*n41bXV+XM z5>e_IlfXFX+AM@@KsF2c>1S^^&dCFwi_{(p`LLy#u3)D#D*1@>RW);dDn@dSIPoOC zQMn&y9AjPY?{Mh+L?}{M^HifUmBiB~WU(jbwU1(Lm1 zt0%~~CV|$_-xN4Ix;`F5 zn@eukWwsOy2dX;r!d4rtRa*?|k>Om^LwN1iUKr|IF=PhRe9pt1hz+}p2Pkwy;7HLV z!yBf86%W)W-QrAZ56F5hLV#-1~I^~|f znp4X?r~xxuU99|*Ok|@h$Mik6avX7+Y1vUdl)K_!_gFnd$Ns3zKwITedH(^{&QYjgQ~eiI_XVy>$N~hhotn(Bv8A;Icu)#rJ;<&n z0JQ6i;&27tMRg<SKms5LPy#= zC1Tr!4zaLW=~bDcOIR>KkK8QjS5g_H*i8k1PG{>I-A`>3Lf#`ry03CoTg>uyc%or} z!ZqG8+e+>wS$JLgJKv)2J8Wv2FJpfc{cZPAgzz04xJ7Ohkd(dah@H}M)auCmCTQS7 z@&QMG9E6DbZ>a(`odcUPfzw9H&jk(3_$7cFt*JPH4;jTnJ z{2>JVq9(82C6ESQPQrS)?p!U{n5zGW3Ehf0MI7yeS(vhqYhb_*MK5OP#UF9RHt*p@ zNUzEdq>WlFn42KN`DgKTHGY$&vlq{}ld=uM5!}?|l098xgpQp{vWKz5MeojqGw%MM zA@cD0owmW!00u{@bJbTY80K~g?W}4YgIJ@or&+)Rg&r#g$0%3=Zy!7&r=8jHS2mUT zaplHZ88GfmsWVHMviK6+2I&)AA5{>@m-Z}^0c$J z&r036;=|XH&Pd{f=Hz<4IYEegpNrfK&sg7Q50e40q2)pWaBVi0Fl4Z`b2na?2b|0g zMHb4B7$$pfs8{y84~ZiVzNE>K3kLr(Fxiwkr-P8K6|{Sg6{gArt!#+XkwJq5Q{j`wS@vUhWll{`-h}rk_yk z+umZl4+G%Z_|=ytc(Al#sV9iA)RP@?#H&20kYI{@Q*a!Tmq|*2*xy?gT<*E)Yy8ea z+T7LvJ3bnT_Qi$dOGdmpPJNs!;<2GjPG(|4xn3_i=yIz8#8S}$z(8Volt%l!1VGf` z{*tAYbgp&dMrdvE#PIqaS)Oz>MYq)Rt&tgZBfqGy=-4zG_``Jqt0y{_I(&&VWr&Qg z)W%SS+w)rb!iGUXv5E3G=PH$M%MD_;a|CIVzy$I`U2}mDwjzb4XO2Ytpk*c_3rO6CSCbp#Elio~p}wOcr0^-j*&)|mD9b?JA*JG>h?vKMFJrvpa< z8rdzat|o^^Ek))e3`DLOygh9-^~MIQ6M4@n1H3(=i9M-|8km4qzmDUZFBlH1HhGX7 zxI1TwVYF7Rv0nB1>v{MMVG0%h{#b6O{q~%}%!3eTI-oZk>b6ORnGhFV|2vks`ncoY z0>c^wW`_)fRIoTRaauw!k5=b^C9K3+8_+&7nk0<&xc^wCS^f{2Sr_kFjJ zs4!=sq#8xda(@4Xwkdy%(p6cYEkEK=<%l)|m>BzW2DT>c5|Qg>68<<|Omo*S%G zx%3yQ!G81Ty~&i&qD=@#+)c@Ssk)F~gyb$$R0>S-3)IsOzh(K#Z{|H5InXcNnw z(d7&YU(ZCwmZd|ATh~jK-V$haDNq;UYO=f$jkYK?&+b6Ne;-%_lOmC(gP;cL?XGY; z-3sIh!dz`Yt3t75?@VZktD)k$)CAA>6f`hb$Olu})=w=lf6F4k%fT{jz#pMtsUL)o zUz`|EO7RpMd>Q!E7Xf_O9nxa8Z2%vfiu6r7y-l&%ul0D7>pVV)j%jl!0`CbgrhVLGv9e}w7sYbaemfXH`290|q z(EloR5we+JfSPpAwb9!9soC|MZYT?%XHxd%zqB4uK8UCWEwm|o;rp?K*oL<-8)3myH-277leeH?Y3;PJ|S=f=+9L6FM}Zw#PqodVTeDJ=V4QX)(J>BcM_O<}8V zw8Mc7cYWm9c4HUB?!ac9KrsQYec^>yCU2~V1cB+`=npMYrwW@hYh*azcWt$UBaip> zTcU{w;AI|#CwJ!}haI}iUokZOq9NG|4Q|^?6&0_3xBOp3^$c*LY?20K0J^v97KdWW zkekYdTWwg7`5!FE>~8i)1>w&5jc+nzM!Lt;)~BRM(+3UW30uLu=}Bz@XJH0NN?i+l zUJL0^3#|mUQJ&=YL?H|%#gnjVp|KOZ>Y$|p``tJjAC&&R+wjju$PMuRK9FmWW{JA> zvuPrB&o;4Oe%Gu9CSaw{boyjo2KLD4m50Pf)Ju-k>S0mrl|4L`8m~#&J$DwV(g3aM) z;M$}@L%z1v*_vz;PX@c00`gRAGu&>3A7kn39olm$=`(s|ro*>3jxKOd(#(HI zm*ulZuQHbn&(u!Q9Z zp|8JVZ(vjW)$dZklL=i|Wkb23@6i0DaspE29AWM5y3N{euk8Zbz$j{UY_xE(eaRT& z9YB*|&HN<#n0A<3>Kp+-`OP9_3=rEoRsUCWW*8);2UVBd+9_(OpB|T=9t-E}HnTaT z%=F`CB06gjsn?9Vui~gSV!&jbyXP+%|5#+7os`v(rZ2rF8*>fN9-RCv(x9y(;Q=Wu z@m;1*_bKgiFKiA|uu+ZHJ)F)(IM-L0xx-lELAB2A(-bDOzx!Sk&7Qn|*wxs-Fdi;x zA~J2|7f+A};^YQ7G19jg{e>nM+Hr}G5uSmn^vBd^;N<@1BHe;+>>Rme>hxK)%)-lf zD$7wxBh00f67SRl2p0@J%VjT_8z2&(`A?Ulxm$`l_6Kyy2(3ZasP6RXev|xIhQCWC z!7qfef!XBEwTVKRlI?wBLY2p9*w%W*Gz-l_?z;WV_P`|X|CT_v%c{M0C#Fs7_R?RPg61gzZH9Kzsr6da>*=12vmUm9l=Di8Lwi^Q5FX*3EG@d72WTeH7@3{ zfOdgY8{B(T_okne1e1jKTS?iUzfF`U39-=3#&2fwU<}e+U?136>#3nKreGhGzJ%Rh ztkLjz?hAFzd5?}aBJxeqK_{bt6dMK7u z$o012piAYVlW|AYGicy?9&N*6$0pE~y%o8}VRJadEm=er1<+P84=K^G(BJ1>K~FX| zR8JaqKGNZ#<_Q^gZZviK^2E1U+JgfBi}x+YvpfP!s&uk2CuJoEj!a=~D+oZ`Vp&HhBEFiCnO#70xkD-0<&iJ+J2>~D4x1DYpk%mYJ)$rzS zuphgHo$aXRk^qXsnLEAT&nfb`c=kjlIqYCTG2wGl&{4rkho}mlF1-@N#GXz#=!$S+m+g4IzDGOKR_*f<3`lnSWYB-BZoBj zO0hP~`KBrqV!m)0;#@fB(aa)J6X9&o;JQ6IM_#UC2Yh%BU8$b}02ZV)2U>sU@}jKh zI5c?_#=5)E!!Dglfq74R#C(kpSXD;7;3gH3H{T^qJXA7ZrE`&#%$>om=4;>5c!`Ug z>qsmyDzzZJZwb94;P&|2Z>Sph&xIgml<`lf*bXF~h>^uPFv8}332a--Hfak)HpXozydZNFonPk4yB$)C?zlo8D+QwBYIIh5FjSN{ zv|u!|AQLOn>GG|yC{rzd#pN?^ApyNY2aIN>HI`WgRRjWQx7g6qJq3`Jd;)aqvnqb! zFhjO(b^081yD9Z5k0-*G+@YR*^JI`%MwKxx9@U-hUnYJFH5rE56_-ZWB{d4j)TDZr=&0(~vM$tcf69wSpwgNV)Vv&X?vv&oU^R{Qx>EDU4kLMI!UJRPW->6| z|TK$iOF<5zdC51Dz?SkB|6`I@_LHBwU+(9BfgE}fMF!f z!tDCEN$YTRwb0#fQewHekDjg-=En1c`QgLN$O%~tDWJ(x0hRis;S@^9xKZL+*xwRv zl-w((rJPEp3#GI!fv%BQAp@s{;(u0OIpd_hMc36T$Qe%wGs^I+j}gr zb;uc~(w