| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- /* ----------------------------------------------------------------------
- * Project: TinyEngine
- * Title: mutable_function.h
- *
- * Reference papers:
- * - MCUNet: Tiny Deep Learning on IoT Device, NeurIPS 2020
- * - MCUNetV2: Memory-Efficient Patch-based Inference for Tiny Deep Learning, NeurIPS 2021
- * - MCUNetV3: On-Device Training Under 256KB Memory, NeurIPS 2022
- * Contact authors:
- * - Wei-Ming Chen, wmchen@mit.edu
- * - Wei-Chen Wang, wweichen@mit.edu
- * - Ji Lin, jilin@mit.edu
- * - Ligeng Zhu, ligeng@mit.edu
- * - Song Han, songhan@mit.edu
- *
- * Target ISA: ARMv7E-M
- * -------------------------------------------------------------------- */
- #ifndef TINYENGINE_SOURCE_CONVOLUTIONFUNCTIONS_MIX_MUTABLE_FUNCTION_H_
- #define TINYENGINE_SOURCE_CONVOLUTIONFUNCTIONS_MIX_MUTABLE_FUNCTION_H_
- /* mutable functions */
- #if KERNEL_PRE == 4
- #define mix_read_and_pad_reordered b4_read_and_pad_reordered
- #define mix_nn_read_q7x4 b4_nn_read_q7x4
- #define mix_read_and_pad b4_read_and_pad
- #elif KERNEL_PRE == 2
- #define mix_read_and_pad_reordered b2_read_and_pad_reordered
- #define mix_nn_read_q7x4 b2_nn_read_q7x4
- #define mix_read_and_pad b2_read_and_pad
- #else
- #define mix_read_and_pad_reordered read_and_pad_reordered
- #define mix_nn_read_q7x4 hpm_nn_read_q7x4
- #define mix_read_and_pad read_and_pad
- #endif
- #if INPUT_PRE == 4
- #define mix_q7_q15_offset_ele b4_q7_q15_offset_ele
- #elif INPUT_PRE == 2
- #define mix_q7_q15_offset_ele b2_q7_q15_offset_ele
- #else
- #define mix_q7_q15_offset_ele q7_q15_offset_ele
- #endif
- #if INPUT_PRE == 4
- #define mix_q7_q15_offset_reordered_ele b4_q15_offset_reordered_ele
- #define mix_load_1row_1col b4_load_1row_1col
- #define mix_load_1row_2col b4_load_1row_2col
- #define mix_load_1row_3col b4_load_1row_3col
- #define mix_load_1row_4col b4_load_1row_4col
- #define mix_load_1row_5col b4_load_1row_5col
- #define mix_load_1row_6col b4_load_1row_6col
- #define mix_load_1row_7col b4_load_1row_7col
- #define mix_load_2row_1col b4_load_2row_1col
- #define mix_load_2row_2col b4_load_2row_2col
- #define mix_load_2row_3col b4_load_2row_3col
- #define mix_load_2row_4col b4_load_2row_4col
- #define mix_load_2row_5col b4_load_2row_5col
- #define mix_load_2row_6col b4_load_2row_6col
- #define mix_load_2row_7col b4_load_2row_7col
- #define mix_load_3row_1col b4_load_3row_1col
- #define mix_load_3row_2col b4_load_3row_2col
- #define mix_load_3row_3col b4_load_3row_3col
- #define mix_load_3row_4col b4_load_3row_4col
- #define mix_load_3row_5col b4_load_3row_5col
- #define mix_load_3row_6col b4_load_3row_6col
- #define mix_load_3row_7col b4_load_3row_7col
- #define mix_load_4row_1col b4_load_4row_1col
- #define mix_load_4row_2col b4_load_4row_2col
- #define mix_load_4row_3col b4_load_4row_3col
- #define mix_load_4row_4col b4_load_4row_4col
- #define mix_load_4row_5col b4_load_4row_5col
- #define mix_load_4row_6col b4_load_4row_6col
- #define mix_load_4row_7col b4_load_4row_7col
- #define mix_load_5row_1col b4_load_5row_1col
- #define mix_load_5row_2col b4_load_5row_2col
- #define mix_load_5row_3col b4_load_5row_3col
- #define mix_load_5row_4col b4_load_5row_4col
- #define mix_load_5row_5col b4_load_5row_5col
- #define mix_load_5row_6col b4_load_5row_6col
- #define mix_load_5row_7col b4_load_5row_7col
- #define mix_load_6row_1col b4_load_6row_1col
- #define mix_load_6row_2col b4_load_6row_2col
- #define mix_load_6row_3col b4_load_6row_3col
- #define mix_load_6row_4col b4_load_6row_4col
- #define mix_load_6row_5col b4_load_6row_5col
- #define mix_load_6row_6col b4_load_6row_6col
- #define mix_load_6row_7col b4_load_6row_7col
- #define mix_load_7row_1col b4_load_7row_1col
- #define mix_load_7row_2col b4_load_7row_2col
- #define mix_load_7row_3col b4_load_7row_3col
- #define mix_load_7row_4col b4_load_7row_4col
- #define mix_load_7row_5col b4_load_7row_5col
- #define mix_load_7row_6col b4_load_7row_6col
- #define mix_load_7row_7col b4_load_7row_7col
- #elif INPUT_PRE == 2
- #define mix_q7_q15_offset_reordered_ele b2_q15_offset_reordered_ele
- #define mix_load_1row_1col b2_load_1row_1col
- #define mix_load_1row_2col b2_load_1row_2col
- #define mix_load_1row_3col b2_load_1row_3col
- #define mix_load_1row_4col b2_load_1row_4col
- #define mix_load_1row_5col b2_load_1row_5col
- #define mix_load_1row_6col b2_load_1row_6col
- #define mix_load_1row_7col b2_load_1row_7col
- #define mix_load_2row_1col b2_load_2row_1col
- #define mix_load_2row_2col b2_load_2row_2col
- #define mix_load_2row_3col b2_load_2row_3col
- #define mix_load_2row_4col b2_load_2row_4col
- #define mix_load_2row_5col b2_load_2row_5col
- #define mix_load_2row_6col b2_load_2row_6col
- #define mix_load_2row_7col b2_load_2row_7col
- #define mix_load_3row_1col b2_load_3row_1col
- #define mix_load_3row_2col b2_load_3row_2col
- #define mix_load_3row_3col b2_load_3row_3col
- #define mix_load_3row_4col b2_load_3row_4col
- #define mix_load_3row_5col b2_load_3row_5col
- #define mix_load_3row_6col b2_load_3row_6col
- #define mix_load_3row_7col b2_load_3row_7col
- #define mix_load_4row_1col b2_load_4row_1col
- #define mix_load_4row_2col b2_load_4row_2col
- #define mix_load_4row_3col b2_load_4row_3col
- #define mix_load_4row_4col b2_load_4row_4col
- #define mix_load_4row_5col b2_load_4row_5col
- #define mix_load_4row_6col b2_load_4row_6col
- #define mix_load_4row_7col b2_load_4row_7col
- #define mix_load_5row_1col b2_load_5row_1col
- #define mix_load_5row_2col b2_load_5row_2col
- #define mix_load_5row_3col b2_load_5row_3col
- #define mix_load_5row_4col b2_load_5row_4col
- #define mix_load_5row_5col b2_load_5row_5col
- #define mix_load_5row_6col b2_load_5row_6col
- #define mix_load_5row_7col b2_load_5row_7col
- #define mix_load_6row_1col b2_load_6row_1col
- #define mix_load_6row_2col b2_load_6row_2col
- #define mix_load_6row_3col b2_load_6row_3col
- #define mix_load_6row_4col b2_load_6row_4col
- #define mix_load_6row_5col b2_load_6row_5col
- #define mix_load_6row_6col b2_load_6row_6col
- #define mix_load_6row_7col b2_load_6row_7col
- #define mix_load_7row_1col b2_load_7row_1col
- #define mix_load_7row_2col b2_load_7row_2col
- #define mix_load_7row_3col b2_load_7row_3col
- #define mix_load_7row_4col b2_load_7row_4col
- #define mix_load_7row_5col b2_load_7row_5col
- #define mix_load_7row_6col b2_load_7row_6col
- #define mix_load_7row_7col b2_load_7row_7col
- #else
- #define mix_q7_q15_offset_reordered_ele q7_q15_offset_reordered_ele
- #define mix_load_1row_1col load_1row_1col
- #define mix_load_1row_2col load_1row_2col
- #define mix_load_1row_3col load_1row_3col
- #define mix_load_1row_4col load_1row_4col
- #define mix_load_1row_5col load_1row_5col
- #define mix_load_1row_6col load_1row_6col
- #define mix_load_1row_7col load_1row_7col
- #define mix_load_2row_1col load_2row_1col
- #define mix_load_2row_2col load_2row_2col
- #define mix_load_2row_3col load_2row_3col
- #define mix_load_2row_4col load_2row_4col
- #define mix_load_2row_5col load_2row_5col
- #define mix_load_2row_6col load_2row_6col
- #define mix_load_2row_7col load_2row_7col
- #define mix_load_3row_1col load_3row_1col
- #define mix_load_3row_2col load_3row_2col
- #define mix_load_3row_3col load_3row_3col
- #define mix_load_3row_4col load_3row_4col
- #define mix_load_3row_5col load_3row_5col
- #define mix_load_3row_6col load_3row_6col
- #define mix_load_3row_7col load_3row_7col
- #define mix_load_4row_1col load_4row_1col
- #define mix_load_4row_2col load_4row_2col
- #define mix_load_4row_3col load_4row_3col
- #define mix_load_4row_4col load_4row_4col
- #define mix_load_4row_5col load_4row_5col
- #define mix_load_4row_6col load_4row_6col
- #define mix_load_4row_7col load_4row_7col
- #define mix_load_5row_1col load_5row_1col
- #define mix_load_5row_2col load_5row_2col
- #define mix_load_5row_3col load_5row_3col
- #define mix_load_5row_4col load_5row_4col
- #define mix_load_5row_5col load_5row_5col
- #define mix_load_5row_6col load_5row_6col
- #define mix_load_5row_7col load_5row_7col
- #define mix_load_6row_1col load_6row_1col
- #define mix_load_6row_2col load_6row_2col
- #define mix_load_6row_3col load_6row_3col
- #define mix_load_6row_4col load_6row_4col
- #define mix_load_6row_5col load_6row_5col
- #define mix_load_6row_6col load_6row_6col
- #define mix_load_6row_7col load_6row_7col
- #define mix_load_7row_1col load_7row_1col
- #define mix_load_7row_2col load_7row_2col
- #define mix_load_7row_3col load_7row_3col
- #define mix_load_7row_4col load_7row_4col
- #define mix_load_7row_5col load_7row_5col
- #define mix_load_7row_6col load_7row_6col
- #define mix_load_7row_7col load_7row_7col
- #endif
- #if OUTPUT_PRE == 4
- #define mix_assign_requantize() b4_assign_requantize()
- #elif OUTPUT_PRE == 2
- #define mix_assign_requantize() b2_assign_requantize()
- #else
- #define mix_assign_requantize() assign_requantize()
- #endif
- #if KERNEL_PRE == 4
- #if OUTPUT_PRE == 4
- #define mix_nn_mat_mult_kernel_s8_s16_reordered b44_nn_mat_mult_kernel_s8_s16_reordered
- #define mix_nn_mat_mult_kernel_s8_s16_reordered_8mul b44_nn_mat_mult_kernel_s8_s16_reordered_8mul
- #elif OUTPUT_PRE == 2
- #define mix_nn_mat_mult_kernel_s8_s16_reordered b42_nn_mat_mult_kernel_s8_s16_reordered
- #define mix_nn_mat_mult_kernel_s8_s16_reordered_8mul b42_nn_mat_mult_kernel_s8_s16_reordered_8mul
- #else
- #define mix_nn_mat_mult_kernel_s8_s16_reordered b48_nn_mat_mult_kernel_s8_s16_reordered
- #define mix_nn_mat_mult_kernel_s8_s16_reordered_8mul b48_nn_mat_mult_kernel_s8_s16_reordered_8mul
- #endif//OUTPUT
- #elif KERNEL_PRE == 2
- #if OUTPUT_PRE == 4
- #define mix_nn_mat_mult_kernel_s8_s16_reordered b24_nn_mat_mult_kernel_s8_s16_reordered
- #define mix_nn_mat_mult_kernel_s8_s16_reordered_8mul b24_nn_mat_mult_kernel_s8_s16_reordered_8mul
- #elif OUTPUT_PRE == 2
- #define mix_nn_mat_mult_kernel_s8_s16_reordered b22_nn_mat_mult_kernel_s8_s16_reordered
- #define mix_nn_mat_mult_kernel_s8_s16_reordered_8mul b22_nn_mat_mult_kernel_s8_s16_reordered_8mul
- #else
- #define mix_nn_mat_mult_kernel_s8_s16_reordered b28_nn_mat_mult_kernel_s8_s16_reordered
- #define mix_nn_mat_mult_kernel_s8_s16_reordered_8mul b28_nn_mat_mult_kernel_s8_s16_reordered_8mul
- #endif//OUTPUT
- #else
- #define mix_nn_mat_mult_kernel_s8_s16_reordered hpm_nn_mat_mult_kernel_s8_s16_reordered_8mul
- #define mix_nn_mat_mult_kernel_s8_s16_reordered_8mul hpm_nn_mat_mult_kernel_s8_s16_reordered_8mul
- #endif
- #endif /* TINYENGINE_SOURCE_CONVOLUTIONFUNCTIONS_MIX_MUTABLE_FUNCTION_H_ */
|