Skip to content

Commit 5c04fb1

Browse files
committed
add version checking
1 parent bd9f7b4 commit 5c04fb1

File tree

11 files changed

+46
-30
lines changed

11 files changed

+46
-30
lines changed

ggml/src/ggml-amx/ggml-amx.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -409,8 +409,9 @@ static const struct ggml_backend_reg_i ggml_backend_amx_reg_i = {
409409

410410
ggml_backend_reg_t ggml_backend_amx_reg(void) {
411411
static struct ggml_backend_reg ggml_backend_amx_reg = {
412-
/* .iface = */ ggml_backend_amx_reg_i,
413-
/* .context = */ NULL,
412+
/* .api_version = */ GGML_BACKEND_API_VERSION,
413+
/* .iface = */ ggml_backend_amx_reg_i,
414+
/* .context = */ NULL,
414415
};
415416

416417
return &ggml_backend_amx_reg;

ggml/src/ggml-backend-impl.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
extern "C" {
99
#endif
1010

11+
#define GGML_BACKEND_API_VERSION 1
12+
1113
//
1214
// Backend buffer type
1315
//
@@ -199,7 +201,7 @@ extern "C" {
199201
};
200202

201203
struct ggml_backend_reg {
202-
// int api_version; // TODO: for dynamic loading
204+
int api_version; // initialize to GGML_BACKEND_API_VERSION
203205
struct ggml_backend_reg_i iface;
204206
void * context;
205207
};

ggml/src/ggml-backend-reg.cpp

+7-2
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,14 @@ struct ggml_backend_registry {
167167
}
168168
#endif
169169
ggml_backend_reg_t reg = backend_init();
170-
if (!reg) {
170+
if (!reg || reg->api_version != GGML_BACKEND_API_VERSION) {
171171
if (!silent) {
172-
GGML_LOG_ERROR("%s: failed to initialize backend from %s\n", __func__, path);
172+
if (!reg) {
173+
GGML_LOG_ERROR("%s: failed to initialize backend from %s: ggml_backend_init returned NULL\n", __func__, path);
174+
} else {
175+
GGML_LOG_ERROR("%s: failed to initialize backend from %s: incompatible API version (backend: %d, current: %d)\n",
176+
__func__, path, reg->api_version, GGML_BACKEND_API_VERSION);
177+
}
173178
}
174179
#ifdef _WIN32
175180
FreeLibrary(handle);

ggml/src/ggml-blas/ggml-blas.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -506,8 +506,9 @@ static const struct ggml_backend_reg_i ggml_backend_blas_reg_i = {
506506

507507
ggml_backend_reg_t ggml_backend_blas_reg(void) {
508508
static struct ggml_backend_reg ggml_backend_blas_reg = {
509-
/* .iface = */ ggml_backend_blas_reg_i,
510-
/* .context = */ NULL,
509+
/* .api_version = */ GGML_BACKEND_API_VERSION,
510+
/* .iface = */ ggml_backend_blas_reg_i,
511+
/* .context = */ NULL,
511512
};
512513

513514
return &ggml_backend_blas_reg;

ggml/src/ggml-cann/ggml-cann.cpp

+6-5
Original file line numberDiff line numberDiff line change
@@ -2064,16 +2064,17 @@ ggml_backend_reg_t ggml_backend_cann_reg() {
20642064
dev_ctx->name = GGML_CANN_NAME + std::to_string(i);
20652065
ggml_cann_set_device(i);
20662066
ggml_backend_dev_t dev = new ggml_backend_device {
2067-
/* .interface = */ ggml_backend_cann_device_interface,
2068-
/* .reg = */ &reg,
2069-
/* .context = */ dev_ctx
2067+
/* .iface = */ ggml_backend_cann_device_interface,
2068+
/* .reg = */ &reg,
2069+
/* .context = */ dev_ctx
20702070
};
20712071
ctx->devices.push_back(dev);
20722072
}
20732073

20742074
reg = ggml_backend_reg {
2075-
/* .interface = */ ggml_backend_cann_reg_interface,
2076-
/* .context = */ ctx
2075+
/* .api_version = */ GGML_BACKEND_API_VERSION,
2076+
/* .iface = */ ggml_backend_cann_reg_interface,
2077+
/* .context = */ ctx
20772078
};
20782079
}
20792080

ggml/src/ggml-cpu/ggml-cpu.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -678,8 +678,9 @@ ggml_backend_reg_t ggml_backend_cpu_reg(void) {
678678
ggml_cpu_init();
679679

680680
static struct ggml_backend_reg ggml_backend_cpu_reg = {
681-
/* .iface = */ ggml_backend_cpu_reg_i,
682-
/* .context = */ NULL,
681+
/* .api_version = */ GGML_BACKEND_API_VERSION,
682+
/* .iface = */ ggml_backend_cpu_reg_i,
683+
/* .context = */ NULL,
683684
};
684685

685686
return &ggml_backend_cpu_reg;

ggml/src/ggml-cuda/ggml-cuda.cu

+6-5
Original file line numberDiff line numberDiff line change
@@ -3227,16 +3227,17 @@ ggml_backend_reg_t ggml_backend_cuda_reg() {
32273227
dev_ctx->description = prop.name;
32283228

32293229
ggml_backend_dev_t dev = new ggml_backend_device {
3230-
/* .interface = */ ggml_backend_cuda_device_interface,
3231-
/* .reg = */ &reg,
3232-
/* .context = */ dev_ctx
3230+
/* .iface = */ ggml_backend_cuda_device_interface,
3231+
/* .reg = */ &reg,
3232+
/* .context = */ dev_ctx
32333233
};
32343234
ctx->devices.push_back(dev);
32353235
}
32363236

32373237
reg = ggml_backend_reg {
3238-
/* .interface = */ ggml_backend_cuda_reg_interface,
3239-
/* .context = */ ctx
3238+
/* .api_version = */ GGML_BACKEND_API_VERSION,
3239+
/* .iface = */ ggml_backend_cuda_reg_interface,
3240+
/* .context = */ ctx
32403241
};
32413242
}
32423243

ggml/src/ggml-kompute/ggml-kompute.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -2176,8 +2176,9 @@ static const struct ggml_backend_reg_i ggml_backend_kompute_reg_i = {
21762176

21772177
ggml_backend_reg_t ggml_backend_kompute_reg() {
21782178
static ggml_backend_reg reg = {
2179-
/* .iface = */ ggml_backend_kompute_reg_i,
2180-
/* .context = */ nullptr,
2179+
/* .api_version = */ GGML_BACKEND_API_VERSION,
2180+
/* .iface = */ ggml_backend_kompute_reg_i,
2181+
/* .context = */ nullptr,
21812182
};
21822183

21832184
return ®

ggml/src/ggml-rpc/ggml-rpc.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -1369,8 +1369,9 @@ static const struct ggml_backend_reg_i ggml_backend_rpc_reg_i = {
13691369

13701370
ggml_backend_reg_t ggml_backend_rpc_reg(void) {
13711371
static struct ggml_backend_reg ggml_backend_rpc_reg = {
1372-
/* .iface = */ ggml_backend_rpc_reg_i,
1373-
/* .context = */ NULL,
1372+
/* .api_version = */ GGML_BACKEND_API_VERSION,
1373+
/* .iface = */ ggml_backend_rpc_reg_i,
1374+
/* .context = */ NULL,
13741375
};
13751376

13761377
return &ggml_backend_rpc_reg;

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

+6-5
Original file line numberDiff line numberDiff line change
@@ -4637,16 +4637,17 @@ ggml_backend_reg_t ggml_backend_sycl_reg() {
46374637
dev_ctx->description = prop.get_name();
46384638

46394639
ggml_backend_dev_t dev = new ggml_backend_device {
4640-
/* .interface = */ ggml_backend_sycl_device_interface,
4641-
/* .reg = */ &reg,
4642-
/* .context = */ dev_ctx
4640+
/* .iface = */ ggml_backend_sycl_device_interface,
4641+
/* .reg = */ &reg,
4642+
/* .context = */ dev_ctx
46434643
};
46444644
ctx->devices.push_back(dev);
46454645
}
46464646

46474647
reg = ggml_backend_reg {
4648-
/* .interface = */ ggml_backend_sycl_reg_interface,
4649-
/* .context = */ ctx
4648+
/* .api_version = */ GGML_BACKEND_API_VERSION,
4649+
/* .iface = */ ggml_backend_sycl_reg_interface,
4650+
/* .context = */ ctx
46504651
};
46514652
}
46524653

ggml/src/ggml-vulkan/ggml-vulkan.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -6738,8 +6738,9 @@ static const struct ggml_backend_reg_i ggml_backend_vk_reg_i = {
67386738

67396739
ggml_backend_reg_t ggml_backend_vk_reg() {
67406740
static ggml_backend_reg reg = {
6741-
/* .iface = */ ggml_backend_vk_reg_i,
6742-
/* .context = */ nullptr,
6741+
/* .api_version = */ GGML_BACKEND_API_VERSION,
6742+
/* .iface = */ ggml_backend_vk_reg_i,
6743+
/* .context = */ nullptr,
67436744
};
67446745

67456746
return ®

0 commit comments

Comments
 (0)