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