xref: /dpdk/app/test-mldev/test_inference_ordered.c (revision 86dfed2a8ed704e013f054985a92d46f07ff48d1)
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_ordered_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 next_model:
29 	/* load model */
30 	ret = ml_model_load(test, opt, &t->model[fid], fid);
31 	if (ret != 0)
32 		goto error;
33 
34 	/* start model */
35 	ret = ml_model_start(test, opt, &t->model[fid], fid);
36 	if (ret != 0)
37 		goto error;
38 
39 	ret = ml_inference_iomem_setup(test, opt, fid);
40 	if (ret != 0)
41 		goto error;
42 
43 	/* launch inferences for one model using available queue pairs */
44 	ret = ml_inference_launch_cores(test, opt, fid, fid);
45 	if (ret != 0) {
46 		ml_err("failed to launch cores");
47 		goto error;
48 	}
49 
50 	rte_eal_mp_wait_lcore();
51 
52 	ret = ml_inference_result(test, opt, fid);
53 	if (ret != ML_TEST_SUCCESS)
54 		goto error;
55 
56 	ml_inference_iomem_destroy(test, opt, fid);
57 	ml_inference_stats_get(test, opt);
58 
59 	/* stop model */
60 	ret = ml_model_stop(test, opt, &t->model[fid], fid);
61 	if (ret != 0)
62 		goto error;
63 
64 	/* unload model */
65 	ret = ml_model_unload(test, opt, &t->model[fid], fid);
66 	if (ret != 0)
67 		goto error;
68 
69 	fid++;
70 	if (fid < opt->nb_filelist)
71 		goto next_model;
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_iomem_destroy(test, opt, fid);
85 	ml_inference_mem_destroy(test, opt);
86 	ml_model_stop(test, opt, &t->model[fid], fid);
87 	ml_model_unload(test, opt, &t->model[fid], fid);
88 
89 	t->cmn.result = ML_TEST_FAILED;
90 
91 	return ret;
92 }
93 
94 static int
95 test_inference_ordered_result(struct ml_test *test, struct ml_options *opt)
96 {
97 	struct test_inference *t;
98 
99 	RTE_SET_USED(opt);
100 
101 	t = ml_test_priv(test);
102 
103 	return t->cmn.result;
104 }
105 
106 static const struct ml_test_ops inference_ordered = {
107 	.cap_check = test_inference_cap_check,
108 	.opt_check = test_inference_opt_check,
109 	.opt_dump = test_inference_opt_dump,
110 	.test_setup = test_inference_setup,
111 	.test_destroy = test_inference_destroy,
112 	.test_driver = test_inference_ordered_driver,
113 	.test_result = test_inference_ordered_result,
114 };
115 
116 ML_TEST_REGISTER(inference_ordered);
117