]> git.djapps.eu Git - pkg/ggml/sources/whisper.cpp/commit
vulkan: fix top_k bug when there are ties in the input (llama/17659)
authorJeff Bolz <redacted>
Fri, 5 Dec 2025 21:03:19 +0000 (15:03 -0600)
committerGeorgi Gerganov <redacted>
Fri, 12 Dec 2025 15:53:19 +0000 (17:53 +0200)
commit0484147ab23805736dbf5a66bdbd7be69599b19e
treea617a2d750598060029ce9b5dff2b6b450802b8f
parent0b53759b29dc62956b4628ee436ac9d6a2a5a36b
vulkan: fix top_k bug when there are ties in the input (llama/17659)

* vulkan: Reduce temporary memory usage for TOP_K

- Compute row size for the temp buffer based on the output of the first pass.
- Update shader addressing math to use the output row size
- Pass the output row size as "ncols_output", what used to be "ncols_output" is now "k"

For the common case of K=40 and src0=(200000,1,1,1), this reduces the temporary buffer
from about 3.2MB to 500KB.

* vulkan: fix top_k bug when there are ties in the input

I noticed by inspection a bug in the vulkan top_k shader where if the least
value in the top_k appears multiple times we could end up writing those extra
copies out rather than some larger values (if the larger values are on higher
numbered threads).

I rewrote the test verification to handle this case, where the final index set
is not necessarily the same.

* Update tests/test-backend-ops.cpp

Co-authored-by: Georgi Gerganov <redacted>
---------

Co-authored-by: Georgi Gerganov <redacted>
ggml/src/ggml-vulkan/ggml-vulkan.cpp
ggml/src/ggml-vulkan/vulkan-shaders/topk_nary_search.comp