Skip to content

Commit 35e4845

Browse files
committed
ml: fix support for integrated GPUs
* was no longer working since ggml introduced a separate IGPU device type
1 parent e8e6c6c commit 35e4845

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

src/visp/ml.cpp

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,6 @@ namespace visp {
1212
//
1313
// backend
1414

15-
enum ggml_backend_dev_type convert(backend_type type) {
16-
switch (type) {
17-
case backend_type::cpu: return GGML_BACKEND_DEVICE_TYPE_CPU;
18-
case backend_type::gpu: return GGML_BACKEND_DEVICE_TYPE_GPU;
19-
default:
20-
ASSERT(false, "Unsupported backend type");
21-
return GGML_BACKEND_DEVICE_TYPE_CPU; // fallback
22-
}
23-
}
24-
2515
bool load_ggml_backends() {
2616
static const bool loaded = []() {
2717
if (ggml_backend_reg_count() > 0) {
@@ -41,7 +31,15 @@ bool load_ggml_backends() {
4131

4232
bool backend_is_available(backend_type type) {
4333
load_ggml_backends();
44-
return ggml_backend_dev_by_type(convert(type)) != nullptr;
34+
switch (type) {
35+
case backend_type::cpu:
36+
return ggml_backend_dev_by_type(GGML_BACKEND_DEVICE_TYPE_CPU) != nullptr;
37+
case backend_type::gpu:
38+
return ggml_backend_dev_by_type(GGML_BACKEND_DEVICE_TYPE_GPU) != nullptr ||
39+
ggml_backend_dev_by_type(GGML_BACKEND_DEVICE_TYPE_IGPU) != nullptr;
40+
default: ASSERT(false, "Invalid backend type");
41+
}
42+
return false;
4543
}
4644

4745
backend_device backend_init() {
@@ -57,7 +55,18 @@ backend_device backend_init(backend_type type) {
5755
load_ggml_backends();
5856

5957
backend_device b;
60-
b.handle.reset(ggml_backend_init_by_type(convert(type), nullptr));
58+
switch (type) {
59+
case backend_type::cpu:
60+
b.handle.reset(ggml_backend_init_by_type(GGML_BACKEND_DEVICE_TYPE_CPU, nullptr));
61+
break;
62+
case backend_type::gpu:
63+
b.handle.reset(ggml_backend_init_by_type(GGML_BACKEND_DEVICE_TYPE_GPU, nullptr));
64+
if (!b.handle) {
65+
b.handle.reset(ggml_backend_init_by_type(GGML_BACKEND_DEVICE_TYPE_IGPU, nullptr));
66+
}
67+
break;
68+
default: ASSERT(false, "Invalid backend type");
69+
}
6170
if (!b.handle) {
6271
throw except("Failed to initialize backend, no suitable device available");
6372
}
@@ -72,7 +81,8 @@ backend_type backend_device::type() const {
7281
ggml_backend_dev_t dev = ggml_backend_get_device(handle.get());
7382
switch (ggml_backend_dev_type(dev)) {
7483
case GGML_BACKEND_DEVICE_TYPE_CPU: return backend_type::cpu;
75-
case GGML_BACKEND_DEVICE_TYPE_GPU: return backend_type::gpu;
84+
case GGML_BACKEND_DEVICE_TYPE_GPU:
85+
case GGML_BACKEND_DEVICE_TYPE_IGPU: return backend_type::gpu;
7686
default: ASSERT(false, "Unsupported backend device type"); return backend_type::cpu;
7787
}
7888
}

0 commit comments

Comments
 (0)