1#include "ggml.h"
 2#include "ggml-backend-impl.h"
 3
 4#include <unordered_map>
 5#include <unordered_set>
 6#include <vector>
 7#include <cstdint>
 8
 9// ggml_tensor is serialized into apir_rpc_tensor
10struct apir_rpc_tensor {
11    uint64_t id;
12    uint32_t type;
13    uint64_t buffer;
14    uint32_t ne[GGML_MAX_DIMS];
15    uint32_t nb[GGML_MAX_DIMS];
16    uint32_t op;
17    int32_t  op_params[GGML_MAX_OP_PARAMS / sizeof(int32_t)];
18    int32_t  flags;
19    uint64_t src[GGML_MAX_SRC];
20    uint64_t view_src;
21    uint64_t view_offs;
22    uint64_t data;
23    char     name[GGML_MAX_NAME];
24
25    char padding[4];
26};
27
28/* frontend */
29
30apir_rpc_tensor apir_serialize_tensor(const ggml_tensor * tensor);
31
32void apir_serialize_graph(const ggml_cgraph * cgraph, std::vector<uint8_t> & output);
33
34/* backend */
35
36void                                      apir_track_backend_buffer(ggml_backend_buffer_t buffer);
37bool                                      apir_untrack_backend_buffer(ggml_backend_buffer_t buffer);
38std::unordered_set<ggml_backend_buffer_t> apir_get_track_backend_buffers();
39
40void apir_add_tensor(ggml_tensor *                       tensor,
41                     std::vector<apir_rpc_tensor> &      tensors,
42                     std::unordered_set<ggml_tensor *> & visited);
43
44ggml_tensor * apir_deserialize_tensor(ggml_context * ctx, const apir_rpc_tensor * tensor);
45
46ggml_tensor * apir_create_node(uint64_t                                                      id,
47                               ggml_context *                                                ctx,
48                               const std::unordered_map<uint64_t, const apir_rpc_tensor *> & tensor_ptrs,
49                               std::unordered_map<uint64_t, ggml_tensor *> &                 tensor_map);
50
51ggml_cgraph * apir_deserialize_graph(uint32_t                n_nodes,
52                                     uint32_t                n_tensors,
53                                     const apir_rpc_tensor * tensors,
54                                     const uint64_t *        nodes);