Fully Connected

riscv_nmsis_nn_status riscv_nn_vec_mat_mul_result_acc_s16(const int16_t *lhs, const int8_t *rhs, const int64_t *effective_bias, int16_t *dst, const int32_t dst_multiplier, const int32_t dst_shift, const int32_t rhs_cols, const int32_t rhs_rows, const int32_t batches, const int32_t batch_offset)
riscv_nmsis_nn_status riscv_nn_vec_mat_mult_t_per_ch_s8(const int8_t *lhs, const int8_t *rhs, const int32_t *kernel_sum, const int32_t *bias, int8_t *dst, const int32_t lhs_offset, const int32_t dst_offset, const int32_t *dst_multiplier, const int32_t *dst_shift, const int32_t rhs_cols, const int32_t rhs_rows, const int32_t activation_min, const int32_t activation_max, const int32_t address_offset, const int32_t rhs_offset)
riscv_nmsis_nn_status riscv_nn_vec_mat_mult_t_s16(const int16_t *lhs, const int8_t *rhs, const int64_t *bias, int16_t *dst, const int32_t dst_multiplier, const int32_t dst_shift, const int32_t rhs_cols, const int32_t rhs_rows, const int32_t activation_min, const int32_t activation_max)
riscv_nmsis_nn_status riscv_nn_vec_mat_mult_t_s16_s16(const int16_t *lhs, const int16_t *rhs, const int64_t *bias, int16_t *dst, const int32_t dst_multiplier, const int32_t dst_shift, const int32_t rhs_cols, const int32_t rhs_rows, const int32_t activation_min, const int32_t activation_max)
riscv_nmsis_nn_status riscv_nn_vec_mat_mult_t_s4(const int8_t *lhs, const int8_t *packed_rhs, const int32_t *bias, int8_t *dst, const int32_t lhs_offset, const int32_t dst_offset, const int32_t dst_multiplier, const int32_t dst_shift, const int32_t rhs_cols, const int32_t rhs_rows, const int32_t activation_min, const int32_t activation_max)
riscv_nmsis_nn_status riscv_nn_vec_mat_mult_t_s8(const int8_t *lhs, const int8_t *rhs, const int32_t *kernel_sum, const int32_t *bias, int8_t *dst, const int32_t lhs_offset, const int32_t dst_offset, const int32_t dst_multiplier, const int32_t dst_shift, const int32_t rhs_cols, const int32_t rhs_rows, const int32_t activation_min, const int32_t activation_max, const int32_t address_offset, const int32_t rhs_offset)
riscv_nmsis_nn_status riscv_nn_vec_mat_mult_t_svdf_s8(const int8_t *lhs, const int8_t *rhs, int16_t *dst, const int32_t lhs_offset, const int32_t dst_offset, const int32_t dst_multiplier, const int32_t dst_shift, const int32_t rhs_cols, const int32_t rhs_rows, const int32_t activation_min, const int32_t activation_max)
group supportFC

Support functions for Fully Connected.

Functions

riscv_nmsis_nn_status riscv_nn_vec_mat_mul_result_acc_s16(const int16_t *lhs, const int8_t *rhs, const int64_t *effective_bias, int16_t *dst, const int32_t dst_multiplier, const int32_t dst_shift, const int32_t rhs_cols, const int32_t rhs_rows, const int32_t batches, const int32_t batch_offset)

The result of the multiplication is accumulated to the passed result buffer. Multiplies a matrix by a “batched” vector (i.e. a matrix with a batch dimension composed by input vectors independent from each other).

Parameters:
  • lhs – [in] Batched vector

  • rhs – [in] Weights - input matrix (H(Rows)xW(Columns))

  • effective_bias – [in] Bias + lhs_offset * kernel_sum term precalculated into a constant vector.

  • dst – [out] Output

  • dst_multiplier – [in] Multiplier for quantization

  • dst_shift – [in] Shift for quantization

  • rhs_cols – [in] Vector/matarix column length

  • rhs_rows – [in] Row count of matrix

  • batches – [in] Batch size

  • batch_offset – [in] Number of timesteps between consecutive batches in input, see riscv_nn_lstm_step_s16. Note that the output is always stored with sequential batches.

Returns:

The function returns RISCV_NMSIS_NN_SUCCESS

riscv_nmsis_nn_status riscv_nn_vec_mat_mult_t_per_ch_s8(const int8_t *lhs, const int8_t *rhs, const int32_t *kernel_sum, const int32_t *bias, int8_t *dst, const int32_t lhs_offset, const int32_t dst_offset, const int32_t *dst_multiplier, const int32_t *dst_shift, const int32_t rhs_cols, const int32_t rhs_rows, const int32_t activation_min, const int32_t activation_max, const int32_t address_offset, const int32_t rhs_offset)

s8 Vector by Matrix (transposed) multiplication using per channel quantization for output

Parameters:
  • lhs – [in] Input left-hand side vector

  • rhs – [in] Input right-hand side matrix (transposed)

  • kernel_sum – [in] Kernel sums of the kernels (rhs). See riscv_vector_sum_s8 for more info.

  • bias – [in] Input bias

  • dst – [out] Output vector

  • lhs_offset – [in] Offset to be added to the input values of the left-hand side vector. Range: -127 to 128

  • dst_offset – [in] Offset to be added to the output values. Range: -127 to 128

  • dst_multiplier – [in] Output multipliers

  • dst_shift – [in] Output shifts

  • rhs_cols – [in] Number of columns in the right-hand side input matrix

  • rhs_rows – [in] Number of rows in the right-hand side input matrix

  • activation_min – [in] Minimum value to clamp the output to. Range: int8

  • activation_max – [in] Maximum value to clamp the output to. Range: int8

  • address_offset – [in] Memory position offset for dst. First output is stored at ‘dst’, the second at ‘dst + address_offset’ and so on. Default value is typically 1.

  • rhs_offset – [in] Offset to be added to the input values of the right-hand side vector. Range: -127 to 128

Returns:

The function returns RISCV_NMSIS_NN_SUCCESS

riscv_nmsis_nn_status riscv_nn_vec_mat_mult_t_s16(const int16_t *lhs, const int8_t *rhs, const int64_t *bias, int16_t *dst, const int32_t dst_multiplier, const int32_t dst_shift, const int32_t rhs_cols, const int32_t rhs_rows, const int32_t activation_min, const int32_t activation_max)

s16 Vector by s8 Matrix (transposed) multiplication

Parameters:
  • lhs – [in] Input left-hand side vector

  • rhs – [in] Input right-hand side matrix (transposed)

  • bias – [in] Input bias

  • dst – [out] Output vector

  • dst_multiplier – [in] Output multiplier

  • dst_shift – [in] Output shift

  • rhs_cols – [in] Number of columns in the right-hand side input matrix

  • rhs_rows – [in] Number of rows in the right-hand side input matrix

  • activation_min – [in] Minimum value to clamp the output to. Range: int16

  • activation_max – [in] Maximum value to clamp the output to. Range: int16

Returns:

The function returns RISCV_NMSIS_NN_SUCCESS

riscv_nmsis_nn_status riscv_nn_vec_mat_mult_t_s16_s16(const int16_t *lhs, const int16_t *rhs, const int64_t *bias, int16_t *dst, const int32_t dst_multiplier, const int32_t dst_shift, const int32_t rhs_cols, const int32_t rhs_rows, const int32_t activation_min, const int32_t activation_max)

s16 Vector by s16 Matrix (transposed) multiplication

Parameters:
  • lhs – [in] Input left-hand side vector

  • rhs – [in] Input right-hand side matrix (transposed)

  • bias – [in] Input bias

  • dst – [out] Output vector

  • dst_multiplier – [in] Output multiplier

  • dst_shift – [in] Output shift

  • rhs_cols – [in] Number of columns in the right-hand side input matrix

  • rhs_rows – [in] Number of rows in the right-hand side input matrix

  • activation_min – [in] Minimum value to clamp the output to. Range: int16

  • activation_max – [in] Maximum value to clamp the output to. Range: int16

Returns:

The function returns RISCV_NMSIS_NN_SUCCESS

riscv_nmsis_nn_status riscv_nn_vec_mat_mult_t_s4(const int8_t *lhs, const int8_t *packed_rhs, const int32_t *bias, int8_t *dst, const int32_t lhs_offset, const int32_t dst_offset, const int32_t dst_multiplier, const int32_t dst_shift, const int32_t rhs_cols, const int32_t rhs_rows, const int32_t activation_min, const int32_t activation_max)

s4 Vector by Matrix (transposed) multiplication

Parameters:
  • lhs – [in] Input left-hand side vector

  • packed_rhs – [in] Input right-hand side matrix (transposed)

  • bias – [in] Input bias

  • dst – [out] Output vector

  • lhs_offset – [in] Offset to be added to the input values of the left-hand side vector. Range: -127 to 128

  • dst_offset – [in] Offset to be added to the output values. Range: -127 to 128

  • dst_multiplier – [in] Output multiplier

  • dst_shift – [in] Output shift

  • rhs_cols – [in] Number of columns in the right-hand side input matrix

  • rhs_rows – [in] Number of rows in the right-hand side input matrix

  • activation_min – [in] Minimum value to clamp the output to. Range: int8

  • activation_max – [in] Maximum value to clamp the output to. Range: int8

Returns:

The function returns RISCV_NMSIS_NN_SUCCESS

riscv_nmsis_nn_status riscv_nn_vec_mat_mult_t_s8(const int8_t *lhs, const int8_t *rhs, const int32_t *kernel_sum, const int32_t *bias, int8_t *dst, const int32_t lhs_offset, const int32_t dst_offset, const int32_t dst_multiplier, const int32_t dst_shift, const int32_t rhs_cols, const int32_t rhs_rows, const int32_t activation_min, const int32_t activation_max, const int32_t address_offset, const int32_t rhs_offset)

s8 Vector by Matrix (transposed) multiplication

Parameters:
  • lhs – [in] Input left-hand side vector

  • rhs – [in] Input right-hand side matrix (transposed)

  • kernel_sum – [in] Kernel sums of the kernels (rhs). See riscv_vector_sum_s8 for more info.

  • bias – [in] Input bias

  • dst – [out] Output vector

  • lhs_offset – [in] Offset to be added to the input values of the left-hand side vector. Range: -127 to 128

  • dst_offset – [in] Offset to be added to the output values. Range: -127 to 128

  • dst_multiplier – [in] Output multiplier

  • dst_shift – [in] Output shift

  • rhs_cols – [in] Number of columns in the right-hand side input matrix

  • rhs_rows – [in] Number of rows in the right-hand side input matrix

  • activation_min – [in] Minimum value to clamp the output to. Range: int8

  • activation_max – [in] Maximum value to clamp the output to. Range: int8

  • address_offset – [in] Memory position offset for dst. First output is stored at ‘dst’, the second at ‘dst + address_offset’ and so on. Default value is typically 1.

  • rhs_offset – [in] Offset to be added to the input values of the right-hand side vector. Range: -127 to 128

Returns:

The function returns RISCV_NMSIS_NN_SUCCESS

riscv_nmsis_nn_status riscv_nn_vec_mat_mult_t_svdf_s8(const int8_t *lhs, const int8_t *rhs, int16_t *dst, const int32_t lhs_offset, const int32_t dst_offset, const int32_t dst_multiplier, const int32_t dst_shift, const int32_t rhs_cols, const int32_t rhs_rows, const int32_t activation_min, const int32_t activation_max)

s8 Vector by Matrix (transposed) multiplication with s16 output

Parameters:
  • lhs – [in] Input left-hand side vector

  • rhs – [in] Input right-hand side matrix (transposed)

  • dst – [out] Output vector

  • lhs_offset – [in] Offset to be added to the input values of the left-hand side vector. Range: -127 to 128

  • scatter_offset – [in] Address offset for dst. First output is stored at ‘dst’, the second at ‘dst + scatter_offset’ and so on.

  • dst_multiplier – [in] Output multiplier

  • dst_shift – [in] Output shift

  • rhs_cols – [in] Number of columns in the right-hand side input matrix

  • rhs_rows – [in] Number of rows in the right-hand side input matrix

  • activation_min – [in] Minimum value to clamp the output to. Range: int16

  • activation_max – [in] Maximum value to clamp the output to. Range: int16

Returns:

The function returns RISCV_NMSIS_NN_SUCCESS