xref: /dpdk/drivers/ml/cnxk/mvtvm_ml_model.h (revision c5586f49500a9bb2dad12ca59d2da8fa63c2be68)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2023 Marvell.
3  */
4 
5 #ifndef _MVTVM_ML_MODEL_H_
6 #define _MVTVM_ML_MODEL_H_
7 
8 #include <tvmdp.h>
9 
10 #include <rte_mldev.h>
11 
12 #include "cnxk_ml_io.h"
13 
14 struct cnxk_ml_dev;
15 struct cnxk_ml_model;
16 struct cnxk_ml_layer;
17 
18 /* Maximum number of objects per model */
19 #define ML_MVTVM_MODEL_OBJECT_MAX 3
20 
21 /* Objects list */
22 extern char mvtvm_object_list[ML_MVTVM_MODEL_OBJECT_MAX][RTE_ML_STR_MAX];
23 
24 /* Model object structure */
25 struct mvtvm_ml_model_object {
26 	/* Name */
27 	char name[RTE_ML_STR_MAX];
28 
29 	/* Temporary buffer */
30 	uint8_t *buffer;
31 
32 	/* Buffer size */
33 	int64_t size;
34 };
35 
36 /* Model fast-path stats */
37 struct mvtvm_ml_model_xstats {
38 	/* Total TVM runtime latency, sum of all inferences */
39 	uint64_t tvm_rt_latency_tot;
40 
41 	/* TVM runtime latency */
42 	uint64_t tvm_rt_latency;
43 
44 	/* Minimum TVM runtime latency */
45 	uint64_t tvm_rt_latency_min;
46 
47 	/* Maximum TVM runtime latency */
48 	uint64_t tvm_rt_latency_max;
49 
50 	/* Total jobs dequeued */
51 	uint64_t dequeued_count;
52 
53 	/* Hardware stats reset index */
54 	uint64_t tvm_rt_reset_count;
55 };
56 
57 struct mvtvm_ml_model_data {
58 	/* Model metadata */
59 	struct tvmdp_model_metadata metadata;
60 
61 	/* Model objects */
62 	struct tvmdp_model_object object;
63 
64 	/* TVM runtime callbacks */
65 	struct tvmrt_glow_callback cb;
66 
67 	/* Model I/O info */
68 	struct cnxk_ml_io_info info;
69 
70 	/* Stats for burst ops */
71 	struct mvtvm_ml_model_xstats *burst_xstats;
72 
73 	/* Input Tensor */
74 	DLTensor input_tensor[ML_CNXK_MODEL_MAX_INPUT_OUTPUT];
75 
76 	/* Output Tensor */
77 	DLTensor output_tensor[ML_CNXK_MODEL_MAX_INPUT_OUTPUT];
78 };
79 
80 enum cnxk_ml_model_type mvtvm_ml_model_type_get(struct rte_ml_model_params *params);
81 int mvtvm_ml_model_blob_parse(struct rte_ml_model_params *params,
82 			      struct mvtvm_ml_model_object *object);
83 int mvtvm_ml_model_get_layer_id(struct cnxk_ml_model *model, const char *layer_name,
84 				uint16_t *layer_id);
85 void mvtvm_ml_model_io_info_set(struct cnxk_ml_model *model);
86 struct cnxk_ml_io_info *mvtvm_ml_model_io_info_get(struct cnxk_ml_model *model, uint16_t layer_id);
87 void mvtvm_ml_model_info_set(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_model *model);
88 void mvtvm_ml_layer_print(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_layer *layer, FILE *fp);
89 
90 #endif /* _MVTVM_ML_MODEL_H_ */
91