mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
119 lines
4.6 KiB
C
119 lines
4.6 KiB
C
/**
|
|
******************************************************************************
|
|
* @file lite_dense_if32.h
|
|
* @author STMicroelectronics
|
|
* @brief Definitions of runtime-lite dense core kernels (with float f32 input)
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* Copyright (c) 2022 STMicroelectronics.
|
|
* All rights reserved.
|
|
*
|
|
* This software is licensed under terms that can be found in the LICENSE file
|
|
* in the root directory of this software component.
|
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
#ifndef LITE_DENSE_IF32_H
|
|
#define LITE_DENSE_IF32_H
|
|
|
|
#include "ai_lite_interface.h"
|
|
|
|
/*!
|
|
* @brief decompress the weights into a scratch buffer
|
|
|
|
* @ingroup lite_dense_if32
|
|
* @param out pointer to the scratch buffer data
|
|
* @param lut pointer to the compression dictionary
|
|
* @param lut_bits bits used for compression (only 4 or 8 supported)
|
|
* @param n_in if last dimension is not even, specify its size for padding
|
|
* @param n_out: number of elements to be decompressed
|
|
*/
|
|
LITE_API_ENTRY
|
|
const uint8_t* lite_decompress_ilutof32(
|
|
float* out, const uint8_t* data0,
|
|
const float* lut, const uint16_t lut_bits,
|
|
const ai_size n_in, const ai_size n_out);
|
|
|
|
|
|
/*!
|
|
* @brief C struct for a dense layer with signed float input, signed float output, and float weights.
|
|
* @ingroup lite_dense_if32
|
|
* @param output The pointer to output buffer.
|
|
* @param input The pointer to input buffer.
|
|
* @param weights The pointer to weights.
|
|
* @param bias The pointer to bias (NULL if not available).
|
|
* @param n_channel_in The number of channels of the input.
|
|
* @param n_channel_out The number of channels of the output, i.e., the number of dense hidden neurons.
|
|
*/
|
|
typedef struct {
|
|
ai_float* output;
|
|
const ai_float* input;
|
|
const ai_float* weights;
|
|
const ai_float* bias;
|
|
const ai_size n_channel_in;
|
|
const ai_size n_channel_out;
|
|
const ai_size n_elements;
|
|
} forward_lite_dense_if32of32wf32_args;
|
|
|
|
|
|
/*!
|
|
* @brief Forward function for a dense layer with signed float input,
|
|
* signed float output, and float weights.
|
|
* @ingroup lite_dense_if32
|
|
* @param args pointer to @ref forward_lite_dense_if32of32wf32_args structure
|
|
*/
|
|
LITE_API_ENTRY
|
|
void forward_lite_dense_if32of32wf32(
|
|
forward_lite_dense_if32of32wf32_args* args);
|
|
|
|
|
|
/*!
|
|
* @brief Forward function for a dense layer with signed float input,
|
|
* signed float output, and 4bit LUT compressed weights.
|
|
* @ingroup lite_dense_if32
|
|
* @param output The pointer to output buffer.
|
|
* @param weights_lut The pointer to compressed weights LUT table (16 entries).
|
|
* @param input The pointer to input buffer.
|
|
* @param weights_indeces The pointer to compressed weights indeces table (packed 4bits buffer).
|
|
* @param scratch_lut The pointer to cache buffer where to prefetch weights_lut values. (optional)
|
|
* @param bias The pointer to bias (NULL if not available).
|
|
* @param n_channel_in The number of channels of the input.
|
|
* @param n_channel_out The number of channels of the output, i.e., the number of dense hidden neurons.
|
|
* @param n_elements The number of elements to process
|
|
*/
|
|
LITE_API_ENTRY
|
|
void forward_lite_dense_if32of32wf32_lut4(
|
|
ai_float* output, const ai_float* input,
|
|
const ai_u8* weights_indeces, const ai_float* weights_lut, ai_float* scratch_lut,
|
|
const ai_float* bias,
|
|
const ai_size n_channel_in, const ai_size n_channel_out,
|
|
const ai_size n_elements);
|
|
|
|
|
|
/*!
|
|
* @brief Forward function for a dense layer with signed float input,
|
|
* signed float output, and 8bit LUT compressed weights.
|
|
* @ingroup lite_dense_if32
|
|
* @param output The pointer to output buffer.
|
|
* @param input The pointer to input buffer.
|
|
* @param weights_indeces The pointer to compressed weights indeces table (8bits buffer).
|
|
* @param weights_lut The pointer to compressed weights LUT table (256 entries).
|
|
* @param scratch_lut The pointer to cache buffer where to prefetch weights_lut values. (optional)
|
|
* @param bias The pointer to bias (NULL if not available).
|
|
* @param n_channel_in The number of channels of the input.
|
|
* @param n_channel_out The number of channels of the output, i.e., the number of dense hidden neurons.
|
|
* @param n_elements The number of elements to process
|
|
*/
|
|
LITE_API_ENTRY
|
|
void forward_lite_dense_if32of32wf32_lut8(
|
|
ai_float* output, const ai_float* input,
|
|
const ai_u8* weights_indeces, const ai_float* weights_lut, ai_float* scratch_lut,
|
|
const ai_float* bias,
|
|
const ai_size n_channel_in, const ai_size n_channel_out,
|
|
const ai_size n_elements);
|
|
|
|
|
|
#endif /* LITE_DENSE_IF32_H */
|