| | #ifdef GGML_USE_CPU_HBM |
| |
|
| | #include "ggml-backend.h" |
| | #include "ggml-backend-impl.h" |
| | #include "ggml-cpu.h" |
| | #include "ggml-impl.h" |
| |
|
| | #include "hbm.h" |
| |
|
| | |
| |
|
| | #include <hbwmalloc.h> |
| |
|
| | static const char * ggml_backend_cpu_hbm_buffer_type_get_name(ggml_backend_buffer_type_t buft) { |
| | return "CPU_HBM"; |
| |
|
| | GGML_UNUSED(buft); |
| | } |
| |
|
| | static void ggml_backend_cpu_hbm_buffer_free_buffer(ggml_backend_buffer_t buffer) { |
| | hbw_free(buffer->context); |
| | } |
| |
|
| | static ggml_backend_buffer_t ggml_backend_cpu_hbm_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, |
| | size_t size) { |
| | void * ptr; |
| | int result = hbw_posix_memalign(&ptr, ggml_backend_cpu_buffer_type_get_alignment(buft), size); |
| | if (result != 0) { |
| | GGML_LOG_ERROR("failed to allocate HBM buffer of size %zu\n", size); |
| | return NULL; |
| | } |
| |
|
| | ggml_backend_buffer_t buffer = ggml_backend_cpu_buffer_from_ptr(ptr, size); |
| | buffer->buft = buft; |
| | buffer->iface.free_buffer = ggml_backend_cpu_hbm_buffer_free_buffer; |
| |
|
| | return buffer; |
| | } |
| |
|
| | ggml_backend_buffer_type_t ggml_backend_cpu_hbm_buffer_type(void) { |
| | static struct ggml_backend_buffer_type ggml_backend_cpu_buffer_type_hbm = { |
| | { |
| | ggml_backend_cpu_hbm_buffer_type_get_name, |
| | ggml_backend_cpu_hbm_buffer_type_alloc_buffer, |
| | ggml_backend_cpu_buffer_type_get_alignment, |
| | nullptr, |
| | nullptr, |
| | ggml_backend_cpu_buffer_type_is_host, |
| | }, |
| | nullptr, |
| | }; |
| |
|
| | return &ggml_backend_cpu_buffer_type_hbm; |
| | } |
| | #endif |
| |
|