From 57215ea19f98850ff15d90c90dbf69d631acde59 Mon Sep 17 00:00:00 2001
From: hrouis <houssemeddine.rouis92@gmail.com>
Date: Fri, 26 Jan 2024 11:45:41 +0100
Subject: [PATCH] fix add operator

---
 .../cpu/operator/AddImpl_forward_kernels.hpp  | 30 ++-----------------
 1 file changed, 3 insertions(+), 27 deletions(-)

diff --git a/include/aidge/backend/cpu/operator/AddImpl_forward_kernels.hpp b/include/aidge/backend/cpu/operator/AddImpl_forward_kernels.hpp
index a038c448..478a0226 100644
--- a/include/aidge/backend/cpu/operator/AddImpl_forward_kernels.hpp
+++ b/include/aidge/backend/cpu/operator/AddImpl_forward_kernels.hpp
@@ -14,35 +14,11 @@
 
 #include "aidge/utils/Registrar.hpp"
 
+#include "aidge/backend/cpu/data/Broadcasting.hpp"
 #include "aidge/backend/cpu/operator/AddImpl.hpp"
 
 namespace Aidge {
 
-// Function to get multi-dimensional indices from a flattened index
-std::vector<size_t> getMultiDimIndices(const std::vector<size_t>& dimensions, size_t idx) {
-    std::vector<size_t> indices(dimensions.size(), 0);
-
-    for (int i = dimensions.size() - 1; i >= 0; --i) {
-        indices[i] = idx % dimensions[i];
-        idx /= dimensions[i];
-    }
-
-    return indices;
-}
-
-// Function to get a flattened index from multi-dimensional indices
-std::size_t getFlattenedIndex(const std::vector<size_t>& dimensions, const std::vector<size_t>& indices) {
-    std::size_t flattenedIdx = 0;
-    std::size_t stride = 1;
-
-    for (int i = dimensions.size() - 1; i >= 0; --i) {
-        std::size_t idx = dimensions[i]>1 ? indices[i] : 0;
-        flattenedIdx += idx * stride;
-        stride *= dimensions[i];
-    }
-    return flattenedIdx;
-}
-
 template <class I, class O>
 void AddImpl_cpu_forward_kernel(const std::vector<const void*> inputs_, const std::vector<std::vector<std::size_t>>& inputDims, const std::size_t outputLength, const std::vector<std::size_t>& outDims, void* output_) {
     // FIXME: missing Add attributes as arguments
@@ -54,11 +30,11 @@ void AddImpl_cpu_forward_kernel(const std::vector<const void*> inputs_, const st
 
 	for (std::size_t oIndex = 0; oIndex < outputLength; ++oIndex)
 	{
+        output[oIndex] = 0;
 		std::vector<size_t> indexes = getMultiDimIndices(outDims, oIndex);
-
 		for(std::size_t iIndex = 0; iIndex < inputs.size(); ++iIndex) {
 			std::size_t idx = getFlattenedIndex(inputDims[iIndex], indexes);
-			output[oIndex] += inputs[iIndex][idx];
+            output[oIndex] += inputs[iIndex][idx];
 		}
 	}
 }
-- 
GitLab