Skip to content
Snippets Groups Projects
Commit 423c29e5 authored by Grégoire Kubler's avatar Grégoire Kubler
Browse files

fix : restored conv to use std::array of size 1

parent 43fce9c6
No related branches found
No related tags found
No related merge requests found
Pipeline #66822 canceled
...@@ -20,21 +20,22 @@ ...@@ -20,21 +20,22 @@
#include "aidge/utils/Types.h" #include "aidge/utils/Types.h"
namespace Aidge { namespace Aidge {
// Operator implementation entry point for the backend // Operator implementation entry point for the backend
using Conv1D_Op = Conv_Op<1>; using Conv1D_Op = Conv_Op<1>;
using ConvImpl1D_cpu = OperatorImpl_cpu<Conv1D_Op, using ConvImpl1D_cpu = OperatorImpl_cpu<Conv1D_Op,
void(const DimSize_t &, void(const std::array<DimSize_t,1> &,
const DimSize_t &, const std::array<DimSize_t,1> &,
const DimSize_t &, const std::array<DimSize_t,1> &,
const std::array<DimSize_t, 3> &, const std::array<DimSize_t, 3> &,
DimSize_t, DimSize_t,
const void *, const void *,
const void *, const void *,
const void *, const void *,
void *), void *),
void(const DimSize_t &, void(const std::array<DimSize_t,1> &,
const DimSize_t &, const std::array<DimSize_t,1> &,
const DimSize_t &, const std::array<DimSize_t,1> &,
const std::array<DimSize_t, 3> &, const std::array<DimSize_t, 3> &,
const std::array<DimSize_t, 3> &, const std::array<DimSize_t, 3> &,
const void *, const void *,
......
...@@ -37,9 +37,9 @@ using std::array; ...@@ -37,9 +37,9 @@ using std::array;
* @param output_ Output Tensor. * @param output_ Output Tensor.
*/ */
template <class I, class W, class B, class O> template <class I, class W, class B, class O>
void ConvImpl1D_cpu_forward_kernel(const DimSize_t &strideDim, void ConvImpl1D_cpu_forward_kernel(const array<DimSize_t, 1> &strideDim,
const DimSize_t &dilationDim, const array<DimSize_t, 1> &dilationDim,
const DimSize_t &kernelDim, const array<DimSize_t, 1> &kernelDim,
const std::array<DimSize_t, 3> &inputDims, const std::array<DimSize_t, 3> &inputDims,
DimSize_t outChannels, DimSize_t outChannels,
const void *input_, const void *input_,
...@@ -54,10 +54,10 @@ void ConvImpl1D_cpu_forward_kernel(const DimSize_t &strideDim, ...@@ -54,10 +54,10 @@ void ConvImpl1D_cpu_forward_kernel(const DimSize_t &strideDim,
// output H size // output H size
const std::size_t oxSize = static_cast<std::size_t>(std::floor( const std::size_t oxSize = static_cast<std::size_t>(std::floor(
static_cast<float>(inputDims[2] - dilationDim * (kernelDim - 1) - 1 + static_cast<float>(inputDims[2] - dilationDim[0] * (kernelDim[0] - 1) -
strideDim) / 1 + strideDim[0]) /
static_cast<float>(strideDim))); static_cast<float>(strideDim[0])));
const DimSize_t dilated_kernel_x = dilationDim * (kernelDim - 1) + 1; const DimSize_t dilated_kernel_x = dilationDim[0] * (kernelDim[0] - 1) + 1;
using signedsize = std::make_signed<std::size_t>::type; using signedsize = std::make_signed<std::size_t>::type;
for (std::size_t batch = 0; batch < inputDims[0]; ++batch) { for (std::size_t batch = 0; batch < inputDims[0]; ++batch) {
...@@ -70,28 +70,28 @@ void ConvImpl1D_cpu_forward_kernel(const DimSize_t &strideDim, ...@@ -70,28 +70,28 @@ void ConvImpl1D_cpu_forward_kernel(const DimSize_t &strideDim,
const std::size_t iIndex = const std::size_t iIndex =
(inCh + batch * inputDims[1]) * inputDims[2]; (inCh + batch * inputDims[1]) * inputDims[2];
const std::size_t wIndex = const std::size_t wIndex =
(inCh + outCh * inputDims[1]) * kernelDim; (inCh + outCh * inputDims[1]) * kernelDim[0];
for (std::size_t ox = 0; ox < oxSize; ++ox) { for (std::size_t ox = 0; ox < oxSize; ++ox) {
// const signedsize difx = static_cast<signedsize>(- ox * // const signedsize difx = static_cast<signedsize>(- ox *
// strideDims); const std::size_t sxMin = // strideDim[0s); const std::size_t sxMin =
// static_cast<std::size_t>(std::max(difx, signedsize(0))); // static_cast<std::size_t>(std::max(difx, signedsize(0)));
// const std::size_t sxMax = // const std::size_t sxMax =
// (static_cast<signedsize>(inputDims[2]) + difx) < 0 ? 0 : // (static_cast<signedsize>(inputDims[2]) + difx) < 0 ? 0 :
// ((inputDims[2] + difx) > kernelDims[0] ? kernelDims : // ((inputDims[2] + difx) > kernelDim[0s[0] ? kernelDim[0s
// inputDims[2] + difx); // : inputDims[2] + difx);
const std::size_t sxMin = 0; const std::size_t sxMin = 0;
const std::size_t sxMax = dilated_kernel_x; const std::size_t sxMax = dilated_kernel_x;
const std::size_t oIndexFull = oIndex + ox; const std::size_t oIndexFull = oIndex + ox;
const signedsize ix = const signedsize ix =
static_cast<signedsize>(ox * strideDim); static_cast<signedsize>(ox * strideDim[0]);
for (std::size_t sx = sxMin; sx * dilationDim < sxMax; for (std::size_t sx = sxMin; sx * dilationDim[0] < sxMax;
++sx) { ++sx) {
output[oIndexFull] += output[oIndexFull] +=
weights[wIndex + sx] * weights[wIndex + sx] *
input[iIndex + static_cast<std::size_t>( input[iIndex + static_cast<std::size_t>(
ix + static_cast<signedsize>( ix + static_cast<signedsize>(
sx * dilationDim))]; sx * dilationDim[0]))];
} }
} }
} }
...@@ -135,9 +135,9 @@ void ConvImpl1D_cpu_forward_kernel(const DimSize_t &strideDim, ...@@ -135,9 +135,9 @@ void ConvImpl1D_cpu_forward_kernel(const DimSize_t &strideDim,
* @param[inout] iGrad gradients of the input to update * @param[inout] iGrad gradients of the input to update
*/ */
template <class I, class W, class O> template <class I, class W, class O>
void conv1DBackwardInput(const DimSize_t &stride, void conv1DBackwardInput(const array<DimSize_t, 1> &stride,
const DimSize_t &dilation, const array<DimSize_t, 1> &dilation,
const DimSize_t &kDim, const array<DimSize_t, 1> &kDim,
const array<DimSize_t, 2> &kStrides, const array<DimSize_t, 2> &kStrides,
const W *weights, const W *weights,
const array<DimSize_t, 3> &oDims, const array<DimSize_t, 3> &oDims,
......
...@@ -41,9 +41,9 @@ void Aidge::ConvImpl1D_cpu::forward() { ...@@ -41,9 +41,9 @@ void Aidge::ConvImpl1D_cpu::forward() {
// Call kernel // Call kernel
impl.forward( impl.forward(
op_.strideDims()[0], op_.strideDims(),
op_.dilationDims()[0], op_.dilationDims(),
op_.kernelDims()[0], op_.kernelDims(),
op_.getInput(0)->template dims<3>(), // input dimensions op_.getInput(0)->template dims<3>(), // input dimensions
dynamic_cast<const Conv_Op<1> &>(mOp).outChannels(), // outChannels dynamic_cast<const Conv_Op<1> &>(mOp).outChannels(), // outChannels
input0.getImpl()->rawPtr(), // input input0.getImpl()->rawPtr(), // input
......
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