1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright (c) 2022 Marvell. 3 */ 4 5 #include <rte_common.h> 6 #include <rte_launch.h> 7 8 #include "ml_common.h" 9 #include "test_inference_common.h" 10 #include "test_stats.h" 11 12 static int 13 test_inference_ordered_driver(struct ml_test *test, struct ml_options *opt) 14 { 15 struct test_inference *t; 16 uint16_t fid = 0; 17 int ret = 0; 18 19 t = ml_test_priv(test); 20 21 ret = ml_inference_mldev_setup(test, opt); 22 if (ret != 0) 23 return ret; 24 25 ret = ml_inference_mem_setup(test, opt); 26 if (ret != 0) 27 return ret; 28 29 next_model: 30 /* load model */ 31 ret = ml_model_load(test, opt, &t->model[fid], fid); 32 if (ret != 0) 33 goto error; 34 35 /* start model */ 36 ret = ml_model_start(test, opt, &t->model[fid], fid); 37 if (ret != 0) 38 goto error; 39 40 ret = ml_inference_iomem_setup(test, opt, fid); 41 if (ret != 0) 42 goto error; 43 44 /* launch inferences for one model using available queue pairs */ 45 ret = ml_inference_launch_cores(test, opt, fid, fid); 46 if (ret != 0) { 47 ml_err("failed to launch cores"); 48 goto error; 49 } 50 51 rte_eal_mp_wait_lcore(); 52 53 ret = ml_inference_result(test, opt, fid); 54 if (ret != ML_TEST_SUCCESS) 55 goto error; 56 57 ml_inference_iomem_destroy(test, opt, fid); 58 ml_stats_get(test, opt, RTE_ML_DEV_XSTATS_MODEL, fid); 59 ml_throughput_get(test, opt); 60 61 /* stop model */ 62 ret = ml_model_stop(test, opt, &t->model[fid], fid); 63 if (ret != 0) 64 goto error; 65 66 /* unload model */ 67 ret = ml_model_unload(test, opt, &t->model[fid], fid); 68 if (ret != 0) 69 goto error; 70 71 fid++; 72 if (fid < opt->nb_filelist) 73 goto next_model; 74 75 ml_stats_get(test, opt, RTE_ML_DEV_XSTATS_DEVICE, -1); 76 ml_inference_mem_destroy(test, opt); 77 78 ret = ml_inference_mldev_destroy(test, opt); 79 if (ret != 0) 80 return ret; 81 82 t->cmn.result = ML_TEST_SUCCESS; 83 84 return 0; 85 86 error: 87 ml_inference_iomem_destroy(test, opt, fid); 88 ml_inference_mem_destroy(test, opt); 89 ml_model_stop(test, opt, &t->model[fid], fid); 90 ml_model_unload(test, opt, &t->model[fid], fid); 91 92 t->cmn.result = ML_TEST_FAILED; 93 94 return ret; 95 } 96 97 static int 98 test_inference_ordered_result(struct ml_test *test, struct ml_options *opt) 99 { 100 struct test_inference *t; 101 102 RTE_SET_USED(opt); 103 104 t = ml_test_priv(test); 105 106 return t->cmn.result; 107 } 108 109 static const struct ml_test_ops inference_ordered = { 110 .cap_check = test_inference_cap_check, 111 .opt_check = test_inference_opt_check, 112 .opt_dump = test_inference_opt_dump, 113 .test_setup = test_inference_setup, 114 .test_destroy = test_inference_destroy, 115 .test_driver = test_inference_ordered_driver, 116 .test_result = test_inference_ordered_result, 117 }; 118 119 ML_TEST_REGISTER(inference_ordered); 120