ggml-alloc.h 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #pragma once
  2. #include "ggml.h"
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. struct ggml_backend;
  7. struct ggml_backend_buffer;
  8. struct ggml_backend_buffer_type;
  9. //
  10. // Legacy API
  11. //
  12. typedef struct ggml_allocr * ggml_allocr_t;
  13. // initialize allocator for use with CPU backend only
  14. GGML_API ggml_allocr_t ggml_allocr_new(void * data, size_t size, size_t alignment);
  15. GGML_API ggml_allocr_t ggml_allocr_new_measure(size_t alignment);
  16. // initialize allocator for use with ggml-backend
  17. GGML_API ggml_allocr_t ggml_allocr_new_from_buffer(struct ggml_backend_buffer * buffer);
  18. GGML_API ggml_allocr_t ggml_allocr_new_from_backend(struct ggml_backend * backend, size_t size); // allocates an owned buffer
  19. GGML_API ggml_allocr_t ggml_allocr_new_measure_from_backend(struct ggml_backend * backend);
  20. GGML_API struct ggml_backend_buffer * ggml_allocr_get_buffer(ggml_allocr_t alloc);
  21. // tell the allocator to parse nodes following the order described in the list
  22. // you should call this if your graph are optimized to execute out-of-order
  23. GGML_API void ggml_allocr_set_parse_seq(ggml_allocr_t alloc, const int * list, int n);
  24. GGML_API void ggml_allocr_free (ggml_allocr_t alloc);
  25. GGML_API bool ggml_allocr_is_measure (ggml_allocr_t alloc);
  26. GGML_API void ggml_allocr_reset (ggml_allocr_t alloc);
  27. GGML_API void ggml_allocr_alloc (ggml_allocr_t alloc, struct ggml_tensor * tensor);
  28. GGML_API size_t ggml_allocr_max_size (ggml_allocr_t alloc);
  29. GGML_API size_t ggml_allocr_alloc_graph(ggml_allocr_t alloc, struct ggml_cgraph * graph);
  30. //
  31. // ggml-backend v2 API
  32. //
  33. // Separate tensor and graph allocator objects
  34. // This is necessary for multi-backend allocation because the graph allocator needs to use multiple tensor allocators
  35. // The original API is kept as a wrapper around the new API
  36. // Tensor allocator
  37. typedef struct ggml_tallocr * ggml_tallocr_t;
  38. GGML_API ggml_tallocr_t ggml_tallocr_new(void * data, size_t size, size_t alignment);
  39. GGML_API ggml_tallocr_t ggml_tallocr_new_measure(size_t alignment);
  40. GGML_API ggml_tallocr_t ggml_tallocr_new_from_buffer(struct ggml_backend_buffer * buffer);
  41. GGML_API ggml_tallocr_t ggml_tallocr_new_from_backend(struct ggml_backend * backend, size_t size); // allocates an owned buffer
  42. GGML_API ggml_tallocr_t ggml_tallocr_new_measure_from_backend(struct ggml_backend * backend);
  43. GGML_API struct ggml_backend_buffer * ggml_tallocr_get_buffer(ggml_tallocr_t talloc);
  44. GGML_API void ggml_tallocr_free (ggml_tallocr_t talloc);
  45. GGML_API bool ggml_tallocr_is_measure (ggml_tallocr_t talloc);
  46. GGML_API void ggml_tallocr_reset (ggml_tallocr_t talloc);
  47. GGML_API void ggml_tallocr_alloc (ggml_tallocr_t talloc, struct ggml_tensor * tensor);
  48. GGML_API size_t ggml_tallocr_max_size (ggml_tallocr_t talloc);
  49. // Graph allocator
  50. typedef struct ggml_gallocr * ggml_gallocr_t;
  51. GGML_API ggml_gallocr_t ggml_gallocr_new(void);
  52. GGML_API void ggml_gallocr_free(ggml_gallocr_t galloc);
  53. GGML_API void ggml_gallocr_set_parse_seq(ggml_gallocr_t galloc, const int * list, int n);
  54. GGML_API size_t ggml_gallocr_alloc_graph(ggml_gallocr_t galloc, ggml_tallocr_t talloc, struct ggml_cgraph * graph);
  55. // Allocate tensors from the allocators given by the hash table
  56. GGML_API void ggml_gallocr_alloc_graph_n(
  57. ggml_gallocr_t galloc,
  58. struct ggml_cgraph * graph,
  59. struct ggml_hash_set hash_set,
  60. ggml_tallocr_t * hash_node_talloc);
  61. // Utils
  62. // Create a buffer and allocate all the tensors in a ggml_context
  63. GGML_API struct ggml_backend_buffer * ggml_backend_alloc_ctx_tensors_from_buft(struct ggml_context * ctx, struct ggml_backend_buffer_type * buft);
  64. GGML_API struct ggml_backend_buffer * ggml_backend_alloc_ctx_tensors(struct ggml_context * ctx, struct ggml_backend * backend);
  65. #ifdef __cplusplus
  66. }
  67. #endif