]> git.djapps.eu Git - pkg/ggml/sources/ggml/commitdiff
fix MSVC build issues (#557)
authorslaren <redacted>
Sun, 8 Oct 2023 13:45:22 +0000 (15:45 +0200)
committerGitHub <redacted>
Sun, 8 Oct 2023 13:45:22 +0000 (15:45 +0200)
* fix MSVC build issues

examples/whisper/CMakeLists.txt
include/ggml/ggml-backend.h
include/ggml/ggml.h
src/ggml-backend.c
src/ggml-cuda.cu
src/ggml-metal.m

index dd681aad3dab51fde4c62e45af72f2cb489b07b7..a58251d781addf41a8dc887f0259b0f187bc3652 100644 (file)
@@ -1,7 +1,7 @@
 #
 # whisper
 
-add_library(whisper-cpp
+add_library(whisper-cpp STATIC
     whisper.cpp
     )
 
index 9e0567c6b2cb9afcd969167e8832ebcd8ca4a749..da134b0dbed514423b1223814b2346c4048a2854 100644 (file)
@@ -31,7 +31,7 @@ extern "C" {
 
     // TODO: hide behind API
     struct ggml_backend_buffer {
-        struct ggml_backend_buffer_i interface;
+        struct ggml_backend_buffer_i iface;
 
         ggml_backend_t                backend;
         ggml_backend_buffer_context_t context;
@@ -42,7 +42,7 @@ extern "C" {
     // backend buffer functions
     GGML_API ggml_backend_buffer_t ggml_backend_buffer_init(
             struct ggml_backend                  * backend,
-            struct ggml_backend_buffer_i           interface,
+            struct ggml_backend_buffer_i           iface,
                    ggml_backend_buffer_context_t   context,
                    size_t                          size);
 
@@ -93,7 +93,7 @@ extern "C" {
 
     // TODO: hide behind API
     struct ggml_backend {
-        struct ggml_backend_i interface;
+        struct ggml_backend_i iface;
 
         ggml_backend_context_t context;
     };
index 5e7f39dc493c0613669ca2f4d4e0e5db1e94064f..3eddc44b90fdd35397f24409382f7428bf03b0cc 100644 (file)
@@ -1360,7 +1360,7 @@ extern "C" {
 
     // alibi position embedding
     // in-place, returns view(a)
-    struct ggml_tensor * ggml_alibi(
+    GGML_API struct ggml_tensor * ggml_alibi(
             struct ggml_context * ctx,
             struct ggml_tensor  * a,
             int                   n_past,
@@ -1369,7 +1369,7 @@ extern "C" {
 
     // clamp
     // in-place, returns view(a)
-    struct ggml_tensor * ggml_clamp(
+    GGML_API struct ggml_tensor * ggml_clamp(
             struct ggml_context * ctx,
             struct ggml_tensor  * a,
             float                 min,
@@ -2104,7 +2104,7 @@ extern "C" {
         enum ggml_type    vec_dot_type;
     } ggml_type_traits_t;
 
-    ggml_type_traits_t ggml_internal_get_type_traits(enum ggml_type type);
+    GGML_API ggml_type_traits_t ggml_internal_get_type_traits(enum ggml_type type);
 
 #ifdef  __cplusplus
 }
index f9e53a8a017ea041d7b59074b58e709f00f08719..ca8d83dafe47c9763b7f648b9d26bd4e6dfb985e 100644 (file)
 
 ggml_backend_buffer_t ggml_backend_buffer_init(
         struct ggml_backend                  * backend,
-        struct ggml_backend_buffer_i           interface,
+        struct ggml_backend_buffer_i           iface,
                ggml_backend_buffer_context_t   context,
                size_t                          size) {
     ggml_backend_buffer_t buffer = malloc(sizeof(struct ggml_backend_buffer));
 
-    GGML_ASSERT(interface.get_base != NULL);
+    GGML_ASSERT(iface.get_base != NULL);
 
     (*buffer) = (struct ggml_backend_buffer) {
-        /* .interface = */ interface,
+        /* .interface = */ iface,
         /* .backend   = */ backend,
         /* .context   = */ context,
         /* .size      = */ size,
@@ -33,8 +33,8 @@ ggml_backend_buffer_t ggml_backend_buffer_init(
 }
 
 void ggml_backend_buffer_free(ggml_backend_buffer_t buffer) {
-    if (buffer->interface.free_buffer != NULL) {
-        buffer->interface.free_buffer(buffer);
+    if (buffer->iface.free_buffer != NULL) {
+        buffer->iface.free_buffer(buffer);
     }
     free(buffer);
 }
@@ -44,7 +44,7 @@ size_t ggml_backend_buffer_get_alignment(ggml_backend_buffer_t buffer) {
 }
 
 void * ggml_backend_buffer_get_base(ggml_backend_buffer_t buffer) {
-    return buffer->interface.get_base(buffer);
+    return buffer->iface.get_base(buffer);
 }
 
 size_t ggml_backend_buffer_get_size(ggml_backend_buffer_t buffer) {
@@ -52,21 +52,21 @@ size_t ggml_backend_buffer_get_size(ggml_backend_buffer_t buffer) {
 }
 
 size_t ggml_backend_buffer_get_alloc_size(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) {
-    if (buffer->interface.get_alloc_size) {
-        return buffer->interface.get_alloc_size(buffer, tensor);
+    if (buffer->iface.get_alloc_size) {
+        return buffer->iface.get_alloc_size(buffer, tensor);
     }
     return ggml_nbytes(tensor);
 }
 
 void ggml_backend_buffer_init_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) {
-    if (buffer->interface.init_tensor) {
-        buffer->interface.init_tensor(buffer, tensor);
+    if (buffer->iface.init_tensor) {
+        buffer->iface.init_tensor(buffer, tensor);
     }
 }
 
 void ggml_backend_buffer_free_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) {
-    if (buffer->interface.free_tensor) {
-        buffer->interface.free_tensor(buffer, tensor);
+    if (buffer->iface.free_tensor) {
+        buffer->iface.free_tensor(buffer, tensor);
     }
 }
 
@@ -77,61 +77,61 @@ ggml_backend_t ggml_get_backend(const struct ggml_tensor * tensor) {
 }
 
 const char * ggml_backend_name(ggml_backend_t backend) {
-    return backend->interface.get_name(backend);
+    return backend->iface.get_name(backend);
 }
 
 void ggml_backend_free(ggml_backend_t backend) {
-    backend->interface.free(backend);
+    backend->iface.free(backend);
 }
 
 ggml_backend_buffer_t ggml_backend_alloc_buffer(ggml_backend_t backend, size_t size) {
-    return backend->interface.alloc_buffer(backend, size);
+    return backend->iface.alloc_buffer(backend, size);
 }
 
 size_t ggml_backend_get_alignment(ggml_backend_t backend) {
-    return backend->interface.get_alignment(backend);
+    return backend->iface.get_alignment(backend);
 }
 
 void ggml_backend_tensor_set_async(struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
-    ggml_get_backend(tensor)->interface.set_tensor_async(ggml_get_backend(tensor), tensor, data, offset, size);
+    ggml_get_backend(tensor)->iface.set_tensor_async(ggml_get_backend(tensor), tensor, data, offset, size);
 }
 
 void ggml_backend_tensor_get_async(const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) {
-    ggml_get_backend(tensor)->interface.get_tensor_async(ggml_get_backend(tensor), tensor, data, offset, size);
+    ggml_get_backend(tensor)->iface.get_tensor_async(ggml_get_backend(tensor), tensor, data, offset, size);
 }
 
 void ggml_backend_tensor_set(struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
-    ggml_get_backend(tensor)->interface.set_tensor_async(ggml_get_backend(tensor), tensor, data, offset, size);
-    ggml_get_backend(tensor)->interface.synchronize(ggml_get_backend(tensor));
+    ggml_get_backend(tensor)->iface.set_tensor_async(ggml_get_backend(tensor), tensor, data, offset, size);
+    ggml_get_backend(tensor)->iface.synchronize(ggml_get_backend(tensor));
 }
 
 void ggml_backend_tensor_get(const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) {
-    ggml_get_backend(tensor)->interface.get_tensor_async(ggml_get_backend(tensor), tensor, data, offset, size);
-    ggml_get_backend(tensor)->interface.synchronize(ggml_get_backend(tensor));
+    ggml_get_backend(tensor)->iface.get_tensor_async(ggml_get_backend(tensor), tensor, data, offset, size);
+    ggml_get_backend(tensor)->iface.synchronize(ggml_get_backend(tensor));
 }
 
 void ggml_backend_synchronize(ggml_backend_t backend) {
-    backend->interface.synchronize(backend);
+    backend->iface.synchronize(backend);
 }
 
 ggml_backend_graph_plan_t ggml_backend_graph_plan_create(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
-    return backend->interface.graph_plan_create(backend, cgraph);
+    return backend->iface.graph_plan_create(backend, cgraph);
 }
 
 void ggml_backend_graph_plan_free(ggml_backend_t backend, ggml_backend_graph_plan_t plan) {
-    backend->interface.graph_plan_free(backend, plan);
+    backend->iface.graph_plan_free(backend, plan);
 }
 
 void ggml_backend_graph_plan_compute(ggml_backend_t backend, ggml_backend_graph_plan_t plan) {
-    backend->interface.graph_plan_compute(backend, plan);
+    backend->iface.graph_plan_compute(backend, plan);
 }
 
 void ggml_backend_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
-    backend->interface.graph_compute(backend, cgraph);
+    backend->iface.graph_compute(backend, cgraph);
 }
 
 bool ggml_backend_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) {
-    return backend->interface.supports_op(backend, op);
+    return backend->iface.supports_op(backend, op);
 }
 
 // backend copy
@@ -164,10 +164,10 @@ void ggml_backend_tensor_copy(struct ggml_tensor * src, struct ggml_tensor * dst
 
     // TODO: allow backends to support copy to/from same backend
 
-    if (ggml_get_backend(dst)->interface.cpy_tensor_from != NULL) {
-        ggml_get_backend(dst)->interface.cpy_tensor_from(ggml_get_backend(dst)->context, src, dst);
-    } else if (ggml_get_backend(src)->interface.cpy_tensor_to != NULL) {
-        ggml_get_backend(src)->interface.cpy_tensor_to(ggml_get_backend(src)->context, src, dst);
+    if (ggml_get_backend(dst)->iface.cpy_tensor_from != NULL) {
+        ggml_get_backend(dst)->iface.cpy_tensor_from(ggml_get_backend(dst)->context, src, dst);
+    } else if (ggml_get_backend(src)->iface.cpy_tensor_to != NULL) {
+        ggml_get_backend(src)->iface.cpy_tensor_to(ggml_get_backend(src)->context, src, dst);
     } else {
         // shouldn't be hit when copying from/to CPU
         #ifndef NDEBUG
@@ -370,7 +370,7 @@ ggml_backend_t ggml_backend_cpu_init(void) {
 }
 
 bool ggml_backend_is_cpu(ggml_backend_t backend) {
-    return backend->interface.get_name == ggml_backend_cpu_name;
+    return backend->iface.get_name == ggml_backend_cpu_name;
 }
 
 void ggml_backend_cpu_set_n_threads(ggml_backend_t backend_cpu, int n_threads) {
index c8c36c5734a9d0fd37f01fdcc7ee8eac43481054..7e92c519741b97fd85951aa0c839ed593bbe6ba8 100644 (file)
@@ -7640,6 +7640,8 @@ static struct ggml_backend_buffer_i cuda_backend_buffer_interface = {
 };
 
 static ggml_backend_buffer_t ggml_backend_cuda_alloc_buffer(ggml_backend_t backend, size_t size) {
+    ggml_cuda_set_device(g_main_device);
+
     ggml_backend_buffer_context_cuda * ctx = new ggml_backend_buffer_context_cuda;
     CUDA_CHECK(cudaMalloc(&ctx->device, size));
     return ggml_backend_buffer_init(backend, cuda_backend_buffer_interface, ctx, size);
@@ -7700,6 +7702,8 @@ static void ggml_backend_cuda_graph_plan_compute(ggml_backend_t backend, ggml_ba
 }
 
 static void ggml_backend_cuda_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) {
+    ggml_cuda_set_device(g_main_device);
+
     ggml_compute_params params = {};
     params.type = GGML_TASK_COMPUTE;
     params.ith = 0;
@@ -7768,8 +7772,7 @@ ggml_backend_t ggml_backend_cuda_init() {
 
     ggml_backend_context_cuda * ctx = new ggml_backend_context_cuda;
 
-    ggml_backend_t cuda_backend = new ggml_backend;
-    *cuda_backend = (ggml_backend){
+    ggml_backend_t cuda_backend = new ggml_backend {
         /* .interface = */ cuda_backend_i,
         /* .context   = */ ctx
     };
index e564363945e9586f2c7c43f2fb16704a60b675c0..47b37819be8dcd0f7ad4993acdbb8f13376cede9 100644 (file)
@@ -1498,7 +1498,7 @@ ggml_backend_t ggml_backend_metal_init(void) {
 }
 
 bool ggml_backend_is_metal(ggml_backend_t backend) {
-    return backend->interface.get_name == ggml_backend_metal_name;
+    return backend->iface.get_name == ggml_backend_metal_name;
 }
 
 void ggml_backend_metal_set_n_cb(ggml_backend_t backend, int n_cb) {