Commit a0ad695cb for llama.cpp
commit a0ad695cb212db3850f163121ddc687513448d42
Author: Titaniumtown <titaniumtown@proton.me>
Date: Mon Nov 9 00:51:18 2026 -0800
sycl: cache device-id (#31126)
diff --git a/ggml/src/ggml-sycl/common.cpp b/ggml/src/ggml-sycl/common.cpp
index 9ddabdf33..44cfede0b 100644
--- a/ggml/src/ggml-sycl/common.cpp
+++ b/ggml/src/ggml-sycl/common.cpp
@@ -21,8 +21,14 @@
#include "ggml-backend-impl.h"
#include "ggml-impl.h"
+thread_local int g_sycl_current_device_id = -1;
+
int get_current_device_id() {
- return dpct::dev_mgr::instance().current_device_id();
+ if (g_sycl_current_device_id >= 0) {
+ return g_sycl_current_device_id;
+ }
+ g_sycl_current_device_id = static_cast<int>(dpct::dev_mgr::instance().current_device_id());
+ return g_sycl_current_device_id;
}
void* ggml_sycl_host_malloc(size_t size) try {
diff --git a/ggml/src/ggml-sycl/common.hpp b/ggml/src/ggml-sycl/common.hpp
index 22ad7fa20..5d1b1c499 100644
--- a/ggml/src/ggml-sycl/common.hpp
+++ b/ggml/src/ggml-sycl/common.hpp
@@ -283,6 +283,10 @@ static size_t g_scratch_offset = 0;
(void)bad_arch; // suppress unused function warning
}
+// thread-local copy of dpct's per-thread selected device, -1 until first read.
+// Select devices only through ggml_sycl_set_device so the copy stays in sync.
+extern thread_local int g_sycl_current_device_id;
+
int get_current_device_id();
inline int ggml_sycl_get_device() {
@@ -290,16 +294,14 @@ inline int ggml_sycl_get_device() {
}
inline dpct::err0 ggml_sycl_set_device(const int device) try {
- int current_device_id;
- SYCL_CHECK(CHECK_TRY_ERROR(current_device_id = get_current_device_id()));
-
- // GGML_SYCL_DEBUG("ggml_sycl_set_device device_id=%d,
- // current_device_id=%d\n", device, current_device);
- if (device == current_device_id) {
+ if (device == g_sycl_current_device_id) {
return 0;
}
-
- return CHECK_TRY_ERROR(dpct::select_device(device));
+ const dpct::err0 err = CHECK_TRY_ERROR(dpct::select_device(device));
+ if (err == dpct::success) {
+ g_sycl_current_device_id = device;
+ }
+ return err;
} catch (sycl::exception const& exc) {
std::cerr << exc.what() << "Exception caught at file:" << __FILE__
<< ", line:" << __LINE__ << std::endl;
diff --git a/ggml/src/ggml-sycl/ggml-sycl.cpp b/ggml/src/ggml-sycl/ggml-sycl.cpp
index 9ddca829b..6279d3976 100644
--- a/ggml/src/ggml-sycl/ggml-sycl.cpp
+++ b/ggml/src/ggml-sycl/ggml-sycl.cpp
@@ -6077,7 +6077,7 @@ static void ggml_sycl_set_main_device(const int main_device) try {
return;
}
check_allow_gpu_index(main_device);
- dpct::select_device(main_device);
+ SYCL_CHECK(ggml_sycl_set_device(main_device));
if (g_ggml_sycl_debug) {
dpct::device_info prop;