Skip to content
Snippets Groups Projects
Commit 57215ea1 authored by Houssem ROUIS's avatar Houssem ROUIS Committed by Maxence Naud
Browse files

fix add operator

parent 1581a1e9
No related branches found
No related tags found
2 merge requests!50version 0.2.0,!30add broadcasting for Arithmetic operators
...@@ -14,35 +14,11 @@ ...@@ -14,35 +14,11 @@
#include "aidge/utils/Registrar.hpp" #include "aidge/utils/Registrar.hpp"
#include "aidge/backend/cpu/data/Broadcasting.hpp"
#include "aidge/backend/cpu/operator/AddImpl.hpp" #include "aidge/backend/cpu/operator/AddImpl.hpp"
namespace Aidge { 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> 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_) { 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 // FIXME: missing Add attributes as arguments
...@@ -54,11 +30,11 @@ void AddImpl_cpu_forward_kernel(const std::vector<const void*> inputs_, const st ...@@ -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) for (std::size_t oIndex = 0; oIndex < outputLength; ++oIndex)
{ {
output[oIndex] = 0;
std::vector<size_t> indexes = getMultiDimIndices(outDims, oIndex); std::vector<size_t> indexes = getMultiDimIndices(outDims, oIndex);
for(std::size_t iIndex = 0; iIndex < inputs.size(); ++iIndex) { for(std::size_t iIndex = 0; iIndex < inputs.size(); ++iIndex) {
std::size_t idx = getFlattenedIndex(inputDims[iIndex], indexes); std::size_t idx = getFlattenedIndex(inputDims[iIndex], indexes);
output[oIndex] += inputs[iIndex][idx]; output[oIndex] += inputs[iIndex][idx];
} }
} }
} }
......
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