Skip to content
Snippets Groups Projects
Commit 3b66800a authored by Cyril Moineau's avatar Cyril Moineau
Browse files

Add support for Atan and Sub operators.

parent 159108b5
No related branches found
No related tags found
No related merge requests found
#include <cmath>
template <unsigned int SIZE, typename Input_T, typename Output_T>
__attribute__((always_inline)) inline static
void aidge_atan(Input_T* __restrict input, Output_T* __restrict output) {
for (unsigned int i = 0; i < SIZE; ++i) {
// Note : no cast to get compiler warning if we lose precision during auto cast!
output[i] = std::atan(input[i]);
}
}
#include <math.h>
void aidge_atan_float32 (float* input,
float* output,
unsigned int size)
{
for (unsigned int i = 0; i < size; ++i) {
output[i] = atanf(input[i]);
}
}
{#- For name header -#}
#ifndef {{ name|upper }}_LAYER_H
#define {{ name|upper }}_LAYER_H
{% include "./_meminfo.jinja" %}
#define {{ name|upper }}_OUTPUTS_SIZE {{ out_chan[0] * out_height[0] * out_width[0] }}
#endif /* {{ name|upper }}_LAYER_H */
...@@ -16,6 +16,5 @@ ...@@ -16,6 +16,5 @@
#define {{in_name[0]|upper}}_NB_DIM {{ in_dims[0]|length}} #define {{in_name[0]|upper}}_NB_DIM {{ in_dims[0]|length}}
#define {{in_name[1]|upper}}_NB_DIM {{ in_dims[1]|length}} #define {{in_name[1]|upper}}_NB_DIM {{ in_dims[1]|length}}
#define {{out_name[0]|upper}}_NB_DIM {{ out_dims[0]|length}} #define {{out_name[0]|upper}}_NB_DIM {{ out_dims[0]|length}}
#define {{ name|upper }}_ELEM_OP {{ elemwise_op }}
#endif /* {{ name|upper }}_LAYER_H */ #endif /* {{ name|upper }}_LAYER_H */
{% if not is_output %}
{{out_cdtype[0]}}* {{out_name[0]}} = ({{out_cdtype[0]}}*) mem + {{out_name[0]|upper}}_OFFSET;
{% endif %}
aidge_atan <{{name|upper}}_OUTPUTS_SIZE> ({{in_name[0]}}, {{out_name[0]}});
aidge_{{elemwise_type|lower}}_{{dtype[0]}} ({{in_name[0]}}, {{in_name[1]}}, {{out_name[0]}}, {{in_name[0]}}_DIMS, {{in_name[1]}}_DIMS, {{out_name[0]}}_DIMS,{{in_name[0]|upper}}_NB_DIM,{{in_name[1]|upper}}_NB_DIM,{{out_name[0]|upper}}_NB_DIM, {{name|upper}}_OUTPUTS_SIZE); aidge_{{elemwise_op|lower}}_{{out_dtype[0]}} ({{in_name[0]}}, {{in_name[1]}}, {{out_name[0]}}, {{in_name[0]}}_DIMS, {{in_name[1]}}_DIMS, {{out_name[0]}}_DIMS,{{in_name[0]|upper}}_NB_DIM,{{in_name[1]|upper}}_NB_DIM,{{out_name[0]|upper}}_NB_DIM, {{name|upper}}_OUTPUTS_SIZE);
...@@ -345,6 +345,20 @@ class Add_ARMCortexM(ExportNodeCpp): ...@@ -345,6 +345,20 @@ class Add_ARMCortexM(ExportNodeCpp):
str(ROOT / "_Aidge_Arm" / "kernels" / "Utils" / "aidge_supportfunctions.h") str(ROOT / "_Aidge_Arm" / "kernels" / "Utils" / "aidge_supportfunctions.h")
] ]
@ExportLibAidgeARM.register("Sub", aidge_core.ImplSpec(aidge_core.IOSpec(aidge_core.dtype.float32)))
class Add_ARMCortexM(ExportNodeCpp):
def __init__(self, node, mem_info, is_input, is_output):
super().__init__(node, mem_info, is_input, is_output)
self.attributes["elemwise_op"] = "\"SUB\""
self.config_template = str(ROOT / "_Aidge_Arm" / "templates" / "configuration" / "elemwise.jinja")
self.forward_template = str(ROOT / "_Aidge_Arm" / "templates" / "forward_call" / "elemwise.jinja")
self.include_list = []
self.kernels_to_copy = [
str(ROOT / "_Aidge_Arm" / "kernels" / "Sub" / "aidge_sub_float32.h"),
str(ROOT / "_Aidge_Arm" / "kernels" / "Utils" / "aidge_supportfunctions.h")
]
@ExportLibAidgeARM.register("Mul", aidge_core.ImplSpec(aidge_core.IOSpec(aidge_core.dtype.float32))) @ExportLibAidgeARM.register("Mul", aidge_core.ImplSpec(aidge_core.IOSpec(aidge_core.dtype.float32)))
class Mul_ARMCortexM(ExportNodeCpp): class Mul_ARMCortexM(ExportNodeCpp):
def __init__(self, node, mem_info, is_input, is_output): def __init__(self, node, mem_info, is_input, is_output):
...@@ -372,6 +386,19 @@ class Softmax_ARMCortexM(ExportNodeCpp): ...@@ -372,6 +386,19 @@ class Softmax_ARMCortexM(ExportNodeCpp):
str(ROOT / "_Aidge_Arm" / "kernels" / "Softmax" / "aidge_softmax_chw_float32.h"), str(ROOT / "_Aidge_Arm" / "kernels" / "Softmax" / "aidge_softmax_chw_float32.h"),
] ]
@ExportLibAidgeARM.register("Atan", aidge_core.ImplSpec(aidge_core.IOSpec(aidge_core.dtype.float32)))
class Atan_ARMCortexM(ExportNodeCpp):
def __init__(self, node, mem_info, is_input, is_output):
super().__init__(node, mem_info, is_input, is_output)
self.config_template = str(ROOT / "_Aidge_Arm" / "templates" / "configuration" / "atan.jinja")
self.forward_template = str(ROOT / "_Aidge_Arm" / "templates" / "forward_call" / "atan.jinja")
self.include_list = []
self.kernels_to_copy = [
str(ROOT / "_Aidge_Arm" / "kernels" / "Atan" / "aidge_atan.hpp"),
]
@ExportLibAidgeARM.register("Sigmoid", aidge_core.ImplSpec(aidge_core.IOSpec(aidge_core.dtype.float32))) @ExportLibAidgeARM.register("Sigmoid", aidge_core.ImplSpec(aidge_core.IOSpec(aidge_core.dtype.float32)))
class Sigmoid_ARMCortexM(ExportNodeCpp): class Sigmoid_ARMCortexM(ExportNodeCpp):
def __init__(self, node, mem_info, is_input, is_output): def __init__(self, node, mem_info, is_input, is_output):
......
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