4 #ifndef EIGEN_CXX11_TENSOR_TENSOR_VOLUME_PATCH_H
5 #define EIGEN_CXX11_TENSOR_TENSOR_VOLUME_PATCH_H
29 template <DenseIndex Planes, DenseIndex Rows, DenseIndex Cols,
typename XprType>
31 typedef std::remove_const_t<typename XprType::Scalar>
Scalar;
35 typedef typename XprType::Nested
Nested;
36 typedef std::remove_reference_t<Nested>
Nested_;
37 static constexpr
int NumDimensions = XprTraits::NumDimensions + 1;
38 static constexpr
int Layout = XprTraits::Layout;
42 template <DenseIndex Planes, DenseIndex Rows, DenseIndex Cols,
typename XprType>
47 template <DenseIndex Planes, DenseIndex Rows, DenseIndex Cols,
typename XprType>
55 template <DenseIndex Planes, DenseIndex Rows, DenseIndex Cols,
typename XprType>
173 template <DenseIndex Planes, DenseIndex Rows, DenseIndex Cols,
typename ArgType,
typename Device>
177 static constexpr
int NumInputDims =
179 static constexpr
int NumDims = NumInputDims + 1;
181 typedef std::remove_const_t<typename XprType::Scalar>
Scalar;
205 m_paddingValue =
op.padding_value();
211 m_inputDepth = input_dims[0];
212 m_inputPlanes = input_dims[1];
213 m_inputRows = input_dims[2];
214 m_inputCols = input_dims[3];
216 m_inputDepth = input_dims[NumInputDims - 1];
217 m_inputPlanes = input_dims[NumInputDims - 2];
218 m_inputRows = input_dims[NumInputDims - 3];
219 m_inputCols = input_dims[NumInputDims - 4];
222 m_plane_strides =
op.plane_strides();
223 m_row_strides =
op.row_strides();
224 m_col_strides =
op.col_strides();
227 m_in_plane_strides =
op.in_plane_strides();
228 m_in_row_strides =
op.in_row_strides();
229 m_in_col_strides =
op.in_col_strides();
230 m_plane_inflate_strides =
op.plane_inflate_strides();
231 m_row_inflate_strides =
op.row_inflate_strides();
232 m_col_inflate_strides =
op.col_inflate_strides();
235 m_input_planes_eff = (m_inputPlanes - 1) * m_plane_inflate_strides + 1;
236 m_input_rows_eff = (m_inputRows - 1) * m_row_inflate_strides + 1;
237 m_input_cols_eff = (m_inputCols - 1) * m_col_inflate_strides + 1;
238 m_patch_planes_eff =
op.patch_planes() + (
op.patch_planes() - 1) * (m_in_plane_strides - 1);
239 m_patch_rows_eff =
op.patch_rows() + (
op.patch_rows() - 1) * (m_in_row_strides - 1);
240 m_patch_cols_eff =
op.patch_cols() + (
op.patch_cols() - 1) * (m_in_col_strides - 1);
242 if (
op.padding_explicit()) {
244 numext::ceil((m_input_planes_eff +
op.padding_top_z() +
op.padding_bottom_z() - m_patch_planes_eff + 1.f) /
245 static_cast<float>(m_plane_strides));
246 m_outputRows =
numext::ceil((m_input_rows_eff +
op.padding_top() +
op.padding_bottom() - m_patch_rows_eff + 1.f) /
247 static_cast<float>(m_row_strides));
248 m_outputCols =
numext::ceil((m_input_cols_eff +
op.padding_left() +
op.padding_right() - m_patch_cols_eff + 1.f) /
249 static_cast<float>(m_col_strides));
250 m_planePaddingTop =
op.padding_top_z();
251 m_rowPaddingTop =
op.padding_top();
252 m_colPaddingLeft =
op.padding_left();
255 switch (
op.padding_type()) {
258 numext::ceil((m_input_planes_eff - m_patch_planes_eff + 1.f) /
static_cast<float>(m_plane_strides));
259 m_outputRows =
numext::ceil((m_input_rows_eff - m_patch_rows_eff + 1.f) /
static_cast<float>(m_row_strides));
260 m_outputCols =
numext::ceil((m_input_cols_eff - m_patch_cols_eff + 1.f) /
static_cast<float>(m_col_strides));
261 m_planePaddingTop = 0;
263 m_colPaddingLeft = 0;
266 m_outputPlanes =
numext::ceil(m_input_planes_eff /
static_cast<float>(m_plane_strides));
267 m_outputRows =
numext::ceil(m_input_rows_eff /
static_cast<float>(m_row_strides));
268 m_outputCols =
numext::ceil(m_input_cols_eff /
static_cast<float>(m_col_strides));
269 const Index dz = (m_outputPlanes - 1) * m_plane_strides + m_patch_planes_eff - m_input_planes_eff;
270 const Index dy = (m_outputRows - 1) * m_row_strides + m_patch_rows_eff - m_input_rows_eff;
271 const Index dx = (m_outputCols - 1) * m_col_strides + m_patch_cols_eff - m_input_cols_eff;
272 m_planePaddingTop = dz / 2;
273 m_rowPaddingTop = dy / 2;
274 m_colPaddingLeft = dx / 2;
296 m_dimensions[0] = input_dims[0];
297 m_dimensions[1] =
op.patch_planes();
298 m_dimensions[2] =
op.patch_rows();
299 m_dimensions[3] =
op.patch_cols();
300 m_dimensions[4] = m_outputPlanes * m_outputRows * m_outputCols;
301 for (
int i = 5;
i < NumDims; ++
i) {
302 m_dimensions[
i] = input_dims[
i - 1];
312 m_dimensions[NumDims - 1] = input_dims[NumInputDims - 1];
313 m_dimensions[NumDims - 2] =
op.patch_planes();
314 m_dimensions[NumDims - 3] =
op.patch_rows();
315 m_dimensions[NumDims - 4] =
op.patch_cols();
316 m_dimensions[NumDims - 5] = m_outputPlanes * m_outputRows * m_outputCols;
317 for (
int i = NumDims - 6;
i >= 0; --
i) {
318 m_dimensions[
i] = input_dims[
i];
324 m_rowStride = m_dimensions[1];
325 m_colStride = m_dimensions[2] * m_rowStride;
326 m_patchStride = m_colStride * m_dimensions[3] * m_dimensions[0];
327 m_otherStride = m_patchStride * m_dimensions[4];
329 m_rowStride = m_dimensions[NumDims - 2];
330 m_colStride = m_dimensions[NumDims - 3] * m_rowStride;
331 m_patchStride = m_colStride * m_dimensions[NumDims - 4] * m_dimensions[NumDims - 1];
332 m_otherStride = m_patchStride * m_dimensions[NumDims - 5];
336 m_planeInputStride = m_inputDepth;
337 m_rowInputStride = m_inputDepth * m_inputPlanes;
338 m_colInputStride = m_inputDepth * m_inputRows * m_inputPlanes;
339 m_otherInputStride = m_inputDepth * m_inputRows * m_inputCols * m_inputPlanes;
341 m_outputPlanesRows = m_outputPlanes * m_outputRows;
366 m_impl.evalSubExprsIfNeeded(NULL);
370 #ifdef EIGEN_USE_THREADS
371 template <
typename EvalSubExprsCallback>
373 m_impl.evalSubExprsIfNeededAsync(
nullptr, [done](
bool) { done(
true); });
381 const Index patchIndex = index / m_fastPatchStride;
385 const Index patchOffset = (index - patchIndex * m_patchStride) / m_fastOutputDepth;
388 const Index otherIndex = (NumDims == 5) ? 0 : index / m_fastOtherStride;
389 const Index patch3DIndex = (NumDims == 5) ? patchIndex : (index - otherIndex * m_otherStride) / m_fastPatchStride;
392 const Index colIndex = patch3DIndex / m_fastOutputPlanesRows;
393 const Index colOffset = patchOffset / m_fastColStride;
394 const Index inputCol = colIndex * m_col_strides + colOffset * m_in_col_strides - m_colPaddingLeft;
395 const Index origInputCol =
396 (m_col_inflate_strides == 1) ? inputCol : ((inputCol >= 0) ? (inputCol / m_fastInputColStride) : 0);
397 if (inputCol < 0 || inputCol >= m_input_cols_eff ||
398 ((m_col_inflate_strides != 1) && (inputCol != origInputCol * m_col_inflate_strides))) {
399 return Scalar(m_paddingValue);
403 const Index rowIndex = (patch3DIndex - colIndex * m_outputPlanesRows) / m_fastOutputPlanes;
404 const Index rowOffset = (patchOffset - colOffset * m_colStride) / m_fastRowStride;
405 const Index inputRow = rowIndex * m_row_strides + rowOffset * m_in_row_strides - m_rowPaddingTop;
406 const Index origInputRow =
407 (m_row_inflate_strides == 1) ? inputRow : ((inputRow >= 0) ? (inputRow / m_fastInputRowStride) : 0);
408 if (inputRow < 0 || inputRow >= m_input_rows_eff ||
409 ((m_row_inflate_strides != 1) && (inputRow != origInputRow * m_row_inflate_strides))) {
410 return Scalar(m_paddingValue);
414 const Index planeIndex = (patch3DIndex - m_outputPlanes * (colIndex * m_outputRows + rowIndex));
415 const Index planeOffset = patchOffset - colOffset * m_colStride - rowOffset * m_rowStride;
416 const Index inputPlane = planeIndex * m_plane_strides + planeOffset * m_in_plane_strides - m_planePaddingTop;
417 const Index origInputPlane =
418 (m_plane_inflate_strides == 1) ? inputPlane : ((inputPlane >= 0) ? (inputPlane / m_fastInputPlaneStride) : 0);
419 if (inputPlane < 0 || inputPlane >= m_input_planes_eff ||
420 ((m_plane_inflate_strides != 1) && (inputPlane != origInputPlane * m_plane_inflate_strides))) {
421 return Scalar(m_paddingValue);
424 const int depth_index =
static_cast<int>(
Layout) ==
static_cast<int>(
ColMajor) ? 0 : NumDims - 1;
425 const Index depth = index - (index / m_fastOutputDepth) * m_dimensions[depth_index];
427 const Index inputIndex = depth + origInputRow * m_rowInputStride + origInputCol * m_colInputStride +
428 origInputPlane * m_planeInputStride + otherIndex * m_otherInputStride;
430 return m_impl.coeff(inputIndex);
433 template <
int LoadMode>
437 if (m_in_row_strides != 1 || m_in_col_strides != 1 || m_row_inflate_strides != 1 || m_col_inflate_strides != 1 ||
438 m_in_plane_strides != 1 || m_plane_inflate_strides != 1) {
439 return packetWithPossibleZero(index);
443 const Index patchIndex = indices[0] / m_fastPatchStride;
444 if (patchIndex != indices[1] / m_fastPatchStride) {
445 return packetWithPossibleZero(index);
447 const Index otherIndex = (NumDims == 5) ? 0 : indices[0] / m_fastOtherStride;
448 eigen_assert(otherIndex == indices[1] / m_fastOtherStride);
451 const Index patchOffsets[2] = {(indices[0] - patchIndex * m_patchStride) / m_fastOutputDepth,
452 (indices[1] - patchIndex * m_patchStride) / m_fastOutputDepth};
454 const Index patch3DIndex =
455 (NumDims == 5) ? patchIndex : (indices[0] - otherIndex * m_otherStride) / m_fastPatchStride;
456 eigen_assert(patch3DIndex == (indices[1] - otherIndex * m_otherStride) / m_fastPatchStride);
458 const Index colIndex = patch3DIndex / m_fastOutputPlanesRows;
459 const Index colOffsets[2] = {patchOffsets[0] / m_fastColStride, patchOffsets[1] / m_fastColStride};
462 const Index inputCols[2] = {colIndex * m_col_strides + colOffsets[0] - m_colPaddingLeft,
463 colIndex * m_col_strides + colOffsets[1] - m_colPaddingLeft};
464 if (inputCols[1] < 0 || inputCols[0] >= m_inputCols) {
465 return internal::pset1<PacketReturnType>(
Scalar(m_paddingValue));
468 if (inputCols[0] != inputCols[1]) {
469 return packetWithPossibleZero(index);
472 const Index rowIndex = (patch3DIndex - colIndex * m_outputPlanesRows) / m_fastOutputPlanes;
473 const Index rowOffsets[2] = {(patchOffsets[0] - colOffsets[0] * m_colStride) / m_fastRowStride,
474 (patchOffsets[1] - colOffsets[1] * m_colStride) / m_fastRowStride};
477 const Index inputRows[2] = {rowIndex * m_row_strides + rowOffsets[0] - m_rowPaddingTop,
478 rowIndex * m_row_strides + rowOffsets[1] - m_rowPaddingTop};
480 if (inputRows[1] < 0 || inputRows[0] >= m_inputRows) {
481 return internal::pset1<PacketReturnType>(
Scalar(m_paddingValue));
484 if (inputRows[0] != inputRows[1]) {
485 return packetWithPossibleZero(index);
488 const Index planeIndex = (patch3DIndex - m_outputPlanes * (colIndex * m_outputRows + rowIndex));
489 const Index planeOffsets[2] = {patchOffsets[0] - colOffsets[0] * m_colStride - rowOffsets[0] * m_rowStride,
490 patchOffsets[1] - colOffsets[1] * m_colStride - rowOffsets[1] * m_rowStride};
492 const Index inputPlanes[2] = {planeIndex * m_plane_strides + planeOffsets[0] - m_planePaddingTop,
493 planeIndex * m_plane_strides + planeOffsets[1] - m_planePaddingTop};
495 if (inputPlanes[1] < 0 || inputPlanes[0] >= m_inputPlanes) {
496 return internal::pset1<PacketReturnType>(
Scalar(m_paddingValue));
499 if (inputPlanes[0] >= 0 && inputPlanes[1] < m_inputPlanes) {
501 const int depth_index =
static_cast<int>(
Layout) ==
static_cast<int>(
ColMajor) ? 0 : NumDims - 1;
502 const Index depth = index - (index / m_fastOutputDepth) * m_dimensions[depth_index];
503 const Index inputIndex = depth + inputRows[0] * m_rowInputStride + inputCols[0] * m_colInputStride +
504 m_planeInputStride * inputPlanes[0] + otherIndex * m_otherInputStride;
505 return m_impl.template packet<Unaligned>(inputIndex);
508 return packetWithPossibleZero(index);
512 const double compute_cost =
513 10 * TensorOpCost::DivCost<Index>() + 21 * TensorOpCost::MulCost<Index>() + 8 * TensorOpCost::AddCost<Index>();
int i
Definition: BiCGSTAB_step_by_step.cpp:9
#define EIGEN_UNROLL_LOOP
Definition: Macros.h:1298
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define eigen_assert(x)
Definition: Macros.h:910
#define EIGEN_STRONG_INLINE
Definition: Macros.h:834
#define EIGEN_STATIC_ASSERT(X, MSG)
Definition: StaticAssert.h:26
Generic expression where a coefficient-wise binary operator is applied to two expressions.
Definition: CwiseBinaryOp.h:79
The tensor base class.
Definition: TensorBase.h:1026
Definition: TensorCostModel.h:28
Definition: TensorVolumePatch.h:56
EIGEN_DEVICE_FUNC DenseIndex plane_strides() const
Definition: TensorVolumePatch.h:126
const DenseIndex m_plane_strides
Definition: TensorVolumePatch.h:152
EIGEN_DEVICE_FUNC DenseIndex in_row_strides() const
Definition: TensorVolumePatch.h:130
XprType::CoeffReturnType CoeffReturnType
Definition: TensorVolumePatch.h:60
const DenseIndex m_patch_planes
Definition: TensorVolumePatch.h:149
const DenseIndex m_row_inflate_strides
Definition: TensorVolumePatch.h:159
const DenseIndex m_patch_rows
Definition: TensorVolumePatch.h:150
EIGEN_DEVICE_FUNC DenseIndex padding_top() const
Definition: TensorVolumePatch.h:138
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorVolumePatchOp(const XprType &expr, DenseIndex patch_planes, DenseIndex patch_rows, DenseIndex patch_cols, DenseIndex plane_strides, DenseIndex row_strides, DenseIndex col_strides, DenseIndex in_plane_strides, DenseIndex in_row_strides, DenseIndex in_col_strides, DenseIndex plane_inflate_strides, DenseIndex row_inflate_strides, DenseIndex col_inflate_strides, DenseIndex padding_top_z, DenseIndex padding_bottom_z, DenseIndex padding_top, DenseIndex padding_bottom, DenseIndex padding_left, DenseIndex padding_right, Scalar padding_value)
Definition: TensorVolumePatch.h:93
const DenseIndex m_row_strides
Definition: TensorVolumePatch.h:153
EIGEN_DEVICE_FUNC DenseIndex plane_inflate_strides() const
Definition: TensorVolumePatch.h:132
Eigen::internal::traits< TensorVolumePatchOp >::Index Index
Definition: TensorVolumePatch.h:63
EIGEN_DEVICE_FUNC DenseIndex col_strides() const
Definition: TensorVolumePatch.h:128
const DenseIndex m_padding_bottom_z
Definition: TensorVolumePatch.h:163
EIGEN_DEVICE_FUNC DenseIndex patch_planes() const
Definition: TensorVolumePatch.h:123
const DenseIndex m_plane_inflate_strides
Definition: TensorVolumePatch.h:158
const DenseIndex m_in_row_strides
Definition: TensorVolumePatch.h:156
const DenseIndex m_col_strides
Definition: TensorVolumePatch.h:154
Eigen::internal::nested< TensorVolumePatchOp >::type Nested
Definition: TensorVolumePatch.h:61
const PaddingType m_padding_type
Definition: TensorVolumePatch.h:168
EIGEN_DEVICE_FUNC PaddingType padding_type() const
Definition: TensorVolumePatch.h:142
const DenseIndex m_padding_right
Definition: TensorVolumePatch.h:167
const DenseIndex m_padding_bottom
Definition: TensorVolumePatch.h:165
EIGEN_DEVICE_FUNC DenseIndex in_plane_strides() const
Definition: TensorVolumePatch.h:129
EIGEN_DEVICE_FUNC DenseIndex row_inflate_strides() const
Definition: TensorVolumePatch.h:133
Eigen::NumTraits< Scalar >::Real RealScalar
Definition: TensorVolumePatch.h:59
EIGEN_DEVICE_FUNC bool padding_explicit() const
Definition: TensorVolumePatch.h:135
EIGEN_DEVICE_FUNC DenseIndex row_strides() const
Definition: TensorVolumePatch.h:127
const DenseIndex m_padding_left
Definition: TensorVolumePatch.h:166
const DenseIndex m_padding_top
Definition: TensorVolumePatch.h:164
const Scalar m_padding_value
Definition: TensorVolumePatch.h:169
EIGEN_DEVICE_FUNC DenseIndex padding_top_z() const
Definition: TensorVolumePatch.h:136
EIGEN_DEVICE_FUNC DenseIndex padding_right() const
Definition: TensorVolumePatch.h:141
Eigen::internal::traits< TensorVolumePatchOp >::Scalar Scalar
Definition: TensorVolumePatch.h:58
EIGEN_DEVICE_FUNC DenseIndex padding_bottom() const
Definition: TensorVolumePatch.h:139
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorVolumePatchOp(const XprType &expr, DenseIndex patch_planes, DenseIndex patch_rows, DenseIndex patch_cols, DenseIndex plane_strides, DenseIndex row_strides, DenseIndex col_strides, DenseIndex in_plane_strides, DenseIndex in_row_strides, DenseIndex in_col_strides, DenseIndex plane_inflate_strides, DenseIndex row_inflate_strides, DenseIndex col_inflate_strides, PaddingType padding_type, Scalar padding_value)
Definition: TensorVolumePatch.h:65
XprType::Nested m_xpr
Definition: TensorVolumePatch.h:148
Eigen::internal::traits< TensorVolumePatchOp >::StorageKind StorageKind
Definition: TensorVolumePatch.h:62
const DenseIndex m_col_inflate_strides
Definition: TensorVolumePatch.h:160
EIGEN_DEVICE_FUNC DenseIndex in_col_strides() const
Definition: TensorVolumePatch.h:131
const DenseIndex m_patch_cols
Definition: TensorVolumePatch.h:151
EIGEN_DEVICE_FUNC DenseIndex padding_left() const
Definition: TensorVolumePatch.h:140
const DenseIndex m_in_col_strides
Definition: TensorVolumePatch.h:157
EIGEN_DEVICE_FUNC DenseIndex patch_cols() const
Definition: TensorVolumePatch.h:125
EIGEN_DEVICE_FUNC DenseIndex col_inflate_strides() const
Definition: TensorVolumePatch.h:134
EIGEN_DEVICE_FUNC DenseIndex patch_rows() const
Definition: TensorVolumePatch.h:124
const DenseIndex m_padding_top_z
Definition: TensorVolumePatch.h:162
EIGEN_DEVICE_FUNC const internal::remove_all_t< typename XprType::Nested > & expression() const
Definition: TensorVolumePatch.h:145
const DenseIndex m_in_plane_strides
Definition: TensorVolumePatch.h:155
EIGEN_DEVICE_FUNC Scalar padding_value() const
Definition: TensorVolumePatch.h:143
EIGEN_DEVICE_FUNC DenseIndex padding_bottom_z() const
Definition: TensorVolumePatch.h:137
const bool m_padding_explicit
Definition: TensorVolumePatch.h:161
Definition: TensorBlock.h:566
@ ColMajor
Definition: Constants.h:318
char char * op
Definition: level2_impl.h:374
typename remove_all< T >::type remove_all_t
Definition: Meta.h:142
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar() ceil(const Scalar &x)
Definition: MathFunctions.h:1205
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
squared absolute value
Definition: GlobalFunctions.h:87
PaddingType
Definition: TensorTraits.h:227
@ PADDING_VALID
Definition: TensorTraits.h:227
@ PADDING_SAME
Definition: TensorTraits.h:227
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
EIGEN_DEFAULT_DENSE_INDEX_TYPE DenseIndex
Definition: Meta.h:75
Definition: Eigen_Colamd.h:49
Definition: Constants.h:519
T Real
Definition: NumTraits.h:183
Definition: TensorMeta.h:47
Definition: TensorForwardDeclarations.h:42
EIGEN_DEVICE_FUNC EvaluatorPointerType data() const
Definition: TensorVolumePatch.h:517
XprType::CoeffReturnType CoeffReturnType
Definition: TensorVolumePatch.h:182
internal::TensorIntDivisor< Index > m_fastPatchStride
Definition: TensorVolumePatch.h:601
Index m_row_strides
Definition: TensorVolumePatch.h:552
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index userInRowStride() const
Definition: TensorVolumePatch.h:531
internal::TensorIntDivisor< Index > m_fastOutputDepth
Definition: TensorVolumePatch.h:610
internal::TensorIntDivisor< Index > m_fastInputRowStride
Definition: TensorVolumePatch.h:605
internal::TensorIntDivisor< Index > m_fastInputColStride
Definition: TensorVolumePatch.h:606
Index m_patchStride
Definition: TensorVolumePatch.h:590
Index m_plane_inflate_strides
Definition: TensorVolumePatch.h:567
internal::TensorIntDivisor< Index > m_fastInputPlaneStride
Definition: TensorVolumePatch.h:604
Index m_colPaddingLeft
Definition: TensorVolumePatch.h:561
const TensorEvaluator< ArgType, Device > & impl() const
Definition: TensorVolumePatch.h:519
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index userColStride() const
Definition: TensorVolumePatch.h:529
Index m_input_planes_eff
Definition: TensorVolumePatch.h:581
Index m_otherStride
Definition: TensorVolumePatch.h:589
Dimensions m_dimensions
Definition: TensorVolumePatch.h:548
Index m_in_col_strides
Definition: TensorVolumePatch.h:565
Index m_input_cols_eff
Definition: TensorVolumePatch.h:583
std::remove_const_t< typename XprType::Scalar > Scalar
Definition: TensorVolumePatch.h:181
Index m_colInputStride
Definition: TensorVolumePatch.h:597
Index m_otherInputStride
Definition: TensorVolumePatch.h:598
Index m_in_row_strides
Definition: TensorVolumePatch.h:564
Index m_planeInputStride
Definition: TensorVolumePatch.h:595
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index userRowStride() const
Definition: TensorVolumePatch.h:528
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketReturnType packetWithPossibleZero(Index index) const
Definition: TensorVolumePatch.h:538
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index outputCols() const
Definition: TensorVolumePatch.h:526
DSizes< Index, NumDims > Dimensions
Definition: TensorVolumePatch.h:180
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index colInflateStride() const
Definition: TensorVolumePatch.h:535
Index m_colStride
Definition: TensorVolumePatch.h:592
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index planeInflateStride() const
Definition: TensorVolumePatch.h:533
EIGEN_STRONG_INLINE TensorEvaluator(const XprType &op, const Device &device)
Definition: TensorVolumePatch.h:202
Index m_rowPaddingTop
Definition: TensorVolumePatch.h:560
EIGEN_STRONG_INLINE void cleanup()
Definition: TensorVolumePatch.h:377
Index m_patch_planes_eff
Definition: TensorVolumePatch.h:584
TensorEvaluator< ArgType, Device > m_impl
Definition: TensorVolumePatch.h:614
Index m_row_inflate_strides
Definition: TensorVolumePatch.h:568
Index m_in_plane_strides
Definition: TensorVolumePatch.h:563
Index m_outputPlanesRows
Definition: TensorVolumePatch.h:578
XprType::Index Index
Definition: TensorVolumePatch.h:176
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index userInPlaneStride() const
Definition: TensorVolumePatch.h:530
PacketType< CoeffReturnType, Device >::type PacketReturnType
Definition: TensorVolumePatch.h:183
internal::TensorIntDivisor< Index > m_fastRowStride
Definition: TensorVolumePatch.h:603
StorageMemory< CoeffReturnType, Device > Storage
Definition: TensorVolumePatch.h:185
Index m_outputPlanes
Definition: TensorVolumePatch.h:555
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index userInColStride() const
Definition: TensorVolumePatch.h:532
Index m_plane_strides
Definition: TensorVolumePatch.h:551
Index m_patch_rows_eff
Definition: TensorVolumePatch.h:585
Index m_inputCols
Definition: TensorVolumePatch.h:575
internal::TensorIntDivisor< Index > m_fastOutputPlanes
Definition: TensorVolumePatch.h:609
Index m_inputPlanes
Definition: TensorVolumePatch.h:573
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index userPlaneStride() const
Definition: TensorVolumePatch.h:527
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const
Definition: TensorVolumePatch.h:511
EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType)
Definition: TensorVolumePatch.h:365
Storage::Type EvaluatorPointerType
Definition: TensorVolumePatch.h:186
internal::TensorIntDivisor< Index > m_fastOtherStride
Definition: TensorVolumePatch.h:600
internal::TensorIntDivisor< Index > m_fastOutputPlanesRows
Definition: TensorVolumePatch.h:608
Scalar m_paddingValue
Definition: TensorVolumePatch.h:612
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index outputPlanes() const
Definition: TensorVolumePatch.h:524
Index m_patch_cols_eff
Definition: TensorVolumePatch.h:586
Index m_col_inflate_strides
Definition: TensorVolumePatch.h:569
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index rowPaddingTop() const
Definition: TensorVolumePatch.h:522
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index colPaddingLeft() const
Definition: TensorVolumePatch.h:523
Index m_rowInputStride
Definition: TensorVolumePatch.h:596
Index m_planePaddingTop
Definition: TensorVolumePatch.h:559
internal::TensorIntDivisor< Index > m_fastInputColsEff
Definition: TensorVolumePatch.h:607
internal::TensorIntDivisor< Index > m_fastColStride
Definition: TensorVolumePatch.h:602
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index rowInflateStride() const
Definition: TensorVolumePatch.h:534
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
Definition: TensorVolumePatch.h:434
Index m_outputCols
Definition: TensorVolumePatch.h:557
internal::TensorBlockNotImplemented TensorBlock
Definition: TensorVolumePatch.h:199
Index m_input_rows_eff
Definition: TensorVolumePatch.h:582
Index m_outputRows
Definition: TensorVolumePatch.h:556
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Dimensions & dimensions() const
Definition: TensorVolumePatch.h:363
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index planePaddingTop() const
Definition: TensorVolumePatch.h:521
Index m_col_strides
Definition: TensorVolumePatch.h:553
TensorVolumePatchOp< Planes, Rows, Cols, ArgType > XprType
Definition: TensorVolumePatch.h:175
Index m_inputDepth
Definition: TensorVolumePatch.h:572
Index m_inputRows
Definition: TensorVolumePatch.h:574
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const
Definition: TensorVolumePatch.h:379
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index outputRows() const
Definition: TensorVolumePatch.h:525
Index m_rowStride
Definition: TensorVolumePatch.h:591
A cost model used to limit the number of threads used for evaluating tensor expression.
Definition: TensorEvaluator.h:31
static constexpr int Layout
Definition: TensorEvaluator.h:46
Derived::Scalar Scalar
Definition: TensorEvaluator.h:33
Storage::Type EvaluatorPointerType
Definition: TensorEvaluator.h:41
@ PacketAccess
Definition: TensorEvaluator.h:50
@ IsAligned
Definition: TensorEvaluator.h:49
static constexpr int PacketSize
Definition: TensorEvaluator.h:38
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const
Definition: TensorEvaluator.h:89
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Dimensions & dimensions() const
Definition: TensorEvaluator.h:69
const TensorVolumePatchOp< Planes, Rows, Cols, XprType > & type
Definition: TensorVolumePatch.h:44
Definition: XprHelper.h:427
TensorVolumePatchOp< Planes, Rows, Cols, XprType > type
Definition: TensorVolumePatch.h:50
Definition: TensorTraits.h:152
ref_selector< T >::type type
Definition: TensorTraits.h:153
XprType::Nested Nested
Definition: TensorVolumePatch.h:35
traits< XprType > XprTraits
Definition: TensorVolumePatch.h:32
XprTraits::StorageKind StorageKind
Definition: TensorVolumePatch.h:33
XprTraits::PointerType PointerType
Definition: TensorVolumePatch.h:39
std::remove_const_t< typename XprType::Scalar > Scalar
Definition: TensorVolumePatch.h:31
std::remove_reference_t< Nested > Nested_
Definition: TensorVolumePatch.h:36
XprTraits::Index Index
Definition: TensorVolumePatch.h:34
Definition: ForwardDeclarations.h:21