Skip to content

vulkan: add f16 B-type matmul pipelines and warp tile size tuning for Intel coopmat1 - #27471

Draft
fish-jiang wants to merge 2 commits into
ggml-org:masterfrom
fish-jiang:intel/xe-warptile-f16
Draft

vulkan: add f16 B-type matmul pipelines and warp tile size tuning for Intel coopmat1#27471
fish-jiang wants to merge 2 commits into
ggml-org:masterfrom
fish-jiang:intel/xe-warptile-f16

Conversation

@fish-jiang

@fish-jiang fish-jiang commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Overview

Performance (Windows OS)

Xe1-ARL_H
Before:
C:\kernel\llama.cpp\build_base\bin\Release>llama-bench.exe -p 512 -n 0 -r 3 -fa 0,1 --delay 10 -ngl 99 -m C:\kernel\model\gemma-4-31B-it-Q4_K_M.gguf,C:\kernel\model\Qwen3-0.6B-Q4_K_M.gguf,C:\kernel\model\qwen3-8b-q4_k_m.gguf,C:\kernel\model\Qwen3.8-27B-Q4_K_M.gguf,C:\kernel\model\Qwen3.6-35B-A3B-UD-Q4_K_M.gguf,C:\kernel\model\gpt-oss-20b-Q4_K_M.gguf

model                                 size     params backend     ngl  fa            test                  t/s
gemma4 31B Q4_K - Medium        17.05 GiB    30.70 B Vulkan      99   0           pp512        106.60 ± 0.16
gemma4 31B Q4_K - Medium        17.05 GiB    30.70 B Vulkan      99   1           pp512        103.85 ± 0.43
qwen3 0.6B Q4_K - Medium       456.11 MiB   751.63 M Vulkan      99   0           pp512      3409.77 ± 10.33
qwen3 0.6B Q4_K - Medium       456.11 MiB   751.63 M Vulkan      99   1           pp512      3453.43 ± 41.74
qwen3 8B Q4_K - Medium           4.68 GiB     8.19 B Vulkan      99   0           pp512        414.20 ± 1.12
qwen3 8B Q4_K - Medium           4.68 GiB     8.19 B Vulkan      99   1           pp512        427.43 ± 1.59
qwen35 27B Q4_K - Medium        15.92 GiB    27.32 B Vulkan      99   0           pp512        109.99 ± 0.71
qwen35 27B Q4_K - Medium        15.92 GiB    27.32 B Vulkan      99   1           pp512        111.86 ± 0.22
qwen35moe 35B.A3B Q4_K - Medium  20.60 GiB    34.66 B Vulkan      99   0           pp512        347.98 ± 4.65
qwen35moe 35B.A3B Q4_K - Medium  20.60 GiB    34.66 B Vulkan      99   1           pp512        353.19 ± 5.92
gpt-oss 20B Q4_K - Medium        10.81 GiB    20.91 B Vulkan      99   0           pp512        486.52 ± 1.38
gpt-oss 20B Q4_K - Medium        10.81 GiB    20.91 B Vulkan      99   1           pp512        514.71 ± 4.20

After:
C:\kernel\llama.cpp\build\bin\Release>llama-bench.exe -p 512 -n 0 -r 3 -fa 0,1 --delay 10 -ngl 99 -m C:\kernel\model\gemma-4-31B-it-Q4_K_M.gguf,C:\kernel\model\Qwen3-0.6B-Q4_K_M.gguf,C:\kernel\model\qwen3-8b-q4_k_m.gguf,C:\kernel\model\Qwen3.8-27B-Q4_K_M.gguf,C:\kernel\model\Qwen3.6-35B-A3B-UD-Q4_K_M.gguf,C:\kernel\model\gpt-oss-20b-Q4_K_M.gguf

model                                 size     params backend     ngl  fa            test                  t/s
gemma4 31B Q4_K - Medium        17.05 GiB    30.70 B Vulkan      99   0           pp512        138.66 ± 0.46
gemma4 31B Q4_K - Medium        17.05 GiB    30.70 B Vulkan      99   1           pp512        133.81 ± 0.01
qwen3 0.6B Q4_K - Medium       456.11 MiB   751.63 M Vulkan      99   0           pp512       3539.43 ± 5.35
qwen3 0.6B Q4_K - Medium       456.11 MiB   751.63 M Vulkan      99   1           pp512      3542.68 ± 21.19
qwen3 8B Q4_K - Medium           4.68 GiB     8.19 B Vulkan      99   0           pp512        532.65 ± 2.49
qwen3 8B Q4_K - Medium           4.68 GiB     8.19 B Vulkan      99   1           pp512        545.46 ± 0.67
qwen35 27B Q4_K - Medium        15.92 GiB    27.32 B Vulkan      99   0           pp512        133.56 ± 0.86
qwen35 27B Q4_K - Medium        15.92 GiB    27.32 B Vulkan      99   1           pp512        133.21 ± 0.72
qwen35moe 35B.A3B Q4_K - Medium  20.60 GiB    34.66 B Vulkan      99   0           pp512        366.83 ± 6.08
qwen35moe 35B.A3B Q4_K - Medium  20.60 GiB    34.66 B Vulkan      99   1           pp512        365.20 ± 6.01
gpt-oss 20B Q4_K - Medium        10.81 GiB    20.91 B Vulkan      99   0           pp512        568.09 ± 1.56
gpt-oss 20B Q4_K - Medium        10.81 GiB    20.91 B Vulkan      99   1           pp512        603.93 ± 4.82

Xe3-PTL
Before:
C:\Users\dungeon\Desktop\fish\llama.cpp\build_ d59d\bin\Release>llama-bench.exe -p 512 -n 0 -r 3 -fa 0,1 --delay 10 -ngl 99 -m C:\Users\dungeon\Desktop\models\qwen3-8b-q4_k_m\qwen3-8b-q4_k_m.gguf,C:\Users\dungeon\Desktop\models\qwen2.5-1.5b-instruct-q4_k_m\qwen2.5-1.5b-instruct-q4_k_m.gguf,C:\Users\dungeon\Desktop\models\Llama-3.1-8B-Instruct-Q4_K_M\Llama-3.1-8B-Instruct-Q4_K_M.gguf,C:\Users\dungeon\Downloads\Qwen3.8-27B-Q4_K_M.gguf,C:\Users\dungeon\Downloads\Qwen3.6-35B-A3B-UD-Q4_K_M.gguf,C:\Users\dungeon\Desktop\models\gpt-oss-20b-Q4_K_M\gpt-oss-20b-Q4_K_M.gguf

model                                 size     params backend     ngl  fa            test                  t/s
qwen3 8B Q4_K - Medium           4.68 GiB     8.19 B Vulkan      99   0           pp512      1011.55 ± 29.38
qwen3 8B Q4_K - Medium           4.68 GiB     8.19 B Vulkan      99   1           pp512      1022.33 ± 29.91
qwen2 1.5B Q4_K - Medium         1.04 GiB     1.78 B Vulkan      99   0           pp512     4418.79 ± 581.94
qwen2 1.5B Q4_K - Medium         1.04 GiB     1.78 B Vulkan      99   1           pp512     4231.56 ± 563.52
llama 8B Q4_K - Medium           4.58 GiB     8.03 B Vulkan      99   0           pp512       1015.82 ± 8.45
llama 8B Q4_K - Medium           4.58 GiB     8.03 B Vulkan      99   1           pp512       1105.96 ± 2.56
qwen35 27B Q4_K - Medium        15.92 GiB    27.32 B Vulkan      99   0           pp512        284.39 ± 2.62
qwen35 27B Q4_K - Medium        15.92 GiB    27.32 B Vulkan      99   1           pp512        263.66 ± 0.69
qwen35moe 35B.A3B Q4_K - Medium  21.10 GiB    35.51 B Vulkan      99   0           pp512        841.70 ± 7.98
qwen35moe 35B.A3B Q4_K - Medium  21.10 GiB    35.51 B Vulkan      99   1           pp512       791.32 ± 10.30
gpt-oss 20B Q4_K - Medium        10.81 GiB    20.91 B Vulkan      99   0           pp512      1163.01 ± 13.35
gpt-oss 20B Q4_K - Medium        10.81 GiB    20.91 B Vulkan      99   1           pp512       1276.05 ± 1.22

After:
C:\Users\dungeon\Desktop\fish\llama.cpp\build\bin\Release>llama-bench.exe -p 512 -n 0 -r 3 -fa 0,1 --delay 10 -ngl 99 -m C:\Users\dungeon\Desktop\models\qwen3-8b-q4_k_m\qwen3-8b-q4_k_m.gguf,C:\Users\dungeon\Desktop\models\qwen2.5-1.5b-instruct-q4_k_m\qwen2.5-1.5b-instruct-q4_k_m.gguf,C:\Users\dungeon\Desktop\models\Llama-3.1-8B-Instruct-Q4_K_M\Llama-3.1-8B-Instruct-Q4_K_M.gguf,C:\Users\dungeon\Downloads\Qwen3.8-27B-Q4_K_M.gguf,C:\Users\dungeon\Downloads\Qwen3.6-35B-A3B-UD-Q4_K_M.gguf,C:\Users\dungeon\Desktop\models\gpt-oss-20b-Q4_K_M\gpt-oss-20b-Q4_K_M.gguf
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) Graphics i gfx-driver-ci-comp_igc-34261 DCH RI (Intel Corporation) | uma: 1 | fp16: 1 | bf16: 0 | fp4: 0 | warp size: 32 | shared memory: 65536 | int dot: 1 | matrix cores: KHR_coopmat

model                                 size     params backend     ngl  fa            test                  t/s
qwen3 8B Q4_K - Medium           4.68 GiB     8.19 B Vulkan      99   0           pp512      1139.91 ± 25.88
qwen3 8B Q4_K - Medium           4.68 GiB     8.19 B Vulkan      99   1           pp512      1149.18 ± 79.59
qwen2 1.5B Q4_K - Medium         1.04 GiB     1.78 B Vulkan      99   0           pp512     5352.63 ± 193.44
qwen2 1.5B Q4_K - Medium         1.04 GiB     1.78 B Vulkan      99   1           pp512      5210.39 ± 89.54
llama 8B Q4_K - Medium           4.58 GiB     8.03 B Vulkan      99   0           pp512      1270.88 ± 14.97
llama 8B Q4_K - Medium           4.58 GiB     8.03 B Vulkan      99   1           pp512      1291.23 ± 29.36
qwen35 27B Q4_K - Medium        15.92 GiB    27.32 B Vulkan      99   0           pp512        358.42 ± 0.86
qwen35 27B Q4_K - Medium        15.92 GiB    27.32 B Vulkan      99   1           pp512        342.91 ± 1.17
qwen35moe 35B.A3B Q4_K - Medium  21.10 GiB    35.51 B Vulkan      99   0           pp512       887.73 ± 10.83
qwen35moe 35B.A3B Q4_K - Medium  21.10 GiB    35.51 B Vulkan      99   1           pp512        887.54 ± 3.34
gpt-oss 20B Q4_K - Medium        10.81 GiB    20.91 B Vulkan      99   0           pp512      1218.73 ± 30.89
gpt-oss 20B Q4_K - Medium        10.81 GiB    20.91 B Vulkan      99   1           pp512      1337.71 ± 29.63

Xe2-B70
Before:
C:\kernel\llama.cpp\build_base\bin\Release>llama-bench.exe -p 512 -n 0 -r 5 -fa 0,1 --delay 10 -ngl 99 -m C:\kernel\model\gemma-4-31B-it-Q4_K_M.gguf,C:\kernel\model\Qwen3-0.6B-Q4_K_M.gguf,C:\kernel\model\qwen3-8b-q4_k_m.gguf,C:\kernel\model\Qwen3.8-27B-Q4_K_M.gguf,C:\kernel\model\Qwen3.6-35B-A3B-UD-Q4_K_M.gguf,C:\kernel\model\gpt-oss-20b-Q4_K_M.gguf

model                                 size     params backend     ngl  fa            test                  t/s
gemma4 31B Q4_K - Medium        17.05 GiB    30.70 B Vulkan      99   0           pp512        679.62 ± 0.48
gemma4 31B Q4_K - Medium        17.05 GiB    30.70 B Vulkan      99   1           pp512        604.42 ± 1.61
qwen3 0.6B Q4_K - Medium       456.11 MiB   751.63 M Vulkan      99   0           pp512    21110.67 ± 180.71
qwen3 0.6B Q4_K - Medium       456.11 MiB   751.63 M Vulkan      99   1           pp512    17368.51 ± 140.55
qwen3 8B Q4_K - Medium           4.68 GiB     8.19 B Vulkan      99   0           pp512      2852.25 ± 59.26
qwen3 8B Q4_K - Medium           4.68 GiB     8.19 B Vulkan      99   1           pp512      2707.06 ± 25.70
qwen35 27B Q4_K - Medium        15.92 GiB    27.32 B Vulkan      99   0           pp512        758.01 ± 1.26
qwen35 27B Q4_K - Medium        15.92 GiB    27.32 B Vulkan      99   1           pp512        748.29 ± 0.77
qwen35moe 35B.A3B Q4_K - Medium  20.60 GiB    34.66 B Vulkan      99   0           pp512      2179.01 ± 18.09
qwen35moe 35B.A3B Q4_K - Medium  20.60 GiB    34.66 B Vulkan      99   1           pp512      2136.83 ± 15.25
gpt-oss 20B Q4_K - Medium        10.81 GiB    20.91 B Vulkan      99   0           pp512      3085.12 ± 21.90
gpt-oss 20B Q4_K - Medium        10.81 GiB    20.91 B Vulkan      99   1           pp512      3108.67 ± 35.17

After:
C:\kernel\llama.cpp\build\bin\Release>llama-bench.exe -p 512 -n 0 -r 5 -fa 0,1 --delay 10 -ngl 99 -m C:\kernel\model\gemma-4-31B-it-Q4_K_M.gguf,C:\kernel\model\Qwen3-0.6B-Q4_K_M.gguf,C:\kernel\model\qwen3-8b-q4_k_m.gguf,C:\kernel\model\Qwen3.8-27B-Q4_K_M.gguf,C:\kernel\model\Qwen3.6-35B-A3B-UD-Q4_K_M.gguf,C:\kernel\model\gpt-oss-20b-Q4_K_M.gguf

model                                 size     params backend     ngl  fa            test                  t/s
gemma4 31B Q4_K - Medium        17.05 GiB    30.70 B Vulkan      99   0           pp512        907.72 ± 6.05
gemma4 31B Q4_K - Medium        17.05 GiB    30.70 B Vulkan      99   1           pp512        774.29 ± 2.08
qwen3 0.6B Q4_K - Medium       456.11 MiB   751.63 M Vulkan      99   0           pp512    21530.34 ± 227.02
qwen3 0.6B Q4_K - Medium       456.11 MiB   751.63 M Vulkan      99   1           pp512    17533.69 ± 101.30
qwen3 8B Q4_K - Medium           4.68 GiB     8.19 B Vulkan      99   0           pp512     3669.75 ± 255.18
qwen3 8B Q4_K - Medium           4.68 GiB     8.19 B Vulkan      99   1           pp512      3481.77 ± 55.19
qwen35 27B Q4_K - Medium        15.92 GiB    27.32 B Vulkan      99   0           pp512        995.25 ± 1.99
qwen35 27B Q4_K - Medium        15.92 GiB    27.32 B Vulkan      99   1           pp512        969.67 ± 1.97
qwen35moe 35B.A3B Q4_K - Medium  20.60 GiB    34.66 B Vulkan      99   0           pp512      2440.35 ± 29.64
qwen35moe 35B.A3B Q4_K - Medium  20.60 GiB    34.66 B Vulkan      99   1           pp512      2375.47 ± 21.98
gpt-oss 20B Q4_K - Medium        10.81 GiB    20.91 B Vulkan      99   0           pp512      3345.54 ± 46.36
gpt-oss 20B Q4_K - Medium        10.81 GiB    20.91 B Vulkan      99   1           pp512      3378.68 ± 63.72

Requirements

I have read and agree with the contributing guidelines
AI usage disclosure: YES, used claude code, then lots of manual review/tweaking.

@fish-jiang
fish-jiang requested a review from a team as a code owner August 21, 2026 06:38
@fish-jiang
fish-jiang marked this pull request as draft August 21, 2026 06:38
@github-actions github-actions Bot added Vulkan Issues specific to the Vulkan backend ggml changes relating to the ggml tensor library for machine learning labels Aug 21, 2026

@jeffbolznv jeffbolznv left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Haven't done a full review, just some initial comments.

const bool x_non_contig = (ctx->device->coopmat2 && src0->type == GGML_TYPE_F32) ||
!ggml_vk_dim01_contiguous(src0);
const bool y_non_contig = (ctx->device->coopmat2 && src1->type == GGML_TYPE_F32) ||
// Intel coopmat1: force f32->f16 conversion so the f16-B-type pipeline is used.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we should do more testing and try to enable this across all devices? Reducing the load bandwidth for the B matrix seems like it should generally be a win. I've also thought about potentially fusing the f32->f16 conversion into the previous node to eliminate any overhead. But even without that, this is a win on NV and at least some Intel, so it seems likely it's a win everywhere.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, testing on more platforms would be good, but I don't have a non-Intel GPU on hand right now. May try to test later.
Fusing the f32->f16 conversion into the previous node is a great idea — it could reduce the overhead of that conversion.

Comment thread ggml/src/ggml-vulkan/ggml-vulkan.cpp Outdated
case GGML_TYPE_MXFP4:
case GGML_TYPE_NVFP4:
case GGML_TYPE_TQ2_0:
if (src1_type == GGML_TYPE_F16 && !ctx->device->coopmat2) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this be merged into the logic at the end of the function? I think it's just a different selection of mmp.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, updated

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

Labels

ggml changes relating to the ggml tensor library for machine learning Vulkan Issues specific to the Vulkan backend

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants