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
1 change: 1 addition & 0 deletions CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,7 @@ In chronological order:

* Anna Mayne <anna.mayne@arm.com>
* [2025-11-19] Update thread throttling profile for SGEMV on NEOVERSEV1 and NEOVERSEV2
* [2026-09-24] Add interleaving to sgemm and dgemm. Disentangle trmm/symm from gemm.

* Fadi Arafeh <fadi.arafeh@arm.com>
* [2026-03-05] Accelerate SVE128 SBGEMM/BGEMM
Expand Down
69 changes: 68 additions & 1 deletion common_c.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,42 @@
/*********************************************************************/
/* Copyright 2009, 2010 The University of Texas at Austin. */
/* Copyright 2025-2026 The OpenBLAS Project. */
/* All rights reserved. */
/* */
/* Redistribution and use in source and binary forms, with or */
/* without modification, are permitted provided that the following */
/* conditions are met: */
/* */
/* 1. Redistributions of source code must retain the above */
/* copyright notice, this list of conditions and the following */
/* disclaimer. */
/* */
/* 2. 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. */
/* */
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */
/* AUSTIN 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. */
/* */
/* The views and conclusions contained in the software and */
/* documentation are those of the authors and should not be */
/* interpreted as representing official policies, either expressed */
/* or implied, of The University of Texas at Austin. */
/*********************************************************************/

#ifndef COMMON_C_H
#define COMMON_C_H

Expand Down Expand Up @@ -62,6 +101,11 @@
#define CGEMM_ITCOPY cgemm_itcopy
#endif

#define CSYMM_INCOPY csymm_incopy
#define CSYMM_ITCOPY csymm_itcopy
#define CTRMM_INCOPY ctrmm_incopy
#define CTRMM_ITCOPY ctrmm_itcopy

#define CTRMM_OUNUCOPY ctrmm_ounucopy
#define CTRMM_OUNNCOPY ctrmm_ounncopy
#define CTRMM_OUTUCOPY ctrmm_outucopy
Expand Down Expand Up @@ -126,6 +170,15 @@
#define CGEMM_KERNEL_R cgemm_kernel_r
#define CGEMM_KERNEL_B cgemm_kernel_b

#define CSYMM_KERNEL_N csymm_kernel_n
#define CSYMM_KERNEL_L csymm_kernel_l
#define CSYMM_KERNEL_R csymm_kernel_r
#define CSYMM_KERNEL_B csymm_kernel_b
#define CTRMM_GEMM_KERNEL_N ctrmm_gemm_kernel_n
#define CTRMM_GEMM_KERNEL_L ctrmm_gemm_kernel_l
#define CTRMM_GEMM_KERNEL_R ctrmm_gemm_kernel_r
#define CTRMM_GEMM_KERNEL_B ctrmm_gemm_kernel_b

#define CTRMM_KERNEL_LN ctrmm_kernel_LN
#define CTRMM_KERNEL_LT ctrmm_kernel_LT
#define CTRMM_KERNEL_LR ctrmm_kernel_LR
Expand Down Expand Up @@ -321,18 +374,32 @@
#define CTRMM_IUTNCOPY gotoblas -> ctrmm_iutncopy
#define CTRMM_ILNNCOPY gotoblas -> ctrmm_ilnncopy
#define CTRMM_ILTNCOPY gotoblas -> ctrmm_iltncopy
#define CSYMM_INCOPY gotoblas -> csymm_incopy
#define CSYMM_ITCOPY gotoblas -> csymm_itcopy
#define CTRMM_INCOPY gotoblas -> ctrmm_incopy
#define CTRMM_ITCOPY gotoblas -> ctrmm_itcopy

#define CTRSM_IUNNCOPY gotoblas -> ctrsm_iunncopy
#define CTRSM_IUTNCOPY gotoblas -> ctrsm_iutncopy
#define CTRSM_ILNNCOPY gotoblas -> ctrsm_ilnncopy
#define CTRSM_ILTNCOPY gotoblas -> ctrsm_iltncopy

#define CGEMM_BETA gotoblas -> cgemm_beta
#define SME_CGEMM_KERNEL gotoblas -> sme_cgemm_kernel
#define CGEMM_BETA gotoblas -> cgemm_beta
#define CGEMM_KERNEL_N gotoblas -> cgemm_kernel_n
#define CGEMM_KERNEL_L gotoblas -> cgemm_kernel_l
#define CGEMM_KERNEL_R gotoblas -> cgemm_kernel_r
#define CGEMM_KERNEL_B gotoblas -> cgemm_kernel_b

#define CSYMM_KERNEL_N gotoblas -> csymm_kernel_n
#define CSYMM_KERNEL_L gotoblas -> csymm_kernel_l
#define CSYMM_KERNEL_R gotoblas -> csymm_kernel_r
#define CSYMM_KERNEL_B gotoblas -> csymm_kernel_b
#define CTRMM_GEMM_KERNEL_N gotoblas -> ctrmm_gemm_kernel_n
#define CTRMM_GEMM_KERNEL_L gotoblas -> ctrmm_gemm_kernel_l
#define CTRMM_GEMM_KERNEL_R gotoblas -> ctrmm_gemm_kernel_r
#define CTRMM_GEMM_KERNEL_B gotoblas -> ctrmm_gemm_kernel_b

#define CTRMM_KERNEL_LN gotoblas -> ctrmm_kernel_LN
#define CTRMM_KERNEL_LT gotoblas -> ctrmm_kernel_LT
#define CTRMM_KERNEL_LR gotoblas -> ctrmm_kernel_LR
Expand Down
55 changes: 54 additions & 1 deletion common_d.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,42 @@
/*********************************************************************/
/* Copyright 2009, 2010 The University of Texas at Austin. */
/* Copyright 2025-2026 The OpenBLAS Project. */
/* All rights reserved. */
/* */
/* Redistribution and use in source and binary forms, with or */
/* without modification, are permitted provided that the following */
/* conditions are met: */
/* */
/* 1. Redistributions of source code must retain the above */
/* copyright notice, this list of conditions and the following */
/* disclaimer. */
/* */
/* 2. 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. */
/* */
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */
/* AUSTIN 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. */
/* */
/* The views and conclusions contained in the software and */
/* documentation are those of the authors and should not be */
/* interpreted as representing official policies, either expressed */
/* or implied, of The University of Texas at Austin. */
/*********************************************************************/

#ifndef COMMON_D_H
#define COMMON_D_H

Expand Down Expand Up @@ -55,6 +94,11 @@
#define DGEMM_ITCOPY dgemm_itcopy
#endif

#define DSYMM_INCOPY dsymm_incopy
#define DSYMM_ITCOPY dsymm_itcopy
#define DTRMM_INCOPY dtrmm_incopy
#define DTRMM_ITCOPY dtrmm_itcopy

#define DTRMM_OUNUCOPY dtrmm_ounucopy
#define DTRMM_OUNNCOPY dtrmm_ounncopy
#define DTRMM_OUTUCOPY dtrmm_outucopy
Expand Down Expand Up @@ -115,6 +159,8 @@

#define DGEMM_KERNEL dgemm_kernel
#define SME_DGEMM_KERNEL sme_dgemm_kernel
#define DSYMM_KERNEL dsymm_kernel
#define DTRMM_GEMM_KERNEL dtrmm_gemm_kernel

#define DTRMM_KERNEL_LN dtrmm_kernel_LN
#define DTRMM_KERNEL_LT dtrmm_kernel_LT
Expand Down Expand Up @@ -240,14 +286,21 @@
#define DTRMM_IUTNCOPY gotoblas -> dtrmm_iutncopy
#define DTRMM_ILNNCOPY gotoblas -> dtrmm_ilnncopy
#define DTRMM_ILTNCOPY gotoblas -> dtrmm_iltncopy
#define DSYMM_INCOPY gotoblas -> dsymm_incopy
#define DSYMM_ITCOPY gotoblas -> dsymm_itcopy
#define DTRMM_INCOPY gotoblas -> dtrmm_incopy
#define DTRMM_ITCOPY gotoblas -> dtrmm_itcopy

#define DTRSM_IUNNCOPY gotoblas -> dtrsm_iunncopy
#define DTRSM_IUTNCOPY gotoblas -> dtrsm_iutncopy
#define DTRSM_ILNNCOPY gotoblas -> dtrsm_ilnncopy
#define DTRSM_ILTNCOPY gotoblas -> dtrsm_iltncopy

#define DGEMM_BETA gotoblas -> dgemm_beta
#define DGEMM_BETA gotoblas -> dgemm_beta
#define DGEMM_KERNEL gotoblas -> dgemm_kernel
#define SME_DGEMM_KERNEL gotoblas -> sme_dgemm_kernel
#define DSYMM_KERNEL gotoblas -> dsymm_kernel
#define DTRMM_GEMM_KERNEL gotoblas -> dtrmm_gemm_kernel

#define DTRMM_KERNEL_LN gotoblas -> dtrmm_kernel_LN
#define DTRMM_KERNEL_LT gotoblas -> dtrmm_kernel_LT
Expand Down
41 changes: 41 additions & 0 deletions common_level3.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/*********************************************************************/
/* Copyright 2009, 2010 The University of Texas at Austin. */
/* Copyright 2025-2026 The OpenBLAS Project. */
/* All rights reserved. */
/* */
/* Redistribution and use in source and binary forms, with or */
Expand Down Expand Up @@ -334,6 +335,10 @@ int strmm_ilnucopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, BLASLONG posX
int strmm_ilnncopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, float *b);
int strmm_iltucopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, float *b);
int strmm_iltncopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, float *b);
int ssymm_incopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, float *b);
int ssymm_itcopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, float *b);
int strmm_incopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, float *b);
int strmm_itcopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, float *b);
int strmm_olnucopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, float *b);
int strmm_olnncopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, float *b);
int strmm_oltucopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, float *b);
Expand All @@ -351,6 +356,10 @@ int dtrmm_ilnucopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, BLASLONG pos
int dtrmm_ilnncopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, double *b);
int dtrmm_iltucopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, double *b);
int dtrmm_iltncopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, double *b);
int dsymm_itcopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, double *b);
int dsymm_incopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, double *b);
int dtrmm_itcopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, double *b);
int dtrmm_incopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, double *b);
int dtrmm_olnucopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, double *b);
int dtrmm_olnncopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, double *b);
int dtrmm_oltucopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, double *b);
Expand Down Expand Up @@ -385,6 +394,10 @@ int ctrmm_ilnucopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, BLASLONG posX
int ctrmm_ilnncopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, float *b);
int ctrmm_iltucopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, float *b);
int ctrmm_iltncopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, float *b);
int csymm_itcopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, float *b);
int csymm_incopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, float *b);
int ctrmm_itcopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, float *b);
int ctrmm_incopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, float *b);
int ctrmm_olnucopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, float *b);
int ctrmm_olnncopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, float *b);
int ctrmm_oltucopy(BLASLONG m, BLASLONG n, float *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, float *b);
Expand All @@ -402,6 +415,10 @@ int ztrmm_ilnucopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, BLASLONG pos
int ztrmm_ilnncopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, double *b);
int ztrmm_iltucopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, double *b);
int ztrmm_iltncopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, double *b);
int zsymm_itcopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, double *b);
int zsymm_incopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, double *b);
int ztrmm_itcopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, double *b);
int ztrmm_incopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, double *b);
int ztrmm_olnucopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, double *b);
int ztrmm_olnncopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, double *b);
int ztrmm_oltucopy(BLASLONG m, BLASLONG n, double *a, BLASLONG lda, BLASLONG posX, BLASLONG posY, double *b);
Expand Down Expand Up @@ -629,6 +646,10 @@ int bgemm_kernel(BLASLONG, BLASLONG, BLASLONG, bfloat16, bfloat16 *, bfloat16 *
int sbgemm_kernel(BLASLONG, BLASLONG, BLASLONG, float, bfloat16 *, bfloat16 *, float *, BLASLONG);
int sgemm_kernel(BLASLONG, BLASLONG, BLASLONG, float, float *, float *, float *, BLASLONG);
int dgemm_kernel(BLASLONG, BLASLONG, BLASLONG, double, double *, double *, double *, BLASLONG);
int ssymm_kernel(BLASLONG, BLASLONG, BLASLONG, float, float *, float *, float *, BLASLONG);
int dsymm_kernel(BLASLONG, BLASLONG, BLASLONG, double, double *, double *, double *, BLASLONG);
int strmm_gemm_kernel(BLASLONG, BLASLONG, BLASLONG, float, float *, float *, float *, BLASLONG);
int dtrmm_gemm_kernel(BLASLONG, BLASLONG, BLASLONG, double, double *, double *, double *, BLASLONG);

#ifdef QUAD_PRECISION
int qgemm_kernel(BLASLONG, BLASLONG, BLASLONG, xidouble *, xidouble *, xidouble *, xdouble *, BLASLONG);
Expand Down Expand Up @@ -778,6 +799,26 @@ int cgemm3m_kernel(BLASLONG, BLASLONG, BLASLONG, float, float, float *, float
int zgemm3m_kernel(BLASLONG, BLASLONG, BLASLONG, double, double, double *, double *, double *, BLASLONG);
int xgemm3m_kernel(BLASLONG, BLASLONG, BLASLONG, xdouble, xdouble, xdouble *, xdouble *, xdouble *, BLASLONG);

int csymm_kernel_n(BLASLONG, BLASLONG, BLASLONG, float, float, float *, float *, float *, BLASLONG);
int csymm_kernel_l(BLASLONG, BLASLONG, BLASLONG, float, float, float *, float *, float *, BLASLONG);
int csymm_kernel_r(BLASLONG, BLASLONG, BLASLONG, float, float, float *, float *, float *, BLASLONG);
int csymm_kernel_b(BLASLONG, BLASLONG, BLASLONG, float, float, float *, float *, float *, BLASLONG);

int ctrmm_gemm_kernel_n(BLASLONG, BLASLONG, BLASLONG, float, float, float *, float *, float *, BLASLONG);
int ctrmm_gemm_kernel_l(BLASLONG, BLASLONG, BLASLONG, float, float, float *, float *, float *, BLASLONG);
int ctrmm_gemm_kernel_r(BLASLONG, BLASLONG, BLASLONG, float, float, float *, float *, float *, BLASLONG);
int ctrmm_gemm_kernel_b(BLASLONG, BLASLONG, BLASLONG, float, float, float *, float *, float *, BLASLONG);

int zsymm_kernel_n(BLASLONG, BLASLONG, BLASLONG, double, double, double *, double *, double *, BLASLONG);
int zsymm_kernel_l(BLASLONG, BLASLONG, BLASLONG, double, double, double *, double *, double *, BLASLONG);
int zsymm_kernel_r(BLASLONG, BLASLONG, BLASLONG, double, double, double *, double *, double *, BLASLONG);
int zsymm_kernel_b(BLASLONG, BLASLONG, BLASLONG, double, double, double *, double *, double *, BLASLONG);

int ztrmm_gemm_kernel_n(BLASLONG, BLASLONG, BLASLONG, double, double, double *, double *, double *, BLASLONG);
int ztrmm_gemm_kernel_l(BLASLONG, BLASLONG, BLASLONG, double, double, double *, double *, double *, BLASLONG);
int ztrmm_gemm_kernel_r(BLASLONG, BLASLONG, BLASLONG, double, double, double *, double *, double *, BLASLONG);
int ztrmm_gemm_kernel_b(BLASLONG, BLASLONG, BLASLONG, double, double, double *, double *, double *, BLASLONG);

int shgemm_nn(blas_arg_t *, BLASLONG *, BLASLONG *, hfloat16 *, hfloat16 *, BLASLONG);
int shgemm_nt(blas_arg_t *, BLASLONG *, BLASLONG *, hfloat16 *, hfloat16 *, BLASLONG);
int shgemm_tn(blas_arg_t *, BLASLONG *, BLASLONG *, hfloat16 *, hfloat16 *, BLASLONG);
Expand Down
Loading
Loading