Skip to content

Commit 5f432f7

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

2 files changed

Lines changed: 28 additions & 5 deletions

File tree

frame/base/bli_cpuid.c

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ bool bli_cpuid_is_avx_supported( void )
516516
return is_avx_supported;
517517
}
518518

519-
#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM)
519+
#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM) || defined(_ARCH_PPC)
520520

521521
arch_t bli_cpuid_query_id( void )
522522
{
@@ -571,9 +571,14 @@ arch_t bli_cpuid_query_id( void )
571571
return BLIS_ARCH_GENERIC;
572572
}
573573
}
574-
else if ( vendor == VENDOR_UNKNOWN )
574+
else if ( vendor == VENDOR_IBM )
575575
{
576-
return BLIS_ARCH_GENERIC;
576+
if ( model == MODEL_POWER7)
577+
return BLIS_ARCH_POWER7;
578+
else if ( model == MODEL_POWER9)
579+
return BLIS_ARCH_POWER9;
580+
else if ( model == MODEL_POWER10)
581+
return BLIS_ARCH_POWER10;
577582
}
578583

579584
return BLIS_ARCH_GENERIC;
@@ -1072,7 +1077,7 @@ int vpu_count( void )
10721077
}
10731078
}
10741079

1075-
#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM)
1080+
#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM) || defined(_ARCH_PPC)
10761081

10771082
#define TEMP_BUFFER_SIZE 200
10781083

@@ -1094,6 +1099,20 @@ uint32_t bli_cpuid_query
10941099
char feat_str[ TEMP_BUFFER_SIZE ];
10951100
char* r_val;
10961101

1102+
#ifdef _ARCH_PPC
1103+
r_val = find_string_in( "cpu", proc_str, TEMP_BUFFER_SIZE, pci_str );
1104+
if ( r_val == NULL ) return VENDOR_IBM;
1105+
1106+
if ( strstr( proc_str, "POWER7" ) != NULL )
1107+
*model = MODEL_POWER7;
1108+
else if ( strstr( proc_str, "POWER9" ) != NULL )
1109+
*model = MODEL_POWER9;
1110+
else if ( strstr( proc_str, "POWER10" ) != NULL )
1111+
*model = MODEL_POWER10;
1112+
1113+
return VENDOR_IBM;
1114+
#endif
1115+
10971116
//printf( "bli_cpuid_query(): beginning search\n" );
10981117

10991118
// 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
@@ -161,19 +161,23 @@ enum
161161

162162

163163

164-
#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM)
164+
#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM) || defined(_ARCH_PPC)
165165

166166
char* find_string_in( char* target, char* buffer, size_t buf_len, char* filepath );
167167

168168
enum
169169
{
170170
VENDOR_ARM = 0,
171+
VENDOR_IBM,
171172
VENDOR_UNKNOWN
172173
};
173174
enum
174175
{
175176
MODEL_ARMV7 = 0,
176177
MODEL_ARMV8,
178+
MODEL_POWER7,
179+
MODEL_POWER9,
180+
MODEL_POWER10,
177181
MODEL_UNKNOWN
178182
};
179183
enum

0 commit comments

Comments
 (0)