Skip to content

Commit 656babd

Browse files
Revert "sycl:remove redundant memcopy in function ggml_backend_sycl_buffer_set_tensor" (#12812)
* Revert "sycl: remove redundant memcopy in function ggml_backend_sycl_buffer_s…" This reverts commit 518a014. * Update ggml/src/ggml-sycl/ggml-sycl.cpp * Update ggml/src/ggml-sycl/ggml-sycl.cpp * rm tail space
1 parent a226bc7 commit 656babd

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

ggml/src/ggml-sycl/ggml-sycl.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -372,9 +372,14 @@ static void ggml_backend_sycl_buffer_set_tensor(ggml_backend_buffer_t buffer,
372372
auto stream = &(dpct::dev_mgr::instance().get_device(ctx->device).default_queue());
373373
SYCL_CHECK(
374374
CHECK_TRY_ERROR(dpct::dev_mgr::instance().get_device(ctx->device).queues_wait_and_throw()));
375+
// Note: Use host buffer to save the data from mmap(), then copy to device. It's workaround for mmap() issue on PVC GPU.
376+
// This function will be called during load model from disk. Use memory buffer replace dynamic won't save more time and brings potential memory leak risk here.
377+
char* host_buf = (char*)malloc(size);
378+
memcpy(host_buf, data, size);
375379
SYCL_CHECK(
376-
CHECK_TRY_ERROR((*stream).memcpy((char *)tensor->data + offset, data, size)
380+
CHECK_TRY_ERROR((*stream).memcpy((char *)tensor->data + offset, host_buf, size)
377381
.wait()));
382+
free(host_buf);
378383
}
379384
catch (sycl::exception const &exc) {
380385
std::cerr << exc.what() << "Exception caught at file:" << __FILE__

0 commit comments

Comments
 (0)