use cubecl::ir::{HardwareProperties, VectorSize};
pub const AVX2: HardwareProperties = HardwareProperties {
load_width: 256,
vector_register_count: Some(16),
plane_size_min: 1,
plane_size_max: 1,
max_bindings: u32::MAX,
max_shared_memory_size: 32 * 1024,
max_cube_count: (u32::MAX, u32::MAX, u32::MAX),
max_units_per_cube: 16,
max_cube_dim: (16, 16, 16),
num_streaming_multiprocessors: None,
num_cpu_cores: Some(16),
last_level_cache_size: None,
num_tensor_cores: None,
min_tensor_cores_dim: None,
max_vector_size: VectorSize::MAX,
cube_mma_reserved_shared_memory: 0,
};
pub const AVX512: HardwareProperties = HardwareProperties {
load_width: 512,
vector_register_count: Some(32),
..AVX2
};
pub const NEON: HardwareProperties = HardwareProperties {
load_width: 128,
vector_register_count: Some(32),
max_shared_memory_size: 64 * 1024,
max_units_per_cube: 8,
max_cube_dim: (8, 8, 8),
num_cpu_cores: Some(8),
..AVX2
};
pub const GPU: HardwareProperties = HardwareProperties {
load_width: 128,
vector_register_count: None,
plane_size_min: 32,
plane_size_max: 32,
max_bindings: 32,
max_shared_memory_size: 48 * 1024,
max_cube_count: (u32::MAX, u32::MAX, u32::MAX),
max_units_per_cube: 1024,
max_cube_dim: (1024, 1024, 64),
num_streaming_multiprocessors: Some(64),
num_cpu_cores: None,
last_level_cache_size: None,
num_tensor_cores: Some(4),
min_tensor_cores_dim: Some(16),
max_vector_size: VectorSize::MAX,
cube_mma_reserved_shared_memory: 0,
};