Skip to content

Commit a978341

Browse files
committed
Add autodetection for POWER7, POWER9 & POWER10
Read from `/proc/cpuinfo` as done for ARM. Fixes flame#501
1 parent 3aa0044 commit a978341

File tree

2 files changed

+28
-5
lines changed

2 files changed

+28
-5
lines changed

frame/base/bli_cpuid.c

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ bool bli_cpuid_is_bulldozer
459459
return TRUE;
460460
}
461461

462-
#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM)
462+
#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM) || defined(_ARCH_PPC)
463463

464464
arch_t bli_cpuid_query_id( void )
465465
{
@@ -514,9 +514,14 @@ arch_t bli_cpuid_query_id( void )
514514
return BLIS_ARCH_GENERIC;
515515
}
516516
}
517-
else if ( vendor == VENDOR_UNKNOWN )
517+
else if ( vendor == VENDOR_IBM )
518518
{
519-
return BLIS_ARCH_GENERIC;
519+
if ( model == MODEL_POWER7)
520+
return BLIS_ARCH_POWER7;
521+
else if ( model == MODEL_POWER9)
522+
return BLIS_ARCH_POWER9;
523+
else if ( model == MODEL_POWER10)
524+
return BLIS_ARCH_POWER10;
520525
}
521526

522527
return BLIS_ARCH_GENERIC;
@@ -1015,7 +1020,7 @@ int vpu_count( void )
10151020
}
10161021
}
10171022

1018-
#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM)
1023+
#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM) || defined(_ARCH_PPC)
10191024

10201025
#define TEMP_BUFFER_SIZE 200
10211026

@@ -1037,6 +1042,20 @@ uint32_t bli_cpuid_query
10371042
char feat_str[ TEMP_BUFFER_SIZE ];
10381043
char* r_val;
10391044

1045+
#ifdef _ARCH_PPC
1046+
r_val = find_string_in( "cpu", proc_str, TEMP_BUFFER_SIZE, pci_str );
1047+
if ( r_val == NULL ) return VENDOR_IBM;
1048+
1049+
if ( strstr( proc_str, "POWER7" ) != NULL )
1050+
*model = MODEL_POWER7;
1051+
else if ( strstr( proc_str, "POWER9" ) != NULL )
1052+
*model = MODEL_POWER9;
1053+
else if ( strstr( proc_str, "POWER10" ) != NULL )
1054+
*model = MODEL_POWER10;
1055+
1056+
return VENDOR_IBM;
1057+
#endif
1058+
10401059
//printf( "bli_cpuid_query(): beginning search\n" );
10411060

10421061
// Search /proc/cpuinfo for the 'Processor' entry.

frame/base/bli_cpuid.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,19 +159,23 @@ enum
159159
FEATURE_AVX512VL = 0x4000
160160
};
161161

162-
#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM)
162+
#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM) || defined(_ARCH_PPC)
163163

164164
char* find_string_in( char* target, char* buffer, size_t buf_len, char* filepath );
165165

166166
enum
167167
{
168168
VENDOR_ARM = 0,
169+
VENDOR_IBM,
169170
VENDOR_UNKNOWN
170171
};
171172
enum
172173
{
173174
MODEL_ARMV7 = 0,
174175
MODEL_ARMV8,
176+
MODEL_POWER7,
177+
MODEL_POWER9,
178+
MODEL_POWER10,
175179
MODEL_UNKNOWN
176180
};
177181
enum

0 commit comments

Comments
 (0)