PR #238 added a dedicated integer-dot shader for PTQ1_0 on Vulkan. It only fires when the device classifies as INTEL_XE2 (minSubgroupSize == 16). My Arc 140T (Panther Lake, Xe3) reports minSubgroupSize == 8, so it classifies as INTEL_XE1 and falls through to the blanket eIntelProprietaryWindows opt-out. The fast shader never runs.
Environment
- GPU: Intel Arc 140T (32GB), Panther Lake
- Driver: 101.8860, DRIVER_ID_INTEL_PROPRIETARY_WINDOWS
- vulkaninfo:
minSubgroupSize = 8
maxSubgroupSize = 32
integerDotProduct4x8BitPackedSignedAccelerated = true
shaderIntegerDotProduct = true
- Build: prism-b10735 (842b188), Windows, MSVC 19.51, Vulkan SDK 1.4.357
- Model: Ternary-Bonsai-2-27B-PTQ1_0.gguf
Repro
llama-cli -m Ternary-Bonsai-2-27B-PTQ1_0.gguf -ngl 99 -c 65536 -n 16384 --single-turn -p "..."
Result: 1.3 tok/s generation — matches the pre-#238 numbers that PR reported for Arc B390.
Root cause
ggml_vk_get_device_architecture() requires integerDotProduct4x8BitPackedSignedAccelerated for both INTEL_XE2 and INTEL_XE1 classification. ggml_vk_should_use_mmvq() only checks for INTEL_XE2 before allowing PTQ1_0 through. The shader needs the integer-dot flag, not the subgroup width, and INTEL_XE1 already guarantees that flag.
Fix
Add an INTEL_XE1 && device->integer_dot_product gate alongside the existing INTEL_XE2 check in ggml_vk_should_use_mmvq().
Result
Before: 1.3 tok/s
After: 8.8 tok/s (6.7x)
Branch with the patch: https://github.com/rriley-quorum/llama.cpp/tree/local/arc-140t-fixes (the vulkan: commit; ignore the sycl: commit, that's an unrelated local oneAPI-version workaround).
I'm happy to open a PR if this is a useful contribution.
PR #238 added a dedicated integer-dot shader for PTQ1_0 on Vulkan. It only fires when the device classifies as INTEL_XE2 (
minSubgroupSize == 16). My Arc 140T (Panther Lake, Xe3) reportsminSubgroupSize == 8, so it classifies as INTEL_XE1 and falls through to the blanketeIntelProprietaryWindowsopt-out. The fast shader never runs.Environment
Repro
llama-cli -m Ternary-Bonsai-2-27B-PTQ1_0.gguf -ngl 99 -c 65536 -n 16384 --single-turn -p "..."Result: 1.3 tok/s generation — matches the pre-#238 numbers that PR reported for Arc B390.
Root cause
ggml_vk_get_device_architecture()requiresintegerDotProduct4x8BitPackedSignedAcceleratedfor both INTEL_XE2 and INTEL_XE1 classification.ggml_vk_should_use_mmvq()only checks for INTEL_XE2 before allowing PTQ1_0 through. The shader needs the integer-dot flag, not the subgroup width, and INTEL_XE1 already guarantees that flag.Fix
Add an
INTEL_XE1 && device->integer_dot_productgate alongside the existing INTEL_XE2 check inggml_vk_should_use_mmvq().Result
Before: 1.3 tok/s
After: 8.8 tok/s (6.7x)
Branch with the patch: https://github.com/rriley-quorum/llama.cpp/tree/local/arc-140t-fixes (the
vulkan:commit; ignore thesycl:commit, that's an unrelated local oneAPI-version workaround).I'm happy to open a PR if this is a useful contribution.