Skip to content
Snippets Groups Projects

feat : support for conv3D forward

Merged Grégoire Kubler requested to merge feat_operator_conv3D into dev

Context

issue : #38 (closed), aidge#252 (closed)

Added :

  • Conv3D
  • ConvTranspose3D
  • Pad3D
  • PaddedConv3D
  • PaddedConvTranspose3D

Enhancements

Conv1D & Conv2D backward functions have been optimized : indexing is now done by only incrementing the index counters without using multiplication.

Before

for (DimSize_t kX = 0; kX < kDim[0]; ++kX) {
    kOffsets[2] = kX * kStrides[2] + kOffsets[1];
    iDilKernelOffsets[0] = kX * dilation[0] * iStrides[2];

    // DOING STUFF ...........
}

After

iDilKernelOffsets[0] = 0;
kOffsets[2] = kOffsets[1];
for (DimSize_t kX = 0; kX < kDims[0]; ++kX,
               kOffsets[2] += kStrides[2],
               iDilKernelOffsets[0] += dilation[0] *
                                       iStrides[2]) {
    // DOING STUFF ...........
}

NOTE : This implies a bit of unconventionnal over-crowding the for loops. That is usually written as :

for (DimSize_t kX = 0; kX < kDims[0]; ++kX) {
    // DOING STUFF ...........
    kOffsets[2] += kStrides[2];
    iDilKernelOffsets[0] += dilation[0] * iStrides[2];
}

but since the the //DOING STUFF....... usually contains 3+ nested loops, this would quickly be un-readable. Hence I chose to use the 1st "overcrowded for loop" syntax.

Edited by Grégoire Kubler

Merge request reports

Loading
Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
Please register or sign in to reply
Loading