Skip to content

Commit 7c02f4b

Browse files
authored
Merge pull request #2744 from martin-frbg/issue2738
Add AMD Renoir/Matisse cpu autodetection and preliminary support for Zen3
2 parents 3832620 + 1291835 commit 7c02f4b

File tree

2 files changed

+32
-9
lines changed

2 files changed

+32
-9
lines changed

cpuid_x86.c

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1454,10 +1454,11 @@ int get_cpuname(void){
14541454
return CPUTYPE_OPTERON;
14551455
case 1:
14561456
case 3:
1457-
case 7:
1458-
case 10:
1457+
// case 7:
1458+
// case 10:
14591459
return CPUTYPE_BARCELONA;
14601460
case 5:
1461+
case 7:
14611462
return CPUTYPE_BOBCAT;
14621463
case 6:
14631464
switch (model) {
@@ -1507,6 +1508,8 @@ int get_cpuname(void){
15071508
// AMD Ryzen
15081509
case 8:
15091510
// AMD Ryzen2
1511+
default:
1512+
// Matisse/Renoir and other recent Ryzen2
15101513
if(support_avx())
15111514
#ifndef NO_AVX2
15121515
return CPUTYPE_ZEN;
@@ -1516,6 +1519,16 @@ int get_cpuname(void){
15161519
else
15171520
return CPUTYPE_BARCELONA;
15181521
}
1522+
break;
1523+
case 10: // Zen3
1524+
if(support_avx())
1525+
#ifndef NO_AVX2
1526+
return CPUTYPE_ZEN;
1527+
#else
1528+
return CPUTYPE_SANDYBRIDGE; // Zen is closer in architecture to Sandy Bridge than to Excavator
1529+
#endif
1530+
else
1531+
return CPUTYPE_BARCELONA;
15191532
}
15201533
break;
15211534
}
@@ -2107,7 +2120,7 @@ int get_coretype(void){
21072120
return CORE_PILEDRIVER;
21082121
else
21092122
return CORE_BARCELONA; //OS don't support AVX.
2110-
case 5: // New EXCAVATOR
2123+
case 5: // New EXCAVATOR
21112124
if(support_avx())
21122125
return CORE_EXCAVATOR;
21132126
else
@@ -2135,12 +2148,14 @@ int get_coretype(void){
21352148
}
21362149
break;
21372150
}
2138-
} else if (exfamily == 8) {
2151+
} else if (exfamily == 8 || exfamily == 10) {
21392152
switch (model) {
21402153
case 1:
21412154
// AMD Ryzen
21422155
case 8:
2143-
// Ryzen 2
2156+
// Ryzen 2
2157+
default:
2158+
// Matisse,Renoir Ryzen2 models
21442159
if(support_avx())
21452160
#ifndef NO_AVX2
21462161
return CORE_ZEN;

driver/others/dynamic.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,7 @@ static gotoblas_t *get_coretype(void){
656656
if ((exfamily == 0) || (exfamily == 2)) {
657657
if (ecx & (1 << 0)) return &gotoblas_OPTERON_SSE3;
658658
else return &gotoblas_OPTERON;
659-
} else if (exfamily == 5) {
659+
} else if (exfamily == 5 || exfamily == 7) {
660660
return &gotoblas_BOBCAT;
661661
} else if (exfamily == 6) {
662662
if(model == 1){
@@ -710,24 +710,32 @@ static gotoblas_t *get_coretype(void){
710710
}
711711
}
712712
} else if (exfamily == 8) {
713-
if (model == 1 || model == 8) {
713+
/* if (model == 1 || model == 8) */ {
714714
if(support_avx())
715715
return &gotoblas_ZEN;
716716
else{
717717
openblas_warning(FALLBACK_VERBOSE, BARCELONA_FALLBACK);
718718
return &gotoblas_BARCELONA; //OS doesn't support AVX. Use old kernels.
719719
}
720720
}
721-
} else if (exfamily == 9) {
721+
} else if (exfamily == 9) {
722722
if(support_avx())
723723
return &gotoblas_ZEN;
724724
else{
725725
openblas_warning(FALLBACK_VERBOSE, BARCELONA_FALLBACK);
726726
return &gotoblas_BARCELONA; //OS doesn't support AVX. Use old kernels.
727-
}
727+
}
728+
} else if (exfamily == 10) {
729+
if(support_avx())
730+
return &gotoblas_ZEN;
731+
else{
732+
openblas_warning(FALLBACK_VERBOSE, BARCELONA_FALLBACK);
733+
return &gotoblas_BARCELONA; //OS doesn't support AVX. Use old kernels.
734+
}
728735
}else {
729736
return &gotoblas_BARCELONA;
730737
}
738+
731739
}
732740
}
733741

0 commit comments

Comments
 (0)