HPM SDK
HPMicro Software Development Kit

The pooling functions are used to downsample input data. They include max and average pooling functions. More...

Functions

static void hpm_nn_avepool_HWC_s8 (q7_t *in_tensor, const uint16_t in_tensor_dim, const uint16_t in_tensor_ch, const uint16_t ker_dim, const uint16_t pad, const uint16_t stride, const uint16_t out_tensor_dim, q7_t *in_tmp_buf, q7_t *out_tensor)
 This is an average pooling function for signed 8-bit integer inputs. More...
 
static void hpm_nn_avepool_HWC_s8_any (q7_t *in_tensor, const uint16_t in_tensor_dim_x, const uint16_t in_tensor_dim_y, const uint16_t in_tensor_ch, const uint16_t ker_dim_x, const uint16_t ker_dim_y, const uint16_t pad_x, const uint16_t pad_y, const uint16_t stride_x, const uint16_t stride_y, const uint16_t out_tensor_dim_x, const uint16_t out_tensor_dim_y, q7_t *in_tmp_buf, q7_t *out_tensor, const uint16_t out_lshift)
 This is an average pooling function for signed 8-bit integer inputs in any x and y dimensions. More...
 
static int32_t hpm_nn_avepool_HWC_s8_any_act (const int in_tensor_dim_y, const int in_tensor_dim_x, const int out_tensor_dim_y, const int out_tensor_dim_x, const int stride_y, const int stride_x, const int ker_dim_y, const int ker_dim_x, const int pad_y, const int pad_x, const int act_min, const int act_max, const int in_tensor_ch, int8_t *in_tensor, int16_t *in_tmp_buf, int8_t *out_tensor)
 This is an average pooling function for S8 inputs with any x and y dimension with the actvating parameters to limit the outputs. More...
 
static int32_t hpm_nn_avepool_HWC_s8_any_act_get_buffer_size (const int out_tensor_dim_x, const int in_tensor_ch)
 This function is used to obtain the required size, in bytes, for the input temporary buffer of riscv_nn_avepool_HWC_s8_any_act. More...
 
static void hpm_nn_maxpool_HWC_s8 (q7_t *in_tensor, const uint16_t in_tensor_dim, const uint16_t in_tensor_ch, const uint16_t ker_dim, const uint16_t pad, const uint16_t stride, const uint16_t out_tensor_dim, q7_t *in_tmp_buf, q7_t *out_tensor)
 This is a max pooling function for signed 8-bit integer inputs. More...
 
static int32_t hpm_nn_maxpool_HWC_s8_any_act (const uint16_t in_tensor_dim_y, const uint16_t in_tensor_dim_x, const uint16_t out_tensor_dim_y, const uint16_t out_tensor_dim_x, const uint16_t stride_y, const uint16_t stride_x, const uint16_t ker_dim_y, const uint16_t ker_dim_x, const uint16_t pad_y, const uint16_t pad_x, const int8_t act_min, const int8_t act_max, const uint16_t in_tensor_ch, int8_t *in_tensor, int16_t *tmp_buffer, int8_t *out_tensor)
 This is a max pooling function for signed 8-bit integer inputs in any x and y dimensions with the actvating parameters to limit the outputs. More...
 

Detailed Description

The pooling functions are used to downsample input data. They include max and average pooling functions.

Function Documentation

◆ hpm_nn_avepool_HWC_s8()

static void hpm_nn_avepool_HWC_s8 ( q7_t *  in_tensor,
const uint16_t  in_tensor_dim,
const uint16_t  in_tensor_ch,
const uint16_t  ker_dim,
const uint16_t  pad,
const uint16_t  stride,
const uint16_t  out_tensor_dim,
q7_t *  in_tmp_buf,
q7_t *  out_tensor 
)
inlinestatic

#include <middleware/hpm_math/hpm_math.h>

This is an average pooling function for signed 8-bit integer inputs.

Parameters
[in]in_tensorpointer of the input tensor
[in]in_tensor_dimdimension of the input tensor
[in]in_tensor_chnumber of input tensor channels
[in]ker_dimdimension of the filter kernel
[in]padpadding size
[in]strideconvolution stride
[in]out_tensor_dimdimension of the output tensor
[in]in_tmp_buftemporary buffer for the input tensor
[out]out_tensorpointer of the output tensor. It is required when -mext-dsp is enabled and its size must be equal to "2 * out_tensor_dim * in_tensor_ch".

Example:

#define IN_DIM 32
#define IN_CH 32
#define KER_DIM 3
#define PAD 0
#define STRIDE 2
#define OUT_DIM 15
q7_t in_data[IN_CH * IN_DIM * IN_DIM] = {...};
q7_t out_data[IN_CH * OUT_DIM * OUT_DIM] = {...};
q7_t in_tmp_buf[2 * OUT_DIM * IN_CH];
hpm_nn_avepool_HWC_s8(in_data, IN_DIM, IN_CH, KER_DIM, PAD, STRIDE,
OUT_DIM, in_tmp_buf, out_data);
static int32_t in_tmp_buf
Definition: hpm_math.h:14080
static void hpm_nn_avepool_HWC_s8(q7_t *in_tensor, const uint16_t in_tensor_dim, const uint16_t in_tensor_ch, const uint16_t ker_dim, const uint16_t pad, const uint16_t stride, const uint16_t out_tensor_dim, q7_t *in_tmp_buf, q7_t *out_tensor)
This is an average pooling function for signed 8-bit integer inputs.
Definition: hpm_math.h:15466

◆ hpm_nn_avepool_HWC_s8_any()

static void hpm_nn_avepool_HWC_s8_any ( q7_t *  in_tensor,
const uint16_t  in_tensor_dim_x,
const uint16_t  in_tensor_dim_y,
const uint16_t  in_tensor_ch,
const uint16_t  ker_dim_x,
const uint16_t  ker_dim_y,
const uint16_t  pad_x,
const uint16_t  pad_y,
const uint16_t  stride_x,
const uint16_t  stride_y,
const uint16_t  out_tensor_dim_x,
const uint16_t  out_tensor_dim_y,
q7_t *  in_tmp_buf,
q7_t *  out_tensor,
const uint16_t  out_lshift 
)
inlinestatic

#include <middleware/hpm_math/hpm_math.h>

This is an average pooling function for signed 8-bit integer inputs in any x and y dimensions.

Parameters
[in]in_tensorpointer of the input tensor
[in]in_tensor_dim_xx dimension of the input tensor
[in]in_tensor_dim_yy dimension of the input tensor
[in]in_tensor_chnumber of input tensor channels
[in]ker_dim_xx dimension of the filter kernel
[in]ker_dim_yy dimension of the filter kernel
[in]pad_xpadding size in the x dimension
[in]pad_ypadding size in the y dimension
[in]stride_xconvolution stride in the x dimension
[in]stride_yconvolution stride in the y dimension
[in]out_tensor_dim_xx dimension of the output tensor
[in]out_tensor_dim_yy dimension of the output tensor
[in]in_tmp_buftemporary buffer for the input tensor. It is required when -mext-dsp is enabled and its size must be equal to "2 * out_tensor_dim_x * in_tensor_ch".
[out]out_tensorpointer of the output tensor
[in]out_lshiftleft shift amount for the output

Example:

#define IN_X 160
#define IN_Y 120
#define IN_CH 3
#define KER_DIM_X 3
#define KER_DIM_Y 5
#define PAD_X 1
#define PAD_Y 1
#define STRIDE_X 2
#define STRIDE_Y 2
#define OUT_LSHIFT 3
#define OUT_X 80
#define OUT_Y 59
q7_t in_data[IN_CH * IN_X * IN_Y] = {...};
q7_t out_data[IN_CH * OUT_X * OUT_Y] = {...};
q7_t in_tmp_buf[2 * IN_CH * OUT_X * OUT_Y];
hpm_nn_avepool_HWC_s8_any(in_data, IN_X, IN_Y, IN_CH, KER_DIM_X, KER_DIM_Y,
PAD_X, PAD_Y, STRIDE_X, STRIDE_Y, OUT_X, OUT_Y, in_tmp_buf, out_data,
OUT_LSHIFT);
static void hpm_nn_avepool_HWC_s8_any(q7_t *in_tensor, const uint16_t in_tensor_dim_x, const uint16_t in_tensor_dim_y, const uint16_t in_tensor_ch, const uint16_t ker_dim_x, const uint16_t ker_dim_y, const uint16_t pad_x, const uint16_t pad_y, const uint16_t stride_x, const uint16_t stride_y, const uint16_t out_tensor_dim_x, const uint16_t out_tensor_dim_y, q7_t *in_tmp_buf, q7_t *out_tensor, const uint16_t out_lshift)
This is an average pooling function for signed 8-bit integer inputs in any x and y dimensions.
Definition: hpm_math.h:15531

◆ hpm_nn_avepool_HWC_s8_any_act()

static int32_t hpm_nn_avepool_HWC_s8_any_act ( const int  in_tensor_dim_y,
const int  in_tensor_dim_x,
const int  out_tensor_dim_y,
const int  out_tensor_dim_x,
const int  stride_y,
const int  stride_x,
const int  ker_dim_y,
const int  ker_dim_x,
const int  pad_y,
const int  pad_x,
const int  act_min,
const int  act_max,
const int  in_tensor_ch,
int8_t *  in_tensor,
int16_t *  in_tmp_buf,
int8_t *  out_tensor 
)
inlinestatic

#include <middleware/hpm_math/hpm_math.h>

This is an average pooling function for S8 inputs with any x and y dimension with the actvating parameters to limit the outputs.

Parameters
[in]in_tensor_dim_yy dimension of the input tensor
[in]in_tensor_dim_xx dimension of the input tensor
[in]out_tensor_dim_yy dimension of the output tensor
[in]out_tensor_dim_xx dimension of the output tensor
[in]stride_yconvolution stride in the y dimension
[in]stride_xconvolution stride in the x dimension
[in]ker_dim_yy dimension of the filter kernel
[in]ker_dim_xx dimension of the filter kernel
[in]pad_ypadding size in the y dimension
[in]pad_xpadding size in the x dimension
[in]act_minminimum value that the output tensor is limited to. It should be in the range of -128 to 127.
[in]act_maxmaximum value that the output tensor is limited to. It should be in the range of -128 to 127.
[in]in_tensor_chnumber of input tensor channels
[in]in_tensorpointer of the input tensor
[in]in_tmp_buftemporary buffer for the input tensor. Its needed size could be obtained by calling riscv_nn_avepool_s8_HWC_any_get_buffer_size.
[out]out_tensorpointer of the output tensor
Returns
This function only returns 0.

◆ hpm_nn_avepool_HWC_s8_any_act_get_buffer_size()

static int32_t hpm_nn_avepool_HWC_s8_any_act_get_buffer_size ( const int  out_tensor_dim_x,
const int  in_tensor_ch 
)
inlinestatic

#include <middleware/hpm_math/hpm_math.h>

This function is used to obtain the required size, in bytes, for the input temporary buffer of riscv_nn_avepool_HWC_s8_any_act.

Parameters
[in]out_tensor_dim_xx dimension of the output tensor
[in]in_tensor_chnumber of input tensor channels
Returns
This function returns the size required by the temporary buffer.

◆ hpm_nn_maxpool_HWC_s8()

static void hpm_nn_maxpool_HWC_s8 ( q7_t *  in_tensor,
const uint16_t  in_tensor_dim,
const uint16_t  in_tensor_ch,
const uint16_t  ker_dim,
const uint16_t  pad,
const uint16_t  stride,
const uint16_t  out_tensor_dim,
q7_t *  in_tmp_buf,
q7_t *  out_tensor 
)
inlinestatic

#include <middleware/hpm_math/hpm_math.h>

This is a max pooling function for signed 8-bit integer inputs.

Parameters
[in]in_tensorpointer of the input tensor
[in]in_tensor_dimdimension of the input tensor
[in]in_tensor_chnumber of input tensor channels
[in]ker_dimdimension of the filter kernel
[in]padpadding size
[in]strideconvolution stride
[in]out_tensor_dimdimension of the output tensor
[in]in_tmp_bufdummy
[out]out_tensorpointer of the output tensor

Example:

#define IN_DIM 32
#define IN_CH 32
#define KER_DIM 3
#define PAD 0
#define STRIDE 2
#define OUT_DIM 15
q7_t in_data[IN_CH * IN_DIM * IN_DIM] = {...};
q7_t out_data[IN_CH * OUT_DIM * OUT_DIM] = {...};
hpm_nn_maxpool_HWC_s8(in_data, IN_DIM, IN_CH, KER_DIM, PAD, STRIDE,
OUT_DIM, NULL, out_data);
static void hpm_nn_maxpool_HWC_s8(q7_t *in_tensor, const uint16_t in_tensor_dim, const uint16_t in_tensor_ch, const uint16_t ker_dim, const uint16_t pad, const uint16_t stride, const uint16_t out_tensor_dim, q7_t *in_tmp_buf, q7_t *out_tensor)
This is a max pooling function for signed 8-bit integer inputs.
Definition: hpm_math.h:15670

◆ hpm_nn_maxpool_HWC_s8_any_act()

static int32_t hpm_nn_maxpool_HWC_s8_any_act ( const uint16_t  in_tensor_dim_y,
const uint16_t  in_tensor_dim_x,
const uint16_t  out_tensor_dim_y,
const uint16_t  out_tensor_dim_x,
const uint16_t  stride_y,
const uint16_t  stride_x,
const uint16_t  ker_dim_y,
const uint16_t  ker_dim_x,
const uint16_t  pad_y,
const uint16_t  pad_x,
const int8_t  act_min,
const int8_t  act_max,
const uint16_t  in_tensor_ch,
int8_t *  in_tensor,
int16_t *  tmp_buffer,
int8_t *  out_tensor 
)
inlinestatic

#include <middleware/hpm_math/hpm_math.h>

This is a max pooling function for signed 8-bit integer inputs in any x and y dimensions with the actvating parameters to limit the outputs.

Parameters
[in]in_tensor_dim_yy dimension of the input tensor
[in]in_tensor_dim_xx dimension of the input tensor
[in]out_tensor_dim_yy dimension of the output tensor
[in]out_tensor_dim_xx dimension of the output tensor
[in]stride_yconvolution stride in the y dimension
[in]stride_xconvolution stride in the x dimension
[in]ker_dim_yy dimension of the filter kernel
[in]ker_dim_xx dimension of the filter kernel
[in]pad_ypadding size in the y dimension
[in]pad_xpadding size in the x dimension
[in]act_minminimum value that the output tensor is limited to. It should be in the range of -128 to 127.
[in]act_maxmaximum value that the output tensor is limited to. It should be in the range of -128 to 127.
[in]in_tensor_chnumber of input tensor channels
[in]in_tensorpointer of the input tensor
[in]tmp_bufferdummy
[in]out_tensorpointer of the output tensor
Returns
This function only returns 0.