Skip to content
Snippets Groups Projects
Commit 0be40067 authored by Olivier BICHLER's avatar Olivier BICHLER
Browse files

Added support for memory wrapping in activation

parent 825c35d7
No related branches found
No related tags found
2 merge requests!710.4.0,!59Continuous improvement of export_cpp
......@@ -6,6 +6,18 @@
template<int NB_ELTS,
ActivationFunction_T ACTIVATION,
// Memory mapping: inputs
int INPUT_MEM_CONT_OFFSET,
int INPUT_MEM_CONT_SIZE,
int INPUT_MEM_WRAP_OFFSET,
int INPUT_MEM_WRAP_SIZE,
int INPUT_MEM_STRIDE,
// Memory mapping: outputs
int OUTPUT_MEM_CONT_OFFSET,
int OUTPUT_MEM_CONT_SIZE,
int OUTPUT_MEM_WRAP_OFFSET,
int OUTPUT_MEM_WRAP_SIZE,
int OUTPUT_MEM_STRIDE,
typename Input_T, typename Output_T, typename Rescaling_T>
__attribute__((always_inline)) inline
void activation_forward (
......@@ -13,8 +25,21 @@ void activation_forward (
Output_T* __restrict outputs,
const Rescaling_T& __restrict rescaling)
{
size_t inOffset = 0;
size_t outOffset = 0;
for (int i = 0; i < NB_ELTS; ++i) {
outputs[i] = activation_forward_value<Output_T>(inputs[i], i, ACTIVATION, rescaling);
if (INPUT_MEM_WRAP_SIZE > 0 && i == (INPUT_MEM_CONT_SIZE / sizeof(Input_T))) {
inOffset = (INPUT_MEM_WRAP_OFFSET - INPUT_MEM_CONT_OFFSET
- INPUT_MEM_CONT_SIZE) / sizeof(Input_T);
}
if (OUTPUT_MEM_WRAP_SIZE > 0 && i == (OUTPUT_MEM_CONT_SIZE / sizeof(Output_T))) {
outOffset = (OUTPUT_MEM_WRAP_OFFSET - OUTPUT_MEM_CONT_OFFSET
- OUTPUT_MEM_CONT_SIZE) / sizeof(Output_T);
}
outputs[outOffset + i] = activation_forward_value<Output_T>(inputs[inOffset + i], i, ACTIVATION, rescaling);
}
}
......
{% filter indent(width=4, first=False) %}
{% include "./_mem_offset.jinja" %}
activation_forward<{{name|upper}}_NB_ELTS,
{{name|upper}}_ACTIVATION>
{{name|upper}}_ACTIVATION,
{{ in_name[0]|upper }}_MEM_CONT_OFFSET,
{{ in_name[0]|upper }}_MEM_CONT_SIZE,
{{ in_name[0]|upper }}_MEM_WRAP_OFFSET,
{{ in_name[0]|upper }}_MEM_WRAP_SIZE,
{{ in_name[0]|upper }}_MEM_STRIDE,
{{ out_name[0]|upper }}_MEM_CONT_OFFSET,
{{ out_name[0]|upper }}_MEM_CONT_SIZE,
{{ out_name[0]|upper }}_MEM_WRAP_OFFSET,
{{ out_name[0]|upper }}_MEM_WRAP_SIZE,
{{ out_name[0]|upper }}_MEM_STRIDE>
({{in_name[0]}}, {{out_name[0]}}, {{name|upper}}_RESCALING);
{% include "./_save_outputs.jinja" %}
{% include "./_aidge_cmp.jinja" %}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment