mirror of
https://github.com/LostRuins/koboldcpp.git
synced 2026-05-18 23:49:46 +00:00
ggml : use CL_DEVICE_GLOBAL_MEM_SIZE as memory estimate for OpenCL --fit (#22688)
* ggml : report estimated OpenCL memory for --fit Signed-off-by: Florian Reinle <f.reinle@otec.de> * ggml : estimated OpenCL memory backend integrated Signed-off-by: Florian Reinle <f.reinle@otec.de> --------- Signed-off-by: Florian Reinle <f.reinle@otec.de>
This commit is contained in:
parent
bbeb89d76c
commit
2ca1161bd7
1 changed files with 13 additions and 4 deletions
|
|
@ -389,6 +389,7 @@ struct ggml_backend_opencl_context {
|
|||
ADRENO_GPU_GEN adreno_gen;
|
||||
|
||||
cl_int alignment;
|
||||
size_t global_mem_size;
|
||||
size_t max_alloc_size;
|
||||
size_t max_workgroup_size;
|
||||
bool fp16_support;
|
||||
|
|
@ -3386,6 +3387,9 @@ static ggml_backend_opencl_context * ggml_cl2_init(ggml_backend_dev_t dev) {
|
|||
backend_ctx->alignment = base_align_in_bits / 8u;
|
||||
GGML_LOG_INFO("ggml_opencl: mem base addr align: %u\n", backend_ctx->alignment);
|
||||
|
||||
clGetDeviceInfo(device, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(size_t), &backend_ctx->global_mem_size, NULL);
|
||||
GGML_LOG_INFO("ggml_opencl: global mem size: %zu MB\n", backend_ctx->global_mem_size/1024/1024);
|
||||
|
||||
clGetDeviceInfo(device, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(size_t), &backend_ctx->max_alloc_size, NULL);
|
||||
GGML_LOG_INFO("ggml_opencl: max mem alloc size: %zu MB\n", backend_ctx->max_alloc_size/1024/1024);
|
||||
|
||||
|
|
@ -6356,11 +6360,16 @@ static const char * ggml_backend_opencl_device_get_description(ggml_backend_dev_
|
|||
}
|
||||
|
||||
static void ggml_backend_opencl_device_get_memory(ggml_backend_dev_t dev, size_t * free, size_t * total) {
|
||||
// no memory to report
|
||||
*free = 0;
|
||||
*total = 0;
|
||||
ggml_backend_opencl_device_context * dev_ctx = (ggml_backend_opencl_device_context *) dev->context;
|
||||
ggml_backend_opencl_context * backend_ctx = (ggml_backend_opencl_context *) dev_ctx->backend_ctx;
|
||||
|
||||
GGML_UNUSED(dev);
|
||||
static const size_t opencl_extra_margin = 1024ull*1024ull*1024ull;
|
||||
|
||||
// OpenCL does not provide reliable currently-free device memory.
|
||||
// Use total/global memory as a best-effort upper bound.
|
||||
// Improved safety: Reduce by a 1GiB extra margin for common --fit
|
||||
*total = backend_ctx->global_mem_size;
|
||||
*free = *total > opencl_extra_margin ? *total - opencl_extra_margin : 0;
|
||||
}
|
||||
|
||||
static enum ggml_backend_dev_type ggml_backend_opencl_device_get_type(ggml_backend_dev_t dev) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue