Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : * Copyright (c) 2023 Marvell.
3 : : */
4 : :
5 : : #include <rte_mldev.h>
6 : :
7 : : #include <mldev_utils.h>
8 : :
9 : : #include <roc_api.h>
10 : :
11 : : #include "cnxk_ml_io.h"
12 : :
13 : : inline int
14 : 0 : cnxk_ml_io_quantize_single(struct cnxk_ml_io *input, uint8_t *dbuffer, uint8_t *qbuffer)
15 : : {
16 : : enum rte_ml_io_type qtype;
17 : : enum rte_ml_io_type dtype;
18 : : uint32_t nb_elements;
19 : : float qscale;
20 : : int ret = 0;
21 : :
22 : 0 : dtype = input->dtype;
23 : 0 : qtype = input->qtype;
24 : 0 : qscale = input->scale;
25 : 0 : nb_elements = input->nb_elements;
26 : :
27 [ # # ]: 0 : if (dtype == qtype) {
28 [ # # ]: 0 : rte_memcpy(qbuffer, dbuffer, input->sz_d);
29 : : } else {
30 [ # # # # : 0 : switch (qtype) {
# # # # #
# ]
31 : 0 : case RTE_ML_IO_TYPE_INT8:
32 : 0 : ret = rte_ml_io_float32_to_int8(qscale, nb_elements, dbuffer, qbuffer);
33 : 0 : break;
34 : 0 : case RTE_ML_IO_TYPE_UINT8:
35 : 0 : ret = rte_ml_io_float32_to_uint8(qscale, nb_elements, dbuffer, qbuffer);
36 : 0 : break;
37 : 0 : case RTE_ML_IO_TYPE_INT16:
38 : 0 : ret = rte_ml_io_float32_to_int16(qscale, nb_elements, dbuffer, qbuffer);
39 : 0 : break;
40 : 0 : case RTE_ML_IO_TYPE_UINT16:
41 : 0 : ret = rte_ml_io_float32_to_uint16(qscale, nb_elements, dbuffer, qbuffer);
42 : 0 : break;
43 : 0 : case RTE_ML_IO_TYPE_INT32:
44 : 0 : ret = rte_ml_io_float32_to_int32(qscale, nb_elements, dbuffer, qbuffer);
45 : 0 : break;
46 : 0 : case RTE_ML_IO_TYPE_UINT32:
47 : 0 : ret = rte_ml_io_float32_to_uint32(qscale, nb_elements, dbuffer, qbuffer);
48 : 0 : break;
49 : 0 : case RTE_ML_IO_TYPE_INT64:
50 : 0 : ret = rte_ml_io_float32_to_int64(qscale, nb_elements, dbuffer, qbuffer);
51 : 0 : break;
52 : 0 : case RTE_ML_IO_TYPE_UINT64:
53 : 0 : ret = rte_ml_io_float32_to_uint64(qscale, nb_elements, dbuffer, qbuffer);
54 : 0 : break;
55 : 0 : case RTE_ML_IO_TYPE_FP16:
56 : 0 : ret = rte_ml_io_float32_to_float16(nb_elements, dbuffer, qbuffer);
57 : 0 : break;
58 : 0 : default:
59 : 0 : plt_err("Unsupported qtype : %u", qtype);
60 : : ret = -ENOTSUP;
61 : : }
62 : : }
63 : :
64 : 0 : return ret;
65 : : }
66 : :
67 : : inline int
68 : 0 : cnxk_ml_io_dequantize_single(struct cnxk_ml_io *output, uint8_t *qbuffer, uint8_t *dbuffer)
69 : : {
70 : : enum rte_ml_io_type qtype;
71 : : enum rte_ml_io_type dtype;
72 : : uint32_t nb_elements;
73 : : float dscale;
74 : : int ret = 0;
75 : :
76 : 0 : dtype = output->dtype;
77 : 0 : qtype = output->qtype;
78 : 0 : dscale = output->scale;
79 : 0 : nb_elements = output->nb_elements;
80 : :
81 [ # # ]: 0 : if (dtype == qtype) {
82 [ # # ]: 0 : rte_memcpy(dbuffer, qbuffer, output->sz_q);
83 : : } else {
84 [ # # # # : 0 : switch (qtype) {
# # # # #
# ]
85 : 0 : case RTE_ML_IO_TYPE_INT8:
86 : 0 : ret = rte_ml_io_int8_to_float32(dscale, nb_elements, qbuffer, dbuffer);
87 : 0 : break;
88 : 0 : case RTE_ML_IO_TYPE_UINT8:
89 : 0 : ret = rte_ml_io_uint8_to_float32(dscale, nb_elements, qbuffer, dbuffer);
90 : 0 : break;
91 : 0 : case RTE_ML_IO_TYPE_INT16:
92 : 0 : ret = rte_ml_io_int16_to_float32(dscale, nb_elements, qbuffer, dbuffer);
93 : 0 : break;
94 : 0 : case RTE_ML_IO_TYPE_UINT16:
95 : 0 : ret = rte_ml_io_uint16_to_float32(dscale, nb_elements, qbuffer, dbuffer);
96 : 0 : break;
97 : 0 : case RTE_ML_IO_TYPE_INT32:
98 : 0 : ret = rte_ml_io_int32_to_float32(dscale, nb_elements, qbuffer, dbuffer);
99 : 0 : break;
100 : 0 : case RTE_ML_IO_TYPE_UINT32:
101 : 0 : ret = rte_ml_io_uint32_to_float32(dscale, nb_elements, qbuffer, dbuffer);
102 : 0 : break;
103 : 0 : case RTE_ML_IO_TYPE_INT64:
104 : 0 : ret = rte_ml_io_int64_to_float32(dscale, nb_elements, qbuffer, dbuffer);
105 : 0 : break;
106 : 0 : case RTE_ML_IO_TYPE_UINT64:
107 : 0 : ret = rte_ml_io_uint64_to_float32(dscale, nb_elements, qbuffer, dbuffer);
108 : 0 : break;
109 : 0 : case RTE_ML_IO_TYPE_FP16:
110 : 0 : ret = rte_ml_io_float16_to_float32(nb_elements, qbuffer, dbuffer);
111 : 0 : break;
112 : 0 : default:
113 : 0 : plt_err("Unsupported qtype: %u", qtype);
114 : : ret = -ENOTSUP;
115 : : }
116 : : }
117 : :
118 : 0 : return ret;
119 : : }
|