← Back to C-Kernel-Engine Docs Doxygen Source Documentation
cpu_features.h File Reference
#include <stdint.h>
#include <stddef.h>

Go to the source code of this file.

Data Structures

struct  CPUInfo
 
struct  GEMMParams
 

Functions

void cpu_features_init (void)
 
const CPUInfoget_cpu_info (void)
 
const GEMMParamsget_gemm_params (void)
 
void print_cpu_info (void)
 

Variables

CPUInfo g_cpu_info
 
int g_cpu_initialized
 
GEMMParams g_gemm_params
 

Function Documentation

◆ cpu_features_init()

void cpu_features_init ( void  )

Definition at line 344 of file cpu_features.c.

344  {
345  if (g_cpu_initialized) return;
346 
347  memset(&g_cpu_info, 0, sizeof(g_cpu_info));
348  memset(&g_gemm_params, 0, sizeof(g_gemm_params));
349 
350  // Detect SIMD features
351 #ifdef X86_CPU
352  detect_x86_features(&g_cpu_info);
353  detect_x86_cache_sizes(&g_cpu_info);
354 #endif
355 
356  // Linux sysfs fallback for cache sizes
357 #if defined(__linux__)
358  if (g_cpu_info.l1d_size == 0) {
359  detect_linux_cache_sizes(&g_cpu_info);
360  }
361 #endif
362 
363  // Detect physical cores
365 
366  // Compute GEMM parameters based on detected hardware
368 
369  g_cpu_initialized = 1;
370 }
static void compute_gemm_params(const CPUInfo *cpu, GEMMParams *params)
Definition: cpu_features.c:268
CPUInfo g_cpu_info
Definition: cpu_features.c:28
static int detect_physical_cores(void)
Definition: cpu_features.c:246
int g_cpu_initialized
Definition: cpu_features.c:30
GEMMParams g_gemm_params
Definition: cpu_features.c:29
size_t l1d_size
Definition: cpu_features.h:21
int num_cores
Definition: cpu_features.h:25

References compute_gemm_params(), detect_physical_cores(), g_cpu_info, g_cpu_initialized, g_gemm_params, CPUInfo::l1d_size, and CPUInfo::num_cores.

Referenced by get_cpu_info(), get_gemm_params(), and print_cpu_info().

◆ get_cpu_info()

const CPUInfo* get_cpu_info ( void  )

Definition at line 377 of file cpu_features.c.

377  {
379  return &g_cpu_info;
380 }
void cpu_features_init(void)
Definition: cpu_features.c:344

References cpu_features_init(), g_cpu_info, and g_cpu_initialized.

Referenced by gemm_init_threads().

◆ get_gemm_params()

const GEMMParams* get_gemm_params ( void  )

Definition at line 372 of file cpu_features.c.

372  {
374  return &g_gemm_params;
375 }

References cpu_features_init(), g_cpu_initialized, and g_gemm_params.

◆ print_cpu_info()

void print_cpu_info ( void  )

Definition at line 382 of file cpu_features.c.

382  {
384 
385  printf("=== CPU Info ===\n");
386  printf("Physical cores: %d\n", g_cpu_info.num_cores);
387  printf("L1 Data Cache: %zu KB\n", g_cpu_info.l1d_size / 1024);
388  printf("L2 Cache: %zu KB\n", g_cpu_info.l2_size / 1024);
389  printf("L3 Cache: %zu MB\n", g_cpu_info.l3_size / (1024 * 1024));
390  printf("Cache line: %zu bytes\n", g_cpu_info.l1_line_size);
391  printf("AVX: %s\n", g_cpu_info.has_avx ? "yes" : "no");
392  printf("AVX2: %s\n", g_cpu_info.has_avx2 ? "yes" : "no");
393  printf("AVX-512F: %s\n", g_cpu_info.has_avx512f ? "yes" : "no");
394  printf("FMA: %s\n", g_cpu_info.has_fma ? "yes" : "no");
395  printf("\n=== GEMM Blocking Parameters ===\n");
396  printf("MR (microkernel rows): %d\n", g_gemm_params.MR);
397  printf("NR (microkernel cols): %d\n", g_gemm_params.NR);
398  printf("MC (M block): %d\n", g_gemm_params.MC);
399  printf("NC (N block): %d\n", g_gemm_params.NC);
400  printf("KC (K block): %d\n", g_gemm_params.KC);
401  printf("\n");
402 }
size_t l3_size
Definition: cpu_features.h:23
int has_avx2
Definition: cpu_features.h:27
int has_fma
Definition: cpu_features.h:29
int has_avx
Definition: cpu_features.h:26
int has_avx512f
Definition: cpu_features.h:28
size_t l2_size
Definition: cpu_features.h:22
size_t l1_line_size
Definition: cpu_features.h:24

References cpu_features_init(), g_cpu_info, g_cpu_initialized, g_gemm_params, CPUInfo::has_avx, CPUInfo::has_avx2, CPUInfo::has_avx512f, CPUInfo::has_fma, GEMMParams::KC, CPUInfo::l1_line_size, CPUInfo::l1d_size, CPUInfo::l2_size, CPUInfo::l3_size, GEMMParams::MC, GEMMParams::MR, GEMMParams::NC, GEMMParams::NR, and CPUInfo::num_cores.

Variable Documentation

◆ g_cpu_info

CPUInfo g_cpu_info
extern

CPU Feature Detection and Cache-Aware Parameter Tuning

Detects CPU features, cache sizes, and core counts at runtime. Computes optimal GEMM blocking parameters based on actual hardware.

Definition at line 28 of file cpu_features.c.

Referenced by cpu_features_init(), get_cpu_info(), and print_cpu_info().

◆ g_cpu_initialized

int g_cpu_initialized
extern

Definition at line 30 of file cpu_features.c.

Referenced by cpu_features_init(), get_cpu_info(), get_gemm_params(), and print_cpu_info().

◆ g_gemm_params

GEMMParams g_gemm_params
extern

Definition at line 29 of file cpu_features.c.

Referenced by cpu_features_init(), get_gemm_params(), and print_cpu_info().