Skip to content

Commit e70a7a7

Browse files
authored
Merge pull request #5868 from Vasudeva-bit/macTuneZEN4
Optimize Zen 4 GEMM macro block sizes (P, Q, R)
2 parents e97eb66 + 5884631 commit e70a7a7

2 files changed

Lines changed: 53 additions & 0 deletions

File tree

‎kernel/setparam-ref.c‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2084,6 +2084,38 @@ static void init_parameter(void) {
20842084
TABLE_NAME.xgemm3m_p = TABLE_NAME.qgemm_p;
20852085
#endif
20862086

2087+
{
2088+
int l3_kb = get_l3_size();
2089+
int l2_kb = get_l2_size();
2090+
unsigned int eax, ebx, ecx, edx;
2091+
unsigned int cpuid7_eax, cpuid7_ebx, cpuid7_ecx, cpuid7_edx;
2092+
2093+
cpuid(0, &eax, &ebx, &ecx, &edx);
2094+
2095+
if ((ebx == 0x68747541) && (l3_kb > 0) && (l3_kb % 32768 == 0) && (l2_kb == 1024)) { //Auth AMD
2096+
2097+
cpuid(7, &cpuid7_eax, &cpuid7_ebx, &cpuid7_ecx, &cpuid7_edx);
2098+
2099+
if (cpuid7_ebx & (1 << 16)) { // avx512 - Zen 4, 5
2100+
#if BUILD_SINGLE == 1
2101+
TABLE_NAME.sgemm_p = 384;
2102+
TABLE_NAME.sgemm_q = 512;
2103+
#endif
2104+
#if BUILD_DOUBLE == 1
2105+
TABLE_NAME.dgemm_p = 512;
2106+
TABLE_NAME.dgemm_q = 512;
2107+
#endif
2108+
#if BUILD_COMPLEX == 1
2109+
TABLE_NAME.cgemm_p = 160;
2110+
TABLE_NAME.cgemm_q = 480;
2111+
#endif
2112+
#if BUILD_COMPLEX16 == 1
2113+
TABLE_NAME.zgemm_p = 176;
2114+
TABLE_NAME.zgemm_q = 256;
2115+
#endif
2116+
}
2117+
}
2118+
}
20872119

20882120
#if BUILD_SINGLE == 1
20892121
TABLE_NAME.sgemm_p = ((TABLE_NAME.sgemm_p + SGEMM_DEFAULT_UNROLL_M - 1)/SGEMM_DEFAULT_UNROLL_M) * SGEMM_DEFAULT_UNROLL_M;

‎param.h‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1996,6 +1996,25 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19961996

19971997
#else
19981998

1999+
#if L3_SIZE > 0 && L3_SIZE % 33554432 == 0 && L2_SIZE == 1048576
2000+
2001+
#define SGEMM_DEFAULT_P 384
2002+
#define DGEMM_DEFAULT_P 512
2003+
#define CGEMM_DEFAULT_P 160
2004+
#define ZGEMM_DEFAULT_P 176
2005+
2006+
#define SGEMM_DEFAULT_Q 512
2007+
#define DGEMM_DEFAULT_Q 512
2008+
#define CGEMM_DEFAULT_Q 480
2009+
#define ZGEMM_DEFAULT_Q 256
2010+
2011+
#define SGEMM_DEFAULT_R sgemm_r // 5936
2012+
#define DGEMM_DEFAULT_R dgemm_r // 2288
2013+
#define CGEMM_DEFAULT_R cgemm_r // 528
2014+
#define ZGEMM_DEFAULT_R zgemm_r // 1520
2015+
2016+
#else
2017+
19992018
#define SGEMM_DEFAULT_P 640
20002019
#define DGEMM_DEFAULT_P 192
20012020
#define CGEMM_DEFAULT_P 384
@@ -2011,6 +2030,8 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
20112030
#define CGEMM_DEFAULT_R cgemm_r
20122031
#define ZGEMM_DEFAULT_R zgemm_r
20132032

2033+
#endif
2034+
20142035
#define QGEMM_DEFAULT_Q 128
20152036
#define QGEMM_DEFAULT_P 504
20162037
#define QGEMM_DEFAULT_R qgemm_r

0 commit comments

Comments
 (0)