188be513bSSrikanth Yalavarthi /* SPDX-License-Identifier: BSD-3-Clause
288be513bSSrikanth Yalavarthi * Copyright (c) 2022 Marvell.
388be513bSSrikanth Yalavarthi */
488be513bSSrikanth Yalavarthi
588be513bSSrikanth Yalavarthi #include <rte_common.h>
688be513bSSrikanth Yalavarthi #include <rte_launch.h>
788be513bSSrikanth Yalavarthi
888be513bSSrikanth Yalavarthi #include "ml_common.h"
988be513bSSrikanth Yalavarthi #include "test_inference_common.h"
10*77fefa0aSSrikanth Yalavarthi #include "test_stats.h"
1188be513bSSrikanth Yalavarthi
1288be513bSSrikanth Yalavarthi static int
test_inference_interleave_driver(struct ml_test * test,struct ml_options * opt)1388be513bSSrikanth Yalavarthi test_inference_interleave_driver(struct ml_test *test, struct ml_options *opt)
1488be513bSSrikanth Yalavarthi {
1588be513bSSrikanth Yalavarthi struct test_inference *t;
1688be513bSSrikanth Yalavarthi uint16_t fid = 0;
1788be513bSSrikanth Yalavarthi int ret = 0;
1888be513bSSrikanth Yalavarthi
1988be513bSSrikanth Yalavarthi t = ml_test_priv(test);
2088be513bSSrikanth Yalavarthi
2188be513bSSrikanth Yalavarthi ret = ml_inference_mldev_setup(test, opt);
2288be513bSSrikanth Yalavarthi if (ret != 0)
2388be513bSSrikanth Yalavarthi return ret;
2488be513bSSrikanth Yalavarthi
2588be513bSSrikanth Yalavarthi ret = ml_inference_mem_setup(test, opt);
2688be513bSSrikanth Yalavarthi if (ret != 0)
2788be513bSSrikanth Yalavarthi return ret;
2888be513bSSrikanth Yalavarthi
2988be513bSSrikanth Yalavarthi /* load and start all models */
3088be513bSSrikanth Yalavarthi for (fid = 0; fid < opt->nb_filelist; fid++) {
3188be513bSSrikanth Yalavarthi ret = ml_model_load(test, opt, &t->model[fid], fid);
3288be513bSSrikanth Yalavarthi if (ret != 0)
3388be513bSSrikanth Yalavarthi goto error;
3488be513bSSrikanth Yalavarthi
3588be513bSSrikanth Yalavarthi ret = ml_model_start(test, opt, &t->model[fid], fid);
3688be513bSSrikanth Yalavarthi if (ret != 0)
3788be513bSSrikanth Yalavarthi goto error;
3888be513bSSrikanth Yalavarthi
3988be513bSSrikanth Yalavarthi ret = ml_inference_iomem_setup(test, opt, fid);
4088be513bSSrikanth Yalavarthi if (ret != 0)
4188be513bSSrikanth Yalavarthi goto error;
4288be513bSSrikanth Yalavarthi }
4388be513bSSrikanth Yalavarthi
4488be513bSSrikanth Yalavarthi /* launch inference requests */
4588be513bSSrikanth Yalavarthi ret = ml_inference_launch_cores(test, opt, 0, opt->nb_filelist - 1);
4688be513bSSrikanth Yalavarthi if (ret != 0) {
4788be513bSSrikanth Yalavarthi ml_err("failed to launch cores");
4888be513bSSrikanth Yalavarthi goto error;
4988be513bSSrikanth Yalavarthi }
5088be513bSSrikanth Yalavarthi
5188be513bSSrikanth Yalavarthi rte_eal_mp_wait_lcore();
5288be513bSSrikanth Yalavarthi
5388be513bSSrikanth Yalavarthi /* stop and unload all models */
5488be513bSSrikanth Yalavarthi for (fid = 0; fid < opt->nb_filelist; fid++) {
5588be513bSSrikanth Yalavarthi ret = ml_inference_result(test, opt, fid);
5688be513bSSrikanth Yalavarthi if (ret != ML_TEST_SUCCESS)
5788be513bSSrikanth Yalavarthi goto error;
5888be513bSSrikanth Yalavarthi
5988be513bSSrikanth Yalavarthi ml_inference_iomem_destroy(test, opt, fid);
605a82bc33SSrikanth Yalavarthi }
6188be513bSSrikanth Yalavarthi
62*77fefa0aSSrikanth Yalavarthi for (fid = 0; fid < opt->nb_filelist; fid++)
63*77fefa0aSSrikanth Yalavarthi ml_stats_get(test, opt, RTE_ML_DEV_XSTATS_MODEL, fid);
645a82bc33SSrikanth Yalavarthi
655a82bc33SSrikanth Yalavarthi for (fid = 0; fid < opt->nb_filelist; fid++) {
6688be513bSSrikanth Yalavarthi ret = ml_model_stop(test, opt, &t->model[fid], fid);
6788be513bSSrikanth Yalavarthi if (ret != 0)
6888be513bSSrikanth Yalavarthi goto error;
6988be513bSSrikanth Yalavarthi
7088be513bSSrikanth Yalavarthi ret = ml_model_unload(test, opt, &t->model[fid], fid);
7188be513bSSrikanth Yalavarthi if (ret != 0)
7288be513bSSrikanth Yalavarthi goto error;
7388be513bSSrikanth Yalavarthi }
7488be513bSSrikanth Yalavarthi
75*77fefa0aSSrikanth Yalavarthi ml_stats_get(test, opt, RTE_ML_DEV_XSTATS_DEVICE, -1);
76*77fefa0aSSrikanth Yalavarthi ml_throughput_get(test, opt);
7788be513bSSrikanth Yalavarthi ml_inference_mem_destroy(test, opt);
7888be513bSSrikanth Yalavarthi
7988be513bSSrikanth Yalavarthi ret = ml_inference_mldev_destroy(test, opt);
8088be513bSSrikanth Yalavarthi if (ret != 0)
8188be513bSSrikanth Yalavarthi return ret;
8288be513bSSrikanth Yalavarthi
8388be513bSSrikanth Yalavarthi t->cmn.result = ML_TEST_SUCCESS;
8488be513bSSrikanth Yalavarthi
8588be513bSSrikanth Yalavarthi return 0;
8688be513bSSrikanth Yalavarthi
8788be513bSSrikanth Yalavarthi error:
8888be513bSSrikanth Yalavarthi ml_inference_mem_destroy(test, opt);
8988be513bSSrikanth Yalavarthi for (fid = 0; fid < opt->nb_filelist; fid++) {
9088be513bSSrikanth Yalavarthi ml_inference_iomem_destroy(test, opt, fid);
9188be513bSSrikanth Yalavarthi ml_model_stop(test, opt, &t->model[fid], fid);
9288be513bSSrikanth Yalavarthi ml_model_unload(test, opt, &t->model[fid], fid);
9388be513bSSrikanth Yalavarthi }
9488be513bSSrikanth Yalavarthi
9588be513bSSrikanth Yalavarthi t->cmn.result = ML_TEST_FAILED;
9688be513bSSrikanth Yalavarthi
9788be513bSSrikanth Yalavarthi return ret;
9888be513bSSrikanth Yalavarthi }
9988be513bSSrikanth Yalavarthi
10088be513bSSrikanth Yalavarthi static int
test_inference_interleave_result(struct ml_test * test,struct ml_options * opt)10188be513bSSrikanth Yalavarthi test_inference_interleave_result(struct ml_test *test, struct ml_options *opt)
10288be513bSSrikanth Yalavarthi {
10388be513bSSrikanth Yalavarthi struct test_inference *t;
10488be513bSSrikanth Yalavarthi
10588be513bSSrikanth Yalavarthi RTE_SET_USED(opt);
10688be513bSSrikanth Yalavarthi
10788be513bSSrikanth Yalavarthi t = ml_test_priv(test);
10888be513bSSrikanth Yalavarthi
10988be513bSSrikanth Yalavarthi return t->cmn.result;
11088be513bSSrikanth Yalavarthi }
11188be513bSSrikanth Yalavarthi
11288be513bSSrikanth Yalavarthi static const struct ml_test_ops inference_interleave = {
11388be513bSSrikanth Yalavarthi .cap_check = test_inference_cap_check,
11488be513bSSrikanth Yalavarthi .opt_check = test_inference_opt_check,
11588be513bSSrikanth Yalavarthi .opt_dump = test_inference_opt_dump,
11688be513bSSrikanth Yalavarthi .test_setup = test_inference_setup,
11788be513bSSrikanth Yalavarthi .test_destroy = test_inference_destroy,
11888be513bSSrikanth Yalavarthi .test_driver = test_inference_interleave_driver,
11988be513bSSrikanth Yalavarthi .test_result = test_inference_interleave_result,
12088be513bSSrikanth Yalavarthi };
12188be513bSSrikanth Yalavarthi
12288be513bSSrikanth Yalavarthi ML_TEST_REGISTER(inference_interleave);
123