├── .clang-format ├── .github └── workflows │ ├── ci.yml │ └── publish-docs.yml ├── .gitignore ├── HACKATHON.md ├── LICENSE ├── Makefile ├── README.md ├── dis.sh ├── docs ├── Doxyfile ├── Pulp_logo_inline.png ├── doxybook2.json ├── index.md ├── requirements.txt ├── test-framework-index.md ├── troubles.md └── tutorial-index.md ├── genBitsReversal.py ├── gen_twiddles.py ├── include ├── plp_common_tables.h ├── plp_const_structs.h ├── plp_math.h └── rtos_hal.h ├── mkdocs.yml ├── src ├── BasicMathFunctions │ ├── abs │ │ ├── kernels │ │ │ ├── plp_abs_i16s_rv32im.c │ │ │ ├── plp_abs_i16s_xpulpv2.c │ │ │ ├── plp_abs_i32s_rv32im.c │ │ │ ├── plp_abs_i32s_xpulpv2.c │ │ │ ├── plp_abs_i8s_rv32im.c │ │ │ └── plp_abs_i8s_xpulpv2.c │ │ ├── plp_abs_i16.c │ │ ├── plp_abs_i32.c │ │ └── plp_abs_i8.c │ ├── add │ │ ├── kernels │ │ │ ├── plp_add_i16s_rv32im.c │ │ │ ├── plp_add_i16s_xpulpv2.c │ │ │ ├── plp_add_i32s_rv32im.c │ │ │ ├── plp_add_i32s_xpulpv2.c │ │ │ ├── plp_add_i8s_rv32im.c │ │ │ └── plp_add_i8s_xpulpv2.c │ │ ├── plp_add_i16.c │ │ ├── plp_add_i32.c │ │ └── plp_add_i8.c │ ├── dot_prod │ │ ├── kernels │ │ │ ├── plp_dot_prod_f32p_xpulpv2.c │ │ │ ├── plp_dot_prod_f32s_rv32im.c │ │ │ ├── plp_dot_prod_f32s_xpulpv2.c │ │ │ ├── plp_dot_prod_i16s_rv32im.c │ │ │ ├── plp_dot_prod_i16s_xpulpv2.c │ │ │ ├── plp_dot_prod_i32p_xpulpv2.c │ │ │ ├── plp_dot_prod_i32s_rv32im.c │ │ │ ├── plp_dot_prod_i32s_xpulpv2.c │ │ │ ├── plp_dot_prod_i8s_rv32im.c │ │ │ ├── plp_dot_prod_i8s_xpulpv2.c │ │ │ ├── plp_dot_prod_q16s_rv32im.c │ │ │ ├── plp_dot_prod_q16s_xpulpv2.c │ │ │ ├── plp_dot_prod_q32p_xpulpv2.c │ │ │ ├── plp_dot_prod_q32s_rv32im.c │ │ │ ├── plp_dot_prod_q32s_xpulpv2.c │ │ │ ├── plp_dot_prod_q8s_rv32im.c │ │ │ └── plp_dot_prod_q8s_xpulpv2.c │ │ ├── plp_dot_prod_f32.c │ │ ├── plp_dot_prod_f32_parallel.c │ │ ├── plp_dot_prod_i16.c │ │ ├── plp_dot_prod_i32.c │ │ ├── plp_dot_prod_i32_parallel.c │ │ ├── plp_dot_prod_i8.c │ │ ├── plp_dot_prod_q16.c │ │ ├── plp_dot_prod_q32.c │ │ ├── plp_dot_prod_q32_parallel.c │ │ └── plp_dot_prod_q8.c │ ├── log │ │ ├── kernels │ │ │ └── plp_log_f32p_xpulpv2.c │ │ └── plp_log_f32_parallel.c │ ├── mult │ │ ├── kernels │ │ │ ├── plp_mult_f32p_xpulpv2.c │ │ │ ├── plp_mult_f32s_xpulpv2.c │ │ │ ├── plp_mult_i16s_rv32im.c │ │ │ ├── plp_mult_i16s_xpulpv2.c │ │ │ ├── plp_mult_i32s_rv32im.c │ │ │ ├── plp_mult_i32s_xpulpv2.c │ │ │ ├── plp_mult_i8s_rv32im.c │ │ │ └── plp_mult_i8s_xpulpv2.c │ │ ├── plp_mult_f32.c │ │ ├── plp_mult_f32_parallel.c │ │ ├── plp_mult_i16.c │ │ ├── plp_mult_i32.c │ │ └── plp_mult_i8.c │ ├── negate │ │ ├── kernels │ │ │ ├── plp_negate_f32s_xpulpv2.c │ │ │ ├── plp_negate_i16s_rv32im.c │ │ │ ├── plp_negate_i16s_xpulpv2.c │ │ │ ├── plp_negate_i32s_rv32im.c │ │ │ ├── plp_negate_i32s_xpulpv2.c │ │ │ ├── plp_negate_i8s_rv32im.c │ │ │ └── plp_negate_i8s_xpulpv2.c │ │ ├── plp_negate_f32.c │ │ ├── plp_negate_i16.c │ │ ├── plp_negate_i32.c │ │ └── plp_negate_i8.c │ ├── offset │ │ ├── kernels │ │ │ ├── plp_offset_f32s_xpulpv2.c │ │ │ ├── plp_offset_i16s_rv32im.c │ │ │ ├── plp_offset_i16s_xpulpv2.c │ │ │ ├── plp_offset_i32s_rv32im.c │ │ │ ├── plp_offset_i32s_xpulpv2.c │ │ │ ├── plp_offset_i8s_rv32im.c │ │ │ └── plp_offset_i8s_xpulpv2.c │ │ ├── plp_offset_f32.c │ │ ├── plp_offset_i16.c │ │ ├── plp_offset_i32.c │ │ └── plp_offset_i8.c │ ├── rmparallel.sh │ ├── scale │ │ ├── kernels │ │ │ ├── plp_scale_f32s_xpulpv2.c │ │ │ ├── plp_scale_i16s_rv32im.c │ │ │ ├── plp_scale_i16s_xpulpv2.c │ │ │ ├── plp_scale_i32s_rv32im.c │ │ │ ├── plp_scale_i32s_xpulpv2.c │ │ │ ├── plp_scale_i8s_rv32im.c │ │ │ └── plp_scale_i8s_xpulpv2.c │ │ ├── plp_scale_f32.c │ │ ├── plp_scale_i16.c │ │ ├── plp_scale_i32.c │ │ └── plp_scale_i8.c │ └── sub │ │ ├── kernels │ │ ├── plp_sub_f32s_xpulpv2.c │ │ ├── plp_sub_i16s_rv32im.c │ │ ├── plp_sub_i16s_xpulpv2.c │ │ ├── plp_sub_i32s_rv32im.c │ │ ├── plp_sub_i32s_xpulpv2.c │ │ ├── plp_sub_i8s_rv32im.c │ │ └── plp_sub_i8s_xpulpv2.c │ │ ├── plp_sub_f32.c │ │ ├── plp_sub_i16.c │ │ ├── plp_sub_i32.c │ │ └── plp_sub_i8.c ├── CommonTables │ ├── plp_common_tables.c │ ├── plp_const_structs.c │ └── plp_dwt_structs.c ├── ComplexMathFunctions │ ├── kernels │ │ ├── plp_cmplx_conj_f32_xpulpv2.c │ │ ├── plp_cmplx_conj_i16_rv32im.c │ │ ├── plp_cmplx_conj_i16_xpulpv2.c │ │ ├── plp_cmplx_conj_i32_rv32im.c │ │ ├── plp_cmplx_conj_i32_xpulpv2.c │ │ ├── plp_cmplx_conj_i8_rv32im.c │ │ ├── plp_cmplx_conj_i8_xpulpv2.c │ │ ├── plp_cmplx_dot_prod_f32_xpulpv2.c │ │ ├── plp_cmplx_dot_prod_i16_rv32im.c │ │ ├── plp_cmplx_dot_prod_i16_xpulpv2.c │ │ ├── plp_cmplx_dot_prod_i32_rv32im.c │ │ ├── plp_cmplx_dot_prod_i32_xpulpv2.c │ │ ├── plp_cmplx_dot_prod_i8_rv32im.c │ │ ├── plp_cmplx_dot_prod_i8_xpulpv2.c │ │ ├── plp_cmplx_dot_prod_q16_rv32im.c │ │ ├── plp_cmplx_dot_prod_q16_xpulpv2.c │ │ ├── plp_cmplx_dot_prod_q32_rv32im.c │ │ ├── plp_cmplx_dot_prod_q32_xpulpv2.c │ │ ├── plp_cmplx_mag_f32s_xpulpv2.c │ │ ├── plp_cmplx_mag_i16s_rv32im.c │ │ ├── plp_cmplx_mag_i16s_xpulpv2.c │ │ ├── plp_cmplx_mag_i32s_rv32im.c │ │ ├── plp_cmplx_mag_i32s_xpulpv2.c │ │ ├── plp_cmplx_mag_i8s_rv32im.c │ │ ├── plp_cmplx_mag_i8s_xpulpv2.c │ │ ├── plp_cmplx_mag_q16s_rv32im.c │ │ ├── plp_cmplx_mag_q16s_xpulpv2.c │ │ ├── plp_cmplx_mag_q32s_rv32im.c │ │ ├── plp_cmplx_mag_q32s_xpulpv2.c │ │ ├── plp_cmplx_mag_q8s_rv32im.c │ │ ├── plp_cmplx_mag_q8s_xpulpv2.c │ │ ├── plp_cmplx_mag_squared_f32_xpulpv2.c │ │ ├── plp_cmplx_mag_squared_i16_rv32im.c │ │ ├── plp_cmplx_mag_squared_i16_xpulpv2.c │ │ ├── plp_cmplx_mag_squared_i32_rv32im.c │ │ ├── plp_cmplx_mag_squared_i32_xpulpv2.c │ │ ├── plp_cmplx_mag_squared_i8_rv32im.c │ │ ├── plp_cmplx_mag_squared_i8_xpulpv2.c │ │ ├── plp_cmplx_mag_squared_q16_rv32im.c │ │ ├── plp_cmplx_mag_squared_q16_xpulpv2.c │ │ ├── plp_cmplx_mag_squared_q32_rv32im.c │ │ ├── plp_cmplx_mag_squared_q32_xpulpv2.c │ │ ├── plp_cmplx_mag_squared_q8_rv32im.c │ │ ├── plp_cmplx_mag_squared_q8_xpulpv2.c │ │ ├── plp_cmplx_mult_cmplx_f32_xpulpv2.c │ │ ├── plp_cmplx_mult_cmplx_i16_rv32im.c │ │ ├── plp_cmplx_mult_cmplx_i16_xpulpv2.c │ │ ├── plp_cmplx_mult_cmplx_i32_rv32im.c │ │ ├── plp_cmplx_mult_cmplx_i32_xpulpv2.c │ │ ├── plp_cmplx_mult_cmplx_i8_rv32im.c │ │ ├── plp_cmplx_mult_cmplx_i8_xpulpv2.c │ │ ├── plp_cmplx_mult_cmplx_q16_rv32im.c │ │ ├── plp_cmplx_mult_cmplx_q16_xpulpv2.c │ │ ├── plp_cmplx_mult_cmplx_q32_rv32im.c │ │ ├── plp_cmplx_mult_cmplx_q32_xpulpv2.c │ │ ├── plp_cmplx_mult_cmplx_q8_rv32im.c │ │ ├── plp_cmplx_mult_cmplx_q8_xpulpv2.c │ │ ├── plp_cmplx_mult_real_f32_xpulpv2.c │ │ ├── plp_cmplx_mult_real_i16_rv32im.c │ │ ├── plp_cmplx_mult_real_i16_xpulpv2.c │ │ ├── plp_cmplx_mult_real_i32_rv32im.c │ │ ├── plp_cmplx_mult_real_i32_xpulpv2.c │ │ ├── plp_cmplx_mult_real_i8_rv32im.c │ │ ├── plp_cmplx_mult_real_i8_xpulpv2.c │ │ ├── plp_cmplx_mult_real_q16_rv32im.c │ │ ├── plp_cmplx_mult_real_q16_xpulpv2.c │ │ ├── plp_cmplx_mult_real_q32_rv32im.c │ │ ├── plp_cmplx_mult_real_q32_xpulpv2.c │ │ ├── plp_cmplx_mult_real_q8_rv32im.c │ │ └── plp_cmplx_mult_real_q8_xpulpv2.c │ ├── plp_cmplx_conj_f32.c │ ├── plp_cmplx_conj_i16.c │ ├── plp_cmplx_conj_i32.c │ ├── plp_cmplx_conj_i8.c │ ├── plp_cmplx_dot_prod_f32.c │ ├── plp_cmplx_dot_prod_i16.c │ ├── plp_cmplx_dot_prod_i32.c │ ├── plp_cmplx_dot_prod_i8.c │ ├── plp_cmplx_dot_prod_q16.c │ ├── plp_cmplx_dot_prod_q32.c │ ├── plp_cmplx_mag_f32.c │ ├── plp_cmplx_mag_i16.c │ ├── plp_cmplx_mag_i32.c │ ├── plp_cmplx_mag_i8.c │ ├── plp_cmplx_mag_q16.c │ ├── plp_cmplx_mag_q32.c │ ├── plp_cmplx_mag_q8.c │ ├── plp_cmplx_mag_squared_f32.c │ ├── plp_cmplx_mag_squared_i16.c │ ├── plp_cmplx_mag_squared_i32.c │ ├── plp_cmplx_mag_squared_i8.c │ ├── plp_cmplx_mag_squared_q16.c │ ├── plp_cmplx_mag_squared_q32.c │ ├── plp_cmplx_mag_squared_q8.c │ ├── plp_cmplx_mult_cmplx_f32.c │ ├── plp_cmplx_mult_cmplx_i16.c │ ├── plp_cmplx_mult_cmplx_i32.c │ ├── plp_cmplx_mult_cmplx_i8.c │ ├── plp_cmplx_mult_cmplx_q16.c │ ├── plp_cmplx_mult_cmplx_q32.c │ ├── plp_cmplx_mult_cmplx_q8.c │ ├── plp_cmplx_mult_real_f32.c │ ├── plp_cmplx_mult_real_i16.c │ ├── plp_cmplx_mult_real_i32.c │ ├── plp_cmplx_mult_real_i8.c │ ├── plp_cmplx_mult_real_q16.c │ ├── plp_cmplx_mult_real_q32.c │ └── plp_cmplx_mult_real_q8.c ├── DistanceFunctions │ ├── plp_cosine_distance │ │ ├── kernels │ │ │ ├── plp_cosine_distance_f32p_xpulpv2.c │ │ │ ├── plp_cosine_distance_f32s_rv32im.c │ │ │ ├── plp_cosine_distance_f32s_xpulpv2.c │ │ │ ├── plp_cosine_distance_q16s_rv32im.c │ │ │ ├── plp_cosine_distance_q16s_xpulpv2.c │ │ │ ├── plp_cosine_distance_q32s_rv32im.c │ │ │ └── plp_cosine_distance_q32s_xpulpv2.c │ │ ├── plp_cosine_distance_f32.c │ │ ├── plp_cosine_distance_f32_parallel.c │ │ ├── plp_cosine_distance_q16.c │ │ ├── plp_cosine_distance_q32.c │ │ └── plp_cosine_distance_q32_parallel.c │ └── plp_euclidean_distance │ │ ├── kernels │ │ ├── plp_euclidean_distance_f32p_xpulpv2.c │ │ ├── plp_euclidean_distance_f32s_rv32im.c │ │ ├── plp_euclidean_distance_f32s_xpulpv2.c │ │ ├── plp_euclidean_distance_q16s_rv32im.c │ │ ├── plp_euclidean_distance_q16s_xpulpv2.c │ │ ├── plp_euclidean_distance_q32p_xpulpv2.c │ │ ├── plp_euclidean_distance_q32s_rv32im.c │ │ └── plp_euclidean_distance_q32s_xpulpv2.c │ │ ├── plp_euclidean_distance_f32.c │ │ ├── plp_euclidean_distance_f32_parallel.c │ │ ├── plp_euclidean_distance_q16.c │ │ ├── plp_euclidean_distance_q32.c │ │ └── plp_euclidean_distance_q32_parallel.c ├── FastMathFunctions │ ├── kernels │ │ ├── plp_cos_f32s_xpulpv2.c │ │ ├── plp_cos_q16s_rv32im.c │ │ ├── plp_cos_q16s_xpulpv2.c │ │ ├── plp_cos_q32s_rv32im.c │ │ ├── plp_cos_q32s_xpulpv2.c │ │ ├── plp_sin_f32s_xpulpv2.c │ │ ├── plp_sin_q16s_rv32im.c │ │ ├── plp_sin_q16s_xpulpv2.c │ │ ├── plp_sin_q32s_rv32im.c │ │ ├── plp_sin_q32s_xpulpv2.c │ │ ├── plp_sqrt_f32s_rv32im.c │ │ ├── plp_sqrt_f32s_xpulpv2.c │ │ ├── plp_sqrt_q16s_rv32im.c │ │ ├── plp_sqrt_q16s_xpulpv2.c │ │ ├── plp_sqrt_q32s_rv32im.c │ │ └── plp_sqrt_q32s_xpulpv2.c │ ├── plp_cos_f32.c │ ├── plp_cos_q16.c │ ├── plp_cos_q32.c │ ├── plp_sin_f32.c │ ├── plp_sin_q16.c │ ├── plp_sin_q32.c │ ├── plp_sqrt_f32.c │ ├── plp_sqrt_q16.c │ └── plp_sqrt_q32.c ├── FilteringFunctions │ ├── kernels │ │ ├── plp_conv_i16p_xpulpv2.c │ │ ├── plp_conv_i16s_rv32im.c │ │ ├── plp_conv_i16s_xpulpv2.c │ │ ├── plp_conv_i32p_xpulpv2.c │ │ ├── plp_conv_i32s_rv32im.c │ │ ├── plp_conv_i32s_rv32im_2.c │ │ ├── plp_conv_i32s_xpulpv2.c │ │ ├── plp_conv_i8p_xpulpv2.c │ │ ├── plp_conv_i8s_rv32im.c │ │ ├── plp_conv_i8s_xpulpv2.c │ │ ├── plp_conv_parallel_OLA.c │ │ ├── plp_conv_parallel_OLA_kernel.c │ │ ├── plp_conv_valid_i16s_xpulpv2.c │ │ ├── plp_conv_valid_i32s_xpulpv2.c │ │ ├── plp_conv_valid_i8s_xpulpv2.c │ │ ├── plp_conv_valid_rep_i16s_xpulpv2.c │ │ ├── plp_conv_valid_rep_i8s_xpulpv2.c │ │ ├── plp_correlate_i16s_rv32im.c │ │ ├── plp_correlate_i16s_xpulpv2.c │ │ ├── plp_correlate_i32s_rv32im.c │ │ ├── plp_correlate_i32s_xpulpv2.c │ │ ├── plp_correlate_i8s_rv32im.c │ │ ├── plp_correlate_i8s_xpulpv2.c │ │ ├── plp_correlate_q16s_rv32im.c │ │ ├── plp_correlate_q16s_xpulpv2.c │ │ ├── plp_correlate_q32s_rv32im.c │ │ ├── plp_correlate_q32s_xpulpv2.c │ │ ├── plp_correlate_q8s_rv32im.c │ │ ├── plp_correlate_q8s_xpulpv2.c │ │ └── pre.c │ ├── plp_conv_i16.c │ ├── plp_conv_i16_parallel.c │ ├── plp_conv_i32.c │ ├── plp_conv_i32_parallel.c │ ├── plp_conv_i8.c │ ├── plp_conv_i8_parallel.c │ ├── plp_conv_valid_i16.c │ ├── plp_conv_valid_i32.c │ ├── plp_conv_valid_i8.c │ ├── plp_conv_valid_rep_i16.c │ ├── plp_conv_valid_rep_i8.c │ ├── plp_correlate_i16.c │ ├── plp_correlate_i32.c │ ├── plp_correlate_i8.c │ ├── plp_correlate_q16.c │ ├── plp_correlate_q32.c │ └── plp_correlate_q8.c ├── MatrixFunctions │ ├── mat_add │ │ ├── kernels │ │ │ ├── plp_mat_add_f32p_xpulpv2.c │ │ │ ├── plp_mat_add_f32s_xpulpv2.c │ │ │ ├── plp_mat_add_i16p_xpulpv2.c │ │ │ ├── plp_mat_add_i16s_rv32im.c │ │ │ ├── plp_mat_add_i16s_xpulpv2.c │ │ │ ├── plp_mat_add_i32p_xpulpv2.c │ │ │ ├── plp_mat_add_i32s_rv32im.c │ │ │ ├── plp_mat_add_i32s_xpulpv2.c │ │ │ ├── plp_mat_add_i8p_xpulpv2.c │ │ │ ├── plp_mat_add_i8s_rv32im.c │ │ │ └── plp_mat_add_i8s_xpulpv2.c │ │ ├── plp_mat_add_f32.c │ │ ├── plp_mat_add_f32_parallel.c │ │ ├── plp_mat_add_i16.c │ │ ├── plp_mat_add_i16_parallel.c │ │ ├── plp_mat_add_i32.c │ │ ├── plp_mat_add_i32_parallel.c │ │ ├── plp_mat_add_i8.c │ │ └── plp_mat_add_i8_parallel.c │ ├── mat_fill_I │ │ ├── kernels │ │ │ ├── plp_mat_fill_I_f32p_xpulpv2.c │ │ │ ├── plp_mat_fill_I_f32s_xpulpv2.c │ │ │ ├── plp_mat_fill_I_i16p_xpulpv2.c │ │ │ ├── plp_mat_fill_I_i16s_rv32im.c │ │ │ ├── plp_mat_fill_I_i16s_xpulpv2.c │ │ │ ├── plp_mat_fill_I_i32p_xpulpv2.c │ │ │ ├── plp_mat_fill_I_i32s_rv32im.c │ │ │ ├── plp_mat_fill_I_i32s_xpulpv2.c │ │ │ ├── plp_mat_fill_I_i8p_xpulpv2.c │ │ │ ├── plp_mat_fill_I_i8s_rv32im.c │ │ │ ├── plp_mat_fill_I_i8s_xpulpv2.c │ │ │ ├── plp_mat_fill_I_q16p_xpulpv2.c │ │ │ ├── plp_mat_fill_I_q16s_rv32im.c │ │ │ ├── plp_mat_fill_I_q16s_xpulpv2.c │ │ │ ├── plp_mat_fill_I_q32p_xpulpv2.c │ │ │ ├── plp_mat_fill_I_q32s_rv32im.c │ │ │ ├── plp_mat_fill_I_q32s_xpulpv2.c │ │ │ ├── plp_mat_fill_I_q8p_xpulpv2.c │ │ │ ├── plp_mat_fill_I_q8s_rv32im.c │ │ │ └── plp_mat_fill_I_q8s_xpulpv2.c │ │ ├── plp_mat_fill_I_f32.c │ │ ├── plp_mat_fill_I_f32_parallel.c │ │ ├── plp_mat_fill_I_i16.c │ │ ├── plp_mat_fill_I_i16_parallel.c │ │ ├── plp_mat_fill_I_i32.c │ │ ├── plp_mat_fill_I_i32_parallel.c │ │ ├── plp_mat_fill_I_i8.c │ │ ├── plp_mat_fill_I_i8_parallel.c │ │ ├── plp_mat_fill_I_q16.c │ │ ├── plp_mat_fill_I_q16_parallel.c │ │ ├── plp_mat_fill_I_q32.c │ │ ├── plp_mat_fill_I_q32_parallel.c │ │ ├── plp_mat_fill_I_q8.c │ │ └── plp_mat_fill_I_q8_parallel.c │ ├── mat_inv │ │ ├── kernels │ │ │ ├── plp_mat_inv_f32p_xpulpv2.c │ │ │ └── plp_mat_inv_f32s_xpulpv2.c │ │ ├── plp_mat_inv_f32.c │ │ └── plp_mat_inv_f32_parallel.c │ ├── mat_mult │ │ ├── kernels │ │ │ ├── plp_mat_mult_f32p_xpulpv2.c │ │ │ ├── plp_mat_mult_f32s_xpulpv2.c │ │ │ ├── plp_mat_mult_i16p_xpulpv2.c │ │ │ ├── plp_mat_mult_i16s_rv32im.c │ │ │ ├── plp_mat_mult_i16s_xpulpv2.c │ │ │ ├── plp_mat_mult_i32p_xpulpv2.c │ │ │ ├── plp_mat_mult_i32s_rv32im.c │ │ │ ├── plp_mat_mult_i32s_xpulpv2.c │ │ │ ├── plp_mat_mult_i8p_xpulpv2.c │ │ │ ├── plp_mat_mult_i8s_rv32im.c │ │ │ ├── plp_mat_mult_i8s_xpulpv2.c │ │ │ ├── plp_mat_mult_q16p_xpulpv2.c │ │ │ ├── plp_mat_mult_q16s_rv32im.c │ │ │ ├── plp_mat_mult_q16s_xpulpv2.c │ │ │ ├── plp_mat_mult_q32p_xpulpv2.c │ │ │ ├── plp_mat_mult_q32s_rv32im.c │ │ │ ├── plp_mat_mult_q32s_xpulpv2.c │ │ │ ├── plp_mat_mult_q8p_xpulpv2.c │ │ │ ├── plp_mat_mult_q8s_rv32im.c │ │ │ └── plp_mat_mult_q8s_xpulpv2.c │ │ ├── plp_mat_mult_f32.c │ │ ├── plp_mat_mult_f32_parallel.c │ │ ├── plp_mat_mult_i16.c │ │ ├── plp_mat_mult_i16_parallel.c │ │ ├── plp_mat_mult_i32.c │ │ ├── plp_mat_mult_i32_parallel.c │ │ ├── plp_mat_mult_i8.c │ │ ├── plp_mat_mult_i8_parallel.c │ │ ├── plp_mat_mult_q16.c │ │ ├── plp_mat_mult_q16_parallel.c │ │ ├── plp_mat_mult_q32.c │ │ ├── plp_mat_mult_q32_parallel.c │ │ ├── plp_mat_mult_q8.c │ │ └── plp_mat_mult_q8_parallel.c │ ├── mat_mult_cmplx │ │ ├── kernels │ │ │ ├── plp_mat_mult_cmplx_f32p_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_f32s_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_i16p_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_i16s_rv32im.c │ │ │ ├── plp_mat_mult_cmplx_i16s_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_i32p_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_i32s_rv32im.c │ │ │ ├── plp_mat_mult_cmplx_i32s_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_i8p_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_i8s_rv32im.c │ │ │ ├── plp_mat_mult_cmplx_i8s_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_q16p_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_q16s_rv32im.c │ │ │ ├── plp_mat_mult_cmplx_q16s_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_q32p_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_q32s_rv32im.c │ │ │ ├── plp_mat_mult_cmplx_q32s_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_q8p_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_q8s_rv32im.c │ │ │ └── plp_mat_mult_cmplx_q8s_xpulpv2.c │ │ ├── plp_mat_mult_cmplx_f32.c │ │ ├── plp_mat_mult_cmplx_f32_parallel.c │ │ ├── plp_mat_mult_cmplx_i16.c │ │ ├── plp_mat_mult_cmplx_i16_parallel.c │ │ ├── plp_mat_mult_cmplx_i32.c │ │ ├── plp_mat_mult_cmplx_i32_parallel.c │ │ ├── plp_mat_mult_cmplx_i8.c │ │ ├── plp_mat_mult_cmplx_i8_parallel.c │ │ ├── plp_mat_mult_cmplx_q16.c │ │ ├── plp_mat_mult_cmplx_q16_parallel.c │ │ ├── plp_mat_mult_cmplx_q32.c │ │ ├── plp_mat_mult_cmplx_q32_parallel.c │ │ ├── plp_mat_mult_cmplx_q8.c │ │ └── plp_mat_mult_cmplx_q8_parallel.c │ ├── mat_mult_trans │ │ ├── kernels │ │ │ ├── plp_mat_mult_trans_f32p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_f32s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_i16p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_i16s_rv32im.c │ │ │ ├── plp_mat_mult_trans_i16s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_i32p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_i32s_rv32im.c │ │ │ ├── plp_mat_mult_trans_i32s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_i8p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_i8s_rv32im.c │ │ │ ├── plp_mat_mult_trans_i8s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_q16p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_q16s_rv32im.c │ │ │ ├── plp_mat_mult_trans_q16s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_q32p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_q32s_rv32im.c │ │ │ ├── plp_mat_mult_trans_q32s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_q8p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_q8s_rv32im.c │ │ │ └── plp_mat_mult_trans_q8s_xpulpv2.c │ │ ├── plp_mat_mult_trans_f32.c │ │ ├── plp_mat_mult_trans_f32_parallel.c │ │ ├── plp_mat_mult_trans_i16.c │ │ ├── plp_mat_mult_trans_i16_parallel.c │ │ ├── plp_mat_mult_trans_i32.c │ │ ├── plp_mat_mult_trans_i32_parallel.c │ │ ├── plp_mat_mult_trans_i8.c │ │ ├── plp_mat_mult_trans_i8_parallel.c │ │ ├── plp_mat_mult_trans_q16.c │ │ ├── plp_mat_mult_trans_q16_parallel.c │ │ ├── plp_mat_mult_trans_q32.c │ │ ├── plp_mat_mult_trans_q32_parallel.c │ │ ├── plp_mat_mult_trans_q8.c │ │ └── plp_mat_mult_trans_q8_parallel.c │ ├── mat_mult_trans_cmplx │ │ ├── kernels │ │ │ ├── plp_mat_mult_trans_cmplx_f32p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_f32s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_i16p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_i16s_rv32im.c │ │ │ ├── plp_mat_mult_trans_cmplx_i16s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_i32p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_i32s_rv32im.c │ │ │ ├── plp_mat_mult_trans_cmplx_i32s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_i8p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_i8s_rv32im.c │ │ │ ├── plp_mat_mult_trans_cmplx_i8s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_q16p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_q16s_rv32im.c │ │ │ ├── plp_mat_mult_trans_cmplx_q16s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_q32p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_q32s_rv32im.c │ │ │ ├── plp_mat_mult_trans_cmplx_q32s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_q8p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_q8s_rv32im.c │ │ │ └── plp_mat_mult_trans_cmplx_q8s_xpulpv2.c │ │ ├── plp_mat_mult_trans_cmplx_f32.c │ │ ├── plp_mat_mult_trans_cmplx_f32_parallel.c │ │ ├── plp_mat_mult_trans_cmplx_i16.c │ │ ├── plp_mat_mult_trans_cmplx_i16_parallel.c │ │ ├── plp_mat_mult_trans_cmplx_i32.c │ │ ├── plp_mat_mult_trans_cmplx_i32_parallel.c │ │ ├── plp_mat_mult_trans_cmplx_i8.c │ │ ├── plp_mat_mult_trans_cmplx_i8_parallel.c │ │ ├── plp_mat_mult_trans_cmplx_q16.c │ │ ├── plp_mat_mult_trans_cmplx_q16_parallel.c │ │ ├── plp_mat_mult_trans_cmplx_q32.c │ │ ├── plp_mat_mult_trans_cmplx_q32_parallel.c │ │ ├── plp_mat_mult_trans_cmplx_q8.c │ │ └── plp_mat_mult_trans_cmplx_q8_parallel.c │ ├── mat_scale │ │ ├── kernels │ │ │ ├── plp_mat_scale_f32p_xpulpv2.c │ │ │ ├── plp_mat_scale_f32s_xpulpv2.c │ │ │ ├── plp_mat_scale_i16p_xpulpv2.c │ │ │ ├── plp_mat_scale_i16s_rv32im.c │ │ │ ├── plp_mat_scale_i16s_xpulpv2.c │ │ │ ├── plp_mat_scale_i32p_xpulpv2.c │ │ │ ├── plp_mat_scale_i32s_rv32im.c │ │ │ ├── plp_mat_scale_i32s_xpulpv2.c │ │ │ ├── plp_mat_scale_i8p_xpulpv2.c │ │ │ ├── plp_mat_scale_i8s_rv32im.c │ │ │ └── plp_mat_scale_i8s_xpulpv2.c │ │ ├── plp_mat_scale_f32.c │ │ ├── plp_mat_scale_f32_parallel.c │ │ ├── plp_mat_scale_i16.c │ │ ├── plp_mat_scale_i16_parallel.c │ │ ├── plp_mat_scale_i32.c │ │ ├── plp_mat_scale_i32_parallel.c │ │ ├── plp_mat_scale_i8.c │ │ └── plp_mat_scale_i8_parallel.c │ ├── mat_sub │ │ ├── kernels │ │ │ ├── plp_mat_sub_f32p_xpulpv2.c │ │ │ ├── plp_mat_sub_f32s_xpulpv2.c │ │ │ ├── plp_mat_sub_i16p_xpulpv2.c │ │ │ ├── plp_mat_sub_i16s_rv32im.c │ │ │ ├── plp_mat_sub_i16s_xpulpv2.c │ │ │ ├── plp_mat_sub_i32p_xpulpv2.c │ │ │ ├── plp_mat_sub_i32s_rv32im.c │ │ │ ├── plp_mat_sub_i32s_xpulpv2.c │ │ │ ├── plp_mat_sub_i8p_xpulpv2.c │ │ │ ├── plp_mat_sub_i8s_rv32im.c │ │ │ └── plp_mat_sub_i8s_xpulpv2.c │ │ ├── plp_mat_sub_f32.c │ │ ├── plp_mat_sub_f32_parallel.c │ │ ├── plp_mat_sub_i16.c │ │ ├── plp_mat_sub_i16_parallel.c │ │ ├── plp_mat_sub_i32.c │ │ ├── plp_mat_sub_i32_parallel.c │ │ ├── plp_mat_sub_i8.c │ │ └── plp_mat_sub_i8_parallel.c │ └── mat_trans │ │ ├── kernels │ │ ├── plp_mat_trans_i16p_xpulpv2.c │ │ ├── plp_mat_trans_i16s_rv32im.c │ │ ├── plp_mat_trans_i16s_xpulpv2.c │ │ ├── plp_mat_trans_i32p_xpulpv2.c │ │ ├── plp_mat_trans_i32s_rv32im.c │ │ ├── plp_mat_trans_i32s_xpulpv2.c │ │ ├── plp_mat_trans_i8p_xpulpv2.c │ │ ├── plp_mat_trans_i8s_rv32im.c │ │ └── plp_mat_trans_i8s_xpulpv2.c │ │ ├── plp_mat_trans_f32.c │ │ ├── plp_mat_trans_f32_parallel.c │ │ ├── plp_mat_trans_i16.c │ │ ├── plp_mat_trans_i16_parallel.c │ │ ├── plp_mat_trans_i32.c │ │ ├── plp_mat_trans_i32_parallel.c │ │ ├── plp_mat_trans_i8.c │ │ └── plp_mat_trans_i8_parallel.c ├── MatrixFunctionsStride │ ├── mat_add_stride │ │ ├── kernels │ │ │ ├── plp_mat_add_stride_f32p_xpulpv2.c │ │ │ ├── plp_mat_add_stride_f32s_xpulpv2.c │ │ │ ├── plp_mat_add_stride_i16p_xpulpv2.c │ │ │ ├── plp_mat_add_stride_i16s_rv32im.c │ │ │ ├── plp_mat_add_stride_i16s_xpulpv2.c │ │ │ ├── plp_mat_add_stride_i32p_xpulpv2.c │ │ │ ├── plp_mat_add_stride_i32s_rv32im.c │ │ │ ├── plp_mat_add_stride_i32s_xpulpv2.c │ │ │ ├── plp_mat_add_stride_i8p_xpulpv2.c │ │ │ ├── plp_mat_add_stride_i8s_rv32im.c │ │ │ └── plp_mat_add_stride_i8s_xpulpv2.c │ │ ├── plp_mat_add_stride_f32.c │ │ ├── plp_mat_add_stride_f32_parallel.c │ │ ├── plp_mat_add_stride_i16.c │ │ ├── plp_mat_add_stride_i16_parallel.c │ │ ├── plp_mat_add_stride_i32.c │ │ ├── plp_mat_add_stride_i32_parallel.c │ │ ├── plp_mat_add_stride_i8.c │ │ └── plp_mat_add_stride_i8_parallel.c │ ├── mat_copy_stride │ │ ├── kernels │ │ │ ├── plp_mat_copy_stride_f32p_xpulpv2.c │ │ │ ├── plp_mat_copy_stride_f32s_xpulpv2.c │ │ │ ├── plp_mat_copy_stride_i16p_xpulpv2.c │ │ │ ├── plp_mat_copy_stride_i16s_rv32im.c │ │ │ ├── plp_mat_copy_stride_i16s_xpulpv2.c │ │ │ ├── plp_mat_copy_stride_i32p_xpulpv2.c │ │ │ ├── plp_mat_copy_stride_i32s_rv32im.c │ │ │ ├── plp_mat_copy_stride_i32s_xpulpv2.c │ │ │ ├── plp_mat_copy_stride_i8p_xpulpv2.c │ │ │ ├── plp_mat_copy_stride_i8s_rv32im.c │ │ │ └── plp_mat_copy_stride_i8s_xpulpv2.c │ │ ├── plp_mat_copy_stride_f32.c │ │ ├── plp_mat_copy_stride_f32_parallel.c │ │ ├── plp_mat_copy_stride_i16.c │ │ ├── plp_mat_copy_stride_i16_parallel.c │ │ ├── plp_mat_copy_stride_i32.c │ │ ├── plp_mat_copy_stride_i32_parallel.c │ │ ├── plp_mat_copy_stride_i8.c │ │ └── plp_mat_copy_stride_i8_parallel.c │ ├── mat_fill_I_stride │ │ ├── kernels │ │ │ ├── plp_mat_fill_I_stride_f32p_xpulpv2.c │ │ │ ├── plp_mat_fill_I_stride_f32s_xpulpv2.c │ │ │ ├── plp_mat_fill_I_stride_i16p_xpulpv2.c │ │ │ ├── plp_mat_fill_I_stride_i16s_rv32im.c │ │ │ ├── plp_mat_fill_I_stride_i16s_xpulpv2.c │ │ │ ├── plp_mat_fill_I_stride_i32p_xpulpv2.c │ │ │ ├── plp_mat_fill_I_stride_i32s_rv32im.c │ │ │ ├── plp_mat_fill_I_stride_i32s_xpulpv2.c │ │ │ ├── plp_mat_fill_I_stride_i8p_xpulpv2.c │ │ │ ├── plp_mat_fill_I_stride_i8s_rv32im.c │ │ │ ├── plp_mat_fill_I_stride_i8s_xpulpv2.c │ │ │ ├── plp_mat_fill_I_stride_q16p_xpulpv2.c │ │ │ ├── plp_mat_fill_I_stride_q16s_rv32im.c │ │ │ ├── plp_mat_fill_I_stride_q16s_xpulpv2.c │ │ │ ├── plp_mat_fill_I_stride_q32p_xpulpv2.c │ │ │ ├── plp_mat_fill_I_stride_q32s_rv32im.c │ │ │ ├── plp_mat_fill_I_stride_q32s_xpulpv2.c │ │ │ ├── plp_mat_fill_I_stride_q8p_xpulpv2.c │ │ │ ├── plp_mat_fill_I_stride_q8s_rv32im.c │ │ │ └── plp_mat_fill_I_stride_q8s_xpulpv2.c │ │ ├── plp_mat_fill_I_stride_f32.c │ │ ├── plp_mat_fill_I_stride_f32_parallel.c │ │ ├── plp_mat_fill_I_stride_i16.c │ │ ├── plp_mat_fill_I_stride_i16_parallel.c │ │ ├── plp_mat_fill_I_stride_i32.c │ │ ├── plp_mat_fill_I_stride_i32_parallel.c │ │ ├── plp_mat_fill_I_stride_i8.c │ │ ├── plp_mat_fill_I_stride_i8_parallel.c │ │ ├── plp_mat_fill_I_stride_q16.c │ │ ├── plp_mat_fill_I_stride_q16_parallel.c │ │ ├── plp_mat_fill_I_stride_q32.c │ │ ├── plp_mat_fill_I_stride_q32_parallel.c │ │ ├── plp_mat_fill_I_stride_q8.c │ │ └── plp_mat_fill_I_stride_q8_parallel.c │ ├── mat_fill_stride │ │ ├── kernels │ │ │ ├── plp_mat_fill_stride_f32p_xpulpv2.c │ │ │ ├── plp_mat_fill_stride_f32s_xpulpv2.c │ │ │ ├── plp_mat_fill_stride_i16p_xpulpv2.c │ │ │ ├── plp_mat_fill_stride_i16s_rv32im.c │ │ │ ├── plp_mat_fill_stride_i16s_xpulpv2.c │ │ │ ├── plp_mat_fill_stride_i32p_xpulpv2.c │ │ │ ├── plp_mat_fill_stride_i32s_rv32im.c │ │ │ ├── plp_mat_fill_stride_i32s_xpulpv2.c │ │ │ ├── plp_mat_fill_stride_i8p_xpulpv2.c │ │ │ ├── plp_mat_fill_stride_i8s_rv32im.c │ │ │ └── plp_mat_fill_stride_i8s_xpulpv2.c │ │ ├── plp_mat_fill_stride_f32.c │ │ ├── plp_mat_fill_stride_f32_parallel.c │ │ ├── plp_mat_fill_stride_i16.c │ │ ├── plp_mat_fill_stride_i16_parallel.c │ │ ├── plp_mat_fill_stride_i32.c │ │ ├── plp_mat_fill_stride_i32_parallel.c │ │ ├── plp_mat_fill_stride_i8.c │ │ └── plp_mat_fill_stride_i8_parallel.c │ ├── mat_mult_cmplx_stride │ │ ├── kernels │ │ │ ├── plp_mat_mult_cmplx_stride_f32p_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_stride_f32s_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_stride_i16p_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_stride_i16s_rv32im.c │ │ │ ├── plp_mat_mult_cmplx_stride_i16s_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_stride_i32p_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_stride_i32s_rv32im.c │ │ │ ├── plp_mat_mult_cmplx_stride_i32s_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_stride_i8p_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_stride_i8s_rv32im.c │ │ │ ├── plp_mat_mult_cmplx_stride_i8s_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_stride_q16p_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_stride_q16s_rv32im.c │ │ │ ├── plp_mat_mult_cmplx_stride_q16s_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_stride_q32p_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_stride_q32s_rv32im.c │ │ │ ├── plp_mat_mult_cmplx_stride_q32s_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_stride_q8p_xpulpv2.c │ │ │ ├── plp_mat_mult_cmplx_stride_q8s_rv32im.c │ │ │ └── plp_mat_mult_cmplx_stride_q8s_xpulpv2.c │ │ ├── plp_mat_mult_cmplx_stride_f32.c │ │ ├── plp_mat_mult_cmplx_stride_f32_parallel.c │ │ ├── plp_mat_mult_cmplx_stride_i16.c │ │ ├── plp_mat_mult_cmplx_stride_i16_parallel.c │ │ ├── plp_mat_mult_cmplx_stride_i32.c │ │ ├── plp_mat_mult_cmplx_stride_i32_parallel.c │ │ ├── plp_mat_mult_cmplx_stride_i8.c │ │ ├── plp_mat_mult_cmplx_stride_i8_parallel.c │ │ ├── plp_mat_mult_cmplx_stride_q16.c │ │ ├── plp_mat_mult_cmplx_stride_q16_parallel.c │ │ ├── plp_mat_mult_cmplx_stride_q32.c │ │ ├── plp_mat_mult_cmplx_stride_q32_parallel.c │ │ ├── plp_mat_mult_cmplx_stride_q8.c │ │ └── plp_mat_mult_cmplx_stride_q8_parallel.c │ ├── mat_mult_stride │ │ ├── kernels │ │ │ ├── plp_mat_mult_stride_f32p_xpulpv2.c │ │ │ ├── plp_mat_mult_stride_f32s_xpulpv2.c │ │ │ ├── plp_mat_mult_stride_i16p_xpulpv2.c │ │ │ ├── plp_mat_mult_stride_i16s_rv32im.c │ │ │ ├── plp_mat_mult_stride_i16s_xpulpv2.c │ │ │ ├── plp_mat_mult_stride_i32p_xpulpv2.c │ │ │ ├── plp_mat_mult_stride_i32s_rv32im.c │ │ │ ├── plp_mat_mult_stride_i32s_xpulpv2.c │ │ │ ├── plp_mat_mult_stride_i8p_xpulpv2.c │ │ │ ├── plp_mat_mult_stride_i8s_rv32im.c │ │ │ ├── plp_mat_mult_stride_i8s_xpulpv2.c │ │ │ ├── plp_mat_mult_stride_q16p_xpulpv2.c │ │ │ ├── plp_mat_mult_stride_q16s_rv32im.c │ │ │ ├── plp_mat_mult_stride_q16s_xpulpv2.c │ │ │ ├── plp_mat_mult_stride_q32p_xpulpv2.c │ │ │ ├── plp_mat_mult_stride_q32s_rv32im.c │ │ │ ├── plp_mat_mult_stride_q32s_xpulpv2.c │ │ │ ├── plp_mat_mult_stride_q8p_xpulpv2.c │ │ │ ├── plp_mat_mult_stride_q8s_rv32im.c │ │ │ └── plp_mat_mult_stride_q8s_xpulpv2.c │ │ ├── plp_mat_mult_stride_f32.c │ │ ├── plp_mat_mult_stride_f32_parallel.c │ │ ├── plp_mat_mult_stride_i16.c │ │ ├── plp_mat_mult_stride_i16_parallel.c │ │ ├── plp_mat_mult_stride_i32.c │ │ ├── plp_mat_mult_stride_i32_parallel.c │ │ ├── plp_mat_mult_stride_i8.c │ │ ├── plp_mat_mult_stride_i8_parallel.c │ │ ├── plp_mat_mult_stride_q16.c │ │ ├── plp_mat_mult_stride_q16_parallel.c │ │ ├── plp_mat_mult_stride_q32.c │ │ ├── plp_mat_mult_stride_q32_parallel.c │ │ ├── plp_mat_mult_stride_q8.c │ │ └── plp_mat_mult_stride_q8_parallel.c │ ├── mat_mult_trans_cmplx_stride │ │ ├── kernels │ │ │ ├── plp_mat_mult_trans_cmplx_stride_f32p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_f32s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_i16p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_i16s_rv32im.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_i16s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_i32p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_i32s_rv32im.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_i32s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_i8p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_i8s_rv32im.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_i8s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_q16p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_q16s_rv32im.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_q16s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_q32p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_q32s_rv32im.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_q32s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_q8p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_cmplx_stride_q8s_rv32im.c │ │ │ └── plp_mat_mult_trans_cmplx_stride_q8s_xpulpv2.c │ │ ├── plp_mat_mult_trans_cmplx_stride_f32.c │ │ ├── plp_mat_mult_trans_cmplx_stride_f32_parallel.c │ │ ├── plp_mat_mult_trans_cmplx_stride_i16.c │ │ ├── plp_mat_mult_trans_cmplx_stride_i16_parallel.c │ │ ├── plp_mat_mult_trans_cmplx_stride_i32.c │ │ ├── plp_mat_mult_trans_cmplx_stride_i32_parallel.c │ │ ├── plp_mat_mult_trans_cmplx_stride_i8.c │ │ ├── plp_mat_mult_trans_cmplx_stride_i8_parallel.c │ │ ├── plp_mat_mult_trans_cmplx_stride_q16.c │ │ ├── plp_mat_mult_trans_cmplx_stride_q16_parallel.c │ │ ├── plp_mat_mult_trans_cmplx_stride_q32.c │ │ ├── plp_mat_mult_trans_cmplx_stride_q32_parallel.c │ │ ├── plp_mat_mult_trans_cmplx_stride_q8.c │ │ └── plp_mat_mult_trans_cmplx_stride_q8_parallel.c │ ├── mat_mult_trans_stride │ │ ├── kernels │ │ │ ├── plp_mat_mult_trans_stride_f32p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_stride_f32s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_stride_i16p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_stride_i16s_rv32im.c │ │ │ ├── plp_mat_mult_trans_stride_i16s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_stride_i32p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_stride_i32s_rv32im.c │ │ │ ├── plp_mat_mult_trans_stride_i32s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_stride_i8p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_stride_i8s_rv32im.c │ │ │ ├── plp_mat_mult_trans_stride_i8s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_stride_q16p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_stride_q16s_rv32im.c │ │ │ ├── plp_mat_mult_trans_stride_q16s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_stride_q32p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_stride_q32s_rv32im.c │ │ │ ├── plp_mat_mult_trans_stride_q32s_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_stride_q8p_xpulpv2.c │ │ │ ├── plp_mat_mult_trans_stride_q8s_rv32im.c │ │ │ └── plp_mat_mult_trans_stride_q8s_xpulpv2.c │ │ ├── plp_mat_mult_trans_stride_f32.c │ │ ├── plp_mat_mult_trans_stride_f32_parallel.c │ │ ├── plp_mat_mult_trans_stride_i16.c │ │ ├── plp_mat_mult_trans_stride_i16_parallel.c │ │ ├── plp_mat_mult_trans_stride_i32.c │ │ ├── plp_mat_mult_trans_stride_i32_parallel.c │ │ ├── plp_mat_mult_trans_stride_i8.c │ │ ├── plp_mat_mult_trans_stride_i8_parallel.c │ │ ├── plp_mat_mult_trans_stride_q16.c │ │ ├── plp_mat_mult_trans_stride_q16_parallel.c │ │ ├── plp_mat_mult_trans_stride_q32.c │ │ ├── plp_mat_mult_trans_stride_q32_parallel.c │ │ ├── plp_mat_mult_trans_stride_q8.c │ │ └── plp_mat_mult_trans_stride_q8_parallel.c │ ├── mat_scale_stride │ │ ├── kernels │ │ │ ├── plp_mat_scale_stride_f32p_xpulpv2.c │ │ │ ├── plp_mat_scale_stride_f32s_xpulpv2.c │ │ │ ├── plp_mat_scale_stride_i16p_xpulpv2.c │ │ │ ├── plp_mat_scale_stride_i16s_rv32im.c │ │ │ ├── plp_mat_scale_stride_i16s_xpulpv2.c │ │ │ ├── plp_mat_scale_stride_i32p_xpulpv2.c │ │ │ ├── plp_mat_scale_stride_i32s_rv32im.c │ │ │ ├── plp_mat_scale_stride_i32s_xpulpv2.c │ │ │ ├── plp_mat_scale_stride_i8p_xpulpv2.c │ │ │ ├── plp_mat_scale_stride_i8s_rv32im.c │ │ │ └── plp_mat_scale_stride_i8s_xpulpv2.c │ │ ├── plp_mat_scale_stride_f32.c │ │ ├── plp_mat_scale_stride_f32_parallel.c │ │ ├── plp_mat_scale_stride_i16.c │ │ ├── plp_mat_scale_stride_i16_parallel.c │ │ ├── plp_mat_scale_stride_i32.c │ │ ├── plp_mat_scale_stride_i32_parallel.c │ │ ├── plp_mat_scale_stride_i8.c │ │ └── plp_mat_scale_stride_i8_parallel.c │ └── mat_sub_stride │ │ ├── kernels │ │ ├── plp_mat_sub_stride_f32p_xpulpv2.c │ │ ├── plp_mat_sub_stride_f32s_xpulpv2.c │ │ ├── plp_mat_sub_stride_i16p_xpulpv2.c │ │ ├── plp_mat_sub_stride_i16s_rv32im.c │ │ ├── plp_mat_sub_stride_i16s_xpulpv2.c │ │ ├── plp_mat_sub_stride_i32p_xpulpv2.c │ │ ├── plp_mat_sub_stride_i32s_rv32im.c │ │ ├── plp_mat_sub_stride_i32s_xpulpv2.c │ │ ├── plp_mat_sub_stride_i8p_xpulpv2.c │ │ ├── plp_mat_sub_stride_i8s_rv32im.c │ │ └── plp_mat_sub_stride_i8s_xpulpv2.c │ │ ├── plp_mat_sub_stride_f32.c │ │ ├── plp_mat_sub_stride_f32_parallel.c │ │ ├── plp_mat_sub_stride_i16.c │ │ ├── plp_mat_sub_stride_i16_parallel.c │ │ ├── plp_mat_sub_stride_i32.c │ │ ├── plp_mat_sub_stride_i32_parallel.c │ │ ├── plp_mat_sub_stride_i8.c │ │ └── plp_mat_sub_stride_i8_parallel.c ├── StatisticsFunctions │ ├── kernels │ │ ├── plp_max_f32s_xpulpv2.c │ │ ├── plp_max_i16s_rv32im.c │ │ ├── plp_max_i16s_xpulpv2.c │ │ ├── plp_max_i32s_rv32im.c │ │ ├── plp_max_i32s_xpulpv2.c │ │ ├── plp_max_i8s_rv32im.c │ │ ├── plp_max_i8s_xpulpv2.c │ │ ├── plp_mean_f32s_xpulpv2.c │ │ ├── plp_mean_i16s_rv32im.c │ │ ├── plp_mean_i16s_xpulpv2.c │ │ ├── plp_mean_i32s_rv32im.c │ │ ├── plp_mean_i32s_xpulpv2.c │ │ ├── plp_mean_i8s_rv32im.c │ │ ├── plp_mean_i8s_xpulpv2.c │ │ ├── plp_min_f32s_xpulpv2.c │ │ ├── plp_min_i16s_rv32im.c │ │ ├── plp_min_i16s_xpulpv2.c │ │ ├── plp_min_i32s_rv32im.c │ │ ├── plp_min_i32s_xpulpv2.c │ │ ├── plp_min_i8s_rv32im.c │ │ ├── plp_min_i8s_xpulpv2.c │ │ ├── plp_power_f32p_xpulpv2.c │ │ ├── plp_power_f32s_rv32im.c │ │ ├── plp_power_f32s_xpulpv2.c │ │ ├── plp_power_i16s_rv32im.c │ │ ├── plp_power_i16s_xpulpv2.c │ │ ├── plp_power_i32s_rv32im.c │ │ ├── plp_power_i32s_xpulpv2.c │ │ ├── plp_power_i8s_rv32im.c │ │ ├── plp_power_i8s_xpulpv2.c │ │ ├── plp_power_q16s_rv32im.c │ │ ├── plp_power_q16s_xpulpv2.c │ │ ├── plp_power_q32p_xpulpv2.c │ │ ├── plp_power_q32s_rv32im.c │ │ ├── plp_power_q32s_xpulpv2.c │ │ ├── plp_power_q8s_rv32im.c │ │ ├── plp_power_q8s_xpulpv2.c │ │ ├── plp_rms_f32s_xpulpv2.c │ │ ├── plp_rms_i16s_rv32im.c │ │ ├── plp_rms_i16s_xpulpv2.c │ │ ├── plp_rms_i32s_rv32im.c │ │ ├── plp_rms_i32s_xpulpv2.c │ │ ├── plp_rms_i8s_rv32im.c │ │ ├── plp_rms_i8s_xpulpv2.c │ │ ├── plp_rms_q16s_rv32im.c │ │ ├── plp_rms_q16s_xpulpv2.c │ │ ├── plp_rms_q32s_rv32im.c │ │ ├── plp_rms_q32s_xpulpv2.c │ │ ├── plp_rms_q8s_rv32im.c │ │ ├── plp_rms_q8s_xpulpv2.c │ │ ├── plp_std_f32s_xpulpv2.c │ │ ├── plp_std_q16s_rv32im.c │ │ ├── plp_std_q16s_xpulpv2.c │ │ ├── plp_std_q32s_rv32im.c │ │ ├── plp_std_q32s_xpulpv2.c │ │ ├── plp_std_q8s_rv32im.c │ │ ├── plp_std_q8s_xpulpv2.c │ │ ├── plp_var_f32s_xpulpv2.c │ │ ├── plp_var_q16s_rv32im.c │ │ ├── plp_var_q16s_xpulpv2.c │ │ ├── plp_var_q32s_rv32im.c │ │ ├── plp_var_q32s_xpulpv2.c │ │ ├── plp_var_q8s_rv32im.c │ │ └── plp_var_q8s_xpulpv2.c │ ├── plp_max_f32.c │ ├── plp_max_i16.c │ ├── plp_max_i32.c │ ├── plp_max_i8.c │ ├── plp_mean_f32.c │ ├── plp_mean_i16.c │ ├── plp_mean_i32.c │ ├── plp_mean_i8.c │ ├── plp_min_f32.c │ ├── plp_min_i16.c │ ├── plp_min_i32.c │ ├── plp_min_i8.c │ ├── plp_power_f32.c │ ├── plp_power_f32_parallel.c │ ├── plp_power_i16.c │ ├── plp_power_i32.c │ ├── plp_power_i8.c │ ├── plp_power_q16.c │ ├── plp_power_q32.c │ ├── plp_power_q32_parallel.c │ ├── plp_power_q8.c │ ├── plp_rms_f32.c │ ├── plp_rms_q16.c │ ├── plp_rms_q32.c │ ├── plp_rms_q8.c │ ├── plp_std_f32.c │ ├── plp_std_q16.c │ ├── plp_std_q32.c │ ├── plp_std_q8.c │ ├── plp_var_f32.c │ ├── plp_var_q16.c │ ├── plp_var_q32.c │ └── plp_var_q8.c ├── SupportFunctions │ ├── kernels │ │ ├── plp_copy_f32s_rv32im.c │ │ ├── plp_copy_f32s_xpulpv2.c │ │ ├── plp_copy_i32s_rv32im.c │ │ ├── plp_copy_i32s_xpulpv2.c │ │ ├── plp_fill_i32s_rv32im.c │ │ └── plp_fill_i32s_xpulpv2.c │ ├── plp_copy_f32.c │ ├── plp_copy_i32.c │ └── plp_fill_i32.c └── TransformFunctions │ ├── kernels │ ├── plp_bitreversal_rv32im.c │ ├── plp_bitreversal_xpulpv2.c │ ├── plp_cfft_f32p_xpulpv2.c │ ├── plp_cfft_f32s_xpulpv2.c │ ├── plp_cfft_q16p_xpulpv2.c │ ├── plp_cfft_q16s_rv32im.c │ ├── plp_cfft_q16s_xpulpv2.c │ ├── plp_cfft_q32p_xpulpv2.c │ ├── plp_cfft_q32s_rv32im.c │ ├── plp_cfft_q32s_xpulpv2.c │ ├── plp_dwt_f32p_xpulpv2.c │ ├── plp_dwt_f32s_xpulpv2.c │ ├── plp_dwt_q16p_xpulpv2.c │ ├── plp_dwt_q16s_rv32im.c │ ├── plp_dwt_q16s_xpulpv2.c │ ├── plp_dwt_q32p_xpulpv2.c │ ├── plp_dwt_q32s_rv32im.c │ ├── plp_dwt_q32s_xpulpv2.c │ ├── plp_dwt_q8p_xpulpv2.c │ ├── plp_dwt_q8s_rv32im.c │ ├── plp_dwt_q8s_xpulpv2.c │ ├── plp_dwt_signal_ext.h │ ├── plp_rfft_f32p_xpulpv2.c │ ├── plp_rfft_f32s_xpulpv2.c │ ├── plp_rfftfast_f32p_xpulpv2.c │ └── plp_rfftfast_f32s_xpulpv2.c │ ├── plp_cfft_f32.c │ ├── plp_cfft_f32_parallel.c │ ├── plp_cfft_q16.c │ ├── plp_cfft_q16_parallel.c │ ├── plp_cfft_q32.c │ ├── plp_cfft_q32_parallel.c │ ├── plp_dct2_f32.c │ ├── plp_dct2_f32_parallel.c │ ├── plp_dwt_common.c │ ├── plp_dwt_common.h │ ├── plp_dwt_f32.c │ ├── plp_dwt_f32_parallel.c │ ├── plp_dwt_q16.c │ ├── plp_dwt_q16_parallel.c │ ├── plp_dwt_q32.c │ ├── plp_dwt_q32_parallel.c │ ├── plp_dwt_q8.c │ ├── plp_dwt_q8_parallel.c │ ├── plp_mfcc_f32.c │ ├── plp_mfcc_f32_parallel.c │ ├── plp_rfft_f32.c │ ├── plp_rfft_f32_parallel.c │ ├── plp_rfftfast_f32.c │ └── plp_rfftfast_f32_parallel.c ├── test ├── README.md └── mrWolf │ ├── abs │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── add │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── avg.csv │ ├── bench.py │ ├── cmplx_conj │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── cmplx_dot_prod │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── cmplx_mag │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── cmplx_mag_squared │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── cmplx_mult_cmplx │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── cmplx_mult_real │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── conv │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── conv_valid │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── conv_valid_rep │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── correlate │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── cos │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── cosine_distance │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── dot_prod │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── dwt │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── dwt_dec │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── euclidean_distance │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── fft_complex │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── fft_real │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── fft_real_fast │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_add │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_add_stride │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_copy_stride │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_fill_I │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_fill_I_stride │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_fill_stride │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_fma │ ├── test_fct │ │ ├── clean_up.c │ │ ├── clean_up_p.c │ │ ├── fc_ibex │ │ │ ├── Makefile │ │ │ ├── fma_fct16.c │ │ │ ├── fma_fct16.h │ │ │ ├── fma_fct32.c │ │ │ ├── fma_fct32.h │ │ │ ├── fma_fct8.c │ │ │ ├── fma_fct8.h │ │ │ └── test.c │ │ ├── perf_measure.py │ │ ├── performance.csv │ │ └── singlecore_riscy │ │ │ ├── Makefile │ │ │ ├── cluster.c │ │ │ ├── cluster.h │ │ │ ├── fct16.c │ │ │ ├── fct16.h │ │ │ ├── fct16p.c │ │ │ ├── fct16p.h │ │ │ ├── fct32.c │ │ │ ├── fct32.h │ │ │ ├── fct32p.c │ │ │ ├── fct32p.h │ │ │ ├── fct8.c │ │ │ ├── fct8.h │ │ │ ├── fct8p.c │ │ │ ├── fct8p.h │ │ │ └── test.c │ └── test_lib │ │ ├── fc_ibex │ │ ├── Makefile │ │ └── test.c │ │ └── singlecore_riscy │ │ ├── Makefile │ │ ├── cluster.c │ │ ├── cluster.h │ │ └── test.c │ ├── mat_inv │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_mul │ ├── test_data │ │ └── gen_stimuli.py │ ├── test_fct │ │ ├── clean_up.c │ │ ├── clean_up_p.c │ │ ├── fc_ibex │ │ │ ├── Makefile │ │ │ ├── mul_fct16.c │ │ │ ├── mul_fct16.h │ │ │ ├── mul_fct32.c │ │ │ ├── mul_fct32.h │ │ │ ├── mul_fct8.c │ │ │ ├── mul_fct8.h │ │ │ └── test.c │ │ ├── perf_measure.py │ │ ├── performance.csv │ │ └── singlecore_riscy │ │ │ ├── Makefile │ │ │ ├── cluster.c │ │ │ ├── cluster.h │ │ │ ├── fct16.c │ │ │ ├── fct16.h │ │ │ ├── fct16p.c │ │ │ ├── fct16p.h │ │ │ ├── fct32.c │ │ │ ├── fct32.h │ │ │ ├── fct32p.c │ │ │ ├── fct32p.h │ │ │ ├── fct8.c │ │ │ ├── fct8.h │ │ │ ├── fct8p.c │ │ │ ├── fct8p.h │ │ │ └── test.c │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_mul_cmplx │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_mul_cmplx_stride │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_mul_stride │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_mul_trans │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_mul_trans_cmplx │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_mul_trans_cmplx_stride │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_mul_trans_stride │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_scale │ └── test_lib │ │ ├── gen_stimuli.py │ │ ├── testset.cfg │ │ ├── testset_float.cfg │ │ └── testset_int.cfg │ ├── mat_scale_stride │ └── test_lib │ │ ├── gen_stimuli.py │ │ ├── testset.cfg │ │ ├── testset_float.cfg │ │ └── testset_int.cfg │ ├── mat_sub │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_sub_stride │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mat_trans │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── max │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mean │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── min │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── mult │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── negate │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── offset │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── power │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── pulp_dsp_test.py │ ├── readme.md │ ├── rms │ └── test_lib │ │ ├── data.h │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── scale │ ├── mat_scale │ │ └── test_lib │ │ │ ├── gen_stimuli.py │ │ │ ├── testset.cfg │ │ │ ├── testset_float.cfg │ │ │ └── testset_int.cfg │ └── test_lib │ │ ├── gen_stimuli.py │ │ ├── plp_mat_scale_f32_riscy │ │ ├── Makefile │ │ ├── cluster.c │ │ ├── cluster.h │ │ ├── common.h │ │ ├── data_t0.h │ │ ├── data_t1.h │ │ ├── data_t2.h │ │ ├── data_t3.h │ │ ├── data_t4.h │ │ ├── run.sh │ │ └── test.c │ │ ├── plp_mat_scale_i16_ibex │ │ ├── Makefile │ │ ├── common.h │ │ ├── data_t0.h │ │ ├── data_t1.h │ │ ├── data_t2.h │ │ ├── data_t3.h │ │ ├── data_t4.h │ │ ├── run.sh │ │ └── test.c │ │ ├── plp_mat_scale_i16_riscy │ │ ├── Makefile │ │ ├── cluster.c │ │ ├── cluster.h │ │ ├── common.h │ │ ├── data_t0.h │ │ ├── data_t1.h │ │ ├── data_t2.h │ │ ├── data_t3.h │ │ ├── data_t4.h │ │ ├── run.sh │ │ └── test.c │ │ ├── plp_mat_scale_i32_ibex │ │ ├── Makefile │ │ ├── common.h │ │ ├── data_t0.h │ │ ├── data_t1.h │ │ ├── data_t2.h │ │ ├── data_t3.h │ │ ├── data_t4.h │ │ ├── run.sh │ │ └── test.c │ │ ├── plp_mat_scale_i32_riscy │ │ ├── Makefile │ │ ├── cluster.c │ │ ├── cluster.h │ │ ├── common.h │ │ ├── data_t0.h │ │ ├── data_t1.h │ │ ├── data_t2.h │ │ ├── data_t3.h │ │ ├── data_t4.h │ │ ├── run.sh │ │ └── test.c │ │ ├── plp_mat_scale_i8_ibex │ │ ├── Makefile │ │ ├── common.h │ │ ├── data_t0.h │ │ ├── data_t1.h │ │ ├── data_t2.h │ │ ├── data_t3.h │ │ ├── data_t4.h │ │ ├── run.sh │ │ └── test.c │ │ ├── plp_mat_scale_i8_riscy │ │ ├── Makefile │ │ ├── cluster.c │ │ ├── cluster.h │ │ ├── common.h │ │ ├── data_t0.h │ │ ├── data_t1.h │ │ ├── data_t2.h │ │ ├── data_t3.h │ │ ├── data_t4.h │ │ ├── run.sh │ │ └── test.c │ │ ├── testset.cfg │ │ ├── testset_float.cfg │ │ └── testset_int.cfg │ ├── sin │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── sqrt │ └── test_lib │ │ ├── gen_stimuli.py │ │ ├── ibex │ │ ├── Makefile │ │ ├── gen_stimuli.py │ │ ├── test.c │ │ └── testset.cfg │ │ ├── riscy │ │ ├── Makefile │ │ ├── cluster.c │ │ ├── cluster.h │ │ ├── gen_stimuli.py │ │ ├── test.c │ │ └── testset.cfg │ │ └── testset.cfg │ ├── std │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── sub │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── test_template │ └── test_lib │ │ ├── gen_stimuli.py │ │ └── testset.cfg │ ├── testset.cfg │ └── var │ └── test_lib │ ├── gen_stimuli.py │ └── testset.cfg └── tutorial ├── README.md ├── baseline ├── Makefile ├── data.h └── main.c ├── cluster_double_buff ├── Makefile ├── cluster.h ├── cluster_dma.c ├── data.h └── main.c ├── cluster_parallel ├── Makefile ├── cluster.c ├── cluster.h ├── data.h └── main.c ├── cluster_single_basic ├── Makefile ├── cluster.c ├── cluster.h ├── data.h ├── defines.h └── main.c ├── cluster_single_dma ├── Makefile ├── cluster.c ├── cluster.h ├── data.h ├── defines.h └── main.c ├── cluster_single_simd ├── Makefile ├── cluster.c ├── cluster.h ├── data.h └── main.c ├── float └── data.h └── gtkwave_screenshot.png /.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | # BasedOnStyle: LLVM 3 | AccessModifierOffset: -2 4 | ConstructorInitializerIndentWidth: 4 5 | AlignEscapedNewlinesLeft: false 6 | AlignTrailingComments: true 7 | AllowAllParametersOfDeclarationOnNextLine: true 8 | AllowShortIfStatementsOnASingleLine: false 9 | AllowShortLoopsOnASingleLine: false 10 | AlwaysBreakTemplateDeclarations: false 11 | AlwaysBreakBeforeMultilineStrings: false 12 | BreakBeforeBinaryOperators: false 13 | BreakBeforeTernaryOperators: true 14 | BreakConstructorInitializersBeforeComma: false 15 | BinPackParameters: false 16 | ColumnLimit: 100 17 | ConstructorInitializerAllOnOneLineOrOnePerLine: false 18 | DerivePointerBinding: false 19 | ExperimentalAutoDetectBinPacking: false 20 | IndentCaseLabels: false 21 | MaxEmptyLinesToKeep: 1 22 | NamespaceIndentation: None 23 | ObjCSpaceBeforeProtocolList: true 24 | PenaltyBreakBeforeFirstCallParameter: 19 25 | PenaltyBreakComment: 60 26 | PenaltyBreakString: 1000 27 | PenaltyBreakFirstLessLess: 120 28 | PenaltyExcessCharacter: 1000000 29 | PenaltyReturnTypeOnItsOwnLine: 60 30 | PointerBindsToType: false 31 | SpacesBeforeTrailingComments: 1 32 | Cpp11BracedListStyle: false 33 | Standard: Cpp03 34 | IndentWidth: 4 35 | TabWidth: 8 36 | UseTab: Never 37 | BreakBeforeBraces: Attach 38 | IndentFunctionDeclarationAfterType: false 39 | SpacesInParentheses: false 40 | SpacesInAngles: false 41 | SpaceInEmptyParentheses: false 42 | SpacesInCStyleCastParentheses: false 43 | SpaceAfterControlStatementKeyword: true 44 | SpaceBeforeAssignmentOperators: true 45 | ContinuationIndentWidth: 4 46 | ... 47 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: ci # (1)! 2 | on: 3 | push: 4 | branches: 5 | - master # (2)! 6 | 7 | jobs: 8 | deploy: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v2 12 | - uses: actions/setup-python@v2 13 | with: 14 | python-version: 3.x 15 | - run: pip install mkdocs-material # (3)! 16 | - run: mkdocs gh-deploy --force 17 | -------------------------------------------------------------------------------- /.github/workflows/publish-docs.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2020 ETH Zurich and University of Bologna. 2 | # Licensed under the Apache License, Version 2.0, see LICENSE for details. 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | name: publish-docs 6 | on: 7 | push: 8 | branches: 9 | - master 10 | jobs: 11 | deploy: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v2 15 | - uses: actions/setup-python@v2 16 | with: 17 | python-version: 3.x 18 | - uses: mattnotmitt/doxygen-action@v1 19 | with: 20 | working-directory: docs/ 21 | - name: Generate Doxygen Documentation 22 | run: | 23 | mkdir doxybook2; cd doxybook2 24 | wget https://github.com/matusnovak/doxybook2/releases/download/v1.4.0/doxybook2-linux-amd64-v1.4.0.zip 25 | unzip doxybook2-linux-amd64-v1.4.0.zip; cd ../ 26 | chmod +x doxybook2/bin/doxybook2 27 | mkdir docs/refmanual 28 | ./doxybook2/bin/doxybook2 --input docs/xml --output docs/refmanual --config docs/doxybook2.json 29 | rm -rf doxybook2 30 | - run: pip install -r docs/requirements.txt 31 | - run: mkdocs gh-deploy --force 32 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | __pycache__ 3 | build/ 4 | *.sw[p,o] 5 | cscope.* 6 | *.o 7 | 8 | test_data 9 | !test_data/gen_stimuli.py 10 | 11 | test/mrWolf/bench_*.csv 12 | 13 | junit-reports 14 | 15 | docs/html/ 16 | docs/xml/ 17 | 18 | *.S 19 | 20 | gmon.out -------------------------------------------------------------------------------- /dis.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | BUILD_DIR="$(dirname $0)/lib" 4 | if FILE=$(find $BUILD_DIR -type f | grep $1 | egrep "\.o$"); then 5 | FOUND_FILES=$(echo $FILE | wc -l) 6 | if test $FOUND_FILES -eq "1"; then 7 | $(echo $PULP_RISCV_GCC_TOOLCHAIN)/bin/riscv32-unknown-elf-objdump -d $FILE 8 | else 9 | echo "Multiple matching files found!" 10 | exit 1 11 | fi 12 | else 13 | echo "No matching file found!" 14 | exit 1 15 | fi 16 | -------------------------------------------------------------------------------- /docs/Pulp_logo_inline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pulp-platform/pulp-dsp/cc5594b9998b4f243be02c3a7e853db9c936302b/docs/Pulp_logo_inline.png -------------------------------------------------------------------------------- /docs/doxybook2.json: -------------------------------------------------------------------------------- 1 | { 2 | "baseUrl": "/pulp-dsp/refmanual/", 3 | "indexInFolders": true, 4 | "linkSuffix": "/", 5 | "indexClassesName": "index", 6 | "indexFilesName": "index", 7 | "indexGroupsName": "index", 8 | "indexNamespacesName": "index", 9 | "indexRelatedPagesName": "index", 10 | "indexExamplesName": "index", 11 | "mainPageInRoot": true, 12 | "mainPageName": "index" 13 | } 14 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | ../README.md -------------------------------------------------------------------------------- /docs/requirements.txt: -------------------------------------------------------------------------------- 1 | # Keep sorted. 2 | mkdocs 3 | mkdocs-material 4 | -------------------------------------------------------------------------------- /docs/test-framework-index.md: -------------------------------------------------------------------------------- 1 | ../test/README.md -------------------------------------------------------------------------------- /docs/troubles.md: -------------------------------------------------------------------------------- 1 | # Trouble shooting 2 | 3 | This page is a collection of possible solutions. 4 | 5 | 6 | ## GTKWave 7 | 8 | If you are trying to generate the traces to be visualized with GTKWave on Mr. Wolf and you are getting 9 | 10 | ``` 11 | TypeError: unsupported operand type(s) for <<: 'int' and 'NoneType' 12 | ``` 13 | 14 | It might be due to the different commits of the pulp-sdk. Try to change 15 | 16 | ``` 17 | gen_gtkw_icache_traces(gtkw, tp, 'sys.board.chip.soc.fc_icache', 1< 2**31 - 1: 49 | return x - 2**32 50 | elif x < -2**31: 51 | return x + 2**32 52 | else: 53 | return x 54 | 55 | 56 | def q_add(a, b): 57 | return q_sat(a + b) 58 | 59 | 60 | def q_sub(a, b): 61 | return q_sat(a - b) 62 | 63 | 64 | def q_mul(a, b, p): 65 | return q_roundnorm(a * b, p) 66 | 67 | 68 | def q_roundnorm(a, p): 69 | rounding = 1 << (p - 1) 70 | return q_sat((a + rounding) >> p) 71 | -------------------------------------------------------------------------------- /test/mrWolf/conv/test_lib/gen_stimuli.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import numpy as np 4 | 5 | 6 | ################## 7 | # compute_result # 8 | ################## 9 | 10 | 11 | def compute_result(result_parameter, inputs, env, fix_point): 12 | """ 13 | Funciton to generate the expected result of the testcase. 14 | 15 | Arguments 16 | --------- 17 | result_parameter: Either OutputArgument or ReturnValue (see pulp_dsp_test.py) 18 | inputs: Dict mapping name to the Argument, with arg.value, arg.dtype (and arg.length) 19 | env: Dict mapping the variable (SweepVariable or DynamicVariable) names to their value. 20 | fix_point: None (if no fixpoint is used) or decimal point 21 | """ 22 | if result_parameter.ctype == 'int32_t': 23 | if fix_point is None: 24 | a = inputs['srcA'].value.astype(np.int32) 25 | b = inputs['srcB'].value.astype(np.int32) 26 | return np.convolve(a, b, mode='full') 27 | else: 28 | raise RuntimeError("Fixpoint not implemented") 29 | elif result_parameter.ctype == 'float': 30 | raise RuntimeError("Float not implemented") 31 | else: 32 | raise RuntimeError("Unrecognized result type: %s" % result_parameter.ctype) 33 | 34 | 35 | ###################### 36 | # Fixpoint Functions # 37 | ###################### 38 | 39 | 40 | def q_sat(x): 41 | if x > 2**31 - 1: 42 | return x - 2**32 43 | elif x < -2**31: 44 | return x + 2**32 45 | else: 46 | return x 47 | 48 | 49 | def q_add(a, b): 50 | return q_sat(a + b) 51 | 52 | 53 | def q_sub(a, b): 54 | return q_sat(a - b) 55 | 56 | 57 | def q_mul(a, b, p): 58 | return q_roundnorm(a * b, p) 59 | 60 | 61 | def q_roundnorm(a, p): 62 | rounding = 1 << (p - 1) 63 | return q_sat((a + rounding) >> p) 64 | -------------------------------------------------------------------------------- /test/mrWolf/conv_valid/test_lib/gen_stimuli.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import numpy as np 4 | 5 | 6 | ################## 7 | # compute_result # 8 | ################## 9 | 10 | 11 | def compute_result(result_parameter, inputs, env, fix_point): 12 | """ 13 | Funciton to generate the expected result of the testcase. 14 | 15 | Arguments 16 | --------- 17 | result_parameter: Either OutputArgument or ReturnValue (see pulp_dsp_test.py) 18 | inputs: Dict mapping name to the Argument, with arg.value, arg.dtype (and arg.length) 19 | env: Dict mapping the variable (SweepVariable or DynamicVariable) names to their value. 20 | fix_point: None (if no fixpoint is used) or decimal point 21 | """ 22 | if result_parameter.ctype == 'int32_t': 23 | if fix_point is None: 24 | a = inputs['srcA'].value.astype(np.int32) 25 | b = inputs['srcB'].value.astype(np.int32) 26 | return np.convolve(a, b, mode='valid') 27 | else: 28 | raise RuntimeError("Fixpoint not implemented") 29 | elif result_parameter.ctype == 'float': 30 | raise RuntimeError("Float not implemented") 31 | else: 32 | raise RuntimeError("Unrecognized result type: %s" % result_parameter.ctype) 33 | 34 | 35 | ###################### 36 | # Fixpoint Functions # 37 | ###################### 38 | 39 | 40 | def q_sat(x): 41 | if x > 2**31 - 1: 42 | return x - 2**32 43 | elif x < -2**31: 44 | return x + 2**32 45 | else: 46 | return x 47 | 48 | 49 | def q_add(a, b): 50 | return q_sat(a + b) 51 | 52 | 53 | def q_sub(a, b): 54 | return q_sat(a - b) 55 | 56 | 57 | def q_mul(a, b, p): 58 | return q_roundnorm(a * b, p) 59 | 60 | 61 | def q_roundnorm(a, p): 62 | rounding = 1 << (p - 1) 63 | return q_sat((a + rounding) >> p) 64 | -------------------------------------------------------------------------------- /test/mrWolf/conv_valid_rep/test_lib/gen_stimuli.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import numpy as np 4 | 5 | 6 | ################## 7 | # compute_result # 8 | ################## 9 | 10 | 11 | def compute_result(result_parameter, inputs, env, fix_point): 12 | """ 13 | Funciton to generate the expected result of the testcase. 14 | 15 | Arguments 16 | --------- 17 | result_parameter: Either OutputArgument or ReturnValue (see pulp_dsp_test.py) 18 | inputs: Dict mapping name to the Argument, with arg.value, arg.dtype (and arg.length) 19 | env: Dict mapping the variable (SweepVariable or DynamicVariable) names to their value. 20 | fix_point: None (if no fixpoint is used) or decimal point 21 | """ 22 | if result_parameter.ctype == 'int32_t': 23 | if fix_point is None: 24 | a = inputs['srcA'].value.astype(np.int32) 25 | b = inputs['srcB'].value.astype(np.int32) 26 | return np.convolve(a, b, mode='valid') 27 | else: 28 | raise RuntimeError("Fixpoint not implemented") 29 | elif result_parameter.ctype == 'float': 30 | raise RuntimeError("Float not implemented") 31 | else: 32 | raise RuntimeError("Unrecognized result type: %s" % result_parameter.ctype) 33 | 34 | 35 | ###################### 36 | # Fixpoint Functions # 37 | ###################### 38 | 39 | 40 | def q_sat(x): 41 | if x > 2**31 - 1: 42 | return x - 2**32 43 | elif x < -2**31: 44 | return x + 2**32 45 | else: 46 | return x 47 | 48 | 49 | def q_add(a, b): 50 | return q_sat(a + b) 51 | 52 | 53 | def q_sub(a, b): 54 | return q_sat(a - b) 55 | 56 | 57 | def q_mul(a, b, p): 58 | return q_roundnorm(a * b, p) 59 | 60 | 61 | def q_roundnorm(a, p): 62 | rounding = 1 << (p - 1) 63 | return q_sat((a + rounding) >> p) 64 | -------------------------------------------------------------------------------- /test/mrWolf/mat_copy_stride/test_lib/gen_stimuli.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import numpy as np 4 | 5 | 6 | def compute_result(result_parameter, inputs, env, fix_point): 7 | dtype = np.int8 if result_parameter.ctype == "int8_t" else \ 8 | np.int16 if result_parameter.ctype == "int16_t" else \ 9 | np.int32 if result_parameter.ctype == "int32_t" else \ 10 | np.float32 11 | M = env['len_m'] 12 | N = env['len_n'] 13 | strideSrc = env['strideSrc'] 14 | strideDst = env['strideDst'] 15 | src = inputs['pSrc'].value.copy().astype(dtype).reshape((M, strideSrc)) 16 | dst = inputs['pDst'].value.copy().astype(dtype).reshape((M, strideDst)) 17 | dst[:M, :N] = src[:M, :N] 18 | return dst.reshape((env['len_dst'], )) 19 | -------------------------------------------------------------------------------- /test/mrWolf/mat_fill_I/test_lib/gen_stimuli.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import numpy as np 4 | 5 | 6 | def compute_result(result_parameter, inputs, env, fix_point): 7 | dtype = np.int8 if result_parameter.ctype == "int8_t" else \ 8 | np.int16 if result_parameter.ctype == "int16_t" else \ 9 | np.int32 if result_parameter.ctype == "int32_t" else \ 10 | np.float32 11 | result = np.eye(env['len_n']).astype(dtype) 12 | if fix_point: 13 | result = result << fix_point 14 | return result.reshape((env['len_mat'], )) 15 | -------------------------------------------------------------------------------- /test/mrWolf/mat_fill_I_stride/test_lib/gen_stimuli.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import numpy as np 4 | 5 | 6 | def compute_result(result_parameter, inputs, env, fix_point): 7 | dtype = np.int8 if result_parameter.ctype == "int8_t" else \ 8 | np.int16 if result_parameter.ctype == "int16_t" else \ 9 | np.int32 if result_parameter.ctype == "int32_t" else \ 10 | np.float32 11 | N = env['len_n'] 12 | stride = env['stride'] 13 | result = inputs['pDst'].value.copy().astype(dtype).reshape((N, stride)) 14 | result[:N, :N] = np.eye(N).astype(dtype) 15 | if fix_point is not None: 16 | result[:N, :N] = result[:N, :N] << fix_point 17 | return result.reshape((env['len_mat'], )) 18 | -------------------------------------------------------------------------------- /test/mrWolf/mat_fill_stride/test_lib/gen_stimuli.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import numpy as np 4 | 5 | 6 | def compute_result(result_parameter, inputs, env, fix_point): 7 | dtype = np.int8 if result_parameter.ctype == "int8_t" else \ 8 | np.int16 if result_parameter.ctype == "int16_t" else \ 9 | np.int32 if result_parameter.ctype == "int32_t" else \ 10 | np.float32 11 | M = env['len_m'] 12 | N = env['len_n'] 13 | stride = env['stride'] 14 | value = inputs['value'].value 15 | result = inputs['pDst'].value.copy().astype(dtype).reshape((M, stride)) 16 | result[:M, :N] = value 17 | return result.reshape((env['len_mat'], )) 18 | -------------------------------------------------------------------------------- /test/mrWolf/mat_fma/test_fct/clean_up.c: -------------------------------------------------------------------------------- 1 | 2 | // clean up code 3 | i = i*iSTEP; 4 | j = j*jSTEP; 5 | k = k*kSTEP; 6 | //check if every index is nicely finished 7 | if(i == M && j == N && k == O){ 8 | 9 | } else { 10 | uint32_t iEnd = i; 11 | uint32_t jEnd = j; 12 | uint32_t kEnd = k; 13 | 14 | // clean up for j 15 | if(jEnd != N){ 16 | for(i = 0; i < iEnd; i++){ 17 | for(k = 0; k < kEnd; k++){ 18 | int32_t sum = 0; 19 | for(j = jEnd; j < N; j++){ 20 | sum = sum + pSrcA[i*N + j]*pSrcB[j*O + k]; 21 | } 22 | pDstC[i*O+k] += sum; 23 | } 24 | } 25 | } 26 | 27 | // clean up for k 28 | if(kEnd != O){ 29 | for(i = 0; i < iEnd; i++){ 30 | for(k = kEnd; k < O; k++){ 31 | int32_t sum = 0; 32 | for(j=0; j= O){ 8 | 9 | } else { 10 | uint32_t iEnd = i; 11 | uint32_t jEnd = j; 12 | uint32_t kEnd = k >= O ? O : k; 13 | 14 | // clean up for j 15 | if(jEnd != N){ 16 | for(k = core_id*kSTEP; k < kEnd; k+=nPE*kSTEP){ 17 | for(int step = 0; step < kSTEP; step++){ 18 | for(i = 0; i < iEnd; i++){ 19 | int32_t sum = 0; 20 | for(j = jEnd; j < N; j++){ 21 | sum = sum + pSrcA[i*N + j]*pSrcB[j*O + k + step]; 22 | } 23 | pDstC[i*O+k+step] += sum; 24 | } 25 | } 26 | } 27 | } 28 | 29 | // clean up for i 30 | if(iEnd != M){ 31 | for(k = core_id*kSTEP; k < kEnd; k+=nPE*kSTEP){ 32 | for(int step = 0; step < kSTEP; step++){ 33 | for(i = iEnd; i < M; i++){ 34 | int32_t sum = 0; 35 | for(j = 0; j < N; j++){ 36 | sum = sum + pSrcA[i*N + j]*pSrcB[j*O + k + step]; 37 | } 38 | pDstC[i*O + k + step] = sum; 39 | } 40 | } 41 | } 42 | } 43 | 44 | // clean up for k 45 | for(k = kEnd; k < O; k++){ 46 | for(i = 0; i < M; i++){ 47 | int32_t sum = 0; 48 | for(j=0; j 6 | 7 | void plp_mat_fma_i16s_rv32im( 8 | const int16_t * __restrict__ pSrcA, 9 | const int16_t * __restrict__ pSrcB, 10 | uint32_t M, 11 | uint32_t N, 12 | uint32_t O, 13 | int32_t * __restrict__ pDstC); 14 | 15 | #endif -------------------------------------------------------------------------------- /test/mrWolf/mat_fma/test_fct/fc_ibex/fma_fct32.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __FCT_H__ 3 | #define __FCT_H__ 4 | 5 | #include 6 | 7 | void plp_mat_fma_i32s_rv32im( 8 | const int32_t * __restrict__ pSrcA, 9 | const int32_t * __restrict__ pSrcB, 10 | uint32_t M, 11 | uint32_t N, 12 | uint32_t O, 13 | int32_t * __restrict__ pDstC); 14 | 15 | #endif -------------------------------------------------------------------------------- /test/mrWolf/mat_fma/test_fct/fc_ibex/fma_fct8.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __FCT_H__ 3 | #define __FCT_H__ 4 | 5 | #include 6 | 7 | void plp_mat_fma_i16s_rv32im( 8 | const int16_t * __restrict__ pSrcA, 9 | const int16_t * __restrict__ pSrcB, 10 | uint32_t M, 11 | uint32_t N, 12 | uint32_t O, 13 | int32_t * __restrict__ pDstC); 14 | 15 | #endif -------------------------------------------------------------------------------- /test/mrWolf/mat_fma/test_fct/singlecore_riscy/Makefile: -------------------------------------------------------------------------------- 1 | 2 | #LIB=/home/xiaywang/pulp/PULP-DSP/lib/libmyplpdsp.a 3 | 4 | IDIR=/home/xiaywang/pulp/PULP-DSP/include 5 | 6 | PULP_APP = test 7 | 8 | PULP_APP_CL_SRCS = cluster.c fct32.c fct32p.c fct16.c fct16p.c fct8.c fct8p.c 9 | PULP_APP_FC_SRCS = test.c 10 | 11 | PULP_LDFLAGS += -lplpdsp 12 | #PULP_LDFLAGS += $(LIB) 13 | PULP_CFLAGS += -O3 -g 14 | 15 | ifdef TEST_8 16 | PULP_CFLAGS += -DTEST_8 17 | endif 18 | ifdef TEST_16 19 | PULP_CFLAGS += -DTEST_16 20 | endif 21 | ifdef P_TEST_8 22 | PULP_CFLAGS += -DP_TEST_8 23 | endif 24 | ifdef P_TEST_16 25 | PULP_CFLAGS += -DP_TEST_16 26 | endif 27 | ifdef P_TEST_32 28 | PULP_CFLAGS += -DP_TEST_32 29 | endif 30 | 31 | 32 | ifeq '$(PULP_RTOS)' 'pmsis' 33 | PULP_CFLAGS += -DRTOS_PMSIS 34 | include $(RULES_DIR)/pmsis_rules.mk 35 | else 36 | include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk 37 | endif 38 | 39 | -------------------------------------------------------------------------------- /test/mrWolf/mat_fma/test_fct/singlecore_riscy/cluster.h: -------------------------------------------------------------------------------- 1 | #ifndef __INC_CLUSTER_H__ 2 | #define __INC_CLUSTER_H__ 3 | 4 | static void do_bench_0(hal_perf_t *perf, int events); 5 | //static void cluster_entry(); 6 | void cluster_entry(void *arg); 7 | static void do_bench_0_pe(void *arg); 8 | //void cluster_entry(void *arg, void * v_p, void * u_p); 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /test/mrWolf/mat_fma/test_fct/singlecore_riscy/fct16.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __FCT_H__ 3 | #define __FCT_H__ 4 | 5 | #include "rtos_hal.h" 6 | #include 7 | 8 | void plp_mat_mult_i16s_xpulpv2( 9 | const int16_t * __restrict__ pSrcA, 10 | const int16_t * __restrict__ pSrcB, 11 | uint32_t M, 12 | uint32_t N, 13 | uint32_t O, 14 | int32_t * __restrict__ pDstC); 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /test/mrWolf/mat_fma/test_fct/singlecore_riscy/fct16p.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __FCT_H__ 3 | #define __FCT_H__ 4 | 5 | #include "rtos_hal.h" 6 | #include 7 | 8 | typedef struct{ 9 | const int16_t * __restrict__ pSrcA; 10 | const int16_t * __restrict__ pSrcB; 11 | uint32_t M; 12 | uint32_t N; 13 | uint32_t O; 14 | uint32_t nPE; 15 | int32_t * __restrict__ pDstC; 16 | }mat_mult_p_args; 17 | 18 | void plp_mat_mult_i16vp_xpulpv2( 19 | void* args 20 | ); 21 | 22 | #endif 23 | -------------------------------------------------------------------------------- /test/mrWolf/mat_fma/test_fct/singlecore_riscy/fct32.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __FCT_H__ 3 | #define __FCT_H__ 4 | 5 | #include 6 | 7 | void plp_mat_mult_i32s_xpulpv2( 8 | const int32_t * __restrict__ pSrcA, 9 | const int32_t * __restrict__ pSrcB, 10 | uint32_t M, 11 | uint32_t N, 12 | uint32_t O, 13 | int32_t * __restrict__ pDstC); 14 | 15 | #endif -------------------------------------------------------------------------------- /test/mrWolf/mat_fma/test_fct/singlecore_riscy/fct32p.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __FCT_H__ 3 | #define __FCT_H__ 4 | 5 | #include "rtos_hal.h" 6 | #include 7 | 8 | typedef struct{ 9 | const int32_t * __restrict__ pSrcA; 10 | const int32_t * __restrict__ pSrcB; 11 | uint32_t M; 12 | uint32_t N; 13 | uint32_t O; 14 | uint32_t nPE; 15 | int32_t * __restrict__ pDstC; 16 | }mat_mult_p_args; 17 | 18 | void plp_mat_mult_i32p_xpulpv2( 19 | void* args 20 | ); 21 | 22 | #endif -------------------------------------------------------------------------------- /test/mrWolf/mat_fma/test_fct/singlecore_riscy/fct8.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __FCT_H__ 3 | #define __FCT_H__ 4 | 5 | #include "rtos_hal.h" 6 | #include 7 | 8 | void plp_mat_mult_i8s_xpulpv2( 9 | const int8_t * __restrict__ pSrcA, 10 | const int8_t * __restrict__ pSrcB, 11 | uint32_t M, 12 | uint32_t N, 13 | uint32_t O, 14 | int32_t * __restrict__ pDstC); 15 | 16 | #endif -------------------------------------------------------------------------------- /test/mrWolf/mat_fma/test_fct/singlecore_riscy/fct8p.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __FCT_H__ 3 | #define __FCT_H__ 4 | 5 | #include "rtos_hal.h" 6 | #include 7 | 8 | typedef struct{ 9 | const int8_t * __restrict__ pSrcA; 10 | const int8_t * __restrict__ pSrcB; 11 | uint32_t M; 12 | uint32_t N; 13 | uint32_t O; 14 | uint32_t nPE; 15 | int32_t * __restrict__ pDstC; 16 | }mat_mult_p_args; 17 | 18 | void plp_mat_mult_i8vp_xpulpv2( 19 | void* args 20 | ); 21 | 22 | #endif 23 | -------------------------------------------------------------------------------- /test/mrWolf/mat_fma/test_fct/singlecore_riscy/test.c: -------------------------------------------------------------------------------- 1 | #include "rtos_hal.h" 2 | #include "stdio.h" 3 | #include "cluster.h" 4 | 5 | 6 | 7 | int main(){ 8 | 9 | #ifdef RTOS_PMSIS 10 | struct pi_device cluster_dev = {0}; 11 | struct pi_cluster_conf conf; 12 | struct pi_cluster_task cluster_task = {0}; 13 | pi_cluster_task(&cluster_task, cluster_entry, NULL); 14 | pi_cluster_conf_init(&conf); 15 | conf.id=0; 16 | pi_open_from_conf(&cluster_dev, &conf); 17 | pi_cluster_open(&cluster_dev); 18 | pi_cluster_send_task_to_cl(&cluster_dev, &cluster_task); 19 | pi_cluster_close(&cluster_dev); 20 | #else 21 | rt_cluster_mount(1, 0, 0, NULL); 22 | rt_cluster_call(NULL, 0, cluster_entry, NULL, NULL, 0, 0, 0, NULL); 23 | rt_cluster_mount(0, 0, 0, NULL); 24 | #endif 25 | 26 | return 0; 27 | 28 | } 29 | 30 | -------------------------------------------------------------------------------- /test/mrWolf/mat_fma/test_lib/fc_ibex/Makefile: -------------------------------------------------------------------------------- 1 | 2 | #LIB=/home/xiaywang/pulp/PULP-DSP/lib/libmyplpdsp.a 3 | 4 | IDIR=../../../../../include 5 | 6 | PULP_APP = test 7 | 8 | PULP_APP_FC_SRCS = test.c 9 | 10 | PULP_LDFLAGS += -lplpdsp 11 | #PULP_LDFLAGS += $(LIB) 12 | PULP_CFLAGS += -I$(IDIR) -O3 -g 13 | 14 | include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk 15 | -------------------------------------------------------------------------------- /test/mrWolf/mat_fma/test_lib/singlecore_riscy/Makefile: -------------------------------------------------------------------------------- 1 | 2 | #LIB=/home/xiaywang/pulp/PULP-DSP/lib/libmyplpdsp.a 3 | 4 | IDIR=../../../../../include 5 | 6 | PULP_APP = test 7 | 8 | PULP_APP_CL_SRCS = cluster.c 9 | PULP_APP_FC_SRCS = test.c 10 | 11 | PULP_LDFLAGS += -lplpdsp 12 | #PULP_LDFLAGS += $(LIB) 13 | PULP_CFLAGS += -I$(IDIR) -O3 -g 14 | 15 | include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk 16 | -------------------------------------------------------------------------------- /test/mrWolf/mat_fma/test_lib/singlecore_riscy/cluster.h: -------------------------------------------------------------------------------- 1 | #ifndef __INC_CLUSTER_H__ 2 | #define __INC_CLUSTER_H__ 3 | 4 | static void do_bench_0(hal_perf_t *perf, int events); 5 | //static void cluster_entry(); 6 | void cluster_entry(void *arg); 7 | static void do_bench_0_pe(void *arg); 8 | //void cluster_entry(void *arg, void * v_p, void * u_p); 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /test/mrWolf/mat_fma/test_lib/singlecore_riscy/test.c: -------------------------------------------------------------------------------- 1 | #include "rtos_hal.h" 2 | #include "stdio.h" 3 | #include "cluster.h" 4 | 5 | 6 | 7 | int main(){ 8 | 9 | // Before being used, the cluster must be mounter, for example in case it must be 10 | // turned on. 11 | rt_cluster_mount(1, 0, 0, NULL); 12 | 13 | // This is the most basic call we can do to the cluster with all default 14 | // parameters (default stack size, max number of cores, etc) and is 15 | // synchronous (last event parameter is NULL) which means we are blocked 16 | // until the call is finished 17 | rt_cluster_call(NULL, 0, cluster_entry, NULL, NULL, 0, 0, 0, NULL); 18 | 19 | // It must then be unmounted when it is not needed anymore so that it is turned off 20 | rt_cluster_mount(0, 0, 0, NULL); 21 | 22 | 23 | return 0; 24 | 25 | } 26 | 27 | -------------------------------------------------------------------------------- /test/mrWolf/mat_inv/test_lib/gen_stimuli.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import numpy as np 4 | 5 | def compute_result(result_parameter, inputs, env, fix_point): 6 | """ 7 | Funciton to generate the expected result of the testcase. 8 | 9 | Arguments 10 | --------- 11 | result_parameter: Either OutputArgument or ReturnValue (see pulp_dsp_test.py) 12 | inputs: Dict mapping name to the Argument, with arg.value, arg.ctype (and arg.length) 13 | env: Dict mapping the variable (SweepVariable or DynamicVariable) names to their value. 14 | fix_point: None (if no fixpoint is used) or decimal point 15 | """ 16 | 17 | A = inputs['pSrc'].value.reshape((env['len_n'], env['len_n'])) 18 | 19 | if "return_value" in result_parameter.name: 20 | return 0 if is_invertible(A) else 1 21 | else: 22 | return np.linalg.inv(A).reshape((env['len_mat'], )) 23 | 24 | 25 | def is_invertible(A): 26 | return A.shape[0] == A.shape[1] and np.linalg.matrix_rank(A) == A.shape[0] 27 | -------------------------------------------------------------------------------- /test/mrWolf/mat_mul/test_fct/clean_up.c: -------------------------------------------------------------------------------- 1 | 2 | // clean up code 3 | i = i*iSTEP; 4 | j = j*jSTEP; 5 | k = k*kSTEP; 6 | //check if every index is nicely finished 7 | if(i == M && j == N && k == O){ 8 | 9 | } else { 10 | uint32_t iEnd = i; 11 | uint32_t jEnd = j; 12 | uint32_t kEnd = k; 13 | 14 | // clean up for j 15 | if(jEnd != N){ 16 | for(i = 0; i < iEnd; i++){ 17 | for(k = 0; k < kEnd; k++){ 18 | int32_t sum = 0; 19 | for(j = jEnd; j < N; j++){ 20 | sum = sum + pSrcA[i*N + j]*pSrcB[j*O + k]; 21 | } 22 | pDstC[i*O+k] += sum; 23 | } 24 | } 25 | } 26 | 27 | // clean up for k 28 | if(kEnd != O){ 29 | for(i = 0; i < iEnd; i++){ 30 | for(k = kEnd; k < O; k++){ 31 | int32_t sum = 0; 32 | for(j=0; j= O){ 8 | 9 | } else { 10 | uint32_t iEnd = i; 11 | uint32_t jEnd = j; 12 | uint32_t kEnd = k >= O ? O : k; 13 | 14 | // clean up for j 15 | if(jEnd != N){ 16 | for(k = core_id*kSTEP; k < kEnd; k+=nPE*kSTEP){ 17 | for(int step = 0; step < kSTEP; step++){ 18 | for(i = 0; i < iEnd; i++){ 19 | int32_t sum = 0; 20 | for(j = jEnd; j < N; j++){ 21 | sum = sum + pSrcA[i*N + j]*pSrcB[j*O + k + step]; 22 | } 23 | pDstC[i*O+k+step] += sum; 24 | } 25 | } 26 | } 27 | } 28 | 29 | // clean up for i 30 | if(iEnd != M){ 31 | for(k = core_id*kSTEP; k < kEnd; k+=nPE*kSTEP){ 32 | for(int step = 0; step < kSTEP; step++){ 33 | for(i = iEnd; i < M; i++){ 34 | int32_t sum = 0; 35 | for(j = 0; j < N; j++){ 36 | sum = sum + pSrcA[i*N + j]*pSrcB[j*O + k + step]; 37 | } 38 | pDstC[i*O + k + step] = sum; 39 | } 40 | } 41 | } 42 | } 43 | 44 | // clean up for k 45 | for(k = kEnd; k < O; k++){ 46 | for(i = 0; i < M; i++){ 47 | int32_t sum = 0; 48 | for(j=0; j 6 | 7 | void plp_mat_mult_i16s_rv32im( 8 | const int16_t * __restrict__ pSrcA, 9 | const int16_t * __restrict__ pSrcB, 10 | uint32_t M, 11 | uint32_t N, 12 | uint32_t O, 13 | int32_t * __restrict__ pDstC); 14 | 15 | #endif -------------------------------------------------------------------------------- /test/mrWolf/mat_mul/test_fct/fc_ibex/mul_fct32.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __FCT_H__ 3 | #define __FCT_H__ 4 | 5 | #include 6 | 7 | void plp_mat_mult_i32s_rv32im( 8 | const int32_t * __restrict__ pSrcA, 9 | const int32_t * __restrict__ pSrcB, 10 | uint32_t M, 11 | uint32_t N, 12 | uint32_t O, 13 | int32_t * __restrict__ pDstC); 14 | 15 | #endif -------------------------------------------------------------------------------- /test/mrWolf/mat_mul/test_fct/fc_ibex/mul_fct8.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __FCT_H__ 3 | #define __FCT_H__ 4 | 5 | #include 6 | 7 | void plp_mat_mult_i8s_rv32im( 8 | const int8_t * __restrict__ pSrcA, 9 | const int8_t * __restrict__ pSrcB, 10 | uint32_t M, 11 | uint32_t N, 12 | uint32_t O, 13 | int32_t * __restrict__ pDstC); 14 | 15 | #endif -------------------------------------------------------------------------------- /test/mrWolf/mat_mul/test_fct/singlecore_riscy/Makefile: -------------------------------------------------------------------------------- 1 | 2 | #LIB=/home/xiaywang/pulp/PULP-DSP/lib/libmyplpdsp.a 3 | 4 | IDIR=/home/xiaywang/pulp/PULP-DSP/include 5 | 6 | PULP_APP = test 7 | 8 | PULP_APP_CL_SRCS = cluster.c fct32.c fct32p.c fct16.c fct16p.c fct8.c fct8p.c 9 | PULP_APP_FC_SRCS = test.c 10 | 11 | PULP_LDFLAGS += -lplpdsp 12 | #PULP_LDFLAGS += $(LIB) 13 | PULP_CFLAGS += -O3 -g 14 | 15 | ifdef TEST_8 16 | PULP_CFLAGS += -DTEST_8 17 | endif 18 | ifdef TEST_16 19 | PULP_CFLAGS += -DTEST_16 20 | endif 21 | ifdef P_TEST_8 22 | PULP_CFLAGS += -DP_TEST_8 23 | endif 24 | ifdef P_TEST_16 25 | PULP_CFLAGS += -DP_TEST_16 26 | endif 27 | ifdef P_TEST_32 28 | PULP_CFLAGS += -DP_TEST_32 29 | endif 30 | 31 | 32 | ifeq '$(PULP_RTOS)' 'pmsis' 33 | PULP_CFLAGS += -DRTOS_PMSIS 34 | include $(RULES_DIR)/pmsis_rules.mk 35 | else 36 | include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk 37 | endif 38 | 39 | -------------------------------------------------------------------------------- /test/mrWolf/mat_mul/test_fct/singlecore_riscy/cluster.h: -------------------------------------------------------------------------------- 1 | #ifndef __INC_CLUSTER_H__ 2 | #define __INC_CLUSTER_H__ 3 | 4 | static void do_bench_0(hal_perf_t *perf, int events); 5 | //static void cluster_entry(); 6 | void cluster_entry(void *arg); 7 | static void do_bench_0_pe(void *arg); 8 | //void cluster_entry(void *arg, void * v_p, void * u_p); 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /test/mrWolf/mat_mul/test_fct/singlecore_riscy/fct16.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __FCT_H__ 3 | #define __FCT_H__ 4 | 5 | #include "rtos_hal.h" 6 | #include 7 | 8 | void plp_mat_mult_i16s_xpulpv2( 9 | const int16_t * __restrict__ pSrcA, 10 | const int16_t * __restrict__ pSrcB, 11 | uint32_t M, 12 | uint32_t N, 13 | uint32_t O, 14 | int32_t * __restrict__ pDstC); 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /test/mrWolf/mat_mul/test_fct/singlecore_riscy/fct16p.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __FCT_H__ 3 | #define __FCT_H__ 4 | 5 | #include "rtos_hal.h" 6 | #include 7 | 8 | typedef struct{ 9 | const int16_t * __restrict__ pSrcA; 10 | const int16_t * __restrict__ pSrcB; 11 | uint32_t M; 12 | uint32_t N; 13 | uint32_t O; 14 | uint32_t nPE; 15 | int32_t * __restrict__ pDstC; 16 | }mat_mult_p_args; 17 | 18 | void plp_mat_mult_i16vp_xpulpv2( 19 | void* args 20 | ); 21 | 22 | #endif 23 | -------------------------------------------------------------------------------- /test/mrWolf/mat_mul/test_fct/singlecore_riscy/fct32.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __FCT_H__ 3 | #define __FCT_H__ 4 | 5 | #include 6 | 7 | void plp_mat_mult_i32s_xpulpv2( 8 | const int32_t * __restrict__ pSrcA, 9 | const int32_t * __restrict__ pSrcB, 10 | uint32_t M, 11 | uint32_t N, 12 | uint32_t O, 13 | int32_t * __restrict__ pDstC); 14 | 15 | #endif -------------------------------------------------------------------------------- /test/mrWolf/mat_mul/test_fct/singlecore_riscy/fct32p.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __FCT_H__ 3 | #define __FCT_H__ 4 | 5 | #include "rtos_hal.h" 6 | #include 7 | 8 | typedef struct{ 9 | const int32_t * __restrict__ pSrcA; 10 | const int32_t * __restrict__ pSrcB; 11 | uint32_t M; 12 | uint32_t N; 13 | uint32_t O; 14 | uint32_t nPE; 15 | int32_t * __restrict__ pDstC; 16 | }mat_mult_p_args; 17 | 18 | void plp_mat_mult_i32p_xpulpv2( 19 | void* args 20 | ); 21 | 22 | #endif -------------------------------------------------------------------------------- /test/mrWolf/mat_mul/test_fct/singlecore_riscy/fct8.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __FCT_H__ 3 | #define __FCT_H__ 4 | 5 | #include "rtos_hal.h" 6 | #include 7 | 8 | void plp_mat_mult_i8s_xpulpv2( 9 | const int8_t * __restrict__ pSrcA, 10 | const int8_t * __restrict__ pSrcB, 11 | uint32_t M, 12 | uint32_t N, 13 | uint32_t O, 14 | int32_t * __restrict__ pDstC); 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /test/mrWolf/mat_mul/test_fct/singlecore_riscy/fct8p.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __FCT_H__ 3 | #define __FCT_H__ 4 | 5 | #include "rtos_hal.h" 6 | #include 7 | 8 | typedef struct{ 9 | const int8_t * __restrict__ pSrcA; 10 | const int8_t * __restrict__ pSrcB; 11 | uint32_t M; 12 | uint32_t N; 13 | uint32_t O; 14 | uint32_t nPE; 15 | int32_t * __restrict__ pDstC; 16 | }mat_mult_p_args; 17 | 18 | void plp_mat_mult_i8vp_xpulpv2( 19 | void* args 20 | ); 21 | 22 | #endif 23 | -------------------------------------------------------------------------------- /test/mrWolf/mat_mul/test_fct/singlecore_riscy/test.c: -------------------------------------------------------------------------------- 1 | #include "rtos_hal.h" 2 | #include "stdio.h" 3 | #include "cluster.h" 4 | 5 | 6 | 7 | int main(){ 8 | 9 | #ifdef RTOS_PMSIS 10 | struct pi_device cluster_dev = {0}; 11 | struct pi_cluster_conf conf; 12 | struct pi_cluster_task cluster_task = {0}; 13 | pi_cluster_task(&cluster_task, cluster_entry, NULL); 14 | pi_cluster_conf_init(&conf); 15 | conf.id=0; 16 | pi_open_from_conf(&cluster_dev, &conf); 17 | pi_cluster_open(&cluster_dev); 18 | pi_cluster_send_task_to_cl(&cluster_dev, &cluster_task); 19 | pi_cluster_close(&cluster_dev); 20 | #else 21 | rt_cluster_mount(1, 0, 0, NULL); 22 | rt_cluster_call(NULL, 0, cluster_entry, NULL, NULL, 0, 0, 0, NULL); 23 | rt_cluster_mount(0, 0, 0, NULL); 24 | #endif 25 | 26 | return 0; 27 | 28 | } 29 | 30 | -------------------------------------------------------------------------------- /test/mrWolf/mat_scale/test_lib/testset.cfg: -------------------------------------------------------------------------------- 1 | from plptest import * 2 | 3 | TestConfig = c = {} 4 | c['testsets'] = [ 5 | Testset( 6 | name = "int", 7 | files = ["testset_int.cfg"] 8 | ), 9 | Testset( 10 | name = "float", 11 | files = ["testset_float.cfg"] 12 | ) 13 | ] -------------------------------------------------------------------------------- /test/mrWolf/mat_scale_stride/test_lib/testset.cfg: -------------------------------------------------------------------------------- 1 | from plptest import * 2 | 3 | TestConfig = c = {} 4 | c['testsets'] = [ 5 | Testset( 6 | name = "int", 7 | files = ["testset_int.cfg"] 8 | ), 9 | Testset( 10 | name = "float", 11 | files = ["testset_float.cfg"] 12 | ) 13 | ] -------------------------------------------------------------------------------- /test/mrWolf/mat_trans/test_lib/gen_stimuli.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | def compute_result(result_parameter, inputs, env, fix_point): 4 | assert fix_point is None 5 | assert result_parameter.ctype == inputs['pSrc'].ctype 6 | src = inputs['pSrc'].value.reshape((env['len_m'], env['len_n'])) 7 | dst = src.T.reshape((env['len_mat'], )) 8 | return dst 9 | -------------------------------------------------------------------------------- /test/mrWolf/scale/mat_scale/test_lib/testset.cfg: -------------------------------------------------------------------------------- 1 | from plptest import * 2 | 3 | TestConfig = c = {} 4 | c['testsets'] = [ 5 | Testset( 6 | name = "int", 7 | files = ["testset_int.cfg"] 8 | ), 9 | Testset( 10 | name = "float", 11 | files = ["testset_float.cfg"] 12 | ) 13 | ] -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_f32_riscy/Makefile: -------------------------------------------------------------------------------- 1 | PULP_APP = test 2 | PULP_APP_FC_SRCS = test.c 3 | PULP_APP_CL_SRCS = cluster.c 4 | PULP_LDFLAGS += -lplpdsp 5 | PULP_CFLAGS += -I$(CONFIG_BUILD_DIR) -O3 -g 6 | ifdef TFLAGS 7 | PULP_CFLAGS += $(TFLAGS) 8 | endif 9 | include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk 10 | PULP_CFLAGS += -D DATA=$(CONFIG_BUILD_DIR)$(BUILD_DIR_EXT) 11 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_f32_riscy/cluster.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__CLUSTER_H__ 2 | #define __PULP_DSP_TEST__CLUSTER_H__ 3 | void cluster_entry(void *arg); 4 | #endif//__PULP_DSP_TEST__CLUSTER_H__ 5 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_f32_riscy/common.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__COMMON_H__ 2 | #define __PULP_DSP_TEST__COMMON_H__ 3 | 4 | typedef union { 5 | uint32_t u; 6 | float f; 7 | } __u2f; 8 | 9 | #define ABS(x) (x > 0 ? x : -x) 10 | 11 | #endif//__PULP_DSP_TEST__COMMON_H__ 12 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_f32_riscy/data_t0.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T0_H__ 2 | #define __PULP_DSP_TEST__DATA_T0_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | float* t0__pSrc; 8 | RT_L2_DATA uint32_t t0__pSrc__l2__int[1] = { 9 | 0xbe9f8ee8 10 | }; 11 | 12 | float* t0__pSrc__l2 = (float*)((void*)t0__pSrc__l2__int); 13 | 14 | __u2f t0__scaleFactor = {.u = 0xbf1c025eU}; 15 | 16 | float* t0__pDst; 17 | RT_L2_DATA uint32_t t0__pDst__l2__int[1] = { 18 | 0x0 19 | }; 20 | 21 | float* t0__pDst__l2 = (float*)((void*)t0__pDst__l2__int); 22 | 23 | uint32_t t0__blockSize = 1; 24 | 25 | RT_L2_DATA uint32_t t0__pDst__reference__int[1] = { 26 | 0x3e42791e 27 | }; 28 | 29 | float* t0__pDst__reference = (float*)((void*)t0__pDst__reference__int); 30 | 31 | 32 | #endif//__PULP_DSP_TEST__DATA_T0_H__ 33 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_f32_riscy/data_t1.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T1_H__ 2 | #define __PULP_DSP_TEST__DATA_T1_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | float* t1__pSrc; 8 | RT_L2_DATA uint32_t t1__pSrc__l2__int[24] = { 9 | 0x3ea160b2, 0x3f7d7f69, 0xbea0bb50, 0xbf3def2f, 0xbee8360e, 0x3f5b70d4, 0x3edab859, 0x3d6b48cf, 10 | 0x3e71167b, 0xbf38c24a, 0xbf62d1a0, 0xbe66d031, 0x3e950ddf, 0x3f641951, 0xbefc81c9, 0x3e9233ed, 11 | 0xbf42a72f, 0x3f30ba7c, 0x3eb33221, 0x3f12b60d, 0x3f5b9aef, 0x3e6612c8, 0x3f0b190a, 0xbef9c906 12 | }; 13 | 14 | float* t1__pSrc__l2 = (float*)((void*)t1__pSrc__l2__int); 15 | 16 | __u2f t1__scaleFactor = {.u = 0x3d828524U}; 17 | 18 | float* t1__pDst; 19 | RT_L2_DATA uint32_t t1__pDst__l2__int[24] = { 20 | 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 21 | 0x0, 0x0, 0x0, 0x0, 0x0 22 | }; 23 | 24 | float* t1__pDst__l2 = (float*)((void*)t1__pDst__l2__int); 25 | 26 | uint32_t t1__blockSize = 24; 27 | 28 | RT_L2_DATA uint32_t t1__pDst__reference__int[24] = { 29 | 0x3ca48e11, 0x3d813e8a, 0xbca3e56d, 0xbd41ac7c, 0xbcecc870, 0x3d5fc2d8, 0x3cdf06bb, 0x3b6feaae, 30 | 0x3c75d59a, 0xbd3c6581, 0xbd6748d4, 0xbc6b5b87, 0x3c97fd21, 0x3d6896f9, 0xbd00bd3b, 0x3c9514d0, 31 | 0xbd467c44, 0x3d343539, 0x3cb6b94e, 0x3d159980, 0x3d5fedc7, 0x3c6a9a63, 0x3d0dd61d, 0xbcfeb3fb 32 | }; 33 | 34 | float* t1__pDst__reference = (float*)((void*)t1__pDst__reference__int); 35 | 36 | 37 | #endif//__PULP_DSP_TEST__DATA_T1_H__ 38 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_f32_riscy/data_t2.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T2_H__ 2 | #define __PULP_DSP_TEST__DATA_T2_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | float* t2__pSrc; 8 | RT_L2_DATA uint32_t t2__pSrc__l2__int[25] = { 9 | 0x3f1bb8e6, 0xbf335eeb, 0xbf26eefa, 0x3f3675f0, 0x3e5a1243, 0xbf251787, 0xbe150270, 0x3f7339ca, 10 | 0xbf31318a, 0x3eeac35c, 0xbf0da337, 0xbea6dc69, 0xbe6ed39c, 0x3ee31a83, 0xbf6a2e43, 0x3f0bfe28, 11 | 0xbde1afe0, 0x3cc40787, 0x3f548929, 0x3f3766fa, 0x3e3637d7, 0x3daecb1d, 0x3e6c1779, 0xbf34b39d, 12 | 0x3f098d2e 13 | }; 14 | 15 | float* t2__pSrc__l2 = (float*)((void*)t2__pSrc__l2__int); 16 | 17 | __u2f t2__scaleFactor = {.u = 0xbed5816cU}; 18 | 19 | float* t2__pDst; 20 | RT_L2_DATA uint32_t t2__pDst__l2__int[25] = { 21 | 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 22 | 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 23 | }; 24 | 25 | float* t2__pDst__l2 = (float*)((void*)t2__pDst__l2__int); 26 | 27 | uint32_t t2__blockSize = 25; 28 | 29 | RT_L2_DATA uint32_t t2__pDst__reference__int[25] = { 30 | 0xbe81df91, 0x3e9598a8, 0x3e8b393b, 0xbe982c5f, 0xbdb5df71, 0x3e89b00a, 0x3d788cb9, 0xbecada0c, 31 | 0x3e93c7cd, 0xbe43cb3b, 0x3e6c40d0, 0x3e0b29bf, 0x3dc72ece, 0xbe3d67df, 0x3ec34ee2, 0xbe69827b, 32 | 0x3d3c396e, 0xbc237d5e, 0xbeb14192, 0xbe98f566, 0xbd97f895, 0xbd11c75d, 0xbdc4e6e3, 0x3e96b4cc, 33 | 0xbe657003 34 | }; 35 | 36 | float* t2__pDst__reference = (float*)((void*)t2__pDst__reference__int); 37 | 38 | 39 | #endif//__PULP_DSP_TEST__DATA_T2_H__ 40 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_f32_riscy/data_t3.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T3_H__ 2 | #define __PULP_DSP_TEST__DATA_T3_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | float* t3__pSrc; 8 | RT_L2_DATA uint32_t t3__pSrc__l2__int[26] = { 9 | 0x3f70cb17, 0x3f2c8edf, 0xbcf2f63d, 0xbf19288d, 0xbecff209, 0xbf18a987, 0xbeaa2da5, 0x3f05c5df, 10 | 0xbf04c305, 0xbebb7715, 0xbf3f2224, 0xbf69983a, 0x3f36b0d5, 0x3dacc181, 0x3e0587ed, 0x3e5da639, 11 | 0x3f51bca6, 0xbf0d6415, 0xbe90a4a1, 0xbf28d4a8, 0xbdbab6d5, 0x3f242200, 0x3c519ccc, 0xbf398233, 12 | 0xbea1f05d, 0xbe826cb1 13 | }; 14 | 15 | float* t3__pSrc__l2 = (float*)((void*)t3__pSrc__l2__int); 16 | 17 | __u2f t3__scaleFactor = {.u = 0xbd73c58eU}; 18 | 19 | float* t3__pDst; 20 | RT_L2_DATA uint32_t t3__pDst__l2__int[26] = { 21 | 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 22 | 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 23 | }; 24 | 25 | float* t3__pDst__l2 = (float*)((void*)t3__pDst__l2__int); 26 | 27 | uint32_t t3__blockSize = 26; 28 | 29 | RT_L2_DATA uint32_t t3__pDst__reference__int[26] = { 30 | 0xbd654a99, 0xbd2450c7, 0x3ae75b3a, 0x3d11d7af, 0x3cc60337, 0x3d115eba, 0x3ca20ca7, 0xbcfec41c, 31 | 0x3cfcd723, 0x3cb282b4, 0x3d3600e7, 0x3d5e6fc3, 0xbd2df6d6, 0xbba480fe, 0xbbfe4e23, 0xbc530fd4, 32 | 0xbd47b7ec, 0x3d06a31c, 0x3c89bbe4, 0x3d20c425, 0x3bb1cba2, 0xbd1c4aef, 0xba479998, 0x3d30a5bf, 33 | 0x3c9a3420, 0x3c7863a4 34 | }; 35 | 36 | float* t3__pDst__reference = (float*)((void*)t3__pDst__reference__int); 37 | 38 | 39 | #endif//__PULP_DSP_TEST__DATA_T3_H__ 40 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_f32_riscy/data_t4.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T4_H__ 2 | #define __PULP_DSP_TEST__DATA_T4_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | float* t4__pSrc; 8 | RT_L2_DATA uint32_t t4__pSrc__l2__int[27] = { 9 | 0xbf60bb62, 0xbee4580d, 0xbe85de22, 0xbec36101, 0xbedaa5c1, 0xbf6902ee, 0x3e2c6ccc, 0xbdbe9e9b, 10 | 0x3f7a568e, 0x3e1da205, 0xbe305c9f, 0x3f7b4b13, 0xbf1c27ea, 0xbf2fbd0e, 0x3ea37358, 0x3f69605d, 11 | 0xbea6e672, 0xbcb1eb51, 0xbeb654a2, 0xbef91885, 0xbf392d7c, 0xbf035854, 0xbe713dce, 0x3eb9f939, 12 | 0xbdb50a12, 0x3f368682, 0xbf55a86c 13 | }; 14 | 15 | float* t4__pSrc__l2 = (float*)((void*)t4__pSrc__l2__int); 16 | 17 | __u2f t4__scaleFactor = {.u = 0x3e66eb6dU}; 18 | 19 | float* t4__pDst; 20 | RT_L2_DATA uint32_t t4__pDst__l2__int[27] = { 21 | 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 22 | 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 23 | }; 24 | 25 | float* t4__pDst__l2 = (float*)((void*)t4__pDst__l2__int); 26 | 27 | uint32_t t4__blockSize = 27; 28 | 29 | RT_L2_DATA uint32_t t4__pDst__reference__int[27] = { 30 | 0xbe4ab706, 0xbdcdf91a, 0xbd71815d, 0xbdb03cd4, 0xbdc539ff, 0xbe522eeb, 0x3d1b8851, 0xbcabf1cc, 31 | 0x3e61cffc, 0x3d0e3087, 0xbd1f1567, 0x3e62ac8c, 0xbe0cdb77, 0xbe1e8578, 0x3d936ff2, 0x3e528332, 32 | 0xbd968c87, 0xbba07d0a, 0xbda477b7, 0xbde0b11b, 0xbe270929, 0xbdecf44b, 0xbd599b62, 0x3da7c0f0, 33 | 0xbca34d89, 0x3e24a4b4, 0xbe40b9ce 34 | }; 35 | 36 | float* t4__pDst__reference = (float*)((void*)t4__pDst__reference__int); 37 | 38 | 39 | #endif//__PULP_DSP_TEST__DATA_T4_H__ 40 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_f32_riscy/run.sh: -------------------------------------------------------------------------------- 1 | 2 | cd $(dirname $0) 3 | make clean 4 | make all 5 | if [ $? -eq 0 ]; then 6 | timeout -k 1 5 make run $@ 7 | if [ $? -eq 0 ]; then 8 | echo "#@# success" 9 | else 10 | echo "#@# error: run" 11 | fi 12 | else 13 | echo "#@# error: build" 14 | fi 15 | cd .. 16 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_f32_riscy/test.c: -------------------------------------------------------------------------------- 1 | #include "rt/rt_api.h" 2 | #include "stdio.h" 3 | #include "cluster.h" 4 | int main(){ 5 | rt_cluster_mount(1, 0, 0, NULL); 6 | rt_cluster_call(NULL, 0, cluster_entry, NULL, NULL, 0, 0, 0, NULL); 7 | rt_cluster_mount(0, 0, 0, NULL); 8 | return 0; 9 | } 10 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_ibex/Makefile: -------------------------------------------------------------------------------- 1 | PULP_APP = test 2 | PULP_APP_FC_SRCS = test.c 3 | PULP_LDFLAGS += -lplpdsp 4 | PULP_CFLAGS += -I$(CONFIG_BUILD_DIR) -O3 -g 5 | ifdef TFLAGS 6 | PULP_CFLAGS += $(TFLAGS) 7 | endif 8 | include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk 9 | PULP_CFLAGS += -D DATA=$(CONFIG_BUILD_DIR)$(BUILD_DIR_EXT) 10 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_ibex/common.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__COMMON_H__ 2 | #define __PULP_DSP_TEST__COMMON_H__ 3 | 4 | typedef union { 5 | uint32_t u; 6 | float f; 7 | } __u2f; 8 | 9 | #define ABS(x) (x > 0 ? x : -x) 10 | 11 | #endif//__PULP_DSP_TEST__COMMON_H__ 12 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_ibex/data_t0.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T0_H__ 2 | #define __PULP_DSP_TEST__DATA_T0_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | RT_L2_DATA int16_t t0__pSrc[1] = { 8 | -22574 9 | }; 10 | 11 | uint32_t t0__blockSize = 1; 12 | 13 | int16_t t0__scaleFactor = -70; 14 | 15 | int32_t t0__shift = 7; 16 | 17 | RT_L2_DATA int16_t t0__pDst[1] = { 18 | 0 19 | }; 20 | 21 | RT_L2_DATA int16_t t0__pDst__reference[1] = { 22 | 12345 23 | }; 24 | 25 | 26 | #endif//__PULP_DSP_TEST__DATA_T0_H__ 27 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_ibex/data_t1.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T1_H__ 2 | #define __PULP_DSP_TEST__DATA_T1_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | RT_L2_DATA int16_t t1__pSrc[24] = { 8 | 3543, 9878, 29771, -12305, 31406, -14016, 22385, 8669, 18950, -28093, -15028, 30790, 1476, 1780, 9 | 22571, -14719, -18755, 18955, 17992, 27977, 14961, -5057, -16955, 28719 10 | }; 11 | 12 | uint32_t t1__blockSize = 24; 13 | 14 | int16_t t1__scaleFactor = -37; 15 | 16 | int32_t t1__shift = 7; 17 | 18 | RT_L2_DATA int16_t t1__pDst[24] = { 19 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 20 | }; 21 | 22 | RT_L2_DATA int16_t t1__pDst__reference[24] = { 23 | -1025, -2856, -8606, 3556, -9079, 4051, -6471, -2506, -5478, 8120, 4344, -8901, -427, -515, 24 | -6525, 4254, 5421, -5480, -5201, -8088, -4325, 1461, 4901, -8302 25 | }; 26 | 27 | 28 | #endif//__PULP_DSP_TEST__DATA_T1_H__ 29 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_ibex/data_t2.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T2_H__ 2 | #define __PULP_DSP_TEST__DATA_T2_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | RT_L2_DATA int16_t t2__pSrc[25] = { 8 | -10422, 13569, 19299, -28571, -21765, -10025, -32226, 6894, 21556, -14422, 20178, 27922, 30356, 9 | 8549, 3506, -1878, -23609, 4713, -19173, 28493, 17586, 10360, -19875, -12611, -17432 10 | }; 11 | 12 | uint32_t t2__blockSize = 25; 13 | 14 | int16_t t2__scaleFactor = -100; 15 | 16 | int32_t t2__shift = 7; 17 | 18 | RT_L2_DATA int16_t t2__pDst[25] = { 19 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 20 | }; 21 | 22 | RT_L2_DATA int16_t t2__pDst__reference[25] = { 23 | 8142, -10601, -15078, 22321, 17003, 7832, 25176, -5386, -16841, 11267, -15765, -21815, -23716, 24 | -6679, -2740, 1467, 18444, -3683, 14978, -22261, -13740, -8094, 15527, 9852, 13618 25 | }; 26 | 27 | 28 | #endif//__PULP_DSP_TEST__DATA_T2_H__ 29 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_ibex/data_t3.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T3_H__ 2 | #define __PULP_DSP_TEST__DATA_T3_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | RT_L2_DATA int16_t t3__pSrc[26] = { 8 | -20696, 17806, -26464, -14491, -18753, 20025, 439, -6798, -31699, 21922, 28241, 31367, 22178, 9 | -23143, 1784, 4632, -21108, 18276, 27936, 27394, 25681, 29139, 3915, -6840, 19554, -27527 10 | }; 11 | 12 | uint32_t t3__blockSize = 26; 13 | 14 | int16_t t3__scaleFactor = 116; 15 | 16 | int32_t t3__shift = 7; 17 | 18 | RT_L2_DATA int16_t t3__pDst[26] = { 19 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 20 | }; 21 | 22 | RT_L2_DATA int16_t t3__pDst__reference[26] = { 23 | -18756, 16136, -23983, -13133, -16995, 18147, 397, -6161, -28728, 19866, 25593, 28426, 20098, 24 | -20974, 1616, 4197, -19130, 16562, 25317, 24825, 23273, 26407, 3547, -6199, 17720, -24947 25 | }; 26 | 27 | 28 | #endif//__PULP_DSP_TEST__DATA_T3_H__ 29 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_ibex/data_t4.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T4_H__ 2 | #define __PULP_DSP_TEST__DATA_T4_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | RT_L2_DATA int16_t t4__pSrc[27] = { 8 | -13187, 8061, -18879, 25161, -8582, -8522, -2371, -6558, -12624, -27012, 20895, 32092, 9306, 9 | 29549, -20584, 20077, 7975, -667, 25231, -7783, -11256, 9837, -1861, -23237, -20794, -135, 15603 10 | }; 11 | 12 | uint32_t t4__blockSize = 27; 13 | 14 | int16_t t4__scaleFactor = -48; 15 | 16 | int32_t t4__shift = 7; 17 | 18 | RT_L2_DATA int16_t t4__pDst[27] = { 19 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 20 | }; 21 | 22 | RT_L2_DATA int16_t t4__pDst__reference[27] = { 23 | 4945, -3023, 7079, -9436, 3218, 3195, 889, 2459, 4734, 10129, -7836, -12035, -3490, -11081, 24 | 7719, -7529, -2991, 250, -9462, 2918, 4221, -3689, 697, 8713, 7797, 50, -5852 25 | }; 26 | 27 | 28 | #endif//__PULP_DSP_TEST__DATA_T4_H__ 29 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_ibex/run.sh: -------------------------------------------------------------------------------- 1 | 2 | cd $(dirname $0) 3 | make clean 4 | make all 5 | if [ $? -eq 0 ]; then 6 | timeout -k 1 5 make run $@ 7 | if [ $? -eq 0 ]; then 8 | echo "#@# success" 9 | else 10 | echo "#@# error: run" 11 | fi 12 | else 13 | echo "#@# error: build" 14 | fi 15 | cd .. 16 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_riscy/Makefile: -------------------------------------------------------------------------------- 1 | PULP_APP = test 2 | PULP_APP_FC_SRCS = test.c 3 | PULP_APP_CL_SRCS = cluster.c 4 | PULP_LDFLAGS += -lplpdsp 5 | PULP_CFLAGS += -I$(CONFIG_BUILD_DIR) -O3 -g 6 | ifdef TFLAGS 7 | PULP_CFLAGS += $(TFLAGS) 8 | endif 9 | include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk 10 | PULP_CFLAGS += -D DATA=$(CONFIG_BUILD_DIR)$(BUILD_DIR_EXT) 11 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_riscy/cluster.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__CLUSTER_H__ 2 | #define __PULP_DSP_TEST__CLUSTER_H__ 3 | void cluster_entry(void *arg); 4 | #endif//__PULP_DSP_TEST__CLUSTER_H__ 5 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_riscy/common.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__COMMON_H__ 2 | #define __PULP_DSP_TEST__COMMON_H__ 3 | 4 | typedef union { 5 | uint32_t u; 6 | float f; 7 | } __u2f; 8 | 9 | #define ABS(x) (x > 0 ? x : -x) 10 | 11 | #endif//__PULP_DSP_TEST__COMMON_H__ 12 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_riscy/data_t0.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T0_H__ 2 | #define __PULP_DSP_TEST__DATA_T0_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | int16_t* t0__pSrc; 8 | RT_L2_DATA int16_t t0__pSrc__l2[1] = { 9 | 1740 10 | }; 11 | 12 | int16_t t0__scaleFactor = 26; 13 | 14 | int32_t t0__shift = 7; 15 | 16 | int16_t* t0__pDst; 17 | RT_L2_DATA int16_t t0__pDst__l2[1] = { 18 | 0 19 | }; 20 | 21 | uint32_t t0__blockSize = 1; 22 | 23 | RT_L2_DATA int16_t t0__pDst__reference[1] = { 24 | 353 25 | }; 26 | 27 | 28 | #endif//__PULP_DSP_TEST__DATA_T0_H__ 29 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_riscy/data_t1.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T1_H__ 2 | #define __PULP_DSP_TEST__DATA_T1_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | int16_t* t1__pSrc; 8 | RT_L2_DATA int16_t t1__pSrc__l2[24] = { 9 | 27913, -16551, -9383, -15947, 24248, -18244, -2183, 31236, 31800, -26671, 10871, -7495, 31576, 10 | 25225, -14699, 29517, 15367, 23024, 8512, 22782, -19974, 24233, 19381, 12935 11 | }; 12 | 13 | int16_t t1__scaleFactor = -49; 14 | 15 | int32_t t1__shift = 7; 16 | 17 | int16_t* t1__pDst; 18 | RT_L2_DATA int16_t t1__pDst__l2[24] = { 19 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 20 | }; 21 | 22 | uint32_t t1__blockSize = 24; 23 | 24 | RT_L2_DATA int16_t t1__pDst__reference[24] = { 25 | -10686, 6335, 3591, 6104, -9283, 6984, 835, -11958, -12174, 10209, -4162, 2869, -12088, -9657, 26 | 5626, -11300, -5883, -8814, -3259, -8722, 7646, -9277, -7420, -4952 27 | }; 28 | 29 | 30 | #endif//__PULP_DSP_TEST__DATA_T1_H__ 31 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_riscy/data_t2.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T2_H__ 2 | #define __PULP_DSP_TEST__DATA_T2_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | int16_t* t2__pSrc; 8 | RT_L2_DATA int16_t t2__pSrc__l2[25] = { 9 | 24215, -13033, -5442, -28822, 11311, -6424, 5474, -828, -14060, -31989, -6854, -15323, 29483, 10 | 29856, 10514, 4858, -25420, 32597, 7054, 23322, 24733, -31143, -22748, 23513, -14276 11 | }; 12 | 13 | int16_t t2__scaleFactor = -83; 14 | 15 | int32_t t2__shift = 7; 16 | 17 | int16_t* t2__pDst; 18 | RT_L2_DATA int16_t t2__pDst__l2[25] = { 19 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 20 | }; 21 | 22 | uint32_t t2__blockSize = 25; 23 | 24 | RT_L2_DATA int16_t t2__pDst__reference[25] = { 25 | -15702, 8451, 3528, 18689, -7335, 4165, -3550, 536, 9117, 20742, 4444, 9936, -19118, -19360, 26 | -6818, -3151, 16483, -21138, -4575, -15123, -16038, 20194, 14750, -15247, 9257 27 | }; 28 | 29 | 30 | #endif//__PULP_DSP_TEST__DATA_T2_H__ 31 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_riscy/data_t3.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T3_H__ 2 | #define __PULP_DSP_TEST__DATA_T3_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | int16_t* t3__pSrc; 8 | RT_L2_DATA int16_t t3__pSrc__l2[26] = { 9 | -14010, -8686, 21879, 31273, -21888, -2069, -10073, 4329, -12486, -5462, 12000, 3555, -19087, 10 | 3162, 18783, -24472, -28418, 12175, 10645, -13448, -2102, 22297, 1408, 20198, 31683, 28098 11 | }; 12 | 13 | int16_t t3__scaleFactor = 1; 14 | 15 | int32_t t3__shift = 7; 16 | 17 | int16_t* t3__pDst; 18 | RT_L2_DATA int16_t t3__pDst__l2[26] = { 19 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 20 | }; 21 | 22 | uint32_t t3__blockSize = 26; 23 | 24 | RT_L2_DATA int16_t t3__pDst__reference[26] = { 25 | -110, -68, 170, 244, -171, -17, -79, 33, -98, -43, 93, 27, -150, 24, 146, -192, -223, 95, 83, 26 | -106, -17, 174, 11, 157, 247, 219 27 | }; 28 | 29 | 30 | #endif//__PULP_DSP_TEST__DATA_T3_H__ 31 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_riscy/data_t4.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T4_H__ 2 | #define __PULP_DSP_TEST__DATA_T4_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | int16_t* t4__pSrc; 8 | RT_L2_DATA int16_t t4__pSrc__l2[27] = { 9 | 720, 25636, -24549, -13234, 3354, -30935, 23796, -28334, -9900, -28482, -18655, -20928, -6568, 10 | 18253, -5867, -23879, -13726, -16295, 19049, -20659, 32343, 15722, -1234, -17787, -21288, 11996, 11 | -13630 12 | }; 13 | 14 | int16_t t4__scaleFactor = 58; 15 | 16 | int32_t t4__shift = 7; 17 | 18 | int16_t* t4__pDst; 19 | RT_L2_DATA int16_t t4__pDst__l2[27] = { 20 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 21 | }; 22 | 23 | uint32_t t4__blockSize = 27; 24 | 25 | RT_L2_DATA int16_t t4__pDst__reference[27] = { 26 | 326, 11616, -11124, -5997, 1519, -14018, 10782, -12839, -4486, -12906, -8454, -9483, -2977, 27 | 8270, -2659, -10821, -6220, -7384, 8631, -9362, 14655, 7124, -560, -8060, -9647, 5435, -6177 28 | }; 29 | 30 | 31 | #endif//__PULP_DSP_TEST__DATA_T4_H__ 32 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_riscy/run.sh: -------------------------------------------------------------------------------- 1 | 2 | cd $(dirname $0) 3 | make clean 4 | make all 5 | if [ $? -eq 0 ]; then 6 | timeout -k 1 5 make run $@ 7 | if [ $? -eq 0 ]; then 8 | echo "#@# success" 9 | else 10 | echo "#@# error: run" 11 | fi 12 | else 13 | echo "#@# error: build" 14 | fi 15 | cd .. 16 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i16_riscy/test.c: -------------------------------------------------------------------------------- 1 | #include "rt/rt_api.h" 2 | #include "stdio.h" 3 | #include "cluster.h" 4 | int main(){ 5 | rt_cluster_mount(1, 0, 0, NULL); 6 | rt_cluster_call(NULL, 0, cluster_entry, NULL, NULL, 0, 0, 0, NULL); 7 | rt_cluster_mount(0, 0, 0, NULL); 8 | return 0; 9 | } 10 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_ibex/Makefile: -------------------------------------------------------------------------------- 1 | PULP_APP = test 2 | PULP_APP_FC_SRCS = test.c 3 | PULP_LDFLAGS += -lplpdsp 4 | PULP_CFLAGS += -I$(CONFIG_BUILD_DIR) -O3 -g 5 | ifdef TFLAGS 6 | PULP_CFLAGS += $(TFLAGS) 7 | endif 8 | include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk 9 | PULP_CFLAGS += -D DATA=$(CONFIG_BUILD_DIR)$(BUILD_DIR_EXT) 10 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_ibex/common.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__COMMON_H__ 2 | #define __PULP_DSP_TEST__COMMON_H__ 3 | 4 | typedef union { 5 | uint32_t u; 6 | float f; 7 | } __u2f; 8 | 9 | #define ABS(x) (x > 0 ? x : -x) 10 | 11 | #endif//__PULP_DSP_TEST__COMMON_H__ 12 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_ibex/data_t0.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T0_H__ 2 | #define __PULP_DSP_TEST__DATA_T0_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | RT_L2_DATA int32_t t0__pSrc[1] = { 8 | 2780 9 | }; 10 | 11 | uint32_t t0__blockSize = 1; 12 | 13 | int32_t t0__scaleFactor = 22; 14 | 15 | int32_t t0__shift = 7; 16 | 17 | RT_L2_DATA int32_t t0__pDst[1] = { 18 | 0 19 | }; 20 | 21 | RT_L2_DATA int32_t t0__pDst__reference[1] = { 22 | 477 23 | }; 24 | 25 | 26 | #endif//__PULP_DSP_TEST__DATA_T0_H__ 27 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_ibex/data_t1.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T1_H__ 2 | #define __PULP_DSP_TEST__DATA_T1_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | RT_L2_DATA int32_t t1__pSrc[24] = { 8 | 3176, 22118, -11092, -16735, -8805, 20243, -971, 31120, -25487, -15404, -16834, 2134, 9023, 9 | 19431, -20718, 614, -21093, -1135, 14813, 26981, -10843, -14652, -790, 14920 10 | }; 11 | 12 | uint32_t t1__blockSize = 24; 13 | 14 | int32_t t1__scaleFactor = 80; 15 | 16 | int32_t t1__shift = 7; 17 | 18 | RT_L2_DATA int32_t t1__pDst[24] = { 19 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 20 | }; 21 | 22 | RT_L2_DATA int32_t t1__pDst__reference[24] = { 23 | 1985, 13823, -6933, -10460, -5504, 12651, -607, 19450, -15930, -9628, -10522, 1333, 5639, 12144, 24 | -12949, 383, -13184, -710, 9258, 16863, -6777, -9158, -494, 9325 25 | }; 26 | 27 | 28 | #endif//__PULP_DSP_TEST__DATA_T1_H__ 29 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_ibex/data_t2.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T2_H__ 2 | #define __PULP_DSP_TEST__DATA_T2_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | RT_L2_DATA int32_t t2__pSrc[25] = { 8 | -2247, -31108, -5689, 7488, 15089, 9431, -1464, -25220, -15350, -29410, 21183, 28432, -17573, 9 | -27168, 28136, -11201, -18442, 6188, 6718, 15661, -30169, -5689, -4258, 8467, 15490 10 | }; 11 | 12 | uint32_t t2__blockSize = 25; 13 | 14 | int32_t t2__scaleFactor = 93; 15 | 16 | int32_t t2__shift = 7; 17 | 18 | RT_L2_DATA int32_t t2__pDst[25] = { 19 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 20 | }; 21 | 22 | RT_L2_DATA int32_t t2__pDst__reference[25] = { 23 | -1633, -22602, -4134, 5440, 10963, 6852, -1064, -18324, -11153, -21369, 15390, 20657, -12768, 24 | -19740, 20442, -8139, -13400, 4495, 4881, 11378, -21920, -4134, -3094, 6151, 11254 25 | }; 26 | 27 | 28 | #endif//__PULP_DSP_TEST__DATA_T2_H__ 29 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_ibex/data_t3.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T3_H__ 2 | #define __PULP_DSP_TEST__DATA_T3_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | RT_L2_DATA int32_t t3__pSrc[26] = { 8 | 32390, 11214, 3865, 2027, -29191, 8289, -19479, -2311, -10482, 26030, 31617, -29905, -30190, 9 | -20826, 24322, -16349, -5520, -26782, -25444, -25805, 3233, -24398, 16455, 12013, 32468, -23609 10 | }; 11 | 12 | uint32_t t3__blockSize = 26; 13 | 14 | int32_t t3__scaleFactor = 86; 15 | 16 | int32_t t3__shift = 7; 17 | 18 | RT_L2_DATA int32_t t3__pDst[26] = { 19 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 20 | }; 21 | 22 | RT_L2_DATA int32_t t3__pDst__reference[26] = { 23 | 21762, 7534, 2596, 1361, -19613, 5569, -13088, -1553, -7043, 17488, 21242, -20093, -20284, 24 | -13993, 16341, -10985, -3709, -17995, -17096, -17338, 2172, -16393, 11055, 8071, 21814, -15863 25 | }; 26 | 27 | 28 | #endif//__PULP_DSP_TEST__DATA_T3_H__ 29 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_ibex/data_t4.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T4_H__ 2 | #define __PULP_DSP_TEST__DATA_T4_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | RT_L2_DATA int32_t t4__pSrc[27] = { 8 | -1890, -16234, -14112, 26112, -8406, 17944, 14821, -23930, 20545, -819, -21103, -12423, -13066, 9 | 22532, -22952, -15450, 23952, -1836, -345, 30293, 4714, 23263, -25914, 24518, 26153, 12103, 10 | -28068 11 | }; 12 | 13 | uint32_t t4__blockSize = 27; 14 | 15 | int32_t t4__scaleFactor = -88; 16 | 17 | int32_t t4__shift = 7; 18 | 19 | RT_L2_DATA int32_t t4__pDst[27] = { 20 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 21 | }; 22 | 23 | RT_L2_DATA int32_t t4__pDst__reference[27] = { 24 | 1299, 11160, 9702, -17952, 5779, -12337, -10190, 16451, -14125, 563, 14508, 8540, 8982, -15491, 25 | 15779, 10621, -16467, 1262, 237, -20827, -3241, -15994, 17815, -16857, -17981, -8321, 19296 26 | }; 27 | 28 | 29 | #endif//__PULP_DSP_TEST__DATA_T4_H__ 30 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_ibex/run.sh: -------------------------------------------------------------------------------- 1 | 2 | cd $(dirname $0) 3 | make clean 4 | make all 5 | if [ $? -eq 0 ]; then 6 | timeout -k 1 5 make run $@ 7 | if [ $? -eq 0 ]; then 8 | echo "#@# success" 9 | else 10 | echo "#@# error: run" 11 | fi 12 | else 13 | echo "#@# error: build" 14 | fi 15 | cd .. 16 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_riscy/Makefile: -------------------------------------------------------------------------------- 1 | PULP_APP = test 2 | PULP_APP_FC_SRCS = test.c 3 | PULP_APP_CL_SRCS = cluster.c 4 | PULP_LDFLAGS += -lplpdsp 5 | PULP_CFLAGS += -I$(CONFIG_BUILD_DIR) -O3 -g 6 | ifdef TFLAGS 7 | PULP_CFLAGS += $(TFLAGS) 8 | endif 9 | include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk 10 | PULP_CFLAGS += -D DATA=$(CONFIG_BUILD_DIR)$(BUILD_DIR_EXT) 11 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_riscy/cluster.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__CLUSTER_H__ 2 | #define __PULP_DSP_TEST__CLUSTER_H__ 3 | void cluster_entry(void *arg); 4 | #endif//__PULP_DSP_TEST__CLUSTER_H__ 5 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_riscy/common.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__COMMON_H__ 2 | #define __PULP_DSP_TEST__COMMON_H__ 3 | 4 | typedef union { 5 | uint32_t u; 6 | float f; 7 | } __u2f; 8 | 9 | #define ABS(x) (x > 0 ? x : -x) 10 | 11 | #endif//__PULP_DSP_TEST__COMMON_H__ 12 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_riscy/data_t0.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T0_H__ 2 | #define __PULP_DSP_TEST__DATA_T0_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | int32_t* t0__pSrc; 8 | RT_L2_DATA int32_t t0__pSrc__l2[1] = { 9 | 20723 10 | }; 11 | 12 | uint32_t t0__blockSize = 1; 13 | 14 | int32_t t0__scaleFactor = 124; 15 | 16 | int32_t t0__shift = 7; 17 | 18 | int32_t* t0__pDst; 19 | RT_L2_DATA int32_t t0__pDst__l2[1] = { 20 | 0 21 | }; 22 | 23 | RT_L2_DATA int32_t t0__pDst__reference[1] = { 24 | 20075 25 | }; 26 | 27 | 28 | #endif//__PULP_DSP_TEST__DATA_T0_H__ 29 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_riscy/data_t1.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T1_H__ 2 | #define __PULP_DSP_TEST__DATA_T1_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | int32_t* t1__pSrc; 8 | RT_L2_DATA int32_t t1__pSrc__l2[24] = { 9 | -5815, 13067, 13764, -31150, 29658, 12867, -21816, 5411, 12893, 5255, -26167, -24351, 14175, 10 | 26357, 11839, -5946, -2728, -21348, 7329, -15002, 1640, 32022, -19382, 25223 11 | }; 12 | 13 | uint32_t t1__blockSize = 24; 14 | 15 | int32_t t1__scaleFactor = -32; 16 | 17 | int32_t t1__shift = 7; 18 | 19 | int32_t* t1__pDst; 20 | RT_L2_DATA int32_t t1__pDst__l2[24] = { 21 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 22 | }; 23 | 24 | RT_L2_DATA int32_t t1__pDst__reference[24] = { 25 | 1453, -3267, -3441, 7787, -7415, -3217, 5454, -1353, -3224, -1314, 6541, 6087, -3544, -6590, 26 | -2960, 1486, 682, 5337, -1833, 3750, -410, -8006, 4845, -6306 27 | }; 28 | 29 | 30 | #endif//__PULP_DSP_TEST__DATA_T1_H__ 31 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_riscy/data_t2.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T2_H__ 2 | #define __PULP_DSP_TEST__DATA_T2_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | int32_t* t2__pSrc; 8 | RT_L2_DATA int32_t t2__pSrc__l2[25] = { 9 | 10643, 30715, 24743, -4600, -9721, 30998, 23164, 18365, -14821, 26848, -23505, 9150, -13452, 10 | 22267, 11137, 19130, 3688, 32417, 30440, -18073, 24065, -8100, 15902, 5175, -11643 11 | }; 12 | 13 | uint32_t t2__blockSize = 25; 14 | 15 | int32_t t2__scaleFactor = -39; 16 | 17 | int32_t t2__shift = 7; 18 | 19 | int32_t* t2__pDst; 20 | RT_L2_DATA int32_t t2__pDst__l2[25] = { 21 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 22 | }; 23 | 24 | RT_L2_DATA int32_t t2__pDst__reference[25] = { 25 | -3243, -9359, -7539, 1401, 2961, -9445, -7058, -5596, 4515, -8181, 7161, -2788, 4098, -6785, 26 | -3394, -5829, -1124, -9878, -9275, 5506, -7333, 2467, -4846, -1577, 3547 27 | }; 28 | 29 | 30 | #endif//__PULP_DSP_TEST__DATA_T2_H__ 31 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_riscy/data_t3.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T3_H__ 2 | #define __PULP_DSP_TEST__DATA_T3_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | int32_t* t3__pSrc; 8 | RT_L2_DATA int32_t t3__pSrc__l2[26] = { 9 | 16833, -4988, 1837, -31204, 910, 20614, -7777, 14464, 21612, -18676, 32386, -1989, 20374, 11927, 10 | -10286, -21003, -9489, -300, 15735, 4609, 98, 2939, 9745, -1996, 22305, 2804 11 | }; 12 | 13 | uint32_t t3__blockSize = 26; 14 | 15 | int32_t t3__scaleFactor = 52; 16 | 17 | int32_t t3__shift = 7; 18 | 19 | int32_t* t3__pDst; 20 | RT_L2_DATA int32_t t3__pDst__l2[26] = { 21 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 22 | }; 23 | 24 | RT_L2_DATA int32_t t3__pDst__reference[26] = { 25 | 6838, -2027, 746, -12677, 369, 8374, -3160, 5876, 8779, -7588, 13156, -809, 8276, 4845, -4179, 26 | -8533, -3855, -122, 6392, 1872, 39, 1193, 3958, -811, 9061, 1139 27 | }; 28 | 29 | 30 | #endif//__PULP_DSP_TEST__DATA_T3_H__ 31 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_riscy/data_t4.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T4_H__ 2 | #define __PULP_DSP_TEST__DATA_T4_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | int32_t* t4__pSrc; 8 | RT_L2_DATA int32_t t4__pSrc__l2[27] = { 9 | -23814, -26356, -10013, -21170, 7365, 6720, 8204, 23755, -14402, 19314, 29808, -24004, 23048, 10 | 29161, 24580, -4282, -11305, 11006, 14820, 23553, 1988, 31710, 16302, -16879, -21802, 24497, 11 | -31545 12 | }; 13 | 14 | uint32_t t4__blockSize = 27; 15 | 16 | int32_t t4__scaleFactor = -120; 17 | 18 | int32_t t4__shift = 7; 19 | 20 | int32_t* t4__pDst; 21 | RT_L2_DATA int32_t t4__pDst__l2[27] = { 22 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 23 | }; 24 | 25 | RT_L2_DATA int32_t t4__pDst__reference[27] = { 26 | 22325, 24708, 9387, 19846, -6905, -6300, -7692, -22271, 13501, -18107, -27945, 22503, -21608, 27 | -27339, -23044, 4014, 10598, -10319, -13894, -22081, -1864, -29729, -15284, 15824, 20439, 28 | -22966, 29573 29 | }; 30 | 31 | 32 | #endif//__PULP_DSP_TEST__DATA_T4_H__ 33 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_riscy/run.sh: -------------------------------------------------------------------------------- 1 | 2 | cd $(dirname $0) 3 | make clean 4 | make all 5 | if [ $? -eq 0 ]; then 6 | timeout -k 1 5 make run $@ 7 | if [ $? -eq 0 ]; then 8 | echo "#@# success" 9 | else 10 | echo "#@# error: run" 11 | fi 12 | else 13 | echo "#@# error: build" 14 | fi 15 | cd .. 16 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i32_riscy/test.c: -------------------------------------------------------------------------------- 1 | #include "rt/rt_api.h" 2 | #include "stdio.h" 3 | #include "cluster.h" 4 | int main(){ 5 | rt_cluster_mount(1, 0, 0, NULL); 6 | rt_cluster_call(NULL, 0, cluster_entry, NULL, NULL, 0, 0, 0, NULL); 7 | rt_cluster_mount(0, 0, 0, NULL); 8 | return 0; 9 | } 10 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_ibex/Makefile: -------------------------------------------------------------------------------- 1 | PULP_APP = test 2 | PULP_APP_FC_SRCS = test.c 3 | PULP_LDFLAGS += -lplpdsp 4 | PULP_CFLAGS += -I$(CONFIG_BUILD_DIR) -O3 -g 5 | ifdef TFLAGS 6 | PULP_CFLAGS += $(TFLAGS) 7 | endif 8 | include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk 9 | PULP_CFLAGS += -D DATA=$(CONFIG_BUILD_DIR)$(BUILD_DIR_EXT) 10 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_ibex/common.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__COMMON_H__ 2 | #define __PULP_DSP_TEST__COMMON_H__ 3 | 4 | typedef union { 5 | uint32_t u; 6 | float f; 7 | } __u2f; 8 | 9 | #define ABS(x) (x > 0 ? x : -x) 10 | 11 | #endif//__PULP_DSP_TEST__COMMON_H__ 12 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_ibex/data_t0.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T0_H__ 2 | #define __PULP_DSP_TEST__DATA_T0_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | RT_L2_DATA int8_t t0__pSrc[1] = { 8 | -71 9 | }; 10 | 11 | uint32_t t0__blockSize = 1; 12 | 13 | int8_t t0__scaleFactor = -116; 14 | 15 | int32_t t0__shift = 7; 16 | 17 | RT_L2_DATA int8_t t0__pDst[1] = { 18 | 0 19 | }; 20 | 21 | RT_L2_DATA int8_t t0__pDst__reference[1] = { 22 | 64 23 | }; 24 | 25 | 26 | #endif//__PULP_DSP_TEST__DATA_T0_H__ 27 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_ibex/data_t1.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T1_H__ 2 | #define __PULP_DSP_TEST__DATA_T1_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | RT_L2_DATA int8_t t1__pSrc[24] = { 8 | 66, 7, 66, -36, -92, -43, -92, -27, 97, -115, -60, 36, 108, -36, -84, -62, -95, -34, -53, 74, 9 | 110, 76, -82, -1 10 | }; 11 | 12 | uint32_t t1__blockSize = 24; 13 | 14 | int8_t t1__scaleFactor = 70; 15 | 16 | int32_t t1__shift = 7; 17 | 18 | RT_L2_DATA int8_t t1__pDst[24] = { 19 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 20 | }; 21 | 22 | RT_L2_DATA int8_t t1__pDst__reference[24] = { 23 | 36, 3, 36, -20, -51, -24, -51, -15, 53, -63, -33, 19, 59, -20, -46, -34, -52, -19, -29, 40, 60, 24 | 41, -45, -1 25 | }; 26 | 27 | 28 | #endif//__PULP_DSP_TEST__DATA_T1_H__ 29 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_ibex/data_t2.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T2_H__ 2 | #define __PULP_DSP_TEST__DATA_T2_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | RT_L2_DATA int8_t t2__pSrc[25] = { 8 | 71, -83, -56, -75, 13, 88, 14, 124, -74, -116, -90, 87, 47, -120, 4, -12, -71, 74, 78, 67, -65, 9 | 47, 93, 7, 63 10 | }; 11 | 12 | uint32_t t2__blockSize = 25; 13 | 14 | int8_t t2__scaleFactor = -50; 15 | 16 | int32_t t2__shift = 7; 17 | 18 | RT_L2_DATA int8_t t2__pDst[25] = { 19 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 20 | }; 21 | 22 | RT_L2_DATA int8_t t2__pDst__reference[25] = { 23 | -28, 32, 21, 29, -6, -35, -6, -49, 28, 45, 35, -34, -19, 46, -2, 4, 27, -29, -31, -27, 25, -19, 24 | -37, -3, -25 25 | }; 26 | 27 | 28 | #endif//__PULP_DSP_TEST__DATA_T2_H__ 29 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_ibex/data_t3.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T3_H__ 2 | #define __PULP_DSP_TEST__DATA_T3_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | RT_L2_DATA int8_t t3__pSrc[26] = { 8 | 73, -92, -92, 22, 116, -116, -77, -10, -114, 0, -29, -50, -35, 11, -75, 65, -8, 91, -36, -89, 9 | -72, -13, 0, -100, 30, -11 10 | }; 11 | 12 | uint32_t t3__blockSize = 26; 13 | 14 | int8_t t3__scaleFactor = -66; 15 | 16 | int32_t t3__shift = 7; 17 | 18 | RT_L2_DATA int8_t t3__pDst[26] = { 19 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 20 | }; 21 | 22 | RT_L2_DATA int8_t t3__pDst__reference[26] = { 23 | -38, 47, 47, -12, -60, 59, 39, 5, 58, 0, 14, 25, 18, -6, 38, -34, 4, -47, 18, 45, 37, 6, 0, 51, 24 | -16, 5 25 | }; 26 | 27 | 28 | #endif//__PULP_DSP_TEST__DATA_T3_H__ 29 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_ibex/data_t4.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T4_H__ 2 | #define __PULP_DSP_TEST__DATA_T4_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | RT_L2_DATA int8_t t4__pSrc[27] = { 8 | 13, 26, -29, -50, -6, 58, -28, -65, 88, 70, -125, -116, 116, -21, -119, -10, -57, 4, -122, -91, 9 | -9, 54, 51, -113, -11, -106, -127 10 | }; 11 | 12 | uint32_t t4__blockSize = 27; 13 | 14 | int8_t t4__scaleFactor = -54; 15 | 16 | int32_t t4__shift = 7; 17 | 18 | RT_L2_DATA int8_t t4__pDst[27] = { 19 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 20 | }; 21 | 22 | RT_L2_DATA int8_t t4__pDst__reference[27] = { 23 | -6, -11, 12, 21, 2, -25, 11, 27, -38, -30, 52, 48, -49, 8, 50, 4, 24, -2, 51, 38, 3, -23, -22, 24 | 47, 4, 44, 53 25 | }; 26 | 27 | 28 | #endif//__PULP_DSP_TEST__DATA_T4_H__ 29 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_ibex/run.sh: -------------------------------------------------------------------------------- 1 | 2 | cd $(dirname $0) 3 | make clean 4 | make all 5 | if [ $? -eq 0 ]; then 6 | timeout -k 1 5 make run $@ 7 | if [ $? -eq 0 ]; then 8 | echo "#@# success" 9 | else 10 | echo "#@# error: run" 11 | fi 12 | else 13 | echo "#@# error: build" 14 | fi 15 | cd .. 16 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_riscy/Makefile: -------------------------------------------------------------------------------- 1 | PULP_APP = test 2 | PULP_APP_FC_SRCS = test.c 3 | PULP_APP_CL_SRCS = cluster.c 4 | PULP_LDFLAGS += -lplpdsp 5 | PULP_CFLAGS += -I$(CONFIG_BUILD_DIR) -O3 -g 6 | ifdef TFLAGS 7 | PULP_CFLAGS += $(TFLAGS) 8 | endif 9 | include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk 10 | PULP_CFLAGS += -D DATA=$(CONFIG_BUILD_DIR)$(BUILD_DIR_EXT) 11 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_riscy/cluster.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__CLUSTER_H__ 2 | #define __PULP_DSP_TEST__CLUSTER_H__ 3 | void cluster_entry(void *arg); 4 | #endif//__PULP_DSP_TEST__CLUSTER_H__ 5 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_riscy/common.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__COMMON_H__ 2 | #define __PULP_DSP_TEST__COMMON_H__ 3 | 4 | typedef union { 5 | uint32_t u; 6 | float f; 7 | } __u2f; 8 | 9 | #define ABS(x) (x > 0 ? x : -x) 10 | 11 | #endif//__PULP_DSP_TEST__COMMON_H__ 12 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_riscy/data_t0.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T0_H__ 2 | #define __PULP_DSP_TEST__DATA_T0_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | int8_t* t0__pSrc; 8 | RT_L2_DATA int8_t t0__pSrc__l2[1] = { 9 | 123 10 | }; 11 | 12 | uint32_t t0__blockSize = 1; 13 | 14 | int8_t t0__scaleFactor = -42; 15 | 16 | int32_t t0__shift = 7; 17 | 18 | int8_t* t0__pDst; 19 | RT_L2_DATA int8_t t0__pDst__l2[1] = { 20 | 0 21 | }; 22 | 23 | RT_L2_DATA int8_t t0__pDst__reference[1] = { 24 | -41 25 | }; 26 | 27 | 28 | #endif//__PULP_DSP_TEST__DATA_T0_H__ 29 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_riscy/data_t1.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T1_H__ 2 | #define __PULP_DSP_TEST__DATA_T1_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | int8_t* t1__pSrc; 8 | RT_L2_DATA int8_t t1__pSrc__l2[24] = { 9 | -67, 79, 85, 97, 9, 27, 21, 11, -61, 6, -61, -109, 7, 77, 66, 103, -125, 36, -108, 43, 110, 124, 10 | -83, 120 11 | }; 12 | 13 | uint32_t t1__blockSize = 24; 14 | 15 | int8_t t1__scaleFactor = 94; 16 | 17 | int32_t t1__shift = 7; 18 | 19 | int8_t* t1__pDst; 20 | RT_L2_DATA int8_t t1__pDst__l2[24] = { 21 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 22 | }; 23 | 24 | RT_L2_DATA int8_t t1__pDst__reference[24] = { 25 | -50, 58, 62, 71, 6, 19, 15, 8, -45, 4, -45, -81, 5, 56, 48, 75, -92, 26, -80, 31, 80, 91, -61, 26 | 88 27 | }; 28 | 29 | 30 | #endif//__PULP_DSP_TEST__DATA_T1_H__ 31 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_riscy/data_t2.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T2_H__ 2 | #define __PULP_DSP_TEST__DATA_T2_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | int8_t* t2__pSrc; 8 | RT_L2_DATA int8_t t2__pSrc__l2[25] = { 9 | -81, -102, 15, -3, 98, -65, -128, -122, 28, 12, -40, 124, -74, 20, -3, 108, 73, -37, -69, 63, 10 | -59, 64, 55, -113, -113 11 | }; 12 | 13 | uint32_t t2__blockSize = 25; 14 | 15 | int8_t t2__scaleFactor = 109; 16 | 17 | int32_t t2__shift = 7; 18 | 19 | int8_t* t2__pDst; 20 | RT_L2_DATA int8_t t2__pDst__l2[25] = { 21 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 22 | }; 23 | 24 | RT_L2_DATA int8_t t2__pDst__reference[25] = { 25 | -69, -87, 12, -3, 83, -56, -109, -104, 23, 10, -35, 105, -64, 17, -3, 91, 62, -32, -59, 53, -51, 26 | 54, 46, -97, -97 27 | }; 28 | 29 | 30 | #endif//__PULP_DSP_TEST__DATA_T2_H__ 31 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_riscy/data_t3.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T3_H__ 2 | #define __PULP_DSP_TEST__DATA_T3_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | int8_t* t3__pSrc; 8 | RT_L2_DATA int8_t t3__pSrc__l2[26] = { 9 | 9, 69, 18, -72, 77, -71, -18, -93, 48, 112, 107, 118, -97, -124, 45, -94, -49, 88, 120, -27, 10 | -114, 118, 76, -52, -25, -39 11 | }; 12 | 13 | uint32_t t3__blockSize = 26; 14 | 15 | int8_t t3__scaleFactor = -123; 16 | 17 | int32_t t3__shift = 7; 18 | 19 | int8_t* t3__pDst; 20 | RT_L2_DATA int8_t t3__pDst__l2[26] = { 21 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 22 | }; 23 | 24 | RT_L2_DATA int8_t t3__pDst__reference[26] = { 25 | -9, -67, -18, 69, -74, 68, 17, 89, -47, -108, -103, -114, 93, 119, -44, 90, 47, -85, -116, 25, 26 | 109, -114, -74, 49, 24, 37 27 | }; 28 | 29 | 30 | #endif//__PULP_DSP_TEST__DATA_T3_H__ 31 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_riscy/data_t4.h: -------------------------------------------------------------------------------- 1 | #ifndef __PULP_DSP_TEST__DATA_T4_H__ 2 | #define __PULP_DSP_TEST__DATA_T4_H__ 3 | 4 | // include the common header 5 | #include "common.h" 6 | 7 | int8_t* t4__pSrc; 8 | RT_L2_DATA int8_t t4__pSrc__l2[27] = { 9 | 48, 12, 46, 12, -65, -70, -56, -125, 78, -16, 86, -44, 19, -112, 37, 35, -108, -30, 122, 11, 25, 10 | -96, 120, 6, -22, -32, 85 11 | }; 12 | 13 | uint32_t t4__blockSize = 27; 14 | 15 | int8_t t4__scaleFactor = 69; 16 | 17 | int32_t t4__shift = 7; 18 | 19 | int8_t* t4__pDst; 20 | RT_L2_DATA int8_t t4__pDst__l2[27] = { 21 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 22 | }; 23 | 24 | RT_L2_DATA int8_t t4__pDst__reference[27] = { 25 | 25, 6, 24, 6, -36, -38, -31, -68, 42, -9, 46, -24, 10, -61, 19, 18, -59, -17, 65, 5, 13, -52, 26 | 64, 3, -12, -18, 45 27 | }; 28 | 29 | 30 | #endif//__PULP_DSP_TEST__DATA_T4_H__ 31 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_riscy/run.sh: -------------------------------------------------------------------------------- 1 | 2 | cd $(dirname $0) 3 | make clean 4 | make all 5 | if [ $? -eq 0 ]; then 6 | timeout -k 1 5 make run $@ 7 | if [ $? -eq 0 ]; then 8 | echo "#@# success" 9 | else 10 | echo "#@# error: run" 11 | fi 12 | else 13 | echo "#@# error: build" 14 | fi 15 | cd .. 16 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/plp_mat_scale_i8_riscy/test.c: -------------------------------------------------------------------------------- 1 | #include "rt/rt_api.h" 2 | #include "stdio.h" 3 | #include "cluster.h" 4 | int main(){ 5 | rt_cluster_mount(1, 0, 0, NULL); 6 | rt_cluster_call(NULL, 0, cluster_entry, NULL, NULL, 0, 0, 0, NULL); 7 | rt_cluster_mount(0, 0, 0, NULL); 8 | return 0; 9 | } 10 | -------------------------------------------------------------------------------- /test/mrWolf/scale/test_lib/testset.cfg: -------------------------------------------------------------------------------- 1 | from plptest import * 2 | 3 | TestConfig = c = {} 4 | c['testsets'] = [ 5 | Testset( 6 | name = "int", 7 | files = ["testset_int.cfg"] 8 | ), 9 | Testset( 10 | name = "float", 11 | files = ["testset_float.cfg"] 12 | ) 13 | ] -------------------------------------------------------------------------------- /test/mrWolf/sqrt/test_lib/ibex/Makefile: -------------------------------------------------------------------------------- 1 | 2 | IDIR=../../../../../include 3 | 4 | PULP_APP = test 5 | 6 | PULP_APP_FC_SRCS = test.c 7 | 8 | PULP_LDFLAGS += -lplpdsp 9 | 10 | PULP_CFLAGS += -I$(IDIR) -I$(CONFIG_BUILD_DIR) -O3 -g 11 | 12 | ifdef TFLAGS 13 | PULP_CFLAGS += $(TFLAGS) 14 | endif 15 | 16 | include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk 17 | 18 | PULP_CFLAGS += -D DATA=$(CONFIG_BUILD_DIR)$(BUILD_DIR_EXT) 19 | 20 | gen: 21 | echo $(CONFIG_BUILD_DIR)$(BUILD_DIR_EXT) 22 | ./gen_stimuli.py --folder $(CONFIG_BUILD_DIR) $(GARGS) 23 | -------------------------------------------------------------------------------- /test/mrWolf/sqrt/test_lib/ibex/test.c: -------------------------------------------------------------------------------- 1 | #include "rtos_hal.h" 2 | #include "stdio.h" 3 | #include "plp_math.h" 4 | #include "data.h" 5 | 6 | // This benchmark is a single shot so we can read the value directly out of the 7 | // HW counter using the function hal_perf_read 8 | static int do_bench(hal_perf_t *perf, int events, int do_check) 9 | { 10 | // Activate specified events 11 | hal_perf_conf(perf, events); 12 | 13 | // Reset HW counters now and start and stop counters so that we benchmark 14 | // not around the printf 15 | hal_perf_reset(perf); 16 | hal_perf_start(perf); 17 | 18 | FSIG 19 | 20 | hal_perf_stop(perf); 21 | 22 | int passed = 1; 23 | 24 | if (do_check) { 25 | CHECK 26 | } 27 | 28 | return passed; 29 | } 30 | 31 | int main(){ 32 | 33 | BENCH 34 | 35 | return 0; 36 | } 37 | -------------------------------------------------------------------------------- /test/mrWolf/sqrt/test_lib/riscy/Makefile: -------------------------------------------------------------------------------- 1 | 2 | IDIR=../../../../../include 3 | 4 | PULP_APP = test 5 | 6 | PULP_APP_FC_SRCS = test.c cluster.c 7 | 8 | PULP_LDFLAGS += -lplpdsp 9 | 10 | PULP_CFLAGS += -I$(IDIR) -I$(CONFIG_BUILD_DIR) -O3 -g 11 | 12 | ifdef TFLAGS 13 | PULP_CFLAGS += $(TFLAGS) 14 | endif 15 | 16 | include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk 17 | 18 | PULP_CFLAGS += -D DATA=$(CONFIG_BUILD_DIR)$(BUILD_DIR_EXT) 19 | 20 | gen: 21 | echo $(CONFIG_BUILD_DIR)$(BUILD_DIR_EXT) 22 | ./gen_stimuli.py --folder $(CONFIG_BUILD_DIR) $(GARGS) 23 | -------------------------------------------------------------------------------- /test/mrWolf/sqrt/test_lib/riscy/cluster.c: -------------------------------------------------------------------------------- 1 | #include "rtos_hal.h" 2 | #include "stdio.h" 3 | #include "plp_math.h" 4 | #include "data.h" 5 | 6 | // This benchmark is a single shot so we can read the value directly out of the 7 | // HW counter using the function hal_perf_read 8 | static int do_bench(hal_perf_t *perf, int events, int do_check) 9 | { 10 | // Activate specified events 11 | hal_perf_conf(perf, events); 12 | 13 | // Reset HW counters now and start and stop counters so that we benchmark 14 | // not around the printf 15 | hal_perf_reset(perf); 16 | hal_perf_start(perf); 17 | 18 | FSIG 19 | 20 | hal_perf_stop(perf); 21 | 22 | int passed = 1; 23 | 24 | if (do_check) { 25 | CHECK 26 | } 27 | 28 | return passed; 29 | } 30 | 31 | void cluster_entry(void *arg){ 32 | 33 | BENCH 34 | 35 | return; 36 | } 37 | -------------------------------------------------------------------------------- /test/mrWolf/sqrt/test_lib/riscy/cluster.h: -------------------------------------------------------------------------------- 1 | #ifndef __INC_CLUSTER_H__ 2 | #define __INC_CLUSTER_H__ 3 | 4 | void cluster_entry(void *arg); 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /test/mrWolf/sqrt/test_lib/riscy/test.c: -------------------------------------------------------------------------------- 1 | #include "rtos_hal.h" 2 | #include "stdio.h" 3 | #include "cluster.h" 4 | 5 | 6 | 7 | int main(){ 8 | 9 | // Before being used, the cluster must be mounter, for example in case it must be 10 | // turned on. 11 | rt_cluster_mount(1, 0, 0, NULL); 12 | 13 | // This is the most basic call we can do to the cluster with all default 14 | // parameters (default stack size, max number of cores, etc) and is 15 | // synchronous (last event parameter is NULL) which means we are blocked 16 | // until the call is finished 17 | rt_cluster_call(NULL, 0, cluster_entry, NULL, NULL, 0, 0, 0, NULL); 18 | 19 | // It must then be unmounted when it is not needed anymore so that it is turned off 20 | rt_cluster_mount(0, 0, 0, NULL); 21 | 22 | 23 | return 0; 24 | 25 | } 26 | 27 | -------------------------------------------------------------------------------- /tutorial/baseline/Makefile: -------------------------------------------------------------------------------- 1 | PULP_APP = dotprod 2 | PULP_APP_FC_SRCS = main.c 3 | 4 | PULP_LDFLAGS += -lplpdsp -lm 5 | 6 | PULP_CFLAGS += -O3 -g 7 | 8 | -include $(PULP_SDK_HOME)/install/rules/pulp.mk 9 | -------------------------------------------------------------------------------- /tutorial/baseline/data.h: -------------------------------------------------------------------------------- 1 | #include "rtos_hal.h" 2 | 3 | #define VLEN 80 4 | 5 | int32_t a[VLEN] = {9, 8, 9, -5, 6, -8, -1, -8, 8, -3, 2, 5, -2, 6 | 3, -7, 2, -10, -10, 1, 7, 1, -10, -1, 8, -7, -4, 7 | 4, -8, 2, -9, -9, 9, -3, 6, -6, 6, 4, 8, -9, 8 | -9, -9, 4, -4, 3, -9, 1, -1, -1, 2, 7, 9, 4, 9 | -9, 2, -7, 3, 9, -7, 1, 5, -8, 2, -6, -3, -8, 10 | -2, -1, -4, 8, -8, -4, 3, 3, -10, 9, 1, -3, 6, 11 | -2, -9}; 12 | int32_t b[VLEN] = {-5, -3, 6, 8, -9, -6, 9, -8, -2, 0, -9, 5, 1, 13 | 1, 3, 7, 9, -6, -2, 1, -7, 0, 1, -3, -6, 2, 14 | -10, 0, -7, -8, -8, -4, -6, -6, -7, 4, -10, 2, -5, 15 | -1, -9, 6, 5, 5, 3, 2, -2, -7, 5, -5, 0, 4, 16 | -4, 0, 6, -6, 1, -9, -2, 2, 7, 7, -9, 9, -10, 17 | 9, 0, -2, 1, 6, -5, -3, 2, 3, -3, 0, -3, -5, 18 | 9, -7}; 19 | 20 | int32_t res = 218; 21 | -------------------------------------------------------------------------------- /tutorial/baseline/main.c: -------------------------------------------------------------------------------- 1 | #include "rtos_hal.h" 2 | #include "stdio.h" 3 | #include "plp_math.h" 4 | #include "data.h" 5 | 6 | int main(){ 7 | 8 | int32_t result=0; 9 | 10 | printf("\nComputing dot prod of i32 numbers\n\n"); // it's better to always end with \n 11 | 12 | // We also count the number of cycles taken to compute it. 13 | // This structure will hold the configuration and also the results in the 14 | // cumulative mode 15 | rt_perf_t perf; 16 | 17 | // It must be initiliazed at least once, this will set all values in the 18 | // structure to zero. 19 | rt_perf_init(&perf); 20 | 21 | // Activate specified events 22 | rt_perf_conf(&perf, (1<