Skip to content

Apple Silicon baseline (Asahi honeykrisp): no cooperative matrix caps GEMM at scalar path; capability map + tuning roadmap #70

Description

@IlyaasK

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)

  1. Scalar mul_mm AGX tile tuning (GpuArchitecture::Apple arm, MLX_VULKAN_MATMUL_SPEC sweeps)
  2. fast.cpp flash-attn tuning arms for Apple
  3. Integer dot product for quantized decode GEMV/GEMM (driver exposes it)
  4. conv.cpp shmem padding config for Apple
  5. Upstream: honeykrisp cooperative-matrix support would unlock the existing cm1 kernel family

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions