xref: /dpdk/drivers/ml/cnxk/mvtvm_ml_model.h (revision c5586f49500a9bb2dad12ca59d2da8fa63c2be68)
1df2358f3SSrikanth Yalavarthi /* SPDX-License-Identifier: BSD-3-Clause
2df2358f3SSrikanth Yalavarthi  * Copyright (c) 2023 Marvell.
3df2358f3SSrikanth Yalavarthi  */
4df2358f3SSrikanth Yalavarthi 
5df2358f3SSrikanth Yalavarthi #ifndef _MVTVM_ML_MODEL_H_
6df2358f3SSrikanth Yalavarthi #define _MVTVM_ML_MODEL_H_
7df2358f3SSrikanth Yalavarthi 
8df2358f3SSrikanth Yalavarthi #include <tvmdp.h>
9df2358f3SSrikanth Yalavarthi 
10df2358f3SSrikanth Yalavarthi #include <rte_mldev.h>
11df2358f3SSrikanth Yalavarthi 
12df2358f3SSrikanth Yalavarthi #include "cnxk_ml_io.h"
13df2358f3SSrikanth Yalavarthi 
145cea2c67SPrince Takkar struct cnxk_ml_dev;
158e4dd45cSSrikanth Yalavarthi struct cnxk_ml_model;
16dc57b0a0SSrikanth Yalavarthi struct cnxk_ml_layer;
178e4dd45cSSrikanth Yalavarthi 
18df2358f3SSrikanth Yalavarthi /* Maximum number of objects per model */
19df2358f3SSrikanth Yalavarthi #define ML_MVTVM_MODEL_OBJECT_MAX 3
20df2358f3SSrikanth Yalavarthi 
21df2358f3SSrikanth Yalavarthi /* Objects list */
22df2358f3SSrikanth Yalavarthi extern char mvtvm_object_list[ML_MVTVM_MODEL_OBJECT_MAX][RTE_ML_STR_MAX];
23df2358f3SSrikanth Yalavarthi 
24df2358f3SSrikanth Yalavarthi /* Model object structure */
25df2358f3SSrikanth Yalavarthi struct mvtvm_ml_model_object {
26df2358f3SSrikanth Yalavarthi 	/* Name */
27df2358f3SSrikanth Yalavarthi 	char name[RTE_ML_STR_MAX];
28df2358f3SSrikanth Yalavarthi 
29df2358f3SSrikanth Yalavarthi 	/* Temporary buffer */
30df2358f3SSrikanth Yalavarthi 	uint8_t *buffer;
31df2358f3SSrikanth Yalavarthi 
32df2358f3SSrikanth Yalavarthi 	/* Buffer size */
33df2358f3SSrikanth Yalavarthi 	int64_t size;
34df2358f3SSrikanth Yalavarthi };
35df2358f3SSrikanth Yalavarthi 
3651edcbaeSSrikanth Yalavarthi /* Model fast-path stats */
3751edcbaeSSrikanth Yalavarthi struct mvtvm_ml_model_xstats {
3851edcbaeSSrikanth Yalavarthi 	/* Total TVM runtime latency, sum of all inferences */
3951edcbaeSSrikanth Yalavarthi 	uint64_t tvm_rt_latency_tot;
4051edcbaeSSrikanth Yalavarthi 
4151edcbaeSSrikanth Yalavarthi 	/* TVM runtime latency */
4251edcbaeSSrikanth Yalavarthi 	uint64_t tvm_rt_latency;
4351edcbaeSSrikanth Yalavarthi 
4451edcbaeSSrikanth Yalavarthi 	/* Minimum TVM runtime latency */
4551edcbaeSSrikanth Yalavarthi 	uint64_t tvm_rt_latency_min;
4651edcbaeSSrikanth Yalavarthi 
4751edcbaeSSrikanth Yalavarthi 	/* Maximum TVM runtime latency */
4851edcbaeSSrikanth Yalavarthi 	uint64_t tvm_rt_latency_max;
4951edcbaeSSrikanth Yalavarthi 
5051edcbaeSSrikanth Yalavarthi 	/* Total jobs dequeued */
5151edcbaeSSrikanth Yalavarthi 	uint64_t dequeued_count;
5251edcbaeSSrikanth Yalavarthi 
5351edcbaeSSrikanth Yalavarthi 	/* Hardware stats reset index */
5451edcbaeSSrikanth Yalavarthi 	uint64_t tvm_rt_reset_count;
5551edcbaeSSrikanth Yalavarthi };
5651edcbaeSSrikanth Yalavarthi 
57df2358f3SSrikanth Yalavarthi struct mvtvm_ml_model_data {
58df2358f3SSrikanth Yalavarthi 	/* Model metadata */
59df2358f3SSrikanth Yalavarthi 	struct tvmdp_model_metadata metadata;
60df2358f3SSrikanth Yalavarthi 
61df2358f3SSrikanth Yalavarthi 	/* Model objects */
62df2358f3SSrikanth Yalavarthi 	struct tvmdp_model_object object;
63df2358f3SSrikanth Yalavarthi 
64df2358f3SSrikanth Yalavarthi 	/* TVM runtime callbacks */
65df2358f3SSrikanth Yalavarthi 	struct tvmrt_glow_callback cb;
66df2358f3SSrikanth Yalavarthi 
67df2358f3SSrikanth Yalavarthi 	/* Model I/O info */
68df2358f3SSrikanth Yalavarthi 	struct cnxk_ml_io_info info;
6951edcbaeSSrikanth Yalavarthi 
7051edcbaeSSrikanth Yalavarthi 	/* Stats for burst ops */
7151edcbaeSSrikanth Yalavarthi 	struct mvtvm_ml_model_xstats *burst_xstats;
72*c5586f49SAnup Prabhu 
73*c5586f49SAnup Prabhu 	/* Input Tensor */
74*c5586f49SAnup Prabhu 	DLTensor input_tensor[ML_CNXK_MODEL_MAX_INPUT_OUTPUT];
75*c5586f49SAnup Prabhu 
76*c5586f49SAnup Prabhu 	/* Output Tensor */
77*c5586f49SAnup Prabhu 	DLTensor output_tensor[ML_CNXK_MODEL_MAX_INPUT_OUTPUT];
78df2358f3SSrikanth Yalavarthi };
79df2358f3SSrikanth Yalavarthi 
8010563a5eSSrikanth Yalavarthi enum cnxk_ml_model_type mvtvm_ml_model_type_get(struct rte_ml_model_params *params);
81a16f8a48SSrikanth Yalavarthi int mvtvm_ml_model_blob_parse(struct rte_ml_model_params *params,
82a16f8a48SSrikanth Yalavarthi 			      struct mvtvm_ml_model_object *object);
838e4dd45cSSrikanth Yalavarthi int mvtvm_ml_model_get_layer_id(struct cnxk_ml_model *model, const char *layer_name,
848e4dd45cSSrikanth Yalavarthi 				uint16_t *layer_id);
8533cfebd9SSrikanth Yalavarthi void mvtvm_ml_model_io_info_set(struct cnxk_ml_model *model);
8633cfebd9SSrikanth Yalavarthi struct cnxk_ml_io_info *mvtvm_ml_model_io_info_get(struct cnxk_ml_model *model, uint16_t layer_id);
875cea2c67SPrince Takkar void mvtvm_ml_model_info_set(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_model *model);
88dc57b0a0SSrikanth Yalavarthi void mvtvm_ml_layer_print(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_layer *layer, FILE *fp);
8910563a5eSSrikanth Yalavarthi 
90df2358f3SSrikanth Yalavarthi #endif /* _MVTVM_ML_MODEL_H_ */
91