xref: /dpdk/app/test-mldev/test_inference_interleave.c (revision 77fefa0a129e661caf0f3628f48204ed3886ab5f)
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