CK
← Back to C-Kernel-Engine Docs
Doxygen Source Documentation
Loading...
Searching...
No Matches
cpu_features.h
Go to the documentation of this file.
1
/**
2
* CPU Feature Detection and Cache-Aware Parameter Tuning
3
*
4
* This module detects CPU cache sizes at runtime and computes optimal
5
* GEMM blocking parameters based on the BLIS/oneDNN methodology.
6
*
7
* Key formulas:
8
* - KC: MR * KC * sizeof(float) fits in L1 (with room for B streaming)
9
* - MC: MC * KC * sizeof(float) fits in L2
10
* - NC: KC * NR fits in L1 for B panel, NC scales with L3
11
*/
12
13
#ifndef CPU_FEATURES_H
14
#define CPU_FEATURES_H
15
16
#include <stdint.h>
17
#include <stddef.h>
18
19
// CPU cache information
20
typedef
struct
{
21
size_t
l1d_size
;
// L1 data cache size in bytes
22
size_t
l2_size
;
// L2 cache size in bytes
23
size_t
l3_size
;
// L3 cache size in bytes
24
size_t
l1_line_size
;
// Cache line size
25
int
num_cores
;
// Number of physical cores
26
int
has_avx
;
27
int
has_avx2
;
28
int
has_avx512f
;
29
int
has_avx512bw
;
30
int
has_avx512dq
;
31
int
has_avx512vl
;
32
int
has_avx512_vnni
;
33
int
has_avx512_bf16
;
34
int
has_amx_tile
;
35
int
has_amx_int8
;
36
int
has_amx_bf16
;
37
int
has_fma
;
38
}
CPUInfo
;
39
40
// GEMM blocking parameters (computed based on cache sizes)
41
typedef
struct
{
42
int
MR
;
// Microkernel rows
43
int
NR
;
// Microkernel cols
44
int
MC
;
// M block size
45
int
NC
;
// N block size
46
int
KC
;
// K block size
47
}
GEMMParams
;
48
49
// Global CPU info and GEMM params (initialized once at startup)
50
extern
CPUInfo
g_cpu_info
;
51
extern
GEMMParams
g_gemm_params
;
52
extern
int
g_cpu_initialized
;
53
54
// Initialize CPU detection (call once at startup)
55
void
cpu_features_init
(
void
);
56
57
// Get current GEMM parameters
58
const
GEMMParams
*
get_gemm_params
(
void
);
59
60
// Get CPU info
61
const
CPUInfo
*
get_cpu_info
(
void
);
62
63
// Debug: print CPU info
64
void
print_cpu_info
(
void
);
65
66
#endif
// CPU_FEATURES_H
print_cpu_info
void print_cpu_info(void)
Definition
cpu_features.c:414
get_gemm_params
const GEMMParams * get_gemm_params(void)
Definition
cpu_features.c:404
get_cpu_info
const CPUInfo * get_cpu_info(void)
Definition
cpu_features.c:409
g_cpu_info
CPUInfo g_cpu_info
Definition
cpu_features.c:28
g_cpu_initialized
int g_cpu_initialized
Definition
cpu_features.c:30
cpu_features_init
void cpu_features_init(void)
Definition
cpu_features.c:376
g_gemm_params
GEMMParams g_gemm_params
Definition
cpu_features.c:29
CPUInfo
Definition
cpu_features.h:20
CPUInfo::has_amx_int8
int has_amx_int8
Definition
cpu_features.h:35
CPUInfo::l1d_size
size_t l1d_size
Definition
cpu_features.h:21
CPUInfo::has_amx_bf16
int has_amx_bf16
Definition
cpu_features.h:36
CPUInfo::l3_size
size_t l3_size
Definition
cpu_features.h:23
CPUInfo::has_avx2
int has_avx2
Definition
cpu_features.h:27
CPUInfo::has_amx_tile
int has_amx_tile
Definition
cpu_features.h:34
CPUInfo::has_fma
int has_fma
Definition
cpu_features.h:37
CPUInfo::has_avx
int has_avx
Definition
cpu_features.h:26
CPUInfo::has_avx512f
int has_avx512f
Definition
cpu_features.h:28
CPUInfo::has_avx512_bf16
int has_avx512_bf16
Definition
cpu_features.h:33
CPUInfo::has_avx512dq
int has_avx512dq
Definition
cpu_features.h:30
CPUInfo::num_cores
int num_cores
Definition
cpu_features.h:25
CPUInfo::has_avx512vl
int has_avx512vl
Definition
cpu_features.h:31
CPUInfo::l2_size
size_t l2_size
Definition
cpu_features.h:22
CPUInfo::has_avx512bw
int has_avx512bw
Definition
cpu_features.h:29
CPUInfo::l1_line_size
size_t l1_line_size
Definition
cpu_features.h:24
CPUInfo::has_avx512_vnni
int has_avx512_vnni
Definition
cpu_features.h:32
GEMMParams
Definition
cpu_features.h:41
GEMMParams::MC
int MC
Definition
cpu_features.h:44
GEMMParams::NC
int NC
Definition
cpu_features.h:45
GEMMParams::MR
int MR
Definition
cpu_features.h:42
GEMMParams::KC
int KC
Definition
cpu_features.h:46
GEMMParams::NR
int NR
Definition
cpu_features.h:43
include
cpu_features.h
Generated by
1.9.8