Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -283,4 +283,5 @@ hheei <hheei@users.noreply.github.com>
* Aadityansha Verma <https://github.com/aadityansha06>
* [2026-07-14] Add independent transpose support for C in GEADD (sgeadd/dgeadd/cgeadd/zgeadd).


* Hugo Meiland <hugo@meiland.nl>
* [2026-08-09] Add Cortex-A72 DGEMM 6x8 microkernel and blocking
1 change: 1 addition & 0 deletions Makefile.system
Original file line number Diff line number Diff line change
Expand Up @@ -725,6 +725,7 @@ ifeq ($(ARCH), arm64)
DYNAMIC_CORE = ARMV8
DYNAMIC_CORE += CORTEXA53
DYNAMIC_CORE += CORTEXA57
DYNAMIC_CORE += CORTEXA72
DYNAMIC_CORE += NEOVERSEN1
ifneq ($(NO_SVE), 1)
DYNAMIC_CORE += NEOVERSEV1
Expand Down
2 changes: 1 addition & 1 deletion cmake/arch.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ endif ()

if (DYNAMIC_ARCH)
if (ARM64)
set(DYNAMIC_CORE ARMV8 CORTEXA53 CORTEXA57 THUNDERX THUNDERX2T99 TSV110 EMAG8180 NEOVERSEN1 THUNDERX3T110)
set(DYNAMIC_CORE ARMV8 CORTEXA53 CORTEXA57 CORTEXA72 THUNDERX THUNDERX2T99 TSV110 EMAG8180 NEOVERSEN1 THUNDERX3T110)
if (${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
if (${CMAKE_C_COMPILER_VERSION} VERSION_GREATER_EQUAL 10) # SVE ACLE supported in GCC >= 10
set(DYNAMIC_CORE ${DYNAMIC_CORE} NEOVERSEV1 NEOVERSEN2 ARMV8SVE A64FX)
Expand Down
4 changes: 3 additions & 1 deletion driver/others/dynamic_arm64.c
Original file line number Diff line number Diff line change
Expand Up @@ -168,10 +168,12 @@ extern gotoblas_t gotoblas_CORTEXA53;
#define gotoblas_CORTEXA55 gotoblas_CORTEXA53
#ifdef OS_DARWIN
#define gotoblas_CORTEXA57 gotoblas_ARMV8
#define gotoblas_CORTEXA72 gotoblas_ARMV8
#else
extern gotoblas_t gotoblas_CORTEXA57;
/* Darwin DYNAMIC_CORE does not build CORTEXA72; Linux DYNAMIC_ARCH does. */
extern gotoblas_t gotoblas_CORTEXA72;
#endif
#define gotoblas_CORTEXA72 gotoblas_CORTEXA57
#define gotoblas_CORTEXA73 gotoblas_CORTEXA57
#define gotoblas_FALKOR gotoblas_CORTEXA57
#ifdef OS_DARWIN
Expand Down
25 changes: 25 additions & 0 deletions kernel/arm64/KERNEL.CORTEXA72
Original file line number Diff line number Diff line change
@@ -1,3 +1,28 @@
include $(KERNELDIR)/KERNEL.CORTEXA57

# Cortex-A72 DGEMM uses a dedicated 6x8 microkernel (see
# dgemm_kernel_6x8_cortexa72.S). Stock TARGET=CORTEXA72 previously
# aliased CORTEXA57 (8x4). Keep SGEMM/CGEMM/ZGEMM from A57 for now.
#
# Stock generic/gemm_{t,n}copy_6.c packs as 4+2, not contiguous MR=6 —
# use the panel packers. NR=8 reuses the asm dgemm_{n,t}copy_8.S.
# No dtrmm_kernel_6x8.S yet; fall back to generic 2x2 for DTRMM.
# Stock generic/trsm_kernel_*.c assumes power-of-2 UNROLL_M; use the
# UNROLLM6-aware kernels (same idea as loongarch64 UNROLLN6).
DGEMMKERNEL = dgemm_kernel_6x8_cortexa72.S
DTRMMKERNEL = ../generic/trmmkernel_2x2.c

DTRSMKERNEL_LN = trsm_kernel_LN_UNROLLM6.c
DTRSMKERNEL_LT = trsm_kernel_LT_UNROLLM6.c
DTRSMKERNEL_RN = trsm_kernel_RN_UNROLLM6.c
DTRSMKERNEL_RT = trsm_kernel_RT_UNROLLM6.c

DGEMMINCOPY = gemm_ncopy_6_panel.c
DGEMMITCOPY = gemm_tcopy_6_panel.c
DGEMMINCOPYOBJ = dgemm_incopy$(TSUFFIX).$(SUFFIX)
DGEMMITCOPYOBJ = dgemm_itcopy$(TSUFFIX).$(SUFFIX)

DGEMMONCOPY = dgemm_ncopy_8.S
DGEMMOTCOPY = dgemm_tcopy_8.S
DGEMMONCOPYOBJ = dgemm_oncopy$(TSUFFIX).$(SUFFIX)
DGEMMOTCOPYOBJ = dgemm_otcopy$(TSUFFIX).$(SUFFIX)
Loading