b9893
b9893
View on GitHubView PackagePublished: Jul 7, 2026

Release Notes

opencl: general flash attention decode performance optimizations (#25366)

  • opencl: vec flash-attention decode kernels for f16/q8_0/q4_0 KV

  • opencl: improve non FA KQ mv kernels

  • opencl: tweaks for multiquery FA

  • opencl: some tweaks for FA q1 kernels

  • opencl: FA with DK=DV=512 for gemma-4

  • opencl: various fixes

  • opencl: cleanup

  • opencl: fix FA decode crash for DK=512 (gemma-4)

The DK=512 decode-only program does not create the f32_f16 prefill kernel, so the compiled check in ensure_fa_variant never hit and supports_op gave inconsistent answers for the same op. block_n is also unset for DK=512 decode; guard it to avoid an out-of-range read at dispatch.

  • opencl: run DK=512 FA decode on CPU

DK=512 decode is bandwidth-bound and faster on the CPU than the GPU, increasingly so with depth. Decline it in supports_op; prefill stays on the GPU.

  • opencl: compile MQ_GQA=8 FA kernels in a minimal program

The full program compiled with -D MQ_GQA=8 runs the Adreno compiler out of memory at DK>=256. Only the vec_mq kernels are used from this program, so compile it with FA_MQ_ONLY, which excludes everything else. Also include the program name in the compile error log.

  • opencl: remove stray token in flash_attn_f32_f16.cl

A stray "." broke the f32_f16 program build.

  • opencl: split f16-KV FA decode finer (FD_KV_PER_SPLIT_F16)

The 2048 default under-fills the GPU on single-query f16-KV decode; use 512 for f16 KV to get more splits. Quantized KV keeps 2048.


Co-authored-by: Li He [email protected]

macOS/iOS:

Linux:

Android:

Windows:

openEuler:

  • DISABLED
  • openEuler x86 (310p)
  • openEuler x86 (910b, ACL Graph)
  • openEuler aarch64 (310p)
  • openEuler aarch64 (910b, ACL Graph)

UI: