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
test_inference_ordered_driver(struct ml_test * test,struct ml_options * opt)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
test_inference_ordered_result(struct ml_test * test,struct ml_options * opt)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