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