]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
ggml: fix ggml_graph_cpy undefined behavior (ggml/943)
authorJohannes Gäßler <redacted>
Sat, 31 Aug 2024 12:35:42 +0000 (14:35 +0200)
committerGeorgi Gerganov <redacted>
Sun, 8 Sep 2024 08:05:55 +0000 (11:05 +0300)
ggml/include/ggml.h
ggml/src/ggml.c

index 09c72b09586dfb841b0a7d8e845ad7214b864b71..6354fcf51c13b99ce060b39cd670315c3d1d51ec 100644 (file)
@@ -681,8 +681,8 @@ extern "C" {
 
     struct ggml_hash_set {
         size_t size;
-        ggml_bitset_t * used;
-        struct ggml_tensor ** keys;
+        ggml_bitset_t * used;       // whether or not the keys are in use i.e. set
+        struct ggml_tensor ** keys; // actual tensors in the set, keys[i] is only defined if ggml_bitset_get(used, i)
     };
 
     // computation graph
index 3504e9ad324bd2783344bd2cba1ee51af685b809..5f106d52a1b72a089140b9ae0fd1c4d8d9c3913f 100644 (file)
@@ -19130,7 +19130,8 @@ void ggml_graph_cpy(struct ggml_cgraph * src, struct ggml_cgraph * dst) {
     }
 
     for (size_t i = 0; i < src->visited_hash_set.size; ++i) {
-        if (src->visited_hash_set.keys[i]) {
+        // copy all hashset keys (tensors) that are in use
+        if (ggml_bitset_get(src->visited_hash_set.used, i)) {
             ggml_hash_insert(&dst->visited_hash_set, src->visited_hash_set.keys[i]);
         }
     }