mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-30 08:42:00 +00:00 
			
		
		
		
	SYCL: implement memset ggml backend buffer interface (#12580)
* SYCL: implement memset ggml backend buffer interface * use GGML_ABORT macro * Do not wait for all queues to finish for memset operation
This commit is contained in:
		| @@ -37,6 +37,7 @@ | |||||||
| #include "ggml-backend-impl.h" | #include "ggml-backend-impl.h" | ||||||
|  |  | ||||||
| #include "ggml-sycl/backend.hpp" | #include "ggml-sycl/backend.hpp" | ||||||
|  | #include "ggml-sycl/common.hpp" | ||||||
| #include "ggml-sycl/presets.hpp" | #include "ggml-sycl/presets.hpp" | ||||||
| #include "ggml-sycl/gemm.hpp" | #include "ggml-sycl/gemm.hpp" | ||||||
| #include "ggml-sycl/sycl_hw.hpp" | #include "ggml-sycl/sycl_hw.hpp" | ||||||
| @@ -490,6 +491,23 @@ catch (sycl::exception const &exc) { | |||||||
|   std::exit(1); |   std::exit(1); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static void ggml_backend_sycl_buffer_memset_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, uint8_t value, | ||||||
|  |                                                    size_t offset, size_t size) { | ||||||
|  |     GGML_SYCL_DEBUG(" [SYCL] call %s\n", __func__); | ||||||
|  |     ggml_backend_sycl_buffer_context * ctx = (ggml_backend_sycl_buffer_context *) buffer->context; | ||||||
|  |     SYCL_CHECK(ggml_sycl_set_device(ctx->device)); | ||||||
|  |     auto stream = &(dpct::dev_mgr::instance().get_device(ctx->device).default_queue()); | ||||||
|  |     if (size == 0) { | ||||||
|  |         return;  // Nothing to do | ||||||
|  |     } | ||||||
|  |     if (tensor->data == nullptr) { | ||||||
|  |         GGML_ABORT("Error: Tensor data pointer is null.\n"); | ||||||
|  |     } | ||||||
|  |     void * target_ptr = static_cast<char *>(tensor->data) + offset; | ||||||
|  |     SYCL_CHECK(CHECK_TRY_ERROR((*stream).memset(target_ptr, value, size))); | ||||||
|  |     SYCL_CHECK(CHECK_TRY_ERROR((*stream).wait())); | ||||||
|  | } | ||||||
|  |  | ||||||
| static void ggml_backend_sycl_buffer_reset(ggml_backend_buffer_t buffer) { | static void ggml_backend_sycl_buffer_reset(ggml_backend_buffer_t buffer) { | ||||||
|     GGML_SYCL_DEBUG("[SYCL] call %s\n", __func__); |     GGML_SYCL_DEBUG("[SYCL] call %s\n", __func__); | ||||||
|     if (buffer == nullptr) { |     if (buffer == nullptr) { | ||||||
| @@ -510,7 +528,7 @@ static const ggml_backend_buffer_i ggml_backend_sycl_buffer_interface = { | |||||||
|     /* .free_buffer     = */ ggml_backend_sycl_buffer_free_buffer, |     /* .free_buffer     = */ ggml_backend_sycl_buffer_free_buffer, | ||||||
|     /* .get_base        = */ ggml_backend_sycl_buffer_get_base, |     /* .get_base        = */ ggml_backend_sycl_buffer_get_base, | ||||||
|     /* .init_tensor     = */ ggml_backend_sycl_buffer_init_tensor, |     /* .init_tensor     = */ ggml_backend_sycl_buffer_init_tensor, | ||||||
|     /* .memset_tensor   = */ NULL, |     /* .memset_tensor   = */ ggml_backend_sycl_buffer_memset_tensor, | ||||||
|     /* .set_tensor      = */ ggml_backend_sycl_buffer_set_tensor, |     /* .set_tensor      = */ ggml_backend_sycl_buffer_set_tensor, | ||||||
|     /* .get_tensor      = */ ggml_backend_sycl_buffer_get_tensor, |     /* .get_tensor      = */ ggml_backend_sycl_buffer_get_tensor, | ||||||
|     /* .cpy_tensor      = */ ggml_backend_sycl_buffer_cpy_tensor, |     /* .cpy_tensor      = */ ggml_backend_sycl_buffer_cpy_tensor, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Akarshan Biswas
					Akarshan Biswas