* Copyright (c) 2025 Huawei Technologies Co., Ltd.
* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
* CANN Open Software License Agreement Version 2.0 (the "License").
* Please refer to the License for details. You may not use this file except in compliance with the License.
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
* See LICENSE in the root of the software repository for the full text of the License.
*/
* \file slice_struct.h
* \brief slice struct
*/
#ifndef SLICE_TILINGDATA_H_
#define SLICE_TILINGDATA_H_
#include <cstdint>
constexpr int64_t MAX_AXIS_NUM_FOR_STRIDESLICE = 8;
constexpr int64_t MAX_NDDMA_UB_SPLIT_AXIS_NUM = 5;
constexpr int64_t MAX_SIMT_UB_SPLIT_AXIS_NUM = 8;
constexpr int64_t NUMBER_TWO = 2;
struct SliceBaseTilingData {
int8_t isBeginConst;
int64_t blkFactor;
int64_t blkTailFactor;
int64_t ubInLoopSteps;
int32_t ubSize;
int32_t ubFactor;
int32_t ubTailFactor;
int32_t ubTailTailFactor;
int16_t realCoreNum;
int16_t inputDims;
int16_t blkIndex;
int16_t ubIndex;
int64_t outputShape[MAX_AXIS_NUM_FOR_STRIDESLICE];
int64_t begin[MAX_AXIS_NUM_FOR_STRIDESLICE];
int64_t inputSteps[MAX_AXIS_NUM_FOR_STRIDESLICE];
int64_t rowsOffsetSteps[MAX_AXIS_NUM_FOR_STRIDESLICE];
};
struct StridedSliceMoveAlignParams2 {
uint16_t blockCount;
uint32_t blockLen;
uint32_t srcStride;
uint32_t dstStride;
uint16_t loop1Size;
uint16_t loop2Size;
uint32_t loop1SrcStride;
uint16_t loop1DstStride;
uint32_t loop2SrcStride;
uint16_t loop2DstStride;
};
struct SliceMoveAlignLastDimTilingData {
SliceBaseTilingData sliceBaseTilingData;
};
struct SliceMoveAlignParams {
uint16_t blockCount;
uint32_t blockLen;
uint32_t srcStride;
uint32_t dstStride;
};
struct SliceMoveAlignLast2DimTilingData {
int64_t blkFactor;
int64_t blkTailFactor;
int64_t ubInLoopSteps;
int64_t ubOutLoopSteps;
int32_t ubSize;
int32_t ubFactor;
int32_t ubTailFactor;
int32_t ubTailTailFactor;
int16_t realCoreNum;
int8_t isBeginConst;
SliceMoveAlignParams moveAlignParams;
int64_t outputShape[NUMBER_TWO];
int64_t begin[NUMBER_TWO];
int64_t inputSteps[NUMBER_TWO];
};
struct SliceMoveAlignGatherTilingData {
SliceBaseTilingData sliceBaseTilingData;
int64_t ubOutLoopSteps;
int32_t ubSizeInput;
uint32_t lastOneInputDim;
uint32_t outBlockLen;
StridedSliceMoveAlignParams2 moveAlignParams;
};
struct StridedSliceTilingData2 {
int64_t ubSize;
int64_t ubSizeInput;
int64_t coreNum;
int64_t ubIndex;
int64_t ubFactor;
int64_t ubTailFactor;
int64_t ubTailTailFactor;
int64_t realCoreNum;
int64_t inputDims;
int64_t blkIndex;
int64_t blkFactor;
int64_t blkTailFactor;
int64_t xDtypeSize;
int64_t tilingKey;
int64_t nddmaTotalNum;
int64_t ubInLoopSteps;
int64_t ubOutLoopSteps;
uint32_t isShapeExceedUint32;
uint32_t isEmptyTensor;
int8_t isBeginConst;
StridedSliceMoveAlignParams2 moveAlignParams;
int64_t outputShape[MAX_AXIS_NUM_FOR_STRIDESLICE];
int64_t begin[MAX_AXIS_NUM_FOR_STRIDESLICE];
int64_t strides[MAX_AXIS_NUM_FOR_STRIDESLICE];
int64_t rowsOffsetSteps[MAX_AXIS_NUM_FOR_STRIDESLICE];
int64_t inputSteps[MAX_AXIS_NUM_FOR_STRIDESLICE];
int64_t nddmaLoopSize[MAX_NDDMA_UB_SPLIT_AXIS_NUM];
int64_t nddmaLoopSrcStride[MAX_NDDMA_UB_SPLIT_AXIS_NUM];
int64_t nddmaLoopDstStride[MAX_NDDMA_UB_SPLIT_AXIS_NUM];
int64_t outputShapeProd[MAX_SIMT_UB_SPLIT_AXIS_NUM];
int64_t inputShapeProd[MAX_SIMT_UB_SPLIT_AXIS_NUM];
};
struct SliceTilingData {
StridedSliceTilingData2 stridedSliceTilingData;
};
struct SliceMoveAlignTilingData {
SliceBaseTilingData sliceBaseTilingData;
StridedSliceMoveAlignParams2 moveAlignParams;
int64_t ubOutLoopSteps;
};
struct SliceNDDMATilingData {
SliceBaseTilingData sliceBaseTilingData;
int64_t ubOutLoopSteps;
int64_t nddmaTotalNum;
int64_t nddmaLoopSize[MAX_NDDMA_UB_SPLIT_AXIS_NUM];
int64_t nddmaLoopSrcStride[MAX_NDDMA_UB_SPLIT_AXIS_NUM];
int64_t nddmaLoopDstStride[MAX_NDDMA_UB_SPLIT_AXIS_NUM];
};
struct SliceNDDMALastDimTilingData {
SliceBaseTilingData sliceBaseTilingData;
int64_t nddmaLoopSrcStride[MAX_NDDMA_UB_SPLIT_AXIS_NUM];
int64_t nddmaLoopDstStride[MAX_NDDMA_UB_SPLIT_AXIS_NUM];
};
struct SliceTwoDimSmallSapeTilingData {
int8_t isBeginConst;
int16_t realCoreNum;
int16_t mainCoreNum;
uint32_t ubSize;
uint32_t blockLen;
uint32_t blkFactor;
uint64_t lastOneInputDim;
uint64_t lastOneOutputDim;
uint64_t lastOneDimOffset;
};
#endif