DPDK  23.11.0
rte_mldev.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2022 Marvell.
3  */
4 
5 #ifndef RTE_MLDEV_H
6 #define RTE_MLDEV_H
7 
137 #include <rte_common.h>
138 #include <rte_log.h>
139 #include <rte_mempool.h>
140 
141 #ifdef __cplusplus
142 extern "C" {
143 #endif
144 
145 /* Logging Macro */
146 extern int rte_ml_dev_logtype;
147 
148 #define RTE_MLDEV_LOG(level, fmt, args...) \
149  rte_log(RTE_LOG_##level, rte_ml_dev_logtype, "%s(): " fmt "\n", __func__, ##args)
150 
151 #define RTE_ML_STR_MAX 128
154 #define RTE_MLDEV_DEFAULT_MAX 32
157 /* Device operations */
158 
172 __rte_experimental
173 int
174 rte_ml_dev_init(size_t dev_max);
175 
182 __rte_experimental
183 uint16_t
185 
196 __rte_experimental
197 int
198 rte_ml_dev_is_valid_dev(int16_t dev_id);
199 
211 __rte_experimental
212 int
213 rte_ml_dev_socket_id(int16_t dev_id);
214 
217  const char *driver_name;
219  uint16_t max_models;
223  uint16_t max_queue_pairs;
227  uint16_t max_desc;
231  uint16_t max_io;
233  uint16_t max_segments;
237  uint16_t align_size;
239 };
240 
253 __rte_experimental
254 int
255 rte_ml_dev_info_get(int16_t dev_id, struct rte_ml_dev_info *dev_info);
256 
261  uint16_t nb_models;
266  uint16_t nb_queue_pairs;
271 };
272 
293 __rte_experimental
294 int
295 rte_ml_dev_configure(int16_t dev_id, const struct rte_ml_dev_config *config);
296 
297 /* Forward declaration */
298 struct rte_ml_op;
299 
301 typedef void (*rte_ml_dev_stop_flush_t)(int16_t dev_id, uint16_t qp_id, struct rte_ml_op *op);
302 
305  uint32_t nb_desc;
317 };
318 
338 __rte_experimental
339 int
340 rte_ml_dev_queue_pair_setup(int16_t dev_id, uint16_t queue_pair_id,
341  const struct rte_ml_dev_qp_conf *qp_conf, int socket_id);
342 
356 __rte_experimental
357 int
358 rte_ml_dev_start(int16_t dev_id);
359 
371 __rte_experimental
372 int
373 rte_ml_dev_stop(int16_t dev_id);
374 
385 __rte_experimental
386 int
387 rte_ml_dev_close(int16_t dev_id);
388 
400 };
401 
407  void *addr;
409  uint32_t length;
411  uint32_t reserved;
415 };
416 
423 struct rte_ml_op {
424  uint16_t model_id;
426  uint16_t nb_batches;
430  uint32_t reserved;
456  union {
457  uint64_t user_u64;
459  void *user_ptr;
461  };
464  uint64_t impl_opaque;
472 
473 /* Enqueue/Dequeue operations */
474 
505 __rte_experimental
506 uint16_t
507 rte_ml_enqueue_burst(int16_t dev_id, uint16_t qp_id, struct rte_ml_op **ops, uint16_t nb_ops);
508 
542 __rte_experimental
543 uint16_t
544 rte_ml_dequeue_burst(int16_t dev_id, uint16_t qp_id, struct rte_ml_op **ops, uint16_t nb_ops);
545 
551  uint64_t errcode;
552 };
553 
571 __rte_experimental
572 int
573 rte_ml_op_error_get(int16_t dev_id, struct rte_ml_op *op, struct rte_ml_op_error *error);
574 
575 /* Statistics operations */
576 
579  uint64_t enqueued_count;
581  uint64_t dequeued_count;
587 };
588 
601 __rte_experimental
602 int
603 rte_ml_dev_stats_get(int16_t dev_id, struct rte_ml_dev_stats *stats);
604 
611 __rte_experimental
612 void
613 rte_ml_dev_stats_reset(int16_t dev_id);
614 
623 };
624 
631  uint16_t id;
635 };
636 
663 __rte_experimental
664 int
665 rte_ml_dev_xstats_names_get(int16_t dev_id, enum rte_ml_dev_xstats_mode mode, int32_t model_id,
666  struct rte_ml_dev_xstats_map *xstats_map, uint32_t size);
667 
685 __rte_experimental
686 int
687 rte_ml_dev_xstats_by_name_get(int16_t dev_id, const char *name, uint16_t *stat_id, uint64_t *value);
688 
712 __rte_experimental
713 int
714 rte_ml_dev_xstats_get(int16_t dev_id, enum rte_ml_dev_xstats_mode mode, int32_t model_id,
715  const uint16_t stat_ids[], uint64_t values[], uint16_t nb_ids);
716 
735 __rte_experimental
736 int
737 rte_ml_dev_xstats_reset(int16_t dev_id, enum rte_ml_dev_xstats_mode mode, int32_t model_id,
738  const uint16_t stat_ids[], uint16_t nb_ids);
739 
751 __rte_experimental
752 int
753 rte_ml_dev_dump(int16_t dev_id, FILE *fd);
754 
765 __rte_experimental
766 int
767 rte_ml_dev_selftest(int16_t dev_id);
768 
769 /* Model operations */
770 
776  void *addr;
778  size_t size;
780 };
781 
798 __rte_experimental
799 int
800 rte_ml_model_load(int16_t dev_id, struct rte_ml_model_params *params, uint16_t *model_id);
801 
814 __rte_experimental
815 int
816 rte_ml_model_unload(int16_t dev_id, uint16_t model_id);
817 
832 __rte_experimental
833 int
834 rte_ml_model_start(int16_t dev_id, uint16_t model_id);
835 
851 __rte_experimental
852 int
853 rte_ml_model_stop(int16_t dev_id, uint16_t model_id);
854 
884 };
885 
913 };
914 
923  uint32_t nb_dims;
925  uint32_t *shape;
927  enum rte_ml_io_type type;
931  uint64_t nb_elements;
933  uint64_t size;
935 };
936 
943  uint16_t model_id;
945  uint16_t device_id;
949  uint16_t min_batches;
953  uint16_t max_batches;
957  uint32_t nb_inputs;
959  const struct rte_ml_io_info *input_info;
961  uint32_t nb_outputs;
965  uint64_t wb_size;
967 };
968 
983 __rte_experimental
984 int
985 rte_ml_model_info_get(int16_t dev_id, uint16_t model_id, struct rte_ml_model_info *model_info);
986 
1005 __rte_experimental
1006 int
1007 rte_ml_model_params_update(int16_t dev_id, uint16_t model_id, void *buffer);
1008 
1009 /* IO operations */
1010 
1031 __rte_experimental
1032 int
1033 rte_ml_io_quantize(int16_t dev_id, uint16_t model_id, struct rte_ml_buff_seg **dbuffer,
1034  struct rte_ml_buff_seg **qbuffer);
1035 
1055 __rte_experimental
1056 int
1057 rte_ml_io_dequantize(int16_t dev_id, uint16_t model_id, struct rte_ml_buff_seg **qbuffer,
1058  struct rte_ml_buff_seg **dbuffer);
1059 
1060 /* ML op pool operations */
1061 
1080 __rte_experimental
1081 struct rte_mempool *
1082 rte_ml_op_pool_create(const char *name, unsigned int nb_elts, unsigned int cache_size,
1083  uint16_t user_size, int socket_id);
1084 
1092 __rte_experimental
1093 void
1095 
1096 #ifdef __cplusplus
1097 }
1098 #endif
1099 
1100 #endif /* RTE_MLDEV_H */
#define __rte_cache_aligned
Definition: rte_common.h:524
uint64_t rte_iova_t
Definition: rte_common.h:556
__rte_experimental int rte_ml_io_quantize(int16_t dev_id, uint16_t model_id, struct rte_ml_buff_seg **dbuffer, struct rte_ml_buff_seg **qbuffer)
__rte_experimental int rte_ml_dev_init(size_t dev_max)
__rte_experimental int rte_ml_model_start(int16_t dev_id, uint16_t model_id)
__rte_experimental int rte_ml_model_info_get(int16_t dev_id, uint16_t model_id, struct rte_ml_model_info *model_info)
rte_ml_io_layout
Definition: rte_mldev.h:887
@ RTE_ML_IO_LAYOUT_SPLIT
Definition: rte_mldev.h:901
@ RTE_ML_IO_LAYOUT_PACKED
Definition: rte_mldev.h:888
__rte_experimental int rte_ml_dev_close(int16_t dev_id)
__rte_experimental int rte_ml_dev_start(int16_t dev_id)
__rte_experimental void rte_ml_op_pool_free(struct rte_mempool *mempool)
#define RTE_ML_STR_MAX
Definition: rte_mldev.h:151
__rte_experimental int rte_ml_dev_socket_id(int16_t dev_id)
__rte_experimental int rte_ml_dev_stats_get(int16_t dev_id, struct rte_ml_dev_stats *stats)
__rte_experimental int rte_ml_dev_dump(int16_t dev_id, FILE *fd)
__rte_experimental void rte_ml_dev_stats_reset(int16_t dev_id)
__rte_experimental int rte_ml_io_dequantize(int16_t dev_id, uint16_t model_id, struct rte_ml_buff_seg **qbuffer, struct rte_ml_buff_seg **dbuffer)
__rte_experimental int rte_ml_dev_is_valid_dev(int16_t dev_id)
__rte_experimental int rte_ml_dev_stop(int16_t dev_id)
__rte_experimental uint16_t rte_ml_enqueue_burst(int16_t dev_id, uint16_t qp_id, struct rte_ml_op **ops, uint16_t nb_ops)
__rte_experimental int rte_ml_dev_xstats_reset(int16_t dev_id, enum rte_ml_dev_xstats_mode mode, int32_t model_id, const uint16_t stat_ids[], uint16_t nb_ids)
__rte_experimental int rte_ml_dev_xstats_get(int16_t dev_id, enum rte_ml_dev_xstats_mode mode, int32_t model_id, const uint16_t stat_ids[], uint64_t values[], uint16_t nb_ids)
__rte_experimental uint16_t rte_ml_dev_count(void)
__rte_experimental int rte_ml_dev_queue_pair_setup(int16_t dev_id, uint16_t queue_pair_id, const struct rte_ml_dev_qp_conf *qp_conf, int socket_id)
__rte_experimental int rte_ml_model_unload(int16_t dev_id, uint16_t model_id)
__rte_experimental uint16_t rte_ml_dequeue_burst(int16_t dev_id, uint16_t qp_id, struct rte_ml_op **ops, uint16_t nb_ops)
__rte_experimental int rte_ml_dev_selftest(int16_t dev_id)
__rte_experimental struct rte_mempool * rte_ml_op_pool_create(const char *name, unsigned int nb_elts, unsigned int cache_size, uint16_t user_size, int socket_id)
__rte_experimental int rte_ml_dev_xstats_by_name_get(int16_t dev_id, const char *name, uint16_t *stat_id, uint64_t *value)
__rte_experimental int rte_ml_model_stop(int16_t dev_id, uint16_t model_id)
rte_ml_dev_xstats_mode
Definition: rte_mldev.h:618
@ RTE_ML_DEV_XSTATS_MODEL
Definition: rte_mldev.h:621
@ RTE_ML_DEV_XSTATS_DEVICE
Definition: rte_mldev.h:619
__rte_experimental int rte_ml_op_error_get(int16_t dev_id, struct rte_ml_op *op, struct rte_ml_op_error *error)
__rte_experimental int rte_ml_dev_info_get(int16_t dev_id, struct rte_ml_dev_info *dev_info)
rte_ml_op_status
Definition: rte_mldev.h:390
@ RTE_ML_OP_STATUS_ERROR
Definition: rte_mldev.h:395
@ RTE_ML_OP_STATUS_SUCCESS
Definition: rte_mldev.h:391
@ RTE_ML_OP_STATUS_NOT_PROCESSED
Definition: rte_mldev.h:393
rte_ml_io_type
Definition: rte_mldev.h:861
@ RTE_ML_IO_TYPE_FP8
Definition: rte_mldev.h:876
@ RTE_ML_IO_TYPE_BFLOAT16
Definition: rte_mldev.h:882
@ RTE_ML_IO_TYPE_UINT8
Definition: rte_mldev.h:866
@ RTE_ML_IO_TYPE_UINT16
Definition: rte_mldev.h:870
@ RTE_ML_IO_TYPE_INT16
Definition: rte_mldev.h:868
@ RTE_ML_IO_TYPE_FP32
Definition: rte_mldev.h:880
@ RTE_ML_IO_TYPE_UINT32
Definition: rte_mldev.h:874
@ RTE_ML_IO_TYPE_INT8
Definition: rte_mldev.h:864
@ RTE_ML_IO_TYPE_INT32
Definition: rte_mldev.h:872
@ RTE_ML_IO_TYPE_UNKNOWN
Definition: rte_mldev.h:862
@ RTE_ML_IO_TYPE_FP16
Definition: rte_mldev.h:878
void(* rte_ml_dev_stop_flush_t)(int16_t dev_id, uint16_t qp_id, struct rte_ml_op *op)
Definition: rte_mldev.h:301
__rte_experimental int rte_ml_model_load(int16_t dev_id, struct rte_ml_model_params *params, uint16_t *model_id)
__rte_experimental int rte_ml_dev_xstats_names_get(int16_t dev_id, enum rte_ml_dev_xstats_mode mode, int32_t model_id, struct rte_ml_dev_xstats_map *xstats_map, uint32_t size)
__rte_experimental int rte_ml_model_params_update(int16_t dev_id, uint16_t model_id, void *buffer)
__rte_experimental int rte_ml_dev_configure(int16_t dev_id, const struct rte_ml_dev_config *config)
char name[RTE_MEMPOOL_NAMESIZE]
Definition: rte_mempool.h:221
uint32_t cache_size
Definition: rte_mempool.h:231
rte_iova_t iova_addr
Definition: rte_mldev.h:405
uint32_t reserved
Definition: rte_mldev.h:411
struct rte_ml_buff_seg * next
Definition: rte_mldev.h:413
uint32_t length
Definition: rte_mldev.h:409
uint16_t nb_queue_pairs
Definition: rte_mldev.h:266
uint16_t nb_models
Definition: rte_mldev.h:261
uint16_t max_segments
Definition: rte_mldev.h:233
uint16_t max_io
Definition: rte_mldev.h:231
uint16_t max_queue_pairs
Definition: rte_mldev.h:223
uint16_t max_desc
Definition: rte_mldev.h:227
uint16_t max_models
Definition: rte_mldev.h:219
uint16_t align_size
Definition: rte_mldev.h:237
const char * driver_name
Definition: rte_mldev.h:217
uint32_t nb_desc
Definition: rte_mldev.h:305
rte_ml_dev_stop_flush_t cb
Definition: rte_mldev.h:310
uint64_t enqueue_err_count
Definition: rte_mldev.h:583
uint64_t enqueued_count
Definition: rte_mldev.h:579
uint64_t dequeue_err_count
Definition: rte_mldev.h:585
uint64_t dequeued_count
Definition: rte_mldev.h:581
char name[RTE_ML_STR_MAX]
Definition: rte_mldev.h:633
char name[RTE_ML_STR_MAX]
Definition: rte_mldev.h:921
uint32_t nb_dims
Definition: rte_mldev.h:923
enum rte_ml_io_type type
Definition: rte_mldev.h:927
uint32_t * shape
Definition: rte_mldev.h:925
uint64_t size
Definition: rte_mldev.h:933
char name[RTE_ML_STR_MAX]
Definition: rte_mldev.h:939
uint16_t min_batches
Definition: rte_mldev.h:949
uint16_t model_id
Definition: rte_mldev.h:943
uint32_t nb_inputs
Definition: rte_mldev.h:957
char version[RTE_ML_STR_MAX]
Definition: rte_mldev.h:941
uint16_t max_batches
Definition: rte_mldev.h:953
uint64_t wb_size
Definition: rte_mldev.h:965
enum rte_ml_io_layout io_layout
Definition: rte_mldev.h:947
const struct rte_ml_io_info * output_info
Definition: rte_mldev.h:963
uint16_t device_id
Definition: rte_mldev.h:945
uint32_t nb_outputs
Definition: rte_mldev.h:961
const struct rte_ml_io_info * input_info
Definition: rte_mldev.h:959
uint64_t errcode
Definition: rte_mldev.h:551
char message[RTE_ML_STR_MAX]
Definition: rte_mldev.h:550
uint16_t nb_batches
Definition: rte_mldev.h:426
struct rte_mempool * mempool
Definition: rte_mldev.h:432
uint64_t user_u64
Definition: rte_mldev.h:457
struct rte_ml_buff_seg ** input
Definition: rte_mldev.h:434
uint16_t model_id
Definition: rte_mldev.h:424
void * user_ptr
Definition: rte_mldev.h:459
uint64_t impl_opaque
Definition: rte_mldev.h:464
uint32_t reserved
Definition: rte_mldev.h:430
enum rte_ml_op_status status
Definition: rte_mldev.h:462
struct rte_ml_buff_seg ** output
Definition: rte_mldev.h:445