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