43 #include "../common/c71/DSPLIB_inlines.h"
53 #define SE_PARAM_BASE (0x0000)
54 #define SE_SE0_PARAM_OFFSET (SE_PARAM_BASE)
55 #define SE_SE1_PARAM_OFFSET (SE_SE0_PARAM_OFFSET + SE_PARAM_SIZE)
56 #define SE_SA0_PARAM_OFFSET (SE_SE1_PARAM_OFFSET + SE_PARAM_SIZE)
58 template <
typename dataType>
65 __SE_TEMPLATE_v1 se0Params;
66 __SE_TEMPLATE_v1 se1Params;
67 __SA_TEMPLATE_v1 sa0Params;
69 __SE_ELETYPE SE_ELETYPE;
70 __SE_VECLEN SE_VECLEN;
71 __SA_VECLEN SA_VECLEN;
75 uint8_t *pBlock = pKerPrivArgs->
bufPblock;
76 uint32_t blockSize = pKerPrivArgs->
blockSize;
78 typedef typename c7x::make_full_vector<dataType>::type vec;
79 int32_t eleCount = c7x::element_count_of<vec>::value;
80 SE_VECLEN = c7x::se_veclen<vec>::value;
81 SA_VECLEN = c7x::sa_veclen<vec>::value;
82 SE_ELETYPE = c7x::se_eletype<vec>::value;
85 uint32_t icnt2Size = blockSize / eleCount;
86 uint32_t remBlocksSize = blockSize % eleCount;
92 printf(
"Enter eleCount %d\n", eleCount);
106 se0Params = __gen_SE_TEMPLATE_v1();
108 se0Params.ICNT0 = blockSize;
109 se0Params.ELETYPE = SE_ELETYPE;
110 se0Params.VECLEN = SE_VECLEN;
111 se0Params.DIMFMT = __SE_DIMFMT_1D;
114 se1Params = __gen_SE_TEMPLATE_v1();
116 se1Params.ICNT0 = blockSize;
117 se1Params.ELETYPE = SE_ELETYPE;
118 se1Params.VECLEN = SE_VECLEN;
119 se1Params.DIMFMT = __SE_DIMFMT_1D;
128 se0Params = __gen_SE_TEMPLATE_v1();
130 se0Params.ICNT0 = blockSize;
131 se0Params.ELETYPE = SE_ELETYPE;
132 se0Params.VECLEN = SE_VECLEN;
133 se0Params.DIMFMT = __SE_DIMFMT_1D;
138 se1Params = __gen_SE_TEMPLATE_v1();
140 se1Params.DIMFMT = __SE_DIMFMT_3D;
141 se1Params.ICNT0 = eleCount;
142 se1Params.ELETYPE = SE_ELETYPE;
143 se1Params.VECLEN = SE_VECLEN;
145 se1Params.ICNT2 = icnt2Size;
147 se1Params.DIM2 = eleCount;
148 se1Params.DECDIM1 = __SE_DECDIM_DIM2;
149 se1Params.DECDIM1_WIDTH = blockSize;
155 sa0Params = __gen_SA_TEMPLATE_v1();
157 sa0Params.ICNT0 = blockSize;
158 sa0Params.DIM1 = blockSize;
159 sa0Params.VECLEN = SA_VECLEN;
160 sa0Params.DIMFMT = __SA_DIMFMT_1D;
210 template <
typename dataType>
219 int32_t blockSize = pKerPrivArgs->
blockSize;
221 __SE_TEMPLATE_v1 se0Params;
222 __SE_TEMPLATE_v1 se1Params;
223 __SA_TEMPLATE_v1 sa0Params;
226 dataType *restrict pInLocal1 = (dataType *) pIn1;
227 dataType *restrict pInLocal2 = (dataType *) pIn2;
228 dataType *restrict pMLocal = (dataType *) pM;
229 dataType *restrict pOutLocal = (dataType *) pOut;
231 #if DSPLIB_DEBUGPRINT
232 printf(
"Enter DSPLIB_w_vec_exec_ci\n");
235 typedef typename c7x::make_full_vector<dataType>::type vec;
236 int32_t eleCount = c7x::element_count_of<vec>::value;
238 #if DSPLIB_DEBUGPRINT
239 printf(
"Enter eleCount %d\n", eleCount);
241 uint8_t *pBlock = pKerPrivArgs->
bufPblock;
249 se1Params.DIM1 = ((dataType *) pM) - ((dataType *) pIn1);
251 __SA0_OPEN(sa0Params);
255 __SE0_OPEN(pInLocal1, se0Params);
256 __SE1_OPEN(pInLocal2, se0Params);
259 __SA0_OPEN(sa0Params);
261 #if DSPLIB_DEBUGPRINT
262 printf(
"DSPLIB_DEBUGPRINT blockSize %d\n", blockSize);
271 vec m = __vload_dup(pMLocal);
273 for (int32_t counter = 0; counter < blockSize; counter += eleCount) {
274 vec a = c7x::strm_eng<0, vec>::get_adv();
275 vec b = c7x::strm_eng<1, vec>::get_adv();
279 __vpred tmp = c7x::strm_agen<0, vec>::get_vpred();
280 vec *VB1 = c7x::strm_agen<0, vec>::get_adv(pOutLocal);
284 __vstore_pred(tmp, VB1, out);
297 __SE0_OPEN(pInLocal2, se0Params);
298 __SE1_OPEN(pInLocal1, se1Params);
301 __SA0_OPEN(sa0Params);
303 #if DSPLIB_DEBUGPRINT
304 printf(
"DSPLIB_DEBUGPRINT blockSize %d\n", blockSize);
308 for (int32_t counter = 0; counter < blockSize; counter += eleCount) {
309 vec a = c7x::strm_eng<1, vec>::get_adv();
310 vec w = c7x::strm_eng<1, vec>::get_adv();
311 vec b = c7x::strm_eng<0, vec>::get_adv();
315 __vpred tmp = c7x::strm_agen<0, vec>::get_vpred();
316 vec *VB1 = c7x::strm_agen<0, vec>::get_adv(pOutLocal);
318 __vstore_pred(tmp, VB1, out);
333 void *restrict pOut);
339 void *restrict pOut);
345 void *restrict pOut);
351 void *restrict pOut);
357 void *restrict pOut);
363 void *restrict pOut);
369 void *restrict pOut);
375 void *restrict pOut);
DSPLIB_STATUS DSPLIB_w_vec_exec_ci(DSPLIB_kernelHandle handle, void *restrict pIn1, void *restrict pIn2, void *restrict pM, void *restrict pOut)
This function is the main execution function for the C7x implementation of the kernel....
template DSPLIB_STATUS DSPLIB_w_vec_exec_ci< int8_t >(DSPLIB_kernelHandle handle, void *restrict pIn1, void *restrict pIn2, void *restrict pM, void *restrict pOut)
template DSPLIB_STATUS DSPLIB_w_vec_init_ci< uint32_t >(DSPLIB_kernelHandle handle, const DSPLIB_bufParams1D_t *bufParamsIn, const DSPLIB_bufParams1D_t *bufParamsOut, const DSPLIB_w_vec_InitArgs *pKerInitArgs)
template DSPLIB_STATUS DSPLIB_w_vec_exec_ci< uint8_t >(DSPLIB_kernelHandle handle, void *restrict pIn1, void *restrict pIn2, void *restrict pM, void *restrict pOut)
template DSPLIB_STATUS DSPLIB_w_vec_exec_ci< uint32_t >(DSPLIB_kernelHandle handle, void *restrict pIn1, void *restrict pIn2, void *restrict pM, void *restrict pOut)
template DSPLIB_STATUS DSPLIB_w_vec_init_ci< uint16_t >(DSPLIB_kernelHandle handle, const DSPLIB_bufParams1D_t *bufParamsIn, const DSPLIB_bufParams1D_t *bufParamsOut, const DSPLIB_w_vec_InitArgs *pKerInitArgs)
template DSPLIB_STATUS DSPLIB_w_vec_exec_ci< float >(DSPLIB_kernelHandle handle, void *restrict pIn1, void *restrict pIn2, void *restrict pM, void *restrict pOut)
#define SE_SE0_PARAM_OFFSET
template DSPLIB_STATUS DSPLIB_w_vec_init_ci< int32_t >(DSPLIB_kernelHandle handle, const DSPLIB_bufParams1D_t *bufParamsIn, const DSPLIB_bufParams1D_t *bufParamsOut, const DSPLIB_w_vec_InitArgs *pKerInitArgs)
template DSPLIB_STATUS DSPLIB_w_vec_init_ci< double >(DSPLIB_kernelHandle handle, const DSPLIB_bufParams1D_t *bufParamsIn, const DSPLIB_bufParams1D_t *bufParamsOut, const DSPLIB_w_vec_InitArgs *pKerInitArgs)
template DSPLIB_STATUS DSPLIB_w_vec_init_ci< int16_t >(DSPLIB_kernelHandle handle, const DSPLIB_bufParams1D_t *bufParamsIn, const DSPLIB_bufParams1D_t *bufParamsOut, const DSPLIB_w_vec_InitArgs *pKerInitArgs)
template DSPLIB_STATUS DSPLIB_w_vec_init_ci< float >(DSPLIB_kernelHandle handle, const DSPLIB_bufParams1D_t *bufParamsIn, const DSPLIB_bufParams1D_t *bufParamsOut, const DSPLIB_w_vec_InitArgs *pKerInitArgs)
#define SE_SE1_PARAM_OFFSET
template DSPLIB_STATUS DSPLIB_w_vec_init_ci< uint8_t >(DSPLIB_kernelHandle handle, const DSPLIB_bufParams1D_t *bufParamsIn, const DSPLIB_bufParams1D_t *bufParamsOut, const DSPLIB_w_vec_InitArgs *pKerInitArgs)
template DSPLIB_STATUS DSPLIB_w_vec_init_ci< int8_t >(DSPLIB_kernelHandle handle, const DSPLIB_bufParams1D_t *bufParamsIn, const DSPLIB_bufParams1D_t *bufParamsOut, const DSPLIB_w_vec_InitArgs *pKerInitArgs)
template DSPLIB_STATUS DSPLIB_w_vec_exec_ci< double >(DSPLIB_kernelHandle handle, void *restrict pIn1, void *restrict pIn2, void *restrict pM, void *restrict pOut)
template DSPLIB_STATUS DSPLIB_w_vec_exec_ci< int16_t >(DSPLIB_kernelHandle handle, void *restrict pIn1, void *restrict pIn2, void *restrict pM, void *restrict pOut)
DSPLIB_STATUS DSPLIB_w_vec_init_ci(DSPLIB_kernelHandle handle, const DSPLIB_bufParams1D_t *bufParamsIn, const DSPLIB_bufParams1D_t *bufParamsOut, const DSPLIB_w_vec_InitArgs *pKerInitArgs)
This function is the initialization function for the C7x implementation of the kernel....
template DSPLIB_STATUS DSPLIB_w_vec_exec_ci< int32_t >(DSPLIB_kernelHandle handle, void *restrict pIn1, void *restrict pIn2, void *restrict pM, void *restrict pOut)
template DSPLIB_STATUS DSPLIB_w_vec_exec_ci< uint16_t >(DSPLIB_kernelHandle handle, void *restrict pIn1, void *restrict pIn2, void *restrict pM, void *restrict pOut)
#define SE_SA0_PARAM_OFFSET
Header file for kernel's internal use. For the kernel's interface, please see DSPLIB_w_vec.
DSPLIB_STATUS_NAME
The enumeration of all status codes.
void * DSPLIB_kernelHandle
Handle type for DSPLIB operations.
DSPLIB_w_vec_weightStyle
Enumeration for w_vec flag pertaining to scalar or vector input weight.
@ DSPLIB_SCALAR
Input Weight is a Scalar.
A structure for a 1 dimensional buffer descriptor.
Structure containing the parameters to initialize the kernel.
DSPLIB_w_vec_weightStyle weightStyle
Weight Input Style
Structure that is reserved for internal use by the kernel.
uint8_t bufPblock[DSPLIB_W_VEC_IXX_IXX_OXX_PBLOCK_SIZE]
DSPLIB_w_vec_InitArgs initArgs
int32_t blockSize
Size of input buffer for different batches DSPLIB_w_vec_init that will be retrieved and used by DSPLI...