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