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