@@ -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-
2515bool load_ggml_backends () {
2616 static const bool loaded = []() {
2717 if (ggml_backend_reg_count () > 0 ) {
@@ -41,7 +31,15 @@ bool load_ggml_backends() {
4131
4232bool 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
4745backend_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