| 636 | } |
| 637 | |
| 638 | size_t ggml_gallocr_alloc_graph(ggml_gallocr_t galloc, ggml_tallocr_t talloc, struct ggml_cgraph * graph) { |
| 639 | size_t hash_size = graph->visited_hash_table.size; |
| 640 | |
| 641 | // check if the hash table is initialized and large enough |
| 642 | if (galloc->hash_set.size < hash_size) { |
| 643 | if (galloc->hash_set.keys != NULL) { |
| 644 | free(galloc->hash_set.keys); |
| 645 | } |
| 646 | if (galloc->hash_values != NULL) { |
| 647 | free(galloc->hash_values); |
| 648 | } |
| 649 | galloc->hash_set.keys = malloc(sizeof(struct ggml_tensor *) * hash_size); |
| 650 | galloc->hash_set.size = hash_size; |
| 651 | galloc->hash_values = malloc(sizeof(struct hash_node) * hash_size); |
| 652 | } |
| 653 | |
| 654 | // reset hash table |
| 655 | memset(galloc->hash_set.keys, 0, sizeof(struct ggml_tensor *) * hash_size); |
| 656 | memset(galloc->hash_values, 0, sizeof(struct hash_node) * hash_size); |
| 657 | |
| 658 | galloc->talloc = talloc; |
| 659 | ggml_tallocr_alloc_graph_impl(galloc, graph); |
| 660 | galloc->talloc = NULL; |
| 661 | |
| 662 | size_t max_size = ggml_tallocr_max_size(talloc); |
| 663 | |
| 664 | return max_size; |
| 665 | } |
| 666 | |
| 667 | void ggml_gallocr_alloc_graph_n(ggml_gallocr_t galloc, struct ggml_cgraph * graph, struct ggml_hash_set hash_set, ggml_tallocr_t * hash_node_talloc) { |
| 668 | const size_t hash_size = hash_set.size; |
no test coverage detected