2222
2323// globals
2424
25+ // initialized in ggml_backend_metal_reg
2526static struct ggml_backend_reg g_ggml_backend_metal_reg;
2627static struct ggml_backend_device g_ggml_backend_metal_device;
2728
@@ -3627,7 +3628,7 @@ static bool ggml_backend_metal_device_supports_buft(ggml_backend_dev_t dev, ggml
36273628 UNUSED (dev);
36283629}
36293630
3630- static const struct ggml_backend_device_i ggml_backend_metal_device_i = {
3631+ static struct ggml_backend_device_i ggml_backend_metal_device_i = {
36313632 /* .get_name = */ ggml_backend_metal_device_get_name,
36323633 /* .get_description = */ ggml_backend_metal_device_get_description,
36333634 /* .get_memory = */ ggml_backend_metal_device_get_memory,
@@ -3647,13 +3648,7 @@ static bool ggml_backend_metal_device_supports_buft(ggml_backend_dev_t dev, ggml
36473648
36483649// backend registry
36493650
3650- static struct ggml_backend_device g_ggml_backend_metal_device = (struct ggml_backend_device) {
3651- /* .iface = */ ggml_backend_metal_device_i,
3652- /* .reg = */ &g_ggml_backend_metal_reg,
3653- /* .context = */ NULL ,
3654- };
3655-
3656- static const char * ggml_backend_metal_reg_name (ggml_backend_reg_t reg) {
3651+ static const char * ggml_backend_metal_reg_get_name (ggml_backend_reg_t reg) {
36573652 return " Metal" ;
36583653
36593654 GGML_UNUSED (reg);
@@ -3674,18 +3669,27 @@ static ggml_backend_dev_t ggml_backend_metal_reg_device_get(ggml_backend_reg_t r
36743669 GGML_UNUSED (index);
36753670}
36763671
3677- static const struct ggml_backend_reg_i ggml_backend_metal_reg_i = {
3678- /* .get_name = */ ggml_backend_metal_reg_name ,
3672+ static struct ggml_backend_reg_i ggml_backend_metal_reg_i = {
3673+ /* .get_name = */ ggml_backend_metal_reg_get_name ,
36793674 /* .device_count = */ ggml_backend_metal_reg_device_count,
36803675 /* .device_get = */ ggml_backend_metal_reg_device_get,
36813676 /* .get_proc_address = */ NULL ,
36823677};
36833678
3684- static struct ggml_backend_reg g_ggml_backend_metal_reg = {
3685- /* .iface = */ ggml_backend_metal_reg_i,
3686- /* .context = */ NULL ,
3687- };
3688-
36893679ggml_backend_reg_t ggml_backend_metal_reg (void ) {
3680+ // TODO: make this thread-safe somehow?
3681+ {
3682+ g_ggml_backend_metal_reg = (struct ggml_backend_reg) {
3683+ /* .iface = */ ggml_backend_metal_reg_i,
3684+ /* .context = */ NULL ,
3685+ };
3686+
3687+ g_ggml_backend_metal_device = (struct ggml_backend_device) {
3688+ /* .iface = */ ggml_backend_metal_device_i,
3689+ /* .reg = */ &g_ggml_backend_metal_reg,
3690+ /* .context = */ NULL ,
3691+ };
3692+ }
3693+
36903694 return &g_ggml_backend_metal_reg;
36913695}
0 commit comments