Free staged parameter buffers at once

This commit is contained in:
Reese Levine 2025-07-30 14:27:29 -07:00
parent 04d7b272d6
commit 01c8ced232
1 changed files with 5 additions and 7 deletions

View File

@ -76,10 +76,10 @@ struct webgpu_param_buf_pool {
return bufs; return bufs;
} }
void free_bufs(const webgpu_param_bufs& bufs) { void free_bufs(std::vector<webgpu_param_bufs> bufs) {
std::lock_guard<std::mutex> lock(mutex); std::lock_guard<std::mutex> lock(mutex);
free.push_back(bufs); free.insert(free.end(), bufs.begin(), bufs.end());
cv.notify_one(); cv.notify_all();
} }
void cleanup() { void cleanup() {
@ -222,9 +222,7 @@ static void ggml_backend_webgpu_submit_queue(webgpu_context& ctx) {
GGML_LOG_ERROR("ggml_webgpu: Failed to submit commands: %s\n", message.data); GGML_LOG_ERROR("ggml_webgpu: Failed to submit commands: %s\n", message.data);
} }
// Free the staged parameter buffers // Free the staged parameter buffers
for (const auto& bufs : staged_param_bufs) { ctx->param_buf_pool.free_bufs(staged_param_bufs);
ctx->param_buf_pool.free_bufs(bufs);
}
}); });
} }
@ -287,7 +285,7 @@ static void ggml_backend_webgpu_build_and_enqueue(webgpu_context& ctx, wgpu::Com
if (status != wgpu::QueueWorkDoneStatus::Success) { if (status != wgpu::QueueWorkDoneStatus::Success) {
GGML_LOG_ERROR("ggml_webgpu: Failed to submit commands: %s\n", message.data); GGML_LOG_ERROR("ggml_webgpu: Failed to submit commands: %s\n", message.data);
} }
ctx->param_buf_pool.free_bufs(params_bufs); ctx->param_buf_pool.free_bufs({params_bufs});
}); });
} else { } else {
// Enqueue commands and only submit if we have enough staged commands // Enqueue commands and only submit if we have enough staged commands