From 98cb46ab2ac23cfecfddd9d6e1c7bad2f8a7c7dd Mon Sep 17 00:00:00 2001 From: cmoineau <cyril.moineau@cea.fr> Date: Thu, 26 Sep 2024 08:20:17 +0000 Subject: [PATCH] Split elemwise operators in multiple files. --- .../kernels/Add/aidge_add_float32.h | 20 ++++++++--------- .../kernels/Mul/aidge_mul_float32.h | 20 ++++++++--------- .../kernels/Sub/aidge_sub_float32.h | 8 +++---- .../templates/configuration/add.jinja | 21 ++++++++++++++++++ .../templates/configuration/mul.jinja | 20 +++++++++++++++++ .../templates/configuration/sub.jinja | 22 +++++++++++++++++++ .../templates/forward_call/add.jinja | 14 ++++++++++++ .../templates/forward_call/elemwise.jinja | 1 - .../templates/forward_call/mul.jinja | 14 ++++++++++++ .../templates/forward_call/sub.jinja | 5 +++++ aidge_export_arm_cortexm/operators.py | 17 ++++++-------- 11 files changed, 127 insertions(+), 35 deletions(-) create mode 100644 aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/add.jinja create mode 100644 aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/mul.jinja create mode 100644 aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/sub.jinja create mode 100644 aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/add.jinja delete mode 100644 aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/elemwise.jinja create mode 100644 aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/mul.jinja create mode 100644 aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/sub.jinja diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Add/aidge_add_float32.h b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Add/aidge_add_float32.h index c9cfc15..ad11e15 100644 --- a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Add/aidge_add_float32.h +++ b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Add/aidge_add_float32.h @@ -1,17 +1,17 @@ -void aidge_add_float32(float* input_a, - float* input_b, - float* output, - int dim_a[], - int dim_b[], - int output_Dim[], +void aidge_add_float32(const float* input_a, + const float* input_b, + float* output, + const int dim_a[], + const int dim_b[], + const int output_Dim[], int size_dima, int size_dimb, int size_outputDim, int output_size) { - // Broadcast dims - int ndim_a[size_outputDim]; - int ndim_b[size_outputDim]; + // Broadcast dims + int ndim_a[size_outputDim]; + int ndim_b[size_outputDim]; for (int i= 0; i<size_outputDim; i++){ int idx = size_outputDim-size_dima; @@ -96,4 +96,4 @@ void aidge_add_float32(float* input_a, } } -} \ No newline at end of file +} diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Mul/aidge_mul_float32.h b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Mul/aidge_mul_float32.h index dbbf908..8045717 100644 --- a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Mul/aidge_mul_float32.h +++ b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Mul/aidge_mul_float32.h @@ -1,17 +1,17 @@ -void aidge_mul_float32(float* input_a, - float* input_b, - float* output, - int dim_a[], - int dim_b[], - int output_Dim[], +void aidge_mul_float32(const float* input_a, + const float* input_b, + float* output, + const int dim_a[], + const int dim_b[], + const int output_Dim[], int size_dima, int size_dimb, int size_outputDim, int output_size) { - // Broadcast dims - int ndim_a[size_outputDim]; - int ndim_b[size_outputDim]; + // Broadcast dims + int ndim_a[size_outputDim]; + int ndim_b[size_outputDim]; for (int i= 0; i<size_outputDim; i++){ int idx = size_outputDim-size_dima; @@ -96,4 +96,4 @@ void aidge_mul_float32(float* input_a, } } -} \ No newline at end of file +} diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Sub/aidge_sub_float32.h b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Sub/aidge_sub_float32.h index 1f4f7d7..99bd9a0 100644 --- a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Sub/aidge_sub_float32.h +++ b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Sub/aidge_sub_float32.h @@ -1,11 +1,11 @@ -void aidge_sub_float32(float* input_a, - float* input_b, - float* output, +void aidge_sub_float32(const float* input_a, + const float* input_b, + float* output, unsigned int size) { for (unsigned int i = 0; i < size; ++i) { output[i] = input_a[i] - input_b[i]; } -} \ No newline at end of file +} diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/add.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/add.jinja new file mode 100644 index 0000000..67b1c33 --- /dev/null +++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/add.jinja @@ -0,0 +1,21 @@ +{#- For name header -#} +#ifndef {{ name|upper }}_LAYER_H +#define {{ name|upper }}_LAYER_H + +/* ElemWise - add layer */ +{% include "./_def_io.jinja" %} +{% include "./_meminfo.jinja" %} + + +{# For layer configuration -#} +#define {{ name|upper }}_OUTPUTS_SIZE {{ out_size[0] }} + +#define {{name|upper}}_IN_0_NB_DIMS {{ in_dims[0]|length}} +#define {{name|upper}}_IN_1_NB_DIMS {{ in_dims[1]|length}} +#define {{name|upper}}_OUT_0_NB_DIMS {{ out_dims[0]|length}} + +static const int {{name|upper}}_IN_0_DIMS[] = { {{ in_dims[0]|join(", ") }} }; +static const int {{name|upper}}_IN_1_DIMS[] = { {{ in_dims[1]|join(", ") }} }; +static const int {{name|upper}}_OUT_0_DIMS[] = { {{ out_dims[0]|join(", ") }} }; + +#endif /* {{ name|upper }}_LAYER_H */ diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/mul.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/mul.jinja new file mode 100644 index 0000000..e7c303e --- /dev/null +++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/mul.jinja @@ -0,0 +1,20 @@ +{#- For name header -#} +#ifndef {{ name|upper }}_LAYER_H +#define {{ name|upper }}_LAYER_H + +/* ElemWise - mul layer */ +{% include "./_def_io.jinja" %} +{% include "./_meminfo.jinja" %} + +{# For layer configuration -#} +#define {{ name|upper }}_OUTPUTS_SIZE {{ out_size[0] }} + +#define {{name|upper}}_IN_0_NB_DIMS {{ in_dims[0]|length}} +#define {{name|upper}}_IN_1_NB_DIMS {{ in_dims[1]|length}} +#define {{name|upper}}_OUT_0_NB_DIMS {{ out_dims[0]|length}} + +static const int {{name|upper}}_IN_0_DIMS[] = { {{ in_dims[0]|join(", ") }} }; +static const int {{name|upper}}_IN_1_DIMS[] = { {{ in_dims[1]|join(", ") }} }; +static const int {{name|upper}}_OUT_0_DIMS[] = { {{ out_dims[0]|join(", ") }} }; + +#endif /* {{ name|upper }}_LAYER_H */ diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/sub.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/sub.jinja new file mode 100644 index 0000000..9ed0a8f --- /dev/null +++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/sub.jinja @@ -0,0 +1,22 @@ +{#- For name header -#} +#ifndef {{ name|upper }}_LAYER_H +#define {{ name|upper }}_LAYER_H + +/* ElemWise - sub layer */ +{% include "./_def_io.jinja" %} +{% include "./_meminfo.jinja" %} + +{# For layer configuration -#} +#define {{ name|upper }}_INPUTS_SIZE {{ in_size[0] }} +#define {{ name|upper }}_OUTPUTS_SIZE {{ out_size[0] }} + + +#define {{in_name[0]|upper}}_NB_DIM {{ in_dims[0]|length}} +#define {{in_name[1]|upper}}_NB_DIM {{ in_dims[1]|length}} +#define {{out_name[0]|upper}}_NB_DIM {{ out_dims[0]|length}} + +static const int {{ in_name[0]|upper }}_DIMS[] = { {{ in_dims[0]|join(", ") }} }; +static const int {{ in_name[1]|upper }}_DIMS[] = { {{ in_dims[1]|join(", ") }} }; +static const int {{ out_name[0]|upper }}_DIMS[] = { {{ out_dims[0]|join(", ") }} }; + +#endif /* {{ name|upper }}_LAYER_H */ diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/add.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/add.jinja new file mode 100644 index 0000000..8f0d486 --- /dev/null +++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/add.jinja @@ -0,0 +1,14 @@ +{% if not is_output %} +{{out_cdtype[0]}}* {{out_name[0]}} = ({{out_cdtype[0]}}*) mem + {{out_name[0]|upper}}_OFFSET; +{% endif %} +aidge_add_float32( + {{in_name[0]}}, + {{in_name[1]}}, + {{out_name[0]}}, + {{name|upper}}_IN_0_DIMS, + {{name|upper}}_IN_1_DIMS, + {{name|upper}}_OUT_0_DIMS, + {{name|upper}}_IN_0_NB_DIMS, + {{name|upper}}_IN_1_NB_DIMS, + {{name|upper}}_OUT_0_NB_DIMS, + {{name|upper}}_OUTPUTS_SIZE); diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/elemwise.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/elemwise.jinja deleted file mode 100644 index 98d6cc9..0000000 --- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/elemwise.jinja +++ /dev/null @@ -1 +0,0 @@ -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); diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/mul.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/mul.jinja new file mode 100644 index 0000000..056746e --- /dev/null +++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/mul.jinja @@ -0,0 +1,14 @@ +{% if not is_output %} +{{out_cdtype[0]}}* {{out_name[0]}} = ({{out_cdtype[0]}}*) mem + {{out_name[0]|upper}}_OFFSET; +{% endif %} +aidge_mul_float32( + {{in_name[0]}}, + {{in_name[1]}}, + {{out_name[0]}}, + {{name|upper}}_IN_0_DIMS, + {{name|upper}}_IN_1_DIMS, + {{name|upper}}_OUT_0_DIMS, + {{name|upper}}_IN_0_NB_DIMS, + {{name|upper}}_IN_1_NB_DIMS, + {{name|upper}}_OUT_0_NB_DIMS, + {{name|upper}}_OUTPUTS_SIZE); diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/sub.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/sub.jinja new file mode 100644 index 0000000..1bf7fc6 --- /dev/null +++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/sub.jinja @@ -0,0 +1,5 @@ +{% if not is_output %} +{{out_cdtype[0]}}* {{out_name[0]}} = ({{out_cdtype[0]}}*) mem + {{out_name[0]|upper}}_OFFSET; +{% endif %} + +aidge_sub_float32({{in_name[0]}}, {{in_name[1]}}, {{out_name[0]}}, {{name|upper}}_OUTPUTS_SIZE); diff --git a/aidge_export_arm_cortexm/operators.py b/aidge_export_arm_cortexm/operators.py index c413041..9270ee9 100644 --- a/aidge_export_arm_cortexm/operators.py +++ b/aidge_export_arm_cortexm/operators.py @@ -322,10 +322,9 @@ class FC_ARMCortexM(ExportNodeCpp): 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"] = "\"ADD\"" - self.config_template = str(ROOT / "_Aidge_Arm" / "templates" / "configuration" / "elemwise.jinja") - self.forward_template = str(ROOT / "_Aidge_Arm" / "templates" / "forward_call" / "elemwise.jinja") + self.config_template = str(ROOT / "_Aidge_Arm" / "templates" / "configuration" / "add.jinja") + self.forward_template = str(ROOT / "_Aidge_Arm" / "templates" / "forward_call" / "add.jinja") self.include_list = [] self.kernels_to_copy = [ str(ROOT / "_Aidge_Arm" / "kernels" / "Add" / "aidge_add_float32.h"), @@ -333,13 +332,12 @@ class Add_ARMCortexM(ExportNodeCpp): ] @ExportLibAidgeARM.register("Sub", aidge_core.ImplSpec(aidge_core.IOSpec(aidge_core.dtype.float32))) -class Add_ARMCortexM(ExportNodeCpp): +class Sub_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.config_template = str(ROOT / "_Aidge_Arm" / "templates" / "configuration" / "sub.jinja") + self.forward_template = str(ROOT / "_Aidge_Arm" / "templates" / "forward_call" / "sub.jinja") self.include_list = [] self.kernels_to_copy = [ str(ROOT / "_Aidge_Arm" / "kernels" / "Sub" / "aidge_sub_float32.h"), @@ -350,10 +348,9 @@ class Add_ARMCortexM(ExportNodeCpp): class Mul_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"] = "\"MUL\"" - self.config_template = str(ROOT / "_Aidge_Arm" / "templates" / "configuration" / "elemwise.jinja") - self.forward_template = str(ROOT / "_Aidge_Arm" / "templates" / "forward_call" / "elemwise.jinja") + self.config_template = str(ROOT / "_Aidge_Arm" / "templates" / "configuration" / "mul.jinja") + self.forward_template = str(ROOT / "_Aidge_Arm" / "templates" / "forward_call" / "mul.jinja") self.include_list = [] self.kernels_to_copy = [ str(ROOT / "_Aidge_Arm" / "kernels" / "Mul" / "aidge_mul_float32.h"), -- GitLab