#include "ggml-backend-impl.h"
#include "ggml-sycl/backend.hpp"
+#include "ggml-sycl/common.hpp"
#include "ggml-sycl/presets.hpp"
#include "ggml-sycl/gemm.hpp"
#include "ggml-sycl/sycl_hw.hpp"
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) {
GGML_SYCL_DEBUG("[SYCL] call %s\n", __func__);
if (buffer == nullptr) {
/* .free_buffer = */ ggml_backend_sycl_buffer_free_buffer,
/* .get_base = */ ggml_backend_sycl_buffer_get_base,
/* .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,
/* .get_tensor = */ ggml_backend_sycl_buffer_get_tensor,
/* .cpy_tensor = */ ggml_backend_sycl_buffer_cpy_tensor,