Environment
Apple M1 Pro (t6000/j316s, 10 cores, 32GB unified); Asahi Linux Fedora 44, kernel 7.1.5-400.asahi.fc44.aarch64; Mesa honeykrisp 26.1.5 (asahi_icd), Vulkan loader 1.4.341. Built with ./dev.sh, Fedora glslc/shaderc 2026.1.
What already works
Build + generation smoke tests coherent (Qwen3-0.6B-bf16/8bit)
bf16 runtime probe correctly falls back (no VK_KHR_shader_bfloat16 on driver) — MLX_VULKAN_DEBUG_CAPS shows extension_present=0 runtime_probe_supported=1
Device classification fixed by goniz/mlx PR Serialize GPU benchmarks with host-shared flock #69 (device-name fallback; vendorID is Mesa's 0x10005, gen TPS improved 22.2→37.6 on short-context generate)
Capability ground truth (GPU0 Apple M1 Pro, from vulkaninfo)
Exposed: Vulkan 1.3 conformant; timelineSemaphore; bufferDeviceAddress; shaderInt8; subgroupSizeControl (but subgroup_min/max reported 0); shaderFloatControls2; VK_KHR_shader_integer_dot_product; VK_EXT_pipeline_robustness; VK_KHR_maintenance5; clustered subgroups; subgroup size 32; unified memory.
Absent: VK_KHR_cooperative_matrix; VK_NV_cooperative_matrix2; VK_KHR_shader_bfloat16; VK_EXT_shader_atomic_float (not in GPU0 list).
Note: llvmpipe (the CPU ICD also present) DOES expose coopmat — earlier confusion possible when grepping whole vulkaninfo output.
Root cause of prefill gap
cooperative_matrix_supported=0 inside MLX → prefer_matmul_coopmat1() false → every GEMM runs scalar matmul_direct_{f16,bf16}_aligned_f16acc (verified MLX_VULKAN_MATMUL_DEBUG=1). RDNA3 Strix Halo CI runs coopmat paths — hence prompt_tps 286 vs 4126.
Baseline numbers (./dev.sh benchmark, 5-trial avg, Qwen3-0.6B)
bf16: prompt 285.934 tps, gen 24.395 tps, peak 2.092 GB
8bit: prompt 285.182 tps, gen 30.235 tps, peak 1.628 GB
Strix Halo reference: bf16 4126/67.99, 8bit 4173/121.1
Tuning roadmap (impact order)
Scalar mul_mm AGX tile tuning (GpuArchitecture::Apple arm, MLX_VULKAN_MATMUL_SPEC sweeps)
fast.cpp flash-attn tuning arms for Apple
Integer dot product for quantized decode GEMV/GEMM (driver exposes it)
conv.cpp shmem padding config for Apple
Upstream: honeykrisp cooperative-matrix support would unlock the existing cm1 kernel family
Environment
Apple M1 Pro (t6000/j316s, 10 cores, 32GB unified); Asahi Linux Fedora 44, kernel 7.1.5-400.asahi.fc44.aarch64; Mesa honeykrisp 26.1.5 (asahi_icd), Vulkan loader 1.4.341. Built with ./dev.sh, Fedora glslc/shaderc 2026.1.
What already works
Capability ground truth (GPU0 Apple M1 Pro, from vulkaninfo)
Exposed: Vulkan 1.3 conformant; timelineSemaphore; bufferDeviceAddress; shaderInt8; subgroupSizeControl (but subgroup_min/max reported 0); shaderFloatControls2; VK_KHR_shader_integer_dot_product; VK_EXT_pipeline_robustness; VK_KHR_maintenance5; clustered subgroups; subgroup size 32; unified memory.
Absent: VK_KHR_cooperative_matrix; VK_NV_cooperative_matrix2; VK_KHR_shader_bfloat16; VK_EXT_shader_atomic_float (not in GPU0 list).
Note: llvmpipe (the CPU ICD also present) DOES expose coopmat — earlier confusion possible when grepping whole vulkaninfo output.
Root cause of prefill gap
cooperative_matrix_supported=0 inside MLX → prefer_matmul_coopmat1() false → every GEMM runs scalar matmul_direct_{f16,bf16}_aligned_f16acc (verified MLX_VULKAN_MATMUL_DEBUG=1). RDNA3 Strix Halo CI runs coopmat paths — hence prompt_tps 286 vs 4126.
Baseline numbers (./dev.sh benchmark, 5-trial avg, Qwen3-0.6B)
Tuning roadmap (impact order)