From 87d0790174c3d497e7d2e2f05876ced1998bedc3 Mon Sep 17 00:00:00 2001
From: NAUD Maxence <maxence.naud@cea.fr>
Date: Mon, 3 Jun 2024 08:55:05 +0000
Subject: [PATCH] Add int64 support for element-wise operators

---
 .../cpu/operator/AddImpl_forward_kernels.hpp      |  8 ++++++--
 .../cpu/operator/DivImpl_forward_kernels.hpp      |  3 ++-
 .../cpu/operator/MulImpl_forward_kernels.hpp      | 15 ++++++++++-----
 .../cpu/operator/SubImpl_forward_kernels.hpp      | 15 +++++++++++----
 4 files changed, 29 insertions(+), 12 deletions(-)

diff --git a/include/aidge/backend/cpu/operator/AddImpl_forward_kernels.hpp b/include/aidge/backend/cpu/operator/AddImpl_forward_kernels.hpp
index 478a0226..94b22dcc 100644
--- a/include/aidge/backend/cpu/operator/AddImpl_forward_kernels.hpp
+++ b/include/aidge/backend/cpu/operator/AddImpl_forward_kernels.hpp
@@ -14,6 +14,8 @@
 
 #include "aidge/utils/Registrar.hpp"
 
+#include <cstdint>     // std::int32_t, std::int64_t
+
 #include "aidge/backend/cpu/data/Broadcasting.hpp"
 #include "aidge/backend/cpu/operator/AddImpl.hpp"
 
@@ -42,10 +44,12 @@ void AddImpl_cpu_forward_kernel(const std::vector<const void*> inputs_, const st
 namespace {
 static Registrar<AddImplForward_cpu> registrarAddImplForward_cpu_Float32(
         {DataType::Float32, DataType::Float32}, Aidge::AddImpl_cpu_forward_kernel<float, float>);
-static Registrar<AddImplForward_cpu> registrarAddImplForward_cpu_Int32(
-        {DataType::Int32, DataType::Int32}, Aidge::AddImpl_cpu_forward_kernel<int, int>);
 static Registrar<AddImplForward_cpu> registrarAddImplForward_cpu_Float64(
         {DataType::Float64, DataType::Float64}, Aidge::AddImpl_cpu_forward_kernel<double, double>);
+static Registrar<AddImplForward_cpu> registrarAddImplForward_cpu_Int32(
+        {DataType::Int32, DataType::Int32}, Aidge::AddImpl_cpu_forward_kernel<std::int32_t, std::int32_t>);
+static Registrar<AddImplForward_cpu> registrarAddImplForward_cpu_Int64(
+        {DataType::Int64, DataType::Int64}, Aidge::AddImpl_cpu_forward_kernel<std::int64_t, std::int64_t>);
 }  // namespace
 }  // namespace Aidge
 
diff --git a/include/aidge/backend/cpu/operator/DivImpl_forward_kernels.hpp b/include/aidge/backend/cpu/operator/DivImpl_forward_kernels.hpp
index 3cdcefa9..74db1128 100644
--- a/include/aidge/backend/cpu/operator/DivImpl_forward_kernels.hpp
+++ b/include/aidge/backend/cpu/operator/DivImpl_forward_kernels.hpp
@@ -14,6 +14,7 @@
 
 #include <numeric>     // std::accumulate
 #include <cstddef>     // std::size_t
+#include <cstdint>     // std::int32_t, std::int64_t
 #include <functional>  // std::multiplies
 
 #include "aidge/utils/Registrar.hpp"
@@ -76,7 +77,7 @@ static Registrar<DivImplForward_cpu> registrarDivImplForward_cpu_Float32(
         Aidge::DivImpl_cpu_forward_kernel<float, float, float>);
 static Registrar<DivImplForward_cpu> registrarDivImplForward_cpu_Int32(
         {DataType::Int32, DataType::Int32, DataType::Int32},
-        Aidge::DivImpl_cpu_forward_kernel<int, int, int>);
+        Aidge::DivImpl_cpu_forward_kernel<std::int32_t, std::int32_t, std::int32_t>);
 static Registrar<DivImplForward_cpu> registrarDivImplForward_cpu_Float64(
         {DataType::Float64, DataType::Float64, DataType::Float64},
         Aidge::DivImpl_cpu_forward_kernel<double, double, double>);
diff --git a/include/aidge/backend/cpu/operator/MulImpl_forward_kernels.hpp b/include/aidge/backend/cpu/operator/MulImpl_forward_kernels.hpp
index e1387768..c44199ba 100644
--- a/include/aidge/backend/cpu/operator/MulImpl_forward_kernels.hpp
+++ b/include/aidge/backend/cpu/operator/MulImpl_forward_kernels.hpp
@@ -14,6 +14,8 @@
 
 #include "aidge/utils/Registrar.hpp"
 
+#include <cstdint>     // std::int32_t, std::int64_t
+
 #include "aidge/backend/cpu/data/Broadcasting.hpp"
 #include "aidge/backend/cpu/operator/MulImpl.hpp"
 
@@ -35,13 +37,13 @@ void MulImpl_cpu_forward_kernel(const std::vector<std::size_t>& input1Dims,
         totalElements *= dimSize;
     }
 
-	for (std::size_t oIndex = 0; oIndex < totalElements; ++oIndex) 
+	for (std::size_t oIndex = 0; oIndex < totalElements; ++oIndex)
 	{
 		std::vector<size_t> indexes = getMultiDimIndices(outputDims, oIndex);
 
 		std::size_t idx1 = getFlattenedIndex(input1Dims, indexes);
 		std::size_t idx2 = getFlattenedIndex(input2Dims, indexes);
-		
+
         output[oIndex] = input_1[idx1] * input_2[idx2];
     }
 }
@@ -50,12 +52,15 @@ namespace {
 static Registrar<MulImplForward_cpu> registrarMulImplForward_cpu_Float32(
         {DataType::Float32, DataType::Float32, DataType::Float32},
         Aidge::MulImpl_cpu_forward_kernel<float, float, float>);
-static Registrar<MulImplForward_cpu> registrarMulImplForward_cpu_Int32(
-        {DataType::Int32, DataType::Int32, DataType::Int32},
-        Aidge::MulImpl_cpu_forward_kernel<int, int, int>);
 static Registrar<MulImplForward_cpu> registrarMulImplForward_cpu_Float64(
         {DataType::Float64, DataType::Float64, DataType::Float64},
         Aidge::MulImpl_cpu_forward_kernel<double, double, double>);
+static Registrar<MulImplForward_cpu> registrarMulImplForward_cpu_Int32(
+        {DataType::Int32, DataType::Int32, DataType::Int32},
+        Aidge::MulImpl_cpu_forward_kernel<std::int32_t, std::int32_t, std::int32_t>);
+static Registrar<MulImplForward_cpu> registrarMulImplForward_cpu_Int64(
+        {DataType::Int64, DataType::Int64, DataType::Int64},
+        Aidge::MulImpl_cpu_forward_kernel<std::int64_t, std::int64_t, std::int64_t>);
 }  // namespace
 }  // namespace Aidge
 
diff --git a/include/aidge/backend/cpu/operator/SubImpl_forward_kernels.hpp b/include/aidge/backend/cpu/operator/SubImpl_forward_kernels.hpp
index 19b0bd21..10e6f58b 100644
--- a/include/aidge/backend/cpu/operator/SubImpl_forward_kernels.hpp
+++ b/include/aidge/backend/cpu/operator/SubImpl_forward_kernels.hpp
@@ -14,6 +14,10 @@
 
 #include "aidge/utils/Registrar.hpp"
 
+#include <cstddef>     // std::size_t
+#include <cstdint>     // std::int32_t, std::int64_t
+#include <vector>
+
 #include "aidge/backend/cpu/data/Broadcasting.hpp"
 #include "aidge/backend/cpu/operator/SubImpl.hpp"
 
@@ -36,7 +40,7 @@ void SubImpl_cpu_forward_kernel(const std::vector<std::size_t>& input1Dims,
         totalElements *= dimSize;
     }
 
-	for (std::size_t oIndex = 0; oIndex < totalElements; ++oIndex) 
+	for (std::size_t oIndex = 0; oIndex < totalElements; ++oIndex)
 	{
 		std::vector<size_t> indexes = getMultiDimIndices(outputDims, oIndex);
 		std::size_t idx1 = getFlattenedIndex(input1Dims, indexes);
@@ -49,12 +53,15 @@ namespace {
 static Registrar<SubImplForward_cpu> registrarSubImplForward_cpu_Float32(
         {DataType::Float32, DataType::Float32, DataType::Float32},
         Aidge::SubImpl_cpu_forward_kernel<float, float, float>);
-static Registrar<SubImplForward_cpu> registrarSubImplForward_cpu_Int32(
-        {DataType::Int32, DataType::Int32, DataType::Int32},
-        Aidge::SubImpl_cpu_forward_kernel<int, int, int>);
 static Registrar<SubImplForward_cpu> registrarSubImplForward_cpu_Float64(
         {DataType::Float64, DataType::Float64, DataType::Float64},
         Aidge::SubImpl_cpu_forward_kernel<double, double, double>);
+static Registrar<SubImplForward_cpu> registrarSubImplForward_cpu_Int32(
+        {DataType::Int32, DataType::Int32, DataType::Int32},
+        Aidge::SubImpl_cpu_forward_kernel<std::int32_t, std::int32_t, std::int32_t>);
+static Registrar<SubImplForward_cpu> registrarSubImplForward_cpu_Int64(
+        {DataType::Int64, DataType::Int64, DataType::Int64},
+        Aidge::SubImpl_cpu_forward_kernel<std::int64_t, std::int64_t, std::int64_t>);
 }  // namespace
 }  // namespace Aidge
 
-- 
GitLab