Skip to content

File syn_nn.c

FileList > src > syntropic > util > syn_nn.c

Go to the source code of this file

Zero-heap TinyML Neural Network Engine implementation.

  • #include "syn_nn.h"
  • #include <math.h>

Public Functions

Type Name
size_t syn_nn_argmax_q7 (const q7_t * outputs, size_t num_outputs)
Find the class index with the highest output value (ArgMax).
SYN_Status syn_nn_attention_q7 (const q7_t * q, const q7_t * k, const q7_t * v, size_t seq_len, size_t d_k, size_t d_v, q7_t * out, uint8_t attn_shift)
INT8 Quantized Scaled Dot-Product Self-Attention Layer.
SYN_Status syn_nn_avgpool1d_q7 (const q7_t * inputs, size_t seq_len, size_t num_channels, q7_t * outputs, size_t pool_size, size_t stride)
1D Average Pooling Layer for INT8 Feature Maps.
SYN_PT_Status syn_nn_conv1d_pt (SYN_PT * pt, const q7_t * inputs, size_t seq_len, size_t num_channels, const q7_t * weights, const q16_t * biases, q7_t * outputs, size_t num_filters, size_t kernel_size, size_t stride, SYN_NN_Activation act, uint8_t out_shift, size_t * current_step, size_t chunk_size)
Evaluate a 1D Temporal Convolution layer cooperatively inside a protothread.
SYN_Status syn_nn_conv1d_q7 (const q7_t * inputs, size_t seq_len, size_t num_channels, const q7_t * weights, const q16_t * biases, q7_t * outputs, size_t num_filters, size_t kernel_size, size_t stride, SYN_NN_Activation act, uint8_t out_shift)
Evaluate a 1D Temporal Convolutional Neural Network layer in INT8 (q7_t).
SYN_Status syn_nn_conv1d_quant_q7 (const q7_t * inputs, size_t seq_len, size_t num_channels, const q7_t * weights, const q16_t * biases, q7_t * outputs, size_t num_filters, size_t kernel_size, size_t stride, SYN_NN_Activation act, const syn_nn_quant_t * quant)
Evaluate a 1D Temporal Convolution layer with affine quantization scaling.
SYN_PT_Status syn_nn_dense_pt (SYN_PT * pt, const q7_t * inputs, size_t num_inputs, const q7_t * weights, const q16_t * biases, q7_t * outputs, size_t num_outputs, SYN_NN_Activation act, uint8_t out_shift, size_t * current_neuron, size_t chunk_size)
Evaluate a Dense Neural Network layer cooperatively inside a protothread.
SYN_Status syn_nn_dense_q7 (const q7_t * inputs, size_t num_inputs, const q7_t * weights, const q16_t * biases, q7_t * outputs, size_t num_outputs, SYN_NN_Activation act, uint8_t out_shift)
Evaluate a Dense (Fully Connected) Neural Network layer using INT8 (q7_t) weights.
SYN_Status syn_nn_dense_quant_q7 (const q7_t * inputs, size_t num_inputs, const q7_t * weights, const q16_t * biases, q7_t * outputs, size_t num_outputs, SYN_NN_Activation act, const syn_nn_quant_t * quant)
Evaluate a Dense layer with affine quantization scaling.
SYN_Status syn_nn_maxpool1d_q7 (const q7_t * inputs, size_t seq_len, size_t num_channels, q7_t * outputs, size_t pool_size, size_t stride)
1D Max Pooling Layer for INT8 Feature Maps.
SYN_Status syn_nn_softmax_q7 (const q7_t * inputs, q7_t * outputs, size_t num_inputs)
Compute normalized Softmax probability distribution over input logits in Q7.

Public Static Functions

Type Name
q7_t apply_activation_q7 (q16_t acc, SYN_NN_Activation act, uint8_t out_shift)
Apply activation and shift scaling to Q16.16 accumulator for Q7 layer.
q7_t apply_activation_quant (q16_t acc, SYN_NN_Activation act, const syn_nn_quant_t * quant)
Apply activation and quantization to Q16.16 accumulator.

Public Functions Documentation

function syn_nn_argmax_q7

Find the class index with the highest output value (ArgMax).

size_t syn_nn_argmax_q7 (
    const q7_t * outputs,
    size_t num_outputs
) 

Parameters:

  • outputs Pointer to output vector.
  • num_outputs Number of output elements.

Returns:

Index of maximum value element (0 if num_outputs == 0 or NULL).


function syn_nn_attention_q7

INT8 Quantized Scaled Dot-Product Self-Attention Layer.

SYN_Status syn_nn_attention_q7 (
    const q7_t * q,
    const q7_t * k,
    const q7_t * v,
    size_t seq_len,
    size_t d_k,
    size_t d_v,
    q7_t * out,
    uint8_t attn_shift
) 

Computes Attention(Q, K, V) = Softmax( (Q * K^T) >> attn_shift ) * V

Parameters:

  • q Query matrix [seq_len * d_k].
  • k Key matrix [seq_len * d_k].
  • v Value matrix [seq_len * d_v].
  • seq_len Sequence length / token count.
  • d_k Query/Key dimension per token.
  • d_v Value dimension per token.
  • out Output matrix [seq_len * d_v].
  • attn_shift Right bit-shift for dot-product scaling.

Returns:

SYN_OK on success, SYN_INVALID_PARAM on failure.


function syn_nn_avgpool1d_q7

1D Average Pooling Layer for INT8 Feature Maps.

SYN_Status syn_nn_avgpool1d_q7 (
    const q7_t * inputs,
    size_t seq_len,
    size_t num_channels,
    q7_t * outputs,
    size_t pool_size,
    size_t stride
) 

Parameters:

  • inputs Pointer to input feature matrix.
  • seq_len Input sequence length.
  • num_channels Number of feature channels.
  • outputs Destination output matrix.
  • pool_size Pooling window size.
  • stride Stride step size.

Returns:

SYN_OK on success, SYN_INVALID_PARAM on failure.


function syn_nn_conv1d_pt

Evaluate a 1D Temporal Convolution layer cooperatively inside a protothread.

SYN_PT_Status syn_nn_conv1d_pt (
    SYN_PT * pt,
    const q7_t * inputs,
    size_t seq_len,
    size_t num_channels,
    const q7_t * weights,
    const q16_t * biases,
    q7_t * outputs,
    size_t num_filters,
    size_t kernel_size,
    size_t stride,
    SYN_NN_Activation act,
    uint8_t out_shift,
    size_t * current_step,
    size_t chunk_size
) 

Parameters:

  • pt Pointer to protothread state machine.
  • inputs Pointer to input matrix.
  • seq_len Sequence length.
  • num_channels Number of input channels.
  • weights Kernel weights matrix.
  • biases Bias vector or NULL.
  • outputs Destination output matrix.
  • num_filters Number of output filters.
  • kernel_size Kernel window size.
  • stride Stride step.
  • act Activation function.
  • out_shift Right bit-shift scaling factor.
  • current_step State variable tracking step progress across yields.
  • chunk_size Number of output steps to evaluate per tick.

Returns:

SYN_PT_YIELDING while evaluating, SYN_PT_ENDED on completion.


function syn_nn_conv1d_q7

Evaluate a 1D Temporal Convolutional Neural Network layer in INT8 (q7_t).

SYN_Status syn_nn_conv1d_q7 (
    const q7_t * inputs,
    size_t seq_len,
    size_t num_channels,
    const q7_t * weights,
    const q16_t * biases,
    q7_t * outputs,
    size_t num_filters,
    size_t kernel_size,
    size_t stride,
    SYN_NN_Activation act,
    uint8_t out_shift
) 

Scans a 1D kernel filter matrix [num_filters * kernel_size * num_channels] across a time series [seq_len * num_channels].

Parameters:

  • inputs Pointer to input matrix [seq_len * num_channels].
  • seq_len Input sequence length (time steps).
  • num_channels Number of input channels/features per time step.
  • weights Flat kernel weights matrix [num_filters * kernel_size * num_channels].
  • biases Bias vector of length num_filters in Q16 (or NULL).
  • outputs Destination output matrix [out_steps * num_filters].
  • num_filters Number of output filters/channels.
  • kernel_size Size of 1D sliding window kernel.
  • stride Stride step across time steps.
  • act Activation function to apply to output filters.
  • out_shift Right bit-shift scaling factor (0 to 15) to prevent overflow.

Returns:

SYN_OK on success, SYN_INVALID_PARAM on failure.


function syn_nn_conv1d_quant_q7

Evaluate a 1D Temporal Convolution layer with affine quantization scaling.

SYN_Status syn_nn_conv1d_quant_q7 (
    const q7_t * inputs,
    size_t seq_len,
    size_t num_channels,
    const q7_t * weights,
    const q16_t * biases,
    q7_t * outputs,
    size_t num_filters,
    size_t kernel_size,
    size_t stride,
    SYN_NN_Activation act,
    const syn_nn_quant_t * quant
) 

Parameters:

  • inputs Pointer to input matrix.
  • seq_len Sequence length.
  • num_channels Number of input channels.
  • weights Kernel weights matrix.
  • biases Bias vector or NULL.
  • outputs Destination output matrix.
  • num_filters Number of output filters.
  • kernel_size Kernel window size.
  • stride Stride step.
  • act Activation function.
  • quant Pointer to affine quantization scaling parameters.

Returns:

SYN_OK on success, SYN_INVALID_PARAM on failure.


function syn_nn_dense_pt

Evaluate a Dense Neural Network layer cooperatively inside a protothread.

SYN_PT_Status syn_nn_dense_pt (
    SYN_PT * pt,
    const q7_t * inputs,
    size_t num_inputs,
    const q7_t * weights,
    const q16_t * biases,
    q7_t * outputs,
    size_t num_outputs,
    SYN_NN_Activation act,
    uint8_t out_shift,
    size_t * current_neuron,
    size_t chunk_size
) 

Parameters:

  • pt Pointer to protothread state machine.
  • inputs Pointer to input vector.
  • num_inputs Number of input features.
  • weights Flat weight matrix.
  • biases Bias vector or NULL.
  • outputs Destination output vector.
  • num_outputs Number of output neurons.
  • act Activation function to apply.
  • out_shift Right bit-shift scaling factor.
  • current_neuron State variable tracking progress across yields.
  • chunk_size Number of neurons to evaluate per protothread tick.

Returns:

SYN_PT_YIELDING while evaluating, SYN_PT_ENDED on completion.


function syn_nn_dense_q7

Evaluate a Dense (Fully Connected) Neural Network layer using INT8 (q7_t) weights.

SYN_Status syn_nn_dense_q7 (
    const q7_t * inputs,
    size_t num_inputs,
    const q7_t * weights,
    const q16_t * biases,
    q7_t * outputs,
    size_t num_outputs,
    SYN_NN_Activation act,
    uint8_t out_shift
) 

Computes: Output[i] = Activation( ((Sum(Input[j] * Weight[i][j]) + Bias[i]) >> out_shift) )

Parameters:

  • inputs Pointer to input vector (length = num_inputs).
  • num_inputs Number of input features.
  • weights Flat weight matrix [num_outputs * num_inputs].
  • biases Bias vector of length num_outputs in Q16.16 (or NULL).
  • outputs Destination buffer for outputs (length = num_outputs).
  • num_outputs Number of output neurons in layer.
  • act Activation function to apply.
  • out_shift Right bit-shift scaling factor (0 to 15) to prevent overflow.

Returns:

SYN_OK on success, SYN_INVALID_PARAM on failure.


function syn_nn_dense_quant_q7

Evaluate a Dense layer with affine quantization scaling.

SYN_Status syn_nn_dense_quant_q7 (
    const q7_t * inputs,
    size_t num_inputs,
    const q7_t * weights,
    const q16_t * biases,
    q7_t * outputs,
    size_t num_outputs,
    SYN_NN_Activation act,
    const syn_nn_quant_t * quant
) 

Parameters:

  • inputs Pointer to input vector.
  • num_inputs Number of input features.
  • weights Flat weight matrix.
  • biases Bias vector or NULL.
  • outputs Destination output vector.
  • num_outputs Number of output neurons.
  • act Activation function.
  • quant Pointer to affine quantization scaling parameters.

Returns:

SYN_OK on success, SYN_INVALID_PARAM on failure.


function syn_nn_maxpool1d_q7

1D Max Pooling Layer for INT8 Feature Maps.

SYN_Status syn_nn_maxpool1d_q7 (
    const q7_t * inputs,
    size_t seq_len,
    size_t num_channels,
    q7_t * outputs,
    size_t pool_size,
    size_t stride
) 

Parameters:

  • inputs Pointer to input feature matrix.
  • seq_len Input sequence length.
  • num_channels Number of feature channels.
  • outputs Destination output matrix.
  • pool_size Pooling window size.
  • stride Stride step size.

Returns:

SYN_OK on success, SYN_INVALID_PARAM on failure.


function syn_nn_softmax_q7

Compute normalized Softmax probability distribution over input logits in Q7.

SYN_Status syn_nn_softmax_q7 (
    const q7_t * inputs,
    q7_t * outputs,
    size_t num_inputs
) 

Output values sum to 127 (+1.0 in Q7).

Parameters:

  • inputs Pointer to logit input vector.
  • outputs Pointer to destination probability vector.
  • num_inputs Number of features / classes.

Returns:

SYN_OK on success, SYN_INVALID_PARAM on failure.


Public Static Functions Documentation

function apply_activation_q7

Apply activation and shift scaling to Q16.16 accumulator for Q7 layer.

static q7_t apply_activation_q7 (
    q16_t acc,
    SYN_NN_Activation act,
    uint8_t out_shift
) 

Parameters:

  • acc Q16.16 accumulator value.
  • act Activation function enum.
  • out_shift Output right shift bit count.

Returns:

Q7 output byte.


function apply_activation_quant

Apply activation and quantization to Q16.16 accumulator.

static q7_t apply_activation_quant (
    q16_t acc,
    SYN_NN_Activation act,
    const syn_nn_quant_t * quant
) 

Parameters:

  • acc Q16.16 accumulator value.
  • act Activation function enum.
  • quant Pointer to quantization parameters structure.

Returns:

Quantized Q7 output byte.



The documentation for this class was generated from the following file src/syntropic/util/syn_nn.c