Commit 661643e43 for llama.cpp
commit 661643e43079a4ee6faab4c1895291767b67ea8d
Author: Łukasz Ślusarczyk <lukasz.slusarczyk@intel.com>
Date: Mon Sep 14 08:24:06 2026 +0200
sycl : fix oneDNN scratchpad breaking the pool free order (#28704)
diff --git a/ggml/src/ggml-sycl/common.hpp b/ggml/src/ggml-sycl/common.hpp
index 355dd442b..dc6cdd3df 100644
--- a/ggml/src/ggml-sycl/common.hpp
+++ b/ggml/src/ggml-sycl/common.hpp
@@ -401,29 +401,10 @@ struct ggml_backend_sycl_context {
dnnl::stream stream_dnnl() {
return stream_dnnl(device, 0);
}
- dnnl::memory get_scratchpad_mem(const dnnl::memory::desc & scratchpad_md,
- const dnnl::engine & eng, const queue_ptr q) {
- ggml_sycl_pool_alloc<uint8_t> * pool;
- auto it = scratchpad_map.find(q);
- if (it == scratchpad_map.end()) {
- scratchpad_map[q] = std::make_unique<ggml_sycl_pool_alloc<uint8_t>>(this->pool());
- pool = scratchpad_map[q].get();
- } else {
- pool = it->second.get();
- }
-
- size_t scratchpad_size = scratchpad_md.get_size();
- if (scratchpad_size > pool->actual_size) {
- pool->realloc(scratchpad_size);
- }
- void * mem_ptr = pool->get();
- return dnnl::memory(scratchpad_md, eng, mem_ptr);
- }
#endif
// pool
std::unique_ptr<ggml_sycl_pool> pools[GGML_SYCL_MAX_DEVICES];
- std::unordered_map<sycl::queue *, std::unique_ptr<ggml_sycl_pool_alloc<uint8_t>>> scratchpad_map;
std::unique_ptr<ggml_sycl_fattn_kv_buffers> fattn_bufs[GGML_SYCL_MAX_DEVICES];
diff --git a/ggml/src/ggml-sycl/gemm.hpp b/ggml/src/ggml-sycl/gemm.hpp
index c202da110..81bc5c2e6 100644
--- a/ggml/src/ggml-sycl/gemm.hpp
+++ b/ggml/src/ggml-sycl/gemm.hpp
@@ -66,8 +66,10 @@ public:
auto matmul_pd = dnnl::matmul::primitive_desc(eng, a_in_md, b_in_md, c_md, primitive_attr);
auto c_mem = dnnl::memory(matmul_pd.dst_desc(), eng, c);
- auto scratchpad_md = matmul_pd.scratchpad_desc();
- auto scratchpad_mem = ctx.get_scratchpad_mem(scratchpad_md, eng, q);
+ const auto scratchpad_md = matmul_pd.scratchpad_desc();
+ ggml_sycl_pool_alloc<uint8_t> scratchpad(ctx.pool());
+ void * scratchpad_ptr = scratchpad_md.get_size() > 0 ? scratchpad.alloc(scratchpad_md.get_size()) : nullptr;
+ auto scratchpad_mem = dnnl::memory(scratchpad_md, eng, scratchpad_ptr);
auto matmul_prim = dnnl::matmul(matmul_pd);