Branch data Line data Source code
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 : 0 : test_inference_interleave_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 : 0 : ret = ml_inference_mldev_setup(test, opt);
22 : 0 : if (ret != 0)
23 : : return ret;
24 : :
25 : 0 : ret = ml_inference_mem_setup(test, opt);
26 : 0 : if (ret != 0)
27 : : return ret;
28 : :
29 : : /* load and start all models */
30 : 0 : for (fid = 0; fid < opt->nb_filelist; fid++) {
31 : 0 : ret = ml_model_load(test, opt, &t->model[fid], fid);
32 : 0 : if (ret != 0)
33 : 0 : goto error;
34 : :
35 : 0 : ret = ml_model_start(test, opt, &t->model[fid], fid);
36 : 0 : if (ret != 0)
37 : 0 : goto error;
38 : :
39 : 0 : ret = ml_inference_iomem_setup(test, opt, fid);
40 : 0 : if (ret != 0)
41 : 0 : goto error;
42 : : }
43 : :
44 : : /* launch inference requests */
45 : 0 : ret = ml_inference_launch_cores(test, opt, 0, opt->nb_filelist - 1);
46 : 0 : if (ret != 0) {
47 : 0 : ml_err("failed to launch cores");
48 : 0 : goto error;
49 : : }
50 : :
51 : 0 : rte_eal_mp_wait_lcore();
52 : :
53 : : /* stop and unload all models */
54 : 0 : for (fid = 0; fid < opt->nb_filelist; fid++) {
55 : 0 : ret = ml_inference_result(test, opt, fid);
56 : 0 : if (ret != ML_TEST_SUCCESS)
57 : 0 : goto error;
58 : :
59 : 0 : ml_inference_iomem_destroy(test, opt, fid);
60 : : }
61 : :
62 : 0 : for (fid = 0; fid < opt->nb_filelist; fid++)
63 : 0 : ml_stats_get(test, opt, RTE_ML_DEV_XSTATS_MODEL, fid);
64 : :
65 : 0 : for (fid = 0; fid < opt->nb_filelist; fid++) {
66 : 0 : ret = ml_model_stop(test, opt, &t->model[fid], fid);
67 : 0 : if (ret != 0)
68 : 0 : goto error;
69 : :
70 : 0 : ret = ml_model_unload(test, opt, &t->model[fid], fid);
71 : 0 : if (ret != 0)
72 : 0 : goto error;
73 : : }
74 : :
75 : 0 : ml_stats_get(test, opt, RTE_ML_DEV_XSTATS_DEVICE, -1);
76 : 0 : ml_throughput_get(test, opt);
77 : 0 : ml_inference_mem_destroy(test, opt);
78 : :
79 : 0 : ret = ml_inference_mldev_destroy(test, opt);
80 : 0 : if (ret != 0)
81 : : return ret;
82 : :
83 : 0 : t->cmn.result = ML_TEST_SUCCESS;
84 : :
85 : 0 : return 0;
86 : :
87 : 0 : error:
88 : 0 : ml_inference_mem_destroy(test, opt);
89 : 0 : for (fid = 0; fid < opt->nb_filelist; fid++) {
90 : 0 : ml_inference_iomem_destroy(test, opt, fid);
91 : 0 : ml_model_stop(test, opt, &t->model[fid], fid);
92 : 0 : ml_model_unload(test, opt, &t->model[fid], fid);
93 : : }
94 : :
95 : 0 : t->cmn.result = ML_TEST_FAILED;
96 : :
97 : 0 : return ret;
98 : : }
99 : :
100 : : static int
101 : 0 : test_inference_interleave_result(struct ml_test *test, struct ml_options *opt)
102 : : {
103 : : struct test_inference *t;
104 : :
105 : : RTE_SET_USED(opt);
106 : :
107 : : t = ml_test_priv(test);
108 : :
109 : 0 : return t->cmn.result;
110 : : }
111 : :
112 : : static const struct ml_test_ops inference_interleave = {
113 : : .cap_check = test_inference_cap_check,
114 : : .opt_check = test_inference_opt_check,
115 : : .opt_dump = test_inference_opt_dump,
116 : : .test_setup = test_inference_setup,
117 : : .test_destroy = test_inference_destroy,
118 : : .test_driver = test_inference_interleave_driver,
119 : : .test_result = test_inference_interleave_result,
120 : : };
121 : :
122 : 0 : ML_TEST_REGISTER(inference_interleave);
|