Skip to content

Intel Arc 140T (Arrow Lake H, Xe2) not detected as INTEL_XE2 — cooperative matrix disabled despite driver support #20776

@diegokolling

Description

@diegokolling

Intel Arc 140T (Arrow Lake H, Xe2) not detected as INTEL_XE2 — cooperative matrix disabled despite driver support

Summary

The Intel Arc 140T iGPU (Arrow Lake H, Xe2 architecture, device ID 0x7d51) reports matrix cores: none on Windows, even though the Vulkan driver fully exposes VK_KHR_cooperative_matrix. The root cause is that the Intel Windows driver reports minSubgroupSize = 8 for this GPU, while the get_device_architecture() function in ggml-vulkan.cpp requires minSubgroupSize == 16 to classify a device as INTEL_XE2 — the only Intel architecture allowed to use coopmat.

The Arc 140V (Lunar Lake, same Xe2 microarchitecture) reports minSubgroupSize = 16 with the same driver branch and is correctly classified as INTEL_XE2 with matrix cores: KHR_coopmat (see issue #18946).

Environment

  • GPU: Intel Arc 140T (48GB shared, device ID 0x7d51)
  • CPU: Intel Core Ultra 9 285H (Arrow Lake H)
  • Driver: Intel 32.0.101.8626 WHQL (latest, released 2026-03-18)
  • OS: Windows 11
  • llama.cpp: b8429 (2026-03-19) and Ollama 0.18.2 — both show matrix cores: none

Evidence

1. Driver exposes cooperative matrix

PS> vulkaninfo | Select-String "minSubgroupSize|cooperative"
        minSubgroupSize = 8
        VK_KHR_cooperative_matrix : extension revision 2
        cooperativeMatrix = true
        cooperativeMatrixRobustBufferAccess = true

2. llama.cpp does not detect it

PS> .\llama-cli.exe --version
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) Arc(TM) 140T GPU (48GB) (Intel Corporation) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 49152 | int dot: 1 | matrix cores: none
version: 8429 (1e6453457)

3. vulkaninfo summary

GPU0:
    apiVersion         = 1.4.340
    driverVersion      = 101.8626
    vendorID           = 0x8086
    deviceID           = 0x7d51
    deviceType         = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
    deviceName         = Intel(R) Arc(TM) 140T GPU (48GB)
    driverID           = DRIVER_ID_INTEL_PROPRIETARY_WINDOWS

Root Cause Analysis

In ggml-vulkan.cpp, the detection chain is:

Step 1 — get_device_architecture() (line ~343):

if (subgroup_size_control_props.minSubgroupSize == 16) {
    return vk_device_architecture::INTEL_XE2;
}

Since the 140T reports minSubgroupSize = 8, this returns OTHER.

Step 2 — ggml_vk_khr_cooperative_matrix_support() (line ~15972):

case VK_VENDOR_ID_INTEL:
    return arch == vk_device_architecture::INTEL_XE2;

Since arch == OTHER, coopmat is disabled.

Comparison with Arc 140V

The Arc 140V (Lunar Lake, also Xe2) works correctly because it reports minSubgroupSize = 16. Both GPUs:

  • Use the same Xe2 microarchitecture
  • Use the same Windows driver branch (32.0.101.xxxx)
  • Expose VK_KHR_cooperative_matrix

But the 140T's driver reports a different minSubgroupSize, causing ggml to misclassify it.

Suggested Fix

Add a fallback detection path for Intel GPUs that checks for VK_KHR_cooperative_matrix support directly, or add device ID-based detection for known Xe2 iGPUs with minSubgroupSize != 16. For example:

// In get_device_architecture(), Intel section:
if (subgroup_size_control_props.minSubgroupSize == 16) {
    return vk_device_architecture::INTEL_XE2;
}
// Fallback: check device ID for known Xe2 Arrow Lake H GPUs
if (props.deviceID == 0x7D51 || props.deviceID == 0x7D45) {
    return vk_device_architecture::INTEL_XE2;
}

Alternatively, an Intel driver fix to report minSubgroupSize = 16 for Arrow Lake H would resolve this without ggml changes. I have filed a parallel report with Intel.

Related Issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions