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;